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

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--3rdparty/Crypt_Blowfish/Blowfish.php2
-rw-r--r--3rdparty/Dropbox/API.php380
-rw-r--r--3rdparty/Dropbox/Exception.php15
-rw-r--r--3rdparty/Dropbox/Exception/Forbidden.php18
-rw-r--r--3rdparty/Dropbox/Exception/NotFound.php20
-rw-r--r--3rdparty/Dropbox/Exception/OverQuota.php20
-rw-r--r--3rdparty/Dropbox/Exception/RequestToken.php18
-rw-r--r--3rdparty/Dropbox/LICENSE.txt19
-rw-r--r--3rdparty/Dropbox/OAuth.php151
-rw-r--r--3rdparty/Dropbox/OAuth/Consumer/Dropbox.php37
-rw-r--r--3rdparty/Dropbox/OAuth/Curl.php282
-rw-r--r--3rdparty/Dropbox/README.md31
-rw-r--r--3rdparty/Dropbox/autoload.php29
-rw-r--r--3rdparty/Google/LICENSE.txt21
-rwxr-xr-x3rdparty/Google/OAuth.php751
-rwxr-xr-x3rdparty/Google/common.inc.php185
-rw-r--r--3rdparty/MDB2/Schema/Parser.php27
-rw-r--r--3rdparty/MDB2/Schema/Parser2.php27
-rw-r--r--3rdparty/MDB2/Schema/Validate.php22
-rw-r--r--3rdparty/MDB2/Schema/Writer.php16
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre.includes.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/Backend/Abstract.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/Backend/PDO.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/Calendar.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/CalendarObject.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/CalendarQueryParser.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/CalendarQueryValidator.php39
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/CalendarRootNode.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/ICSExportPlugin.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/ICalendar.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/ICalendarObject.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/Plugin.php146
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/Principal/Collection.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/Principal/ProxyRead.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/Principal/ProxyWrite.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/Principal/User.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/Property/SupportedCalendarComponentSet.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/Property/SupportedCalendarData.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/Property/SupportedCollationSet.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/Schedule/IMip.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/Schedule/IOutbox.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/Schedule/Outbox.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/Server.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/UserCalendars.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/Version.php2
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CalDAV/includes.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CardDAV/AddressBook.php4
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CardDAV/AddressBookQueryParser.php18
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CardDAV/AddressBookRoot.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CardDAV/Backend/Abstract.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CardDAV/Backend/PDO.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CardDAV/Card.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CardDAV/IAddressBook.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CardDAV/ICard.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CardDAV/IDirectory.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CardDAV/Plugin.php81
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CardDAV/Property/SupportedAddressData.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CardDAV/UserAddressBooks.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CardDAV/Version.php2
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/CardDAV/includes.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Auth/Backend/AbstractBasic.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Auth/Backend/AbstractDigest.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Auth/Backend/Apache.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Auth/Backend/File.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Auth/Backend/PDO.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Auth/IBackend.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Auth/Plugin.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Browser/GuessContentType.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Browser/MapGetToPropFind.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Browser/Plugin.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Browser/assets/favicon.icobin4286 -> 4286 bytes
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Browser/assets/icons/addressbook.pngbin7232 -> 7232 bytes
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Browser/assets/icons/calendar.pngbin4388 -> 4388 bytes
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Browser/assets/icons/card.pngbin5695 -> 5695 bytes
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Browser/assets/icons/collection.pngbin3474 -> 3474 bytes
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Browser/assets/icons/file.pngbin2837 -> 2837 bytes
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Browser/assets/icons/parent.pngbin3474 -> 3474 bytes
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Browser/assets/icons/principal.pngbin5480 -> 5480 bytes
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Client.php46
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Collection.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Directory.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Exception.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Exception/BadRequest.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Exception/Conflict.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Exception/ConflictingLock.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Exception/FileNotFound.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Exception/Forbidden.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Exception/InsufficientStorage.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Exception/InvalidResourceType.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Exception/LockTokenMatchesRequestUri.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Exception/Locked.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Exception/MethodNotAllowed.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Exception/NotAuthenticated.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Exception/NotFound.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Exception/NotImplemented.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Exception/PaymentRequired.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Exception/PreconditionFailed.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Exception/ReportNotImplemented.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Exception/RequestedRangeNotSatisfiable.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Exception/UnsupportedMediaType.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/FS/Directory.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/FS/File.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/FS/Node.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/FSExt/Directory.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/FSExt/File.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/FSExt/Node.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/File.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/ICollection.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/IExtendedCollection.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/IFile.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/INode.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/IProperties.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/IQuota.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Locks/Backend/Abstract.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Locks/Backend/FS.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Locks/Backend/File.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Locks/Backend/PDO.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Locks/LockInfo.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Locks/Plugin.php5
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Mount/Plugin.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Node.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/ObjectTree.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Property.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Property/GetLastModified.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Property/Href.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Property/HrefList.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Property/IHref.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Property/LockDiscovery.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Property/ResourceType.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Property/Response.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Property/ResponseList.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Property/SupportedLock.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Property/SupportedReportSet.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Server.php9
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/ServerPlugin.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/SimpleCollection.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/SimpleDirectory.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/SimpleFile.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/StringUtil.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/TemporaryFileFilterPlugin.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Tree.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Tree/Filesystem.php4
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/URLUtil.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/UUIDUtil.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/Version.php2
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/XMLUtil.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAV/includes.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAVACL/AbstractPrincipalCollection.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAVACL/Exception/AceConflict.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAVACL/Exception/NeedPrivileges.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAVACL/Exception/NoAbstract.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAVACL/Exception/NotRecognizedPrincipal.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAVACL/Exception/NotSupportedPrivilege.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAVACL/IACL.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAVACL/IPrincipal.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAVACL/IPrincipalBackend.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAVACL/Plugin.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAVACL/Principal.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAVACL/PrincipalBackend/PDO.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAVACL/PrincipalCollection.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAVACL/Property/Acl.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAVACL/Property/AclRestrictions.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAVACL/Property/CurrentUserPrivilegeSet.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAVACL/Property/Principal.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAVACL/Property/SupportedPrivilegeSet.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAVACL/Version.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/DAVACL/includes.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/HTTP/AWSAuth.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/HTTP/AbstractAuth.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/HTTP/BasicAuth.php2
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/HTTP/DigestAuth.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/HTTP/Request.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/HTTP/Response.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/HTTP/Util.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/HTTP/Version.php2
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/HTTP/includes.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/Component.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/Component/VAlarm.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/Component/VCalendar.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/Component/VEvent.php15
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/Component/VJournal.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/Component/VTodo.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/DateTimeParser.php4
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/Element.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/Element/DateTime.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/Element/MultiDateTime.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/ElementList.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/FreeBusyGenerator.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/Node.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/Parameter.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/ParseException.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/Property.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/Property/DateTime.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/Property/MultiDateTime.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/Reader.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/RecurrenceIterator.php40
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/Version.php2
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/WindowsTimezoneMap.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/VObject/includes.php0
-rwxr-xr-x[-rw-r--r--]3rdparty/Sabre/autoload.php0
-rw-r--r--3rdparty/aws-sdk/README.md136
-rw-r--r--3rdparty/aws-sdk/_compatibility_test/README.md37
-rw-r--r--3rdparty/aws-sdk/_compatibility_test/sdk_compatibility.inc.php75
-rw-r--r--3rdparty/aws-sdk/_compatibility_test/sdk_compatibility_test.php789
-rwxr-xr-x3rdparty/aws-sdk/_compatibility_test/sdk_compatibility_test_cli.php186
-rw-r--r--3rdparty/aws-sdk/_docs/CHANGELOG.md1405
-rw-r--r--3rdparty/aws-sdk/_docs/CONTRIBUTORS.md64
-rw-r--r--3rdparty/aws-sdk/_docs/DYNAMODBSESSIONHANDLER.html235
-rw-r--r--3rdparty/aws-sdk/_docs/KNOWNISSUES.md65
-rw-r--r--3rdparty/aws-sdk/_docs/LICENSE.md151
-rw-r--r--3rdparty/aws-sdk/_docs/NOTICE.md444
-rw-r--r--3rdparty/aws-sdk/_docs/STREAMWRAPPER_README.html243
-rw-r--r--3rdparty/aws-sdk/_docs/WHERE_IS_THE_API_REFERENCE.md2
-rw-r--r--3rdparty/aws-sdk/authentication/signable.interface.php48
-rw-r--r--3rdparty/aws-sdk/authentication/signature_v2query.class.php163
-rw-r--r--3rdparty/aws-sdk/authentication/signature_v3json.class.php235
-rw-r--r--3rdparty/aws-sdk/authentication/signature_v3query.class.php192
-rw-r--r--3rdparty/aws-sdk/authentication/signature_v4json.class.php353
-rw-r--r--3rdparty/aws-sdk/authentication/signature_v4query.class.php345
-rw-r--r--3rdparty/aws-sdk/authentication/signer.abstract.php68
-rwxr-xr-x3rdparty/aws-sdk/lib/cachecore/LICENSE25
-rwxr-xr-x3rdparty/aws-sdk/lib/cachecore/README1
-rwxr-xr-x3rdparty/aws-sdk/lib/cachecore/_sql/README5
-rwxr-xr-x3rdparty/aws-sdk/lib/cachecore/_sql/mysql.sql7
-rwxr-xr-x3rdparty/aws-sdk/lib/cachecore/_sql/pgsql.sql6
-rwxr-xr-x3rdparty/aws-sdk/lib/cachecore/_sql/sqlite3.sql2
-rwxr-xr-x3rdparty/aws-sdk/lib/cachecore/cacheapc.class.php126
-rwxr-xr-x3rdparty/aws-sdk/lib/cachecore/cachecore.class.php160
-rwxr-xr-x3rdparty/aws-sdk/lib/cachecore/cachefile.class.php189
-rwxr-xr-x3rdparty/aws-sdk/lib/cachecore/cachemc.class.php183
-rwxr-xr-x3rdparty/aws-sdk/lib/cachecore/cachepdo.class.php297
-rwxr-xr-x3rdparty/aws-sdk/lib/cachecore/cachexcache.class.php129
-rwxr-xr-x3rdparty/aws-sdk/lib/cachecore/icachecore.interface.php66
-rw-r--r--3rdparty/aws-sdk/lib/dom/ArrayToDOMDocument.php181
-rwxr-xr-x3rdparty/aws-sdk/lib/requestcore/LICENSE25
-rwxr-xr-x3rdparty/aws-sdk/lib/requestcore/README.md15
-rwxr-xr-x3rdparty/aws-sdk/lib/requestcore/cacert.pem3390
-rwxr-xr-x3rdparty/aws-sdk/lib/requestcore/requestcore.class.php1028
-rw-r--r--3rdparty/aws-sdk/lib/yaml/LICENSE19
-rw-r--r--3rdparty/aws-sdk/lib/yaml/README.markdown15
-rw-r--r--3rdparty/aws-sdk/lib/yaml/lib/sfYaml.php135
-rw-r--r--3rdparty/aws-sdk/lib/yaml/lib/sfYamlDumper.php60
-rw-r--r--3rdparty/aws-sdk/lib/yaml/lib/sfYamlInline.php442
-rw-r--r--3rdparty/aws-sdk/lib/yaml/lib/sfYamlParser.php612
-rwxr-xr-x3rdparty/aws-sdk/sdk.class.php1435
-rwxr-xr-x3rdparty/aws-sdk/services/s3.class.php3979
-rw-r--r--3rdparty/aws-sdk/utilities/array.class.php312
-rw-r--r--3rdparty/aws-sdk/utilities/batchrequest.class.php126
-rw-r--r--3rdparty/aws-sdk/utilities/complextype.class.php123
-rw-r--r--3rdparty/aws-sdk/utilities/credential.class.php157
-rw-r--r--3rdparty/aws-sdk/utilities/credentials.class.php125
-rw-r--r--3rdparty/aws-sdk/utilities/gzipdecode.class.php377
-rw-r--r--3rdparty/aws-sdk/utilities/hadoopbase.class.php67
-rw-r--r--3rdparty/aws-sdk/utilities/hadoopbootstrap.class.php127
-rw-r--r--3rdparty/aws-sdk/utilities/hadoopstep.class.php98
-rw-r--r--3rdparty/aws-sdk/utilities/info.class.php69
-rw-r--r--3rdparty/aws-sdk/utilities/json.class.php89
-rw-r--r--3rdparty/aws-sdk/utilities/manifest.class.php54
-rw-r--r--3rdparty/aws-sdk/utilities/mimetypes.class.php223
-rw-r--r--3rdparty/aws-sdk/utilities/policy.class.php134
-rw-r--r--3rdparty/aws-sdk/utilities/request.class.php70
-rw-r--r--3rdparty/aws-sdk/utilities/response.class.php29
-rw-r--r--3rdparty/aws-sdk/utilities/simplexml.class.php248
-rw-r--r--3rdparty/aws-sdk/utilities/stacktemplate.class.php52
-rw-r--r--3rdparty/aws-sdk/utilities/stepconfig.class.php91
-rwxr-xr-x3rdparty/aws-sdk/utilities/utilities.class.php399
-rw-r--r--3rdparty/mediawiki/CSSMin.php228
-rw-r--r--3rdparty/mediawiki/JavaScriptMinifier.php606
-rw-r--r--3rdparty/miniColors/GPL-LICENSE.txt278
-rw-r--r--3rdparty/miniColors/MIT-LICENSE.txt20
-rwxr-xr-x3rdparty/miniColors/css/images/colors.pngbin0 -> 12485 bytes
-rwxr-xr-x3rdparty/miniColors/css/images/trigger.pngbin0 -> 1406 bytes
-rwxr-xr-x3rdparty/miniColors/css/jquery.miniColors.css81
-rwxr-xr-x3rdparty/miniColors/js/jquery.miniColors.js580
-rwxr-xr-x3rdparty/miniColors/js/jquery.miniColors.min.js9
-rw-r--r--3rdparty/openid/class.openid.v3.php (renamed from apps/user_openid/class.openid.v3.php)2
-rw-r--r--3rdparty/openid/phpmyid.php (renamed from apps/user_openid/phpmyid.php)1
-rw-r--r--3rdparty/when/MIT-LICENSE.txt9
-rw-r--r--3rdparty/when/When.php731
-rw-r--r--apps/admin_audit/appinfo/app.php18
-rw-r--r--apps/admin_audit/appinfo/info.xml11
-rw-r--r--apps/admin_audit/lib/hooks_handlers.php72
-rw-r--r--apps/admin_dependencies_chk/appinfo/app.php5
-rw-r--r--apps/admin_dependencies_chk/l10n/.gitkeep0
-rw-r--r--apps/admin_dependencies_chk/l10n/ca.php14
-rw-r--r--apps/admin_dependencies_chk/l10n/cs_CZ.php14
-rw-r--r--apps/admin_dependencies_chk/l10n/de.php14
-rw-r--r--apps/admin_dependencies_chk/l10n/el.php4
-rw-r--r--apps/admin_dependencies_chk/l10n/eo.php14
-rw-r--r--apps/admin_dependencies_chk/l10n/es.php4
-rw-r--r--apps/admin_dependencies_chk/l10n/et_EE.php14
-rw-r--r--apps/admin_dependencies_chk/l10n/fi_FI.php9
-rw-r--r--apps/admin_dependencies_chk/l10n/fr.php14
-rw-r--r--apps/admin_dependencies_chk/l10n/it.php14
-rw-r--r--apps/admin_dependencies_chk/l10n/ja_JP.php14
-rw-r--r--apps/admin_dependencies_chk/l10n/lt_LT.php14
-rw-r--r--apps/admin_dependencies_chk/l10n/pl.php14
-rw-r--r--apps/admin_dependencies_chk/l10n/sl.php14
-rw-r--r--apps/admin_dependencies_chk/l10n/sv.php14
-rw-r--r--apps/admin_dependencies_chk/l10n/th_TH.php14
-rw-r--r--apps/admin_migrate/l10n/.gitkeep0
-rw-r--r--apps/admin_migrate/l10n/ca.php5
-rw-r--r--apps/admin_migrate/l10n/cs_CZ.php5
-rw-r--r--apps/admin_migrate/l10n/da.php4
-rw-r--r--apps/admin_migrate/l10n/de.php5
-rw-r--r--apps/admin_migrate/l10n/el.php4
-rw-r--r--apps/admin_migrate/l10n/eo.php5
-rw-r--r--apps/admin_migrate/l10n/es.php5
-rw-r--r--apps/admin_migrate/l10n/et_EE.php5
-rw-r--r--apps/admin_migrate/l10n/fi_FI.php4
-rw-r--r--apps/admin_migrate/l10n/fr.php5
-rw-r--r--apps/admin_migrate/l10n/gl.php5
-rw-r--r--apps/admin_migrate/l10n/it.php5
-rw-r--r--apps/admin_migrate/l10n/ja_JP.php5
-rw-r--r--apps/admin_migrate/l10n/lt_LT.php5
-rw-r--r--apps/admin_migrate/l10n/nb_NO.php5
-rw-r--r--apps/admin_migrate/l10n/pl.php5
-rw-r--r--apps/admin_migrate/l10n/sl.php5
-rw-r--r--apps/admin_migrate/l10n/sv.php5
-rw-r--r--apps/admin_migrate/l10n/th_TH.php5
-rw-r--r--apps/bookmarks/ajax/addBookmark.php7
-rw-r--r--apps/bookmarks/ajax/delBookmark.php7
-rw-r--r--apps/bookmarks/ajax/editBookmark.php8
-rw-r--r--apps/bookmarks/ajax/recordClick.php5
-rw-r--r--apps/bookmarks/ajax/updateList.php5
-rw-r--r--apps/bookmarks/appinfo/app.php2
-rw-r--r--apps/bookmarks/bookmarksHelper.php3
-rw-r--r--apps/bookmarks/img/bookmarks.pngbin496 -> 398 bytes
-rw-r--r--apps/bookmarks/l10n/bg_BG.php12
-rw-r--r--apps/bookmarks/l10n/ca.php12
-rw-r--r--apps/bookmarks/l10n/cs_CZ.php12
-rw-r--r--apps/bookmarks/l10n/de.php12
-rw-r--r--apps/bookmarks/l10n/el.php12
-rw-r--r--apps/bookmarks/l10n/eo.php11
-rw-r--r--apps/bookmarks/l10n/es.php12
-rw-r--r--apps/bookmarks/l10n/et_EE.php10
-rw-r--r--apps/bookmarks/l10n/fa.php8
-rw-r--r--apps/bookmarks/l10n/fi_FI.php12
-rw-r--r--apps/bookmarks/l10n/fr.php12
-rw-r--r--apps/bookmarks/l10n/it.php12
-rw-r--r--apps/bookmarks/l10n/lt_LT.php3
-rw-r--r--apps/bookmarks/l10n/nb_NO.php11
-rw-r--r--apps/bookmarks/l10n/sl.php12
-rw-r--r--apps/bookmarks/l10n/sv.php12
-rw-r--r--apps/bookmarks/l10n/th_TH.php12
-rw-r--r--apps/bookmarks/lib/bookmarks.php1
-rw-r--r--apps/bookmarks/templates/addBm.php2
-rw-r--r--apps/bookmarks/templates/list.php4
-rw-r--r--apps/calendar/ajax/cache/rescan.php15
-rw-r--r--apps/calendar/ajax/cache/status.php22
-rw-r--r--apps/calendar/ajax/calendar/activation.php2
-rw-r--r--apps/calendar/ajax/calendar/edit.form.php4
-rw-r--r--apps/calendar/ajax/calendar/new.php10
-rw-r--r--apps/calendar/ajax/calendar/overview.php4
-rw-r--r--apps/calendar/ajax/calendar/update.php8
-rw-r--r--apps/calendar/ajax/categories/rescan.php1
-rw-r--r--apps/calendar/ajax/changeview.php6
-rw-r--r--apps/calendar/ajax/event/edit.form.php2
-rw-r--r--apps/calendar/ajax/event/new.form.php2
-rw-r--r--apps/calendar/ajax/event/resize.php1
-rw-r--r--apps/calendar/ajax/events.php19
-rw-r--r--apps/calendar/ajax/import/calendarcheck.php18
-rw-r--r--apps/calendar/ajax/import/dialog.php2
-rw-r--r--apps/calendar/ajax/import/dropimport.php32
-rw-r--r--apps/calendar/ajax/import/import.php95
-rw-r--r--apps/calendar/ajax/settings/guesstimezone.php6
-rw-r--r--apps/calendar/ajax/settings/setfirstday.php1
-rw-r--r--apps/calendar/ajax/settings/settimeformat.php1
-rw-r--r--apps/calendar/ajax/settings/settimezone.php1
-rw-r--r--apps/calendar/ajax/share/activation.php4
-rw-r--r--apps/calendar/ajax/share/changepermission.php13
-rw-r--r--apps/calendar/ajax/share/dropdown.php2
-rw-r--r--apps/calendar/ajax/share/share.php11
-rw-r--r--apps/calendar/ajax/share/unshare.php11
-rw-r--r--apps/calendar/appinfo/app.php28
-rw-r--r--apps/calendar/appinfo/database.xml52
-rw-r--r--apps/calendar/appinfo/remote.php18
-rw-r--r--apps/calendar/appinfo/update.php7
-rw-r--r--apps/calendar/appinfo/version2
-rw-r--r--apps/calendar/calendar.php12
-rw-r--r--apps/calendar/css/import.css14
-rw-r--r--apps/calendar/css/style.css13
-rw-r--r--apps/calendar/export.php19
-rw-r--r--apps/calendar/img/icon.pngbin423 -> 360 bytes
-rw-r--r--apps/calendar/import_tmp/Info2
-rw-r--r--apps/calendar/index.php27
-rw-r--r--apps/calendar/js/calendar.js140
-rw-r--r--apps/calendar/js/geo.js2
-rw-r--r--apps/calendar/js/loader.js214
-rw-r--r--apps/calendar/js/settings.js29
-rw-r--r--apps/calendar/l10n/ar.php60
-rw-r--r--apps/calendar/l10n/bg_BG.php52
-rw-r--r--apps/calendar/l10n/ca.php64
-rw-r--r--apps/calendar/l10n/cs_CZ.php62
-rw-r--r--apps/calendar/l10n/da.php50
-rw-r--r--apps/calendar/l10n/de.php75
-rw-r--r--apps/calendar/l10n/el.php58
-rw-r--r--apps/calendar/l10n/eo.php64
-rw-r--r--apps/calendar/l10n/es.php56
-rw-r--r--apps/calendar/l10n/et_EE.php20
-rw-r--r--apps/calendar/l10n/eu.php50
-rw-r--r--apps/calendar/l10n/fa.php20
-rw-r--r--apps/calendar/l10n/fi_FI.php47
-rw-r--r--apps/calendar/l10n/fr.php56
-rw-r--r--apps/calendar/l10n/gl.php11
-rw-r--r--apps/calendar/l10n/he.php20
-rw-r--r--apps/calendar/l10n/hr.php14
-rw-r--r--apps/calendar/l10n/hu_HU.php20
-rw-r--r--apps/calendar/l10n/ia.php9
-rw-r--r--apps/calendar/l10n/id.php3
-rw-r--r--apps/calendar/l10n/it.php64
-rw-r--r--apps/calendar/l10n/ja_JP.php107
-rw-r--r--apps/calendar/l10n/ko.php21
-rw-r--r--apps/calendar/l10n/lb.php5
-rw-r--r--apps/calendar/l10n/lt_LT.php9
-rw-r--r--apps/calendar/l10n/mk.php20
-rw-r--r--apps/calendar/l10n/ms_MY.php45
-rw-r--r--apps/calendar/l10n/nb_NO.php5
-rw-r--r--apps/calendar/l10n/nl.php22
-rw-r--r--apps/calendar/l10n/nn_NO.php16
-rw-r--r--apps/calendar/l10n/pl.php42
-rw-r--r--apps/calendar/l10n/pt_BR.php20
-rw-r--r--apps/calendar/l10n/pt_PT.php60
-rw-r--r--apps/calendar/l10n/ro.php9
-rw-r--r--apps/calendar/l10n/ru.php63
-rw-r--r--apps/calendar/l10n/sk_SK.php20
-rw-r--r--apps/calendar/l10n/sl.php62
-rw-r--r--apps/calendar/l10n/sr.php6
-rw-r--r--apps/calendar/l10n/sr@latin.php6
-rw-r--r--apps/calendar/l10n/sv.php52
-rw-r--r--apps/calendar/l10n/th_TH.php62
-rw-r--r--apps/calendar/l10n/tr.php56
-rw-r--r--apps/calendar/l10n/uk.php25
-rw-r--r--apps/calendar/l10n/vi.php131
-rw-r--r--apps/calendar/l10n/zh_CN.GB2312.php121
-rw-r--r--apps/calendar/l10n/zh_CN.php5
-rw-r--r--apps/calendar/l10n/zh_TW.php8
-rw-r--r--apps/calendar/lib/app.php193
-rw-r--r--apps/calendar/lib/calendar.php97
-rw-r--r--apps/calendar/lib/export.php94
-rw-r--r--apps/calendar/lib/import.php336
-rw-r--r--apps/calendar/lib/object.php210
-rw-r--r--apps/calendar/lib/repeat.php204
-rw-r--r--apps/calendar/lib/sabre/backend.php (renamed from apps/calendar/lib/connector_sabre.php)4
-rw-r--r--apps/calendar/lib/sabre/calendar.php127
-rw-r--r--apps/calendar/lib/sabre/calendarroot.php45
-rw-r--r--apps/calendar/lib/sabre/object.php87
-rw-r--r--apps/calendar/lib/sabre/usercalendars.php46
-rw-r--r--apps/calendar/lib/search.php4
-rw-r--r--apps/calendar/lib/share.php157
-rw-r--r--apps/calendar/lib/share/calendar.php111
-rw-r--r--apps/calendar/lib/share/event.php40
-rw-r--r--apps/calendar/lib/share_backend.php44
-rw-r--r--apps/calendar/settings.php3
-rw-r--r--apps/calendar/share.php33
-rw-r--r--apps/calendar/templates/calendar.php58
-rw-r--r--apps/calendar/templates/part.choosecalendar.php101
-rw-r--r--apps/calendar/templates/part.choosecalendar.rowfields.php29
-rw-r--r--apps/calendar/templates/part.editevent.php6
-rw-r--r--apps/calendar/templates/part.eventform.php8
-rw-r--r--apps/calendar/templates/part.import.php74
-rw-r--r--apps/calendar/templates/part.newevent.php2
-rw-r--r--apps/calendar/templates/part.showevent.php6
-rw-r--r--apps/calendar/templates/settings.php80
-rw-r--r--apps/calendar/templates/share.dropdown.php4
-rw-r--r--apps/contacts/ajax/activation.php28
-rw-r--r--apps/contacts/ajax/addbook.php20
-rw-r--r--apps/contacts/ajax/addressbook/activate.php32
-rw-r--r--apps/contacts/ajax/addressbook/add.php37
-rw-r--r--apps/contacts/ajax/addressbook/delete.php (renamed from apps/contacts/ajax/deletebook.php)8
-rw-r--r--apps/contacts/ajax/addressbook/update.php39
-rw-r--r--apps/contacts/ajax/categories/categoriesfor.php16
-rw-r--r--apps/contacts/ajax/categories/delete.php16
-rw-r--r--apps/contacts/ajax/categories/list.php2
-rw-r--r--apps/contacts/ajax/categories/rescan.php31
-rw-r--r--apps/contacts/ajax/chooseaddressbook.php14
-rw-r--r--apps/contacts/ajax/contact/add.php (renamed from apps/contacts/ajax/addcontact.php)32
-rw-r--r--apps/contacts/ajax/contact/addproperty.php (renamed from apps/contacts/ajax/addproperty.php)76
-rw-r--r--apps/contacts/ajax/contact/delete.php (renamed from apps/contacts/ajax/deletecard.php)23
-rw-r--r--apps/contacts/ajax/contact/deleteproperty.php (renamed from apps/contacts/ajax/deleteproperty.php)25
-rw-r--r--apps/contacts/ajax/contact/details.php (renamed from apps/contacts/ajax/contactdetails.php)30
-rw-r--r--apps/contacts/ajax/contact/list.php97
-rw-r--r--apps/contacts/ajax/contact/move.php29
-rw-r--r--apps/contacts/ajax/contact/saveproperty.php (renamed from apps/contacts/ajax/saveproperty.php)104
-rw-r--r--apps/contacts/ajax/contacts.php27
-rw-r--r--apps/contacts/ajax/createaddressbook.php41
-rw-r--r--apps/contacts/ajax/cropphoto.php10
-rw-r--r--apps/contacts/ajax/currentphoto.php25
-rw-r--r--apps/contacts/ajax/editaddress.php22
-rw-r--r--apps/contacts/ajax/editaddressbook.php17
-rw-r--r--apps/contacts/ajax/editname.php23
-rw-r--r--apps/contacts/ajax/importaddressbook.php24
-rw-r--r--apps/contacts/ajax/importdialog.php1
-rw-r--r--apps/contacts/ajax/loadcard.php38
-rw-r--r--apps/contacts/ajax/loadintro.php2
-rw-r--r--apps/contacts/ajax/loadphoto.php63
-rw-r--r--apps/contacts/ajax/loghandler.php44
-rw-r--r--apps/contacts/ajax/oc_photo.php29
-rw-r--r--apps/contacts/ajax/savecrop.php130
-rw-r--r--apps/contacts/ajax/updateaddressbook.php44
-rw-r--r--apps/contacts/ajax/uploadimport.php47
-rw-r--r--apps/contacts/ajax/uploadphoto.php86
-rw-r--r--apps/contacts/appinfo/app.php19
-rw-r--r--apps/contacts/appinfo/database.xml12
-rw-r--r--apps/contacts/appinfo/migrate.php34
-rw-r--r--apps/contacts/appinfo/remote.php21
-rw-r--r--apps/contacts/appinfo/update.php25
-rw-r--r--apps/contacts/appinfo/version2
-rw-r--r--apps/contacts/carddav.php6
-rw-r--r--apps/contacts/css/contacts.css103
-rw-r--r--apps/contacts/css/jquery.Jcrop.css2
-rw-r--r--apps/contacts/export.php30
-rw-r--r--apps/contacts/img/contact-new.pngbin658 -> 525 bytes
-rw-r--r--apps/contacts/img/person.pngbin978 -> 852 bytes
-rw-r--r--apps/contacts/img/person_large.pngbin7929 -> 6993 bytes
-rw-r--r--apps/contacts/import.php168
-rw-r--r--apps/contacts/import_tmp/Info2
-rw-r--r--apps/contacts/index.php82
-rw-r--r--apps/contacts/js/contacts.js3561
-rw-r--r--apps/contacts/js/jquery.combobox.js43
-rw-r--r--apps/contacts/js/jquery.inview.js4
-rw-r--r--apps/contacts/js/loader.js16
-rw-r--r--apps/contacts/js/settings.js196
-rw-r--r--apps/contacts/l10n/ar.php34
-rw-r--r--apps/contacts/l10n/ca.php179
-rw-r--r--apps/contacts/l10n/cs_CZ.php160
-rw-r--r--apps/contacts/l10n/da.php123
-rw-r--r--apps/contacts/l10n/de.php209
-rw-r--r--apps/contacts/l10n/el.php185
-rw-r--r--apps/contacts/l10n/eo.php154
-rw-r--r--apps/contacts/l10n/es.php163
-rw-r--r--apps/contacts/l10n/et_EE.php110
-rw-r--r--apps/contacts/l10n/eu.php147
-rw-r--r--apps/contacts/l10n/fa.php113
-rw-r--r--apps/contacts/l10n/fi_FI.php134
-rw-r--r--apps/contacts/l10n/fr.php187
-rw-r--r--apps/contacts/l10n/gl.php147
-rw-r--r--apps/contacts/l10n/he.php128
-rw-r--r--apps/contacts/l10n/hr.php72
-rw-r--r--apps/contacts/l10n/hu_HU.php111
-rw-r--r--apps/contacts/l10n/ia.php51
-rw-r--r--apps/contacts/l10n/it.php179
-rw-r--r--apps/contacts/l10n/ja_JP.php198
-rw-r--r--apps/contacts/l10n/ko.php133
-rw-r--r--apps/contacts/l10n/lb.php74
-rw-r--r--apps/contacts/l10n/lt_LT.php40
-rw-r--r--apps/contacts/l10n/mk.php113
-rw-r--r--apps/contacts/l10n/ms_MY.php170
-rw-r--r--apps/contacts/l10n/nb_NO.php92
-rw-r--r--apps/contacts/l10n/nl.php87
-rw-r--r--apps/contacts/l10n/nn_NO.php34
-rw-r--r--apps/contacts/l10n/pl.php172
-rw-r--r--apps/contacts/l10n/pt_BR.php111
-rw-r--r--apps/contacts/l10n/pt_PT.php195
-rw-r--r--apps/contacts/l10n/ro.php52
-rw-r--r--apps/contacts/l10n/ru.php190
-rw-r--r--apps/contacts/l10n/sk_SK.php135
-rw-r--r--apps/contacts/l10n/sl.php179
-rw-r--r--apps/contacts/l10n/sr.php26
-rw-r--r--apps/contacts/l10n/sr@latin.php14
-rw-r--r--apps/contacts/l10n/sv.php205
-rw-r--r--apps/contacts/l10n/th_TH.php162
-rw-r--r--apps/contacts/l10n/tr.php148
-rw-r--r--apps/contacts/l10n/uk.php19
-rw-r--r--apps/contacts/l10n/vi.php41
-rw-r--r--apps/contacts/l10n/zh_CN.php127
-rw-r--r--apps/contacts/l10n/zh_TW.php42
-rw-r--r--apps/contacts/lib/addressbook.php300
-rw-r--r--apps/contacts/lib/app.php271
-rw-r--r--apps/contacts/lib/hooks.php31
-rw-r--r--apps/contacts/lib/sabre/addressbook.php128
-rw-r--r--apps/contacts/lib/sabre/addressbookroot.php45
-rw-r--r--apps/contacts/lib/sabre/backend.php (renamed from apps/contacts/lib/connector_sabre.php)32
-rw-r--r--apps/contacts/lib/sabre/card.php94
-rw-r--r--apps/contacts/lib/sabre/useraddressbooks.php45
-rw-r--r--apps/contacts/lib/sabre/vcfexportplugin.php100
-rw-r--r--apps/contacts/lib/search.php19
-rw-r--r--apps/contacts/lib/share/addressbook.php94
-rw-r--r--apps/contacts/lib/share/contact.php53
-rw-r--r--apps/contacts/lib/vcard.php359
-rw-r--r--apps/contacts/photo.php45
-rw-r--r--apps/contacts/settings.php4
-rw-r--r--apps/contacts/templates/index.php67
-rw-r--r--apps/contacts/templates/part.chooseaddressbook.php25
-rw-r--r--apps/contacts/templates/part.chooseaddressbook.rowfields.php18
-rw-r--r--apps/contacts/templates/part.contact.php138
-rw-r--r--apps/contacts/templates/part.contactphoto.php16
-rw-r--r--apps/contacts/templates/part.contacts.php12
-rw-r--r--apps/contacts/templates/part.cropphoto.php19
-rw-r--r--apps/contacts/templates/part.edit_address_dialog.php28
-rw-r--r--apps/contacts/templates/part.edit_categories_dialog.php16
-rw-r--r--apps/contacts/templates/part.edit_name_dialog.php10
-rw-r--r--apps/contacts/templates/part.editaddressbook.php31
-rw-r--r--apps/contacts/templates/part.import.php2
-rw-r--r--apps/contacts/templates/part.importaddressbook.php36
-rw-r--r--apps/contacts/templates/part.no_contacts.php4
-rw-r--r--apps/contacts/templates/part.selectaddressbook.php21
-rw-r--r--apps/contacts/templates/settings.php48
-rw-r--r--apps/contacts/thumbnail.php46
-rw-r--r--apps/contacts/tmpphoto.php (renamed from apps/contacts/dynphoto.php)9
-rw-r--r--apps/external/ajax/setsites.php3
-rw-r--r--apps/external/appinfo/app.php4
-rw-r--r--apps/external/img/external.pngbin459 -> 412 bytes
-rw-r--r--apps/external/index.php3
-rw-r--r--apps/external/lib/external.php2
-rw-r--r--apps/external/settings.php1
-rw-r--r--apps/files/admin.php4
-rw-r--r--apps/files/ajax/autocomplete.php2
-rw-r--r--apps/files/ajax/delete.php2
-rw-r--r--apps/files/ajax/download.php1
-rw-r--r--apps/files/ajax/list.php4
-rw-r--r--apps/files/ajax/mimeicon.php8
-rw-r--r--apps/files/ajax/move.php2
-rw-r--r--apps/files/ajax/newfile.php58
-rw-r--r--apps/files/ajax/rawlist.php2
-rw-r--r--apps/files/ajax/rename.php2
-rw-r--r--apps/files/ajax/scan.php6
-rw-r--r--apps/files/ajax/timezone.php4
-rw-r--r--apps/files/ajax/upload.php5
-rw-r--r--apps/files/appinfo/app.php1
-rw-r--r--apps/files/appinfo/filesync.php64
-rw-r--r--apps/files/appinfo/info.xml1
-rw-r--r--apps/files/appinfo/remote.php2
-rw-r--r--apps/files/appinfo/update.php16
-rw-r--r--apps/files/appinfo/version2
-rw-r--r--apps/files/css/files.css2
-rw-r--r--apps/files/download.php1
-rw-r--r--apps/files/index.php20
-rw-r--r--apps/files/js/fileactions.js54
-rw-r--r--apps/files/js/filelist.js127
-rw-r--r--apps/files/js/files.js373
-rw-r--r--apps/files/l10n/ar.php3
-rw-r--r--apps/files/l10n/bg_BG.php20
-rw-r--r--apps/files/l10n/ca.php21
-rw-r--r--apps/files/l10n/cs_CZ.php21
-rw-r--r--apps/files/l10n/da.php20
-rw-r--r--apps/files/l10n/de.php31
-rw-r--r--apps/files/l10n/el.php21
-rw-r--r--apps/files/l10n/eo.php21
-rw-r--r--apps/files/l10n/es.php21
-rw-r--r--apps/files/l10n/et_EE.php14
-rw-r--r--apps/files/l10n/eu.php21
-rw-r--r--apps/files/l10n/fa.php21
-rw-r--r--apps/files/l10n/fi_FI.php20
-rw-r--r--apps/files/l10n/fr.php21
-rw-r--r--apps/files/l10n/gl.php20
-rw-r--r--apps/files/l10n/he.php13
-rw-r--r--apps/files/l10n/hr.php13
-rw-r--r--apps/files/l10n/hu_HU.php21
-rw-r--r--apps/files/l10n/ia.php3
-rw-r--r--apps/files/l10n/id.php3
-rw-r--r--apps/files/l10n/it.php21
-rw-r--r--apps/files/l10n/ja_JP.php20
-rw-r--r--apps/files/l10n/ko.php13
-rw-r--r--apps/files/l10n/lb.php3
-rw-r--r--apps/files/l10n/lt_LT.php24
-rw-r--r--apps/files/l10n/lv.php20
-rw-r--r--apps/files/l10n/mk.php14
-rw-r--r--apps/files/l10n/ms_MY.php33
-rw-r--r--apps/files/l10n/nb_NO.php10
-rw-r--r--apps/files/l10n/nl.php14
-rw-r--r--apps/files/l10n/nn_NO.php3
-rw-r--r--apps/files/l10n/pl.php20
-rw-r--r--apps/files/l10n/pt_BR.php14
-rw-r--r--apps/files/l10n/pt_PT.php20
-rw-r--r--apps/files/l10n/ro.php2
-rw-r--r--apps/files/l10n/ru.php19
-rw-r--r--apps/files/l10n/sk_SK.php13
-rw-r--r--apps/files/l10n/sl.php20
-rw-r--r--apps/files/l10n/sr.php2
-rw-r--r--apps/files/l10n/sr@latin.php2
-rw-r--r--apps/files/l10n/sv.php33
-rw-r--r--apps/files/l10n/th_TH.php20
-rw-r--r--apps/files/l10n/tr.php15
-rw-r--r--apps/files/l10n/uk.php23
-rw-r--r--apps/files/l10n/vi.php31
-rw-r--r--apps/files/l10n/zh_CN.GB2312.php51
-rw-r--r--apps/files/l10n/zh_CN.php19
-rw-r--r--apps/files/l10n/zh_TW.php3
-rw-r--r--apps/files/settings.php2
-rw-r--r--apps/files/templates/admin.php2
-rw-r--r--apps/files/templates/index.php14
-rw-r--r--apps/files/templates/part.breadcrumb.php2
-rw-r--r--apps/files/templates/part.list.php3
-rw-r--r--apps/files_archive/js/archive.js4
-rw-r--r--apps/files_archive/lib/storage.php38
-rw-r--r--apps/files_encryption/js/settings.js4
-rw-r--r--apps/files_encryption/l10n/.gitkeep0
-rw-r--r--apps/files_encryption/l10n/ca.php6
-rw-r--r--apps/files_encryption/l10n/cs_CZ.php6
-rw-r--r--apps/files_encryption/l10n/de.php6
-rw-r--r--apps/files_encryption/l10n/el.php6
-rw-r--r--apps/files_encryption/l10n/eo.php6
-rw-r--r--apps/files_encryption/l10n/es.php3
-rw-r--r--apps/files_encryption/l10n/et_EE.php6
-rw-r--r--apps/files_encryption/l10n/fa.php5
-rw-r--r--apps/files_encryption/l10n/fi_FI.php6
-rw-r--r--apps/files_encryption/l10n/fr.php6
-rw-r--r--apps/files_encryption/l10n/it.php6
-rw-r--r--apps/files_encryption/l10n/ja_JP.php6
-rw-r--r--apps/files_encryption/l10n/lt_LT.php6
-rw-r--r--apps/files_encryption/l10n/nb_NO.php6
-rw-r--r--apps/files_encryption/l10n/pl.php6
-rw-r--r--apps/files_encryption/l10n/sl.php6
-rw-r--r--apps/files_encryption/l10n/sv.php6
-rw-r--r--apps/files_encryption/l10n/th_TH.php6
-rw-r--r--apps/files_encryption/lib/crypt.php3
-rw-r--r--apps/files_encryption/lib/cryptstream.php5
-rw-r--r--apps/files_encryption/lib/proxy.php10
-rw-r--r--apps/files_encryption/templates/settings.php2
-rw-r--r--apps/files_encryption/tests/proxy.php8
-rw-r--r--apps/files_external/ajax/addMountPoint.php13
-rw-r--r--apps/files_external/ajax/addRootCertificate.php28
-rw-r--r--apps/files_external/ajax/dropbox.php41
-rw-r--r--apps/files_external/ajax/google.php51
-rw-r--r--apps/files_external/ajax/removeMountPoint.php13
-rw-r--r--apps/files_external/ajax/removeRootCertificate.php12
-rw-r--r--apps/files_external/appinfo/app.php10
-rw-r--r--apps/files_external/appinfo/info.xml2
-rw-r--r--apps/files_external/css/settings.css7
-rw-r--r--apps/files_external/js/dropbox.js80
-rw-r--r--apps/files_external/js/google.js76
-rw-r--r--apps/files_external/js/settings.js182
-rw-r--r--apps/files_external/l10n/.gitkeep0
-rw-r--r--apps/files_external/l10n/ca.php18
-rw-r--r--apps/files_external/l10n/cs_CZ.php13
-rw-r--r--apps/files_external/l10n/de.php18
-rw-r--r--apps/files_external/l10n/el.php9
-rw-r--r--apps/files_external/l10n/eo.php18
-rw-r--r--apps/files_external/l10n/es.php13
-rw-r--r--apps/files_external/l10n/et_EE.php12
-rw-r--r--apps/files_external/l10n/fi_FI.php16
-rw-r--r--apps/files_external/l10n/fr.php18
-rw-r--r--apps/files_external/l10n/it.php18
-rw-r--r--apps/files_external/l10n/ja_JP.php18
-rw-r--r--apps/files_external/l10n/lt_LT.php9
-rw-r--r--apps/files_external/l10n/pl.php18
-rw-r--r--apps/files_external/l10n/sl.php18
-rw-r--r--apps/files_external/l10n/sv.php18
-rw-r--r--apps/files_external/l10n/th_TH.php18
-rw-r--r--apps/files_external/lib/amazons3.php236
-rwxr-xr-xapps/files_external/lib/config.php283
-rwxr-xr-xapps/files_external/lib/dropbox.php255
-rw-r--r--apps/files_external/lib/google.php53
-rw-r--r--apps/files_external/lib/smb.php10
-rw-r--r--apps/files_external/lib/streamwrapper.php4
-rw-r--r--apps/files_external/lib/swift.php4
-rw-r--r--apps/files_external/lib/webdav.php56
-rwxr-xr-xapps/files_external/personal.php35
-rw-r--r--apps/files_external/settings.php34
-rw-r--r--apps/files_external/templates/settings.php112
-rw-r--r--apps/files_external/tests/amazons3.php47
-rw-r--r--apps/files_external/tests/config.php6
-rw-r--r--apps/files_external/tests/ftp.php1
-rw-r--r--apps/files_external/tests/google.php1
-rw-r--r--apps/files_external/tests/smb.php1
-rw-r--r--apps/files_external/tests/swift.php1
-rw-r--r--apps/files_external/tests/test.php7
-rw-r--r--apps/files_external/tests/webdav.php1
-rw-r--r--apps/files_imageviewer/appinfo/app.php2
-rw-r--r--apps/files_imageviewer/css/jquery.fancybox-1.3.4.css66
-rw-r--r--apps/files_imageviewer/img/fancybox-y.pngbin176 -> 166 bytes
-rw-r--r--apps/files_imageviewer/js/lightbox.js2
-rw-r--r--apps/files_pdfviewer/appinfo/app.php7
-rw-r--r--apps/files_pdfviewer/appinfo/info.xml2
-rw-r--r--apps/files_pdfviewer/css/viewer.css1
-rw-r--r--apps/files_pdfviewer/js/pdfjs/build/pdf.js2820
-rw-r--r--apps/files_pdfviewer/js/pdfjs/compatibility.js340
-rwxr-xr-xapps/files_pdfviewer/js/pdfjs/update.sh3
-rw-r--r--apps/files_pdfviewer/js/pdfjs/viewer.js1873
-rw-r--r--apps/files_pdfviewer/js/viewer.js21
-rw-r--r--apps/files_sharing/ajax/email.php17
-rw-r--r--apps/files_sharing/ajax/getitem.php74
-rw-r--r--apps/files_sharing/ajax/getstatuses.php25
-rw-r--r--apps/files_sharing/ajax/setpermissions.php15
-rw-r--r--apps/files_sharing/ajax/share.php40
-rw-r--r--apps/files_sharing/ajax/toggleresharing.php13
-rw-r--r--apps/files_sharing/ajax/unshare.php14
-rw-r--r--apps/files_sharing/ajax/userautocomplete.php45
-rw-r--r--apps/files_sharing/appinfo/app.php24
-rw-r--r--apps/files_sharing/get.php6
-rw-r--r--apps/files_sharing/js/list.js54
-rw-r--r--apps/files_sharing/js/settings.js16
-rw-r--r--apps/files_sharing/js/share.js387
-rw-r--r--apps/files_sharing/l10n/.gitkeep0
-rw-r--r--apps/files_sharing/l10n/ca.php6
-rw-r--r--apps/files_sharing/l10n/cs_CZ.php6
-rw-r--r--apps/files_sharing/l10n/de.php6
-rw-r--r--apps/files_sharing/l10n/el.php6
-rw-r--r--apps/files_sharing/l10n/eo.php3
-rw-r--r--apps/files_sharing/l10n/es.php6
-rw-r--r--apps/files_sharing/l10n/et_EE.php3
-rw-r--r--apps/files_sharing/l10n/fa.php6
-rw-r--r--apps/files_sharing/l10n/fi_FI.php6
-rw-r--r--apps/files_sharing/l10n/fr.php6
-rw-r--r--apps/files_sharing/l10n/it.php6
-rw-r--r--apps/files_sharing/l10n/ja_JP.php6
-rw-r--r--apps/files_sharing/l10n/lt_LT.php6
-rw-r--r--apps/files_sharing/l10n/nb_NO.php6
-rw-r--r--apps/files_sharing/l10n/pl.php6
-rw-r--r--apps/files_sharing/l10n/sl.php6
-rw-r--r--apps/files_sharing/l10n/sv.php6
-rw-r--r--apps/files_sharing/l10n/th_TH.php6
-rw-r--r--apps/files_sharing/lib/share/file.php91
-rw-r--r--apps/files_sharing/lib/share/folder.php61
-rw-r--r--apps/files_sharing/lib/sharedstorage.php427
-rw-r--r--apps/files_sharing/lib_share.php523
-rw-r--r--apps/files_sharing/settings.php10
-rw-r--r--apps/files_sharing/sharedstorage.php542
-rwxr-xr-xapps/files_sharing/templates/get.php11
-rw-r--r--apps/files_sharing/templates/list.php30
-rw-r--r--apps/files_sharing/templates/settings.php8
-rw-r--r--apps/files_sharing_log/appinfo/app.php22
-rw-r--r--apps/files_sharing_log/appinfo/database.xml44
-rw-r--r--apps/files_sharing_log/appinfo/info.xml10
-rw-r--r--apps/files_sharing_log/appinfo/version1
-rw-r--r--apps/files_sharing_log/css/style.css7
-rw-r--r--apps/files_sharing_log/index.php21
-rw-r--r--apps/files_sharing_log/log.php34
-rw-r--r--apps/files_sharing_log/templates/index.php42
-rw-r--r--apps/files_texteditor/ajax/loadfile.php1
-rw-r--r--apps/files_texteditor/ajax/savefile.php1
-rw-r--r--apps/files_texteditor/appinfo/app.php2
-rw-r--r--apps/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.eotbin0 -> 78034 bytes
-rw-r--r--apps/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.svg630
-rw-r--r--apps/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.ttfbin0 -> 77800 bytes
-rw-r--r--apps/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.woffbin0 -> 46192 bytes
-rw-r--r--apps/files_texteditor/css/DroidSansMono/Google Android License.txt18
-rw-r--r--apps/files_texteditor/css/DroidSansMono/demo.html33
-rw-r--r--apps/files_texteditor/css/DroidSansMono/stylesheet.css15
-rw-r--r--apps/files_texteditor/js/aceeditor/ace.js3
-rw-r--r--apps/files_texteditor/js/editor.js16
-rw-r--r--apps/files_versions/ajax/expireAll.php (renamed from apps/files_sharing/list.php)37
-rw-r--r--apps/files_versions/ajax/getVersions.php9
-rw-r--r--apps/files_versions/ajax/rollbackVersion.php2
-rw-r--r--apps/files_versions/ajax/togglesettings.php3
-rw-r--r--apps/files_versions/appinfo/api.php36
-rw-r--r--apps/files_versions/appinfo/app.php19
-rw-r--r--apps/files_versions/appinfo/update.php16
-rw-r--r--apps/files_versions/appinfo/version2
-rw-r--r--apps/files_versions/history.php15
-rw-r--r--apps/files_versions/js/settings-personal.js39
-rw-r--r--apps/files_versions/js/versions.js8
-rw-r--r--apps/files_versions/l10n/.gitkeep0
-rw-r--r--apps/files_versions/l10n/ca.php4
-rw-r--r--apps/files_versions/l10n/cs_CZ.php4
-rw-r--r--apps/files_versions/l10n/de.php4
-rw-r--r--apps/files_versions/l10n/el.php4
-rw-r--r--apps/files_versions/l10n/eo.php4
-rw-r--r--apps/files_versions/l10n/es.php3
-rw-r--r--apps/files_versions/l10n/et_EE.php4
-rw-r--r--apps/files_versions/l10n/fa.php4
-rw-r--r--apps/files_versions/l10n/fi_FI.php4
-rw-r--r--apps/files_versions/l10n/fr.php4
-rw-r--r--apps/files_versions/l10n/it.php4
-rw-r--r--apps/files_versions/l10n/ja_JP.php4
-rw-r--r--apps/files_versions/l10n/lt_LT.php4
-rw-r--r--apps/files_versions/l10n/nb_NO.php3
-rw-r--r--apps/files_versions/l10n/pl.php4
-rw-r--r--apps/files_versions/l10n/sl.php4
-rw-r--r--apps/files_versions/l10n/sv.php4
-rw-r--r--apps/files_versions/l10n/th_TH.php4
-rw-r--r--apps/files_versions/lib/hooks.php75
-rw-r--r--apps/files_versions/lib/versions.php306
-rw-r--r--apps/files_versions/settings-personal.php8
-rw-r--r--apps/files_versions/settings.php1
-rw-r--r--apps/files_versions/templates/history.php8
-rw-r--r--apps/files_versions/templates/settings-personal.php9
-rw-r--r--apps/files_versions/versions.php263
-rw-r--r--apps/gallery/ajax/createAlbum.php2
-rw-r--r--apps/gallery/ajax/galleryOp.php4
-rw-r--r--apps/gallery/ajax/sharing.php6
-rw-r--r--apps/gallery/ajax/thumbnail.php1
-rw-r--r--apps/gallery/ajax/viewImage.php32
-rw-r--r--apps/gallery/appinfo/app.php26
-rw-r--r--apps/gallery/appinfo/update.php6
-rw-r--r--apps/gallery/appinfo/version2
-rw-r--r--apps/gallery/css/sharing.css2
-rw-r--r--apps/gallery/css/styles.css10
-rw-r--r--apps/gallery/css/supersized.css25
-rw-r--r--apps/gallery/css/supersized.shutter.css74
-rw-r--r--apps/gallery/img/breadcrumb.pngbin220 -> 201 bytes
-rw-r--r--apps/gallery/img/delete.pngbin275 -> 240 bytes
-rw-r--r--apps/gallery/img/rename.pngbin310 -> 267 bytes
-rw-r--r--apps/gallery/img/share.pngbin377 -> 338 bytes
-rw-r--r--apps/gallery/img/supersized/back.pngbin0 -> 2319 bytes
-rw-r--r--apps/gallery/img/supersized/bg-black.pngbin0 -> 1065 bytes
-rw-r--r--apps/gallery/img/supersized/bg-hover.pngbin0 -> 960 bytes
-rw-r--r--apps/gallery/img/supersized/button-tray-down.pngbin0 -> 1464 bytes
-rw-r--r--apps/gallery/img/supersized/button-tray-up.pngbin0 -> 1451 bytes
-rw-r--r--apps/gallery/img/supersized/forward.pngbin0 -> 2316 bytes
-rw-r--r--apps/gallery/img/supersized/nav-bg.pngbin0 -> 993 bytes
-rw-r--r--apps/gallery/img/supersized/nav-dot.pngbin0 -> 1640 bytes
-rw-r--r--apps/gallery/img/supersized/pause.pngbin0 -> 1124 bytes
-rw-r--r--apps/gallery/img/supersized/play.pngbin0 -> 1549 bytes
-rw-r--r--apps/gallery/img/supersized/progress-back.pngbin0 -> 924 bytes
-rw-r--r--apps/gallery/img/supersized/progress-bar.pngbin0 -> 924 bytes
-rw-r--r--apps/gallery/img/supersized/progress.gifbin0 -> 2608 bytes
-rw-r--r--apps/gallery/img/supersized/supersized-logo.pngbin0 -> 3488 bytes
-rw-r--r--apps/gallery/img/supersized/thumb-back.pngbin0 -> 2010 bytes
-rw-r--r--apps/gallery/img/supersized/thumb-forward.pngbin0 -> 2007 bytes
-rw-r--r--apps/gallery/index.php71
-rw-r--r--apps/gallery/js/albums.js2
-rw-r--r--apps/gallery/js/jquery.easing.min.js71
-rw-r--r--apps/gallery/js/pictures.js33
-rw-r--r--apps/gallery/js/slideshow.js58
-rw-r--r--apps/gallery/js/supersized.3.2.7.js930
-rw-r--r--apps/gallery/js/supersized.3.2.7.min.js13
-rw-r--r--apps/gallery/js/supersized.shutter.js337
-rw-r--r--apps/gallery/js/supersized.shutter.min.js14
-rw-r--r--apps/gallery/l10n/ca.php8
-rw-r--r--apps/gallery/l10n/cs_CZ.php13
-rw-r--r--apps/gallery/l10n/de.php8
-rw-r--r--apps/gallery/l10n/el.php8
-rw-r--r--apps/gallery/l10n/es.php8
-rw-r--r--apps/gallery/l10n/fi_FI.php8
-rw-r--r--apps/gallery/l10n/fr.php8
-rw-r--r--apps/gallery/l10n/it.php8
-rw-r--r--apps/gallery/l10n/pl.php8
-rw-r--r--apps/gallery/l10n/pt_PT.php13
-rw-r--r--apps/gallery/l10n/ru.php13
-rw-r--r--apps/gallery/l10n/sl.php8
-rw-r--r--apps/gallery/l10n/sv.php8
-rw-r--r--apps/gallery/l10n/th_TH.php13
-rw-r--r--apps/gallery/l10n/tr.php8
-rw-r--r--apps/gallery/l10n/vi.php11
-rw-r--r--apps/gallery/l10n/zh_CN.php13
-rw-r--r--apps/gallery/lib/album.php27
-rw-r--r--apps/gallery/lib/hooks_handlers.php4
-rw-r--r--apps/gallery/lib/images_utils.php2
-rw-r--r--apps/gallery/lib/managers.php85
-rw-r--r--apps/gallery/lib/photo.php113
-rw-r--r--apps/gallery/lib/scanner.php3
-rw-r--r--apps/gallery/lib/share.php42
-rw-r--r--apps/gallery/lib/tiles.php8
-rw-r--r--apps/gallery/lib/tiles_test.php2
-rw-r--r--apps/gallery/templates/index.php165
-rw-r--r--apps/gallery/templates/view_album.php47
-rw-r--r--apps/impress/appinfo/app.php38
-rw-r--r--apps/impress/appinfo/info.xml10
-rw-r--r--apps/impress/appinfo/version1
-rw-r--r--apps/impress/css/player.css703
-rwxr-xr-xapps/impress/css/style.css14
-rwxr-xr-xapps/impress/documentation.php34
-rw-r--r--apps/impress/img/impress.pngbin0 -> 387 bytes
-rwxr-xr-xapps/impress/img/impress.svg1718
-rw-r--r--apps/impress/img/impressbig.pngbin0 -> 503 bytes
-rwxr-xr-xapps/impress/img/impressbig.svg1730
-rwxr-xr-xapps/impress/index.php37
-rw-r--r--apps/impress/js/impress.js800
-rwxr-xr-xapps/impress/lib/impress.php118
-rwxr-xr-xapps/impress/player.php49
-rwxr-xr-xapps/impress/templates/documentation.php223
-rwxr-xr-xapps/impress/templates/presentations.php30
-rw-r--r--apps/media/ajax/api.php10
-rw-r--r--apps/media/ajax/autoupdate.php6
-rw-r--r--apps/media/appinfo/app.php19
-rw-r--r--apps/media/appinfo/version2
-rw-r--r--apps/media/index.php5
-rw-r--r--apps/media/js/loader.js4
-rw-r--r--apps/media/js/player.js2
-rw-r--r--apps/media/l10n/ar.php1
-rw-r--r--apps/media/l10n/bg_BG.php1
-rw-r--r--apps/media/l10n/eo.php5
-rw-r--r--apps/media/l10n/fr.php3
-rw-r--r--apps/media/l10n/sv.php1
-rw-r--r--apps/media/l10n/uk.php14
-rw-r--r--apps/media/l10n/vi.php14
-rw-r--r--apps/media/l10n/zh_CN.GB2312.php14
-rw-r--r--apps/media/lib/share/album.php0
-rw-r--r--apps/media/lib/share/artist.php65
-rw-r--r--apps/media/lib/share/song.php65
-rw-r--r--apps/media/lib_ampache.php13
-rw-r--r--apps/media/lib_collection.php5
-rw-r--r--apps/media/lib_media.php16
-rw-r--r--apps/media/lib_scanner.php2
-rw-r--r--apps/media/remote.php4
-rw-r--r--apps/media/server/xml.server.php4
-rw-r--r--apps/media/settings.php1
-rw-r--r--apps/remoteStorage/ajax/revokeToken.php6
-rw-r--r--apps/remoteStorage/appinfo/app.php4
-rw-r--r--apps/remoteStorage/appinfo/info.xml3
-rw-r--r--apps/remoteStorage/appinfo/version2
-rw-r--r--apps/remoteStorage/appinfo/webfinger.php6
-rw-r--r--apps/remoteStorage/auth.php77
-rw-r--r--apps/remoteStorage/img/remoteStorage.pngbin0 -> 1024 bytes
-rw-r--r--apps/remoteStorage/lib_remoteStorage.php29
-rw-r--r--apps/remoteStorage/oauth_ro_auth.php20
-rw-r--r--apps/remoteStorage/remoteStorage.pngbin1273 -> 0 bytes
-rw-r--r--apps/remoteStorage/settings.php1
-rw-r--r--apps/remoteStorage/templates/auth.php28
-rw-r--r--apps/remoteStorage/templates/settings.php28
-rw-r--r--apps/remoteStorage/webdav.php (renamed from apps/remoteStorage/WebDAV.php)38
-rw-r--r--apps/tasks/ajax/addtask.php2
-rw-r--r--apps/tasks/ajax/addtaskform.php21
-rw-r--r--apps/tasks/ajax/edittask.php32
-rw-r--r--apps/tasks/ajax/edittaskform.php24
-rw-r--r--apps/tasks/ajax/getdetails.php24
-rw-r--r--apps/tasks/ajax/gettasks.php2
-rw-r--r--apps/tasks/ajax/update_property.php5
-rw-r--r--apps/tasks/appinfo/app.php5
-rw-r--r--apps/tasks/css/style.css7
-rw-r--r--apps/tasks/img/icon.pngbin457 -> 372 bytes
-rw-r--r--apps/tasks/index.php5
-rw-r--r--apps/tasks/js/tasks.js62
-rw-r--r--apps/tasks/l10n/.gitkeep0
-rw-r--r--apps/tasks/l10n/ca.php24
-rw-r--r--apps/tasks/l10n/cs_CZ.php15
-rw-r--r--apps/tasks/l10n/da.php16
-rw-r--r--apps/tasks/l10n/de.php24
-rw-r--r--apps/tasks/l10n/el.php18
-rw-r--r--apps/tasks/l10n/eo.php24
-rw-r--r--apps/tasks/l10n/es.php24
-rw-r--r--apps/tasks/l10n/et_EE.php24
-rw-r--r--apps/tasks/l10n/fa.php11
-rw-r--r--apps/tasks/l10n/fi_FI.php17
-rw-r--r--apps/tasks/l10n/fr.php24
-rw-r--r--apps/tasks/l10n/it.php24
-rw-r--r--apps/tasks/l10n/ja_JP.php24
-rw-r--r--apps/tasks/l10n/lt_LT.php10
-rw-r--r--apps/tasks/l10n/nb_NO.php17
-rw-r--r--apps/tasks/l10n/pl.php24
-rw-r--r--apps/tasks/l10n/ro.php24
-rw-r--r--apps/tasks/l10n/sl.php24
-rw-r--r--apps/tasks/l10n/sv.php24
-rw-r--r--apps/tasks/l10n/th_TH.php24
-rw-r--r--apps/tasks/lib/app.php19
-rw-r--r--apps/tasks/templates/part.addtaskform.php15
-rw-r--r--apps/tasks/templates/part.details.php42
-rw-r--r--apps/tasks/templates/part.edittaskform.php5
-rw-r--r--apps/tasks/templates/part.property.php22
-rw-r--r--apps/tasks/templates/part.taskform.php36
-rw-r--r--apps/tasks/templates/part.tasks.php3
-rw-r--r--apps/user_external/appinfo/app.php4
-rw-r--r--apps/user_external/appinfo/info.xml13
-rw-r--r--apps/user_external/appinfo/version1
-rw-r--r--apps/user_external/lib/ftp.php45
-rw-r--r--apps/user_external/lib/imap.php40
-rw-r--r--apps/user_external/lib/smb.php43
-rw-r--r--apps/user_external/tests/config.php28
-rw-r--r--apps/user_external/tests/ftp.php34
-rw-r--r--apps/user_external/tests/imap.php34
-rw-r--r--apps/user_external/tests/smb.php34
-rw-r--r--apps/user_ldap/ajax/testConfiguration.php39
-rw-r--r--apps/user_ldap/appinfo/app.php16
-rw-r--r--apps/user_ldap/appinfo/database.xml49
-rw-r--r--apps/user_ldap/appinfo/update.php57
-rw-r--r--apps/user_ldap/appinfo/version2
-rw-r--r--apps/user_ldap/css/settings.css10
-rw-r--r--apps/user_ldap/group_ldap.php170
-rw-r--r--apps/user_ldap/js/settings.js21
-rw-r--r--apps/user_ldap/l10n/.gitkeep0
-rw-r--r--apps/user_ldap/l10n/ca.php36
-rw-r--r--apps/user_ldap/l10n/cs_CZ.php36
-rw-r--r--apps/user_ldap/l10n/da.php9
-rw-r--r--apps/user_ldap/l10n/de.php36
-rw-r--r--apps/user_ldap/l10n/el.php6
-rw-r--r--apps/user_ldap/l10n/eo.php32
-rw-r--r--apps/user_ldap/l10n/es.php7
-rw-r--r--apps/user_ldap/l10n/fi_FI.php31
-rw-r--r--apps/user_ldap/l10n/fr.php32
-rw-r--r--apps/user_ldap/l10n/it.php36
-rw-r--r--apps/user_ldap/l10n/ja_JP.php36
-rw-r--r--apps/user_ldap/l10n/lt_LT.php9
-rw-r--r--apps/user_ldap/l10n/pl.php36
-rw-r--r--apps/user_ldap/l10n/ro.php36
-rw-r--r--apps/user_ldap/l10n/sl.php36
-rw-r--r--apps/user_ldap/l10n/sv.php36
-rw-r--r--apps/user_ldap/l10n/th_TH.php36
-rw-r--r--apps/user_ldap/lib/access.php676
-rw-r--r--apps/user_ldap/lib/connection.php358
-rw-r--r--apps/user_ldap/lib/jobs.php157
-rw-r--r--apps/user_ldap/lib_ldap.php765
-rw-r--r--apps/user_ldap/settings.php18
-rw-r--r--apps/user_ldap/templates/settings.php33
-rw-r--r--apps/user_ldap/tests/group_ldap.php4
-rw-r--r--apps/user_ldap/user_ldap.php109
-rw-r--r--apps/user_migrate/appinfo/app.php1
-rw-r--r--apps/user_migrate/l10n/.gitkeep0
-rw-r--r--apps/user_migrate/l10n/ca.php10
-rw-r--r--apps/user_migrate/l10n/cs_CZ.php10
-rw-r--r--apps/user_migrate/l10n/de.php10
-rw-r--r--apps/user_migrate/l10n/el.php8
-rw-r--r--apps/user_migrate/l10n/eo.php10
-rw-r--r--apps/user_migrate/l10n/es.php5
-rw-r--r--apps/user_migrate/l10n/fi_FI.php9
-rw-r--r--apps/user_migrate/l10n/fr.php10
-rw-r--r--apps/user_migrate/l10n/it.php10
-rw-r--r--apps/user_migrate/l10n/ja_JP.php10
-rw-r--r--apps/user_migrate/l10n/lt_LT.php10
-rw-r--r--apps/user_migrate/l10n/pl.php10
-rw-r--r--apps/user_migrate/l10n/sl.php10
-rw-r--r--apps/user_migrate/l10n/sv.php10
-rw-r--r--apps/user_migrate/l10n/th_TH.php10
-rw-r--r--apps/user_migrate/templates/settings.php4
-rw-r--r--apps/user_openid/appinfo/app.php4
-rw-r--r--apps/user_openid/appinfo/info.xml1
-rw-r--r--apps/user_openid/appinfo/version2
-rw-r--r--apps/user_openid/l10n/.gitkeep0
-rw-r--r--apps/user_openid/l10n/ca.php11
-rw-r--r--apps/user_openid/l10n/cs_CZ.php11
-rw-r--r--apps/user_openid/l10n/de.php11
-rw-r--r--apps/user_openid/l10n/el.php8
-rw-r--r--apps/user_openid/l10n/eo.php11
-rw-r--r--apps/user_openid/l10n/es.php5
-rw-r--r--apps/user_openid/l10n/et_EE.php5
-rw-r--r--apps/user_openid/l10n/fi_FI.php7
-rw-r--r--apps/user_openid/l10n/fr.php11
-rw-r--r--apps/user_openid/l10n/it.php11
-rw-r--r--apps/user_openid/l10n/ja_JP.php11
-rw-r--r--apps/user_openid/l10n/pl.php11
-rw-r--r--apps/user_openid/l10n/sl.php11
-rw-r--r--apps/user_openid/l10n/sv.php11
-rw-r--r--apps/user_openid/l10n/th_TH.php11
-rw-r--r--apps/user_openid/user.php5
-rw-r--r--apps/user_openid/user_openid.php10
-rw-r--r--apps/user_webfinger/.htaccess5
-rw-r--r--apps/user_webfinger/appinfo/app.php6
-rw-r--r--apps/user_webfinger/appinfo/info.xml4
-rw-r--r--apps/user_webfinger/appinfo/version2
-rw-r--r--apps/user_webfinger/host-meta.php18
-rw-r--r--apps/user_webfinger/webfinger.php22
-rwxr-xr-xautotest.sh110
-rw-r--r--config/config.sample.php56
-rw-r--r--core/ajax/share.php126
-rw-r--r--core/ajax/translations.php1
-rw-r--r--core/ajax/vcategories/add.php2
-rw-r--r--core/ajax/vcategories/delete.php2
-rw-r--r--core/ajax/vcategories/edit.php2
-rw-r--r--core/css/share.css (renamed from apps/files_sharing/css/sharing.css)15
-rw-r--r--core/css/styles.css36
-rw-r--r--core/img/actions/add.pngbin488 -> 441 bytes
-rw-r--r--core/img/actions/delete.pngbin275 -> 240 bytes
-rw-r--r--core/img/actions/download.pngbin246 -> 236 bytes
-rw-r--r--core/img/actions/history.pngbin370 -> 363 bytes
-rw-r--r--core/img/actions/info.pngbin474 -> 423 bytes
-rw-r--r--core/img/actions/logout.pngbin657 -> 592 bytes
-rw-r--r--core/img/actions/mail.pngbin463 -> 405 bytes
-rw-r--r--core/img/actions/pause-big.pngbin183 -> 166 bytes
-rw-r--r--core/img/actions/pause.pngbin182 -> 170 bytes
-rw-r--r--core/img/actions/play-add.pngbin275 -> 237 bytes
-rw-r--r--core/img/actions/play-big.pngbin212 -> 210 bytes
-rw-r--r--core/img/actions/play-next.pngbin253 -> 224 bytes
-rw-r--r--core/img/actions/play-previous.pngbin260 -> 237 bytes
-rw-r--r--core/img/actions/play.pngbin220 -> 201 bytes
-rw-r--r--core/img/actions/public.pngbin459 -> 412 bytes
-rw-r--r--core/img/actions/rename.pngbin310 -> 267 bytes
-rw-r--r--core/img/actions/search.pngbin701 -> 554 bytes
-rw-r--r--core/img/actions/settings.pngbin883 -> 683 bytes
-rw-r--r--core/img/actions/share.pngbin377 -> 338 bytes
-rw-r--r--core/img/actions/shared.pngbin437 -> 364 bytes
-rw-r--r--core/img/actions/sound-off.pngbin217 -> 192 bytes
-rw-r--r--core/img/actions/sound.pngbin292 -> 254 bytes
-rw-r--r--core/img/actions/triangle-s.pngbin526 -> 515 bytes
-rw-r--r--core/img/actions/upload-white.pngbin228 -> 226 bytes
-rw-r--r--core/img/actions/upload.pngbin236 -> 235 bytes
-rw-r--r--core/img/breadcrumb-start.pngbin452 -> 311 bytes
-rw-r--r--core/img/breadcrumb.pngbin452 -> 320 bytes
-rw-r--r--core/img/favicon-touch.pngbin5703 -> 3705 bytes
-rw-r--r--core/img/favicon.pngbin1231 -> 912 bytes
-rw-r--r--core/img/filetypes/application-msexcel.pngbin0 -> 566 bytes
-rw-r--r--core/img/filetypes/application-mspowerpoint.pngbin0 -> 519 bytes
-rw-r--r--core/img/filetypes/application-msword.pngbin0 -> 789 bytes
-rw-r--r--core/img/filetypes/application-sgf.pngbin725 -> 702 bytes
-rw-r--r--core/img/filetypes/application-vnd.oasis.opendocument.formula.pngbin580 -> 479 bytes
-rw-r--r--core/img/filetypes/application-vnd.oasis.opendocument.graphics.pngbin572 -> 475 bytes
-rw-r--r--core/img/filetypes/application-vnd.oasis.opendocument.presentation.pngbin441 -> 333 bytes
-rw-r--r--core/img/filetypes/application-vnd.oasis.opendocument.spreadsheet.pngbin436 -> 344 bytes
-rw-r--r--core/img/filetypes/application-vnd.oasis.opendocument.text.pngbin420 -> 347 bytes
-rw-r--r--core/img/filetypes/application-x-7z-compressed.pngbin652 -> 650 bytes
-rw-r--r--core/img/filetypes/application-x-bzip-compressed-tar.pngbin652 -> 650 bytes
-rw-r--r--core/img/filetypes/application-x-bzip.pngbin652 -> 650 bytes
-rw-r--r--core/img/filetypes/application-x-compressed-tar.pngbin652 -> 650 bytes
-rw-r--r--core/img/filetypes/application-x-deb.pngbin652 -> 650 bytes
-rw-r--r--core/img/filetypes/application-x-debian-package.pngbin570 -> 548 bytes
-rw-r--r--core/img/filetypes/application-x-gzip.pngbin652 -> 650 bytes
-rw-r--r--core/img/filetypes/application-x-lzma-compressed-tar.pngbin652 -> 650 bytes
-rw-r--r--core/img/filetypes/application-x-rar.pngbin652 -> 650 bytes
-rw-r--r--core/img/filetypes/application-x-rpm.pngbin652 -> 650 bytes
-rw-r--r--core/img/filetypes/application-x-tar.pngbin652 -> 650 bytes
-rw-r--r--core/img/filetypes/application-x-tarz.pngbin652 -> 650 bytes
-rw-r--r--core/img/filetypes/application-zip.pngbin652 -> 650 bytes
-rw-r--r--core/img/filetypes/flash.pngbin582 -> 580 bytes
-rw-r--r--core/img/icon-error.pngbin1573 -> 1344 bytes
-rw-r--r--core/img/icon-sync.pngbin1577 -> 1271 bytes
-rw-r--r--core/img/icon.pngbin1344 -> 1109 bytes
-rw-r--r--core/img/logo-inverted.pngbin8116 -> 5938 bytes
-rw-r--r--core/img/logo-square.pngbin22792 -> 16048 bytes
-rw-r--r--core/img/logo-wide.pngbin2293 -> 1908 bytes
-rw-r--r--core/img/logo.pngbin7356 -> 5860 bytes
-rw-r--r--core/img/places/file.pngbin391 -> 364 bytes
-rw-r--r--core/img/places/folder.pngbin386 -> 339 bytes
-rw-r--r--core/img/places/home.pngbin416 -> 372 bytes
-rw-r--r--core/img/places/music.pngbin561 -> 532 bytes
-rw-r--r--core/img/places/picture.pngbin307 -> 300 bytes
-rw-r--r--core/img/remoteStorage-big.pngbin9742 -> 8997 bytes
-rw-r--r--core/js/backgroundjobs.js25
-rw-r--r--core/js/eventsource.js1
-rw-r--r--core/js/js.js118
-rw-r--r--core/js/share.js377
-rw-r--r--core/l10n/ar.php3
-rw-r--r--core/l10n/bg_BG.php25
-rw-r--r--core/l10n/ca.php22
-rw-r--r--core/l10n/cs_CZ.php22
-rw-r--r--core/l10n/da.php22
-rw-r--r--core/l10n/de.php50
-rw-r--r--core/l10n/el.php22
-rw-r--r--core/l10n/eo.php29
-rw-r--r--core/l10n/es.php24
-rw-r--r--core/l10n/et_EE.php22
-rw-r--r--core/l10n/eu.php22
-rw-r--r--core/l10n/fa.php22
-rw-r--r--core/l10n/fi_FI.php21
-rw-r--r--core/l10n/fr.php24
-rw-r--r--core/l10n/gl.php22
-rw-r--r--core/l10n/he.php21
-rw-r--r--core/l10n/hr.php22
-rw-r--r--core/l10n/hu_HU.php48
-rw-r--r--core/l10n/ia.php3
-rw-r--r--core/l10n/id.php3
-rw-r--r--core/l10n/it.php22
-rw-r--r--core/l10n/ja_JP.php22
-rw-r--r--core/l10n/ko.php22
-rw-r--r--core/l10n/lb.php3
-rw-r--r--core/l10n/lt_LT.php24
-rw-r--r--core/l10n/lv.php35
-rw-r--r--core/l10n/mk.php22
-rw-r--r--core/l10n/ms_MY.php28
-rw-r--r--core/l10n/nb_NO.php21
-rw-r--r--core/l10n/nl.php21
-rw-r--r--core/l10n/nn_NO.php3
-rw-r--r--core/l10n/pl.php22
-rw-r--r--core/l10n/pt_BR.php22
-rw-r--r--core/l10n/pt_PT.php22
-rw-r--r--core/l10n/ro.php3
-rw-r--r--core/l10n/ru.php22
-rw-r--r--core/l10n/sk_SK.php22
-rw-r--r--core/l10n/sl.php22
-rw-r--r--core/l10n/sr.php3
-rw-r--r--core/l10n/sr@latin.php2
-rw-r--r--core/l10n/sv.php38
-rw-r--r--core/l10n/th_TH.php22
-rw-r--r--core/l10n/tr.php22
-rw-r--r--core/l10n/uk.php2
-rw-r--r--core/l10n/vi.php64
-rw-r--r--core/l10n/zh_CN.GB2312.php64
-rw-r--r--core/l10n/zh_CN.php21
-rw-r--r--core/l10n/zh_TW.php3
-rw-r--r--core/lostpassword/index.php6
-rw-r--r--core/lostpassword/resetpassword.php2
-rw-r--r--core/minimizer.php15
-rw-r--r--core/strings.php1
-rw-r--r--core/templates/404.php2
-rw-r--r--core/templates/exception.php30
-rw-r--r--core/templates/layout.guest.php8
-rw-r--r--core/templates/layout.user.php17
-rw-r--r--core/templates/login.php8
-rw-r--r--cron.php89
-rw-r--r--db_structure.xml195
-rw-r--r--files/webdav.php4
-rwxr-xr-x[-rw-r--r--]index.php98
-rw-r--r--l10n/.tx/config72
-rw-r--r--l10n/af/admin_dependencies_chk.po73
-rw-r--r--l10n/af/admin_migrate.po32
-rw-r--r--l10n/af/bookmarks.po60
-rw-r--r--l10n/af/calendar.po428
-rw-r--r--l10n/af/contacts.po755
-rw-r--r--l10n/af/core.po46
-rw-r--r--l10n/af/files.po82
-rw-r--r--l10n/af/files_encryption.po34
-rw-r--r--l10n/af/files_external.po82
-rw-r--r--l10n/af/files_sharing.po34
-rw-r--r--l10n/af/files_versions.po26
-rw-r--r--l10n/af/lib.po112
-rw-r--r--l10n/af/settings.po86
-rw-r--r--l10n/af/tasks.po106
-rw-r--r--l10n/af/user_ldap.po164
-rw-r--r--l10n/af/user_migrate.po51
-rw-r--r--l10n/af/user_openid.po54
-rw-r--r--l10n/ar/admin_dependencies_chk.po73
-rw-r--r--l10n/ar/admin_migrate.po32
-rw-r--r--l10n/ar/bookmarks.po60
-rw-r--r--l10n/ar/calendar.po506
-rw-r--r--l10n/ar/contacts.po821
-rw-r--r--l10n/ar/core.po46
-rw-r--r--l10n/ar/files.po82
-rw-r--r--l10n/ar/files_encryption.po34
-rw-r--r--l10n/ar/files_external.po82
-rw-r--r--l10n/ar/files_sharing.po34
-rw-r--r--l10n/ar/files_versions.po26
-rw-r--r--l10n/ar/lib.po112
-rw-r--r--l10n/ar/media.po14
-rw-r--r--l10n/ar/settings.po86
-rw-r--r--l10n/ar/tasks.po106
-rw-r--r--l10n/ar/user_ldap.po164
-rw-r--r--l10n/ar/user_migrate.po51
-rw-r--r--l10n/ar/user_openid.po54
-rw-r--r--l10n/ar_SA/admin_dependencies_chk.po73
-rw-r--r--l10n/ar_SA/admin_migrate.po32
-rw-r--r--l10n/ar_SA/bookmarks.po60
-rw-r--r--l10n/ar_SA/calendar.po813
-rw-r--r--l10n/ar_SA/contacts.po952
-rw-r--r--l10n/ar_SA/core.po268
-rw-r--r--l10n/ar_SA/files.po218
-rw-r--r--l10n/ar_SA/files_encryption.po34
-rw-r--r--l10n/ar_SA/files_external.po82
-rw-r--r--l10n/ar_SA/files_sharing.po34
-rw-r--r--l10n/ar_SA/files_versions.po26
-rw-r--r--l10n/ar_SA/gallery.po58
-rw-r--r--l10n/ar_SA/lib.po112
-rw-r--r--l10n/ar_SA/media.po66
-rw-r--r--l10n/ar_SA/settings.po238
-rw-r--r--l10n/ar_SA/tasks.po106
-rw-r--r--l10n/ar_SA/user_ldap.po164
-rw-r--r--l10n/ar_SA/user_migrate.po51
-rw-r--r--l10n/ar_SA/user_openid.po54
-rw-r--r--l10n/bg_BG/admin_dependencies_chk.po73
-rw-r--r--l10n/bg_BG/admin_migrate.po32
-rw-r--r--l10n/bg_BG/bookmarks.po61
-rw-r--r--l10n/bg_BG/calendar.po519
-rw-r--r--l10n/bg_BG/contacts.po755
-rw-r--r--l10n/bg_BG/core.po93
-rw-r--r--l10n/bg_BG/files.po113
-rw-r--r--l10n/bg_BG/files_encryption.po34
-rw-r--r--l10n/bg_BG/files_external.po82
-rw-r--r--l10n/bg_BG/files_sharing.po34
-rw-r--r--l10n/bg_BG/files_versions.po26
-rw-r--r--l10n/bg_BG/lib.po112
-rw-r--r--l10n/bg_BG/media.po13
-rw-r--r--l10n/bg_BG/settings.po113
-rw-r--r--l10n/bg_BG/tasks.po106
-rw-r--r--l10n/bg_BG/user_ldap.po164
-rw-r--r--l10n/bg_BG/user_migrate.po51
-rw-r--r--l10n/bg_BG/user_openid.po54
-rw-r--r--l10n/ca/admin_dependencies_chk.po74
-rw-r--r--l10n/ca/admin_migrate.po33
-rw-r--r--l10n/ca/bookmarks.po61
-rw-r--r--l10n/ca/calendar.po460
-rw-r--r--l10n/ca/contacts.po901
-rw-r--r--l10n/ca/core.po84
-rw-r--r--l10n/ca/files.po104
-rw-r--r--l10n/ca/files_encryption.po35
-rw-r--r--l10n/ca/files_external.po83
-rw-r--r--l10n/ca/files_sharing.po35
-rw-r--r--l10n/ca/files_versions.po27
-rw-r--r--l10n/ca/gallery.po64
-rw-r--r--l10n/ca/lib.po113
-rw-r--r--l10n/ca/settings.po100
-rw-r--r--l10n/ca/tasks.po107
-rw-r--r--l10n/ca/user_ldap.po165
-rw-r--r--l10n/ca/user_migrate.po52
-rw-r--r--l10n/ca/user_openid.po55
-rw-r--r--l10n/cs_CZ/admin_dependencies_chk.po74
-rw-r--r--l10n/cs_CZ/admin_migrate.po33
-rw-r--r--l10n/cs_CZ/bookmarks.po61
-rw-r--r--l10n/cs_CZ/calendar.po454
-rw-r--r--l10n/cs_CZ/contacts.po895
-rw-r--r--l10n/cs_CZ/core.po84
-rw-r--r--l10n/cs_CZ/files.po104
-rw-r--r--l10n/cs_CZ/files_encryption.po35
-rw-r--r--l10n/cs_CZ/files_external.po84
-rw-r--r--l10n/cs_CZ/files_sharing.po36
-rw-r--r--l10n/cs_CZ/files_versions.po27
-rw-r--r--l10n/cs_CZ/gallery.po84
-rw-r--r--l10n/cs_CZ/lib.po113
-rw-r--r--l10n/cs_CZ/settings.po98
-rw-r--r--l10n/cs_CZ/tasks.po107
-rw-r--r--l10n/cs_CZ/user_ldap.po165
-rw-r--r--l10n/cs_CZ/user_migrate.po52
-rw-r--r--l10n/cs_CZ/user_openid.po55
-rw-r--r--l10n/da/admin_dependencies_chk.po73
-rw-r--r--l10n/da/admin_migrate.po33
-rw-r--r--l10n/da/bookmarks.po60
-rw-r--r--l10n/da/calendar.po460
-rw-r--r--l10n/da/contacts.po902
-rw-r--r--l10n/da/core.po85
-rw-r--r--l10n/da/files.po105
-rw-r--r--l10n/da/files_encryption.po34
-rw-r--r--l10n/da/files_external.po82
-rw-r--r--l10n/da/files_sharing.po34
-rw-r--r--l10n/da/files_versions.po26
-rw-r--r--l10n/da/lib.po112
-rw-r--r--l10n/da/settings.po100
-rw-r--r--l10n/da/tasks.po107
-rw-r--r--l10n/da/user_ldap.po165
-rw-r--r--l10n/da/user_migrate.po51
-rw-r--r--l10n/da/user_openid.po54
-rw-r--r--l10n/de/admin_dependencies_chk.po77
-rw-r--r--l10n/de/admin_migrate.po34
-rw-r--r--l10n/de/bookmarks.po63
-rw-r--r--l10n/de/calendar.po479
-rw-r--r--l10n/de/contacts.po941
-rw-r--r--l10n/de/core.po117
-rw-r--r--l10n/de/files.po117
-rw-r--r--l10n/de/files_encryption.po35
-rw-r--r--l10n/de/files_external.po84
-rw-r--r--l10n/de/files_sharing.po37
-rw-r--r--l10n/de/files_versions.po27
-rw-r--r--l10n/de/gallery.po66
-rw-r--r--l10n/de/lib.po115
-rw-r--r--l10n/de/settings.po126
-rw-r--r--l10n/de/tasks.po109
-rw-r--r--l10n/de/user_ldap.po169
-rw-r--r--l10n/de/user_migrate.po54
-rw-r--r--l10n/de/user_openid.po57
-rw-r--r--l10n/el/admin_dependencies_chk.po74
-rw-r--r--l10n/el/admin_migrate.po33
-rw-r--r--l10n/el/bookmarks.po62
-rw-r--r--l10n/el/calendar.po462
-rw-r--r--l10n/el/contacts.po910
-rw-r--r--l10n/el/core.po85
-rw-r--r--l10n/el/files.po105
-rw-r--r--l10n/el/files_encryption.po35
-rw-r--r--l10n/el/files_external.po83
-rw-r--r--l10n/el/files_sharing.po35
-rw-r--r--l10n/el/files_versions.po27
-rw-r--r--l10n/el/gallery.po65
-rw-r--r--l10n/el/lib.po113
-rw-r--r--l10n/el/settings.po100
-rw-r--r--l10n/el/tasks.po107
-rw-r--r--l10n/el/user_ldap.po165
-rw-r--r--l10n/el/user_migrate.po52
-rw-r--r--l10n/el/user_openid.po55
-rw-r--r--l10n/eo/admin_dependencies_chk.po74
-rw-r--r--l10n/eo/admin_migrate.po33
-rw-r--r--l10n/eo/bookmarks.po61
-rw-r--r--l10n/eo/calendar.po459
-rw-r--r--l10n/eo/contacts.po896
-rw-r--r--l10n/eo/core.po99
-rw-r--r--l10n/eo/files.po105
-rw-r--r--l10n/eo/files_encryption.po35
-rw-r--r--l10n/eo/files_external.po83
-rw-r--r--l10n/eo/files_sharing.po35
-rw-r--r--l10n/eo/files_versions.po27
-rw-r--r--l10n/eo/lib.po113
-rw-r--r--l10n/eo/media.po19
-rw-r--r--l10n/eo/settings.po101
-rw-r--r--l10n/eo/tasks.po107
-rw-r--r--l10n/eo/user_ldap.po165
-rw-r--r--l10n/eo/user_migrate.po52
-rw-r--r--l10n/eo/user_openid.po55
-rw-r--r--l10n/es/admin_dependencies_chk.po74
-rw-r--r--l10n/es/admin_migrate.po33
-rw-r--r--l10n/es/bookmarks.po61
-rw-r--r--l10n/es/calendar.po460
-rw-r--r--l10n/es/contacts.po895
-rw-r--r--l10n/es/core.po87
-rw-r--r--l10n/es/files.po105
-rw-r--r--l10n/es/files_encryption.po35
-rw-r--r--l10n/es/files_external.po83
-rw-r--r--l10n/es/files_sharing.po35
-rw-r--r--l10n/es/files_versions.po27
-rw-r--r--l10n/es/gallery.po65
-rw-r--r--l10n/es/lib.po113
-rw-r--r--l10n/es/settings.po100
-rw-r--r--l10n/es/tasks.po107
-rw-r--r--l10n/es/user_ldap.po165
-rw-r--r--l10n/es/user_migrate.po52
-rw-r--r--l10n/es/user_openid.po55
-rw-r--r--l10n/et_EE/admin_dependencies_chk.po74
-rw-r--r--l10n/et_EE/admin_migrate.po33
-rw-r--r--l10n/et_EE/bookmarks.po61
-rw-r--r--l10n/et_EE/calendar.po458
-rw-r--r--l10n/et_EE/contacts.po883
-rw-r--r--l10n/et_EE/core.po84
-rw-r--r--l10n/et_EE/files.po102
-rw-r--r--l10n/et_EE/files_encryption.po35
-rw-r--r--l10n/et_EE/files_external.po83
-rw-r--r--l10n/et_EE/files_sharing.po35
-rw-r--r--l10n/et_EE/files_versions.po27
-rw-r--r--l10n/et_EE/lib.po113
-rw-r--r--l10n/et_EE/settings.po98
-rw-r--r--l10n/et_EE/tasks.po107
-rw-r--r--l10n/et_EE/user_ldap.po164
-rw-r--r--l10n/et_EE/user_migrate.po51
-rw-r--r--l10n/et_EE/user_openid.po55
-rw-r--r--l10n/eu/admin_dependencies_chk.po73
-rw-r--r--l10n/eu/admin_migrate.po32
-rw-r--r--l10n/eu/bookmarks.po60
-rw-r--r--l10n/eu/calendar.po450
-rw-r--r--l10n/eu/contacts.po905
-rw-r--r--l10n/eu/core.po84
-rw-r--r--l10n/eu/files.po104
-rw-r--r--l10n/eu/files_encryption.po34
-rw-r--r--l10n/eu/files_external.po82
-rw-r--r--l10n/eu/files_sharing.po34
-rw-r--r--l10n/eu/files_versions.po26
-rw-r--r--l10n/eu/lib.po112
-rw-r--r--l10n/eu/settings.po102
-rw-r--r--l10n/eu/tasks.po106
-rw-r--r--l10n/eu/user_ldap.po164
-rw-r--r--l10n/eu/user_migrate.po51
-rw-r--r--l10n/eu/user_openid.po54
-rw-r--r--l10n/eu_ES/admin_dependencies_chk.po73
-rw-r--r--l10n/eu_ES/admin_migrate.po32
-rw-r--r--l10n/eu_ES/bookmarks.po60
-rw-r--r--l10n/eu_ES/calendar.po813
-rw-r--r--l10n/eu_ES/contacts.po952
-rw-r--r--l10n/eu_ES/core.po268
-rw-r--r--l10n/eu_ES/files.po218
-rw-r--r--l10n/eu_ES/files_encryption.po34
-rw-r--r--l10n/eu_ES/files_external.po82
-rw-r--r--l10n/eu_ES/files_sharing.po34
-rw-r--r--l10n/eu_ES/files_versions.po26
-rw-r--r--l10n/eu_ES/gallery.po58
-rw-r--r--l10n/eu_ES/lib.po112
-rw-r--r--l10n/eu_ES/media.po66
-rw-r--r--l10n/eu_ES/settings.po238
-rw-r--r--l10n/eu_ES/tasks.po106
-rw-r--r--l10n/eu_ES/user_ldap.po164
-rw-r--r--l10n/eu_ES/user_migrate.po51
-rw-r--r--l10n/eu_ES/user_openid.po54
-rw-r--r--l10n/fa/admin_dependencies_chk.po73
-rw-r--r--l10n/fa/admin_migrate.po32
-rw-r--r--l10n/fa/bookmarks.po61
-rw-r--r--l10n/fa/calendar.po458
-rw-r--r--l10n/fa/contacts.po889
-rw-r--r--l10n/fa/core.po84
-rw-r--r--l10n/fa/files.po106
-rw-r--r--l10n/fa/files_encryption.po35
-rw-r--r--l10n/fa/files_external.po82
-rw-r--r--l10n/fa/files_sharing.po35
-rw-r--r--l10n/fa/files_versions.po27
-rw-r--r--l10n/fa/lib.po113
-rw-r--r--l10n/fa/settings.po99
-rw-r--r--l10n/fa/tasks.po107
-rw-r--r--l10n/fa/user_ldap.po164
-rw-r--r--l10n/fa/user_migrate.po51
-rw-r--r--l10n/fa/user_openid.po54
-rw-r--r--l10n/fi/admin_dependencies_chk.po73
-rw-r--r--l10n/fi/admin_migrate.po32
-rw-r--r--l10n/fi/bookmarks.po60
-rw-r--r--l10n/fi/calendar.po813
-rw-r--r--l10n/fi/contacts.po952
-rw-r--r--l10n/fi/core.po268
-rw-r--r--l10n/fi/files.po218
-rw-r--r--l10n/fi/files_encryption.po34
-rw-r--r--l10n/fi/files_external.po82
-rw-r--r--l10n/fi/files_sharing.po34
-rw-r--r--l10n/fi/files_versions.po26
-rw-r--r--l10n/fi/gallery.po58
-rw-r--r--l10n/fi/lib.po112
-rw-r--r--l10n/fi/media.po66
-rw-r--r--l10n/fi/settings.po238
-rw-r--r--l10n/fi/tasks.po106
-rw-r--r--l10n/fi/user_ldap.po164
-rw-r--r--l10n/fi/user_migrate.po51
-rw-r--r--l10n/fi/user_openid.po54
-rw-r--r--l10n/fi_FI/admin_dependencies_chk.po74
-rw-r--r--l10n/fi_FI/admin_migrate.po33
-rw-r--r--l10n/fi_FI/bookmarks.po61
-rw-r--r--l10n/fi_FI/calendar.po446
-rw-r--r--l10n/fi_FI/contacts.po889
-rw-r--r--l10n/fi_FI/core.po82
-rw-r--r--l10n/fi_FI/files.po106
-rw-r--r--l10n/fi_FI/files_encryption.po35
-rw-r--r--l10n/fi_FI/files_external.po83
-rw-r--r--l10n/fi_FI/files_sharing.po35
-rw-r--r--l10n/fi_FI/files_versions.po27
-rw-r--r--l10n/fi_FI/gallery.po64
-rw-r--r--l10n/fi_FI/lib.po113
-rw-r--r--l10n/fi_FI/settings.po102
-rw-r--r--l10n/fi_FI/tasks.po107
-rw-r--r--l10n/fi_FI/user_ldap.po166
-rw-r--r--l10n/fi_FI/user_migrate.po52
-rw-r--r--l10n/fi_FI/user_openid.po55
-rw-r--r--l10n/fr/admin_dependencies_chk.po74
-rw-r--r--l10n/fr/admin_migrate.po33
-rw-r--r--l10n/fr/bookmarks.po62
-rw-r--r--l10n/fr/calendar.po461
-rw-r--r--l10n/fr/contacts.po925
-rw-r--r--l10n/fr/core.po89
-rw-r--r--l10n/fr/files.po108
-rw-r--r--l10n/fr/files_encryption.po35
-rw-r--r--l10n/fr/files_external.po83
-rw-r--r--l10n/fr/files_sharing.po36
-rw-r--r--l10n/fr/files_versions.po27
-rw-r--r--l10n/fr/gallery.po66
-rw-r--r--l10n/fr/lib.po114
-rw-r--r--l10n/fr/media.po16
-rw-r--r--l10n/fr/settings.po106
-rw-r--r--l10n/fr/tasks.po109
-rw-r--r--l10n/fr/user_ldap.po166
-rw-r--r--l10n/fr/user_migrate.po53
-rw-r--r--l10n/fr/user_openid.po55
-rw-r--r--l10n/gl/admin_dependencies_chk.po73
-rw-r--r--l10n/gl/admin_migrate.po33
-rw-r--r--l10n/gl/bookmarks.po60
-rw-r--r--l10n/gl/calendar.po458
-rw-r--r--l10n/gl/contacts.po1003
-rw-r--r--l10n/gl/core.po84
-rw-r--r--l10n/gl/files.po104
-rw-r--r--l10n/gl/files_encryption.po34
-rw-r--r--l10n/gl/files_external.po82
-rw-r--r--l10n/gl/files_sharing.po34
-rw-r--r--l10n/gl/files_versions.po26
-rw-r--r--l10n/gl/lib.po112
-rw-r--r--l10n/gl/settings.po98
-rw-r--r--l10n/gl/tasks.po106
-rw-r--r--l10n/gl/user_ldap.po164
-rw-r--r--l10n/gl/user_migrate.po51
-rw-r--r--l10n/gl/user_openid.po54
-rw-r--r--l10n/he/admin_dependencies_chk.po73
-rw-r--r--l10n/he/admin_migrate.po32
-rw-r--r--l10n/he/bookmarks.po60
-rw-r--r--l10n/he/calendar.po459
-rw-r--r--l10n/he/contacts.po958
-rw-r--r--l10n/he/core.po83
-rw-r--r--l10n/he/files.po103
-rw-r--r--l10n/he/files_encryption.po34
-rw-r--r--l10n/he/files_external.po82
-rw-r--r--l10n/he/files_sharing.po34
-rw-r--r--l10n/he/files_versions.po26
-rw-r--r--l10n/he/lib.po112
-rw-r--r--l10n/he/settings.po99
-rw-r--r--l10n/he/tasks.po106
-rw-r--r--l10n/he/user_ldap.po164
-rw-r--r--l10n/he/user_migrate.po51
-rw-r--r--l10n/he/user_openid.po54
-rw-r--r--l10n/hr/admin_dependencies_chk.po73
-rw-r--r--l10n/hr/admin_migrate.po32
-rw-r--r--l10n/hr/bookmarks.po60
-rw-r--r--l10n/hr/calendar.po448
-rw-r--r--l10n/hr/contacts.po877
-rw-r--r--l10n/hr/core.po86
-rw-r--r--l10n/hr/files.po104
-rw-r--r--l10n/hr/files_encryption.po34
-rw-r--r--l10n/hr/files_external.po82
-rw-r--r--l10n/hr/files_sharing.po34
-rw-r--r--l10n/hr/files_versions.po26
-rw-r--r--l10n/hr/lib.po112
-rw-r--r--l10n/hr/settings.po100
-rw-r--r--l10n/hr/tasks.po106
-rw-r--r--l10n/hr/user_ldap.po164
-rw-r--r--l10n/hr/user_migrate.po51
-rw-r--r--l10n/hr/user_openid.po54
-rw-r--r--l10n/hu_HU/admin_dependencies_chk.po73
-rw-r--r--l10n/hu_HU/admin_migrate.po32
-rw-r--r--l10n/hu_HU/bookmarks.po60
-rw-r--r--l10n/hu_HU/calendar.po458
-rw-r--r--l10n/hu_HU/contacts.po889
-rw-r--r--l10n/hu_HU/core.po110
-rw-r--r--l10n/hu_HU/files.po104
-rw-r--r--l10n/hu_HU/files_encryption.po34
-rw-r--r--l10n/hu_HU/files_external.po82
-rw-r--r--l10n/hu_HU/files_sharing.po34
-rw-r--r--l10n/hu_HU/files_versions.po26
-rw-r--r--l10n/hu_HU/lib.po112
-rw-r--r--l10n/hu_HU/settings.po98
-rw-r--r--l10n/hu_HU/tasks.po106
-rw-r--r--l10n/hu_HU/user_ldap.po164
-rw-r--r--l10n/hu_HU/user_migrate.po51
-rw-r--r--l10n/hu_HU/user_openid.po54
-rw-r--r--l10n/hy/admin_dependencies_chk.po73
-rw-r--r--l10n/hy/admin_migrate.po32
-rw-r--r--l10n/hy/bookmarks.po60
-rw-r--r--l10n/hy/calendar.po428
-rw-r--r--l10n/hy/contacts.po755
-rw-r--r--l10n/hy/core.po46
-rw-r--r--l10n/hy/files.po82
-rw-r--r--l10n/hy/files_encryption.po34
-rw-r--r--l10n/hy/files_external.po82
-rw-r--r--l10n/hy/files_sharing.po34
-rw-r--r--l10n/hy/files_versions.po26
-rw-r--r--l10n/hy/lib.po112
-rw-r--r--l10n/hy/settings.po86
-rw-r--r--l10n/hy/tasks.po106
-rw-r--r--l10n/hy/user_ldap.po164
-rw-r--r--l10n/hy/user_migrate.po51
-rw-r--r--l10n/hy/user_openid.po54
-rw-r--r--l10n/ia/admin_dependencies_chk.po73
-rw-r--r--l10n/ia/admin_migrate.po32
-rw-r--r--l10n/ia/bookmarks.po60
-rw-r--r--l10n/ia/calendar.po438
-rw-r--r--l10n/ia/contacts.po825
-rw-r--r--l10n/ia/core.po46
-rw-r--r--l10n/ia/files.po82
-rw-r--r--l10n/ia/files_encryption.po34
-rw-r--r--l10n/ia/files_external.po82
-rw-r--r--l10n/ia/files_sharing.po34
-rw-r--r--l10n/ia/files_versions.po26
-rw-r--r--l10n/ia/lib.po112
-rw-r--r--l10n/ia/settings.po86
-rw-r--r--l10n/ia/tasks.po106
-rw-r--r--l10n/ia/user_ldap.po164
-rw-r--r--l10n/ia/user_migrate.po51
-rw-r--r--l10n/ia/user_openid.po54
-rw-r--r--l10n/id/admin_dependencies_chk.po73
-rw-r--r--l10n/id/admin_migrate.po32
-rw-r--r--l10n/id/bookmarks.po60
-rw-r--r--l10n/id/calendar.po430
-rw-r--r--l10n/id/contacts.po755
-rw-r--r--l10n/id/core.po46
-rw-r--r--l10n/id/files.po82
-rw-r--r--l10n/id/files_encryption.po34
-rw-r--r--l10n/id/files_external.po82
-rw-r--r--l10n/id/files_sharing.po34
-rw-r--r--l10n/id/files_versions.po26
-rw-r--r--l10n/id/lib.po112
-rw-r--r--l10n/id/settings.po86
-rw-r--r--l10n/id/tasks.po106
-rw-r--r--l10n/id/user_ldap.po164
-rw-r--r--l10n/id/user_migrate.po51
-rw-r--r--l10n/id/user_openid.po54
-rw-r--r--l10n/id_ID/admin_dependencies_chk.po73
-rw-r--r--l10n/id_ID/admin_migrate.po32
-rw-r--r--l10n/id_ID/bookmarks.po60
-rw-r--r--l10n/id_ID/calendar.po813
-rw-r--r--l10n/id_ID/contacts.po952
-rw-r--r--l10n/id_ID/core.po268
-rw-r--r--l10n/id_ID/files.po218
-rw-r--r--l10n/id_ID/files_encryption.po34
-rw-r--r--l10n/id_ID/files_external.po82
-rw-r--r--l10n/id_ID/files_sharing.po34
-rw-r--r--l10n/id_ID/files_versions.po26
-rw-r--r--l10n/id_ID/gallery.po58
-rw-r--r--l10n/id_ID/lib.po112
-rw-r--r--l10n/id_ID/media.po66
-rw-r--r--l10n/id_ID/settings.po238
-rw-r--r--l10n/id_ID/tasks.po106
-rw-r--r--l10n/id_ID/user_ldap.po164
-rw-r--r--l10n/id_ID/user_migrate.po51
-rw-r--r--l10n/id_ID/user_openid.po54
-rw-r--r--l10n/it/admin_dependencies_chk.po74
-rw-r--r--l10n/it/admin_migrate.po33
-rw-r--r--l10n/it/bookmarks.po61
-rw-r--r--l10n/it/calendar.po458
-rw-r--r--l10n/it/contacts.po901
-rw-r--r--l10n/it/core.po84
-rw-r--r--l10n/it/files.po104
-rw-r--r--l10n/it/files_encryption.po35
-rw-r--r--l10n/it/files_external.po84
-rw-r--r--l10n/it/files_sharing.po35
-rw-r--r--l10n/it/files_versions.po27
-rw-r--r--l10n/it/gallery.po64
-rw-r--r--l10n/it/lib.po113
-rw-r--r--l10n/it/settings.po100
-rw-r--r--l10n/it/tasks.po107
-rw-r--r--l10n/it/user_ldap.po166
-rw-r--r--l10n/it/user_migrate.po52
-rw-r--r--l10n/it/user_openid.po55
-rw-r--r--l10n/ja_JP/admin_dependencies_chk.po74
-rw-r--r--l10n/ja_JP/admin_migrate.po33
-rw-r--r--l10n/ja_JP/bookmarks.po60
-rw-r--r--l10n/ja_JP/calendar.po503
-rw-r--r--l10n/ja_JP/contacts.po928
-rw-r--r--l10n/ja_JP/core.po84
-rw-r--r--l10n/ja_JP/files.po104
-rw-r--r--l10n/ja_JP/files_encryption.po35
-rw-r--r--l10n/ja_JP/files_external.po83
-rw-r--r--l10n/ja_JP/files_sharing.po36
-rw-r--r--l10n/ja_JP/files_versions.po27
-rw-r--r--l10n/ja_JP/lib.po112
-rw-r--r--l10n/ja_JP/settings.po99
-rw-r--r--l10n/ja_JP/tasks.po108
-rw-r--r--l10n/ja_JP/user_ldap.po166
-rw-r--r--l10n/ja_JP/user_migrate.po52
-rw-r--r--l10n/ja_JP/user_openid.po55
-rw-r--r--l10n/ko/admin_dependencies_chk.po73
-rw-r--r--l10n/ko/admin_migrate.po32
-rw-r--r--l10n/ko/bookmarks.po60
-rw-r--r--l10n/ko/calendar.po460
-rw-r--r--l10n/ko/contacts.po959
-rw-r--r--l10n/ko/core.po84
-rw-r--r--l10n/ko/files.po100
-rw-r--r--l10n/ko/files_encryption.po34
-rw-r--r--l10n/ko/files_external.po82
-rw-r--r--l10n/ko/files_sharing.po34
-rw-r--r--l10n/ko/files_versions.po26
-rw-r--r--l10n/ko/lib.po112
-rw-r--r--l10n/ko/settings.po98
-rw-r--r--l10n/ko/tasks.po106
-rw-r--r--l10n/ko/user_ldap.po164
-rw-r--r--l10n/ko/user_migrate.po51
-rw-r--r--l10n/ko/user_openid.po54
-rw-r--r--l10n/l10n.pl2
-rw-r--r--l10n/lb/admin_dependencies_chk.po73
-rw-r--r--l10n/lb/admin_migrate.po32
-rw-r--r--l10n/lb/bookmarks.po60
-rw-r--r--l10n/lb/calendar.po444
-rw-r--r--l10n/lb/contacts.po883
-rw-r--r--l10n/lb/core.po46
-rw-r--r--l10n/lb/files.po82
-rw-r--r--l10n/lb/files_encryption.po34
-rw-r--r--l10n/lb/files_external.po82
-rw-r--r--l10n/lb/files_sharing.po34
-rw-r--r--l10n/lb/files_versions.po26
-rw-r--r--l10n/lb/lib.po112
-rw-r--r--l10n/lb/settings.po86
-rw-r--r--l10n/lb/tasks.po106
-rw-r--r--l10n/lb/user_ldap.po164
-rw-r--r--l10n/lb/user_migrate.po51
-rw-r--r--l10n/lb/user_openid.po54
-rw-r--r--l10n/lt_LT/admin_dependencies_chk.po74
-rw-r--r--l10n/lt_LT/admin_migrate.po33
-rw-r--r--l10n/lt_LT/bookmarks.po61
-rw-r--r--l10n/lt_LT/calendar.po448
-rw-r--r--l10n/lt_LT/contacts.po837
-rw-r--r--l10n/lt_LT/core.po88
-rw-r--r--l10n/lt_LT/files.po117
-rw-r--r--l10n/lt_LT/files_encryption.po35
-rw-r--r--l10n/lt_LT/files_external.po83
-rw-r--r--l10n/lt_LT/files_sharing.po35
-rw-r--r--l10n/lt_LT/files_versions.po27
-rw-r--r--l10n/lt_LT/lib.po113
-rw-r--r--l10n/lt_LT/settings.po96
-rw-r--r--l10n/lt_LT/tasks.po107
-rw-r--r--l10n/lt_LT/user_ldap.po165
-rw-r--r--l10n/lt_LT/user_migrate.po52
-rw-r--r--l10n/lt_LT/user_openid.po54
-rw-r--r--l10n/lv/admin_dependencies_chk.po73
-rw-r--r--l10n/lv/admin_migrate.po32
-rw-r--r--l10n/lv/bookmarks.po60
-rw-r--r--l10n/lv/calendar.po813
-rw-r--r--l10n/lv/contacts.po952
-rw-r--r--l10n/lv/core.po269
-rw-r--r--l10n/lv/files.po219
-rw-r--r--l10n/lv/files_encryption.po34
-rw-r--r--l10n/lv/files_external.po82
-rw-r--r--l10n/lv/files_sharing.po34
-rw-r--r--l10n/lv/files_versions.po26
-rw-r--r--l10n/lv/gallery.po58
-rw-r--r--l10n/lv/lib.po112
-rw-r--r--l10n/lv/media.po66
-rw-r--r--l10n/lv/settings.po239
-rw-r--r--l10n/lv/tasks.po106
-rw-r--r--l10n/lv/user_ldap.po164
-rw-r--r--l10n/lv/user_migrate.po51
-rw-r--r--l10n/lv/user_openid.po54
-rw-r--r--l10n/mk/admin_dependencies_chk.po73
-rw-r--r--l10n/mk/admin_migrate.po32
-rw-r--r--l10n/mk/bookmarks.po60
-rw-r--r--l10n/mk/calendar.po459
-rw-r--r--l10n/mk/contacts.po890
-rw-r--r--l10n/mk/core.po85
-rw-r--r--l10n/mk/files.po103
-rw-r--r--l10n/mk/files_encryption.po34
-rw-r--r--l10n/mk/files_external.po82
-rw-r--r--l10n/mk/files_sharing.po34
-rw-r--r--l10n/mk/files_versions.po26
-rw-r--r--l10n/mk/lib.po112
-rw-r--r--l10n/mk/settings.po99
-rw-r--r--l10n/mk/tasks.po106
-rw-r--r--l10n/mk/user_ldap.po164
-rw-r--r--l10n/mk/user_migrate.po51
-rw-r--r--l10n/mk/user_openid.po54
-rw-r--r--l10n/ms_MY/admin_dependencies_chk.po73
-rw-r--r--l10n/ms_MY/admin_migrate.po32
-rw-r--r--l10n/ms_MY/bookmarks.po60
-rw-r--r--l10n/ms_MY/calendar.po509
-rw-r--r--l10n/ms_MY/contacts.po1019
-rw-r--r--l10n/ms_MY/core.po97
-rw-r--r--l10n/ms_MY/files.po128
-rw-r--r--l10n/ms_MY/files_encryption.po34
-rw-r--r--l10n/ms_MY/files_external.po82
-rw-r--r--l10n/ms_MY/files_sharing.po34
-rw-r--r--l10n/ms_MY/files_versions.po26
-rw-r--r--l10n/ms_MY/lib.po112
-rw-r--r--l10n/ms_MY/settings.po128
-rw-r--r--l10n/ms_MY/tasks.po106
-rw-r--r--l10n/ms_MY/user_ldap.po164
-rw-r--r--l10n/ms_MY/user_migrate.po51
-rw-r--r--l10n/ms_MY/user_openid.po54
-rw-r--r--l10n/nb_NO/admin_dependencies_chk.po73
-rw-r--r--l10n/nb_NO/admin_migrate.po33
-rw-r--r--l10n/nb_NO/bookmarks.po61
-rw-r--r--l10n/nb_NO/calendar.po450
-rw-r--r--l10n/nb_NO/contacts.po877
-rw-r--r--l10n/nb_NO/core.po82
-rw-r--r--l10n/nb_NO/files.po95
-rw-r--r--l10n/nb_NO/files_encryption.po35
-rw-r--r--l10n/nb_NO/files_external.po82
-rw-r--r--l10n/nb_NO/files_sharing.po35
-rw-r--r--l10n/nb_NO/files_versions.po27
-rw-r--r--l10n/nb_NO/lib.po113
-rw-r--r--l10n/nb_NO/settings.po103
-rw-r--r--l10n/nb_NO/tasks.po107
-rw-r--r--l10n/nb_NO/user_ldap.po164
-rw-r--r--l10n/nb_NO/user_migrate.po51
-rw-r--r--l10n/nb_NO/user_openid.po54
-rw-r--r--l10n/nl/admin_dependencies_chk.po73
-rw-r--r--l10n/nl/admin_migrate.po32
-rw-r--r--l10n/nl/bookmarks.po60
-rw-r--r--l10n/nl/calendar.po461
-rw-r--r--l10n/nl/contacts.po843
-rw-r--r--l10n/nl/core.po83
-rw-r--r--l10n/nl/files.po103
-rw-r--r--l10n/nl/files_encryption.po34
-rw-r--r--l10n/nl/files_external.po82
-rw-r--r--l10n/nl/files_sharing.po34
-rw-r--r--l10n/nl/files_versions.po26
-rw-r--r--l10n/nl/lib.po112
-rw-r--r--l10n/nl/settings.po99
-rw-r--r--l10n/nl/tasks.po106
-rw-r--r--l10n/nl/user_ldap.po164
-rw-r--r--l10n/nl/user_migrate.po51
-rw-r--r--l10n/nl/user_openid.po54
-rw-r--r--l10n/nn_NO/admin_dependencies_chk.po73
-rw-r--r--l10n/nn_NO/admin_migrate.po32
-rw-r--r--l10n/nn_NO/bookmarks.po60
-rw-r--r--l10n/nn_NO/calendar.po446
-rw-r--r--l10n/nn_NO/contacts.po821
-rw-r--r--l10n/nn_NO/core.po46
-rw-r--r--l10n/nn_NO/files.po82
-rw-r--r--l10n/nn_NO/files_encryption.po34
-rw-r--r--l10n/nn_NO/files_external.po82
-rw-r--r--l10n/nn_NO/files_sharing.po34
-rw-r--r--l10n/nn_NO/files_versions.po26
-rw-r--r--l10n/nn_NO/lib.po112
-rw-r--r--l10n/nn_NO/settings.po94
-rw-r--r--l10n/nn_NO/tasks.po106
-rw-r--r--l10n/nn_NO/user_ldap.po164
-rw-r--r--l10n/nn_NO/user_migrate.po51
-rw-r--r--l10n/nn_NO/user_openid.po54
-rw-r--r--l10n/pl/admin_dependencies_chk.po74
-rw-r--r--l10n/pl/admin_migrate.po33
-rw-r--r--l10n/pl/bookmarks.po60
-rw-r--r--l10n/pl/calendar.po459
-rw-r--r--l10n/pl/contacts.po902
-rw-r--r--l10n/pl/core.po85
-rw-r--r--l10n/pl/files.po104
-rw-r--r--l10n/pl/files_encryption.po35
-rw-r--r--l10n/pl/files_external.po83
-rw-r--r--l10n/pl/files_sharing.po35
-rw-r--r--l10n/pl/files_versions.po27
-rw-r--r--l10n/pl/gallery.po65
-rw-r--r--l10n/pl/lib.po112
-rw-r--r--l10n/pl/settings.po99
-rw-r--r--l10n/pl/tasks.po107
-rw-r--r--l10n/pl/user_ldap.po165
-rw-r--r--l10n/pl/user_migrate.po52
-rw-r--r--l10n/pl/user_openid.po55
-rw-r--r--l10n/pt_BR/admin_dependencies_chk.po73
-rw-r--r--l10n/pt_BR/admin_migrate.po32
-rw-r--r--l10n/pt_BR/bookmarks.po60
-rw-r--r--l10n/pt_BR/calendar.po459
-rw-r--r--l10n/pt_BR/contacts.po891
-rw-r--r--l10n/pt_BR/core.po85
-rw-r--r--l10n/pt_BR/files.po103
-rw-r--r--l10n/pt_BR/files_encryption.po34
-rw-r--r--l10n/pt_BR/files_external.po82
-rw-r--r--l10n/pt_BR/files_sharing.po34
-rw-r--r--l10n/pt_BR/files_versions.po26
-rw-r--r--l10n/pt_BR/lib.po112
-rw-r--r--l10n/pt_BR/settings.po99
-rw-r--r--l10n/pt_BR/tasks.po106
-rw-r--r--l10n/pt_BR/user_ldap.po164
-rw-r--r--l10n/pt_BR/user_migrate.po51
-rw-r--r--l10n/pt_BR/user_openid.po54
-rw-r--r--l10n/pt_PT/admin_dependencies_chk.po73
-rw-r--r--l10n/pt_PT/admin_migrate.po32
-rw-r--r--l10n/pt_PT/bookmarks.po60
-rw-r--r--l10n/pt_PT/calendar.po457
-rw-r--r--l10n/pt_PT/contacts.po946
-rw-r--r--l10n/pt_PT/core.po84
-rw-r--r--l10n/pt_PT/files.po105
-rw-r--r--l10n/pt_PT/files_encryption.po34
-rw-r--r--l10n/pt_PT/files_external.po82
-rw-r--r--l10n/pt_PT/files_sharing.po34
-rw-r--r--l10n/pt_PT/files_versions.po26
-rw-r--r--l10n/pt_PT/gallery.po85
-rw-r--r--l10n/pt_PT/lib.po112
-rw-r--r--l10n/pt_PT/settings.po99
-rw-r--r--l10n/pt_PT/tasks.po106
-rw-r--r--l10n/pt_PT/user_ldap.po164
-rw-r--r--l10n/pt_PT/user_migrate.po51
-rw-r--r--l10n/pt_PT/user_openid.po54
-rw-r--r--l10n/ro/admin_dependencies_chk.po73
-rw-r--r--l10n/ro/admin_migrate.po32
-rw-r--r--l10n/ro/bookmarks.po60
-rw-r--r--l10n/ro/calendar.po448
-rw-r--r--l10n/ro/contacts.po823
-rw-r--r--l10n/ro/core.po46
-rw-r--r--l10n/ro/files.po82
-rw-r--r--l10n/ro/files_encryption.po34
-rw-r--r--l10n/ro/files_external.po82
-rw-r--r--l10n/ro/files_sharing.po34
-rw-r--r--l10n/ro/files_versions.po26
-rw-r--r--l10n/ro/lib.po112
-rw-r--r--l10n/ro/settings.po86
-rw-r--r--l10n/ro/tasks.po107
-rw-r--r--l10n/ro/user_ldap.po165
-rw-r--r--l10n/ro/user_migrate.po51
-rw-r--r--l10n/ro/user_openid.po54
-rw-r--r--l10n/ru/admin_dependencies_chk.po73
-rw-r--r--l10n/ru/admin_migrate.po32
-rw-r--r--l10n/ru/bookmarks.po60
-rw-r--r--l10n/ru/calendar.po462
-rw-r--r--l10n/ru/contacts.po950
-rw-r--r--l10n/ru/core.po85
-rw-r--r--l10n/ru/files.po106
-rw-r--r--l10n/ru/files_encryption.po34
-rw-r--r--l10n/ru/files_external.po82
-rw-r--r--l10n/ru/files_sharing.po34
-rw-r--r--l10n/ru/files_versions.po26
-rw-r--r--l10n/ru/gallery.po85
-rw-r--r--l10n/ru/lib.po112
-rw-r--r--l10n/ru/settings.po101
-rw-r--r--l10n/ru/tasks.po106
-rw-r--r--l10n/ru/user_ldap.po164
-rw-r--r--l10n/ru/user_migrate.po51
-rw-r--r--l10n/ru/user_openid.po54
-rw-r--r--l10n/sk_SK/admin_dependencies_chk.po73
-rw-r--r--l10n/sk_SK/admin_migrate.po32
-rw-r--r--l10n/sk_SK/bookmarks.po60
-rw-r--r--l10n/sk_SK/calendar.po458
-rw-r--r--l10n/sk_SK/contacts.po894
-rw-r--r--l10n/sk_SK/core.po84
-rw-r--r--l10n/sk_SK/files.po102
-rw-r--r--l10n/sk_SK/files_encryption.po34
-rw-r--r--l10n/sk_SK/files_external.po82
-rw-r--r--l10n/sk_SK/files_sharing.po34
-rw-r--r--l10n/sk_SK/files_versions.po26
-rw-r--r--l10n/sk_SK/lib.po112
-rw-r--r--l10n/sk_SK/settings.po98
-rw-r--r--l10n/sk_SK/tasks.po106
-rw-r--r--l10n/sk_SK/user_ldap.po164
-rw-r--r--l10n/sk_SK/user_migrate.po51
-rw-r--r--l10n/sk_SK/user_openid.po54
-rw-r--r--l10n/sl/admin_dependencies_chk.po74
-rw-r--r--l10n/sl/admin_migrate.po33
-rw-r--r--l10n/sl/bookmarks.po61
-rw-r--r--l10n/sl/calendar.po458
-rw-r--r--l10n/sl/contacts.po901
-rw-r--r--l10n/sl/core.po84
-rw-r--r--l10n/sl/files.po106
-rw-r--r--l10n/sl/files_encryption.po35
-rw-r--r--l10n/sl/files_external.po83
-rw-r--r--l10n/sl/files_sharing.po35
-rw-r--r--l10n/sl/files_versions.po27
-rw-r--r--l10n/sl/gallery.po64
-rw-r--r--l10n/sl/lib.po113
-rw-r--r--l10n/sl/settings.po98
-rw-r--r--l10n/sl/tasks.po107
-rw-r--r--l10n/sl/user_ldap.po165
-rw-r--r--l10n/sl/user_migrate.po52
-rw-r--r--l10n/sl/user_openid.po55
-rw-r--r--l10n/so/admin_dependencies_chk.po73
-rw-r--r--l10n/so/admin_migrate.po32
-rw-r--r--l10n/so/bookmarks.po60
-rw-r--r--l10n/so/calendar.po813
-rw-r--r--l10n/so/contacts.po952
-rw-r--r--l10n/so/core.po268
-rw-r--r--l10n/so/files.po218
-rw-r--r--l10n/so/files_encryption.po34
-rw-r--r--l10n/so/files_external.po82
-rw-r--r--l10n/so/files_sharing.po34
-rw-r--r--l10n/so/files_versions.po26
-rw-r--r--l10n/so/gallery.po58
-rw-r--r--l10n/so/lib.po112
-rw-r--r--l10n/so/media.po66
-rw-r--r--l10n/so/settings.po238
-rw-r--r--l10n/so/tasks.po106
-rw-r--r--l10n/so/user_ldap.po164
-rw-r--r--l10n/so/user_migrate.po51
-rw-r--r--l10n/so/user_openid.po54
-rw-r--r--l10n/sr/admin_dependencies_chk.po73
-rw-r--r--l10n/sr/admin_migrate.po32
-rw-r--r--l10n/sr/bookmarks.po60
-rw-r--r--l10n/sr/calendar.po430
-rw-r--r--l10n/sr/contacts.po809
-rw-r--r--l10n/sr/core.po46
-rw-r--r--l10n/sr/files.po82
-rw-r--r--l10n/sr/files_encryption.po34
-rw-r--r--l10n/sr/files_external.po82
-rw-r--r--l10n/sr/files_sharing.po34
-rw-r--r--l10n/sr/files_versions.po26
-rw-r--r--l10n/sr/lib.po112
-rw-r--r--l10n/sr/settings.po86
-rw-r--r--l10n/sr/tasks.po106
-rw-r--r--l10n/sr/user_ldap.po164
-rw-r--r--l10n/sr/user_migrate.po51
-rw-r--r--l10n/sr/user_openid.po54
-rw-r--r--l10n/sr@latin/admin_dependencies_chk.po73
-rw-r--r--l10n/sr@latin/admin_migrate.po32
-rw-r--r--l10n/sr@latin/bookmarks.po60
-rw-r--r--l10n/sr@latin/calendar.po430
-rw-r--r--l10n/sr@latin/contacts.po785
-rw-r--r--l10n/sr@latin/core.po46
-rw-r--r--l10n/sr@latin/files.po82
-rw-r--r--l10n/sr@latin/files_encryption.po34
-rw-r--r--l10n/sr@latin/files_external.po82
-rw-r--r--l10n/sr@latin/files_sharing.po34
-rw-r--r--l10n/sr@latin/files_versions.po26
-rw-r--r--l10n/sr@latin/lib.po112
-rw-r--r--l10n/sr@latin/settings.po86
-rw-r--r--l10n/sr@latin/tasks.po106
-rw-r--r--l10n/sr@latin/user_ldap.po164
-rw-r--r--l10n/sr@latin/user_migrate.po51
-rw-r--r--l10n/sr@latin/user_openid.po54
-rw-r--r--l10n/sv/admin_dependencies_chk.po74
-rw-r--r--l10n/sv/admin_migrate.po33
-rw-r--r--l10n/sv/bookmarks.po61
-rw-r--r--l10n/sv/calendar.po459
-rw-r--r--l10n/sv/contacts.po945
-rw-r--r--l10n/sv/core.po102
-rw-r--r--l10n/sv/files.po120
-rw-r--r--l10n/sv/files_encryption.po35
-rw-r--r--l10n/sv/files_external.po83
-rw-r--r--l10n/sv/files_sharing.po35
-rw-r--r--l10n/sv/files_versions.po27
-rw-r--r--l10n/sv/gallery.po65
-rw-r--r--l10n/sv/lib.po114
-rw-r--r--l10n/sv/media.po14
-rw-r--r--l10n/sv/settings.po109
-rw-r--r--l10n/sv/tasks.po107
-rw-r--r--l10n/sv/user_ldap.po165
-rw-r--r--l10n/sv/user_migrate.po52
-rw-r--r--l10n/sv/user_openid.po55
-rw-r--r--l10n/templates/admin_dependencies_chk.pot71
-rw-r--r--l10n/templates/admin_migrate.pot33
-rw-r--r--l10n/templates/bookmarks.pot4
-rw-r--r--l10n/templates/calendar.pot422
-rw-r--r--l10n/templates/contacts.pot748
-rw-r--r--l10n/templates/core.pot40
-rw-r--r--l10n/templates/files.pot76
-rw-r--r--l10n/templates/files_encryption.pot34
-rw-r--r--l10n/templates/files_external.pot82
-rw-r--r--l10n/templates/files_sharing.pot34
-rw-r--r--l10n/templates/files_versions.pot26
-rw-r--r--l10n/templates/gallery.pot70
-rw-r--r--l10n/templates/lib.pot112
-rw-r--r--l10n/templates/media.pot4
-rw-r--r--l10n/templates/settings.pot80
-rw-r--r--l10n/templates/tasks.pot106
-rw-r--r--l10n/templates/user_ldap.pot163
-rw-r--r--l10n/templates/user_migrate.pot50
-rw-r--r--l10n/templates/user_openid.pot54
-rw-r--r--l10n/th_TH/admin_dependencies_chk.po74
-rw-r--r--l10n/th_TH/admin_migrate.po33
-rw-r--r--l10n/th_TH/bookmarks.po61
-rw-r--r--l10n/th_TH/calendar.po458
-rw-r--r--l10n/th_TH/contacts.po897
-rw-r--r--l10n/th_TH/core.po84
-rw-r--r--l10n/th_TH/files.po104
-rw-r--r--l10n/th_TH/files_encryption.po35
-rw-r--r--l10n/th_TH/files_external.po83
-rw-r--r--l10n/th_TH/files_sharing.po35
-rw-r--r--l10n/th_TH/files_versions.po27
-rw-r--r--l10n/th_TH/gallery.po84
-rw-r--r--l10n/th_TH/lib.po113
-rw-r--r--l10n/th_TH/settings.po98
-rw-r--r--l10n/th_TH/tasks.po107
-rw-r--r--l10n/th_TH/user_ldap.po165
-rw-r--r--l10n/th_TH/user_migrate.po52
-rw-r--r--l10n/th_TH/user_openid.po55
-rw-r--r--l10n/tr/admin_dependencies_chk.po73
-rw-r--r--l10n/tr/admin_migrate.po32
-rw-r--r--l10n/tr/bookmarks.po60
-rw-r--r--l10n/tr/calendar.po460
-rw-r--r--l10n/tr/contacts.po890
-rw-r--r--l10n/tr/core.po85
-rw-r--r--l10n/tr/files.po103
-rw-r--r--l10n/tr/files_encryption.po34
-rw-r--r--l10n/tr/files_external.po82
-rw-r--r--l10n/tr/files_sharing.po34
-rw-r--r--l10n/tr/files_versions.po26
-rw-r--r--l10n/tr/gallery.po66
-rw-r--r--l10n/tr/lib.po112
-rw-r--r--l10n/tr/settings.po100
-rw-r--r--l10n/tr/tasks.po106
-rw-r--r--l10n/tr/user_ldap.po164
-rw-r--r--l10n/tr/user_migrate.po51
-rw-r--r--l10n/tr/user_openid.po54
-rw-r--r--l10n/uk/admin_dependencies_chk.po73
-rw-r--r--l10n/uk/admin_migrate.po32
-rw-r--r--l10n/uk/bookmarks.po60
-rw-r--r--l10n/uk/calendar.po466
-rw-r--r--l10n/uk/contacts.po793
-rw-r--r--l10n/uk/core.po46
-rw-r--r--l10n/uk/files.po116
-rw-r--r--l10n/uk/files_encryption.po34
-rw-r--r--l10n/uk/files_external.po82
-rw-r--r--l10n/uk/files_sharing.po34
-rw-r--r--l10n/uk/files_versions.po26
-rw-r--r--l10n/uk/lib.po113
-rw-r--r--l10n/uk/media.po35
-rw-r--r--l10n/uk/settings.po125
-rw-r--r--l10n/uk/tasks.po106
-rw-r--r--l10n/uk/user_ldap.po164
-rw-r--r--l10n/uk/user_migrate.po51
-rw-r--r--l10n/uk/user_openid.po54
-rw-r--r--l10n/vi/admin_dependencies_chk.po73
-rw-r--r--l10n/vi/admin_migrate.po32
-rw-r--r--l10n/vi/bookmarks.po60
-rw-r--r--l10n/vi/calendar.po815
-rw-r--r--l10n/vi/contacts.po953
-rw-r--r--l10n/vi/core.po269
-rw-r--r--l10n/vi/files.po219
-rw-r--r--l10n/vi/files_encryption.po34
-rw-r--r--l10n/vi/files_external.po82
-rw-r--r--l10n/vi/files_sharing.po34
-rw-r--r--l10n/vi/files_versions.po26
-rw-r--r--l10n/vi/gallery.po60
-rw-r--r--l10n/vi/lib.po112
-rw-r--r--l10n/vi/media.po67
-rw-r--r--l10n/vi/settings.po240
-rw-r--r--l10n/vi/tasks.po106
-rw-r--r--l10n/vi/user_ldap.po164
-rw-r--r--l10n/vi/user_migrate.po51
-rw-r--r--l10n/vi/user_openid.po54
-rw-r--r--l10n/zh_CN.GB2312/admin_dependencies_chk.po73
-rw-r--r--l10n/zh_CN.GB2312/admin_migrate.po32
-rw-r--r--l10n/zh_CN.GB2312/bookmarks.po60
-rw-r--r--l10n/zh_CN.GB2312/calendar.po814
-rw-r--r--l10n/zh_CN.GB2312/contacts.po952
-rw-r--r--l10n/zh_CN.GB2312/core.po269
-rw-r--r--l10n/zh_CN.GB2312/files.po219
-rw-r--r--l10n/zh_CN.GB2312/files_encryption.po34
-rw-r--r--l10n/zh_CN.GB2312/files_external.po82
-rw-r--r--l10n/zh_CN.GB2312/files_sharing.po34
-rw-r--r--l10n/zh_CN.GB2312/files_versions.po26
-rw-r--r--l10n/zh_CN.GB2312/gallery.po58
-rw-r--r--l10n/zh_CN.GB2312/lib.po112
-rw-r--r--l10n/zh_CN.GB2312/media.po67
-rw-r--r--l10n/zh_CN.GB2312/settings.po239
-rw-r--r--l10n/zh_CN.GB2312/tasks.po106
-rw-r--r--l10n/zh_CN.GB2312/user_ldap.po164
-rw-r--r--l10n/zh_CN.GB2312/user_migrate.po51
-rw-r--r--l10n/zh_CN.GB2312/user_openid.po54
-rw-r--r--l10n/zh_CN/admin_dependencies_chk.po73
-rw-r--r--l10n/zh_CN/admin_migrate.po32
-rw-r--r--l10n/zh_CN/bookmarks.po60
-rw-r--r--l10n/zh_CN/calendar.po451
-rw-r--r--l10n/zh_CN/contacts.po930
-rw-r--r--l10n/zh_CN/core.po83
-rw-r--r--l10n/zh_CN/files.po103
-rw-r--r--l10n/zh_CN/files_encryption.po34
-rw-r--r--l10n/zh_CN/files_external.po82
-rw-r--r--l10n/zh_CN/files_sharing.po34
-rw-r--r--l10n/zh_CN/files_versions.po26
-rw-r--r--l10n/zh_CN/gallery.po85
-rw-r--r--l10n/zh_CN/lib.po113
-rw-r--r--l10n/zh_CN/settings.po99
-rw-r--r--l10n/zh_CN/tasks.po106
-rw-r--r--l10n/zh_CN/user_ldap.po164
-rw-r--r--l10n/zh_CN/user_migrate.po51
-rw-r--r--l10n/zh_CN/user_openid.po54
-rw-r--r--l10n/zh_TW/admin_dependencies_chk.po73
-rw-r--r--l10n/zh_TW/admin_migrate.po32
-rw-r--r--l10n/zh_TW/bookmarks.po60
-rw-r--r--l10n/zh_TW/calendar.po448
-rw-r--r--l10n/zh_TW/contacts.po829
-rw-r--r--l10n/zh_TW/core.po46
-rw-r--r--l10n/zh_TW/files.po82
-rw-r--r--l10n/zh_TW/files_encryption.po34
-rw-r--r--l10n/zh_TW/files_external.po82
-rw-r--r--l10n/zh_TW/files_sharing.po34
-rw-r--r--l10n/zh_TW/files_versions.po26
-rw-r--r--l10n/zh_TW/lib.po112
-rw-r--r--l10n/zh_TW/settings.po86
-rw-r--r--l10n/zh_TW/tasks.po106
-rw-r--r--l10n/zh_TW/user_ldap.po164
-rw-r--r--l10n/zh_TW/user_migrate.po51
-rw-r--r--l10n/zh_TW/user_openid.po54
-rw-r--r--lib/MDB2/Driver/Function/sqlite3.php1
-rw-r--r--lib/MDB2/Driver/Manager/sqlite3.php1
-rw-r--r--lib/MDB2/Driver/sqlite3.php4
-rwxr-xr-x[-rw-r--r--]lib/app.php192
-rw-r--r--lib/appconfig.php2
-rw-r--r--lib/archive.php21
-rw-r--r--lib/archive/tar.php13
-rw-r--r--lib/archive/zip.php6
-rw-r--r--lib/backgroundjob/queuedtask.php104
-rw-r--r--lib/backgroundjob/regulartask.php52
-rw-r--r--lib/backgroundjob/worker.php118
-rw-r--r--lib/base.php380
-rw-r--r--lib/cache.php147
-rw-r--r--lib/cache/apc.php64
-rw-r--r--lib/cache/broker.php53
-rw-r--r--lib/cache/file.php77
-rw-r--r--lib/cache/fileglobal.php78
-rw-r--r--lib/cache/xcache.php50
-rw-r--r--lib/config.php25
-rw-r--r--lib/connector/sabre/client.php173
-rw-r--r--lib/connector/sabre/directory.php113
-rw-r--r--lib/connector/sabre/file.php41
-rw-r--r--lib/connector/sabre/locks.php13
-rw-r--r--lib/connector/sabre/node.php115
-rw-r--r--lib/db.php175
-rw-r--r--lib/eventsource.php5
-rw-r--r--lib/filecache.php485
-rw-r--r--lib/filecache/cached.php70
-rw-r--r--lib/filecache/update.php214
-rw-r--r--lib/filechunking.php94
-rw-r--r--lib/fileproxy.php13
-rw-r--r--lib/fileproxy/quota.php4
-rw-r--r--lib/files.php64
-rw-r--r--lib/filestorage.php23
-rw-r--r--lib/filestorage/common.php129
-rw-r--r--lib/filestorage/commontest.php8
-rw-r--r--lib/filestorage/local.php32
-rw-r--r--lib/filesystem.php328
-rw-r--r--lib/filesystemview.php502
-rw-r--r--lib/group.php50
-rw-r--r--lib/group/backend.php69
-rw-r--r--lib/group/database.php89
-rw-r--r--lib/group/dummy.php9
-rw-r--r--lib/group/example.php25
-rw-r--r--lib/group/interface.php76
-rw-r--r--lib/helper.php269
-rw-r--r--lib/image.php113
-rw-r--r--lib/installer.php111
-rw-r--r--lib/json.php34
-rw-r--r--lib/l10n.php82
-rw-r--r--lib/l10n/ca.php25
-rw-r--r--lib/l10n/cs_CZ.php25
-rw-r--r--lib/l10n/de.php25
-rw-r--r--lib/l10n/el.php25
-rw-r--r--lib/l10n/eo.php24
-rw-r--r--lib/l10n/es.php25
-rw-r--r--lib/l10n/et_EE.php25
-rw-r--r--lib/l10n/fa.php16
-rw-r--r--lib/l10n/fi_FI.php25
-rw-r--r--lib/l10n/fr.php25
-rw-r--r--lib/l10n/it.php25
-rw-r--r--lib/l10n/lt_LT.php21
-rw-r--r--lib/l10n/nb_NO.php24
-rw-r--r--lib/l10n/sl.php25
-rw-r--r--lib/l10n/string.php25
-rw-r--r--lib/l10n/sv.php25
-rw-r--r--lib/l10n/th_TH.php25
-rw-r--r--lib/l10n/uk.php24
-rw-r--r--lib/l10n/zh_CN.php25
-rw-r--r--lib/mail.php13
-rw-r--r--lib/migrate.php29
-rw-r--r--lib/mimetypes.fixlist.php22
-rw-r--r--lib/mimetypes.list.php17
-rw-r--r--lib/minimizer.php58
-rw-r--r--lib/minimizer/css.php38
-rw-r--r--lib/minimizer/js.php21
-rw-r--r--lib/ocs.php1004
-rw-r--r--lib/ocsclient.php71
-rw-r--r--lib/preferences.php3
-rw-r--r--lib/public/app.php8
-rw-r--r--lib/public/backgroundjob.php117
-rw-r--r--lib/public/config.php4
-rw-r--r--lib/public/db.php4
-rw-r--r--lib/public/files.php4
-rw-r--r--lib/public/groupinterface.php31
-rw-r--r--lib/public/json.php109
-rw-r--r--lib/public/response.php4
-rw-r--r--lib/public/share.php1073
-rw-r--r--lib/public/template.php5
-rw-r--r--lib/public/user.php7
-rw-r--r--lib/public/userinterface.php31
-rw-r--r--lib/public/util.php110
-rw-r--r--lib/request.php105
-rw-r--r--lib/search.php2
-rw-r--r--lib/search/provider.php10
-rw-r--r--lib/setup.php55
-rw-r--r--lib/streamwrappers.php5
-rw-r--r--lib/subadmin.php181
-rw-r--r--lib/template.php200
-rw-r--r--lib/templatelayout.php195
-rw-r--r--lib/updater.php3
-rw-r--r--lib/user.php123
-rw-r--r--lib/user/backend.php50
-rw-r--r--lib/user/database.php33
-rw-r--r--lib/user/dummy.php4
-rw-r--r--lib/user/example.php44
-rw-r--r--lib/user/http.php93
-rw-r--r--lib/user/interface.php60
-rwxr-xr-x[-rw-r--r--]lib/util.php244
-rw-r--r--lib/vcategories.php21
-rw-r--r--ocs/providers.php11
-rw-r--r--ocs/v1.php4
-rw-r--r--public.php9
-rw-r--r--remote.php33
-rw-r--r--search/ajax/search.php2
-rw-r--r--search/appinfo/app.php5
-rw-r--r--search/index.php2
-rw-r--r--search/js/result.js18
-rwxr-xr-x[-rw-r--r--]settings/admin.php3
-rw-r--r--settings/ajax/apps/ocs.php65
-rw-r--r--settings/ajax/changepassword.php17
-rw-r--r--settings/ajax/creategroup.php4
-rw-r--r--settings/ajax/createuser.php29
-rw-r--r--settings/ajax/enableapp.php7
-rw-r--r--settings/ajax/lostpassword.php3
-rw-r--r--settings/ajax/openid.php3
-rw-r--r--settings/ajax/removegroup.php2
-rw-r--r--settings/ajax/removeuser.php10
-rw-r--r--settings/ajax/setlanguage.php3
-rw-r--r--settings/ajax/setquota.php9
-rw-r--r--settings/ajax/togglegroups.php12
-rw-r--r--settings/ajax/togglesubadmins.php19
-rw-r--r--settings/ajax/userlist.php45
-rw-r--r--settings/appinfo/app.php7
-rw-r--r--settings/apps.php41
-rw-r--r--settings/css/settings.css24
-rw-r--r--settings/help.php4
-rw-r--r--settings/img/admin.pngbin302 -> 224 bytes
-rw-r--r--settings/img/apps.pngbin255 -> 229 bytes
-rw-r--r--settings/img/help.pngbin474 -> 423 bytes
-rw-r--r--settings/img/log.pngbin441 -> 342 bytes
-rw-r--r--settings/img/personal.pngbin589 -> 504 bytes
-rw-r--r--settings/img/users.pngbin743 -> 639 bytes
-rw-r--r--settings/js/admin.js8
-rw-r--r--settings/js/apps.js164
-rw-r--r--settings/js/users.js323
-rw-r--r--settings/l10n/bg_BG.php13
-rw-r--r--settings/l10n/ca.php17
-rw-r--r--settings/l10n/cs_CZ.php14
-rw-r--r--settings/l10n/da.php12
-rw-r--r--settings/l10n/de.php39
-rw-r--r--settings/l10n/el.php15
-rw-r--r--settings/l10n/eo.php17
-rw-r--r--settings/l10n/es.php15
-rw-r--r--settings/l10n/et_EE.php6
-rw-r--r--settings/l10n/eu.php10
-rw-r--r--settings/l10n/fa.php8
-rw-r--r--settings/l10n/fi_FI.php15
-rw-r--r--settings/l10n/fr.php19
-rw-r--r--settings/l10n/gl.php14
-rw-r--r--settings/l10n/he.php6
-rw-r--r--settings/l10n/hr.php6
-rw-r--r--settings/l10n/hu_HU.php10
-rw-r--r--settings/l10n/it.php17
-rw-r--r--settings/l10n/ja_JP.php15
-rw-r--r--settings/l10n/ko.php6
-rw-r--r--settings/l10n/lt_LT.php10
-rw-r--r--settings/l10n/lv.php49
-rw-r--r--settings/l10n/mk.php6
-rw-r--r--settings/l10n/ms_MY.php29
-rw-r--r--settings/l10n/nb_NO.php9
-rw-r--r--settings/l10n/nl.php6
-rw-r--r--settings/l10n/nn_NO.php7
-rw-r--r--settings/l10n/pl.php15
-rw-r--r--settings/l10n/pt_BR.php6
-rw-r--r--settings/l10n/pt_PT.php15
-rw-r--r--settings/l10n/ru.php15
-rw-r--r--settings/l10n/sk_SK.php6
-rw-r--r--settings/l10n/sl.php15
-rw-r--r--settings/l10n/sv.php23
-rw-r--r--settings/l10n/th_TH.php15
-rw-r--r--settings/l10n/tr.php8
-rw-r--r--settings/l10n/uk.php23
-rw-r--r--settings/l10n/vi.php48
-rw-r--r--settings/l10n/zh_CN.GB2312.php53
-rw-r--r--settings/l10n/zh_CN.php14
-rw-r--r--settings/personal.php138
-rwxr-xr-x[-rw-r--r--]settings/templates/admin.php38
-rw-r--r--settings/templates/apps.php20
-rw-r--r--settings/templates/help.php2
-rw-r--r--settings/templates/personal.php5
-rw-r--r--settings/templates/users.php63
-rw-r--r--settings/trans.pngbin187 -> 185 bytes
-rw-r--r--settings/users.php36
-rw-r--r--status.php5
-rw-r--r--tests/data/logo-wide.pngbin3559 -> 2882 bytes
-rw-r--r--tests/index.php51
-rw-r--r--tests/lib/archive.php8
-rw-r--r--tests/lib/cache.php79
-rw-r--r--tests/lib/cache/apc.php36
-rw-r--r--tests/lib/cache/file.php63
-rw-r--r--tests/lib/cache/xcache.php35
-rw-r--r--tests/lib/filestorage.php33
-rw-r--r--tests/lib/filesystem.php12
-rw-r--r--tests/lib/share/backend.php69
-rw-r--r--tests/lib/share/share.php380
-rw-r--r--tests/lib/user/backend.php10
-rw-r--r--tests/lib/user/database.php1
-rw-r--r--webapps.php56
2465 files changed, 184035 insertions, 47244 deletions
diff --git a/.gitignore b/.gitignore
index e2ff07d14d8..ae636931706 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,6 +34,9 @@ RCS/*
# netbeans
nbproject
+# phpStorm
+.idea
+
# geany
*.geany
diff --git a/3rdparty/Crypt_Blowfish/Blowfish.php b/3rdparty/Crypt_Blowfish/Blowfish.php
index a7b8948f043..4ccacb963e3 100644
--- a/3rdparty/Crypt_Blowfish/Blowfish.php
+++ b/3rdparty/Crypt_Blowfish/Blowfish.php
@@ -221,7 +221,7 @@ class Crypt_Blowfish
function decrypt($cipherText)
{
if (!is_string($cipherText)) {
- PEAR::raiseError('Chiper text must be a string', 1, PEAR_ERROR_DIE);
+ PEAR::raiseError('Cipher text must be a string', 1, PEAR_ERROR_DIE);
}
if (extension_loaded('mcrypt')) {
diff --git a/3rdparty/Dropbox/API.php b/3rdparty/Dropbox/API.php
new file mode 100644
index 00000000000..8cdce678e1c
--- /dev/null
+++ b/3rdparty/Dropbox/API.php
@@ -0,0 +1,380 @@
+<?php
+
+/**
+ * Dropbox API class
+ *
+ * @package Dropbox
+ * @copyright Copyright (C) 2010 Rooftop Solutions. All rights reserved.
+ * @author Evert Pot (http://www.rooftopsolutions.nl/)
+ * @license http://code.google.com/p/dropbox-php/wiki/License MIT
+ */
+class Dropbox_API {
+
+ /**
+ * Sandbox root-path
+ */
+ const ROOT_SANDBOX = 'sandbox';
+
+ /**
+ * Dropbox root-path
+ */
+ const ROOT_DROPBOX = 'dropbox';
+
+ /**
+ * API URl
+ */
+ protected $api_url = 'https://api.dropbox.com/1/';
+
+ /**
+ * Content API URl
+ */
+ protected $api_content_url = 'https://api-content.dropbox.com/1/';
+
+ /**
+ * OAuth object
+ *
+ * @var Dropbox_OAuth
+ */
+ protected $oauth;
+
+ /**
+ * Default root-path, this will most likely be 'sandbox' or 'dropbox'
+ *
+ * @var string
+ */
+ protected $root;
+ protected $useSSL;
+
+ /**
+ * Constructor
+ *
+ * @param Dropbox_OAuth Dropbox_Auth object
+ * @param string $root default root path (sandbox or dropbox)
+ */
+ public function __construct(Dropbox_OAuth $oauth, $root = self::ROOT_DROPBOX, $useSSL = true) {
+
+ $this->oauth = $oauth;
+ $this->root = $root;
+ $this->useSSL = $useSSL;
+ if (!$this->useSSL)
+ {
+ throw new Dropbox_Exception('Dropbox REST API now requires that all requests use SSL');
+ }
+
+ }
+
+ /**
+ * Returns information about the current dropbox account
+ *
+ * @return stdclass
+ */
+ public function getAccountInfo() {
+
+ $data = $this->oauth->fetch($this->api_url . 'account/info');
+ return json_decode($data['body'],true);
+
+ }
+
+ /**
+ * Returns a file's contents
+ *
+ * @param string $path path
+ * @param string $root Use this to override the default root path (sandbox/dropbox)
+ * @return string
+ */
+ public function getFile($path = '', $root = null) {
+
+ if (is_null($root)) $root = $this->root;
+ $path = str_replace(array('%2F','~'), array('/','%7E'), rawurlencode($path));
+ $result = $this->oauth->fetch($this->api_content_url . 'files/' . $root . '/' . ltrim($path,'/'));
+ return $result['body'];
+
+ }
+
+ /**
+ * Uploads a new file
+ *
+ * @param string $path Target path (including filename)
+ * @param string $file Either a path to a file or a stream resource
+ * @param string $root Use this to override the default root path (sandbox/dropbox)
+ * @return bool
+ */
+ public function putFile($path, $file, $root = null) {
+
+ $directory = dirname($path);
+ $filename = basename($path);
+
+ if($directory==='.') $directory = '';
+ $directory = str_replace(array('%2F','~'), array('/','%7E'), rawurlencode($directory));
+// $filename = str_replace('~', '%7E', rawurlencode($filename));
+ if (is_null($root)) $root = $this->root;
+
+ if (is_string($file)) {
+
+ $file = fopen($file,'rb');
+
+ } elseif (!is_resource($file)) {
+ throw new Dropbox_Exception('File must be a file-resource or a string');
+ }
+ $result=$this->multipartFetch($this->api_content_url . 'files/' .
+ $root . '/' . trim($directory,'/'), $file, $filename);
+
+ if(!isset($result["httpStatus"]) || $result["httpStatus"] != 200)
+ throw new Dropbox_Exception("Uploading file to Dropbox failed");
+
+ return true;
+ }
+
+
+ /**
+ * Copies a file or directory from one location to another
+ *
+ * This method returns the file information of the newly created file.
+ *
+ * @param string $from source path
+ * @param string $to destination path
+ * @param string $root Use this to override the default root path (sandbox/dropbox)
+ * @return stdclass
+ */
+ public function copy($from, $to, $root = null) {
+
+ if (is_null($root)) $root = $this->root;
+ $response = $this->oauth->fetch($this->api_url . 'fileops/copy', array('from_path' => $from, 'to_path' => $to, 'root' => $root), 'POST');
+
+ return json_decode($response['body'],true);
+
+ }
+
+ /**
+ * Creates a new folder
+ *
+ * This method returns the information from the newly created directory
+ *
+ * @param string $path
+ * @param string $root Use this to override the default root path (sandbox/dropbox)
+ * @return stdclass
+ */
+ public function createFolder($path, $root = null) {
+
+ if (is_null($root)) $root = $this->root;
+
+ // Making sure the path starts with a /
+// $path = '/' . ltrim($path,'/');
+
+ $response = $this->oauth->fetch($this->api_url . 'fileops/create_folder', array('path' => $path, 'root' => $root),'POST');
+ return json_decode($response['body'],true);
+
+ }
+
+ /**
+ * Deletes a file or folder.
+ *
+ * This method will return the metadata information from the deleted file or folder, if successful.
+ *
+ * @param string $path Path to new folder
+ * @param string $root Use this to override the default root path (sandbox/dropbox)
+ * @return array
+ */
+ public function delete($path, $root = null) {
+
+ if (is_null($root)) $root = $this->root;
+ $response = $this->oauth->fetch($this->api_url . 'fileops/delete', array('path' => $path, 'root' => $root), 'POST');
+ return json_decode($response['body']);
+
+ }
+
+ /**
+ * Moves a file or directory to a new location
+ *
+ * This method returns the information from the newly created directory
+ *
+ * @param mixed $from Source path
+ * @param mixed $to destination path
+ * @param string $root Use this to override the default root path (sandbox/dropbox)
+ * @return stdclass
+ */
+ public function move($from, $to, $root = null) {
+
+ if (is_null($root)) $root = $this->root;
+ $response = $this->oauth->fetch($this->api_url . 'fileops/move', array('from_path' => rawurldecode($from), 'to_path' => rawurldecode($to), 'root' => $root), 'POST');
+
+ return json_decode($response['body'],true);
+
+ }
+
+ /**
+ * Returns file and directory information
+ *
+ * @param string $path Path to receive information from
+ * @param bool $list When set to true, this method returns information from all files in a directory. When set to false it will only return infromation from the specified directory.
+ * @param string $hash If a hash is supplied, this method simply returns true if nothing has changed since the last request. Good for caching.
+ * @param int $fileLimit Maximum number of file-information to receive
+ * @param string $root Use this to override the default root path (sandbox/dropbox)
+ * @return array|true
+ */
+ public function getMetaData($path, $list = true, $hash = null, $fileLimit = null, $root = null) {
+
+ if (is_null($root)) $root = $this->root;
+
+ $args = array(
+ 'list' => $list,
+ );
+
+ if (!is_null($hash)) $args['hash'] = $hash;
+ if (!is_null($fileLimit)) $args['file_limit'] = $fileLimit;
+
+ $path = str_replace(array('%2F','~'), array('/','%7E'), rawurlencode($path));
+ $response = $this->oauth->fetch($this->api_url . 'metadata/' . $root . '/' . ltrim($path,'/'), $args);
+
+ /* 304 is not modified */
+ if ($response['httpStatus']==304) {
+ return true;
+ } else {
+ return json_decode($response['body'],true);
+ }
+
+ }
+
+ /**
+ * A way of letting you keep up with changes to files and folders in a user's Dropbox. You can periodically call /delta to get a list of "delta entries", which are instructions on how to update your local state to match the server's state.
+ *
+ * This method returns the information from the newly created directory
+ *
+ * @param string $cursor A string that is used to keep track of your current state. On the next call pass in this value to return delta entries that have been recorded since the cursor was returned.
+ * @return stdclass
+ */
+ public function delta($cursor) {
+
+ $arg['cursor'] = $cursor;
+
+ $response = $this->oauth->fetch($this->api_url . 'delta', $arg, 'POST');
+ return json_decode($response['body'],true);
+
+ }
+
+ /**
+ * Returns a thumbnail (as a string) for a file path.
+ *
+ * @param string $path Path to file
+ * @param string $size small, medium or large
+ * @param string $root Use this to override the default root path (sandbox/dropbox)
+ * @return string
+ */
+ public function getThumbnail($path, $size = 'small', $root = null) {
+
+ if (is_null($root)) $root = $this->root;
+ $path = str_replace(array('%2F','~'), array('/','%7E'), rawurlencode($path));
+ $response = $this->oauth->fetch($this->api_content_url . 'thumbnails/' . $root . '/' . ltrim($path,'/'),array('size' => $size));
+
+ return $response['body'];
+
+ }
+
+ /**
+ * This method is used to generate multipart POST requests for file upload
+ *
+ * @param string $uri
+ * @param array $arguments
+ * @return bool
+ */
+ protected function multipartFetch($uri, $file, $filename) {
+
+ /* random string */
+ $boundary = 'R50hrfBj5JYyfR3vF3wR96GPCC9Fd2q2pVMERvEaOE3D8LZTgLLbRpNwXek3';
+
+ $headers = array(
+ 'Content-Type' => 'multipart/form-data; boundary=' . $boundary,
+ );
+
+ $body="--" . $boundary . "\r\n";
+ $body.="Content-Disposition: form-data; name=file; filename=".rawurldecode($filename)."\r\n";
+ $body.="Content-type: application/octet-stream\r\n";
+ $body.="\r\n";
+ $body.=stream_get_contents($file);
+ $body.="\r\n";
+ $body.="--" . $boundary . "--";
+
+ // Dropbox requires the filename to also be part of the regular arguments, so it becomes
+ // part of the signature.
+ $uri.='?file=' . $filename;
+
+ return $this->oauth->fetch($uri, $body, 'POST', $headers);
+
+ }
+
+
+ /**
+ * Search
+ *
+ * Returns metadata for all files and folders that match the search query.
+ *
+ * @added by: diszo.sasil
+ *
+ * @param string $query
+ * @param string $root Use this to override the default root path (sandbox/dropbox)
+ * @param string $path
+ * @return array
+ */
+ public function search($query = '', $root = null, $path = ''){
+ if (is_null($root)) $root = $this->root;
+ if(!empty($path)){
+ $path = str_replace(array('%2F','~'), array('/','%7E'), rawurlencode($path));
+ }
+ $response = $this->oauth->fetch($this->api_url . 'search/' . $root . '/' . ltrim($path,'/'),array('query' => $query));
+ return json_decode($response['body'],true);
+ }
+
+ /**
+ * Creates and returns a shareable link to files or folders.
+ *
+ * Note: Links created by the /shares API call expire after thirty days.
+ *
+ * @param type $path
+ * @param type $root
+ * @return type
+ */
+ public function share($path, $root = null) {
+ if (is_null($root)) $root = $this->root;
+ $path = str_replace(array('%2F','~'), array('/','%7E'), rawurlencode($path));
+ $response = $this->oauth->fetch($this->api_url. 'shares/'. $root . '/' . ltrim($path, '/'), array(), 'POST');
+ return json_decode($response['body'],true);
+
+ }
+
+ /**
+ * Returns a link directly to a file.
+ * Similar to /shares. The difference is that this bypasses the Dropbox webserver, used to provide a preview of the file, so that you can effectively stream the contents of your media.
+ *
+ * Note: The /media link expires after four hours, allotting enough time to stream files, but not enough to leave a connection open indefinitely.
+ *
+ * @param type $path
+ * @param type $root
+ * @return type
+ */
+ public function media($path, $root = null) {
+
+ if (is_null($root)) $root = $this->root;
+ $path = str_replace(array('%2F','~'), array('/','%7E'), rawurlencode($path));
+ $response = $this->oauth->fetch($this->api_url. 'media/'. $root . '/' . ltrim($path, '/'), array(), 'POST');
+ return json_decode($response['body'],true);
+
+ }
+
+ /**
+ * Creates and returns a copy_ref to a file. This reference string can be used to copy that file to another user's Dropbox by passing it in as the from_copy_ref parameter on /fileops/copy.
+ *
+ * @param type $path
+ * @param type $root
+ * @return type
+ */
+ public function copy_ref($path, $root = null) {
+
+ if (is_null($root)) $root = $this->root;
+ $path = str_replace(array('%2F','~'), array('/','%7E'), rawurlencode($path));
+ $response = $this->oauth->fetch($this->api_url. 'copy_ref/'. $root . '/' . ltrim($path, '/'));
+ return json_decode($response['body'],true);
+
+ }
+
+
+}
diff --git a/3rdparty/Dropbox/Exception.php b/3rdparty/Dropbox/Exception.php
new file mode 100644
index 00000000000..50cbc4c7915
--- /dev/null
+++ b/3rdparty/Dropbox/Exception.php
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * Dropbox base exception
+ *
+ * @package Dropbox
+ * @copyright Copyright (C) 2010 Rooftop Solutions. All rights reserved.
+ * @author Evert Pot (http://www.rooftopsolutions.nl/)
+ * @license http://code.google.com/p/dropbox-php/wiki/License MIT
+ */
+
+/**
+ * Base exception class
+ */
+class Dropbox_Exception extends Exception { }
diff --git a/3rdparty/Dropbox/Exception/Forbidden.php b/3rdparty/Dropbox/Exception/Forbidden.php
new file mode 100644
index 00000000000..5f0378cfc74
--- /dev/null
+++ b/3rdparty/Dropbox/Exception/Forbidden.php
@@ -0,0 +1,18 @@
+<?php
+
+/**
+ * Dropbox Forbidden exception
+ *
+ * @package Dropbox
+ * @copyright Copyright (C) 2010 Rooftop Solutions. All rights reserved.
+ * @author Evert Pot (http://www.rooftopsolutions.nl/)
+ * @license http://code.google.com/p/dropbox-php/wiki/License MIT
+ */
+
+/**
+ * This exception is thrown when we receive the 403 forbidden response
+ */
+class Dropbox_Exception_Forbidden extends Dropbox_Exception {
+
+
+}
diff --git a/3rdparty/Dropbox/Exception/NotFound.php b/3rdparty/Dropbox/Exception/NotFound.php
new file mode 100644
index 00000000000..3deaf90d76b
--- /dev/null
+++ b/3rdparty/Dropbox/Exception/NotFound.php
@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * Dropbox Not Found exception
+ *
+ * @package Dropbox
+ * @copyright Copyright (C) 2010 Rooftop Solutions. All rights reserved.
+ * @author Evert Pot (http://www.rooftopsolutions.nl/)
+ * @license http://code.google.com/p/dropbox-php/wiki/License MIT
+ */
+
+/**
+ * This exception is thrown when a non-existant uri is accessed.
+ *
+ * Basically, this exception is used when we get back a 404.
+ */
+class Dropbox_Exception_NotFound extends Dropbox_Exception {
+
+
+}
diff --git a/3rdparty/Dropbox/Exception/OverQuota.php b/3rdparty/Dropbox/Exception/OverQuota.php
new file mode 100644
index 00000000000..86e5425dbd8
--- /dev/null
+++ b/3rdparty/Dropbox/Exception/OverQuota.php
@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * Dropbox Over Quota exception
+ *
+ * @package Dropbox
+ * @copyright Copyright (C) 2010 Rooftop Solutions. All rights reserved.
+ * @author Evert Pot (http://www.rooftopsolutions.nl/)
+ * @license http://code.google.com/p/dropbox-php/wiki/License MIT
+ */
+
+/**
+ * This exception is thrown when the operation required more space than the available quota.
+ *
+ * Basically, this exception is used when we get back a 507.
+ */
+class Dropbox_Exception_OverQuota extends Dropbox_Exception {
+
+
+}
diff --git a/3rdparty/Dropbox/Exception/RequestToken.php b/3rdparty/Dropbox/Exception/RequestToken.php
new file mode 100644
index 00000000000..5b117f2c6b0
--- /dev/null
+++ b/3rdparty/Dropbox/Exception/RequestToken.php
@@ -0,0 +1,18 @@
+<?php
+
+/**
+ * Dropbox RequestToken exception
+ *
+ * @package Dropbox
+ * @copyright Copyright (C) 2010 Rooftop Solutions. All rights reserved.
+ * @author Evert Pot (http://www.rooftopsolutions.nl/)
+ * @license http://code.google.com/p/dropbox-php/wiki/License MIT
+ */
+
+/**
+ * This exception is thrown when an error occured during the request_token process.
+ */
+class Dropbox_Exception_RequestToken extends Dropbox_Exception {
+
+
+}
diff --git a/3rdparty/Dropbox/LICENSE.txt b/3rdparty/Dropbox/LICENSE.txt
new file mode 100644
index 00000000000..cd3512acee6
--- /dev/null
+++ b/3rdparty/Dropbox/LICENSE.txt
@@ -0,0 +1,19 @@
+Copyright (c) 2010 Rooftop Solutions
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/3rdparty/Dropbox/OAuth.php b/3rdparty/Dropbox/OAuth.php
new file mode 100644
index 00000000000..905cc2da1c6
--- /dev/null
+++ b/3rdparty/Dropbox/OAuth.php
@@ -0,0 +1,151 @@
+<?php
+
+/**
+ * Dropbox OAuth
+ *
+ * @package Dropbox
+ * @copyright Copyright (C) 2010 Rooftop Solutions. All rights reserved.
+ * @author Evert Pot (http://www.rooftopsolutions.nl/)
+ * @license http://code.google.com/p/dropbox-php/wiki/License MIT
+ */
+
+
+/**
+ * This class is an abstract OAuth class.
+ *
+ * It must be extended by classes who wish to provide OAuth functionality
+ * using different libraries.
+ */
+abstract class Dropbox_OAuth {
+
+ /**
+ * After a user has authorized access, dropbox can redirect the user back
+ * to this url.
+ *
+ * @var string
+ */
+ public $authorizeCallbackUrl = null;
+
+ /**
+ * Uri used to fetch request tokens
+ *
+ * @var string
+ */
+ const URI_REQUEST_TOKEN = 'https://api.dropbox.com/1/oauth/request_token';
+
+ /**
+ * Uri used to redirect the user to for authorization.
+ *
+ * @var string
+ */
+ const URI_AUTHORIZE = 'https://www.dropbox.com/1/oauth/authorize';
+
+ /**
+ * Uri used to
+ *
+ * @var string
+ */
+ const URI_ACCESS_TOKEN = 'https://api.dropbox.com/1/oauth/access_token';
+
+ /**
+ * An OAuth request token.
+ *
+ * @var string
+ */
+ protected $oauth_token = null;
+
+ /**
+ * OAuth token secret
+ *
+ * @var string
+ */
+ protected $oauth_token_secret = null;
+
+
+ /**
+ * Constructor
+ *
+ * @param string $consumerKey
+ * @param string $consumerSecret
+ */
+ abstract public function __construct($consumerKey, $consumerSecret);
+
+ /**
+ * Sets the request token and secret.
+ *
+ * The tokens can also be passed as an array into the first argument.
+ * The array must have the elements token and token_secret.
+ *
+ * @param string|array $token
+ * @param string $token_secret
+ * @return void
+ */
+ public function setToken($token, $token_secret = null) {
+
+ if (is_array($token)) {
+ $this->oauth_token = $token['token'];
+ $this->oauth_token_secret = $token['token_secret'];
+ } else {
+ $this->oauth_token = $token;
+ $this->oauth_token_secret = $token_secret;
+ }
+
+ }
+
+ /**
+ * Returns the oauth request tokens as an associative array.
+ *
+ * The array will contain the elements 'token' and 'token_secret'.
+ *
+ * @return array
+ */
+ public function getToken() {
+
+ return array(
+ 'token' => $this->oauth_token,
+ 'token_secret' => $this->oauth_token_secret,
+ );
+
+ }
+
+ /**
+ * Returns the authorization url
+ *
+ * @param string $callBack Specify a callback url to automatically redirect the user back
+ * @return string
+ */
+ public function getAuthorizeUrl($callBack = null) {
+
+ // Building the redirect uri
+ $token = $this->getToken();
+ $uri = self::URI_AUTHORIZE . '?oauth_token=' . $token['token'];
+ if ($callBack) $uri.='&oauth_callback=' . $callBack;
+ return $uri;
+ }
+
+ /**
+ * Fetches a secured oauth url and returns the response body.
+ *
+ * @param string $uri
+ * @param mixed $arguments
+ * @param string $method
+ * @param array $httpHeaders
+ * @return string
+ */
+ public abstract function fetch($uri, $arguments = array(), $method = 'GET', $httpHeaders = array());
+
+ /**
+ * Requests the OAuth request token.
+ *
+ * @return array
+ */
+ abstract public function getRequestToken();
+
+ /**
+ * Requests the OAuth access tokens.
+ *
+ * @return array
+ */
+ abstract public function getAccessToken();
+
+}
diff --git a/3rdparty/Dropbox/OAuth/Consumer/Dropbox.php b/3rdparty/Dropbox/OAuth/Consumer/Dropbox.php
new file mode 100644
index 00000000000..204a659de00
--- /dev/null
+++ b/3rdparty/Dropbox/OAuth/Consumer/Dropbox.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * HTTP OAuth Consumer
+ *
+ * Adapted from halldirector's code in
+ * http://code.google.com/p/dropbox-php/issues/detail?id=36#c5
+ *
+ * @package Dropbox
+ * @copyright Copyright (C) 2011 Joe Constant / halldirector. All rights reserved.
+ * @author Joe Constant / halldirector
+ * @license http://code.google.com/p/dropbox-php/wiki/License MIT
+ */
+
+require_once 'HTTP/OAuth.php';
+require_once 'HTTP/OAuth/Consumer.php';
+
+/*
+ * This class is to help work around aomw ssl issues.
+ */
+class Dropbox_OAuth_Consumer_Dropbox extends HTTP_OAuth_Consumer
+{
+ public function getOAuthConsumerRequest()
+ {
+ if (!$this->consumerRequest instanceof HTTP_OAuth_Consumer_Request) {
+ $this->consumerRequest = new HTTP_OAuth_Consumer_Request;
+ }
+
+ // TODO: Change this and add in code to validate the SSL cert.
+ // see https://github.com/bagder/curl/blob/master/lib/mk-ca-bundle.pl
+ $this->consumerRequest->setConfig(array(
+ 'ssl_verify_peer' => false,
+ 'ssl_verify_host' => false
+ ));
+
+ return $this->consumerRequest;
+ }
+}
diff --git a/3rdparty/Dropbox/OAuth/Curl.php b/3rdparty/Dropbox/OAuth/Curl.php
new file mode 100644
index 00000000000..b75b27bb363
--- /dev/null
+++ b/3rdparty/Dropbox/OAuth/Curl.php
@@ -0,0 +1,282 @@
+<?php
+
+/**
+ * Dropbox OAuth
+ *
+ * @package Dropbox
+ * @copyright Copyright (C) 2011 Daniel Huesken
+ * @author Daniel Huesken (http://www.danielhuesken.de/)
+ * @license MIT
+ */
+
+/**
+ * This class is used to sign all requests to dropbox.
+ *
+ * This specific class uses WordPress WP_Http to authenticate.
+ */
+class Dropbox_OAuth_Curl extends Dropbox_OAuth {
+
+ /**
+ *
+ * @var string ConsumerKey
+ */
+ protected $consumerKey = null;
+ /**
+ *
+ * @var string ConsumerSecret
+ */
+ protected $consumerSecret = null;
+ /**
+ *
+ * @var string ProzessCallBack
+ */
+ public $ProgressFunction = false;
+
+ /**
+ * Constructor
+ *
+ * @param string $consumerKey
+ * @param string $consumerSecret
+ */
+ public function __construct($consumerKey, $consumerSecret) {
+ if (!function_exists('curl_exec'))
+ throw new Dropbox_Exception('The PHP curl functions not available!');
+
+ $this->consumerKey = $consumerKey;
+ $this->consumerSecret = $consumerSecret;
+ }
+
+ /**
+ * Fetches a secured oauth url and returns the response body.
+ *
+ * @param string $uri
+ * @param mixed $arguments
+ * @param string $method
+ * @param array $httpHeaders
+ * @return string
+ */
+ public function fetch($uri, $arguments = array(), $method = 'GET', $httpHeaders = array()) {
+
+ $uri=str_replace('http://', 'https://', $uri); // all https, upload makes problems if not
+ if (is_string($arguments) and strtoupper($method) == 'POST') {
+ preg_match("/\?file=(.*)$/i", $uri, $matches);
+ if (isset($matches[1])) {
+ $uri = str_replace($matches[0], "", $uri);
+ $filename = $matches[1];
+ $httpHeaders=array_merge($httpHeaders,$this->getOAuthHeader($uri, array("file" => $filename), $method));
+ }
+ } else {
+ $httpHeaders=array_merge($httpHeaders,$this->getOAuthHeader($uri, $arguments, $method));
+ }
+ $ch = curl_init();
+ if (strtoupper($method) == 'POST') {
+ curl_setopt($ch, CURLOPT_URL, $uri);
+ curl_setopt($ch, CURLOPT_POST, true);
+// if (is_array($arguments))
+// $arguments=http_build_query($arguments);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $arguments);
+// $httpHeaders['Content-Length']=strlen($arguments);
+ } else {
+ curl_setopt($ch, CURLOPT_URL, $uri.'?'.http_build_query($arguments));
+ curl_setopt($ch, CURLOPT_POST, false);
+ }
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_TIMEOUT, 300);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
+// curl_setopt($ch, CURLOPT_CAINFO, "rootca");
+ curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
+ //Build header
+ $headers = array();
+ foreach ($httpHeaders as $name => $value) {
+ $headers[] = "{$name}: $value";
+ }
+ curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
+ if (!ini_get('safe_mode') && !ini_get('open_basedir'))
+ curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true );
+ if (function_exists($this->ProgressFunction) and defined('CURLOPT_PROGRESSFUNCTION')) {
+ curl_setopt($ch, CURLOPT_NOPROGRESS, false);
+ curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, $this->ProgressFunction);
+ curl_setopt($ch, CURLOPT_BUFFERSIZE, 512);
+ }
+ $response=curl_exec($ch);
+ $errorno=curl_errno($ch);
+ $error=curl_error($ch);
+ $status=curl_getinfo($ch,CURLINFO_HTTP_CODE);
+ curl_close($ch);
+
+
+ if (!empty($errorno))
+ throw new Dropbox_Exception_NotFound('Curl error: ('.$errorno.') '.$error."\n");
+
+ if ($status>=300) {
+ $body = json_decode($response,true);
+ switch ($status) {
+ // Not modified
+ case 304 :
+ return array(
+ 'httpStatus' => 304,
+ 'body' => null,
+ );
+ break;
+ case 403 :
+ throw new Dropbox_Exception_Forbidden('Forbidden.
+ This could mean a bad OAuth request, or a file or folder already existing at the target location.
+ ' . $body["error"] . "\n");
+ case 404 :
+ throw new Dropbox_Exception_NotFound('Resource at uri: ' . $uri . ' could not be found. ' .
+ $body["error"] . "\n");
+ case 507 :
+ throw new Dropbox_Exception_OverQuota('This dropbox is full. ' .
+ $body["error"] . "\n");
+ }
+ if (!empty($body["error"]))
+ throw new Dropbox_Exception_RequestToken('Error: ('.$status.') '.$body["error"]."\n");
+ }
+
+ return array(
+ 'body' => $response,
+ 'httpStatus' => $status
+ );
+ }
+
+ /**
+ * Returns named array with oauth parameters for further use
+ * @return array Array with oauth_ parameters
+ */
+ private function getOAuthBaseParams() {
+ $params['oauth_version'] = '1.0';
+ $params['oauth_signature_method'] = 'HMAC-SHA1';
+
+ $params['oauth_consumer_key'] = $this->consumerKey;
+ $tokens = $this->getToken();
+ if (isset($tokens['token']) && $tokens['token']) {
+ $params['oauth_token'] = $tokens['token'];
+ }
+ $params['oauth_timestamp'] = time();
+ $params['oauth_nonce'] = md5(microtime() . mt_rand());
+ return $params;
+ }
+
+ /**
+ * Creates valid Authorization header for OAuth, based on URI and Params
+ *
+ * @param string $uri
+ * @param array $params
+ * @param string $method GET or POST, standard is GET
+ * @param array $oAuthParams optional, pass your own oauth_params here
+ * @return array Array for request's headers section like
+ * array('Authorization' => 'OAuth ...');
+ */
+ private function getOAuthHeader($uri, $params, $method = 'GET', $oAuthParams = null) {
+ $oAuthParams = $oAuthParams ? $oAuthParams : $this->getOAuthBaseParams();
+
+ // create baseString to encode for the sent parameters
+ $baseString = $method . '&';
+ $baseString .= $this->oauth_urlencode($uri) . "&";
+
+ // OAuth header does not include GET-Parameters
+ $signatureParams = array_merge($params, $oAuthParams);
+
+ // sorting the parameters
+ ksort($signatureParams);
+
+ $encodedParams = array();
+ foreach ($signatureParams as $key => $value) {
+ $encodedParams[] = $this->oauth_urlencode($key) . '=' . $this->oauth_urlencode($value);
+ }
+
+ $baseString .= $this->oauth_urlencode(implode('&', $encodedParams));
+
+ // encode the signature
+ $tokens = $this->getToken();
+ $hash = $this->hash_hmac_sha1($this->consumerSecret.'&'.$tokens['token_secret'], $baseString);
+ $signature = base64_encode($hash);
+
+ // add signature to oAuthParams
+ $oAuthParams['oauth_signature'] = $signature;
+
+ $oAuthEncoded = array();
+ foreach ($oAuthParams as $key => $value) {
+ $oAuthEncoded[] = $key . '="' . $this->oauth_urlencode($value) . '"';
+ }
+
+ return array('Authorization' => 'OAuth ' . implode(', ', $oAuthEncoded));
+ }
+
+ /**
+ * Requests the OAuth request token.
+ *
+ * @return void
+ */
+ public function getRequestToken() {
+ $result = $this->fetch(self::URI_REQUEST_TOKEN, array(), 'POST');
+ if ($result['httpStatus'] == "200") {
+ $tokens = array();
+ parse_str($result['body'], $tokens);
+ $this->setToken($tokens['oauth_token'], $tokens['oauth_token_secret']);
+ return $this->getToken();
+ } else {
+ throw new Dropbox_Exception_RequestToken('We were unable to fetch request tokens. This likely means that your consumer key and/or secret are incorrect.');
+ }
+ }
+
+ /**
+ * Requests the OAuth access tokens.
+ *
+ * This method requires the 'unauthorized' request tokens
+ * and, if successful will set the authorized request tokens.
+ *
+ * @return void
+ */
+ public function getAccessToken() {
+ $result = $this->fetch(self::URI_ACCESS_TOKEN, array(), 'POST');
+ if ($result['httpStatus'] == "200") {
+ $tokens = array();
+ parse_str($result['body'], $tokens);
+ $this->setToken($tokens['oauth_token'], $tokens['oauth_token_secret']);
+ return $this->getToken();
+ } else {
+ throw new Dropbox_Exception_RequestToken('We were unable to fetch request tokens. This likely means that your consumer key and/or secret are incorrect.');
+ }
+ }
+
+ /**
+ * Helper function to properly urlencode parameters.
+ * See http://php.net/manual/en/function.oauth-urlencode.php
+ *
+ * @param string $string
+ * @return string
+ */
+ private function oauth_urlencode($string) {
+ return str_replace('%E7', '~', rawurlencode($string));
+ }
+
+ /**
+ * Hash function for hmac_sha1; uses native function if available.
+ *
+ * @param string $key
+ * @param string $data
+ * @return string
+ */
+ private function hash_hmac_sha1($key, $data) {
+ if (function_exists('hash_hmac') && in_array('sha1', hash_algos())) {
+ return hash_hmac('sha1', $data, $key, true);
+ } else {
+ $blocksize = 64;
+ $hashfunc = 'sha1';
+ if (strlen($key) > $blocksize) {
+ $key = pack('H*', $hashfunc($key));
+ }
+
+ $key = str_pad($key, $blocksize, chr(0x00));
+ $ipad = str_repeat(chr(0x36), $blocksize);
+ $opad = str_repeat(chr(0x5c), $blocksize);
+ $hash = pack('H*', $hashfunc(( $key ^ $opad ) . pack('H*', $hashfunc(($key ^ $ipad) . $data))));
+
+ return $hash;
+ }
+ }
+
+
+} \ No newline at end of file
diff --git a/3rdparty/Dropbox/README.md b/3rdparty/Dropbox/README.md
new file mode 100644
index 00000000000..54e05db762b
--- /dev/null
+++ b/3rdparty/Dropbox/README.md
@@ -0,0 +1,31 @@
+Dropbox-php
+===========
+
+This PHP library allows you to easily integrate dropbox with PHP.
+
+The following PHP extension is required:
+
+* json
+
+The library makes use of OAuth. At the moment you can use either of these libraries:
+
+[PHP OAuth extension](http://pecl.php.net/package/oauth)
+[PEAR's HTTP_OAUTH package](http://pear.php.net/package/http_oauth)
+
+The extension is recommended, but if you can't install php extensions you should go for the pear package.
+Installing
+----------
+
+ pear channel-discover pear.dropbox-php.com
+ pear install dropbox-php/Dropbox-alpha
+
+Documentation
+-------------
+Check out the [documentation](http://www.dropbox-php.com/docs).
+
+Questions?
+----------
+
+[Dropbox-php Mailing list](http://groups.google.com/group/dropbox-php)
+[Official Dropbox developer forum](http://forums.dropbox.com/forum.php?id=5)
+
diff --git a/3rdparty/Dropbox/autoload.php b/3rdparty/Dropbox/autoload.php
new file mode 100644
index 00000000000..5388ea6334a
--- /dev/null
+++ b/3rdparty/Dropbox/autoload.php
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * This file registers a new autoload function using spl_autoload_register.
+ *
+ * @package Dropbox
+ * @copyright Copyright (C) 2010 Rooftop Solutions. All rights reserved.
+ * @author Evert Pot (http://www.rooftopsolutions.nl/)
+ * @license http://code.google.com/p/dropbox-php/wiki/License MIT
+ */
+
+/**
+ * Autoloader function
+ *
+ * @param $className string
+ * @return void
+ */
+function Dropbox_autoload($className) {
+
+ if(strpos($className,'Dropbox_')===0) {
+
+ include dirname(__FILE__) . '/' . str_replace('_','/',substr($className,8)) . '.php';
+
+ }
+
+}
+
+spl_autoload_register('Dropbox_autoload');
+
diff --git a/3rdparty/Google/LICENSE.txt b/3rdparty/Google/LICENSE.txt
new file mode 100644
index 00000000000..8891c7ddc90
--- /dev/null
+++ b/3rdparty/Google/LICENSE.txt
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2007 Andy Smith
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/3rdparty/Google/OAuth.php b/3rdparty/Google/OAuth.php
new file mode 100755
index 00000000000..c7e75dd8266
--- /dev/null
+++ b/3rdparty/Google/OAuth.php
@@ -0,0 +1,751 @@
+<?php
+// vim: foldmethod=marker
+
+/* Generic exception class
+ */
+class OAuthException extends Exception {/*{{{*/
+ // pass
+}/*}}}*/
+
+class OAuthConsumer {/*{{{*/
+ public $key;
+ public $secret;
+
+ public function __construct($key, $secret, $callback_url=NULL) {/*{{{*/
+ $this->key = $key;
+ $this->secret = $secret;
+ $this->callback_url = $callback_url;
+ }/*}}}*/
+}/*}}}*/
+
+class OAuthToken {/*{{{*/
+ // access tokens and request tokens
+ public $key;
+ public $secret;
+
+ /**
+ * key = the token
+ * secret = the token secret
+ */
+ function __construct($key, $secret) {/*{{{*/
+ $this->key = $key;
+ $this->secret = $secret;
+ }/*}}}*/
+
+ /**
+ * generates the basic string serialization of a token that a server
+ * would respond to request_token and access_token calls with
+ */
+ function to_string() {/*{{{*/
+ return "oauth_token=" . OAuthUtil::urlencodeRFC3986($this->key) .
+ "&oauth_token_secret=" . OAuthUtil::urlencodeRFC3986($this->secret);
+ }/*}}}*/
+
+ function __toString() {/*{{{*/
+ return $this->to_string();
+ }/*}}}*/
+}/*}}}*/
+
+class OAuthSignatureMethod {/*{{{*/
+ public function check_signature(&$request, $consumer, $token, $signature) {
+ $built = $this->build_signature($request, $consumer, $token);
+ return $built == $signature;
+ }
+}/*}}}*/
+
+class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {/*{{{*/
+ function get_name() {/*{{{*/
+ return "HMAC-SHA1";
+ }/*}}}*/
+
+ public function build_signature($request, $consumer, $token, $privKey=NULL) {/*{{{*/
+ $base_string = $request->get_signature_base_string();
+ $request->base_string = $base_string;
+
+ $key_parts = array(
+ $consumer->secret,
+ ($token) ? $token->secret : ""
+ );
+
+ $key_parts = array_map(array('OAuthUtil','urlencodeRFC3986'), $key_parts);
+ $key = implode('&', $key_parts);
+
+ return base64_encode( hash_hmac('sha1', $base_string, $key, true));
+ }/*}}}*/
+}/*}}}*/
+
+class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {/*{{{*/
+ public function get_name() {/*{{{*/
+ return "RSA-SHA1";
+ }/*}}}*/
+
+ protected function fetch_public_cert(&$request) {/*{{{*/
+ // not implemented yet, ideas are:
+ // (1) do a lookup in a table of trusted certs keyed off of consumer
+ // (2) fetch via http using a url provided by the requester
+ // (3) some sort of specific discovery code based on request
+ //
+ // either way should return a string representation of the certificate
+ throw Exception("fetch_public_cert not implemented");
+ }/*}}}*/
+
+ protected function fetch_private_cert($privKey) {//&$request) {/*{{{*/
+ // not implemented yet, ideas are:
+ // (1) do a lookup in a table of trusted certs keyed off of consumer
+ //
+ // either way should return a string representation of the certificate
+ throw Exception("fetch_private_cert not implemented");
+ }/*}}}*/
+
+ public function build_signature(&$request, $consumer, $token, $privKey) {/*{{{*/
+ $base_string = $request->get_signature_base_string();
+
+ // Fetch the private key cert based on the request
+ //$cert = $this->fetch_private_cert($consumer->privKey);
+
+ //Pull the private key ID from the certificate
+ //$privatekeyid = openssl_get_privatekey($cert);
+
+ // hacked in
+ if ($privKey == '') {
+ $fp = fopen($GLOBALS['PRIV_KEY_FILE'], "r");
+ $privKey = fread($fp, 8192);
+ fclose($fp);
+ }
+ $privatekeyid = openssl_get_privatekey($privKey);
+
+ //Check the computer signature against the one passed in the query
+ $ok = openssl_sign($base_string, $signature, $privatekeyid);
+
+ //Release the key resource
+ openssl_free_key($privatekeyid);
+
+ return base64_encode($signature);
+ } /*}}}*/
+
+ public function check_signature(&$request, $consumer, $token, $signature) {/*{{{*/
+ $decoded_sig = base64_decode($signature);
+
+ $base_string = $request->get_signature_base_string();
+
+ // Fetch the public key cert based on the request
+ $cert = $this->fetch_public_cert($request);
+
+ //Pull the public key ID from the certificate
+ $publickeyid = openssl_get_publickey($cert);
+
+ //Check the computer signature against the one passed in the query
+ $ok = openssl_verify($base_string, $decoded_sig, $publickeyid);
+
+ //Release the key resource
+ openssl_free_key($publickeyid);
+
+ return $ok == 1;
+ } /*}}}*/
+}/*}}}*/
+
+class OAuthRequest {/*{{{*/
+ private $parameters;
+ private $http_method;
+ private $http_url;
+ // for debug purposes
+ public $base_string;
+ public static $version = '1.0';
+
+ function __construct($http_method, $http_url, $parameters=NULL) {/*{{{*/
+ @$parameters or $parameters = array();
+ $this->parameters = $parameters;
+ $this->http_method = $http_method;
+ $this->http_url = $http_url;
+ }/*}}}*/
+
+
+ /**
+ * attempt to build up a request from what was passed to the server
+ */
+ public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) {/*{{{*/
+ $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") ? 'http' : 'https';
+ @$http_url or $http_url = $scheme . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
+ @$http_method or $http_method = $_SERVER['REQUEST_METHOD'];
+
+ $request_headers = OAuthRequest::get_headers();
+
+ // let the library user override things however they'd like, if they know
+ // which parameters to use then go for it, for example XMLRPC might want to
+ // do this
+ if ($parameters) {
+ $req = new OAuthRequest($http_method, $http_url, $parameters);
+ }
+ // next check for the auth header, we need to do some extra stuff
+ // if that is the case, namely suck in the parameters from GET or POST
+ // so that we can include them in the signature
+ else if (@substr($request_headers['Authorization'], 0, 5) == "OAuth") {
+ $header_parameters = OAuthRequest::split_header($request_headers['Authorization']);
+ if ($http_method == "GET") {
+ $req_parameters = $_GET;
+ }
+ else if ($http_method = "POST") {
+ $req_parameters = $_POST;
+ }
+ $parameters = array_merge($header_parameters, $req_parameters);
+ $req = new OAuthRequest($http_method, $http_url, $parameters);
+ }
+ else if ($http_method == "GET") {
+ $req = new OAuthRequest($http_method, $http_url, $_GET);
+ }
+ else if ($http_method == "POST") {
+ $req = new OAuthRequest($http_method, $http_url, $_POST);
+ }
+ return $req;
+ }/*}}}*/
+
+ /**
+ * pretty much a helper function to set up the request
+ */
+ public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) {/*{{{*/
+ @$parameters or $parameters = array();
+ $defaults = array("oauth_version" => OAuthRequest::$version,
+ "oauth_nonce" => OAuthRequest::generate_nonce(),
+ "oauth_timestamp" => OAuthRequest::generate_timestamp(),
+ "oauth_consumer_key" => $consumer->key);
+ $parameters = array_merge($defaults, $parameters);
+
+ if ($token) {
+ $parameters['oauth_token'] = $token->key;
+ }
+
+ // oauth v1.0a
+ /*if (isset($_REQUEST['oauth_verifier'])) {
+ $parameters['oauth_verifier'] = $_REQUEST['oauth_verifier'];
+ }*/
+
+
+ return new OAuthRequest($http_method, $http_url, $parameters);
+ }/*}}}*/
+
+ public function set_parameter($name, $value) {/*{{{*/
+ $this->parameters[$name] = $value;
+ }/*}}}*/
+
+ public function get_parameter($name) {/*{{{*/
+ return $this->parameters[$name];
+ }/*}}}*/
+
+ public function get_parameters() {/*{{{*/
+ return $this->parameters;
+ }/*}}}*/
+
+ /**
+ * Returns the normalized parameters of the request
+ *
+ * This will be all (except oauth_signature) parameters,
+ * sorted first by key, and if duplicate keys, then by
+ * value.
+ *
+ * The returned string will be all the key=value pairs
+ * concated by &.
+ *
+ * @return string
+ */
+ public function get_signable_parameters() {/*{{{*/
+ // Grab all parameters
+ $params = $this->parameters;
+
+ // Remove oauth_signature if present
+ if (isset($params['oauth_signature'])) {
+ unset($params['oauth_signature']);
+ }
+
+ // Urlencode both keys and values
+ $keys = array_map(array('OAuthUtil', 'urlencodeRFC3986'), array_keys($params));
+ $values = array_map(array('OAuthUtil', 'urlencodeRFC3986'), array_values($params));
+ $params = array_combine($keys, $values);
+
+ // Sort by keys (natsort)
+ uksort($params, 'strnatcmp');
+
+if(isset($params['title']) && isset($params['title-exact'])) {
+ $temp = $params['title-exact'];
+ $title = $params['title'];
+
+ unset($params['title']);
+ unset($params['title-exact']);
+
+ $params['title-exact'] = $temp;
+ $params['title'] = $title;
+}
+
+ // Generate key=value pairs
+ $pairs = array();
+ foreach ($params as $key=>$value ) {
+ if (is_array($value)) {
+ // If the value is an array, it's because there are multiple
+ // with the same key, sort them, then add all the pairs
+ natsort($value);
+ foreach ($value as $v2) {
+ $pairs[] = $key . '=' . $v2;
+ }
+ } else {
+ $pairs[] = $key . '=' . $value;
+ }
+ }
+
+ // Return the pairs, concated with &
+ return implode('&', $pairs);
+ }/*}}}*/
+
+ /**
+ * Returns the base string of this request
+ *
+ * The base string defined as the method, the url
+ * and the parameters (normalized), each urlencoded
+ * and the concated with &.
+ */
+ public function get_signature_base_string() {/*{{{*/
+ $parts = array(
+ $this->get_normalized_http_method(),
+ $this->get_normalized_http_url(),
+ $this->get_signable_parameters()
+ );
+
+ $parts = array_map(array('OAuthUtil', 'urlencodeRFC3986'), $parts);
+
+ return implode('&', $parts);
+ }/*}}}*/
+
+ /**
+ * just uppercases the http method
+ */
+ public function get_normalized_http_method() {/*{{{*/
+ return strtoupper($this->http_method);
+ }/*}}}*/
+
+/**
+ * parses the url and rebuilds it to be
+ * scheme://host/path
+ */
+ public function get_normalized_http_url() {
+ $parts = parse_url($this->http_url);
+
+ $scheme = (isset($parts['scheme'])) ? $parts['scheme'] : 'http';
+ $port = (isset($parts['port'])) ? $parts['port'] : (($scheme == 'https') ? '443' : '80');
+ $host = (isset($parts['host'])) ? strtolower($parts['host']) : '';
+ $path = (isset($parts['path'])) ? $parts['path'] : '';
+
+ if (($scheme == 'https' && $port != '443')
+ || ($scheme == 'http' && $port != '80')) {
+ $host = "$host:$port";
+ }
+ return "$scheme://$host$path";
+ }
+
+ /**
+ * builds a url usable for a GET request
+ */
+ public function to_url() {/*{{{*/
+ $out = $this->get_normalized_http_url() . "?";
+ $out .= $this->to_postdata();
+ return $out;
+ }/*}}}*/
+
+ /**
+ * builds the data one would send in a POST request
+ */
+ public function to_postdata() {/*{{{*/
+ $total = array();
+ foreach ($this->parameters as $k => $v) {
+ $total[] = OAuthUtil::urlencodeRFC3986($k) . "=" . OAuthUtil::urlencodeRFC3986($v);
+ }
+ $out = implode("&", $total);
+ return $out;
+ }/*}}}*/
+
+ /**
+ * builds the Authorization: header
+ */
+ public function to_header() {/*{{{*/
+ $out ='Authorization: OAuth ';
+ $total = array();
+
+ /*
+ $sig = $this->parameters['oauth_signature'];
+ unset($this->parameters['oauth_signature']);
+ uksort($this->parameters, 'strnatcmp');
+ $this->parameters['oauth_signature'] = $sig;
+ */
+
+ foreach ($this->parameters as $k => $v) {
+ if (substr($k, 0, 5) != "oauth") continue;
+ $out .= OAuthUtil::urlencodeRFC3986($k) . '="' . OAuthUtil::urlencodeRFC3986($v) . '", ';
+ }
+ $out = substr_replace($out, '', strlen($out) - 2);
+
+ return $out;
+ }/*}}}*/
+
+ public function __toString() {/*{{{*/
+ return $this->to_url();
+ }/*}}}*/
+
+
+ public function sign_request($signature_method, $consumer, $token, $privKey=NULL) {/*{{{*/
+ $this->set_parameter("oauth_signature_method", $signature_method->get_name());
+ $signature = $this->build_signature($signature_method, $consumer, $token, $privKey);
+ $this->set_parameter("oauth_signature", $signature);
+ }/*}}}*/
+
+ public function build_signature($signature_method, $consumer, $token, $privKey=NULL) {/*{{{*/
+ $signature = $signature_method->build_signature($this, $consumer, $token, $privKey);
+ return $signature;
+ }/*}}}*/
+
+ /**
+ * util function: current timestamp
+ */
+ private static function generate_timestamp() {/*{{{*/
+ return time();
+ }/*}}}*/
+
+ /**
+ * util function: current nonce
+ */
+ private static function generate_nonce() {/*{{{*/
+ $mt = microtime();
+ $rand = mt_rand();
+
+ return md5($mt . $rand); // md5s look nicer than numbers
+ }/*}}}*/
+
+ /**
+ * util function for turning the Authorization: header into
+ * parameters, has to do some unescaping
+ */
+ private static function split_header($header) {/*{{{*/
+ // this should be a regex
+ // error cases: commas in parameter values
+ $parts = explode(",", $header);
+ $out = array();
+ foreach ($parts as $param) {
+ $param = ltrim($param);
+ // skip the "realm" param, nobody ever uses it anyway
+ if (substr($param, 0, 5) != "oauth") continue;
+
+ $param_parts = explode("=", $param);
+
+ // rawurldecode() used because urldecode() will turn a "+" in the
+ // value into a space
+ $out[$param_parts[0]] = rawurldecode(substr($param_parts[1], 1, -1));
+ }
+ return $out;
+ }/*}}}*/
+
+ /**
+ * helper to try to sort out headers for people who aren't running apache
+ */
+ private static function get_headers() {/*{{{*/
+ if (function_exists('apache_request_headers')) {
+ // we need this to get the actual Authorization: header
+ // because apache tends to tell us it doesn't exist
+ return apache_request_headers();
+ }
+ // otherwise we don't have apache and are just going to have to hope
+ // that $_SERVER actually contains what we need
+ $out = array();
+ foreach ($_SERVER as $key => $value) {
+ if (substr($key, 0, 5) == "HTTP_") {
+ // this is chaos, basically it is just there to capitalize the first
+ // letter of every word that is not an initial HTTP and strip HTTP
+ // code from przemek
+ $key = str_replace(" ", "-", ucwords(strtolower(str_replace("_", " ", substr($key, 5)))));
+ $out[$key] = $value;
+ }
+ }
+ return $out;
+ }/*}}}*/
+}/*}}}*/
+
+class OAuthServer {/*{{{*/
+ protected $timestamp_threshold = 300; // in seconds, five minutes
+ protected $version = 1.0; // hi blaine
+ protected $signature_methods = array();
+
+ protected $data_store;
+
+ function __construct($data_store) {/*{{{*/
+ $this->data_store = $data_store;
+ }/*}}}*/
+
+ public function add_signature_method($signature_method) {/*{{{*/
+ $this->signature_methods[$signature_method->get_name()] =
+ $signature_method;
+ }/*}}}*/
+
+ // high level functions
+
+ /**
+ * process a request_token request
+ * returns the request token on success
+ */
+ public function fetch_request_token(&$request) {/*{{{*/
+ $this->get_version($request);
+
+ $consumer = $this->get_consumer($request);
+
+ // no token required for the initial token request
+ $token = NULL;
+
+ $this->check_signature($request, $consumer, $token);
+
+ $new_token = $this->data_store->new_request_token($consumer);
+
+ return $new_token;
+ }/*}}}*/
+
+ /**
+ * process an access_token request
+ * returns the access token on success
+ */
+ public function fetch_access_token(&$request) {/*{{{*/
+ $this->get_version($request);
+
+ $consumer = $this->get_consumer($request);
+
+ // requires authorized request token
+ $token = $this->get_token($request, $consumer, "request");
+
+ $this->check_signature($request, $consumer, $token);
+
+ $new_token = $this->data_store->new_access_token($token, $consumer);
+
+ return $new_token;
+ }/*}}}*/
+
+ /**
+ * verify an api call, checks all the parameters
+ */
+ public function verify_request(&$request) {/*{{{*/
+ $this->get_version($request);
+ $consumer = $this->get_consumer($request);
+ $token = $this->get_token($request, $consumer, "access");
+ $this->check_signature($request, $consumer, $token);
+ return array($consumer, $token);
+ }/*}}}*/
+
+ // Internals from here
+ /**
+ * version 1
+ */
+ private function get_version(&$request) {/*{{{*/
+ $version = $request->get_parameter("oauth_version");
+ if (!$version) {
+ $version = 1.0;
+ }
+ if ($version && $version != $this->version) {
+ throw new OAuthException("OAuth version '$version' not supported");
+ }
+ return $version;
+ }/*}}}*/
+
+ /**
+ * figure out the signature with some defaults
+ */
+ private function get_signature_method(&$request) {/*{{{*/
+ $signature_method =
+ @$request->get_parameter("oauth_signature_method");
+ if (!$signature_method) {
+ $signature_method = "PLAINTEXT";
+ }
+ if (!in_array($signature_method,
+ array_keys($this->signature_methods))) {
+ throw new OAuthException(
+ "Signature method '$signature_method' not supported try one of the following: " . implode(", ", array_keys($this->signature_methods))
+ );
+ }
+ return $this->signature_methods[$signature_method];
+ }/*}}}*/
+
+ /**
+ * try to find the consumer for the provided request's consumer key
+ */
+ private function get_consumer(&$request) {/*{{{*/
+ $consumer_key = @$request->get_parameter("oauth_consumer_key");
+ if (!$consumer_key) {
+ throw new OAuthException("Invalid consumer key");
+ }
+
+ $consumer = $this->data_store->lookup_consumer($consumer_key);
+ if (!$consumer) {
+ throw new OAuthException("Invalid consumer");
+ }
+
+ return $consumer;
+ }/*}}}*/
+
+ /**
+ * try to find the token for the provided request's token key
+ */
+ private function get_token(&$request, $consumer, $token_type="access") {/*{{{*/
+ $token_field = @$request->get_parameter('oauth_token');
+ $token = $this->data_store->lookup_token(
+ $consumer, $token_type, $token_field
+ );
+ if (!$token) {
+ throw new OAuthException("Invalid $token_type token: $token_field");
+ }
+ return $token;
+ }/*}}}*/
+
+ /**
+ * all-in-one function to check the signature on a request
+ * should guess the signature method appropriately
+ */
+ private function check_signature(&$request, $consumer, $token) {/*{{{*/
+ // this should probably be in a different method
+ $timestamp = @$request->get_parameter('oauth_timestamp');
+ $nonce = @$request->get_parameter('oauth_nonce');
+
+ $this->check_timestamp($timestamp);
+ $this->check_nonce($consumer, $token, $nonce, $timestamp);
+
+ $signature_method = $this->get_signature_method($request);
+
+ $signature = $request->get_parameter('oauth_signature');
+ $valid_sig = $signature_method->check_signature(
+ $request,
+ $consumer,
+ $token,
+ $signature
+ );
+
+ if (!$valid_sig) {
+ throw new OAuthException("Invalid signature");
+ }
+ }/*}}}*/
+
+ /**
+ * check that the timestamp is new enough
+ */
+ private function check_timestamp($timestamp) {/*{{{*/
+ // verify that timestamp is recentish
+ $now = time();
+ if ($now - $timestamp > $this->timestamp_threshold) {
+ throw new OAuthException("Expired timestamp, yours $timestamp, ours $now");
+ }
+ }/*}}}*/
+
+ /**
+ * check that the nonce is not repeated
+ */
+ private function check_nonce($consumer, $token, $nonce, $timestamp) {/*{{{*/
+ // verify that the nonce is uniqueish
+ $found = $this->data_store->lookup_nonce($consumer, $token, $nonce, $timestamp);
+ if ($found) {
+ throw new OAuthException("Nonce already used: $nonce");
+ }
+ }/*}}}*/
+
+
+
+}/*}}}*/
+
+class OAuthDataStore {/*{{{*/
+ function lookup_consumer($consumer_key) {/*{{{*/
+ // implement me
+ }/*}}}*/
+
+ function lookup_token($consumer, $token_type, $token) {/*{{{*/
+ // implement me
+ }/*}}}*/
+
+ function lookup_nonce($consumer, $token, $nonce, $timestamp) {/*{{{*/
+ // implement me
+ }/*}}}*/
+
+ function fetch_request_token($consumer) {/*{{{*/
+ // return a new token attached to this consumer
+ }/*}}}*/
+
+ function fetch_access_token($token, $consumer) {/*{{{*/
+ // return a new access token attached to this consumer
+ // for the user associated with this token if the request token
+ // is authorized
+ // should also invalidate the request token
+ }/*}}}*/
+
+}/*}}}*/
+
+
+/* A very naive dbm-based oauth storage
+ */
+class SimpleOAuthDataStore extends OAuthDataStore {/*{{{*/
+ private $dbh;
+
+ function __construct($path = "oauth.gdbm") {/*{{{*/
+ $this->dbh = dba_popen($path, 'c', 'gdbm');
+ }/*}}}*/
+
+ function __destruct() {/*{{{*/
+ dba_close($this->dbh);
+ }/*}}}*/
+
+ function lookup_consumer($consumer_key) {/*{{{*/
+ $rv = dba_fetch("consumer_$consumer_key", $this->dbh);
+ if ($rv === FALSE) {
+ return NULL;
+ }
+ $obj = unserialize($rv);
+ if (!($obj instanceof OAuthConsumer)) {
+ return NULL;
+ }
+ return $obj;
+ }/*}}}*/
+
+ function lookup_token($consumer, $token_type, $token) {/*{{{*/
+ $rv = dba_fetch("${token_type}_${token}", $this->dbh);
+ if ($rv === FALSE) {
+ return NULL;
+ }
+ $obj = unserialize($rv);
+ if (!($obj instanceof OAuthToken)) {
+ return NULL;
+ }
+ return $obj;
+ }/*}}}*/
+
+ function lookup_nonce($consumer, $token, $nonce, $timestamp) {/*{{{*/
+ return dba_exists("nonce_$nonce", $this->dbh);
+ }/*}}}*/
+
+ function new_token($consumer, $type="request") {/*{{{*/
+ $key = md5(time());
+ $secret = time() + time();
+ $token = new OAuthToken($key, md5(md5($secret)));
+ if (!dba_insert("${type}_$key", serialize($token), $this->dbh)) {
+ throw new OAuthException("doooom!");
+ }
+ return $token;
+ }/*}}}*/
+
+ function new_request_token($consumer) {/*{{{*/
+ return $this->new_token($consumer, "request");
+ }/*}}}*/
+
+ function new_access_token($token, $consumer) {/*{{{*/
+
+ $token = $this->new_token($consumer, 'access');
+ dba_delete("request_" . $token->key, $this->dbh);
+ return $token;
+ }/*}}}*/
+}/*}}}*/
+
+class OAuthUtil {/*{{{*/
+ public static function urlencodeRFC3986($string) {/*{{{*/
+ return str_replace('%7E', '~', rawurlencode($string));
+ }/*}}}*/
+
+ public static function urldecodeRFC3986($string) {/*{{{*/
+ return rawurldecode($string);
+ }/*}}}*/
+}/*}}}*/
+
+?> \ No newline at end of file
diff --git a/3rdparty/Google/common.inc.php b/3rdparty/Google/common.inc.php
new file mode 100755
index 00000000000..57185cdc4d8
--- /dev/null
+++ b/3rdparty/Google/common.inc.php
@@ -0,0 +1,185 @@
+<?php
+/* Copyright (c) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Author: Eric Bidelman <e.bidelman@google.com>
+ */
+
+$PRIV_KEY_FILE = '/path/to/your/rsa_private_key.pem';
+
+// OAuth library - http://oauth.googlecode.com/svn/code/php/
+require_once('OAuth.php');
+
+// Google's accepted signature methods
+$hmac_method = new OAuthSignatureMethod_HMAC_SHA1();
+$rsa_method = new OAuthSignatureMethod_RSA_SHA1();
+$SIG_METHODS = array($rsa_method->get_name() => $rsa_method,
+ $hmac_method->get_name() => $hmac_method);
+
+/**
+ * Makes an HTTP request to the specified URL
+ *
+ * @param string $http_method The HTTP method (GET, POST, PUT, DELETE)
+ * @param string $url Full URL of the resource to access
+ * @param array $extraHeaders (optional) Additional headers to include in each
+ * request. Elements are header/value pair strings ('Host: example.com')
+ * @param string $postData (optional) POST/PUT request body
+ * @param bool $returnResponseHeaders True if resp. headers should be returned.
+ * @return string Response body from the server
+ */
+function send_signed_request($http_method, $url, $extraHeaders=null,
+ $postData=null, $returnResponseHeaders=true) {
+ $curl = curl_init($url);
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($curl, CURLOPT_FAILONERROR, false);
+ curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
+
+ // Return request headers in the reponse
+// curl_setopt($curl, CURLINFO_HEADER_OUT, true);
+
+ // Return response headers ni the response?
+ if ($returnResponseHeaders) {
+ curl_setopt($curl, CURLOPT_HEADER, true);
+ }
+
+ $headers = array();
+ //$headers[] = 'GData-Version: 2.0'; // use GData v2 by default
+ if (is_array($extraHeaders)) {
+ $headers = array_merge($headers, $extraHeaders);
+ }
+
+ // Setup default curl options for each type of HTTP request.
+ // This is also a great place to add additional headers for each request.
+ switch($http_method) {
+ case 'GET':
+ curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
+ break;
+ case 'POST':
+ curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
+ curl_setopt($curl, CURLOPT_POST, 1);
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
+ break;
+ case 'PUT':
+ $headers[] = 'If-Match: *';
+ curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
+ curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $http_method);
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
+ break;
+ case 'DELETE':
+ $headers[] = 'If-Match: *';
+ curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
+ curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $http_method);
+ break;
+ default:
+ curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
+ }
+
+ // Execute the request. If an error occures, fill the response body with it.
+ $response = curl_exec($curl);
+ if (!$response) {
+ $response = curl_error($curl);
+ }
+
+ // Add server's response headers to our response body
+ $response = curl_getinfo($curl, CURLINFO_HEADER_OUT) . $response;
+
+ curl_close($curl);
+
+ return $response;
+}
+
+/**
+* Takes XML as a string and returns it nicely indented
+*
+* @param string $xml The xml to beautify
+* @param boolean $html_output True if returned XML should be escaped for HTML.
+* @return string The beautified xml
+*/
+function xml_pretty_printer($xml, $html_output=false) {
+ $xml_obj = new SimpleXMLElement($xml);
+ $level = 2;
+
+ // Get an array containing each XML element
+ $xml = explode("\n", preg_replace('/>\s*</', ">\n<", $xml_obj->asXML()));
+
+ // Hold current indentation level
+ $indent = 0;
+
+ $pretty = array();
+
+ // Shift off opening XML tag if present
+ if (count($xml) && preg_match('/^<\?\s*xml/', $xml[0])) {
+ $pretty[] = array_shift($xml);
+ }
+
+ foreach ($xml as $el) {
+ if (preg_match('/^<([\w])+[^>\/]*>$/U', $el)) {
+ // opening tag, increase indent
+ $pretty[] = str_repeat(' ', $indent) . $el;
+ $indent += $level;
+ } else {
+ if (preg_match('/^<\/.+>$/', $el)) {
+ $indent -= $level; // closing tag, decrease indent
+ }
+ if ($indent < 0) {
+ $indent += $level;
+ }
+ $pretty[] = str_repeat(' ', $indent) . $el;
+ }
+ }
+
+ $xml = implode("\n", $pretty);
+ return $html_output ? htmlentities($xml) : $xml;
+}
+
+/**
+ * Joins key/value pairs by $inner_glue and each pair together by $outer_glue.
+ *
+ * Example: implode_assoc('=', '&', array('a' => 1, 'b' => 2)) === 'a=1&b=2'
+ *
+ * @param string $inner_glue What to implode each key/value pair with
+ * @param string $outer_glue What to impode each key/value string subset with
+ * @param array $array Associative array of query parameters
+ * @return string Urlencoded string of query parameters
+ */
+function implode_assoc($inner_glue, $outer_glue, $array) {
+ $output = array();
+ foreach($array as $key => $item) {
+ $output[] = $key . $inner_glue . urlencode($item);
+ }
+ return implode($outer_glue, $output);
+}
+
+/**
+ * Explodes a string of key/value url parameters into an associative array.
+ * This method performs the compliment operations of implode_assoc().
+ *
+ * Example: explode_assoc('=', '&', 'a=1&b=2') === array('a' => 1, 'b' => 2)
+ *
+ * @param string $inner_glue What each key/value pair is joined with
+ * @param string $outer_glue What each set of key/value pairs is joined with.
+ * @param array $array Associative array of query parameters
+ * @return array Urlencoded string of query parameters
+ */
+function explode_assoc($inner_glue, $outer_glue, $params) {
+ $tempArr = explode($outer_glue, $params);
+ foreach($tempArr as $val) {
+ $pos = strpos($val, $inner_glue);
+ $key = substr($val, 0, $pos);
+ $array2[$key] = substr($val, $pos + 1, strlen($val));
+ }
+ return $array2;
+}
+
+?> \ No newline at end of file
diff --git a/3rdparty/MDB2/Schema/Parser.php b/3rdparty/MDB2/Schema/Parser.php
index cfd0c37d8a3..3c4345661b1 100644
--- a/3rdparty/MDB2/Schema/Parser.php
+++ b/3rdparty/MDB2/Schema/Parser.php
@@ -147,33 +147,6 @@ class MDB2_Schema_Parser extends XML_Parser
}
/**
- * PHP 4 compatible constructor
- *
- * @param array $variables mixed array with user defined schema
- * variables
- * @param bool $fail_on_invalid_names array with reserved words per RDBMS
- * @param array $structure multi dimensional array with
- * database schema and data
- * @param array $valid_types information of all valid fields
- * types
- * @param bool $force_defaults if true sets a default value to
- * field when not explicit
- * @param int $max_identifiers_length maximum allowed size for entities
- * name
- *
- * @return void
- *
- * @access public
- * @static
- */
- function MDB2_Schema_Parser($variables, $fail_on_invalid_names = true,
- $structure = false, $valid_types = array(), $force_defaults = true,
- $max_identifiers_length = null
- ) {
- $this->__construct($variables, $fail_on_invalid_names, $structure, $valid_types, $force_defaults);
- }
-
- /**
* Triggered when reading a XML open tag <element>
*
* @param resource $xp xml parser resource
diff --git a/3rdparty/MDB2/Schema/Parser2.php b/3rdparty/MDB2/Schema/Parser2.php
index b415b4a336e..f27dffbabf9 100644
--- a/3rdparty/MDB2/Schema/Parser2.php
+++ b/3rdparty/MDB2/Schema/Parser2.php
@@ -144,33 +144,6 @@ class MDB2_Schema_Parser2 extends XML_Unserializer
}
/**
- * PHP 4 compatible constructor
- *
- * @param array $variables mixed array with user defined schema
- * variables
- * @param bool $fail_on_invalid_names array with reserved words per RDBMS
- * @param array $structure multi dimensional array with
- * database schema and data
- * @param array $valid_types information of all valid fields
- * types
- * @param bool $force_defaults if true sets a default value to
- * field when not explicit
- * @param int $max_identifiers_length maximum allowed size for entities
- * name
- *
- * @return void
- *
- * @access public
- * @static
- */
- function MDB2_Schema_Parser2($variables, $fail_on_invalid_names = true,
- $structure = false, $valid_types = array(), $force_defaults = true,
- $max_identifiers_length = null
- ) {
- $this->__construct($variables, $fail_on_invalid_names, $structure, $valid_types, $force_defaults);
- }
-
- /**
* Main method. Parses XML Schema File.
*
* @return bool|error object
diff --git a/3rdparty/MDB2/Schema/Validate.php b/3rdparty/MDB2/Schema/Validate.php
index 4cff175576f..4a8e0d27bac 100644
--- a/3rdparty/MDB2/Schema/Validate.php
+++ b/3rdparty/MDB2/Schema/Validate.php
@@ -108,28 +108,6 @@ class MDB2_Schema_Validate
$this->max_identifiers_length = $max_identifiers_length;
}
- /**
- * PHP 4 compatible constructor
- *
- * @param bool $fail_on_invalid_names array with reserved words per RDBMS
- * @param array $valid_types information of all valid fields
- * types
- * @param bool $force_defaults if true sets a default value to
- * field when not explicit
- * @param int $max_identifiers_length maximum allowed size for entities
- * name
- *
- * @return void
- *
- * @access public
- * @static
- */
- function MDB2_Schema_Validate($fail_on_invalid_names = true, $valid_types = array(),
- $force_defaults = true, $max_identifiers_length = null
- ) {
- $this->__construct($fail_on_invalid_names, $valid_types, $force_defaults);
- }
-
// }}}
// {{{ raiseError()
diff --git a/3rdparty/MDB2/Schema/Writer.php b/3rdparty/MDB2/Schema/Writer.php
index 70a03168de6..3eaa39a2071 100644
--- a/3rdparty/MDB2/Schema/Writer.php
+++ b/3rdparty/MDB2/Schema/Writer.php
@@ -82,22 +82,6 @@ class MDB2_Schema_Writer
$this->valid_types = $valid_types;
}
- /**
- * PHP 4 compatible constructor
- *
- * @param array $valid_types information of all valid fields
- * types
- *
- * @return void
- *
- * @access public
- * @static
- */
- function MDB2_Schema_Writer($valid_types = array())
- {
- $this->__construct($valid_types);
- }
-
// }}}
// {{{ raiseError()
diff --git a/3rdparty/Sabre.includes.php b/3rdparty/Sabre.includes.php
index c1334373663..c1334373663 100644..100755
--- a/3rdparty/Sabre.includes.php
+++ b/3rdparty/Sabre.includes.php
diff --git a/3rdparty/Sabre/CalDAV/Backend/Abstract.php b/3rdparty/Sabre/CalDAV/Backend/Abstract.php
index 7aba1d69ffe..7aba1d69ffe 100644..100755
--- a/3rdparty/Sabre/CalDAV/Backend/Abstract.php
+++ b/3rdparty/Sabre/CalDAV/Backend/Abstract.php
diff --git a/3rdparty/Sabre/CalDAV/Backend/PDO.php b/3rdparty/Sabre/CalDAV/Backend/PDO.php
index ddacf940c74..ddacf940c74 100644..100755
--- a/3rdparty/Sabre/CalDAV/Backend/PDO.php
+++ b/3rdparty/Sabre/CalDAV/Backend/PDO.php
diff --git a/3rdparty/Sabre/CalDAV/Calendar.php b/3rdparty/Sabre/CalDAV/Calendar.php
index 623df2dd1b8..623df2dd1b8 100644..100755
--- a/3rdparty/Sabre/CalDAV/Calendar.php
+++ b/3rdparty/Sabre/CalDAV/Calendar.php
diff --git a/3rdparty/Sabre/CalDAV/CalendarObject.php b/3rdparty/Sabre/CalDAV/CalendarObject.php
index 72f0a578d16..72f0a578d16 100644..100755
--- a/3rdparty/Sabre/CalDAV/CalendarObject.php
+++ b/3rdparty/Sabre/CalDAV/CalendarObject.php
diff --git a/3rdparty/Sabre/CalDAV/CalendarQueryParser.php b/3rdparty/Sabre/CalDAV/CalendarQueryParser.php
index bd0d343382f..bd0d343382f 100644..100755
--- a/3rdparty/Sabre/CalDAV/CalendarQueryParser.php
+++ b/3rdparty/Sabre/CalDAV/CalendarQueryParser.php
diff --git a/3rdparty/Sabre/CalDAV/CalendarQueryValidator.php b/3rdparty/Sabre/CalDAV/CalendarQueryValidator.php
index 1bb6b5d53fa..8f674840e87 100644..100755
--- a/3rdparty/Sabre/CalDAV/CalendarQueryValidator.php
+++ b/3rdparty/Sabre/CalDAV/CalendarQueryValidator.php
@@ -294,6 +294,7 @@ class Sabre_CalDAV_CalendarQueryValidator {
// in the VALARM component code, so this is a hack, and an
// expensive one too.
if ($component->parent->name === 'VEVENT' && $component->parent->RRULE) {
+
// Fire up the iterator!
$it = new Sabre_VObject_RecurrenceIterator($component->parent->parent, (string)$component->parent->UID);
while($it->valid()) {
@@ -303,15 +304,37 @@ class Sabre_CalDAV_CalendarQueryValidator {
// one is the first to trigger. Based on this, we can
// determine if we can 'give up' expanding events.
$firstAlarm = null;
- foreach($expandedEvent->VALARM as $expandedAlarm) {
- $effectiveTrigger = $expandedAlarm->getEffectiveTriggerTime();
- if (!$firstAlarm || $effectiveTrigger < $firstAlarm) {
- $firstAlarm = $effectiveTrigger;
- }
- if ($expandedAlarm->isInTimeRange($start, $end)) {
- return true;
+ if ($expandedEvent->VALARM !== null) {
+ foreach($expandedEvent->VALARM as $expandedAlarm) {
+
+ $effectiveTrigger = $expandedAlarm->getEffectiveTriggerTime();
+ if ($expandedAlarm->isInTimeRange($start, $end)) {
+ return true;
+ }
+
+ if ((string)$expandedAlarm->TRIGGER['VALUE'] === 'DATE-TIME') {
+ // This is an alarm with a non-relative trigger
+ // time, likely created by a buggy client. The
+ // implication is that every alarm in this
+ // recurring event trigger at the exact same
+ // time. It doesn't make sense to traverse
+ // further.
+ } else {
+ // We store the first alarm as a means to
+ // figure out when we can stop traversing.
+ if (!$firstAlarm || $effectiveTrigger < $firstAlarm) {
+ $firstAlarm = $effectiveTrigger;
+ }
+ }
}
-
+ }
+ if (is_null($firstAlarm)) {
+ // No alarm was found.
+ //
+ // Or technically: No alarm that will change for
+ // every instance of the recurrence was found,
+ // which means we can assume there was no match.
+ return false;
}
if ($firstAlarm > $end) {
return false;
diff --git a/3rdparty/Sabre/CalDAV/CalendarRootNode.php b/3rdparty/Sabre/CalDAV/CalendarRootNode.php
index 3907913cc78..3907913cc78 100644..100755
--- a/3rdparty/Sabre/CalDAV/CalendarRootNode.php
+++ b/3rdparty/Sabre/CalDAV/CalendarRootNode.php
diff --git a/3rdparty/Sabre/CalDAV/ICSExportPlugin.php b/3rdparty/Sabre/CalDAV/ICSExportPlugin.php
index ec42b406b2f..ec42b406b2f 100644..100755
--- a/3rdparty/Sabre/CalDAV/ICSExportPlugin.php
+++ b/3rdparty/Sabre/CalDAV/ICSExportPlugin.php
diff --git a/3rdparty/Sabre/CalDAV/ICalendar.php b/3rdparty/Sabre/CalDAV/ICalendar.php
index 15d51ebcf79..15d51ebcf79 100644..100755
--- a/3rdparty/Sabre/CalDAV/ICalendar.php
+++ b/3rdparty/Sabre/CalDAV/ICalendar.php
diff --git a/3rdparty/Sabre/CalDAV/ICalendarObject.php b/3rdparty/Sabre/CalDAV/ICalendarObject.php
index 280f982a310..280f982a310 100644..100755
--- a/3rdparty/Sabre/CalDAV/ICalendarObject.php
+++ b/3rdparty/Sabre/CalDAV/ICalendarObject.php
diff --git a/3rdparty/Sabre/CalDAV/Plugin.php b/3rdparty/Sabre/CalDAV/Plugin.php
index d7d1d970518..c56ab384844 100644..100755
--- a/3rdparty/Sabre/CalDAV/Plugin.php
+++ b/3rdparty/Sabre/CalDAV/Plugin.php
@@ -49,23 +49,23 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin {
/**
* The email handler for invites and other scheduling messages.
- *
- * @var Sabre_CalDAV_Schedule_IMip
+ *
+ * @var Sabre_CalDAV_Schedule_IMip
*/
protected $imipHandler;
/**
* Sets the iMIP handler.
*
- * iMIP = The email transport of iCalendar scheduling messages. Setting
- * this is optional, but if you want the server to allow invites to be sent
+ * iMIP = The email transport of iCalendar scheduling messages. Setting
+ * this is optional, but if you want the server to allow invites to be sent
* out, you must set a handler.
*
- * Specifically iCal will plain assume that the server supports this. If
- * the server doesn't, iCal will display errors when inviting people to
+ * Specifically iCal will plain assume that the server supports this. If
+ * the server doesn't, iCal will display errors when inviting people to
* events.
*
- * @param Sabre_CalDAV_Schedule_IMip $imipHandler
+ * @param Sabre_CalDAV_Schedule_IMip $imipHandler
* @return void
*/
public function setIMipHandler(Sabre_CalDAV_Schedule_IMip $imipHandler) {
@@ -672,6 +672,42 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin {
}
+ if ($vobj->name !== 'VCALENDAR') {
+ throw new Sabre_DAV_Exception_UnsupportedMediaType('This collection can only support iCalendar objects.');
+ }
+
+ $foundType = null;
+ $foundUID = null;
+ foreach($vobj->getComponents() as $component) {
+ switch($component->name) {
+ case 'VTIMEZONE' :
+ continue 2;
+ case 'VEVENT' :
+ case 'VTODO' :
+ case 'VJOURNAL' :
+ if (is_null($foundType)) {
+ $foundType = $component->name;
+ if (!isset($component->UID)) {
+ throw new Sabre_DAV_Exception_BadRequest('Every ' . $component->name . ' component must have an UID');
+ }
+ $foundUID = (string)$component->UID;
+ } else {
+ if ($foundType !== $component->name) {
+ throw new Sabre_DAV_Exception_BadRequest('A calendar object must only contain 1 component. We found a ' . $component->name . ' as well as a ' . $foundType);
+ }
+ if ($foundUID !== (string)$component->UID) {
+ throw new Sabre_DAV_Exception_BadRequest('Every ' . $component->name . ' in this object must have identical UIDs');
+ }
+ }
+ break;
+ default :
+ throw new Sabre_DAV_Exception_BadRequest('You are not allowed to create components of type: ' . $component->name . ' here');
+
+ }
+ }
+ if (!$foundType)
+ throw new Sabre_DAV_Exception_BadRequest('iCalendar object must contain at least 1 of VEVENT, VTODO or VJOURNAL');
+
}
/**
@@ -687,12 +723,12 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin {
if (!$originator) {
throw new Sabre_DAV_Exception_BadRequest('The Originator: header must be specified when making POST requests');
- }
+ }
if (!$recipients) {
throw new Sabre_DAV_Exception_BadRequest('The Recipient: header must be specified when making POST requests');
- }
+ }
- if (!preg_match('/^mailto:(.*)@(.*)$/', $originator)) {
+ if (!preg_match('/^mailto:(.*)@(.*)$/i', $originator)) {
throw new Sabre_DAV_Exception_BadRequest('Originator must start with mailto: and must be valid email address');
}
$originator = substr($originator,7);
@@ -701,14 +737,14 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin {
foreach($recipients as $k=>$recipient) {
$recipient = trim($recipient);
- if (!preg_match('/^mailto:(.*)@(.*)$/', $recipient)) {
+ if (!preg_match('/^mailto:(.*)@(.*)$/i', $recipient)) {
throw new Sabre_DAV_Exception_BadRequest('Recipients must start with mailto: and must be valid email address');
}
$recipient = substr($recipient, 7);
$recipients[$k] = $recipient;
}
- // We need to make sure that 'originator' matches one of the email
+ // We need to make sure that 'originator' matches one of the email
// addresses of the selected principal.
$principal = $outboxNode->getOwner();
$props = $this->server->getProperties($principal,array(
@@ -724,7 +760,7 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin {
throw new Sabre_DAV_Exception_Forbidden('The addresses specified in the Originator header did not match any addresses in the owners calendar-user-address-set header');
}
- try {
+ try {
$vObject = Sabre_VObject_Reader::read($this->server->httpRequest->getBody(true));
} catch (Sabre_VObject_ParseException $e) {
throw new Sabre_DAV_Exception_BadRequest('The request body must be a valid iCalendar object. Parse error: ' . $e->getMessage());
@@ -749,9 +785,10 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin {
}
if (in_array($method, array('REQUEST','REPLY','ADD','CANCEL')) && $componentType==='VEVENT') {
- $this->iMIPMessage($originator, $recipients, $vObject);
+ $result = $this->iMIPMessage($originator, $recipients, $vObject);
$this->server->httpResponse->sendStatus(200);
- $this->server->httpResponse->sendBody('Messages sent');
+ $this->server->httpResponse->setHeader('Content-Type','application/xml');
+ $this->server->httpResponse->sendBody($this->generateScheduleResponse($result));
} else {
throw new Sabre_DAV_Exception_NotImplemented('This iTIP method is currently not implemented');
}
@@ -760,18 +797,83 @@ class Sabre_CalDAV_Plugin extends Sabre_DAV_ServerPlugin {
/**
* Sends an iMIP message by email.
- *
- * @param string $originator
- * @param array $recipients
- * @param Sabre_VObject_Component $vObject
- * @return void
+ *
+ * This method must return an array with status codes per recipient.
+ * This should look something like:
+ *
+ * array(
+ * 'user1@example.org' => '2.0;Success'
+ * )
+ *
+ * Formatting for this status code can be found at:
+ * https://tools.ietf.org/html/rfc5545#section-3.8.8.3
+ *
+ * A list of valid status codes can be found at:
+ * https://tools.ietf.org/html/rfc5546#section-3.6
+ *
+ * @param string $originator
+ * @param array $recipients
+ * @param Sabre_VObject_Component $vObject
+ * @return array
*/
protected function iMIPMessage($originator, array $recipients, Sabre_VObject_Component $vObject) {
if (!$this->imipHandler) {
- throw new Sabre_DAV_Exception_NotImplemented('No iMIP handler is setup on this server.');
+ $resultStatus = '5.2;This server does not support this operation';
+ } else {
+ $this->imipHandler->sendMessage($originator, $recipients, $vObject);
+ $resultStatus = '2.0;Success';
}
- $this->imipHandler->sendMessage($originator, $recipients, $vObject);
+
+ $result = array();
+ foreach($recipients as $recipient) {
+ $result[$recipient] = $resultStatus;
+ }
+
+ return $result;
+
+
+ }
+
+ /**
+ * Generates a schedule-response XML body
+ *
+ * The recipients array is a key->value list, containing email addresses
+ * and iTip status codes. See the iMIPMessage method for a description of
+ * the value.
+ *
+ * @param array $recipients
+ * @return string
+ */
+ public function generateScheduleResponse(array $recipients) {
+
+ $dom = new DOMDocument('1.0','utf-8');
+ $dom->formatOutput = true;
+ $xscheduleResponse = $dom->createElement('cal:schedule-response');
+ $dom->appendChild($xscheduleResponse);
+
+ foreach($this->server->xmlNamespaces as $namespace=>$prefix) {
+
+ $xscheduleResponse->setAttribute('xmlns:' . $prefix, $namespace);
+
+ }
+
+ foreach($recipients as $recipient=>$status) {
+ $xresponse = $dom->createElement('cal:response');
+
+ $xrecipient = $dom->createElement('cal:recipient');
+ $xrecipient->appendChild($dom->createTextNode($recipient));
+ $xresponse->appendChild($xrecipient);
+
+ $xrequestStatus = $dom->createElement('cal:request-status');
+ $xrequestStatus->appendChild($dom->createTextNode($status));
+ $xresponse->appendChild($xrequestStatus);
+
+ $xscheduleResponse->appendChild($xresponse);
+
+ }
+
+ return $dom->saveXML();
}
diff --git a/3rdparty/Sabre/CalDAV/Principal/Collection.php b/3rdparty/Sabre/CalDAV/Principal/Collection.php
index abbefa5567a..abbefa5567a 100644..100755
--- a/3rdparty/Sabre/CalDAV/Principal/Collection.php
+++ b/3rdparty/Sabre/CalDAV/Principal/Collection.php
diff --git a/3rdparty/Sabre/CalDAV/Principal/ProxyRead.php b/3rdparty/Sabre/CalDAV/Principal/ProxyRead.php
index 4b3f035634a..4b3f035634a 100644..100755
--- a/3rdparty/Sabre/CalDAV/Principal/ProxyRead.php
+++ b/3rdparty/Sabre/CalDAV/Principal/ProxyRead.php
diff --git a/3rdparty/Sabre/CalDAV/Principal/ProxyWrite.php b/3rdparty/Sabre/CalDAV/Principal/ProxyWrite.php
index dd0c2e86edd..dd0c2e86edd 100644..100755
--- a/3rdparty/Sabre/CalDAV/Principal/ProxyWrite.php
+++ b/3rdparty/Sabre/CalDAV/Principal/ProxyWrite.php
diff --git a/3rdparty/Sabre/CalDAV/Principal/User.php b/3rdparty/Sabre/CalDAV/Principal/User.php
index 8453b877a73..8453b877a73 100644..100755
--- a/3rdparty/Sabre/CalDAV/Principal/User.php
+++ b/3rdparty/Sabre/CalDAV/Principal/User.php
diff --git a/3rdparty/Sabre/CalDAV/Property/SupportedCalendarComponentSet.php b/3rdparty/Sabre/CalDAV/Property/SupportedCalendarComponentSet.php
index 2ea078d7dac..2ea078d7dac 100644..100755
--- a/3rdparty/Sabre/CalDAV/Property/SupportedCalendarComponentSet.php
+++ b/3rdparty/Sabre/CalDAV/Property/SupportedCalendarComponentSet.php
diff --git a/3rdparty/Sabre/CalDAV/Property/SupportedCalendarData.php b/3rdparty/Sabre/CalDAV/Property/SupportedCalendarData.php
index 1d848dd5cf6..1d848dd5cf6 100644..100755
--- a/3rdparty/Sabre/CalDAV/Property/SupportedCalendarData.php
+++ b/3rdparty/Sabre/CalDAV/Property/SupportedCalendarData.php
diff --git a/3rdparty/Sabre/CalDAV/Property/SupportedCollationSet.php b/3rdparty/Sabre/CalDAV/Property/SupportedCollationSet.php
index 24e84d4c17d..24e84d4c17d 100644..100755
--- a/3rdparty/Sabre/CalDAV/Property/SupportedCollationSet.php
+++ b/3rdparty/Sabre/CalDAV/Property/SupportedCollationSet.php
diff --git a/3rdparty/Sabre/CalDAV/Schedule/IMip.php b/3rdparty/Sabre/CalDAV/Schedule/IMip.php
index 37e75fcc4a7..37e75fcc4a7 100644..100755
--- a/3rdparty/Sabre/CalDAV/Schedule/IMip.php
+++ b/3rdparty/Sabre/CalDAV/Schedule/IMip.php
diff --git a/3rdparty/Sabre/CalDAV/Schedule/IOutbox.php b/3rdparty/Sabre/CalDAV/Schedule/IOutbox.php
index 46d77514bc0..46d77514bc0 100644..100755
--- a/3rdparty/Sabre/CalDAV/Schedule/IOutbox.php
+++ b/3rdparty/Sabre/CalDAV/Schedule/IOutbox.php
diff --git a/3rdparty/Sabre/CalDAV/Schedule/Outbox.php b/3rdparty/Sabre/CalDAV/Schedule/Outbox.php
index 014c37230d1..014c37230d1 100644..100755
--- a/3rdparty/Sabre/CalDAV/Schedule/Outbox.php
+++ b/3rdparty/Sabre/CalDAV/Schedule/Outbox.php
diff --git a/3rdparty/Sabre/CalDAV/Server.php b/3rdparty/Sabre/CalDAV/Server.php
index 325e3d80a7f..325e3d80a7f 100644..100755
--- a/3rdparty/Sabre/CalDAV/Server.php
+++ b/3rdparty/Sabre/CalDAV/Server.php
diff --git a/3rdparty/Sabre/CalDAV/UserCalendars.php b/3rdparty/Sabre/CalDAV/UserCalendars.php
index b8d3f0573fa..b8d3f0573fa 100644..100755
--- a/3rdparty/Sabre/CalDAV/UserCalendars.php
+++ b/3rdparty/Sabre/CalDAV/UserCalendars.php
diff --git a/3rdparty/Sabre/CalDAV/Version.php b/3rdparty/Sabre/CalDAV/Version.php
index 939e903c89f..ace9901c089 100644..100755
--- a/3rdparty/Sabre/CalDAV/Version.php
+++ b/3rdparty/Sabre/CalDAV/Version.php
@@ -14,7 +14,7 @@ class Sabre_CalDAV_Version {
/**
* Full version number
*/
- const VERSION = '1.6.2';
+ const VERSION = '1.6.4';
/**
* Stability : alpha, beta, stable
diff --git a/3rdparty/Sabre/CalDAV/includes.php b/3rdparty/Sabre/CalDAV/includes.php
index 1ecb870a0e1..1ecb870a0e1 100644..100755
--- a/3rdparty/Sabre/CalDAV/includes.php
+++ b/3rdparty/Sabre/CalDAV/includes.php
diff --git a/3rdparty/Sabre/CardDAV/AddressBook.php b/3rdparty/Sabre/CardDAV/AddressBook.php
index 3b381e1eea3..12297175a85 100644..100755
--- a/3rdparty/Sabre/CardDAV/AddressBook.php
+++ b/3rdparty/Sabre/CardDAV/AddressBook.php
@@ -108,7 +108,9 @@ class Sabre_CardDAV_AddressBook extends Sabre_DAV_Collection implements Sabre_Ca
*/
public function createFile($name,$vcardData = null) {
- $vcardData = stream_get_contents($vcardData);
+ if (is_resource($vcardData)) {
+ $vcardData = stream_get_contents($vcardData);
+ }
// Converting to UTF-8, if needed
$vcardData = Sabre_DAV_StringUtil::ensureUTF8($vcardData);
diff --git a/3rdparty/Sabre/CardDAV/AddressBookQueryParser.php b/3rdparty/Sabre/CardDAV/AddressBookQueryParser.php
index 85a4963127b..46bb8ff18dd 100644..100755
--- a/3rdparty/Sabre/CardDAV/AddressBookQueryParser.php
+++ b/3rdparty/Sabre/CardDAV/AddressBookQueryParser.php
@@ -9,7 +9,7 @@
* @package Sabre
* @subpackage CardDAV
* @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
- * @author Evert Pot (http://www.rooftopsolutions.nl/)
+ * @author Evert Pot (http://www.rooftopsolutions.nl/)
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
*/
class Sabre_CardDAV_AddressBookQueryParser {
@@ -88,12 +88,22 @@ class Sabre_CardDAV_AddressBookQueryParser {
if (is_nan($limit)) $limit = null;
$filter = $this->xpath->query('/card:addressbook-query/card:filter');
- if ($filter->length !== 1) {
+
+ // According to the CardDAV spec there needs to be exactly 1 filter
+ // element. However, KDE 4.8.2 contains a bug that will encode 0 filter
+ // elements, so this is a workaround for that.
+ //
+ // See: https://bugs.kde.org/show_bug.cgi?id=300047
+ if ($filter->length === 0) {
+ $test = null;
+ $filter = null;
+ } elseif ($filter->length === 1) {
+ $filter = $filter->item(0);
+ $test = $this->xpath->evaluate('string(@test)', $filter);
+ } else {
throw new Sabre_DAV_Exception_BadRequest('Only one filter element is allowed');
}
- $filter = $filter->item(0);
- $test = $this->xpath->evaluate('string(@test)', $filter);
if (!$test) $test = self::TEST_ANYOF;
if ($test !== self::TEST_ANYOF && $test !== self::TEST_ALLOF) {
throw new Sabre_DAV_Exception_BadRequest('The test attribute must either hold "anyof" or "allof"');
diff --git a/3rdparty/Sabre/CardDAV/AddressBookRoot.php b/3rdparty/Sabre/CardDAV/AddressBookRoot.php
index 9d37b15f08e..9d37b15f08e 100644..100755
--- a/3rdparty/Sabre/CardDAV/AddressBookRoot.php
+++ b/3rdparty/Sabre/CardDAV/AddressBookRoot.php
diff --git a/3rdparty/Sabre/CardDAV/Backend/Abstract.php b/3rdparty/Sabre/CardDAV/Backend/Abstract.php
index e4806b7161f..e4806b7161f 100644..100755
--- a/3rdparty/Sabre/CardDAV/Backend/Abstract.php
+++ b/3rdparty/Sabre/CardDAV/Backend/Abstract.php
diff --git a/3rdparty/Sabre/CardDAV/Backend/PDO.php b/3rdparty/Sabre/CardDAV/Backend/PDO.php
index 413a77f3bcc..413a77f3bcc 100644..100755
--- a/3rdparty/Sabre/CardDAV/Backend/PDO.php
+++ b/3rdparty/Sabre/CardDAV/Backend/PDO.php
diff --git a/3rdparty/Sabre/CardDAV/Card.php b/3rdparty/Sabre/CardDAV/Card.php
index d7c66333837..d7c66333837 100644..100755
--- a/3rdparty/Sabre/CardDAV/Card.php
+++ b/3rdparty/Sabre/CardDAV/Card.php
diff --git a/3rdparty/Sabre/CardDAV/IAddressBook.php b/3rdparty/Sabre/CardDAV/IAddressBook.php
index 2bc275bcf74..2bc275bcf74 100644..100755
--- a/3rdparty/Sabre/CardDAV/IAddressBook.php
+++ b/3rdparty/Sabre/CardDAV/IAddressBook.php
diff --git a/3rdparty/Sabre/CardDAV/ICard.php b/3rdparty/Sabre/CardDAV/ICard.php
index a17299316c1..a17299316c1 100644..100755
--- a/3rdparty/Sabre/CardDAV/ICard.php
+++ b/3rdparty/Sabre/CardDAV/ICard.php
diff --git a/3rdparty/Sabre/CardDAV/IDirectory.php b/3rdparty/Sabre/CardDAV/IDirectory.php
index 22d4afeb24a..22d4afeb24a 100644..100755
--- a/3rdparty/Sabre/CardDAV/IDirectory.php
+++ b/3rdparty/Sabre/CardDAV/IDirectory.php
diff --git a/3rdparty/Sabre/CardDAV/Plugin.php b/3rdparty/Sabre/CardDAV/Plugin.php
index 095769feddc..96def6dd96b 100644..100755
--- a/3rdparty/Sabre/CardDAV/Plugin.php
+++ b/3rdparty/Sabre/CardDAV/Plugin.php
@@ -52,6 +52,8 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin {
$server->subscribeEvent('report', array($this,'report'));
$server->subscribeEvent('onHTMLActionsPanel', array($this,'htmlActionsPanel'));
$server->subscribeEvent('onBrowserPostAction', array($this,'browserPostAction'));
+ $server->subscribeEvent('beforeWriteContent', array($this, 'beforeWriteContent'));
+ $server->subscribeEvent('beforeCreateFile', array($this, 'beforeCreateFile'));
/* Namespaces */
$server->xmlNamespaces[self::NS_CARDDAV] = 'card';
@@ -152,7 +154,7 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin {
$val = stream_get_contents($val);
// Taking out \r to not screw up the xml output
- $returnedProperties[200][$addressDataProp] = str_replace("\r","", $val);
+ //$returnedProperties[200][$addressDataProp] = str_replace("\r","", $val);
// The stripping of \r breaks the Mail App in OSX Mountain Lion
// this is fixed in master, but not backported. /Tanghus
$returnedProperties[200][$addressDataProp] = $val;
@@ -287,6 +289,81 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin {
}
/**
+ * This method is triggered before a file gets updated with new content.
+ *
+ * This plugin uses this method to ensure that Card nodes receive valid
+ * vcard data.
+ *
+ * @param string $path
+ * @param Sabre_DAV_IFile $node
+ * @param resource $data
+ * @return void
+ */
+ public function beforeWriteContent($path, Sabre_DAV_IFile $node, &$data) {
+
+ if (!$node instanceof Sabre_CardDAV_ICard)
+ return;
+
+ $this->validateVCard($data);
+
+ }
+
+ /**
+ * This method is triggered before a new file is created.
+ *
+ * This plugin uses this method to ensure that Card nodes receive valid
+ * vcard data.
+ *
+ * @param string $path
+ * @param resource $data
+ * @param Sabre_DAV_ICollection $parentNode
+ * @return void
+ */
+ public function beforeCreateFile($path, &$data, Sabre_DAV_ICollection $parentNode) {
+
+ if (!$parentNode instanceof Sabre_CardDAV_IAddressBook)
+ return;
+
+ $this->validateVCard($data);
+
+ }
+
+ /**
+ * Checks if the submitted iCalendar data is in fact, valid.
+ *
+ * An exception is thrown if it's not.
+ *
+ * @param resource|string $data
+ * @return void
+ */
+ protected function validateVCard(&$data) {
+
+ // If it's a stream, we convert it to a string first.
+ if (is_resource($data)) {
+ $data = stream_get_contents($data);
+ }
+
+ // Converting the data to unicode, if needed.
+ $data = Sabre_DAV_StringUtil::ensureUTF8($data);
+
+ try {
+
+ $vobj = Sabre_VObject_Reader::read($data);
+
+ } catch (Sabre_VObject_ParseException $e) {
+
+ throw new Sabre_DAV_Exception_UnsupportedMediaType('This resource only supports valid vcard data. Parse error: ' . $e->getMessage());
+
+ }
+
+ if ($vobj->name !== 'VCARD') {
+ throw new Sabre_DAV_Exception_UnsupportedMediaType('This collection can only support vcard objects.');
+ }
+
+ }
+
+
+ /**
* This function handles the addressbook-query REPORT
*
* This report is used by the client to filter an addressbook based on a
@@ -365,6 +442,8 @@ class Sabre_CardDAV_Plugin extends Sabre_DAV_ServerPlugin {
$vcard = Sabre_VObject_Reader::read($vcardData);
+ if (!$filters) return true;
+
foreach($filters as $filter) {
$isDefined = isset($vcard->{$filter['name']});
diff --git a/3rdparty/Sabre/CardDAV/Property/SupportedAddressData.php b/3rdparty/Sabre/CardDAV/Property/SupportedAddressData.php
index 36d9306e7aa..36d9306e7aa 100644..100755
--- a/3rdparty/Sabre/CardDAV/Property/SupportedAddressData.php
+++ b/3rdparty/Sabre/CardDAV/Property/SupportedAddressData.php
diff --git a/3rdparty/Sabre/CardDAV/UserAddressBooks.php b/3rdparty/Sabre/CardDAV/UserAddressBooks.php
index 3f11fb11238..3f11fb11238 100644..100755
--- a/3rdparty/Sabre/CardDAV/UserAddressBooks.php
+++ b/3rdparty/Sabre/CardDAV/UserAddressBooks.php
diff --git a/3rdparty/Sabre/CardDAV/Version.php b/3rdparty/Sabre/CardDAV/Version.php
index 811b929e397..d0623f0d3e8 100644..100755
--- a/3rdparty/Sabre/CardDAV/Version.php
+++ b/3rdparty/Sabre/CardDAV/Version.php
@@ -16,7 +16,7 @@ class Sabre_CardDAV_Version {
/**
* Full version number
*/
- const VERSION = '1.6.1';
+ const VERSION = '1.6.3';
/**
* Stability : alpha, beta, stable
diff --git a/3rdparty/Sabre/CardDAV/includes.php b/3rdparty/Sabre/CardDAV/includes.php
index c3b8c04b077..c3b8c04b077 100644..100755
--- a/3rdparty/Sabre/CardDAV/includes.php
+++ b/3rdparty/Sabre/CardDAV/includes.php
diff --git a/3rdparty/Sabre/DAV/Auth/Backend/AbstractBasic.php b/3rdparty/Sabre/DAV/Auth/Backend/AbstractBasic.php
index 1e89b84f9a1..1e89b84f9a1 100644..100755
--- a/3rdparty/Sabre/DAV/Auth/Backend/AbstractBasic.php
+++ b/3rdparty/Sabre/DAV/Auth/Backend/AbstractBasic.php
diff --git a/3rdparty/Sabre/DAV/Auth/Backend/AbstractDigest.php b/3rdparty/Sabre/DAV/Auth/Backend/AbstractDigest.php
index 9833928b976..9833928b976 100644..100755
--- a/3rdparty/Sabre/DAV/Auth/Backend/AbstractDigest.php
+++ b/3rdparty/Sabre/DAV/Auth/Backend/AbstractDigest.php
diff --git a/3rdparty/Sabre/DAV/Auth/Backend/Apache.php b/3rdparty/Sabre/DAV/Auth/Backend/Apache.php
index d4294ea4d86..d4294ea4d86 100644..100755
--- a/3rdparty/Sabre/DAV/Auth/Backend/Apache.php
+++ b/3rdparty/Sabre/DAV/Auth/Backend/Apache.php
diff --git a/3rdparty/Sabre/DAV/Auth/Backend/File.php b/3rdparty/Sabre/DAV/Auth/Backend/File.php
index de308d64a67..de308d64a67 100644..100755
--- a/3rdparty/Sabre/DAV/Auth/Backend/File.php
+++ b/3rdparty/Sabre/DAV/Auth/Backend/File.php
diff --git a/3rdparty/Sabre/DAV/Auth/Backend/PDO.php b/3rdparty/Sabre/DAV/Auth/Backend/PDO.php
index eac18a23fbb..eac18a23fbb 100644..100755
--- a/3rdparty/Sabre/DAV/Auth/Backend/PDO.php
+++ b/3rdparty/Sabre/DAV/Auth/Backend/PDO.php
diff --git a/3rdparty/Sabre/DAV/Auth/IBackend.php b/3rdparty/Sabre/DAV/Auth/IBackend.php
index 5be5d1bc93d..5be5d1bc93d 100644..100755
--- a/3rdparty/Sabre/DAV/Auth/IBackend.php
+++ b/3rdparty/Sabre/DAV/Auth/IBackend.php
diff --git a/3rdparty/Sabre/DAV/Auth/Plugin.php b/3rdparty/Sabre/DAV/Auth/Plugin.php
index 55a4e391674..55a4e391674 100644..100755
--- a/3rdparty/Sabre/DAV/Auth/Plugin.php
+++ b/3rdparty/Sabre/DAV/Auth/Plugin.php
diff --git a/3rdparty/Sabre/DAV/Browser/GuessContentType.php b/3rdparty/Sabre/DAV/Browser/GuessContentType.php
index b6c00d461cb..b6c00d461cb 100644..100755
--- a/3rdparty/Sabre/DAV/Browser/GuessContentType.php
+++ b/3rdparty/Sabre/DAV/Browser/GuessContentType.php
diff --git a/3rdparty/Sabre/DAV/Browser/MapGetToPropFind.php b/3rdparty/Sabre/DAV/Browser/MapGetToPropFind.php
index 15884887641..15884887641 100644..100755
--- a/3rdparty/Sabre/DAV/Browser/MapGetToPropFind.php
+++ b/3rdparty/Sabre/DAV/Browser/MapGetToPropFind.php
diff --git a/3rdparty/Sabre/DAV/Browser/Plugin.php b/3rdparty/Sabre/DAV/Browser/Plugin.php
index 09bbdd2ae02..09bbdd2ae02 100644..100755
--- a/3rdparty/Sabre/DAV/Browser/Plugin.php
+++ b/3rdparty/Sabre/DAV/Browser/Plugin.php
diff --git a/3rdparty/Sabre/DAV/Browser/assets/favicon.ico b/3rdparty/Sabre/DAV/Browser/assets/favicon.ico
index 2b2c10a22cc..2b2c10a22cc 100644..100755
--- a/3rdparty/Sabre/DAV/Browser/assets/favicon.ico
+++ b/3rdparty/Sabre/DAV/Browser/assets/favicon.ico
Binary files differ
diff --git a/3rdparty/Sabre/DAV/Browser/assets/icons/addressbook.png b/3rdparty/Sabre/DAV/Browser/assets/icons/addressbook.png
index c9acc84172d..c9acc84172d 100644..100755
--- a/3rdparty/Sabre/DAV/Browser/assets/icons/addressbook.png
+++ b/3rdparty/Sabre/DAV/Browser/assets/icons/addressbook.png
Binary files differ
diff --git a/3rdparty/Sabre/DAV/Browser/assets/icons/calendar.png b/3rdparty/Sabre/DAV/Browser/assets/icons/calendar.png
index 3ecd6a800a0..3ecd6a800a0 100644..100755
--- a/3rdparty/Sabre/DAV/Browser/assets/icons/calendar.png
+++ b/3rdparty/Sabre/DAV/Browser/assets/icons/calendar.png
Binary files differ
diff --git a/3rdparty/Sabre/DAV/Browser/assets/icons/card.png b/3rdparty/Sabre/DAV/Browser/assets/icons/card.png
index 2ce954866d8..2ce954866d8 100644..100755
--- a/3rdparty/Sabre/DAV/Browser/assets/icons/card.png
+++ b/3rdparty/Sabre/DAV/Browser/assets/icons/card.png
Binary files differ
diff --git a/3rdparty/Sabre/DAV/Browser/assets/icons/collection.png b/3rdparty/Sabre/DAV/Browser/assets/icons/collection.png
index 156fa64fd50..156fa64fd50 100644..100755
--- a/3rdparty/Sabre/DAV/Browser/assets/icons/collection.png
+++ b/3rdparty/Sabre/DAV/Browser/assets/icons/collection.png
Binary files differ
diff --git a/3rdparty/Sabre/DAV/Browser/assets/icons/file.png b/3rdparty/Sabre/DAV/Browser/assets/icons/file.png
index 3b98551cec3..3b98551cec3 100644..100755
--- a/3rdparty/Sabre/DAV/Browser/assets/icons/file.png
+++ b/3rdparty/Sabre/DAV/Browser/assets/icons/file.png
Binary files differ
diff --git a/3rdparty/Sabre/DAV/Browser/assets/icons/parent.png b/3rdparty/Sabre/DAV/Browser/assets/icons/parent.png
index 156fa64fd50..156fa64fd50 100644..100755
--- a/3rdparty/Sabre/DAV/Browser/assets/icons/parent.png
+++ b/3rdparty/Sabre/DAV/Browser/assets/icons/parent.png
Binary files differ
diff --git a/3rdparty/Sabre/DAV/Browser/assets/icons/principal.png b/3rdparty/Sabre/DAV/Browser/assets/icons/principal.png
index f8988f828e6..f8988f828e6 100644..100755
--- a/3rdparty/Sabre/DAV/Browser/assets/icons/principal.png
+++ b/3rdparty/Sabre/DAV/Browser/assets/icons/principal.png
Binary files differ
diff --git a/3rdparty/Sabre/DAV/Client.php b/3rdparty/Sabre/DAV/Client.php
index a8320dd9782..9a428765e90 100644..100755
--- a/3rdparty/Sabre/DAV/Client.php
+++ b/3rdparty/Sabre/DAV/Client.php
@@ -11,7 +11,7 @@
* @package Sabre
* @subpackage DAVClient
* @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
- * @author Evert Pot (http://www.rooftopsolutions.nl/)
+ * @author Evert Pot (http://www.rooftopsolutions.nl/)
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
*/
class Sabre_DAV_Client {
@@ -24,6 +24,28 @@ class Sabre_DAV_Client {
protected $proxy;
/**
+ * Basic authentication
+ */
+ const AUTH_BASIC = 1;
+
+ /**
+ * Digest authentication
+ */
+ const AUTH_DIGEST = 2;
+
+ /**
+ * The authentication type we're using.
+ *
+ * This is a bitmask of AUTH_BASIC and AUTH_DIGEST.
+ *
+ * If DIGEST is used, the client makes 1 extra request per request, to get
+ * the authentication tokens.
+ *
+ * @var int
+ */
+ protected $authType;
+
+ /**
* Constructor
*
* Settings are provided through the 'settings' argument. The following
@@ -46,7 +68,7 @@ class Sabre_DAV_Client {
'baseUri',
'userName',
'password',
- 'proxy'
+ 'proxy',
);
foreach($validSettings as $validSetting) {
@@ -55,6 +77,12 @@ class Sabre_DAV_Client {
}
}
+ if (isset($settings['authType'])) {
+ $this->authType = $settings['authType'];
+ } else {
+ $this->authType = self::AUTH_BASIC | self::AUTH_DIGEST;
+ }
+
$this->propertyMap['{DAV:}resourcetype'] = 'Sabre_DAV_Property_ResourceType';
}
@@ -252,9 +280,6 @@ class Sabre_DAV_Client {
);
switch ($method) {
- case 'PUT':
- $curlSettings[CURLOPT_PUT] = true;
- break;
case 'HEAD' :
// do not read body with HEAD requests (this is neccessary because cURL does not ignore the body with HEAD
@@ -285,8 +310,15 @@ class Sabre_DAV_Client {
$curlSettings[CURLOPT_PROXY] = $this->proxy;
}
- if ($this->userName) {
- $curlSettings[CURLOPT_HTTPAUTH] = CURLAUTH_BASIC | CURLAUTH_DIGEST;
+ if ($this->userName && $this->authType) {
+ $curlType = 0;
+ if ($this->authType & self::AUTH_BASIC) {
+ $curlType |= CURLAUTH_BASIC;
+ }
+ if ($this->authType & self::AUTH_DIGEST) {
+ $curlType |= CURLAUTH_DIGEST;
+ }
+ $curlSettings[CURLOPT_HTTPAUTH] = $curlType;
$curlSettings[CURLOPT_USERPWD] = $this->userName . ':' . $this->password;
}
diff --git a/3rdparty/Sabre/DAV/Collection.php b/3rdparty/Sabre/DAV/Collection.php
index 776c22531b2..776c22531b2 100644..100755
--- a/3rdparty/Sabre/DAV/Collection.php
+++ b/3rdparty/Sabre/DAV/Collection.php
diff --git a/3rdparty/Sabre/DAV/Directory.php b/3rdparty/Sabre/DAV/Directory.php
index 6db8febc02e..6db8febc02e 100644..100755
--- a/3rdparty/Sabre/DAV/Directory.php
+++ b/3rdparty/Sabre/DAV/Directory.php
diff --git a/3rdparty/Sabre/DAV/Exception.php b/3rdparty/Sabre/DAV/Exception.php
index a2cd6cf5820..a2cd6cf5820 100644..100755
--- a/3rdparty/Sabre/DAV/Exception.php
+++ b/3rdparty/Sabre/DAV/Exception.php
diff --git a/3rdparty/Sabre/DAV/Exception/BadRequest.php b/3rdparty/Sabre/DAV/Exception/BadRequest.php
index b198648a754..b198648a754 100644..100755
--- a/3rdparty/Sabre/DAV/Exception/BadRequest.php
+++ b/3rdparty/Sabre/DAV/Exception/BadRequest.php
diff --git a/3rdparty/Sabre/DAV/Exception/Conflict.php b/3rdparty/Sabre/DAV/Exception/Conflict.php
index 6b0bd1fad73..6b0bd1fad73 100644..100755
--- a/3rdparty/Sabre/DAV/Exception/Conflict.php
+++ b/3rdparty/Sabre/DAV/Exception/Conflict.php
diff --git a/3rdparty/Sabre/DAV/Exception/ConflictingLock.php b/3rdparty/Sabre/DAV/Exception/ConflictingLock.php
index 6121868e69e..6121868e69e 100644..100755
--- a/3rdparty/Sabre/DAV/Exception/ConflictingLock.php
+++ b/3rdparty/Sabre/DAV/Exception/ConflictingLock.php
diff --git a/3rdparty/Sabre/DAV/Exception/FileNotFound.php b/3rdparty/Sabre/DAV/Exception/FileNotFound.php
index d76e400c93b..d76e400c93b 100644..100755
--- a/3rdparty/Sabre/DAV/Exception/FileNotFound.php
+++ b/3rdparty/Sabre/DAV/Exception/FileNotFound.php
diff --git a/3rdparty/Sabre/DAV/Exception/Forbidden.php b/3rdparty/Sabre/DAV/Exception/Forbidden.php
index 20b1056e31b..20b1056e31b 100644..100755
--- a/3rdparty/Sabre/DAV/Exception/Forbidden.php
+++ b/3rdparty/Sabre/DAV/Exception/Forbidden.php
diff --git a/3rdparty/Sabre/DAV/Exception/InsufficientStorage.php b/3rdparty/Sabre/DAV/Exception/InsufficientStorage.php
index 1a15089b0a3..1a15089b0a3 100644..100755
--- a/3rdparty/Sabre/DAV/Exception/InsufficientStorage.php
+++ b/3rdparty/Sabre/DAV/Exception/InsufficientStorage.php
diff --git a/3rdparty/Sabre/DAV/Exception/InvalidResourceType.php b/3rdparty/Sabre/DAV/Exception/InvalidResourceType.php
index 2230f1d0811..2230f1d0811 100644..100755
--- a/3rdparty/Sabre/DAV/Exception/InvalidResourceType.php
+++ b/3rdparty/Sabre/DAV/Exception/InvalidResourceType.php
diff --git a/3rdparty/Sabre/DAV/Exception/LockTokenMatchesRequestUri.php b/3rdparty/Sabre/DAV/Exception/LockTokenMatchesRequestUri.php
index 80ab7aff65a..80ab7aff65a 100644..100755
--- a/3rdparty/Sabre/DAV/Exception/LockTokenMatchesRequestUri.php
+++ b/3rdparty/Sabre/DAV/Exception/LockTokenMatchesRequestUri.php
diff --git a/3rdparty/Sabre/DAV/Exception/Locked.php b/3rdparty/Sabre/DAV/Exception/Locked.php
index 976365ac1f8..976365ac1f8 100644..100755
--- a/3rdparty/Sabre/DAV/Exception/Locked.php
+++ b/3rdparty/Sabre/DAV/Exception/Locked.php
diff --git a/3rdparty/Sabre/DAV/Exception/MethodNotAllowed.php b/3rdparty/Sabre/DAV/Exception/MethodNotAllowed.php
index 31875751505..31875751505 100644..100755
--- a/3rdparty/Sabre/DAV/Exception/MethodNotAllowed.php
+++ b/3rdparty/Sabre/DAV/Exception/MethodNotAllowed.php
diff --git a/3rdparty/Sabre/DAV/Exception/NotAuthenticated.php b/3rdparty/Sabre/DAV/Exception/NotAuthenticated.php
index 87ca624429f..87ca624429f 100644..100755
--- a/3rdparty/Sabre/DAV/Exception/NotAuthenticated.php
+++ b/3rdparty/Sabre/DAV/Exception/NotAuthenticated.php
diff --git a/3rdparty/Sabre/DAV/Exception/NotFound.php b/3rdparty/Sabre/DAV/Exception/NotFound.php
index 2b9da560d23..2b9da560d23 100644..100755
--- a/3rdparty/Sabre/DAV/Exception/NotFound.php
+++ b/3rdparty/Sabre/DAV/Exception/NotFound.php
diff --git a/3rdparty/Sabre/DAV/Exception/NotImplemented.php b/3rdparty/Sabre/DAV/Exception/NotImplemented.php
index d017a19f559..d017a19f559 100644..100755
--- a/3rdparty/Sabre/DAV/Exception/NotImplemented.php
+++ b/3rdparty/Sabre/DAV/Exception/NotImplemented.php
diff --git a/3rdparty/Sabre/DAV/Exception/PaymentRequired.php b/3rdparty/Sabre/DAV/Exception/PaymentRequired.php
index 4982f45a4b5..4982f45a4b5 100644..100755
--- a/3rdparty/Sabre/DAV/Exception/PaymentRequired.php
+++ b/3rdparty/Sabre/DAV/Exception/PaymentRequired.php
diff --git a/3rdparty/Sabre/DAV/Exception/PreconditionFailed.php b/3rdparty/Sabre/DAV/Exception/PreconditionFailed.php
index 213e9c52317..213e9c52317 100644..100755
--- a/3rdparty/Sabre/DAV/Exception/PreconditionFailed.php
+++ b/3rdparty/Sabre/DAV/Exception/PreconditionFailed.php
diff --git a/3rdparty/Sabre/DAV/Exception/ReportNotImplemented.php b/3rdparty/Sabre/DAV/Exception/ReportNotImplemented.php
index e86800f3038..e86800f3038 100644..100755
--- a/3rdparty/Sabre/DAV/Exception/ReportNotImplemented.php
+++ b/3rdparty/Sabre/DAV/Exception/ReportNotImplemented.php
diff --git a/3rdparty/Sabre/DAV/Exception/RequestedRangeNotSatisfiable.php b/3rdparty/Sabre/DAV/Exception/RequestedRangeNotSatisfiable.php
index 29ee3654a7e..29ee3654a7e 100644..100755
--- a/3rdparty/Sabre/DAV/Exception/RequestedRangeNotSatisfiable.php
+++ b/3rdparty/Sabre/DAV/Exception/RequestedRangeNotSatisfiable.php
diff --git a/3rdparty/Sabre/DAV/Exception/UnsupportedMediaType.php b/3rdparty/Sabre/DAV/Exception/UnsupportedMediaType.php
index 9a4693b21a8..9a4693b21a8 100644..100755
--- a/3rdparty/Sabre/DAV/Exception/UnsupportedMediaType.php
+++ b/3rdparty/Sabre/DAV/Exception/UnsupportedMediaType.php
diff --git a/3rdparty/Sabre/DAV/FS/Directory.php b/3rdparty/Sabre/DAV/FS/Directory.php
index 3af2d755583..3af2d755583 100644..100755
--- a/3rdparty/Sabre/DAV/FS/Directory.php
+++ b/3rdparty/Sabre/DAV/FS/Directory.php
diff --git a/3rdparty/Sabre/DAV/FS/File.php b/3rdparty/Sabre/DAV/FS/File.php
index 6a8039fe303..6a8039fe303 100644..100755
--- a/3rdparty/Sabre/DAV/FS/File.php
+++ b/3rdparty/Sabre/DAV/FS/File.php
diff --git a/3rdparty/Sabre/DAV/FS/Node.php b/3rdparty/Sabre/DAV/FS/Node.php
index 1283e9d0fdc..1283e9d0fdc 100644..100755
--- a/3rdparty/Sabre/DAV/FS/Node.php
+++ b/3rdparty/Sabre/DAV/FS/Node.php
diff --git a/3rdparty/Sabre/DAV/FSExt/Directory.php b/3rdparty/Sabre/DAV/FSExt/Directory.php
index 540057183b3..540057183b3 100644..100755
--- a/3rdparty/Sabre/DAV/FSExt/Directory.php
+++ b/3rdparty/Sabre/DAV/FSExt/Directory.php
diff --git a/3rdparty/Sabre/DAV/FSExt/File.php b/3rdparty/Sabre/DAV/FSExt/File.php
index b93ce5aee21..b93ce5aee21 100644..100755
--- a/3rdparty/Sabre/DAV/FSExt/File.php
+++ b/3rdparty/Sabre/DAV/FSExt/File.php
diff --git a/3rdparty/Sabre/DAV/FSExt/Node.php b/3rdparty/Sabre/DAV/FSExt/Node.php
index 68ca06beb7e..68ca06beb7e 100644..100755
--- a/3rdparty/Sabre/DAV/FSExt/Node.php
+++ b/3rdparty/Sabre/DAV/FSExt/Node.php
diff --git a/3rdparty/Sabre/DAV/File.php b/3rdparty/Sabre/DAV/File.php
index 3126bd8d364..3126bd8d364 100644..100755
--- a/3rdparty/Sabre/DAV/File.php
+++ b/3rdparty/Sabre/DAV/File.php
diff --git a/3rdparty/Sabre/DAV/ICollection.php b/3rdparty/Sabre/DAV/ICollection.php
index 4626038a66e..4626038a66e 100644..100755
--- a/3rdparty/Sabre/DAV/ICollection.php
+++ b/3rdparty/Sabre/DAV/ICollection.php
diff --git a/3rdparty/Sabre/DAV/IExtendedCollection.php b/3rdparty/Sabre/DAV/IExtendedCollection.php
index 6ec345f9a62..6ec345f9a62 100644..100755
--- a/3rdparty/Sabre/DAV/IExtendedCollection.php
+++ b/3rdparty/Sabre/DAV/IExtendedCollection.php
diff --git a/3rdparty/Sabre/DAV/IFile.php b/3rdparty/Sabre/DAV/IFile.php
index 478f822ae71..478f822ae71 100644..100755
--- a/3rdparty/Sabre/DAV/IFile.php
+++ b/3rdparty/Sabre/DAV/IFile.php
diff --git a/3rdparty/Sabre/DAV/INode.php b/3rdparty/Sabre/DAV/INode.php
index c57d3923105..c57d3923105 100644..100755
--- a/3rdparty/Sabre/DAV/INode.php
+++ b/3rdparty/Sabre/DAV/INode.php
diff --git a/3rdparty/Sabre/DAV/IProperties.php b/3rdparty/Sabre/DAV/IProperties.php
index 38eaab16dad..38eaab16dad 100644..100755
--- a/3rdparty/Sabre/DAV/IProperties.php
+++ b/3rdparty/Sabre/DAV/IProperties.php
diff --git a/3rdparty/Sabre/DAV/IQuota.php b/3rdparty/Sabre/DAV/IQuota.php
index 3fe4c4eced4..3fe4c4eced4 100644..100755
--- a/3rdparty/Sabre/DAV/IQuota.php
+++ b/3rdparty/Sabre/DAV/IQuota.php
diff --git a/3rdparty/Sabre/DAV/Locks/Backend/Abstract.php b/3rdparty/Sabre/DAV/Locks/Backend/Abstract.php
index 127e643a2b9..127e643a2b9 100644..100755
--- a/3rdparty/Sabre/DAV/Locks/Backend/Abstract.php
+++ b/3rdparty/Sabre/DAV/Locks/Backend/Abstract.php
diff --git a/3rdparty/Sabre/DAV/Locks/Backend/FS.php b/3rdparty/Sabre/DAV/Locks/Backend/FS.php
index 02cab87fc82..02cab87fc82 100644..100755
--- a/3rdparty/Sabre/DAV/Locks/Backend/FS.php
+++ b/3rdparty/Sabre/DAV/Locks/Backend/FS.php
diff --git a/3rdparty/Sabre/DAV/Locks/Backend/File.php b/3rdparty/Sabre/DAV/Locks/Backend/File.php
index c33f963514b..c33f963514b 100644..100755
--- a/3rdparty/Sabre/DAV/Locks/Backend/File.php
+++ b/3rdparty/Sabre/DAV/Locks/Backend/File.php
diff --git a/3rdparty/Sabre/DAV/Locks/Backend/PDO.php b/3rdparty/Sabre/DAV/Locks/Backend/PDO.php
index acce80638ec..acce80638ec 100644..100755
--- a/3rdparty/Sabre/DAV/Locks/Backend/PDO.php
+++ b/3rdparty/Sabre/DAV/Locks/Backend/PDO.php
diff --git a/3rdparty/Sabre/DAV/Locks/LockInfo.php b/3rdparty/Sabre/DAV/Locks/LockInfo.php
index 9df014a4281..9df014a4281 100644..100755
--- a/3rdparty/Sabre/DAV/Locks/LockInfo.php
+++ b/3rdparty/Sabre/DAV/Locks/LockInfo.php
diff --git a/3rdparty/Sabre/DAV/Locks/Plugin.php b/3rdparty/Sabre/DAV/Locks/Plugin.php
index fd956950b8a..035b3a63863 100644..100755
--- a/3rdparty/Sabre/DAV/Locks/Plugin.php
+++ b/3rdparty/Sabre/DAV/Locks/Plugin.php
@@ -292,7 +292,10 @@ class Sabre_DAV_Locks_Plugin extends Sabre_DAV_ServerPlugin {
$this->server->tree->getNodeForPath($uri);
// We need to call the beforeWriteContent event for RFC3744
- $this->server->broadcastEvent('beforeWriteContent',array($uri));
+ // Edit: looks like this is not used, and causing problems now.
+ //
+ // See Issue 222
+ // $this->server->broadcastEvent('beforeWriteContent',array($uri));
} catch (Sabre_DAV_Exception_NotFound $e) {
diff --git a/3rdparty/Sabre/DAV/Mount/Plugin.php b/3rdparty/Sabre/DAV/Mount/Plugin.php
index b37a90ae993..b37a90ae993 100644..100755
--- a/3rdparty/Sabre/DAV/Mount/Plugin.php
+++ b/3rdparty/Sabre/DAV/Mount/Plugin.php
diff --git a/3rdparty/Sabre/DAV/Node.php b/3rdparty/Sabre/DAV/Node.php
index 070b7176afd..070b7176afd 100644..100755
--- a/3rdparty/Sabre/DAV/Node.php
+++ b/3rdparty/Sabre/DAV/Node.php
diff --git a/3rdparty/Sabre/DAV/ObjectTree.php b/3rdparty/Sabre/DAV/ObjectTree.php
index bce51463900..bce51463900 100644..100755
--- a/3rdparty/Sabre/DAV/ObjectTree.php
+++ b/3rdparty/Sabre/DAV/ObjectTree.php
diff --git a/3rdparty/Sabre/DAV/Property.php b/3rdparty/Sabre/DAV/Property.php
index 1cfada3236c..1cfada3236c 100644..100755
--- a/3rdparty/Sabre/DAV/Property.php
+++ b/3rdparty/Sabre/DAV/Property.php
diff --git a/3rdparty/Sabre/DAV/Property/GetLastModified.php b/3rdparty/Sabre/DAV/Property/GetLastModified.php
index bd63f573140..bd63f573140 100644..100755
--- a/3rdparty/Sabre/DAV/Property/GetLastModified.php
+++ b/3rdparty/Sabre/DAV/Property/GetLastModified.php
diff --git a/3rdparty/Sabre/DAV/Property/Href.php b/3rdparty/Sabre/DAV/Property/Href.php
index dac564f24d7..dac564f24d7 100644..100755
--- a/3rdparty/Sabre/DAV/Property/Href.php
+++ b/3rdparty/Sabre/DAV/Property/Href.php
diff --git a/3rdparty/Sabre/DAV/Property/HrefList.php b/3rdparty/Sabre/DAV/Property/HrefList.php
index 7a52272e885..7a52272e885 100644..100755
--- a/3rdparty/Sabre/DAV/Property/HrefList.php
+++ b/3rdparty/Sabre/DAV/Property/HrefList.php
diff --git a/3rdparty/Sabre/DAV/Property/IHref.php b/3rdparty/Sabre/DAV/Property/IHref.php
index 5c0409064cb..5c0409064cb 100644..100755
--- a/3rdparty/Sabre/DAV/Property/IHref.php
+++ b/3rdparty/Sabre/DAV/Property/IHref.php
diff --git a/3rdparty/Sabre/DAV/Property/LockDiscovery.php b/3rdparty/Sabre/DAV/Property/LockDiscovery.php
index 2ded5649a44..2ded5649a44 100644..100755
--- a/3rdparty/Sabre/DAV/Property/LockDiscovery.php
+++ b/3rdparty/Sabre/DAV/Property/LockDiscovery.php
diff --git a/3rdparty/Sabre/DAV/Property/ResourceType.php b/3rdparty/Sabre/DAV/Property/ResourceType.php
index f6269611e54..f6269611e54 100644..100755
--- a/3rdparty/Sabre/DAV/Property/ResourceType.php
+++ b/3rdparty/Sabre/DAV/Property/ResourceType.php
diff --git a/3rdparty/Sabre/DAV/Property/Response.php b/3rdparty/Sabre/DAV/Property/Response.php
index 88afbcfb26d..88afbcfb26d 100644..100755
--- a/3rdparty/Sabre/DAV/Property/Response.php
+++ b/3rdparty/Sabre/DAV/Property/Response.php
diff --git a/3rdparty/Sabre/DAV/Property/ResponseList.php b/3rdparty/Sabre/DAV/Property/ResponseList.php
index cae923afbf9..cae923afbf9 100644..100755
--- a/3rdparty/Sabre/DAV/Property/ResponseList.php
+++ b/3rdparty/Sabre/DAV/Property/ResponseList.php
diff --git a/3rdparty/Sabre/DAV/Property/SupportedLock.php b/3rdparty/Sabre/DAV/Property/SupportedLock.php
index 4e3aaf23a1a..4e3aaf23a1a 100644..100755
--- a/3rdparty/Sabre/DAV/Property/SupportedLock.php
+++ b/3rdparty/Sabre/DAV/Property/SupportedLock.php
diff --git a/3rdparty/Sabre/DAV/Property/SupportedReportSet.php b/3rdparty/Sabre/DAV/Property/SupportedReportSet.php
index e62699f3b5a..e62699f3b5a 100644..100755
--- a/3rdparty/Sabre/DAV/Property/SupportedReportSet.php
+++ b/3rdparty/Sabre/DAV/Property/SupportedReportSet.php
diff --git a/3rdparty/Sabre/DAV/Server.php b/3rdparty/Sabre/DAV/Server.php
index 50b190e8fab..0dfac8b0c71 100644..100755
--- a/3rdparty/Sabre/DAV/Server.php
+++ b/3rdparty/Sabre/DAV/Server.php
@@ -215,7 +215,7 @@ class Sabre_DAV_Server {
$DOM->appendChild($error);
$error->appendChild($DOM->createElement('s:exception',get_class($e)));
- $error->appendChild($DOM->createElement('s:message',htmlentities($e->getMessage())));
+ $error->appendChild($DOM->createElement('s:message',$e->getMessage()));
if ($this->debugExceptions) {
$error->appendChild($DOM->createElement('s:file',$e->getFile()));
$error->appendChild($DOM->createElement('s:line',$e->getLine()));
@@ -1784,7 +1784,14 @@ class Sabre_DAV_Server {
$etag = $node->getETag();
if ($etag===$ifMatchItem) {
$haveMatch = true;
+ } else {
+ // Evolution has a bug where it sometimes prepends the "
+ // with a \. This is our workaround.
+ if (str_replace('\\"','"', $ifMatchItem) === $etag) {
+ $haveMatch = true;
+ }
}
+
}
if (!$haveMatch) {
throw new Sabre_DAV_Exception_PreconditionFailed('An If-Match header was specified, but none of the specified the ETags matched.','If-Match');
diff --git a/3rdparty/Sabre/DAV/ServerPlugin.php b/3rdparty/Sabre/DAV/ServerPlugin.php
index 131863d13fb..131863d13fb 100644..100755
--- a/3rdparty/Sabre/DAV/ServerPlugin.php
+++ b/3rdparty/Sabre/DAV/ServerPlugin.php
diff --git a/3rdparty/Sabre/DAV/SimpleCollection.php b/3rdparty/Sabre/DAV/SimpleCollection.php
index 4acf971caa5..4acf971caa5 100644..100755
--- a/3rdparty/Sabre/DAV/SimpleCollection.php
+++ b/3rdparty/Sabre/DAV/SimpleCollection.php
diff --git a/3rdparty/Sabre/DAV/SimpleDirectory.php b/3rdparty/Sabre/DAV/SimpleDirectory.php
index 621222ebc53..621222ebc53 100644..100755
--- a/3rdparty/Sabre/DAV/SimpleDirectory.php
+++ b/3rdparty/Sabre/DAV/SimpleDirectory.php
diff --git a/3rdparty/Sabre/DAV/SimpleFile.php b/3rdparty/Sabre/DAV/SimpleFile.php
index 58330d6861d..58330d6861d 100644..100755
--- a/3rdparty/Sabre/DAV/SimpleFile.php
+++ b/3rdparty/Sabre/DAV/SimpleFile.php
diff --git a/3rdparty/Sabre/DAV/StringUtil.php b/3rdparty/Sabre/DAV/StringUtil.php
index b126a94c825..b126a94c825 100644..100755
--- a/3rdparty/Sabre/DAV/StringUtil.php
+++ b/3rdparty/Sabre/DAV/StringUtil.php
diff --git a/3rdparty/Sabre/DAV/TemporaryFileFilterPlugin.php b/3rdparty/Sabre/DAV/TemporaryFileFilterPlugin.php
index 36096e67775..36096e67775 100644..100755
--- a/3rdparty/Sabre/DAV/TemporaryFileFilterPlugin.php
+++ b/3rdparty/Sabre/DAV/TemporaryFileFilterPlugin.php
diff --git a/3rdparty/Sabre/DAV/Tree.php b/3rdparty/Sabre/DAV/Tree.php
index 50216394155..50216394155 100644..100755
--- a/3rdparty/Sabre/DAV/Tree.php
+++ b/3rdparty/Sabre/DAV/Tree.php
diff --git a/3rdparty/Sabre/DAV/Tree/Filesystem.php b/3rdparty/Sabre/DAV/Tree/Filesystem.php
index 85a9ee317be..40580ae366f 100644..100755
--- a/3rdparty/Sabre/DAV/Tree/Filesystem.php
+++ b/3rdparty/Sabre/DAV/Tree/Filesystem.php
@@ -42,9 +42,9 @@ class Sabre_DAV_Tree_Filesystem extends Sabre_DAV_Tree {
$realPath = $this->getRealPath($path);
if (!file_exists($realPath)) throw new Sabre_DAV_Exception_NotFound('File at location ' . $realPath . ' not found');
if (is_dir($realPath)) {
- return new Sabre_DAV_FS_Directory($path);
+ return new Sabre_DAV_FS_Directory($realPath);
} else {
- return new Sabre_DAV_FS_File($path);
+ return new Sabre_DAV_FS_File($realPath);
}
}
diff --git a/3rdparty/Sabre/DAV/URLUtil.php b/3rdparty/Sabre/DAV/URLUtil.php
index 794665a44f6..794665a44f6 100644..100755
--- a/3rdparty/Sabre/DAV/URLUtil.php
+++ b/3rdparty/Sabre/DAV/URLUtil.php
diff --git a/3rdparty/Sabre/DAV/UUIDUtil.php b/3rdparty/Sabre/DAV/UUIDUtil.php
index f0eebe598e5..f0eebe598e5 100644..100755
--- a/3rdparty/Sabre/DAV/UUIDUtil.php
+++ b/3rdparty/Sabre/DAV/UUIDUtil.php
diff --git a/3rdparty/Sabre/DAV/Version.php b/3rdparty/Sabre/DAV/Version.php
index 5e5d15e4039..274646240ab 100644..100755
--- a/3rdparty/Sabre/DAV/Version.php
+++ b/3rdparty/Sabre/DAV/Version.php
@@ -14,7 +14,7 @@ class Sabre_DAV_Version {
/**
* Full version number
*/
- const VERSION = '1.6.2';
+ const VERSION = '1.6.4';
/**
* Stability : alpha, beta, stable
diff --git a/3rdparty/Sabre/DAV/XMLUtil.php b/3rdparty/Sabre/DAV/XMLUtil.php
index 60eff3b159a..60eff3b159a 100644..100755
--- a/3rdparty/Sabre/DAV/XMLUtil.php
+++ b/3rdparty/Sabre/DAV/XMLUtil.php
diff --git a/3rdparty/Sabre/DAV/includes.php b/3rdparty/Sabre/DAV/includes.php
index 6a4890677ea..6a4890677ea 100644..100755
--- a/3rdparty/Sabre/DAV/includes.php
+++ b/3rdparty/Sabre/DAV/includes.php
diff --git a/3rdparty/Sabre/DAVACL/AbstractPrincipalCollection.php b/3rdparty/Sabre/DAVACL/AbstractPrincipalCollection.php
index e05b7749805..e05b7749805 100644..100755
--- a/3rdparty/Sabre/DAVACL/AbstractPrincipalCollection.php
+++ b/3rdparty/Sabre/DAVACL/AbstractPrincipalCollection.php
diff --git a/3rdparty/Sabre/DAVACL/Exception/AceConflict.php b/3rdparty/Sabre/DAVACL/Exception/AceConflict.php
index 4b9f93b0036..4b9f93b0036 100644..100755
--- a/3rdparty/Sabre/DAVACL/Exception/AceConflict.php
+++ b/3rdparty/Sabre/DAVACL/Exception/AceConflict.php
diff --git a/3rdparty/Sabre/DAVACL/Exception/NeedPrivileges.php b/3rdparty/Sabre/DAVACL/Exception/NeedPrivileges.php
index 9b055dd9709..9b055dd9709 100644..100755
--- a/3rdparty/Sabre/DAVACL/Exception/NeedPrivileges.php
+++ b/3rdparty/Sabre/DAVACL/Exception/NeedPrivileges.php
diff --git a/3rdparty/Sabre/DAVACL/Exception/NoAbstract.php b/3rdparty/Sabre/DAVACL/Exception/NoAbstract.php
index f44e3e32281..f44e3e32281 100644..100755
--- a/3rdparty/Sabre/DAVACL/Exception/NoAbstract.php
+++ b/3rdparty/Sabre/DAVACL/Exception/NoAbstract.php
diff --git a/3rdparty/Sabre/DAVACL/Exception/NotRecognizedPrincipal.php b/3rdparty/Sabre/DAVACL/Exception/NotRecognizedPrincipal.php
index 8d1e38ca1b4..8d1e38ca1b4 100644..100755
--- a/3rdparty/Sabre/DAVACL/Exception/NotRecognizedPrincipal.php
+++ b/3rdparty/Sabre/DAVACL/Exception/NotRecognizedPrincipal.php
diff --git a/3rdparty/Sabre/DAVACL/Exception/NotSupportedPrivilege.php b/3rdparty/Sabre/DAVACL/Exception/NotSupportedPrivilege.php
index 3b5d012d7fa..3b5d012d7fa 100644..100755
--- a/3rdparty/Sabre/DAVACL/Exception/NotSupportedPrivilege.php
+++ b/3rdparty/Sabre/DAVACL/Exception/NotSupportedPrivilege.php
diff --git a/3rdparty/Sabre/DAVACL/IACL.php b/3rdparty/Sabre/DAVACL/IACL.php
index 003e6993483..003e6993483 100644..100755
--- a/3rdparty/Sabre/DAVACL/IACL.php
+++ b/3rdparty/Sabre/DAVACL/IACL.php
diff --git a/3rdparty/Sabre/DAVACL/IPrincipal.php b/3rdparty/Sabre/DAVACL/IPrincipal.php
index fc7605bf625..fc7605bf625 100644..100755
--- a/3rdparty/Sabre/DAVACL/IPrincipal.php
+++ b/3rdparty/Sabre/DAVACL/IPrincipal.php
diff --git a/3rdparty/Sabre/DAVACL/IPrincipalBackend.php b/3rdparty/Sabre/DAVACL/IPrincipalBackend.php
index e798bf890c0..e798bf890c0 100644..100755
--- a/3rdparty/Sabre/DAVACL/IPrincipalBackend.php
+++ b/3rdparty/Sabre/DAVACL/IPrincipalBackend.php
diff --git a/3rdparty/Sabre/DAVACL/Plugin.php b/3rdparty/Sabre/DAVACL/Plugin.php
index 5c828c6d97b..5c828c6d97b 100644..100755
--- a/3rdparty/Sabre/DAVACL/Plugin.php
+++ b/3rdparty/Sabre/DAVACL/Plugin.php
diff --git a/3rdparty/Sabre/DAVACL/Principal.php b/3rdparty/Sabre/DAVACL/Principal.php
index 51c6658afd6..51c6658afd6 100644..100755
--- a/3rdparty/Sabre/DAVACL/Principal.php
+++ b/3rdparty/Sabre/DAVACL/Principal.php
diff --git a/3rdparty/Sabre/DAVACL/PrincipalBackend/PDO.php b/3rdparty/Sabre/DAVACL/PrincipalBackend/PDO.php
index a76b4a9d727..a76b4a9d727 100644..100755
--- a/3rdparty/Sabre/DAVACL/PrincipalBackend/PDO.php
+++ b/3rdparty/Sabre/DAVACL/PrincipalBackend/PDO.php
diff --git a/3rdparty/Sabre/DAVACL/PrincipalCollection.php b/3rdparty/Sabre/DAVACL/PrincipalCollection.php
index c3e4cb83f23..c3e4cb83f23 100644..100755
--- a/3rdparty/Sabre/DAVACL/PrincipalCollection.php
+++ b/3rdparty/Sabre/DAVACL/PrincipalCollection.php
diff --git a/3rdparty/Sabre/DAVACL/Property/Acl.php b/3rdparty/Sabre/DAVACL/Property/Acl.php
index 05e1a690b3c..05e1a690b3c 100644..100755
--- a/3rdparty/Sabre/DAVACL/Property/Acl.php
+++ b/3rdparty/Sabre/DAVACL/Property/Acl.php
diff --git a/3rdparty/Sabre/DAVACL/Property/AclRestrictions.php b/3rdparty/Sabre/DAVACL/Property/AclRestrictions.php
index a8b054956dd..a8b054956dd 100644..100755
--- a/3rdparty/Sabre/DAVACL/Property/AclRestrictions.php
+++ b/3rdparty/Sabre/DAVACL/Property/AclRestrictions.php
diff --git a/3rdparty/Sabre/DAVACL/Property/CurrentUserPrivilegeSet.php b/3rdparty/Sabre/DAVACL/Property/CurrentUserPrivilegeSet.php
index 94a29640615..94a29640615 100644..100755
--- a/3rdparty/Sabre/DAVACL/Property/CurrentUserPrivilegeSet.php
+++ b/3rdparty/Sabre/DAVACL/Property/CurrentUserPrivilegeSet.php
diff --git a/3rdparty/Sabre/DAVACL/Property/Principal.php b/3rdparty/Sabre/DAVACL/Property/Principal.php
index c36328a58e0..c36328a58e0 100644..100755
--- a/3rdparty/Sabre/DAVACL/Property/Principal.php
+++ b/3rdparty/Sabre/DAVACL/Property/Principal.php
diff --git a/3rdparty/Sabre/DAVACL/Property/SupportedPrivilegeSet.php b/3rdparty/Sabre/DAVACL/Property/SupportedPrivilegeSet.php
index 276d57ae093..276d57ae093 100644..100755
--- a/3rdparty/Sabre/DAVACL/Property/SupportedPrivilegeSet.php
+++ b/3rdparty/Sabre/DAVACL/Property/SupportedPrivilegeSet.php
diff --git a/3rdparty/Sabre/DAVACL/Version.php b/3rdparty/Sabre/DAVACL/Version.php
index 9950f748741..9950f748741 100644..100755
--- a/3rdparty/Sabre/DAVACL/Version.php
+++ b/3rdparty/Sabre/DAVACL/Version.php
diff --git a/3rdparty/Sabre/DAVACL/includes.php b/3rdparty/Sabre/DAVACL/includes.php
index 28fa3eed225..28fa3eed225 100644..100755
--- a/3rdparty/Sabre/DAVACL/includes.php
+++ b/3rdparty/Sabre/DAVACL/includes.php
diff --git a/3rdparty/Sabre/HTTP/AWSAuth.php b/3rdparty/Sabre/HTTP/AWSAuth.php
index fb8245c8cbf..fb8245c8cbf 100644..100755
--- a/3rdparty/Sabre/HTTP/AWSAuth.php
+++ b/3rdparty/Sabre/HTTP/AWSAuth.php
diff --git a/3rdparty/Sabre/HTTP/AbstractAuth.php b/3rdparty/Sabre/HTTP/AbstractAuth.php
index 3bccabcd1c1..3bccabcd1c1 100644..100755
--- a/3rdparty/Sabre/HTTP/AbstractAuth.php
+++ b/3rdparty/Sabre/HTTP/AbstractAuth.php
diff --git a/3rdparty/Sabre/HTTP/BasicAuth.php b/3rdparty/Sabre/HTTP/BasicAuth.php
index a747cc6a31b..f90ed24f5d8 100644..100755
--- a/3rdparty/Sabre/HTTP/BasicAuth.php
+++ b/3rdparty/Sabre/HTTP/BasicAuth.php
@@ -46,7 +46,7 @@ class Sabre_HTTP_BasicAuth extends Sabre_HTTP_AbstractAuth {
if (strpos(strtolower($auth),'basic')!==0) return false;
- return explode(':', base64_decode(substr($auth, 6)));
+ return explode(':', base64_decode(substr($auth, 6)),2);
}
diff --git a/3rdparty/Sabre/HTTP/DigestAuth.php b/3rdparty/Sabre/HTTP/DigestAuth.php
index ee7f05c08ed..ee7f05c08ed 100644..100755
--- a/3rdparty/Sabre/HTTP/DigestAuth.php
+++ b/3rdparty/Sabre/HTTP/DigestAuth.php
diff --git a/3rdparty/Sabre/HTTP/Request.php b/3rdparty/Sabre/HTTP/Request.php
index 4746ef77704..4746ef77704 100644..100755
--- a/3rdparty/Sabre/HTTP/Request.php
+++ b/3rdparty/Sabre/HTTP/Request.php
diff --git a/3rdparty/Sabre/HTTP/Response.php b/3rdparty/Sabre/HTTP/Response.php
index ffe9bda2082..ffe9bda2082 100644..100755
--- a/3rdparty/Sabre/HTTP/Response.php
+++ b/3rdparty/Sabre/HTTP/Response.php
diff --git a/3rdparty/Sabre/HTTP/Util.php b/3rdparty/Sabre/HTTP/Util.php
index 67bdd489e1e..67bdd489e1e 100644..100755
--- a/3rdparty/Sabre/HTTP/Util.php
+++ b/3rdparty/Sabre/HTTP/Util.php
diff --git a/3rdparty/Sabre/HTTP/Version.php b/3rdparty/Sabre/HTTP/Version.php
index 23dc7f8a7a1..e6b4f7e5358 100644..100755
--- a/3rdparty/Sabre/HTTP/Version.php
+++ b/3rdparty/Sabre/HTTP/Version.php
@@ -14,7 +14,7 @@ class Sabre_HTTP_Version {
/**
* Full version number
*/
- const VERSION = '1.6.2';
+ const VERSION = '1.6.4';
/**
* Stability : alpha, beta, stable
diff --git a/3rdparty/Sabre/HTTP/includes.php b/3rdparty/Sabre/HTTP/includes.php
index 9d34bf3a8be..9d34bf3a8be 100644..100755
--- a/3rdparty/Sabre/HTTP/includes.php
+++ b/3rdparty/Sabre/HTTP/includes.php
diff --git a/3rdparty/Sabre/VObject/Component.php b/3rdparty/Sabre/VObject/Component.php
index b78a26133fa..b78a26133fa 100644..100755
--- a/3rdparty/Sabre/VObject/Component.php
+++ b/3rdparty/Sabre/VObject/Component.php
diff --git a/3rdparty/Sabre/VObject/Component/VAlarm.php b/3rdparty/Sabre/VObject/Component/VAlarm.php
index ebb4a9b18f6..ebb4a9b18f6 100644..100755
--- a/3rdparty/Sabre/VObject/Component/VAlarm.php
+++ b/3rdparty/Sabre/VObject/Component/VAlarm.php
diff --git a/3rdparty/Sabre/VObject/Component/VCalendar.php b/3rdparty/Sabre/VObject/Component/VCalendar.php
index f3be29afdbb..f3be29afdbb 100644..100755
--- a/3rdparty/Sabre/VObject/Component/VCalendar.php
+++ b/3rdparty/Sabre/VObject/Component/VCalendar.php
diff --git a/3rdparty/Sabre/VObject/Component/VEvent.php b/3rdparty/Sabre/VObject/Component/VEvent.php
index 4cc1e36d7d6..d6b910874d0 100644..100755
--- a/3rdparty/Sabre/VObject/Component/VEvent.php
+++ b/3rdparty/Sabre/VObject/Component/VEvent.php
@@ -42,14 +42,15 @@ class Sabre_VObject_Component_VEvent extends Sabre_VObject_Component {
$effectiveStart = $this->DTSTART->getDateTime();
if (isset($this->DTEND)) {
+
+ // The DTEND property is considered non inclusive. So for a 3 day
+ // event in july, dtstart and dtend would have to be July 1st and
+ // July 4th respectively.
+ //
+ // See:
+ // http://tools.ietf.org/html/rfc5545#page-54
$effectiveEnd = $this->DTEND->getDateTime();
- // If this was an all-day event, we should just increase the
- // end-date by 1. Otherwise the event will last until the second
- // the date changed, by increasing this by 1 day the event lasts
- // all of the last day as well.
- if ($this->DTSTART->getDateType() == Sabre_VObject_Element_DateTime::DATE) {
- $effectiveEnd->modify('+1 day');
- }
+
} elseif (isset($this->DURATION)) {
$effectiveEnd = clone $effectiveStart;
$effectiveEnd->add( Sabre_VObject_DateTimeParser::parseDuration($this->DURATION) );
diff --git a/3rdparty/Sabre/VObject/Component/VJournal.php b/3rdparty/Sabre/VObject/Component/VJournal.php
index 22b3ec921e5..22b3ec921e5 100644..100755
--- a/3rdparty/Sabre/VObject/Component/VJournal.php
+++ b/3rdparty/Sabre/VObject/Component/VJournal.php
diff --git a/3rdparty/Sabre/VObject/Component/VTodo.php b/3rdparty/Sabre/VObject/Component/VTodo.php
index 79d06298d7f..79d06298d7f 100644..100755
--- a/3rdparty/Sabre/VObject/Component/VTodo.php
+++ b/3rdparty/Sabre/VObject/Component/VTodo.php
diff --git a/3rdparty/Sabre/VObject/DateTimeParser.php b/3rdparty/Sabre/VObject/DateTimeParser.php
index 1e2d54ef3a9..23a4bb69916 100644..100755
--- a/3rdparty/Sabre/VObject/DateTimeParser.php
+++ b/3rdparty/Sabre/VObject/DateTimeParser.php
@@ -125,6 +125,9 @@ class Sabre_VObject_DateTimeParser {
}
+ if ($duration==='P') {
+ $duration = 'PT0S';
+ }
$iv = new DateInterval($duration);
if ($invert) $iv->invert = true;
@@ -150,6 +153,7 @@ class Sabre_VObject_DateTimeParser {
}
$newDur = ($matches['plusminus']==='-'?'-':'+') . trim($newDur);
+ if ($newDur === '+') { $newDur = '+0 seconds'; };
return $newDur;
}
diff --git a/3rdparty/Sabre/VObject/Element.php b/3rdparty/Sabre/VObject/Element.php
index e20ff0b353c..e20ff0b353c 100644..100755
--- a/3rdparty/Sabre/VObject/Element.php
+++ b/3rdparty/Sabre/VObject/Element.php
diff --git a/3rdparty/Sabre/VObject/Element/DateTime.php b/3rdparty/Sabre/VObject/Element/DateTime.php
index 5e5eb7ab6f2..5e5eb7ab6f2 100644..100755
--- a/3rdparty/Sabre/VObject/Element/DateTime.php
+++ b/3rdparty/Sabre/VObject/Element/DateTime.php
diff --git a/3rdparty/Sabre/VObject/Element/MultiDateTime.php b/3rdparty/Sabre/VObject/Element/MultiDateTime.php
index 8a12ced94a8..8a12ced94a8 100644..100755
--- a/3rdparty/Sabre/VObject/Element/MultiDateTime.php
+++ b/3rdparty/Sabre/VObject/Element/MultiDateTime.php
diff --git a/3rdparty/Sabre/VObject/ElementList.php b/3rdparty/Sabre/VObject/ElementList.php
index 7e508db20f0..7e508db20f0 100644..100755
--- a/3rdparty/Sabre/VObject/ElementList.php
+++ b/3rdparty/Sabre/VObject/ElementList.php
diff --git a/3rdparty/Sabre/VObject/FreeBusyGenerator.php b/3rdparty/Sabre/VObject/FreeBusyGenerator.php
index 1c96a64a004..1c96a64a004 100644..100755
--- a/3rdparty/Sabre/VObject/FreeBusyGenerator.php
+++ b/3rdparty/Sabre/VObject/FreeBusyGenerator.php
diff --git a/3rdparty/Sabre/VObject/Node.php b/3rdparty/Sabre/VObject/Node.php
index d89e01b56c6..d89e01b56c6 100644..100755
--- a/3rdparty/Sabre/VObject/Node.php
+++ b/3rdparty/Sabre/VObject/Node.php
diff --git a/3rdparty/Sabre/VObject/Parameter.php b/3rdparty/Sabre/VObject/Parameter.php
index 2e39af5f78a..2e39af5f78a 100644..100755
--- a/3rdparty/Sabre/VObject/Parameter.php
+++ b/3rdparty/Sabre/VObject/Parameter.php
diff --git a/3rdparty/Sabre/VObject/ParseException.php b/3rdparty/Sabre/VObject/ParseException.php
index 1b5e95bf16e..1b5e95bf16e 100644..100755
--- a/3rdparty/Sabre/VObject/ParseException.php
+++ b/3rdparty/Sabre/VObject/ParseException.php
diff --git a/3rdparty/Sabre/VObject/Property.php b/3rdparty/Sabre/VObject/Property.php
index ce74fe3865b..ce74fe3865b 100644..100755
--- a/3rdparty/Sabre/VObject/Property.php
+++ b/3rdparty/Sabre/VObject/Property.php
diff --git a/3rdparty/Sabre/VObject/Property/DateTime.php b/3rdparty/Sabre/VObject/Property/DateTime.php
index fe2372caa81..fe2372caa81 100644..100755
--- a/3rdparty/Sabre/VObject/Property/DateTime.php
+++ b/3rdparty/Sabre/VObject/Property/DateTime.php
diff --git a/3rdparty/Sabre/VObject/Property/MultiDateTime.php b/3rdparty/Sabre/VObject/Property/MultiDateTime.php
index ae53ab6a617..ae53ab6a617 100644..100755
--- a/3rdparty/Sabre/VObject/Property/MultiDateTime.php
+++ b/3rdparty/Sabre/VObject/Property/MultiDateTime.php
diff --git a/3rdparty/Sabre/VObject/Reader.php b/3rdparty/Sabre/VObject/Reader.php
index eea73fa3dce..eea73fa3dce 100644..100755
--- a/3rdparty/Sabre/VObject/Reader.php
+++ b/3rdparty/Sabre/VObject/Reader.php
diff --git a/3rdparty/Sabre/VObject/RecurrenceIterator.php b/3rdparty/Sabre/VObject/RecurrenceIterator.php
index 833aa091ab7..740270dd8f0 100644..100755
--- a/3rdparty/Sabre/VObject/RecurrenceIterator.php
+++ b/3rdparty/Sabre/VObject/RecurrenceIterator.php
@@ -337,6 +337,8 @@ class Sabre_VObject_RecurrenceIterator implements Iterator {
$this->endDate = clone $this->startDate;
if (isset($this->baseEvent->DURATION)) {
$this->endDate->add(Sabre_VObject_DateTimeParser::parse($this->baseEvent->DURATION->value));
+ } elseif ($this->baseEvent->DTSTART->getDateType()===Sabre_VObject_Property_DateTime::DATE) {
+ $this->endDate->modify('+1 day');
}
}
$this->currentDate = clone $this->startDate;
@@ -561,7 +563,7 @@ class Sabre_VObject_RecurrenceIterator implements Iterator {
*/
public function fastForward(DateTime $dt) {
- while($this->valid() && $this->getDTEnd() < $dt) {
+ while($this->valid() && $this->getDTEnd() <= $dt) {
$this->next();
}
@@ -823,9 +825,40 @@ class Sabre_VObject_RecurrenceIterator implements Iterator {
*/
protected function nextYearly() {
+ $currentMonth = $this->currentDate->format('n');
+ $currentYear = $this->currentDate->format('Y');
+ $currentDayOfMonth = $this->currentDate->format('j');
+
+ // No sub-rules, so we just advance by year
if (!$this->byMonth) {
+
+ // Unless it was a leap day!
+ if ($currentMonth==2 && $currentDayOfMonth==29) {
+
+ $counter = 0;
+ do {
+ $counter++;
+ // Here we increase the year count by the interval, until
+ // we hit a date that's also in a leap year.
+ //
+ // We could just find the next interval that's dividable by
+ // 4, but that would ignore the rule that there's no leap
+ // year every year that's dividable by a 100, but not by
+ // 400. (1800, 1900, 2100). So we just rely on the datetime
+ // functions instead.
+ $nextDate = clone $this->currentDate;
+ $nextDate->modify('+ ' . ($this->interval*$counter) . ' years');
+ } while ($nextDate->format('n')!=2);
+ $this->currentDate = $nextDate;
+
+ return;
+
+ }
+
+ // The easiest form
$this->currentDate->modify('+' . $this->interval . ' years');
return;
+
}
$currentMonth = $this->currentDate->format('n');
@@ -877,8 +910,8 @@ class Sabre_VObject_RecurrenceIterator implements Iterator {
} else {
- // no byDay or byMonthDay, so we can just loop through the
- // months.
+ // These are the 'byMonth' rules, if there are no byDay or
+ // byMonthDay sub-rules.
do {
$currentMonth++;
@@ -888,6 +921,7 @@ class Sabre_VObject_RecurrenceIterator implements Iterator {
}
} while (!in_array($currentMonth, $this->byMonth));
$this->currentDate->setDate($currentYear, $currentMonth, $currentDayOfMonth);
+
return;
}
diff --git a/3rdparty/Sabre/VObject/Version.php b/3rdparty/Sabre/VObject/Version.php
index 00110febc07..9ee03d87118 100644..100755
--- a/3rdparty/Sabre/VObject/Version.php
+++ b/3rdparty/Sabre/VObject/Version.php
@@ -14,7 +14,7 @@ class Sabre_VObject_Version {
/**
* Full version number
*/
- const VERSION = '1.3.2';
+ const VERSION = '1.3.4';
/**
* Stability : alpha, beta, stable
diff --git a/3rdparty/Sabre/VObject/WindowsTimezoneMap.php b/3rdparty/Sabre/VObject/WindowsTimezoneMap.php
index 5e1cc5d479b..5e1cc5d479b 100644..100755
--- a/3rdparty/Sabre/VObject/WindowsTimezoneMap.php
+++ b/3rdparty/Sabre/VObject/WindowsTimezoneMap.php
diff --git a/3rdparty/Sabre/VObject/includes.php b/3rdparty/Sabre/VObject/includes.php
index 0177a8f1ba6..0177a8f1ba6 100644..100755
--- a/3rdparty/Sabre/VObject/includes.php
+++ b/3rdparty/Sabre/VObject/includes.php
diff --git a/3rdparty/Sabre/autoload.php b/3rdparty/Sabre/autoload.php
index c7b537d83d3..c7b537d83d3 100644..100755
--- a/3rdparty/Sabre/autoload.php
+++ b/3rdparty/Sabre/autoload.php
diff --git a/3rdparty/aws-sdk/README.md b/3rdparty/aws-sdk/README.md
new file mode 100644
index 00000000000..7e55f76b3b2
--- /dev/null
+++ b/3rdparty/aws-sdk/README.md
@@ -0,0 +1,136 @@
+# AWS SDK for PHP
+
+The AWS SDK for PHP enables developers to build solutions for Amazon Simple Storage Service (Amazon S3),
+Amazon Elastic Compute Cloud (Amazon EC2), Amazon SimpleDB, and more. With the AWS SDK for PHP, developers
+can get started in minutes with a single, downloadable package.
+
+The SDK features:
+
+* **AWS PHP Libraries:** Build PHP applications on top of APIs that take the complexity out of coding directly
+ against a web service interface. The toolkit provides APIs that hide much of the lower-level implementation.
+* **Code Samples:** Practical examples for how to use the toolkit to build applications.
+* **Documentation:** Complete SDK reference documentation with samples demonstrating how to use the SDK.
+* **PEAR package:** The ability to install the AWS SDK for PHP as a PEAR package.
+* **SDK Compatibility Test:** Includes both an HTML-based and a CLI-based SDK Compatibility Test that you can
+ run on your server to determine whether or not your PHP environment meets the minimum requirements.
+
+For more information about the AWS SDK for PHP, including a complete list of supported services, see
+[aws.amazon.com/sdkforphp](http://aws.amazon.com/sdkforphp).
+
+
+## Signing up for Amazon Web Services
+
+Before you can begin, you must sign up for each service you want to use.
+
+To sign up for a service:
+
+* Go to the home page for the service. You can find a list of services on
+ [aws.amazon.com/products](http://aws.amazon.com/products).
+* Click the Sign Up button on the top right corner of the page. If you don't already have an AWS account, you
+ are prompted to create one as part of the sign up process.
+* Follow the on-screen instructions.
+* AWS sends you a confirmation e-mail after the sign-up process is complete. At any time, you can view your
+ current account activity and manage your account by going to [aws.amazon.com](http://aws.amazon.com) and
+ clicking "Your Account".
+
+
+## Source
+The source tree for includes the following files and directories:
+
+* `_compatibility_test` -- Includes both an HTML-based and a CLI-based SDK Compatibility Test that you can
+ run on your server to determine whether or not your PHP environment meets the minimum requirements.
+* `_docs` -- Informational documents, the contents of which should be fairly self-explanatory.
+* `_samples` -- Code samples that you can run out of the box.
+* `extensions` -- Extra code that can be used to enhance usage of the SDK, but isn't a service class or a
+ third-party library.
+* `lib` -- Contains any third-party libraries that the SDK depends on. The licenses for these projects will
+ always be Apache 2.0-compatible.
+* `services` -- Contains the service-specific classes that communicate with AWS. These classes are always
+ prefixed with `Amazon`.
+* `utilities` -- Contains any utility-type methods that the SDK uses. Includes extensions to built-in PHP
+ classes, as well as new functionality that is entirely custom. These classes are always prefixed with `CF`.
+* `README` -- The document you're reading right now.
+* `config-sample.inc.php` -- A sample configuration file that should be filled out and renamed to `config.inc.php`.
+* `sdk.class.php` -- The SDK loader that you would include in your projects. Contains the base functionality
+ that the rest of the SDK depends on.
+
+
+## Minimum Requirements in a nutshell
+
+* You are at least an intermediate-level PHP developer and have a basic understanding of object-oriented PHP.
+* You have a valid AWS account, and you've already signed up for the services you want to use.
+* The PHP interpreter, version 5.2 or newer. PHP 5.2.17 or 5.3.x is highly recommended for use with the AWS SDK for PHP.
+* The cURL PHP extension (compiled with the [OpenSSL](http://openssl.org) libraries for HTTPS support).
+* The ability to read from and write to the file system via [file_get_contents()](http://php.net/file_get_contents) and [file_put_contents()](http://php.net/file_put_contents).
+
+If you're not sure whether your PHP environment meets these requirements, run the
+[SDK Compatibility Test](http://github.com/amazonwebservices/aws-sdk-for-php/tree/master/_compatibility_test/) script
+included in the SDK download.
+
+
+## Installation
+
+### Via GitHub
+
+[Git](http://git-scm.com) is an extremely fast, efficient, distributed version control system ideal for the
+collaborative development of software. [GitHub](http://github.com/amazonwebservices) is the best way to
+collaborate with others. Fork, send pull requests and manage all your public and private git repositories.
+We believe that GitHub is the ideal service for working collaboratively with the open source PHP community.
+
+Git is primarily a command-line tool. GitHub provides instructions for installing Git on
+[Mac OS X](http://help.github.com/mac-git-installation/), [Windows](http://help.github.com/win-git-installation/),
+and [Linux](http://help.github.com/linux-git-installation/). If you're unfamiliar with Git, there are a variety
+of resources on the net that will help you learn more:
+
+* [Git Immersion](http://gitimmersion.com) is a guided tour that walks through the fundamentals of Git, inspired
+ by the premise that to know a thing is to do it.
+* The [PeepCode screencast on Git](https://peepcode.com/products/git) ($12) will teach you how to install and
+ use Git. You'll learn how to create a repository, use branches, and work with remote repositories.
+* [Git Reference](http://gitref.org) is meant to be a quick reference for learning and remembering the most
+ important and commonly used Git commands.
+* [Git Ready](http://gitready.com) provides a collection of Git tips and tricks.
+* If you want to dig even further, I've [bookmarked other Git references](http://pinboard.in/u:skyzyx/t:git).
+
+If you're comfortable working with Git and/or GitHub, you can pull down the source code as follows:
+
+ git clone git://github.com/amazonwebservices/aws-sdk-for-php.git AWSSDKforPHP
+ cd ./AWSSDKforPHP
+
+### Via PEAR
+
+[PEAR](http://pear.php.net) stands for the _PHP Extension and Application Repository_ and is a framework and
+distribution system for reusable PHP components. It is the PHP equivalent to package management software such as
+[MacPorts](http://macports.org) and [Homebrew](https://github.com/mxcl/homebrew) for Mac OS X,
+[Yum](http://fedoraproject.org/wiki/Tools/yum) and [Apt](http://wiki.debian.org/Apt) for GNU/Linux,
+[RubyGems](http://rubygems.org) for Ruby, [Easy Install](http://packages.python.org/distribute/easy_install.html)
+for Python, [Maven](http://maven.apache.org) for Java, and [NPM](http://npm.mape.me) for Node.js.
+
+PEAR packages are very easy to install, and are available in your PHP environment path so that they are accessible
+to any PHP project. PEAR packages are not specific to your project, but rather to the machine that they're
+installed on.
+
+From the command-line, you can install the SDK with PEAR as follows:
+
+ pear channel-discover pear.amazonwebservices.com
+ pear install aws/sdk
+
+You may need to use `sudo` for the above commands. Once the SDK has been installed via PEAR, you can load it into
+your project with:
+
+ require_once 'AWSSDKforPHP/sdk.class.php';
+
+### Configuration
+
+1. Copy the contents of [config-sample.inc.php](https://github.com/amazonwebservices/aws-sdk-for-php/raw/master/config-sample.inc.php)
+ and add your credentials as instructed in the file.
+2. Move your file to `~/.aws/sdk/config.inc.php`.
+3. Make sure that `getenv('HOME')` points to your user directory. If not you'll need to set
+ `putenv('HOME=<your-user-directory>')`.
+
+
+## Additional Information
+
+* AWS SDK for PHP: <http://aws.amazon.com/sdkforphp>
+* Documentation: <http://docs.amazonwebservices.com/AWSSDKforPHP/latest/>
+* License: <http://aws.amazon.com/apache2.0/>
+* Discuss: <http://aws.amazon.com/forums>
diff --git a/3rdparty/aws-sdk/_compatibility_test/README.md b/3rdparty/aws-sdk/_compatibility_test/README.md
new file mode 100644
index 00000000000..9e2f2d89409
--- /dev/null
+++ b/3rdparty/aws-sdk/_compatibility_test/README.md
@@ -0,0 +1,37 @@
+# Compatibility Test
+
+## Via your web browser
+
+1. Upload `sdk_compatibility_test.php` to the web-accessible root of your website.
+For example, if your website is `www.example.com`, upload it so that you can get
+to it at `www.example.com/sdk_compatibility_test.php`
+
+2. Open your web browser and go to the page you just uploaded.
+
+
+## Via the command line
+
+### Windows
+
+1. Upload `sdk_compatibility_test_cli.php` to your server via SFTP.
+
+2. SSH/RDP into the machine, and find the directory where you uploaded the test.
+
+3. Run the test, and review the results:
+
+ php .\sdk_compatibility_test_cli.php
+
+
+### Non-Windows (Mac or *nix)
+
+1. Upload `sdk_compatibility_test_cli.php` to your server via SFTP.
+
+2. SSH into the machine, and find the directory where you uploaded the test.
+
+3. Set the executable bit:
+
+ chmod +x ./sdk_compatibility_test_cli.php
+
+4. Run the test, and review the results:
+
+ ./sdk_compatibility_test_cli.php
diff --git a/3rdparty/aws-sdk/_compatibility_test/sdk_compatibility.inc.php b/3rdparty/aws-sdk/_compatibility_test/sdk_compatibility.inc.php
new file mode 100644
index 00000000000..c17ec33d72e
--- /dev/null
+++ b/3rdparty/aws-sdk/_compatibility_test/sdk_compatibility.inc.php
@@ -0,0 +1,75 @@
+<?php
+
+define('REQUIREMENTS_ALL_MET', 100);
+define('REQUIREMENTS_MIN_MET', 10);
+define('REQUIREMENTS_NOT_MET', 0);
+
+// Required
+$php_ok = (function_exists('version_compare') && version_compare(phpversion(), '5.2.0', '>='));
+$simplexml_ok = extension_loaded('simplexml');
+$dom_ok = extension_loaded('dom');
+$json_ok = (extension_loaded('json') && function_exists('json_encode') && function_exists('json_decode'));
+$spl_ok = extension_loaded('spl');
+$pcre_ok = extension_loaded('pcre');
+$curl_ok = false;
+if (function_exists('curl_version'))
+{
+ $curl_version = curl_version();
+ $curl_ok = (function_exists('curl_exec') && in_array('https', $curl_version['protocols'], true));
+}
+$file_ok = (function_exists('file_get_contents') && function_exists('file_put_contents'));
+
+// Optional, but recommended
+$openssl_ok = (extension_loaded('openssl') && function_exists('openssl_sign'));
+$zlib_ok = extension_loaded('zlib');
+
+// Optional
+$apc_ok = extension_loaded('apc');
+$xcache_ok = extension_loaded('xcache');
+$memcached_ok = extension_loaded('memcached');
+$memcache_ok = extension_loaded('memcache');
+$mc_ok = ($memcache_ok || $memcached_ok);
+$pdo_ok = extension_loaded('pdo');
+$pdo_sqlite_ok = extension_loaded('pdo_sqlite');
+$sqlite2_ok = extension_loaded('sqlite');
+$sqlite3_ok = extension_loaded('sqlite3');
+$sqlite_ok = ($pdo_ok && $pdo_sqlite_ok && ($sqlite2_ok || $sqlite3_ok));
+
+// Other
+$int64_ok = (PHP_INT_MAX === 9223372036854775807);
+$ini_memory_limit = get_ini('memory_limit');
+$ini_open_basedir = get_ini('open_basedir');
+$ini_safe_mode = get_ini('safe_mode');
+$ini_zend_enable_gc = get_ini('zend.enable_gc');
+
+if ($php_ok && $int64_ok && $curl_ok && $simplexml_ok && $dom_ok && $spl_ok && $json_ok && $pcre_ok && $file_ok && $openssl_ok && $zlib_ok && ($apc_ok || $xcache_ok || $mc_ok || $sqlite_ok))
+{
+ $compatiblity = REQUIREMENTS_ALL_MET;
+}
+elseif ($php_ok && $curl_ok && $simplexml_ok && $dom_ok && $spl_ok && $json_ok && $pcre_ok && $file_ok)
+{
+ $compatiblity = REQUIREMENTS_MIN_MET;
+}
+else
+{
+ $compatiblity = REQUIREMENTS_NOT_MET;
+}
+
+function get_ini($config)
+{
+ $cfg_value = ini_get($config);
+
+ if ($cfg_value === false || $cfg_value === '' || $cfg_value === 0)
+ {
+ return false;
+ }
+ elseif ($cfg_value === true || $cfg_value === '1' || $cfg_value === 1)
+ {
+ return true;
+ }
+}
+
+function is_windows()
+{
+ return strtolower(substr(PHP_OS, 0, 3)) === 'win';
+}
diff --git a/3rdparty/aws-sdk/_compatibility_test/sdk_compatibility_test.php b/3rdparty/aws-sdk/_compatibility_test/sdk_compatibility_test.php
new file mode 100644
index 00000000000..b36a38ab35e
--- /dev/null
+++ b/3rdparty/aws-sdk/_compatibility_test/sdk_compatibility_test.php
@@ -0,0 +1,789 @@
+<?php
+if (isset($_GET['logopng']))
+{
+ $data = <<<IMAGE
+iVBORw0KGgoAAAANSUhEUgAAASwAAABwCAYAAACkRk1NAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
+AAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNXG14zYAAAAU
+dEVYdENyZWF0aW9uIFRpbWUAOS80LzEwZyhWjQAAGJpJREFUeNrtnQ2wXEWVgJvwjKksP2MKMAKV
+HXbZIqUgU1CLWBtkLLZc1IU3CK4ssDAEFVlhM7qIyhYwiqALCqOFIkbNGDSsSszsqllA1zfhT0SX
+DD8aFgJv+DU/JG9CfpYErNluc+6m35m+ffvvvrkz75yqU8mbudO3b9/u755z+txuxkhISEhISEhI
+SEgyJa8tnlvgWgUtZqxuOa4lqFtF1JXuGAnJ9AJUHgZ/g2uHa1ehTYBEoQ/1K3KtcW3F1K3Ntc61
+LK6F7igJyfABqgyDvB0DAZ12AG6VNAABFl4FINl10BYATlhiObrjJCSDBajIjdJZKT4qWzg5h/qZ
+WHg+2syie0tCQqKGwYoUIBCnq23AAKBaPUV1mwBok9VFQjIAVtZ5AK+JwCAY47rIxz0EsC5KAV7i
+WpdwHaVeQEIyuAAbhYHsCq8VAMBcCnXzhdc4QYqEZHBg1IR4kFFMyQJexpCCmJmIa3XQ50WIedVM
+Zhwt4CUgdaNFmVFQv0Y9hoSk/8CSB3PDdMpfgte4DaTA5YxmHicFzhXAUgXsS5ZurSuk8KRDk3oM
+CUm2gIWn/IOkI0iQauisnwRg4XQJI3gZ1q9gMDNKwCIhyTCwVPAqWJSdN4GUI7BUuV5WqRISpEzz
+ywhYJCQDAizsminjShp3Kk1gdWPc2pwmXuaSBEvAIiEZQGDJWkTleaUWBAKWEjCQEBqsPBISEgIW
+AYuEhISARcAiISFgEbBISEgIWAQsEhISApa7UqY7CQkBa2CAVaUeQ0JCwCJgkZCQELAIWCQkBCwC
+FgkJCQGLgEVCQkLAImCRkBCwCFgkJCQELAIWCQkJAYuARUJCwCJgkZCQELAIWCQkJNkE1jgqq+C5
+L2JoYFWox5CQ9BdYJc/dnn2Blbibjce+iCGAtdp341cSEpLw4MLbYqUJLOMttzzh5QqsFQQpEpLh
+hJcpsJwh5QEvG2Cltjs1CUnWB3wRD+SM1a8AdcwFgJcOWMEhZQmvJGCNEaRIpqtFUlLsZOy0X16K
+sSrVHnwN081SJXit1gBrDMBR7OO1jgJgawpgUUyKZFpCKtp/r2ETBA61k7IhXKJNTDsWm6VWLbZz
+p4FPQpJxV6rqukmo6WakASDaDFS/YFvBk5CQ9NeVCqkdVzg4bLfuWr9MuLYkJCR6GNwIweNuyhoF
+qE+0tKgWoZhSWjoBsalR6hkkJIMBr9BwCDaLlhK8CFIkJEMALx84GEPKNaAN9TvPMYPd2NKDwH5q
+LuLIjL1zXItcK1yrSMXn+am87+J8cF6hBYffR78t9qG9SlPdXinfi6LPvQhUh4JUh3y/YGQVEDeE
+l/juKsPyJgX2Fd83bWJehkmgVhCFwH5LldYQCApigLW4dg20DcfnLQd2VaM5xbFtxbk7XOvy8TED
+qxFTd3GN5QCQqli2V812gME5mgG1YQMa6Be1hOtsQj1zDuCJ6wsVRT3qcO/j+kN+qoGlms0rGQ7m
+CA5jptP+usB5DLCcAvYIXmMekIpNHPUceDXDQRenVYunc2I50JE7Buft4MEH19MwrHfL1kqQ2quT
+dnvB+bopaDWlftHBoEk4h/Y+oX5j2h/K/QJWkNk8xXmKJrN7BsDqKhJBvWfzLGYfiwFgVYixYFy0
+HgJYFrDqgRYMspbDIMtbtFcrUHu1TCySfgArQL9oGl5bMwlYUBfb85f6DSwVvIzhEJMN3w0MLGd4
+OaZIFD1hlfe0ElRaCwCspsvgh/JdLcWmocURur3qWQOWwwPDGciGwHIBZ8fWPU0TWEZwcIFUQGCp
+suyD1i8AsFopDYaCB7B8nupVz3oXfQZXiuedMmA5Wqg6bXi2acXj3JWsAiv1FTg9gZVK/XyAJfz8
+lAaC1mowAFY/taapd6kf7dUHYNVSOFfFA1g+D7AWAWt4gNUytFjyCDYmv2sPKLCantZVDbVXwfB3
+HZ/AtKO7lI8JERgFtaW0gqqB+xjrnqVotU4K2hOwBhhYhh2zrHEZ2q4dxRJYdRgQNccnbfR70wHf
+0VyzU3tZPBy84y0W7lMl5vd1F3ffMCheDQCshpTy0A7hbhOwBgNYRZ8AtGGsKOcJrIJHbKWFLQjT
+maaU2quc9sCymEBpekBZ5zLXXaxuC2CVHfsDAWtILKyWi7VgAZ2ix2/rnnG3gqsF4dhelbTaK7CL
+H5u+Ydi2ec8YX8ERWPV+PQgIWBmJYSkGVPRaSSWAheYLrKJHALrlY+lY5GIVobxU28uwPqazo6XQ
+FpKlhVZ1BFbBoz9UCVhDBqwUXEovYCWcu+3hthT7EaRNE1gWSZUNz3Y1yVPr2JZhAKyO5zlTBdYE
+ASs7wFK80FuHDtbqI7CaI+4JkakCS2qvcqj2MjhfeyRAEqVvQrArfAx+00yrP4QAVpOA1T9gQaym
+ArMxvpnOrsDqDAqwpJefGwFeb3IBVm0kTGJqMYRrZeLeOfymRsAiYKlAVR+ZguztADNufQfWVLZX
+gPSQWqCyTIBVd5j99QIOAWuaAcvz1YdpByxw9zpT1V4ay65jmN6Rm0JgVW2vk4BFwLKBVX0kvSzj
+oQNWinC3BVbDJ72DgEXAGuZ3CTsQKylDx86lPEuYSWBZvEsYLSQXpL086lG16AsELAJWphNHTV2K
+Wh/SGjIHLJv2UrlgoYDlm81OwCJgDSqwTGaXKn3Kw8oisCo+AzogsJojHtnsnrlcIdIauqGBQ8Ca
+HsBKmoJv9zFxNIvAavWrvRziZ2XHPhFigUMCFgErLLAMV2pIyn0pTzNg+a5nVfIBVqhs9oQ6ekHZ
+8EHYHDZgVT2z3UMCYUXG67faZSuyEPEKw9nFoQBWoPaqeQLLdQXQDrRXNWmNc8N7mkuIi6bxLmF2
+gSUN5FHYRHRiioGwAna2yWW0fsa7AaUFLIsAdIWAZWx56NaLqgZMnejEbTNmaAWWPK3uwlACywMO
+LkAwgpRB/cazWD/HAdjwnAmKXTVhSIHVChB7anvAzkXLDg+ipsd9aacBnMwByxJepkAwhgDsJ5g3
+rF8B9hscn6r6pQSsuKeh7TrwlSEAlmn8qOjR1jqXKc0loXMObmHZEcrlaQcsA3jpgGADqWjz0qZi
+U9eCBbxs6jeWFqQcYg3y2t3RWll1RxekMA2C7tG1Vj3bS/WuXZrAKjpMyET5ZkVwI02us+2xpvtw
+AAtZQNGOygX03ZgFpGz2BbTa1FWCq6p+XjGplGaEUtsRZkCB1ZjC9mr0C1gpxMxMYl/TC1ieoPPd
+FxDvi5gfhGtPeYuvpFjJIAJrKnf6qfYTWCk80OppAmeogQWuXhkA001JW+BOFjIOLd9OWTaYri8P
+Qx6W4XlN2qvq0F46NyvaRaYkuaKRqxbtFtRyAFaozVTrBv2QgKWB1ZIAq5ra5EmVMgys3Ij7FuCl
+BPB1hvDlZ9dB3JFBFFP/TpzbpIBUxeHVm2hhxqbFWum+0Kob1o2AlWKe15SmIEwRtGwsh6Zi+yzc
+sdueW9X7Aqvsce6OQXvVA7dXJ6G9amApFQPOEtcN3w3MOcS02klJqpbxQV9gVdgwSQB4DRSkNJ24
+prj5bSlTOulp3ICBkDMYBBVpQ0yshYTfFzS/rRicX3fukmF75aX26ni0V8PWWurjg62isbg6cC1l
+h7J197NqcD+9fp81GDVtAuIArxsNkkBtUiT+P7DPSEiGQADYUbwsRy0SFliqgLgJvOQk0Amwwkxe
+28lJgf2O7mVqEhISEh2wnOBlcJ6cyewj3REvmc31QK5voKYgmY7A6rpmsUPZqmz4LgErFbmG6wau
+W+HfedQkwWQG13O5rgE9m5ok+8AygpcEqVaI9bVIjOXHXLuSvoeaJJj8GddXpLYVD4UjqFkGB1hT
+tiAgibGsJGClJl9CbSv0FGoWAhYBi4CVRZnDdZPUti+z3fFCEgIWCQErk7If11u4fp2agoBFwCJg
+kZAQsAZQ5nO9nO0OoovZvse43s71Aq4HOAJLTI6czvVUrkdynRmgngdx/dMArpG4JtGHjuU6bAmW
+oo1EmsnrPMqYy/VdcN/28ShHTBzMI2ANN7D+iu2exv4t12Wa40a53s11jOtZmuMENO7kegdX/IrL
+/mx3asILrDfAG+kTXBdaAOtvuK7l2pE+38ZVLFf8dw7tIcq7B+q4GeI6W7g+znU517dw3dugHDHw
+ylx/zfVZqNME1xe53g9toxvkZ3A9h+vBXPeCzy7m+ijUZ5zrvvD5J7neB/UuG9TtMK5LoT2jd+xE
+WkMVyl/N9TLN74/i+hVoE9H2T3N9jutd0DdmGcbMLoW+Jx5aO6C918F1HGvYzlWpP70C7bwT6nSd
+1EZ/lIPnHFDm2kQqPqvB//NwXDH6joCVLfmBNNB3wUBRyf3ScaJTjyiOEZ/9r3TcF6XvZsGA36mB
+VVfqeGcaAEuU/7KmHHE9N1hYQT/huj2hbuL77yaUdQiAfVdC3e6MsbgE1F+F40R7/gW0HS7v43D8
+i9JnG8Ha1Mld0vF/gM9yAI2udF4se8EDqYXucxed/46E8x8HD0hdX9iZ0M7HAOiS+tJ6+QELIKpy
+bYNWJTh1xd9wXF3+m4CVHbkYWSfLYwbgk9Ix68BVwnIydJAuWAGyhXWbooM+A+f7BXR0+TtRp7cl
+AGtnwt8RGC4zaId7DDq/fJ4vayyH31uU9ZDCfV0qff8S11tjri0C1n3o808ngFmu35gErO3ooYHl
+eAOgR78dA4say59D3zBtn9sUD8f5YLWaliEs2wXI0vqjdYX+7gDEcgArAlYGgXUkuBfRzX1Rccz7
+EVCEVXOu4rgrpCfvBohNRE/UHagT3Q6xD9lNeRgd83gCsOSnurBKTgIXB8PvNa6Ha9rgVMVA/B3X
+xVy/wPU/wV3Bg3Kewg28QwHMu+EcZ8BA3oaOuVYDrC2Kc++Ez6NBuAhZPPdrrvU0qX3ENXzYEFiH
+Iis76gfiem8GV162dkXi6T8pYNlSPJiEZftutju7/lfIknxVESL4maI9xO++yXbPcD7JJifBdsFl
+TQJWZFXVAF5NAlY2g+6y9STAkkffq5IK64py5Cf9g1Js5CH027jtsMSgaKO6HJ8ArE0KGB2rAKRu
+qn4MHbtSEYeZCxYhPk6WhWiwCVBeqDjfpZLLFw3aA2KA9Qfkji6DwS0f/1aweuXBGRd8riNL+WBD
+YC1ClriwcE5Ex1yPjmmhIPo1CCTbwSrH8m1kUa6VytkXrE45Xnk+ineNQPxvAt2Lv04AlnAPWwCt
+OgEru8Bagp5WH9bEr2QLZCayLmTL5ibJnXwZxUaO0dTlixowrlRYL+8ziM1FlmNcMPgFdP3HxRz3
+dmkgiXOvQt//Cp1zVUzgeCbEAeVjL4sBljzg4t7vmwUxIRmA5yiOez2yYtdI3yUB62H03eWK8l+H
+Hk6bJSDtB1aYfE1LYq5nNopP7YJZxMhal/vZU4bxWdHv3msArAoAq0TAyi6wFqIn479J3x2k6Ghd
+iIPI75qdInWyrWxPysEV6HfPxgTsI1mABs46DbB+l+DqTiBr7a0xx76EgPXOmONmwGzpVxXHFFBs
+5hWYTdO5obI1dl8CsFYk3MOvo+OXxwSqn5eO+awhsI5Cv9scE5+KZjfljPnPS/1jK3L1kmb/5Ov5
+AXw+itrtSQCxSgQk/4XrJyB2JruEBaHo7zzEr4ryZwSs7MnhyBV7nu2ZSh+VgrTbpEEpOvSHUPxK
+DhRHs18/QR3vFxCwj9N3INB0ARQqYH0l4bqeQ8cvijluHB13vxR/M5V/VABdJ/OQ5bmR7UlzWKqw
+JJPyi96F2u1Z1pvTdKkU61qHJjV0wKqgGNk9mnrMRX1pKXx+C7qm3yRczwmoPmsk6G5GbXMp88vf
+ypYQsIzkURRbiAbs51CQVY6V3Cr9/t6YGNXjikDtRo2+hOIX2yAgrwJW0lLGOAC+2CCuI7uQPwdX
+bQHTJ7QKaSgmDD6o0UuQRbYVYngqYD0tPUCYxi2cQLE9HGNaJX0/jr7TAesbhuCP5GRot49wfTN8
+9iAq496E9rkStc8mcKVnIgsugtYasMLOAotwNgFruIH1NTR4TofPH5A+F0mQjyCXbBYM5rXS51+K
+Cei7qADW0THASno151Z0/PdjjjsMYkRxdRDtsR4GnQgcz0+YcHDVY2OAdZvhPfwvjQWKU1OWWQDr
+TnQ/XHaBesKzbTZBeELIlxOO7YCFK/rLeQNnfRGwjORs9ERbAjMyckBaDNZr0WzU0chtFIP7A1K5
+L3p21B2SO4SBdWrCNWHLoKE59iLFkztON4AFMDMmKO2qb4sB1rcM7+H5bHLKxNPSd/8gxRi3wD0z
+Bdbd6NpH+wSsg6XyHjD83S7og0cTsIYLWIdCB49u9CNgwWyQOsxJAKPNUqf+KJj/cpLeG6Vy26gD
+fQbiE6aa0wTdkyysGwwC0bKcCYDeZTAQXkUxPOz6boRBaqq/kcC8VDODqJP9UWB7o+SSLUEza4dY
+AKsZAFjPKGJ8bQt9QOHm3YwmTHT6HNPn4mUKWPUMAWs8w031axQ4v5ZNTgTdF2C0Cc3ejKHBMEMq
+839Qx/m8R/0wsE5POB7Hpr5neB6R+/VVcHm3aQAm7mU0i4QTIm/2uE4MrEssfvtLNnnGU/z2T+Ba
+cHa7i0u4Faw1W8H94MxAfTYH3sESiMNOsPhXfpazQRFY1ngR7MQ81cAah513Chlvpn9FwfFHFbM6
+M5B5vxZZZt9AZeJljW8NCKxywvE/Qsdf43je46Bt1ikGwUVwzO3o85/2CVjyTGAXXFXRf6O0BPHd
+hZbAwjltVyfUQUxSLET35xFUxg0p9eE54AksY71vPKyD7wcuCG8LLxdgDQqkZDkDmdhyIFp+d+6b
+yO2IYl+iw+MVEq5WWCU6mQ1PSzF1fhMKcGNgfTuhLOymvduzfeaiyQW5Dtcx8xwx2YU7LDCwjlDE
+DT/H9mT+i0F7pCWwPsV6U1Pi5E1gZa+HvvSjGKD/h8G1HKhwXW3kBIV1/HY2yGIIL1NgDSKkZDmA
+TU4QjF6jWI8C6adJkNqBXBC8+oBoCzkpdTtDL6Iq4khyJ/uZBlhrNeW8mU3OcxLXcFAMhH4Mg1wM
+sKMS2ujqGDfzJOSK7Ig5nwzmh+CcImfqqkDAYqw3RUWOH/03U68VpgNWCYUBhJU2SxP436KYMLiQ
+9b6QrEsgFvG8NdA+T0kupEjYfQz6yG8T2mEG682xG55FHzXw0gFr0CGF5UGF2/MMsgT2Z+o37p+P
+KRO7A+uZOhFyHnRO+djrNcDapoljLWe9yaAq+Rg6Trxeo1uHaTFT53bNYb0rCCzWlPNJNvm9ujUB
+gYVfb5JdxJs0saA4YOWQZbmdxS9DhFMgzpTurfy6jZi0+KCFWxw9uNqojI8ntAV2C49nwygAr6sA
+SBhYY7ADdHEIL/0aBYhUT7LHmHopEJWcznpXQxCD+yPQkXNgweEZHzFjd6gGWNG09QL0VD0XWXW6
+dw4LyEoUbvC1McceznpXWrgoxlWOrCzVYoRFNnk2T+iVAYG1AFnKslVzogOwGOtNEXmM9c66XYLa
+XZQhL1J4N+tNIlY9cD6K2kfcv7NiHhjPQXuq5Ep0TZuY/RsMJBmXU1jvqzGqGa/Pst4lPj6gKfen
+TL2ulEiR+D3rXYjvNcXTc6XCXY0G4kpwz1ax3sXlxOB6vaZu9yog+CTA+xywJm5gva/6dBBQD0QD
+NrIyxJT8h8DaaCjaVwykfQICazbrfbk6SiXYxxFYf6mAtZj5uwWgvIJNXmdL/B6vyzWf9S77IsB0
+B5Tx93D/8DGPSy7ofLZnzTX5PtwJ/eU0cEvvUjwU7qXhPXyyD4pXiM5wgeK4k5GJjwcvljkKMOiS
+/aoK10wG1jJFh4xbITQp/6agCKab5GF9RlHW2QpoJWVlnxAw6B7J1xTn+nfN8SYL+H1M4WJFuXX4
+M9W7gnuB1bPTon1eUFhFCy3LiMCYp+E9nPIQeiqrBvy+yO1Ya1j29Sw5KznOfVspuVri7ft/Vjz1
+8fuAJxjWa36MGxX3utB1msDzBcwsa35DjEuEgXWxwz18L+vdZ/B8zfH7sd4JFJXcyPTLUgvr9p6E
+h8QXEu6bbFnFxYYvYuYrlz7F1OtukQyJCBiI4PsvwdJhmoEppq1/yPasV2QiYpaqAgNTTJGLd+C+
+Y1CGeL2iyXYvFyJbR6sArC/BIBUzQ3XmtoPK5eDqbGeTZyt3wFNaBH+PMShHDNifQxmvIijvhDaL
+i6ecA4NxA0PrOFmIsJi+C23xBLhMSe/UidQVsQGFSCC+IuaYvWHwi+TTdaDRDKvIx7vaME4kZnEf
+hrbZhSy7DliIcwzaOLrGLQqLStxH8V7rm2hIk2RNhLXzRhZmG60Z0MmLXP8WBugRHuWJcspsd3qA
+yWzyCFzLkZ7nTVNEHQ+BazvZ8Lri7ts7wZV+D9vzKpFtGW+BuogyFjAKrpOQkJCQkJCQkJCQkJCE
+l/8Df+8XDp+g0JUAAAAASUVORK5CYII=
+IMAGE;
+
+
+ header('Content-type: image/png');
+ echo base64_decode($data);
+ exit;
+}
+elseif (isset($_GET['background']))
+{
+ $data = <<<IMAGE
+R0lGODlhMAEeAeYAAP///8ni6cTf5+72+PD3+c3k6+nz9ufy9ev099Pn7bnZ48bg6LfY4uHv8/r8
+/f3+/v7//7bX4cjh6fj7/Mvj6vz9/rva4+z19/X6+/f7/Pn8/fb6+7jZ4vv9/bra473b5Lzb5LXX
+4b7c5b/c5e31+NTo7tvs8dfq7/H3+bjY4tnq79Hm7c/l69nr8PL4+t7t8sDd5cLe5uPw9Nvr8Mri
+6fP4+tLn7er099Hm7O/2+dDm7OTw9OXx9Nbp7tbp7+Lv8+Du8szj6sXg57bY4d3s8djq7+jz9tzs
+8cPe58fh6M7k68Pf5+by9fz+/sDd5vT5+vT5+97t8bbY4trr8P7+/v7+/+Pw8+Xx9dXo7sHe5vH4
++fP5+sHd5t/u8s/l7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5
+BAAAAAAALAAAAAAwAR4BAAf/gCGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKNEaWm
+p6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExbBDyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7K
+UuHi4+Tl5ufo6err7O3u7/Dx8vP09fb34wz6+/z9/v8AAwocSLCgwYMIEypcyLChw4cQI0qcSLGi
+xYsYM2osmKKjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qc+ZGDzZs4c+rcybOnz59AgwodSrSo0aNI
+kypdyrSp06dQo0qdSrWq1aAKsmrdyrWr169gw4odS7as2bNo06pdy7at27dw/+PKnUu3rt27ePOS
+9cC3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sz5sIXPoEOLHk26tOnTqFOrXs26
+tevXsGPLnk27tu3buHPr3s27t+/fqkEIH068uPHjyJMrX868ufPn0KNLn069uvXr2LNr3869u/fv
+4MOLb/6hvPnz6NOrX8++vfv38OPLn0+/vv37+PPr38+/v///AAYo4IAEFgifCAgmqOCCDDbo4IMQ
+RijhhBRWaOGFGGao4YYcdujhhyCGKOKIJJZo4okoTjjCiiy26OKLMMYo44w01mjjjTjmqOOOPPbo
+449ABinkkEQWaeSRSCap5P+SNsLg5JNQRinllFRWaeWVWGap5ZZcdunll2CGKeaYZELpxJlopqnm
+mmy26eabcMYp55x01mnnnXjmqeeefPaZJheABirooIQWauihiCaq6KKMNuroo5BGKumklFZqqaBZ
+ZKrpppx26umnoIYq6qiklmrqqaimquqqrLbq6qubxiDrrLTWauutuOaq66689urrr8AGK+ywxBZr
+7LHI0orEssw26+yz0EYr7bTUVmvttdhmq+223Hbr7bfghtvsEuSWa+656Kar7rrstuvuu/DGK++8
+9NZr77345quvuQL06++/AAcs8MAEF2zwwQgnrPDCDDfs8MMQRyzxxBRXbPH/xRhnrPHGHHeMsBAg
+hyzyyCSXbPLJKKes8sost+zyyzDHLPPMNNdss8gL5Kzzzjz37PPPQAct9NBEF2300UgnrfTSTDft
+9NNQRy311FRXbfXVWGdNdBJcd+3112CHLfbYZJdt9tlop6322my37fbbcMctt9cS1G333Xjnrffe
+fPft99+ABy744IQXbvjhiCeu+OKMN+7445BHLvnklFcOeACYZ6755px37vnnoIcu+uikl2766ain
+rvrqrLfu+uuwxy777LTXbvvtuI9Ow+689+7778AHL/zwxBdv/PHIJ6/88sw37/zz0EffOwXUV2/9
+9dhnr/323Hfv/ffghy/+//jkl2/++einr/767Lfv/vvwxy///PR/H8T9+Oev//789+///wAMoAAH
+SMACGvCACEygAhfIwAbmrwAQjKAEJ0jBClrwghjMoAY3yMEOevCDIAyhCEdIwhKa8IQoTKEKV8jC
+FrrwhTDcoBJmSMMa2vCGOMyhDnfIwx768IdADKIQh0jEIhrxiEhMYg1ZwMQmOvGJUIyiFKdIxSpa
+8YpYzKIWt8jFLnrxi2AMoxid6IUymvGMaEyjGtfIxja68Y1wjKMc50jHOtrxjnjMox73eEYd+PGP
+gAykIAdJyEIa8pCITKQiF8nIRjrykZCMpCQnSUlA4uCSmMykJjfJyU568v+ToAylKEdJylKa8pSo
+TKUqV8nKVmZyBbCMpSxnScta2vKWuMylLnfJy1768pfADKYwh0nMYhpTljZIpjKXycxmOvOZ0Iym
+NKdJzWpa85rYzKY2t8nNbnrzm8tMgDjHSc5ymvOc6EynOtfJzna6853wjKc850nPetrznvjMpz73
+yc9++vOfAA2oQNtZgoIa9KAITahCF8rQhjr0oRCNqEQnStGKWvSiGM2oRjd6UCx49KMgDalIR0rS
+kpr0pChNqUpXytKWuvSlMI2pTGdKU5D24KY4zalOd8rTnvr0p0ANqlCHStSiGvWoSE2qUpfK1Kbm
+1AdQjapUp0rVqlr1qlj/zapWt8rVrnr1q2ANq1jHStaymlWqJ0irWtfK1ra69a1wjatc50rXutr1
+rnjNq173yte++vWvay2CYAdL2MIa9rCITaxiF8vYxjr2sZCNrGQnS9nKWvaymCWsCjbL2c569rOg
+Da1oR0va0pr2tKhNrWpXy9rWuva1sI1tZ1tA29ra9ra4za1ud8vb3vr2t8ANrnCHS9ziGve4yE2u
+cm07heY697nQja50p0vd6lr3utjNrna3y93ueve74A2veMf73BmY97zoTa9618ve9rr3vfCNr3zn
+S9/62ve++M2vfvfLX/Sa4L8ADrCAB0zgAhv4wAhOsIIXzOAGO/jBEI6w/4QnTOEKB/gIGM6whjfM
+4Q57+MMgDrGIR0ziEpv4xChOsYpXzOIWu1jDRIixjGdM4xrb+MY4zrGOd8zjHvv4x0AOspCHTOQi
+G/nIM46CkpfM5CY7+clQjrKUp0zlKlv5yljOspa3zOUue/nLYGbyC8ZM5jKb+cxoTrOa18zmNrv5
+zXCOs5znTOc62/nOeM5zmbvA5z77+c+ADrSgB03oQhv60IhOtKIXzehGO/rRkI60pP0MhEpb+tKY
+zrSmN83pTnv606AOtahHTepSm/rUqE61qld96Qa4+tWwjrWsZ03rWtv61rjOta53zete+/rXwA62
+sIdN7GIb+9jITrayl//N7GY7O9c/iLa0p03talv72tjOtra3ze1ue/vb4A63uMdN7nKb+9zTtoK6
+183udrv73fCOt7znTe962/ve+M63vvfN7377+98AZ7cMBk7wghv84AhPuMIXzvCGO/zhEI+4xCdO
+8Ypb/OIYz3jBd8Dxjnv84yAPuchHTvKSm/zkKE+5ylfO8pa7/OUwj7nMPc6Dmtv85jjPuc53zvOe
++/znQA+60IdO9KIb/ehIT7rSl37zKzj96VCPutSnTvWqW/3qWM+61rfO9a57/etgD7vYx052qDPh
+7GhPu9rXzva2u/3tcI+73OdO97rb/e54z7ve9873vqf9AIAPvOAHT/j/whv+8IhPvOIXz/jGO/7x
+kI+85CdP+cpb/vKYz7zmN8/5znv+86BfvBFGT/rSm/70qE+96lfP+ta7/vWwj73sZ0/72tv+9rjP
+fekNwPve+/73wA++8IdP/OIb//jIT77yl8/85jv/+dCPvvSnT/3qW//62M++9rfP/ePf4PvgD7/4
+x0/+8pv//OhPv/rXz/72u//98I+//OdP//qHHwH4z7/+98///vv//wAYgAI4gARYgAZ4gAiYgAq4
+gAzYgA74gBAYgRI4gRRYgRZ4gRg4gBewgRzYgR74gSAYgiI4giRYgiZ4giiYgiq4gizYgi74gjAY
+gzI4gzRYgzZ4gziY/4M6uIMmSAI++INAGIRCOIREWIRGeIRImIRKuIRM2IRO+IRQGIVSOIVUCIQD
+cIVYmIVauIVc2IVe+IVgGIZiOIZkWIZmeIZomIZquIZs2IZu+IZwGIdyOId0WId2eIdimAN6uId8
+2Id++IeAGIiCOIiEWIiGeIiImIiKuIiM2IiO+IiQyIcEMImUWImWeImYmImauImc2Ime+ImgGIqi
+OIqkWIqmeIqomIqquIqs2Iqu+IqwGIuyOIueiAK2eIu4mIu6uIu82Iu++IvAGIzCOIzEWIzGeIzI
+mIzKuIzMiIta8IzQGI3SOI3UWI3WeI3YmI3auI3c2I3e+I3gGI7iOP+O5FiO0egC6JiO6riO7NiO
+7viO8BiP8jiP9FiP9niP+JiP+riP/NiP/qiONRCQAjmQBFmQBnmQCJmQCrmQDNmQDvmQEBmREjmR
+FFmRFnmRA7kFGrmRHNmRHvmRIBmSIjmSJFmSJnmSKJmSKrmSLNmSLvmSMMmRTzCTNFmTNnmTOJmT
+OrmTPNmTPvmTQBmUQjmURFmURnmUSJmUNQkFTNmUTvmUUBmVUjmVVFmVVnmVWJmVWrmVXNmVXvmV
+YBmWYumUGFCWZnmWaJmWarmWbNmWbvmWcBmXcjmXdFmXdnmXeJmXermXfNmXfvmXgBmYgjmYhFmY
+cLkBiJmYirmYjNn/mI75mJAZmZI5mZRZmZZ5mZiZmZq5mZzZmZ75maAZmqI5mqRZmqZ5mqg5mRmw
+mqzZmq75mrAZm7I5m7RZm7Z5m7iZm7q5m7zZm775m8AZnMI5nMRZnMZ5nMiZnMq5nLY5Ac75nNAZ
+ndI5ndRZndZ5ndiZndq5ndzZnd75neAZnuI5nuRZnuZ5nuiZnuq5nuzZnu6ZnRoQn/I5n/RZn/Z5
+n/iZn/q5n/zZn/75nwAaoAI6oARaoAZ6oAiaoAq6oAzaoA76oBAaofzpABRaoRZ6oRiaoRq6oRza
+oR76oSAaoiI6oiRaoiZ6oiiaoiq6oizaoi76ojAaozI6ozT6oR1w/6M4mqM6uqM82qM++qNAGqRC
+OqREWqRGeqRImqRKuqRM2qRO+qRQGqVSOqVUWqVWeqVCWgFauqVc2qVe+qVgGqZiOqZkWqZmeqZo
+mqZquqZs2qZu+qZwGqdyOqd0Wqd2eqd4mqd6WqZN0Kd++qeAGqiCOqiEWqiGeqiImqiKuqiM2qiO
++qiQGqmSOql/+gCWeqmYmqmauqmc2qme+qmgGqqiOqqkWqqmeqqomqqquqqs2qqu+qqwGquyOqu0
+Wqu2GqpUkKu6uqu82qu++qvAGqzCOqzEWqzGeqzImqzKuqzM2qzO+qy7WgXSOq3UWq3Weq3Ymq3a
+uq3c2q3e+q3gGv+u4jqu5Fqu5nqu6EqtELCu7Nqu7vqu8Bqv8jqv9Fqv9nqv+Jqv+rqv/Nqv/vqv
+ABuwAjuwBFuwBnuwCJuwCruw9goADvuwEBuxEjuxFFuxFnuxGJuxGruxHNuxHvuxIBuyIjuyJFuy
+JnuyKJuyKruyLNuyLvuyMBuzMjuzNFuzNnuzOJuzOruzPNuzPvuzQBu0Qju0RFu0Rnu0SJu0Sru0
+TNu0Tvu0UBu1Uju1VFu1Vnu1WJu1Wru1XNu1Xvu1YBu2Yju2ZFu2Znu2aJu2aru2bNu2bvu2cBu3
+cju3dFu3dnu3eJu3eru3fNu3fvu3gBu4gju4hFu4hnu4iJu4irv/uIzbuI77uJAbuZI7uZRbuZZ7
+uZibuZq7uZzbuZ77uaAbuqI7uqRbuqZ7uqibuqq7uqzbuq77urAbu7I7u7Rbu7Z7u7ibu7q7u7zb
+u777u8AbvMI7vMRbvMZ7vMibvMq7vMzbvM77vNAbvdI7vdRbvdZ7vdibvdq7vdzbvd77veAbvuI7
+vuRbvuZ7vuibvuq7vuzbvu77vvAbv/I7v/Rbv/Z7v/ibv/q7v/zbv/77vwAcwAI8wARcwAZ8wAic
+wAq8wAzcwA78wBAcwRI8wRRcwRZ8wRicwRq8wRzcwR78wSAcwiI8wiRcwiZ8wiicwiq8wizcwi78
+wjAcwzI8wzRcFcM2fMM4nMM6vMM83MM+/MNArLmBAAA7
+IMAGE;
+
+ header('Content-type: image/gif');
+ echo base64_decode($data);
+ exit;
+}
+elseif (isset($_GET['loader']))
+{
+ $data = <<<IMAGE
+R0lGODlhEAALAPQAAP///wBmzNro9tDi9Ory+gZpzQBmzC6B1YKz5WCf3rrV8CJ60kqS2oq452Sh
+377X8SZ80wRozE6U2+bv+djn9vT4/DiH19zp9/L2+7bS76DF68re8+70+gAAAAAAAAAAACH/C05F
+VFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAA
+EAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJ
+CwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJ
+CwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHT
+uBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V5
+5zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme
+1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAA
+ABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2
+y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2
+isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0
+DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA
+IMAGE;
+ header('Content-type: image/gif');
+ echo base64_decode($data);
+ exit;
+}
+elseif (isset($_GET['ssl_check']))
+{
+ header('Content-type: text/plain; charset=utf-8');
+
+ $ch = curl_init();
+ curl_setopt($ch, CURLOPT_URL, 'https://email.us-east-1.amazonaws.com');
+ curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
+ curl_setopt($ch, CURLOPT_HEADER, false);
+ curl_setopt($ch, CURLOPT_NOBODY, true);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_TIMEOUT, 5184000);
+ curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
+ curl_setopt($ch, CURLOPT_NOSIGNAL, true);
+ curl_setopt($ch, CURLOPT_USERAGENT, 'aws-sdk-php/compat-www');
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
+ curl_setopt($ch, CURLOPT_VERBOSE, true);
+
+ curl_exec($ch);
+ echo (curl_getinfo($ch, CURLINFO_SSL_VERIFYRESULT) === 0) ? 'false' : 'true';
+ curl_close($ch);
+
+ exit;
+}
+
+// Include the compatibility test logic
+require dirname(__FILE__) . DIRECTORY_SEPARATOR . 'sdk_compatibility.inc.php';
+
+header('Content-type: text/html; charset=UTF-8');
+
+?><!DOCTYPE html>
+
+<html lang="en">
+<head>
+<title>AWS SDK for PHP: Environment Compatibility Test</title>
+<meta name="ROBOTS" content="NOINDEX, NOFOLLOW, NOARCHIVE" />
+
+<script type="text/javascript" charset="utf-8">
+/*!
+ * Reqwest! A x-browser general purpose XHR connection manager
+ * copyright Dustin Diaz 2011
+ * https://github.com/ded/reqwest
+ * license MIT
+ */
+!function(window){function serial(a){var b=a.name;if(a.disabled||!b)return"";b=enc(b);switch(a.tagName.toLowerCase()){case"input":switch(a.type){case"reset":case"button":case"image":case"file":return"";case"checkbox":case"radio":return a.checked?b+"="+(a.value?enc(a.value):!0)+"&":"";default:return b+"="+(a.value?enc(a.value):"")+"&"}break;case"textarea":return b+"="+enc(a.value)+"&";case"select":return b+"="+enc(a.options[a.selectedIndex].value)+"&"}return""}function enc(a){return encodeURIComponent(a)}function reqwest(a,b){return new Reqwest(a,b)}function init(o,fn){function error(a){o.error&&o.error(a),complete(a)}function success(resp){o.timeout&&clearTimeout(self.timeout)&&(self.timeout=null);var r=resp.responseText;if(r)switch(type){case"json":resp=window.JSON?window.JSON.parse(r):eval("("+r+")");break;case"js":resp=eval(r);break;case"html":resp=r}fn(resp),o.success&&o.success(resp),complete(resp)}function complete(a){o.complete&&o.complete(a)}this.url=typeof o=="string"?o:o.url,this.timeout=null;var type=o.type||setType(this.url),self=this;fn=fn||function(){},o.timeout&&(this.timeout=setTimeout(function(){self.abort(),error()},o.timeout)),this.request=getRequest(o,success,error)}function setType(a){return/\.json$/.test(a)?"json":/\.jsonp$/.test(a)?"jsonp":/\.js$/.test(a)?"js":/\.html?$/.test(a)?"html":/\.xml$/.test(a)?"xml":"js"}function Reqwest(a,b){this.o=a,this.fn=b,init.apply(this,arguments)}function getRequest(a,b,c){if(a.type!="jsonp"){var f=xhr();f.open(a.method||"GET",typeof a=="string"?a:a.url,!0),setHeaders(f,a),f.onreadystatechange=readyState(f,b,c),a.before&&a.before(f),f.send(a.data||null);return f}var d=doc.createElement("script");window[getCallbackName(a)]=generalCallback,d.type="text/javascript",d.src=a.url,d.async=!0;var e=function(){a.success&&a.success(lastValue),lastValue=undefined,head.removeChild(d)};d.onload=e,d.onreadystatechange=function(){/^loaded|complete$/.test(d.readyState)&&e()},head.appendChild(d)}function generalCallback(a){lastValue=a}function getCallbackName(a){var b=a.jsonpCallback||"callback";if(a.url.slice(-(b.length+2))==b+"=?"){var c="reqwest_"+uniqid++;a.url=a.url.substr(0,a.url.length-1)+c;return c}var d=new RegExp(b+"=([\\w]+)");return a.url.match(d)[1]}function setHeaders(a,b){var c=b.headers||{};c.Accept=c.Accept||"text/javascript, text/html, application/xml, text/xml, */*",b.crossOrigin||(c["X-Requested-With"]=c["X-Requested-With"]||"XMLHttpRequest");if(b.data){c["Content-type"]=c["Content-type"]||"application/x-www-form-urlencoded";for(var d in c)c.hasOwnProperty(d)&&a.setRequestHeader(d,c[d],!1)}}function readyState(a,b,c){return function(){a&&a.readyState==4&&(twoHundo.test(a.status)?b(a):c(a))}}var v=window.v;!v&&typeof require!="undefined"&&(v=require("valentine"));var twoHundo=/^20\d$/,doc=document,byTag="getElementsByTagName",head=doc[byTag]("head")[0],xhr="XMLHttpRequest"in window?function(){return new XMLHttpRequest}:function(){return new ActiveXObject("Microsoft.XMLHTTP")},uniqid=0,lastValue;Reqwest.prototype={abort:function(){this.request.abort()},retry:function(){init.call(this,this.o,this.fn)}},reqwest.serialize=function(a){var b=a[byTag]("input"),c=a[byTag]("select"),d=a[byTag]("textarea");return(v(b).chain().toArray().map(serial).value().join("")+v(c).chain().toArray().map(serial).value().join("")+v(d).chain().toArray().map(serial).value().join("")).replace(/&$/,"")},reqwest.serializeArray=function(a){for(var b=this.serialize(a).split("&"),c=0,d=b.length,e=[],f;c<d;c++)b[c]&&(f=b[c].split("="))&&e.push({name:f[0],value:f[1]});return e};var old=window.reqwest;reqwest.noConflict=function(){window.reqwest=old;return this},window.reqwest=reqwest}(this)
+</script>
+
+<style type="text/css">
+body {
+ font:14px/1.4em "Helvetica Neue", Helvetica, "Lucida Grande", Roboto, "Droid Sans", Ubuntu, Verdana, Arial, Clean, Sans, sans-serif;
+ letter-spacing:0px;
+ color:#333;
+ margin:0;
+ padding:0;
+ background:#fff url(<?php echo pathinfo(__FILE__, PATHINFO_BASENAME); ?>?background) repeat-x top left;
+}
+
+div#site {
+ width:650px;
+ margin:20px auto 0 auto;
+}
+
+a {
+ color: #326EA1;
+ text-decoration: underline;
+ padding: 1px 2px;
+ -webkit-transition: background-color 0.15s;
+ -webkit-transition: color 0.15s;
+ -moz-transition: background-color 0.15s;
+ -moz-transition: color 0.15s;
+ transition: background-color 0.15s;
+ transition: color 0.15s;
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ border-radius: 2px;
+}
+
+a:hover, a.hover {
+ color: #fff;
+ background-color: #333;
+ text-decoration: none;
+ padding: 1px 2px;
+}
+
+p {
+ margin:0;
+ padding:5px 0;
+}
+
+em {
+ font-style:normal;
+ background-color:#ffc;
+}
+
+ul, ol {
+ margin:10px 0 10px 20px;
+ padding:0 0 0 15px;
+}
+
+ul li, ol li {
+ margin:0 0 4px 0;
+ padding:0 0 0 3px;
+}
+
+h2 {
+ font-size:18px;
+ padding:0;
+ margin:0 0 10px 0;
+}
+
+h3 {
+ font-size:16px;
+ padding:0;
+ margin:20px 0 5px 0;
+}
+
+h4 {
+ font-size:14px;
+ padding:0;
+ margin:15px 0 5px 0;
+}
+
+pre, code {
+ font-family: "Panic Sans", "Bitstream Vera Sans Mono", Monaco, Consolas, "Andale Mono", monospace;
+ background-color: #F0F0F0;
+ border-radius: 3px 3px 3px 3px;
+ padding: 0 3px;
+ font-size: 1em;
+}
+
+em strong {
+ text-transform: uppercase;
+}
+
+table.chart {
+ border-collapse:collapse;
+}
+
+table.chart th {
+ background-color:#eee;
+ padding:2px 3px;
+ border:1px solid #fff;
+}
+
+table.chart td {
+ text-align:center;
+ padding:2px 3px;
+ border:1px solid #eee;
+}
+
+table.chart tr.enabled td {
+ /* Leave this alone */
+}
+
+table.chart tr.disabled td,
+table.chart tr.disabled td a {
+ color:#999;
+ font-style:italic;
+}
+
+table.chart tr.disabled td a {
+ text-decoration:underline;
+}
+
+div.chunk {
+ margin:0;
+ padding:10px;
+ border-bottom:1px solid #ccc;
+}
+
+div.important {
+ background-color:#ffc;
+}
+
+div.ok {
+ background-color:#cfc;
+}
+
+div.error {
+ background-color:#fcc;
+}
+
+div.important h3 {
+ margin: 7px 0 5px 0;
+}
+
+.footnote,
+.footnote a {
+ font:12px/1.4em "Helvetica Neue", Helvetica, "Lucida Grande", Verdana, Arial, Clean, Sans, sans-serif;
+ color:#aaa;
+}
+
+.footnote em {
+ background-color:transparent;
+ font-style:italic;
+}
+</style>
+
+</head>
+
+<body>
+
+<div id="site">
+ <div id="content">
+
+ <div class="chunk">
+ <h2 style="text-align:center;"><img src="<?php echo pathinfo(__FILE__, PATHINFO_BASENAME); ?>?logopng" alt="SDK Compatibility Test" title="SDK Compatibility Test" /></h2>
+
+ <h3>Minimum Requirements</h3>
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" class="chart">
+ <thead>
+ <tr>
+ <th>Test</th>
+ <th>Should Be</th>
+ <th>What You Have</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr class="<?php echo ($php_ok) ? 'enabled' : 'disabled'; ?>">
+ <td>PHP</td>
+ <td>5.2 or newer</td>
+ <td><?php echo phpversion(); ?></td>
+ </tr>
+ <tr class="<?php echo ($curl_ok) ? 'enabled' : 'disabled'; ?>">
+ <td><a href="http://php.net/curl">cURL</a></td>
+ <td>7.15.0 or newer, with SSL</td>
+ <td><?php echo ($curl_ok) ? ($curl_version['version'] . ' (' . $curl_version['ssl_version'] . ')') : ($curl_version['version'] . (in_array('https', $curl_version['protocols'], true) ? ' (with ' . $curl_version['ssl_version'] . ')' : ' (without SSL)')); ?></td>
+ </tr>
+ <tr class="<?php echo ($simplexml_ok) ? 'enabled' : 'disabled'; ?>">
+ <td><a href="http://php.net/simplexml">SimpleXML</a></td>
+ <td>Enabled</td>
+ <td><?php echo ($simplexml_ok) ? 'Enabled' : 'Disabled'; ?></td>
+ </tr>
+ <tr class="<?php echo ($dom_ok) ? 'enabled' : 'disabled'; ?>">
+ <td><a href="http://php.net/dom">DOM</a></td>
+ <td>Enabled</td>
+ <td><?php echo ($dom_ok) ? 'Enabled' : 'Disabled'; ?></td>
+ </tr>
+ <tr class="<?php echo ($spl_ok) ? 'enabled' : 'disabled'; ?>">
+ <td><a href="http://php.net/spl">SPL</a></td>
+ <td>Enabled</td>
+ <td><?php echo ($spl_ok) ? 'Enabled' : 'Disabled'; ?></td>
+ </tr>
+ <tr class="<?php echo ($json_ok) ? 'enabled' : 'disabled'; ?>">
+ <td><a href="http://php.net/json">JSON</a></td>
+ <td>Enabled</td>
+ <td><?php echo ($json_ok) ? 'Enabled' : 'Disabled'; ?></td>
+ </tr>
+ <tr class="<?php echo ($pcre_ok) ? 'enabled' : 'disabled'; ?>">
+ <td><a href="http://php.net/pcre">PCRE</a></td>
+ <td>Enabled</td>
+ <td><?php echo ($pcre_ok) ? 'Enabled' : 'Disabled'; ?></td>
+ </tr>
+ <tr class="<?php echo ($file_ok) ? 'enabled' : 'disabled'; ?>">
+ <td>File System <a href="http://php.net/file_get_contents">Read</a>/<a href="http://php.net/file_put_contents">Write</a></td>
+ <td>Enabled</td>
+ <td><?php echo ($file_ok) ? 'Enabled' : 'Disabled'; ?></td>
+ </tr>
+ </tbody>
+ </table>
+
+ <h3>Optional Extensions</h3>
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" class="chart">
+ <thead>
+ <tr>
+ <th>Test</th>
+ <th>Would Like To Be</th>
+ <th>What You Have</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr class="<?php echo ($openssl_ok) ? 'enabled' : 'disabled'; ?>">
+ <td><a href="http://php.net/openssl">OpenSSL</a></td>
+ <td>Enabled</td>
+ <td><?php echo ($openssl_ok) ? 'Enabled' : 'Disabled'; ?></td>
+ </tr>
+ <tr class="<?php echo ($zlib_ok) ? 'enabled' : 'disabled'; ?>">
+ <td><a href="http://php.net/zlib">Zlib</a></td>
+ <td>Enabled</td>
+ <td><?php echo ($zlib_ok) ? 'Enabled' : 'Disabled'; ?></td>
+ </tr>
+ <tr class="<?php echo ($apc_ok) ? 'enabled' : 'disabled'; ?>">
+ <td><a href="http://php.net/apc">APC</a></td>
+ <td>Enabled</td>
+ <td><?php echo ($apc_ok) ? 'Enabled' : 'Disabled'; ?></td>
+ </tr>
+ <tr class="<?php echo ($xcache_ok) ? 'enabled' : 'disabled'; ?>">
+ <td><a href="http://xcache.lighttpd.net">XCache</a></td>
+ <td>Enabled</td>
+ <td><?php echo ($xcache_ok) ? 'Enabled' : 'Disabled'; ?></td>
+ </tr>
+ <tr class="<?php echo ($memcache_ok) ? 'enabled' : 'disabled'; ?>">
+ <td><a href="http://php.net/memcache">Memcache</a></td>
+ <td>Enabled</td>
+ <td><?php echo ($memcache_ok) ? 'Enabled' : 'Disabled'; ?></td>
+ </tr>
+ <tr class="<?php echo ($memcached_ok) ? 'enabled' : 'disabled'; ?>">
+ <td><a href="http://php.net/memcached">Memcached</a></td>
+ <td>Enabled</td>
+ <td><?php echo ($memcached_ok) ? 'Enabled' : 'Disabled'; ?></td>
+ </tr>
+ <tr class="<?php echo ($pdo_ok) ? 'enabled' : 'disabled'; ?>">
+ <td><a href="http://php.net/pdo">PDO</a></td>
+ <td>Enabled</td>
+ <td><?php echo ($pdo_ok) ? 'Enabled' : 'Disabled'; ?></td>
+ </tr>
+ <tr class="<?php echo ($pdo_sqlite_ok) ? 'enabled' : 'disabled'; ?>">
+ <td><a href="http://php.net/pdo-sqlite">PDO-SQLite</a></td>
+ <td>Enabled</td>
+ <td><?php echo ($pdo_sqlite_ok) ? 'Enabled' : 'Disabled'; ?></td>
+ </tr>
+ <tr class="<?php echo ($sqlite2_ok) ? 'enabled' : 'disabled'; ?>">
+ <td><a href="http://php.net/sqlite">SQLite 2</a></td>
+ <td>Enabled</td>
+ <td><?php echo ($sqlite2_ok) ? 'Enabled' : 'Disabled'; ?></td>
+ </tr>
+ <tr class="<?php echo ($sqlite3_ok) ? 'enabled' : 'disabled'; ?>">
+ <td><a href="http://php.net/sqlite3">SQLite 3</a></td>
+ <td>Enabled</td>
+ <td><?php echo ($sqlite3_ok) ? 'Enabled' : 'Disabled'; ?></td>
+ </tr>
+ </tbody>
+ </table>
+
+ <h3>Settings for php.ini</h3>
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" class="chart">
+ <thead>
+ <tr>
+ <th>Test</th>
+ <th>Would Like To Be</th>
+ <th>What You Have</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr class="<?php echo (!$ini_open_basedir) ? 'enabled' : 'disabled'; ?>">
+ <td><a href="http://php.net/open_basedir">open_basedir</a></td>
+ <td>off</td>
+ <td><?php echo ($ini_open_basedir) ? 'on' : 'off'; ?></td>
+ </tr>
+ <tr class="<?php echo (!$ini_safe_mode) ? 'enabled' : 'disabled'; ?>">
+ <td><a href="http://php.net/safe_mode">safe_mode</a></td>
+ <td>off</td>
+ <td><?php echo ($ini_safe_mode) ? 'on' : 'off'; ?></td>
+ </tr>
+ <tr class="<?php echo ($ini_zend_enable_gc) ? 'enabled' : 'disabled'; ?>">
+ <td><a href="http://php.net/zend.enable_gc">zend.enable_gc</a></td>
+ <td>on</td>
+ <td><?php echo ($ini_zend_enable_gc) ? 'on' : 'off'; ?></td>
+ </tr>
+ </tbody>
+ </table>
+
+ <h3>Other</h3>
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" class="chart">
+ <thead>
+ <tr>
+ <th>Test</th>
+ <th>Would Like To Be</th>
+ <th>What You Have</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr class="<?php echo ($int64_ok) ? 'enabled' : 'disabled'; ?>">
+ <td><a href="https://aws.amazon.com/amis/4158">Architecture</a></td>
+ <td>64-bit</td>
+ <td><?php echo ($int64_ok) ? '64-bit' : '32-bit'; ?><?php if (is_windows()): ?>
+ (<a href="#win64">why?</a>)
+ <?php endif; ?></td>
+ </tr>
+ </tbody>
+ </table>
+
+ <br>
+ </div>
+
+ <?php if ($compatiblity == REQUIREMENTS_ALL_MET): ?>
+ <div class="chunk important ok">
+ <h3>Bottom Line: Yes, you can!</h3>
+ <p>Your PHP environment is ready to go, and can take advantage of all possible features!</p>
+ </div>
+ <div class="chunk">
+ <h3>What's Next?</h3>
+ <p>You can download the latest version of the <a href="http://aws.amazon.com/sdkforphp"><strong>AWS SDK for PHP</strong></a> and install it by <a href="http://aws.amazon.com/articles/4261">following the instructions</a>. Also, check out our library of <a href="http://aws.amazon.com/articles/4262">screencasts and tutorials</a>.</p>
+ <p>Take the time to read <a href="http://aws.amazon.com/articles/4261">"Getting Started"</a> to make sure you're prepared to use the AWS SDK for PHP. No seriously, read it.</p>
+ </div>
+ <?php elseif ($compatiblity == REQUIREMENTS_MIN_MET): ?>
+ <div class="chunk important ok">
+ <h3>Bottom Line: Yes, you can!</h3>
+ <p>Your PHP environment is ready to go! <i>There are a couple of minor features that you won't be able to take advantage of, but nothing that's a show-stopper.</i></p>
+ </div>
+ <div class="chunk">
+ <h3>What's Next?</h3>
+ <p>You can download the latest version of the <a href="http://aws.amazon.com/sdkforphp"><strong>AWS SDK for PHP</strong></a> and install it by <a href="http://aws.amazon.com/articles/4261">following the instructions</a>. Also, check out our library of <a href="http://aws.amazon.com/articles/4262">screencasts and tutorials</a>.</p>
+ <p>Take the time to read <a href="http://aws.amazon.com/articles/4261">"Getting Started"</a> to make sure you're prepared to use the AWS SDK for PHP. No seriously, read it.</p>
+ </div>
+ <?php else: ?>
+ <div class="chunk important error">
+ <h3>Bottom Line: We're sorry&hellip;</h3>
+ <p>Your PHP environment does not support the minimum requirements for the <strong>AWS SDK for PHP</strong>.</p>
+ </div>
+ <div class="chunk">
+ <h3>What's Next?</h3>
+ <p>If you're using a shared hosting plan, it may be a good idea to contact your web host and ask them to install a more recent version of PHP and relevant extensions.</p>
+ <p>If you have control over your PHP environment, we recommended that you upgrade your PHP environment. Check out the "Set Up Your Environment" section of the <a href="http://aws.amazon.com/articles/4261">Getting Started Guide</a> for more information.</p>
+ </div>
+ <?php endif; ?>
+
+ <?php if ($compatiblity >= REQUIREMENTS_MIN_MET): ?>
+ <div class="chunk">
+ <h3>Recommended settings for config.inc.php</h3>
+ <p>Based on your particular server configuration, the following settings are recommended.</p>
+ <br>
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" class="chart">
+ <thead>
+ <tr>
+ <th>Configuration Setting</th>
+ <th>Recommended Value</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>default_cache_config</code></td>
+ <?php if ($apc_ok): ?>
+ <td><code>apc</code></td>
+ <?php elseif ($xcache_ok): ?>
+ <td><code>xcache</code></td>
+ <?php elseif ($file_ok): ?>
+ <td>Any valid, server-writable file system path</td>
+ <?php endif; ?>
+ </tr>
+ <tr>
+ <td><code>certificate_authority</code></td>
+ <?php if (is_windows()): ?>
+ <td id="ssl_check"><code>true</code></td>
+ <?php else: ?>
+ <td id="ssl_check"><img src="<?php echo pathinfo(__FILE__, PATHINFO_BASENAME); ?>?loader" alt="Loading..."></td>
+ <?php endif; ?>
+ </tr>
+ </tbody>
+ </table>
+ <br>
+ </div>
+ <?php endif; ?>
+
+ <div class="chunk">
+ <h3>Give me the details!</h3>
+ <?php if ($compatiblity >= REQUIREMENTS_MIN_MET): ?>
+ <ol>
+ <li><em>Your environment meets the minimum requirements for using the <strong>AWS SDK for PHP</strong>!</em></li>
+
+ <?php if (version_compare(PHP_VERSION, '5.3.0') < 0): ?>
+ <li>You're still running <strong>PHP <?php echo PHP_VERSION; ?></strong>. The PHP 5.2 family is no longer supported by the PHP team, and future versions of the AWS SDK for PHP will <i>require</i> PHP 5.3 or newer.</li>
+ <?php endif; ?>
+
+ <?php if ($openssl_ok): ?>
+ <li>The <a href="http://php.net/openssl">OpenSSL</a> extension is installed. This will allow you to use <a href="http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html">CloudFront Private URLs</a> and decrypt Microsoft&reg; Windows&reg; instance passwords.</li>
+ <?php endif; ?>
+
+ <?php if ($zlib_ok): ?>
+ <li>The <a href="http://php.net/zlib">Zlib</a> extension is installed. The SDK will request gzipped data whenever possible.</li>
+ <?php endif; ?>
+
+ <?php if (!$int64_ok): ?>
+ <li>You're running on a <strong>32-bit</strong> system. This means that PHP does not correctly handle files larger than 2GB (this is a <a href="http://www.google.com/search?q=php+2gb+32-bit">well-known PHP issue</a>). For more information, please see: <a href="http://docs.php.net/manual/en/function.filesize.php#refsect1-function.filesize-returnvalues">PHP filesize: Return values</a>.</li>
+ <?php if (is_windows()): ?>
+ <li id="win64"><em>Note that PHP on Microsoft® Windows® <a href="http://j.mp/php64win">does not support 64-bit integers at all</a>, even if both the hardware and PHP are 64-bit.</em></li>
+ <?php endif; ?>
+ <?php endif; ?>
+
+ <?php if ($ini_open_basedir || $ini_safe_mode): ?>
+ <li>You have <a href="http://php.net/open_basedir">open_basedir</a> or <a href="http://php.net/safe_mode">safe_mode</a> enabled in your <code>php.ini</code> file. Sometimes PHP behaves strangely when these settings are enabled. Disable them if you can.</li>
+ <?php endif; ?>
+
+ <?php if (!$ini_zend_enable_gc): ?>
+ <li>The PHP garbage collector (available in PHP 5.3+) is not enabled in your <code>php.ini</code> file. Enabling <a href="http://php.net/zend.enable_gc">zend.enable_gc</a> will provide better memory management in the PHP core.</li>
+ <?php endif; ?>
+
+ <?php
+ $storage_types = array();
+ if ($file_ok) { $storage_types[] = '<a href="http://php.net/file_put_contents">The file system</a>'; }
+ if ($apc_ok) { $storage_types[] = '<a href="http://php.net/apc">APC</a>'; }
+ if ($xcache_ok) { $storage_types[] = '<a href="http://xcache.lighttpd.net">XCache</a>'; }
+ if ($sqlite_ok && $sqlite3_ok) { $storage_types[] = '<a href="http://php.net/sqlite3">SQLite 3</a>'; }
+ elseif ($sqlite_ok && $sqlite2_ok) { $storage_types[] = '<a href="http://php.net/sqlite">SQLite 2</a>'; }
+ if ($memcached_ok) { $storage_types[] = '<a href="http://php.net/memcached">Memcached</a>'; }
+ elseif ($memcache_ok) { $storage_types[] = '<a href="http://php.net/memcache">Memcache</a>'; }
+ ?>
+ <li>Storage types available for response caching: <?php echo implode(', ', $storage_types); ?></li>
+ </ol>
+
+ <?php if (!$openssl_ok && !$zlib_ok): ?>
+ <p class="footnote"><strong>NOTE:</strong> You're missing the <a href="http://php.net/openssl">OpenSSL</a> extension, which means that you won't be able to take advantage of <a href="http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html">CloudFront Private URLs</a> or decrypt Microsoft&reg; Windows&reg; instance passwords. You're also missing the <a href="http://php.net/zlib">Zlib</a> extension, which means that the SDK will be unable to request gzipped data from Amazon and you won't be able to take advantage of compression with the <i>response caching</i> feature.</p>
+ <?php elseif (!$zlib_ok): ?>
+ <p class="footnote"><strong>NOTE:</strong> You're missing the <a href="http://php.net/zlib">Zlib</a> extension, which means that the SDK will be unable to request gzipped data from Amazon and you won't be able to take advantage of compression with the <i>response caching</i> feature.</p>
+ <?php elseif (!$openssl_ok): ?>
+ <p class="footnote"><strong>NOTE:</strong> You're missing the <a href="http://php.net/openssl">OpenSSL</a> extension, which means that you won't be able to take advantage of <a href="http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html">CloudFront Private URLs</a> or decrypt Microsoft&reg; Windows&reg; instance passwords.</p>
+ <?php endif; ?>
+
+ <?php else: ?>
+ <ol>
+ <?php if (!$php_ok): ?>
+ <li><strong>PHP:</strong> You are running an unsupported version of PHP.</li>
+ <?php endif; ?>
+
+ <?php if (!$curl_ok): ?>
+ <li><strong>cURL:</strong> The <a href="http://php.net/curl">cURL</a> extension is not available. Without cURL, the SDK cannot connect to &mdash; or authenticate with &mdash; Amazon's services.</li>
+ <?php endif; ?>
+
+ <?php if (!$simplexml_ok): ?>
+ <li><strong>SimpleXML:</strong> The <a href="http://php.net/simplexml">SimpleXML</a> extension is not available. Without SimpleXML, the SDK cannot parse the XML responses from Amazon's services.</li>
+ <?php endif; ?>
+
+ <?php if (!$dom_ok): ?>
+ <li><strong>DOM:</strong> The <a href="http://php.net/dom">DOM</a> extension is not available. Without DOM, the SDK cannot transliterate JSON responses from Amazon's services into the common SimpleXML-based pattern used throughout the SDK.</li>
+ <?php endif; ?>
+
+ <?php if (!$spl_ok): ?>
+ <li><strong>SPL:</strong> <a href="http://php.net/spl">Standard PHP Library</a> support is not available. Without SPL support, the SDK cannot autoload the required PHP classes.</li>
+ <?php endif; ?>
+
+ <?php if (!$json_ok): ?>
+ <li><strong>JSON:</strong> <a href="http://php.net/json">JSON</a> support is not available. AWS leverages JSON heavily in many of its services.</li>
+ <?php endif; ?>
+
+ <?php if (!$pcre_ok): ?>
+ <li><strong>PCRE:</strong> Your PHP installation doesn't support Perl-Compatible Regular Expressions (PCRE). Without PCRE, the SDK cannot do any filtering via regular expressions.</li>
+ <?php endif; ?>
+
+ <?php if (!$file_ok): ?>
+ <li><strong>File System Read/Write:</strong> The <a href="http://php.net/file_get_contents">file_get_contents()</a> and/or <a href="http://php.net/file_put_contents">file_put_contents()</a> functions have been disabled. Without them, the SDK cannot read from, or write to, the file system.</li>
+ <?php endif; ?>
+ </ol>
+ <?php endif; ?>
+ </div>
+
+ <div class="chunk">
+ <p class="footnote"><strong>NOTE</strong>: Passing this test does not guarantee that the AWS SDK for PHP will run on your web server &mdash; it only ensures that the requirements have been addressed.</p>
+ </div>
+ </div>
+
+</div>
+
+<?php if (!is_windows()): ?>
+<script type="text/javascript" charset="utf-8">
+reqwest('<?php echo pathinfo(__FILE__, PATHINFO_BASENAME); ?>?ssl_check', function(resp) {
+ $sslCheck = document.getElementById('ssl_check');
+ $sslCheck.innerHTML = '';
+ $sslCheck.innerHTML = '<code>' + resp + '</code>';
+});
+</script>
+<?php endif; ?>
+
+</body>
+</html>
diff --git a/3rdparty/aws-sdk/_compatibility_test/sdk_compatibility_test_cli.php b/3rdparty/aws-sdk/_compatibility_test/sdk_compatibility_test_cli.php
new file mode 100755
index 00000000000..a6632d89787
--- /dev/null
+++ b/3rdparty/aws-sdk/_compatibility_test/sdk_compatibility_test_cli.php
@@ -0,0 +1,186 @@
+#! /usr/bin/env php
+<?php
+
+//Prevent script from being called via browser
+if (PHP_SAPI !== 'cli')
+{
+ die('ERROR: You may only run the compatibility test from the command line.');
+}
+
+// Include the compatibility test logic
+require dirname(__FILE__) . DIRECTORY_SEPARATOR . 'sdk_compatibility.inc.php';
+
+// CLI display
+function success($s = 'Yes')
+{
+ return is_windows() ? $s : "\033[1;37m\033[42m " . $s . " \033[0m";
+}
+
+function info($s = 'Info')
+{
+ return is_windows() ? $s : "\033[1;37m\033[44m " . $s . " \033[0m";
+}
+
+function failure($s = 'No ')
+{
+ return is_windows() ? $s : "\033[1;37m\033[41m " . $s . " \033[0m";
+}
+
+/////////////////////////////////////////////////////////////////////////
+
+echo PHP_EOL;
+
+echo info('AWS SDK for PHP') . PHP_EOL;
+echo 'PHP Environment Compatibility Test (CLI)' . PHP_EOL;
+echo '----------------------------------------' . PHP_EOL;
+echo PHP_EOL;
+
+echo 'PHP 5.2 or newer............ ' . ($php_ok ? (success() . ' ' . phpversion()) : failure()) . PHP_EOL;
+echo '64-bit architecture......... ' . ($int64_ok ? success() : failure()) . (is_windows() ? ' (see note below)' : '') . PHP_EOL;
+echo 'cURL with SSL............... ' . ($curl_ok ? (success() . ' ' . $curl_version['version'] . ' (' . $curl_version['ssl_version'] . ')') : failure($curl_version['version'] . (in_array('https', $curl_version['protocols'], true) ? ' (with ' . $curl_version['ssl_version'] . ')' : ' (without SSL)'))) . PHP_EOL;
+echo 'Standard PHP Library........ ' . ($spl_ok ? success() : failure()) . PHP_EOL;
+echo 'SimpleXML................... ' . ($simplexml_ok ? success() : failure()) . PHP_EOL;
+echo 'DOM......................... ' . ($dom_ok ? success() : failure()) . PHP_EOL;
+echo 'JSON........................ ' . ($json_ok ? success() : failure()) . PHP_EOL;
+echo 'PCRE........................ ' . ($pcre_ok ? success() : failure()) . PHP_EOL;
+echo 'File system read/write...... ' . ($file_ok ? success() : failure()) . PHP_EOL;
+echo 'OpenSSL extension........... ' . ($openssl_ok ? success() : failure()) . PHP_EOL;
+echo 'Zlib........................ ' . ($zlib_ok ? success() : failure()) . PHP_EOL;
+echo 'APC......................... ' . ($apc_ok ? success() : failure()) . PHP_EOL;
+echo 'XCache...................... ' . ($xcache_ok ? success() : failure()) . PHP_EOL;
+echo 'Memcache.................... ' . ($memcache_ok ? success() : failure()) . PHP_EOL;
+echo 'Memcached................... ' . ($memcached_ok ? success() : failure()) . PHP_EOL;
+echo 'PDO......................... ' . ($pdo_ok ? success() : failure()) . PHP_EOL;
+echo 'SQLite 2.................... ' . ($sqlite2_ok ? success() : failure()) . PHP_EOL;
+echo 'SQLite 3.................... ' . ($sqlite3_ok ? success() : failure()) . PHP_EOL;
+echo 'PDO-SQLite driver........... ' . ($pdo_sqlite_ok ? success() : failure()) . PHP_EOL;
+echo 'open_basedir disabled....... ' . (!$ini_open_basedir ? success() : failure()) . PHP_EOL;
+echo 'safe_mode disabled.......... ' . (!$ini_safe_mode ? success() : failure()) . PHP_EOL;
+echo 'Garbage Collector enabled... ' . ($ini_zend_enable_gc ? success() : failure()) . PHP_EOL;
+
+// Test SSL cert
+if (!is_windows())
+{
+ $ch = curl_init();
+ curl_setopt($ch, CURLOPT_URL, 'https://email.us-east-1.amazonaws.com');
+ curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
+ curl_setopt($ch, CURLOPT_HEADER, false);
+ curl_setopt($ch, CURLOPT_NOBODY, true);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
+ curl_setopt($ch, CURLOPT_TIMEOUT, 5184000);
+ curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
+ curl_setopt($ch, CURLOPT_NOSIGNAL, true);
+ curl_setopt($ch, CURLOPT_USERAGENT, 'aws-sdk-php/compat-cli');
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
+ curl_setopt($ch, CURLOPT_VERBOSE, false);
+ curl_exec($ch);
+ $ssl_result = !(curl_getinfo($ch, CURLINFO_SSL_VERIFYRESULT) === 0);
+ curl_close($ch);
+
+ echo 'Valid SSL certificate....... ' . ($ssl_result ? failure() : success()) . PHP_EOL;
+}
+else
+{
+ $ssl_result = false;
+ echo 'Valid SSL certificate....... ' . failure() . ' (will use the bundled certificate instead)' . PHP_EOL;
+}
+
+echo PHP_EOL;
+
+echo '----------------------------------------' . PHP_EOL;
+echo PHP_EOL;
+
+if ($compatiblity >= REQUIREMENTS_MIN_MET)
+{
+ echo success('Your environment meets the minimum requirements for using the AWS SDK for PHP!') . PHP_EOL . PHP_EOL;
+ if (version_compare(PHP_VERSION, '5.3.0') < 0) { echo '* You\'re still running PHP ' . PHP_VERSION . '. The PHP 5.2 family is no longer supported' . PHP_EOL . ' by the PHP team, and future versions of the AWS SDK for PHP will *require*' . PHP_EOL . ' PHP 5.3 or newer.' . PHP_EOL . PHP_EOL; }
+ if ($openssl_ok) { echo '* The OpenSSL extension is installed. This will allow you to use CloudFront' . PHP_EOL . ' Private URLs and decrypt Windows instance passwords.' . PHP_EOL . PHP_EOL; }
+ if ($zlib_ok) { echo '* The Zlib extension is installed. The SDK will request gzipped data' . PHP_EOL . ' whenever possible.' . PHP_EOL . PHP_EOL; }
+ if (!$int64_ok) { echo '* You\'re running on a 32-bit system. This means that PHP does not correctly' . PHP_EOL . ' handle files larger than 2GB (this is a well-known PHP issue).' . PHP_EOL . PHP_EOL; }
+ if (!$int64_ok && is_windows()) { echo '* Note that PHP on Microsoft(R) Windows(R) does not support 64-bit integers' . PHP_EOL . ' at all, even if both the hardware and PHP are 64-bit. http://j.mp/php64win' . PHP_EOL . PHP_EOL; }
+
+ if ($ini_open_basedir || $ini_safe_mode) { echo '* You have open_basedir or safe_mode enabled in your php.ini file. Sometimes' . PHP_EOL . ' PHP behaves strangely when these settings are enabled. Disable them if you can.' . PHP_EOL . PHP_EOL; }
+ if (!$ini_zend_enable_gc) { echo '* The PHP garbage collector (available in PHP 5.3+) is not enabled in your' . PHP_EOL . ' php.ini file. Enabling zend.enable_gc will provide better memory management' . PHP_EOL . ' in the PHP core.' . PHP_EOL . PHP_EOL; }
+
+ $storage_types = array();
+ if ($file_ok) { $storage_types[] = 'The file system'; }
+ if ($apc_ok) { $storage_types[] = 'APC'; }
+ if ($xcache_ok) { $storage_types[] = 'XCache'; }
+ if ($sqlite_ok && $sqlite3_ok) { $storage_types[] = 'SQLite 3'; }
+ elseif ($sqlite_ok && $sqlite2_ok) { $storage_types[] = 'SQLite 2'; }
+ if ($memcached_ok) { $storage_types[] = 'Memcached'; }
+ elseif ($memcache_ok) { $storage_types[] = 'Memcache'; }
+ echo '* Storage types available for response caching:' . PHP_EOL . ' ' . implode(', ', $storage_types) . PHP_EOL . PHP_EOL;
+
+ if (!$openssl_ok) { echo '* You\'re missing the OpenSSL extension, which means that you won\'t be able' . PHP_EOL . ' to take advantage of CloudFront Private URLs or Windows password decryption.' . PHP_EOL . PHP_EOL; }
+ if (!$zlib_ok) { echo '* You\'re missing the Zlib extension, which means that the SDK will be unable' . PHP_EOL . ' to request gzipped data from Amazon and you won\'t be able to take advantage' . PHP_EOL . ' of compression with the response caching feature.' . PHP_EOL . PHP_EOL; }
+}
+else
+{
+ if (!$php_ok) { echo '* ' . failure('PHP:') . ' You are running an unsupported version of PHP.' . PHP_EOL . PHP_EOL; }
+ if (!$curl_ok) { echo '* ' . failure('cURL:') . ' The cURL extension is not available. Without cURL, the SDK cannot' . PHP_EOL . ' connect to -- or authenticate with -- Amazon\'s services.' . PHP_EOL . PHP_EOL; }
+ if (!$simplexml_ok) { echo '* ' . failure('SimpleXML:') . ': The SimpleXML extension is not available. Without SimpleXML,' . PHP_EOL . ' the SDK cannot parse the XML responses from Amazon\'s services.' . PHP_EOL . PHP_EOL; }
+ if (!$dom_ok) { echo '* ' . failure('DOM:') . ': The DOM extension is not available. Without DOM, the SDK' . PHP_EOL . ' Without DOM, the SDK cannot transliterate JSON responses from Amazon\'s' . PHP_EOL . ' services into the common SimpleXML-based pattern used throughout the SDK.' . PHP_EOL . PHP_EOL; }
+ if (!$spl_ok) { echo '* ' . failure('SPL:') . ' Standard PHP Library support is not available. Without SPL support,' . PHP_EOL . ' the SDK cannot autoload the required PHP classes.' . PHP_EOL . PHP_EOL; }
+ if (!$json_ok) { echo '* ' . failure('JSON:') . ' JSON support is not available. AWS leverages JSON heavily in many' . PHP_EOL . ' of its services.' . PHP_EOL . PHP_EOL; }
+ if (!$pcre_ok) { echo '* ' . failure('PCRE:') . ' Your PHP installation doesn\'t support Perl-Compatible Regular' . PHP_EOL . ' Expressions (PCRE). Without PCRE, the SDK cannot do any filtering via' . PHP_EOL . ' regular expressions.' . PHP_EOL . PHP_EOL; }
+ if (!$file_ok) { echo '* ' . failure('File System Read/Write:') . ' The file_get_contents() and/or file_put_contents()' . PHP_EOL . ' functions have been disabled. Without them, the SDK cannot read from,' . PHP_EOL . ' or write to, the file system.' . PHP_EOL . PHP_EOL; }
+}
+
+echo '----------------------------------------' . PHP_EOL;
+echo PHP_EOL;
+
+if ($compatiblity === REQUIREMENTS_ALL_MET)
+{
+ echo success('Bottom Line: Yes, you can!') . PHP_EOL;
+ echo PHP_EOL;
+ echo 'Your PHP environment is ready to go, and can take advantage of all possible features!' . PHP_EOL;
+
+ echo PHP_EOL;
+ echo info('Recommended settings for config.inc.php') . PHP_EOL;
+ echo PHP_EOL;
+
+ echo "CFCredentials::set(array(" . PHP_EOL;
+ echo " '@default' => array(" . PHP_EOL;
+ echo " 'key' => 'aws-key'," . PHP_EOL;
+ echo " 'secret' => 'aws-secret'," . PHP_EOL;
+ echo " 'default_cache_config' => ";
+ if ($apc_ok) echo success('\'apc\'');
+ elseif ($xcache_ok) echo success('\'xcache\'');
+ elseif ($file_ok) echo success('\'/path/to/cache/folder\'');
+ echo "," . PHP_EOL;
+ echo " 'certificate_authority' => " . success($ssl_result ? 'true' : 'false') . PHP_EOL;
+ echo " )" . PHP_EOL;
+ echo "));" . PHP_EOL;
+}
+elseif ($compatiblity === REQUIREMENTS_MIN_MET)
+{
+ echo success('Bottom Line: Yes, you can!') . PHP_EOL;
+ echo PHP_EOL;
+ echo 'Your PHP environment is ready to go! There are a couple of minor features that' . PHP_EOL . 'you won\'t be able to take advantage of, but nothing that\'s a show-stopper.' . PHP_EOL;
+
+ echo PHP_EOL;
+ echo info('Recommended settings for config.inc.php') . PHP_EOL;
+ echo PHP_EOL;
+
+ echo "CFCredentials::set(array(" . PHP_EOL;
+ echo " '@default' => array(" . PHP_EOL;
+ echo " 'key' => 'aws-key'," . PHP_EOL;
+ echo " 'secret' => 'aws-secret'," . PHP_EOL;
+ echo " 'default_cache_config' => ";
+ if ($apc_ok) echo success('\'apc\'');
+ elseif ($xcache_ok) echo success('\'xcache\'');
+ elseif ($file_ok) echo success('\'/path/to/cache/folder\'');
+ echo "," . PHP_EOL;
+ echo " 'certificate_authority' => " . ($ssl_result ? 'false' : 'true') . PHP_EOL;
+ echo " )" . PHP_EOL;
+ echo "));" . PHP_EOL;
+}
+else
+{
+ echo failure('Bottom Line: We\'re sorry...') . PHP_EOL;
+ echo 'Your PHP environment does not support the minimum requirements for the ' . PHP_EOL . 'AWS SDK for PHP.' . PHP_EOL;
+}
+
+echo PHP_EOL;
diff --git a/3rdparty/aws-sdk/_docs/CHANGELOG.md b/3rdparty/aws-sdk/_docs/CHANGELOG.md
new file mode 100644
index 00000000000..52db66f4f6f
--- /dev/null
+++ b/3rdparty/aws-sdk/_docs/CHANGELOG.md
@@ -0,0 +1,1405 @@
+# Changelog: 1.5.6.2 "Gershwin"
+Code name for Apple's never-released successor to the never-released Copeland. <http://en.wikipedia.org/wiki/Gershwin_operating_system>
+
+Launched Tuesday, May 29th, 2012.
+
+## Services
+### AmazonDynamoDB
+- **Fixed:** STS credentials were not always being cached correctly.
+
+----
+
+# Changelog: 1.5.6.1 "Gershwin"
+Code name for Apple's never-released successor to the never-released Copeland. <http://en.wikipedia.org/wiki/Gershwin_operating_system>
+
+Launched Tuesday, May 24th, 2012.
+
+## Services
+### AmazonDynamoDB
+- **Fixed:** STS credentials were not always being cached correctly.
+
+----
+
+# Changelog: 1.5.6 "Gershwin"
+Code name for Apple's never-released successor to the never-released Copeland. <http://en.wikipedia.org/wiki/Gershwin_operating_system>
+
+Launched Tuesday, May 15th, 2012.
+
+## Services
+### AmazonSES
+- **New:** Support for domain verification has been added to the SDK, which enables customers to verify an entire email domain.
+- **New:** Requests to this service are now signed with Signature V4.
+
+----
+
+# Changelog: 1.5.5 "Fishhead"
+Code name for the Apple II File Mangement Utility. <http://applemuseum.bott.org/sections/codenames.html>
+
+Launched Wednesday, May 9, 2012.
+
+## Services
+### AmazonCloudFormation
+* **New:** Requests to this service are now signed with Signature V4.
+
+### AmazonCloudFront
+* **New:** Updated the supported API version to `2012-03-15`.
+
+### AmazonDynamoDB
+* **New:** Support for the US West (Northern California), US West (Oregon), Asia Pacific "Southeast" (Signapore) endpoints have been added.
+
+### AmazonElasticBeanstalk
+* **New:** Support for the new Asia Pacific "Northeast" (Japan) endpoint has been added.
+
+### AmazonStorageGateway
+* **New:** Support for the AWS Storage Gateway service has been added to the SDK.
+
+---
+
+# Changelog: 1.5.4 "Enterprise"
+Code name for Mac OS X Server 1.0 (Rhapsody CR1). <http://en.wikipedia.org/wiki/Rhapsody_(operating_system)>
+
+Launched Thursday, April 19, 2012.
+
+## Bug fixes and enhancements
+* [PHP SDK Bug - Memory leak](https://forums.aws.amazon.com/thread.jspa?threadID=72310)
+* [Does update_object work in 1.5.3?](https://forums.aws.amazon.com/thread.jspa?threadID=89297)
+* [The value of CURLOPT_SSL_VERIFYHOST](https://forums.aws.amazon.com/thread.jspa?threadID=86186)
+* [PHP SDK BUG: s3.class.php Line 2396 on 1.5.2](https://forums.aws.amazon.com/thread.jspa?threadID=86779)
+* [first create_bucket(), then get_bucket_list()](https://forums.aws.amazon.com/thread.jspa?messageID=318885)
+* [Issue with AmazonS3::get_object_list() max-keys](https://forums.aws.amazon.com/thread.jspa?threadID=85878)
+* [Correct the "Bottom line" minimum requirements check](https://github.com/amazonwebservices/aws-sdk-for-php/pull/23)
+* [S3 PHP SDK: copy_object() fails to update the header](http://stackoverflow.com/questions/7677837/s3-php-sdk-copy-object-fails-to-update-the-header)
+* [Adds the following utility methods to simplexml.class.php](https://github.com/amazonwebservices/aws-sdk-for-php/pull/22)
+* [Adding the ability to name a 'rule' for Object Expiration (suggested tweak)](https://forums.aws.amazon.com/thread.jspa?messageID=328023)
+
+## Runtime
+* **New:** Support for Signature Version 4 has been added to the SDK. Signature Version 4 is now the default authentication method for AWS Identity and Access Management, AWS Security Token Service and Amazon CloudSearch.
+
+## Services
+### AmazonCloudFront
+* **New:** Support for a Minimum TTL of zero has been added to the SDK.
+
+### AmazonCloudSearch
+* **New:** Support for Amazon CloudSearch has been added to the SDK. This includes only the Configuration API.
+
+### AmazonDynamoDB
+* **New:** Support for BatchWriteItem API has been added to the SDK.
+* **New:** Support for the European (Ireland) endpoint has been added.
+* **New:** Support for the Asia Pacific "Northeast" (Tokyo) endpoint has been added.
+* **New:** Amazon DynamoDB Session Handler has been added to the SDK.
+* **New:** A simplified interface for adding attributes has been added to the SDK.
+
+### AmazonEC2
+* **New:** The new "m1.medium" instance type is now supported.
+* **New:** Amazon EBS support for Volume Status and Volume Attributes have been added to the SDK.
+* **New:** Amazon EBS support for Conversion Tasks has been added to the SDK.
+* **New:** Amazon EC2 support for the Report Instance Status feature has been added to the SDK.
+* **New:** Amazon VPC support for Network Interfaces has been added to the SDK.
+* **Fixed:** Various parameter fixes have been applied.
+
+### AmazonIAM
+* **New:** Support for Password Policies and the ability to change passwords has been added to the SDK.
+
+### AmazonS3
+* **New:** Support for pre-signed URLs using temporary credentials has been added to the SDK.
+* **New:** Support for setting a custom name to Lifecycle (i.e., Object Expiration) rules has been added to the SDK.
+* **New:** Support for pre-signed URLs with https has been added to the SDK.
+* **Fixed:** Resolved an issue where setting a custom XML parsing class was not being respected.
+* **Fixed:** Resolved an issue where the `get_object_list()` method would return an incorrect number of entries.
+* **Fixed:** Resolved an issue where `update_object()` was attempting to COPY instead of REPLACE.
+* **Fixed:** Resolved an issue stemming from using path-style URLs, `create_bucket()` + `list_bucket()` and the EU-West region.
+* **Fixed:** Resolved an issue where XML responses were not being parsed consistently.
+* **Fixed:** Resolved an issue where Private Streaming URLs contained a double-encoded signature.
+* **Fixed:** The `Expect: 100-continue` HTTP header is now only sent during `create_object()` and `upload_part()` requests.
+
+## Utilities
+### CFRuntime
+* **Fixed:** Resolved an issue where `CURLOPT_SSL_VERIFYHOST` was not set strictly enough.
+* **Fixed:** The `Expect: 100-continue` HTTP header is no longer set on every request.
+
+### CFSimpleXML
+* **New:** Support for `matches()`, `starts_with()` and `ends_with()` methods have been added to the SDK. (Thanks [Wil Moore III](https://github.com/wilmoore)!)
+
+## Compatibility Test
+* **New:** SDK Compatibility Test pages are marked up as to not be indexed by search engines. (Thanks [Eric Caron](http://www.ericcaron.com)!)
+* **Fixed:** Duplicate code between the CLI and web versions of the SDK has been refactored. (Thanks [Jimmy Berry](https://github.com/boombatower)!)
+
+---
+
+# Changelog: 1.5.3 "Darwin"
+UNIX foundation upon which Mac OS X, Apple TV, and iOS are based. <http://en.wikipedia.org/wiki/Darwin_operating_system>
+
+Launched Wednesday, Tuesday, February 21, 2012.
+
+## Bug fixes and enhancements
+* [Fixing Issue with set_distribution_config](https://github.com/amazonwebservices/aws-sdk-for-php/pull/20)
+
+## Services
+### AmazonCloudFront
+* **Fixed:** Resolved an issue where the `set_distribution_config()` method could fail to satisfy an API constraint when using a custom origin server. (Thanks [zoxa](https://github.com/zoxa)!)
+
+### AmazonSWF
+* **New:** Support for the new Amazon Simple Workflow Service has been added to the SDK.
+
+----
+
+# Changelog: 1.5.2 "Copland"
+Code name for Apple's never-released successor to System 7. <http://en.wikipedia.org/wiki/Copland_(operating_system)>
+
+Launched Wednesday, Febraury 1, 2012.
+
+## Bug fixes and enhancements
+* [SSL Cert on PHP SDK 1.5.0.1 ](https://forums.aws.amazon.com/thread.jspa?threadID=84947)
+* [Stream Wrapper need a buffer !](https://forums.aws.amazon.com/thread.jspa?threadID=85436)
+* [Fixing Issue with set_distribution_config](https://github.com/amazonwebservices/aws-sdk-for-php/pull/20)
+* [[Bug] SDK Autoloader Interferes with PHPExcel Autoloader](https://forums.aws.amazon.com/thread.jspa?threadID=85239)
+* [get_object query does not always return the same content type](https://forums.aws.amazon.com/thread.jspa?threadID=84148)
+* [AWSSDKforPHP/authentication/swift_transport_esmtp_signature_handler.class.p ](https://forums.aws.amazon.com/thread.jspa?threadID=85087)
+
+## Runtime
+* **New:** Updated the CA Root Certificates file to version 1.81.
+* **Fixed:** Resolved an issue in the autoloader where the matching logic was too aggressive in certain cases, causing subsequent autoloaders to never trigger.
+
+## Services
+### AmazonAS
+* **New:** Support for Auto Scaling Resource Tagging has been added to the SDK.
+
+### AmazonS3
+* **Fixed:** Resolved an issue where `delete_all_objects()` and `delete_all_object_versions()` was being limited to 1000 items.
+* **Fixed:** Resolved an issue where `delete_bucket()` would fail to delete a bucket with the "force" option enabled if the bucket contained more than 1000 items.
+* **Fixed:** Resolved an issue where JSON documents stored in Amazon S3 would be parsed into a native PHP object when retrieved.
+
+## Utilities
+### S3StreamWrapper
+* **New:** Support for multiple stream wrappers (e.g., one per region) has been added to the SDK.
+* **Fixed:** Writes to Amazon S3 are now buffered, resolving issues with pushing more than 8k of data at a time.
+
+### CFJSON
+* **Fixed:** The JSON-to-XML conversion code is now substantially more robust and better handles encoded characters.
+
+### CacheCore
+* **Changed:** Formerly, attempting to cache to a file system location that didn't exist or was not writable by the PHP process would fail silently. This behavior has been changed to throw a `CacheFile_Exception`.
+
+----
+
+# Changelog: 1.5.1 "Blue"
+Code name for Macintosh System 7. <http://en.wikipedia.org/wiki/System_7>
+
+Launched Wednesday, January 18, 2012.
+
+## Bug fixes and enhancements
+* [Documentation patch](https://github.com/amazonwebservices/aws-sdk-for-php/pull/13)
+* [Removed duplicate comment line.](https://github.com/amazonwebservices/aws-sdk-for-php/pull/17)
+* [CFRuntime credentials handling issue](https://forums.aws.amazon.com/thread.jspa?messageID=310388)
+* [PHP 5.2 bug in AWS SDK for PHP 1.5.x](https://forums.aws.amazon.com/thread.jspa?messageID=311543)
+* [[Bug] Custom Curl Opts Lost During Retry](https://forums.aws.amazon.com/thread.jspa?threadID=84835)
+* [json_last_error doesn't exist before php v 5.3.0](https://github.com/amazonwebservices/aws-sdk-for-php/pull/12)
+* [XML still being parsed when use_cache_flow is false](https://github.com/amazonwebservices/aws-sdk-for-php/pull/15)
+* [Bug ssl_verification option not respected for AmazonS3 ](https://forums.aws.amazon.com/thread.jspa?threadID=83710)
+* [[Bug] Compatibility test for Garbage Collector enabled should use ini_get](https://forums.aws.amazon.com/thread.jspa?threadID=84156)
+
+## Runtime
+* **Fixed:** Corrected an issue where calling `AmazonS3->get_object()` would continue to parse the content if caching was being leveraged. (Thanks [Eric Caron](http://www.ericcaron.com)!)
+* **Fixed:** The autoloader now returns `false` for any class it doesn't match, allowing subsequent autoloaders to catch the class name. (Thanks [Eric Caron](http://www.ericcaron.com)!)
+* **Fixed:** An issue that caused CloudWatch to fail to decompress gzipped data correctly has been resolved.
+* **Fixed:** Resolved an issue with passing explicit credentials without requiring a config file or a `CFCredentials` declaration.
+* **Fixed:** Resolved an issue which causes custom cURL options to be unset from the payload when retrying.
+
+## Services
+### AmazonAS
+* **New:** Support for Amazon SNS notifications and Tagging have been added to the SDK.
+
+### AmazonCloudFront
+* **Fixed:** Resolved an issue with disabling SSL verification.
+* **Fixed:** Resolved an issue where `AmazonCloudFront` were throwing warnings in `E_STRICT` mode.
+
+### AmazonCloudWatch
+* **Fixed:** Resolved an issue with decompressing gzipped data.
+
+### AmazonDynamoDB
+* **New:** Support for Amazon DynamoDB has been added to the SDK.
+* **New:** Amazon DynamoDB requires a default cache configuration to be set in the credential set, otherwise it will not function properly.
+
+### AmazonS3
+* **Fixed:** Resolved an issue with disabling SSL verification.
+* **Fixed:** Resolved multiple documentation issues. (Thanks [Aizat Faiz](http://aizatto.com) and [Jason Ardell](http://ardell.posterous.com/)!)
+* **Fixed:** Resolved an issue where `AmazonS3` were throwing warnings in `E_STRICT` mode.
+
+### AmazonSNS
+* **New:** Support for Short Messaging Service (SMS) endpoints has been added to the SDK.
+* **New:** Support for Subscription Attributes has been added to the SDK.
+
+## Utilities
+### CFJSON
+* **Fixed:** Support for the handling of JSON nulls in PHP 5.2 has been improved. (Thanks [David Chan](http://www.chandeeland.org)!)
+
+## Compatibility Test
+* **Fixed:** The SDK compatibility test now uses `ini_get()` instead of `get_cfg_var()` and `get_cfg_ini()` for more accurate test results.
+
+
+----
+
+# Changelog: 1.5 "Allegro"
+Code name for Mac OS 8.5. <http://en.wikipedia.org/wiki/Mac_OS_8#Mac_OS_8.5>
+
+Launched Wednesday, December 14, 2011
+
+## Credentials
+* !! BACKWARDS-INCOMPATIBLE CHANGE !! - The function signature of all service constructors has changed. Instead of passing a key and secret as the first and second parameters, the constructor now accepts a hash (associative array) containing `key` and `secret` keys. Please see the API reference documentation
+
+## Runtime
+* !! BACKWARDS-INCOMPATIBLE CHANGE !! - The function signature of all service constructors has changed. Instead of passing a key and secret as the first and second parameters, the constructor now accepts a hash (associative array) containing `key` and `secret` keys. If you are explicitly passing a key and secret to the constructor, you will need to change your code. If you are simply inheriting your default credentials from a config file, you don't need to make any changes beyond upgrading your config file to the new 1.5 format. Please see the API reference documentation for more information.
+* !! BACKWARDS-INCOMPATIBLE CHANGE !! - The method by which the `config.inc.php` file maintains its list of credentials has been re-factored and updated to support managing multiple sets of credentials in a single location (e.g., development, staging, production).
+* !! BACKWARDS-INCOMPATIBLE CHANGE !! - The `init()` method has been renamed to `factory()` to better reflect what it actually does.
+* !! BACKWARDS-INCOMPATIBLE CHANGE !! - The `adjust_offset()` method has been removed. Instead, please ensure that the machine's time is set correctly using an [NTP server](https://secure.wikimedia.org/wikipedia/en/wiki/Network_Time_Protocol).
+* !! BACKWARDS-INCOMPATIBLE CHANGE !! - In version 1.4 we enabled a mode where -- for services that supported it -- a set of temporary credentials were fetched and cached before the first request. This functionality has been reverted. The use of short-term credentials must be explicitly enabled by instantiating the `AmazonSTS` class and passing those credentials into the service constructor.
+* **New:** Improved the user directory lookup for the config file.
+* **Changed:** Made `set_region()` an alias of `set_hostname()`.
+
+## Services
+### AmazonAS
+* **New:** Support for the South American (São Paulo) region has been added to the SDK.
+* **New:** Plain english aliases have been added to the SDK: `REGION_VIRGINA`, `REGION_CALIFORNIA`, `REGION_OREGON`, `REGION_IRELAND`, `REGION_SINGAPORE`, `REGION_TOKYO`, `REGION_SAO_PAULO`
+
+### AmazonCloudFormation
+* **New:** Support for the South American (São Paulo) region has been added to the SDK.
+* **New:** Plain english aliases have been added to the SDK: `REGION_VIRGINA`, `REGION_CALIFORNIA`, `REGION_OREGON`, `REGION_IRELAND`, `REGION_SINGAPORE`, `REGION_TOKYO`, `REGION_SAO_PAULO`
+* **New:** Support for cost estimation of CloudFormation templates has been added to the SDK.
+
+### AmazonCloudWatch
+* **New:** Support for the South American (São Paulo) region has been added to the SDK.
+* **New:** Plain english aliases have been added to the SDK: `REGION_VIRGINA`, `REGION_CALIFORNIA`, `REGION_OREGON`, `REGION_IRELAND`, `REGION_SINGAPORE`, `REGION_TOKYO`, `REGION_SAO_PAULO`
+
+### AmazonEC2
+* **New:** Support for the South American (São Paulo) region has been added to the SDK.
+* **New:** Plain english aliases have been added to the SDK: `REGION_VIRGINA`, `REGION_CALIFORNIA`, `REGION_OREGON`, `REGION_IRELAND`, `REGION_SINGAPORE`, `REGION_TOKYO`, `REGION_SAO_PAULO`
+* **New:** Support for 24x7 Reserved Instances has been added to the SDK. For more information, please see [New Amazon EC2 Reserved Instance Options Now Available](https://aws.amazon.com/about-aws/whats-new/2011/12/01/New-Amazon-EC2-Reserved-Instances-Options-Now-Available/).
+* **New:** Support for VPC Spot Instances has been added to the SDK. For more information, please see [Announcing Amazon EC2 Spot Integration with Amazon VPC](https://aws.amazon.com/about-aws/whats-new/2011/10/11/announcing-amazon-ec2-spot-integration-with-amazon-vpc/).
+* **New:** Support for VPC Everywhere has been added to the SDK. For more information, please see [Amazon VPC Generally Available in Multiple AZs in All Regions](https://aws.amazon.com/about-aws/whats-new/2011/08/03/Announcing-VPC-GA/).
+* **New:** Instance Type-related constants have been added to the SDK: `INSTANCE_MICRO`, `INSTANCE_SMALL`, `INSTANCE_LARGE`, `INSTANCE_XLARGE`, `INSTANCE_HIGH_MEM_XLARGE`, `INSTANCE_HIGH_MEM_2XLARGE`, `INSTANCE_HIGH_MEM_4XLARGE`, `INSTANCE_HIGH_CPU_MEDIUM`, `INSTANCE_HIGH_CPU_XLARGE`, `INSTANCE_CLUSTER_4XLARGE`, `INSTANCE_CLUSTER_8XLARGE`, `INSTANCE_CLUSTER_GPU_XLARGE`.
+
+### AmazonElastiCache
+* **New:** Support for US-West 1 (California), EU-West (Ireland), Asia Pacific Southeast (Singapore), and Asia Pacific Northeast (Tokyo) regions has been added to the SDK. For more information, please see [Amazon ElastiCache is now available in four additional AWS Regions and as a CloudFormation template](https://aws.amazon.com/about-aws/whats-new/2011/12/05/amazon-elasticache-new-regions/).
+* **New:** Plain english aliases have been added to the SDK: `REGION_VIRGINA`, `REGION_CALIFORNIA`, `REGION_IRELAND`, `REGION_SINGAPORE`, `REGION_TOKYO`
+
+### AmazonElasticBeanstalk
+* **New:** Plain english aliases have been added to the SDK: `REGION_VIRGINA`
+
+### AmazonELB
+* **New:** Support for the South American (São Paulo) region has been added to the SDK.
+* **New:** Plain english aliases have been added to the SDK: `REGION_VIRGINA`, `REGION_CALIFORNIA`, `REGION_OREGON`, `REGION_IRELAND`, `REGION_SINGAPORE`, `REGION_TOKYO`, `REGION_SAO_PAULO`
+* **New:** Support for ELBs running in VPC has been added to the SDK. For more information, please see [Announcing Elastic Load Balancing in Amazon VPC](https://aws.amazon.com/about-aws/whats-new/2011/11/21/announcing-elastic-load-balancing-in-amazon-vpc/).
+
+### AmazonEMR
+* **New:** Support for the South American (São Paulo) region has been added to the SDK.
+* **New:** Plain english aliases have been added to the SDK: `REGION_VIRGINA`, `REGION_CALIFORNIA`, `REGION_OREGON`, `REGION_IRELAND`, `REGION_SINGAPORE`, `REGION_TOKYO`, `REGION_SAO_PAULO`
+* **New:** Support for EMR AMI Versioning, new Hadoop and Pig versions, and EMR running in VPC has been added to the SDK. For more information, please see [Amazon Elastic MapReduce Announces Support for New Hadoop and Pig Versions, AMI Versioning, and Amazon VPC](https://aws.amazon.com/about-aws/whats-new/2011/12/11/amazon-elastic-mapreduce-ami-versioning-vpc/).
+
+### AmazonIAM
+* **New:** Plain english aliases have been added to the SDK: `REGION_VIRGINA`
+
+### AmazonImportExport
+* **New:** Plain english aliases have been added to the SDK: `REGION_VIRGINA`
+
+### AmazonRDS
+* **New:** Support for the South American (São Paulo) region has been added to the SDK.
+* **New:** Plain english aliases have been added to the SDK: `REGION_VIRGINA`, `REGION_CALIFORNIA`, `REGION_OREGON`, `REGION_IRELAND`, `REGION_SINGAPORE`, `REGION_TOKYO`, `REGION_SAO_PAULO`
+
+### AmazonS3
+* **New:** Support for the South American (São Paulo) region has been added to the SDK.
+* **New:** Plain english aliases have been added to the SDK: `REGION_VIRGINA`, `REGION_CALIFORNIA`, `REGION_OREGON`, `REGION_IRELAND`, `REGION_SINGAPORE`, `REGION_TOKYO`, `REGION_SAO_PAULO`
+* **New:** Support for an S3 Stream Wrapper has been added to the SDK. This enables users to read/write to Amazon S3 as though it were the local file system.
+**Fixed:** The `get_object()` method no longer attempts to parse XML/JSON content.
+**Fixed:** Simplified S3 region logic. Now uses fully-qualified domain names across the board.
+
+### AmazonSES
+* **New:** Plain english aliases have been added to the SDK: `REGION_VIRGINA`
+
+### AmazonSDB
+* **New:** Support for the South American (São Paulo) region has been added to the SDK.
+* **New:** Plain english aliases have been added to the SDK: `REGION_VIRGINA`, `REGION_CALIFORNIA`, `REGION_OREGON`, `REGION_IRELAND`, `REGION_SINGAPORE`, `REGION_TOKYO`, `REGION_SAO_PAULO`
+
+### AmazonSNS
+* **New:** Support for the South American (São Paulo) region has been added to the SDK.
+* **New:** Plain english aliases have been added to the SDK: `REGION_VIRGINA`, `REGION_CALIFORNIA`, `REGION_OREGON`, `REGION_IRELAND`, `REGION_SINGAPORE`, `REGION_TOKYO`, `REGION_SAO_PAULO`
+
+### AmazonSQS
+* **New:** Support for the South American (São Paulo) region has been added to the SDK.
+* **New:** Plain english aliases have been added to the SDK: `REGION_VIRGINA`, `REGION_CALIFORNIA`, `REGION_OREGON`, `REGION_IRELAND`, `REGION_SINGAPORE`, `REGION_TOKYO`, `REGION_SAO_PAULO`
+
+### AmazonSTS
+* **New:** Plain english aliases have been added to the SDK: `REGION_VIRGINA`
+
+
+----
+
+# Changelog: 1.4.8 "Zanarkand"
+<http://finalfantasy.wikia.com/wiki/Zanarkand>
+
+Launched Wednesday, December 7, 2011
+
+## Services
+### AmazonCloudFront
+* **Fixed:** Merged in a pull request contributed by Ben Lumley: <https://github.com/amazonwebservices/aws-sdk-for-php/pull/11>
+
+### AmazonEC2
+* **Fixed:** Resolved an issue where `set_region()` was not setting the correct endpoint for the region.
+
+### AmazonS3
+* **New:** Support for S3-side multi-object delete has been added to the SDK as the `delete_objects()` method. The implementations of `delete_all_objects()` and `delete_all_object_versions()` have been updated to use this new functionality.
+* **Changed:** XML and JSON responses from `get_object()` are no longer parsed. The raw XML and JSON string content is now returned.
+
+
+----
+
+# Changelog: 1.4.7 "Yuna"
+<http://finalfantasy.wikia.com/wiki/Yuna>
+
+Launched Wednesday, November 9, 2011
+
+## Service Classes
+### AmazonAS
+* **New:** Support for the US-West 2 (Oregon) region has been added to the SDK.
+
+### AmazonCloudFormation
+* **New:** Support for the US-West 2 (Oregon) region has been added to the SDK.
+
+### AmazonCloudWatch
+* **New:** Support for the US-West 2 (Oregon) region has been added to the SDK.
+* **New:** Support for the US GovCloud region has been added to the SDK.
+
+### AmazonEC2
+* **New:** Support for the US-West 2 (Oregon) region has been added to the SDK.
+* **New:** Support for the US GovCloud region has been added to the SDK.
+
+### AmazonELB
+* **New:** Support for the US-West 2 (Oregon) region has been added to the SDK.
+
+### AmazonEMR
+* **New:** Support for the US-West 2 (Oregon) region has been added to the SDK.
+
+### AmazonIAM
+* **New:** Support for the US GovCloud region has been added to the SDK.
+
+### AmazonRDS
+* **New:** Support for the US-West 2 (Oregon) region has been added to the SDK.
+
+### AmazonS3
+* **New:** Support for the US-West 2 (Oregon) region has been added to the SDK.
+* **Fixed:** Resolved an issue where certain bits of metadata were not maintained during a copy operation. <https://forums.aws.amazon.com/thread.jspa?threadID=77630>
+* **Fixed:** Resolved an issue where an unsuccessful lookup of an existing content-type would throw a warning. <https://forums.aws.amazon.com/thread.jspa?threadID=78121>
+* **Fixed:** Resolved an issue where an exception would be thrown when a filesize lookup was attempted on an object that didn't exist. <https://forums.aws.amazon.com/thread.jspa?threadID=78197>
+
+### AmazonSDB
+* **New:** Support for the US-West 2 (Oregon) region has been added to the SDK.
+
+### AmazonSNS
+* **New:** Support for the US-West 2 (Oregon) region has been added to the SDK.
+
+### AmazonSQS
+* **New:** Support for the US-West 2 (Oregon) region has been added to the SDK.
+
+
+----
+
+# Changelog: 1.4.6 "Xezat"
+<http://finalfantasy.wikia.com/wiki/Xezat>
+
+Launched Thursday, November 3, 2011
+
+## Service Classes
+### AmazonIAM
+* **New:** Support for a virtual MFA device. A virtual MFA device uses a software application that can generate six-digit authentication codes that are Open AuTHentication Time-based One-Time Password (OATHTOTP)-compatible. The software application can run on any mobile hardware device, including a smartphone.
+
+
+----
+
+# Changelog: 1.4.5 "Weiss"
+<http://finalfantasy.wikia.com/wiki/Weiss>
+
+Launched Friday, October 21, 2011
+
+## Service Classes
+### AmazonSQS
+* **New:** Support for delayed queues and batch operations has been added to the SDK.
+
+
+----
+
+# Changelog: 1.4.4 "Vaan"
+<http://finalfantasy.wikia.com/wiki/Vaan>
+
+Launched Tuesday, October 12, 2011
+
+## Runtime
+* **Fixed:** Resolved an issue where a segmentation fault is triggererd when there are multiple autoloaders in the stack and one of them doesn't return a value.
+
+## Service Classes
+### AmazonS3
+* **New:** Support for server-side encryption has been added to the SDK.
+
+
+----
+
+# Changelog: 1.4.3 "Ultros"
+<http://finalfantasy.wikia.com/wiki/Ultros>
+
+Launched Friday, September 30, 2011
+
+## Service Classes
+### AmazonCloudFormation
+* **New:** Support for new features in CloudFormation have been added to the SDK.
+
+### AmazonS3
+* **Fixed:** Setting the default cache configuration no longer causes authentication errors in `AmazonS3`.
+
+
+----
+
+# Changelog: 1.4.2.1 "Tiamat, Part II"
+<http://finalfantasy.wikia.com/wiki/Tiamat>
+
+Launched Wednesday, September 7, 2011
+
+## Utility Classes
+### RequestCore
+* **Fixed:** RequestCore has updated the `cacert.pem` file from Mozilla. This update revokes trust from the DigiNotar and Staat der Nederlanden root certificates.
+
+
+----
+
+# Changelog: 1.4.2 "Tiamat"
+<http://finalfantasy.wikia.com/wiki/Tiamat>
+
+Launched Thursday, September 1, 2011
+
+## Service Classes
+### AmazonEC2
+* **Fixed:** Requests made to Amazon EC2 now use the correct API version (2011-07-15).
+
+### AmazonELB
+* **New:** A pre-defined set of ciphers may now be used for SSL termination at the Elastic Load Balancer.
+* **New:** Application servers can now accept secure communication from the corresponding Elastic Load Balancer.
+* **New:** In cases where HTTPS is required for all traffic entering the back-end server, Elastic Load Balancing can now perform health checks using HTTPS.
+* **New:** White list of public keys can now be associated with back-end servers. Elastic Load Balancing authenticates back-end servers with the public keys in the white list and communicates only with back-end servers that pass this authentication check.
+
+## Utility Classes
+### RequestCore
+* **Fixed:** RequestCore has updated the `cacert.pem` file from Mozilla. This update revokes trust from the DigiNotar root certificate.
+
+
+----
+
+# Changelog: 1.4.1 "Sephiroth"
+<http://finalfantasy.wikia.com/wiki/Sephiroth>
+
+Launched Tuesday, August 23, 2011
+
+## Service Classes
+### AmazonElastiCache
+* **New:** Support for Amazon ElastiCache has been added to the SDK.
+
+### AmazonEMR
+* **New:** Support for Hadoop Bootstrap Actions has been added to the SDK.
+* **New:** Support for Amazon Elastic MapReduce on Spot Instances has been added to the SDK.
+* **New:** Support for Termination Protection has been added to the SDK.
+* **Changed:** For the <code>add_instance_groups()</code> method, the <code>$instance_groups</code> and <code>$job_flow_id</code> parameters have been reversed.
+
+## Utility Classes
+### CFHadoopBootstrap
+* **New:** The `CFHadoopBootstrap` class has been added to the SDK. Simplifies the process of working with Hadoop system and daemon configurations in Amazon EMR.
+* **New:** This class extends from the `CFHadoopBase` class.
+
+
+----
+
+# Changelog: 1.4 "Rikku"
+<http://finalfantasy.wikia.com/wiki/Rikku>
+
+Launched Wednesday, August 3, 2011
+
+## Bug fixes and enhancements
+
+## Service Classes
+### AmazonEC2
+* **New:** Support for Session-Based Authentication (SBA) leveraging Amazon Secure Token Service (STS) has been added to the SDK.
+
+### AmazonS3
+* **New:** Support for Session-Based Authentication (SBA) leveraging Amazon Secure Token Service (STS) has been added to the SDK.
+
+### AmazonSNS
+* **New:** Support for Session-Based Authentication (SBA) leveraging Amazon Secure Token Service (STS) has been added to the SDK.
+
+### AmazonSQS
+* **New:** Support for Session-Based Authentication (SBA) leveraging Amazon Secure Token Service (STS) has been added to the SDK.
+
+### AmazonSTS
+* **New:** Support for the Amazon Secure Token Service (STS) has been added to the SDK.
+
+## Utility Classes
+### CFRuntime
+* **New:** The following anonymous datapoints are now collected in aggregate so that we can make more informed decisions about future SDK features: `memory_limit`, `date.timezone`, `open_basedir`, `safe_mode`, `zend.enable_gc`.
+
+## Compatibility Test
+* **New:** Support for verifying the installed SSL certificate has been added to the compatibility test.
+* **New:** Support for verifying the status of `open_basedir` and `safe_mode` has been added to the compatibility test.
+* **New:** Support for verifying the status of the PHP 5.3 garbage collector has been added to the compatibility test.
+* **New:** The compatibility test now recommends optimal values for the `AWS_CERTIFICATE_AUTHORITY` and `AWS_DEFAULT_CACHE_CONFIG` configuration options based on the system's configuration.
+
+
+----
+
+# Changelog: 1.3.7 "Quistis"
+<http://finalfantasy.wikia.com/wiki/Quistis_Trepe>
+
+Launched Monday, July 25, 2011
+
+## Bug fixes and enhancements
+* Addressed minor bug fixes reported via the feedback form in the API Reference.
+
+## Service Classes
+### AmazonAS
+* **Changed:** Introduced backwards-incompatible changes to the <code>put_scheduled_update_group_action()</code> method.
+
+
+----
+
+# Changelog: 1.3.6 "Penelo"
+<http://finalfantasy.wikia.com/wiki/Penelo>
+
+Launched Tuesday, July 12, 2011
+
+## Bug fixes and enhancements
+* [[Bug Report] rawurlencode error when using SES and curlopts](https://forums.aws.amazon.com/thread.jspa?threadID=68484)
+
+## Service Classes
+### AmazonCloudFormation
+* **New:** Support for the `list_stacks()` method has been added to the SDK.
+
+### AmazonElasticBeanstalk
+* **New:** Support for the `swap_environment_cnames()` method has been added to the SDK.
+
+### AmazonS3
+* **Fixed:** Additional information about maximum open connections has been added to the `create_mpu_object()` method.
+
+## Compatibility Test
+* **New:** Now tests whether the system is 64- or 32-bit.
+
+
+----
+
+# Changelog: 1.3.5 "Occuria"
+<http://finalfantasy.wikia.com/wiki/Occuria>
+
+Launched Tuesday, June 21, 2011
+
+## Service Classes
+### AmazonS3
+* **New:** Support for S3 copy part has been added to the SDK.
+
+
+----
+
+# Changelog: 1.3.4 "Nero"
+<http://finalfantasy.wikia.com/wiki/Nero>
+
+Launched Tuesday, June 7, 2011
+
+## Bug fixes and enhancements
+* [Bug in PHP SDK](https://forums.aws.amazon.com/thread.jspa?threadID=67502)
+* [cURL error: SSL certificate problem (60) with aws-sdk-for-php 1.3.3](https://forums.aws.amazon.com/thread.jspa?threadID=68349)
+
+
+## Service Classes
+### AmazonEC2
+* **New:** Support for Local Availability Zone Pricing has been added to the SDK.
+
+### AmazonELB
+* **New:** Elastic Load Balancing provides a special Amazon EC2 security group that you can use to ensure that a back-end Amazon EC2 instance receives traffic only from its load balancer.
+
+### AmazonRDS
+* **New:** Support for Oracle databases has been added to the SDK.
+
+
+## Utility Classes
+### CFArray
+* **New:** Added the init() method which simplifies the process of instantiating and chaining a class.
+* **New:** Added support for associative arrays to `each()`, `map()` and `filter()`.
+
+### CFRequest
+* **New:** Now supports the `AWS_CERTIFICATE_AUTHORITY` configuration option.
+
+
+----
+
+# Changelog: 1.3.3 "Moogle"
+<http://finalfantasy.wikia.com/wiki/Moogle>
+
+Launched Tuesday, May 10, 2011
+
+## Bug fixes and enhancements
+* [Bug in AmazonCloudFront::get_private_object_url](https://forums.aws.amazon.com/thread.jspa?threadID=64004)
+* [SDK 1.3.2 - Call to undefined function json_last_error()](https://forums.aws.amazon.com/thread.jspa?threadID=64767)
+* [CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir](https://forums.aws.amazon.com/thread.jspa?threadID=61333)
+
+
+## Service Classes
+### AmazonCloudFront
+* **Fixed:** Resolved an issue where the expires value for `get_private_object_url()` only accepted a string instead of a string or integer.
+
+### AmazonCloudWatch
+* **New:** Support for CloudWatch custom user metrics has been added to the SDK.
+
+
+## Extensions
+### S3BrowserUpload
+* **New:** Added the `S3BrowserUpload` class to the SDK. This class assists in generating the correct HTML/XHTML markup for uploading files to S3 via an HTML <form> element.
+
+
+## Utility Classes
+### CFArray
+* **New:** Added the `init()` method which simplifies the process of instantiating and chaining a class.
+
+### CFHadoopBase
+* **New:** The `CFHadoopBase` class has been extracted out of `CFHadoopStep` as a shared library.
+
+### CFHadoopStep
+* **New:** The `CFHadoopBase` class has been extracted out of `CFHadoopStep` as a shared library.
+* **New:** This class now extends from the `CFHadoopBase` class.
+
+### CFJSON
+* **Fixed:** Resolved an issue where a PHP 5.3-specific function was being used.
+
+### CFPolicy
+* **New:** Added the init() method which simplifies the process of instantiating and chaining a class.
+
+### CFSimpleXML
+* **New:** Added the init() method which simplifies the process of instantiating and chaining a class.
+
+### RequestCore
+* **Fixed:** Improvements to running in PHP environments with open_basedir enabled.
+* **Fixed:** RequestCore now uses an up-to-date `cacert.pem` file from Mozilla instead of the Certificate Authority that libcurl or libopenssl was compiled with, which should resolve certain issues with making SSL connections to AWS services.
+
+
+----
+
+# Changelog: 1.3.2 "Luna"
+<http://finalfantasy.wikia.com/wiki/Luna_Wolf>
+
+Launched Tuesday, April 5, 2011
+
+## New Features & Highlights (Summary)
+* Support for Dedicated Instances within a Virtual Private Cloud on single-tenant hardware has been added to the SDK.
+* Bug fixes and enhancements:
+ * [AmazonCloudWatch get_metric_statistics returns gzipped body](https://forums.aws.amazon.com/thread.jspa?threadID=62625)
+
+
+## Service Classes
+### AmazonCloudWatch
+* **Fixed:** Worked around an issue where when CloudWatch sends back `Content-Encoding: gzip`, it really means `deflate`. When CloudWatch sends back `Content-Encoding: deflate`, it really means the data isn't encoded at all.
+
+### AmazonEC2
+* **New:** Support for Dedicated Instances within a Virtual Private Cloud on single-tenant hardware has been added to the SDK.
+
+
+----
+
+# Changelog: 1.3.1 "Kraken"
+<http://finalfantasy.wikia.com/wiki/Kraken>
+
+Launched Friday, March 25, 2011
+
+## New Features & Highlights (Summary)
+* Fixed issues with Signature v3 authentication (SES).
+* Added gzip decoding.
+* Added support for converting data to more alternate formats.
+* Bug fixes and enhancements:
+ * [Cannot send email](https://forums.aws.amazon.com/thread.jspa?threadID=62833)
+ * [AmazonCloudWatch get_metric_statistics returns gzipped body](https://forums.aws.amazon.com/thread.jspa?threadID=62625)
+
+
+## Utility Classes
+### CFArray
+* **New:** The `to_json()` and `to_yaml()` methoda have been added to the class.
+
+### CFGzipDecode
+* **New:** Handles a variety of primary and edge cases around gzip/deflate decoding in PHP.
+
+### CFRuntime
+* **New:** Gzip decoding has been added to the SDK.
+* **Fixed:** The previous release contained a regression in the Signature v3 support that affected AmazonSES. This has been resolved.
+* **Fixed:** Completed support for Signature v3 over HTTP connections.
+
+### CFSimpleXML
+* **New:** The `to_stdClass()` and `to_yaml()` methoda have been added to the class.
+
+
+----
+
+# Changelog: 1.3 "Jecht"
+<http://finalfantasy.wikia.com/wiki/Jecht>
+
+Launched Tuesday, March 15, 2011
+
+## New Features & Highlights (Summary)
+* Support for VPC Internet Access has been added to the SDK.
+* Bug fixes and enhancements:
+ * [AmazonEC2::register_image issue](https://forums.aws.amazon.com/thread.jspa?threadID=52499)
+ * [Automatic Parseing of XML objects](https://forums.aws.amazon.com/thread.jspa?threadID=61882)
+
+## Service Classes
+### AmazonEC2
+* **New:** Support for VPC Internet Access has been added to the SDK.
+* **Fixed:** The `$image_location` parameter in the `register_image()` method is no longer required. This is a backwards-incompatible change.
+
+### AmazonS3
+* **Fixed:** Resolved an issue in `get_object()` where using the `lastmodified` and `etag` parameters required both to be set before taking effect. They can now be set independently from each other.
+
+
+## Utility classes
+### CFArray
+* **Changed:** The `reduce()` method has been renamed to `filter()`. `reduce()` is now simply an alias for `filter()`.
+
+### CFJSON
+* **New:** Simplifies the task of normalizing XML and JSON responses as `CFSimpleXML` objects.
+
+### CFRuntime
+* **New:** Preliminary support for Signature v3 over HTTP has been added to the SDK. This is useful for debugging Signature v3 issues over non-HTTPS connections.
+* **Changed:** Classes that use the shared authentication method (i.e., NOT `AmazonS3` or `AmazonCloudFront`) will automatically convert JSON service responses into a `CFSimpleXML` object.
+* **Changed:** Formerly, the SDK would attempt to sniff the content to determine the type. Now, the SDK will check the HTTP response headers for `text/xml`, `application/xml` or `application/json` to determine whether or not to parse the content. If the HTTP response headers are not available, the SDK will still attempt content sniffing.
+
+### CFSimpleXML
+* **New:** The `to_json()` method has been added to the class.
+
+### CFUtilities
+* **New:** The `is_json()` method has been added to the class.
+
+
+----
+
+# Changelog: 1.2.6 "Ifrit"
+<http://finalfantasy.wikia.com/wiki/Ifrit>
+
+Launched Wednesday, March 2, 2011
+
+## New Features & Highlights (Summary)
+* **New:** Support for the new Asia Pacific "Northeast" (Japan) endpoint has been added for all relevant services.
+* **New:** Support for registering callback functions for read/write streams has been added to the SDK. Includes a runnable sample.
+* **Fixed:** Improvements to avoid triggering warnings when PHP is in Safe Mode.
+
+
+## Service Classes
+### AmazonAS
+* **New:** Added a new _class_ constant: `REGION_APAC_NE1`.
+
+### AmazonCloudFormation
+* **New:** Added a new _class_ constant: `REGION_APAC_NE1`.
+
+### AmazonCloudWatch
+* **New:** Added a new _class_ constant: `REGION_APAC_NE1`.
+
+### AmazonEC2
+* **New:** Added a new _class_ constant: `REGION_APAC_NE1`.
+
+### AmazonELB
+* **New:** Added a new _class_ constant: `REGION_APAC_NE1`.
+
+### AmazonRDS
+* **New:** Added a new _class_ constant: `REGION_APAC_NE1`.
+
+### AmazonS3
+* **New:** Added a new _class_ constant: `REGION_APAC_NE1`.
+* **New:** Added support for `ap-northeast-1` as a location constraint when creating a new bucket.
+
+### AmazonSDB
+* **New:** Added a new _class_ constant: `REGION_APAC_NE1`.
+
+### AmazonSNS
+* **New:** Added a new _class_ constant: `REGION_APAC_NE1`.
+
+### AmazonSQS
+* **New:** Added a new _class_ constant: `REGION_APAC_NE1`.
+
+## Utility classes
+### CFRuntime
+* **New:** Support for registering callback functions for read/write streams has been added to the SDK.
+* **New:** Future-proofed for future regional endpoints.
+
+### RequestCore
+* **New:** Support for registering callback functions for read/write streams has been added to the SDK.
+* **Fixed:** Improvements to avoid triggering warnings when PHP is in Safe Mode.
+
+## Samples
+* **New:** A sample demonstrating how to add a command-line progress bar for S3 transfers has been added to the SDK.
+
+
+----
+
+# Changelog: 1.2.5 "Heidegger"
+<http://finalfantasy.wikia.com/wiki/Heidegger>
+
+Launched Thursday, February 24, 2011
+
+## New Features & Highlights (Summary)
+* Support for AWS CloudFormation has been added to the SDK.
+* Bug fixes and enhancements:
+ * [PHP API change_content_type() broken](https://forums.aws.amazon.com/thread.jspa?threadID=59532)
+ * [Bug setting OriginAccessIdentity for a Cloudfront distribution config](https://forums.aws.amazon.com/thread.jspa?threadID=60989)
+
+## Service Classes
+### AmazonCloudFormation
+* **New:** Support for AWS CloudFormation has been added to the SDK.
+
+### AmazonCloudFront
+* **Fixed:** Issues around `update_xml_config()` have been resolved.
+
+### AmazonS3
+* **Fixed:** Issues around `change_content_type()` have been resolved.
+
+
+----
+
+# Changelog: 1.2.4 "Goltanna"
+<http://finalfantasy.wikia.com/wiki/Druksmald_Goltanna>
+
+Launched Wednesday, February 16, 2011
+
+## New Features & Highlights (Summary)
+* Support for IAM account aliases and server certificates has been added to the SDK.
+* Support for Amazon S3 Website Configuration has been added to the SDK.
+* Documentation updates for Amazon RDS and AWS Import/Export.
+* Updated all documentation blocks to adhere to the PHPDoc format. This enables a greater number of tools to take advantage of the SDK documentation.
+* Rolled out a major update to the SDK API Reference.
+
+## Service Classes
+### AmazonIAM
+* **New:** Support for IAM account aliases and server certificates has been added to the SDK.
+
+### AmazonImportExport
+* **New:** Documentation has been updated to note the new US West region support.
+
+### AmazonRDS
+* **New:** Documentation has been updated to note the new support for MySQL 5.5.
+
+### AmazonS3
+* **New:** Support for Amazon S3 Website Configuration has been added to the SDK.
+
+
+----
+
+# Changelog: 1.2.3 "Fayth"
+<http://finalfantasy.wikia.com/wiki/Fayth>
+
+Launched Tuesday, January 25, 2010
+
+## New Features & Highlights (Summary)
+* Support for Amazon Simple Email Service has been added to the SDK.
+
+## Service Classes
+### AmazonSES
+* **New:** Support for Amazon Simple Email Service has been added to the SDK.
+
+
+----
+
+# Changelog: 1.2.2 "Esper"
+<http://finalfantasy.wikia.com/wiki/Esper>
+
+Launched Tuesday, January 18, 2011
+
+## New Features & Highlights (Summary)
+* Support for Amazon Elastic Beanstalk has been added to the SDK.
+* Bug fixes and enhancements:
+ * [AWS PHP S3 Library is not working out of the box](https://forums.aws.amazon.com/thread.jspa?threadID=55174)
+ * [Problem with create_mpu_object() and streaming_read_callback() in S3](https://forums.aws.amazon.com/thread.jspa?threadID=54541)
+ * [Integrated Uranium235's GitHub contributions](https://github.com/Uranium235/aws-sdk-for-php/compare/Streaming)
+
+## Service Classes
+### AmazonElasticBeanstalk
+* **New:** Support for AWS Elastic Beanstalk has been added to the SDK.
+
+### AmazonS3
+* **Fixed:** Major improvements to transferring data over streams.
+
+## Utility classes
+###RequestCore
+* **New:** Upgraded to version 1.4.
+* **Fixed:** Major improvements to transferring data over streams.
+
+
+----
+
+# Changelog: 1.2.1 "Dio"
+<http://finalfantasy.wikia.com/wiki/Dio>
+
+Launched Friday, January 14, 2011
+
+
+## New Features & Highlights (Summary)
+* Support for S3 Response Headers has been added to the SDK.
+* Bug fixes and enhancements:
+ * [copy_object failed between regions](https://forums.aws.amazon.com/thread.jspa?threadID=56893)
+ * [Possible S3 bug with multiple buckets?](https://forums.aws.amazon.com/thread.jspa?threadID=56561)
+
+## Service Classes
+### AmazonS3
+* **New:** Support for S3 Response Headers has been added to the SDK.
+* **New:** Documentation for Amazon S3 has been updated to include large object support details.
+* **New:** The `abort_multipart_uploads_by_date()` method has been added to the SDK, which aborts multipart uploads that were initiated before a specific date.
+* **Fixed:** Resolved an issue where the resource prefix wasn't being reset correctly.
+
+## Utility classes
+### CFArray
+* **New:** Instantiating the class without passing an array will use an empty array instead.
+* **New:** Added the `compress()` method which removes null values from the array.
+* **New:** Added the `reindex()` method which reindexes all array elements starting at zero.
+
+## Compatibility Test
+* **New:** The command-line compatibility test now color-codes the responses.
+
+
+----
+
+# Changelog: 1.2 "Cloud"
+<http://finalfantasy.wikia.com/wiki/Cloud_Strife>
+
+Launched Friday, December 3, 2010
+
+
+## New Features & Highlights (Summary)
+* Support for Amazon AutoScaling, Amazon Elastic MapReduce, and Amazon Import/Export Service has been added to the SDK.
+* Support for metric alarms has been added to Amazon CloudWatch.
+* Support for batch deletion has been added to Amazon SimpleDB.
+* Bug fixes and enhancements:
+ * [EU Region DNS problem](https://forums.aws.amazon.com/thread.jspa?threadID=53028)
+ * [[SimpleDB] Conditional PUT](https://forums.aws.amazon.com/thread.jspa?threadID=55884)
+ * [Suggestions for the PHP SDK](https://forums.aws.amazon.com/thread.jspa?threadID=55210)
+ * [Updating a distribution config](https://forums.aws.amazon.com/thread.jspa?threadID=54888)
+ * [Problem with curlopt parameter in S3](https://forums.aws.amazon.com/thread.jspa?threadID=54532)
+ * [AmazonS3::get_object_list() doesn't consider max-keys option](https://forums.aws.amazon.com/thread.jspa?threadID=55169)
+
+## Base/Runtime class
+* **New:** Added support for an alternate approach to instantiating classes which allows for method chaining (PHP 5.3+).
+* **Changed:** Moved `CHANGELOG.md`, `CONTRIBUTORS.md`, `LICENSE.md` and `NOTICE.md` into a new `_docs` folder.
+* **Changed:** Renamed the `samples` directory to `_samples`.
+* **Changed:** Changed the permissions for the SDK files from `0755` to `0644`.
+* **Fixed:** Resolved an issue where attempting to merge cURL options would fail.
+
+## Service Classes
+### AmazonAS
+* **New:** Support for the Amazon AutoScaling Service has been added to the SDK.
+
+### AmazonCloudFront
+* **Fixed:** Resolved an issue where the incorrect formatting of an XML element prevented the ability to update the list of trusted signers.
+
+### AmazonCloudWatch
+* **New:** Support for the Amazon CloudWatch `2010-08-01` service release expands Amazon's cloud monitoring offerings with custom alarms.
+* **Changed:** The changes made to the `get_metric_statistics()` method are backwards-incompatible with the previous release. The `Namespace` and `Period` parameters are now required and the parameter order has changed.
+
+### AmazonEMR
+* **New:** Support for the Amazon Elastic MapReduce Service has been added to the SDK.
+
+### AmazonImportExport
+* **New:** Support for the Amazon Import/Export Service has been added to the SDK.
+
+### AmazonS3
+* **Fixed:** Resolved an issue in the `create_bucket()` method that caused the regional endpoint to be reset to US-Standard.
+* **Fixed:** Resolved an issue in the `get_object_list()` method where the `max-keys` parameter was ignored.
+
+### AmazonSDB
+* **New:** Support for `BatchDeleteAttributes` has been added to the SDK.
+* **Fixed:** Resolved an issue where the `Expected` condition was not respected by `put_attributes()` or `delete_attributes()`.
+
+
+## Utility classes
+### CFComplexType
+* **New:** You can now assign a `member` parameter to prefix all list identifiers.
+* **Changed:** The `option_group()` method is now `public` instead of `private`.
+* **Changed:** Rewrote the `to_query_string()` method to avoid the use of PHP's `http_build_query()` function because it uses `urlencode()` internally instead of `rawurlencode()`.
+
+### CFHadoopStep
+* **New:** Simplifies the process of working with Hadoop steps in Amazon EMR.
+
+### CFManifest
+* **New:** Simplifies the process of constructing YAML manifest documents for Amazon Import/Export Service.
+
+### CFStepConfig
+* **New:** Simplifies the process of working with step configuration in Amazon EMR.
+
+
+## Third-party Libraries
+### CacheCore
+* **Changed:** The `generate_timestamp()` method is now `protected` instead of `private`.
+
+
+----
+
+# Changelog: 1.1 "Barret"
+<http://finalfantasy.wikia.com/wiki/Barret_Wallace>
+
+Launched Wednesday, November 10, 2010
+
+
+## New Features & Highlights (Summary)
+* Support for Amazon ELB, Amazon RDS and Amazon VPC has been added to the SDK.
+* Support for the Amazon S3 multipart upload feature has been added to the SDK. This feature enables developers upload large objects in a series of requests for improved upload reliability.
+* Support for the Amazon CloudFront custom origin (2010-11-01 release) feature has been added to the SDK. This feature enables developers to use custom domains as sources for Amazon CloudFront distributions.
+* The `AmazonS3` class now supports reading from and writing to open file resources in addition to the already-supported file system paths.
+* You can now seek to a specific byte-position within a file or file resource and begin streaming from that point when uploading or downloading objects.
+* The methods `get_bucket_filesize()`, `get_object_list()`, `delete_all_objects()` and `delete_all_object_versions()` are no longer limited to 1000 entries and will work correctly for all entries.
+* Requests that have errors at the cURL level now throw exceptions containing the error message and error code returned by cURL.
+* Bug fixes and enhancements:
+ * [Bug in Samples](http://developer.amazonwebservices.com/connect/thread.jspa?threadID=52748)
+ * [EU Region DNS problem](http://developer.amazonwebservices.com/connect/thread.jspa?threadID=53028)
+ * [AmazonS3 get_bucket_object_count](http://developer.amazonwebservices.com/connect/thread.jspa?threadID=52976)
+ * [S3: get_object_list() fatal error](http://developer.amazonwebservices.com/connect/thread.jspa?threadID=53418)
+ * [S3 get_object_metadata() problems](http://developer.amazonwebservices.com/connect/thread.jspa?threadID=54244)
+ * [Bug in authenticate in sdk.class.php](http://developer.amazonwebservices.com/connect/thread.jspa?threadID=53117)
+ * [How to use Prefix with "get_object_list"?](http://developer.amazonwebservices.com/connect/thread.jspa?threadID=52987)
+ * [SignatureDoesNotMatch with utf-8 in SimpleDB](http://developer.amazonwebservices.com/connect/thread.jspa?threadID=52798)
+ * [Suggestion for the PHP SDK concerning streaming](http://developer.amazonwebservices.com/connect/thread.jspa?threadID=52787)
+ * [get_bucket_filesize only returns filesize for first 1000 objects](http://developer.amazonwebservices.com/connect/thread.jspa?threadID=53786)
+
+
+## Base/Runtime class
+* **Changed:** Port numbers other than 80 and 443 are now part of the signature.
+* **Changed:** When putting UTF-8 characters via HTTP `POST`, a `SignatureDoesNotMatch` error would be returned. This was resolved by specifying the character set in the `Content-Type` header.
+
+
+## Service Classes
+### AmazonCloudFront
+* **New:** Support for the Amazon CloudFront non-S3 origin feature (2010-11-01 release) has been added to the SDK. This feature enables developers to use non-S3 domains as sources for Amazon CloudFront distributions.
+
+### AmazonEC2
+* **New:** Support for Amazon Virtual Private Cloud has been added to the SDK.
+
+### AmazonELB
+* **New:** Support for Amazon Elastic Load Balancing Service has been added to the SDK.
+
+### AmazonIAM
+* **Fixed:** Removed `set_region()` as IAM only supports a single endpoint.
+
+### AmazonRDS
+* **New:** Support for Amazon Relational Database Service has been added to the SDK.
+
+### AmazonS3
+* **New:** Support for the Amazon S3 multipart upload feature has been added to the SDK. This feature enables developers upload large objects in a series of requests for improved upload reliability.
+* **New:** The `fileUpload` and `fileDownload` options now support reading from and writing to open file resources in addition to the already-supported file system paths.
+* **Fixed:** In Amazon S3, requests directly to the eu-west endpoint must use the path-style URI. The set_region() method now takes this into account.
+* **Fixed:** As of version 1.0.1, CFSimpleXML extends SimpleXMLIterator instead of SimpleXMLElement. This prevented the `__call()` magic method from firing when `get_object_list()` was used.
+* **Fixed:** The `preauth` option for the `get_object_list()` method has been removed from the documentation as it is not supported.
+* **Fixed:** The methods `get_bucket_filesize()`, `get_object_list()`, `delete_all_objects()` and `delete_all_object_versions()` are no longer limited to 1000 entries and will work correctly for all entries.
+* **Fixed:** Using `delete_bucket()` to force-delete a bucket now works correctly for buckets with more than 1000 versions.
+* **Fixed:** The response from the `get_object_metadata()` method now includes all supported HTTP headers, including metadata stored in `x-amz-meta-` headers.
+* **Fixed:** Previously, if the `get_object_metadata()` method was called on a non-existant object, metadata for the alphabetically-next object would be returned.
+
+### AmazonSQS
+* **New:** The `get_queue_arn()` method has been added to the `AmazonSQS` class, which converts a queue URI to a queue ARN.
+
+
+## Utility classes
+### CFSimpleXML
+* **New:** Added `to_string()` and `to_array()` methods.
+
+
+## Third-party Libraries
+### RequestCore
+* **New:** Upgraded to version 1.3.
+* **New:** Added `set_seek_position()` for seeking to a byte-position in a file or file resource before starting an upload.
+* **New:** Added support for reading from and writing to open file resources.
+* **Fixed:** Improved the reporting for cURL errors.
+
+
+## Compatibility Test
+* **Fixed:** Fixed the links to the Getting Started Guide.
+
+
+----
+
+# Changelog: 1.0.1 "Aeris"
+<http://finalfantasy.wikia.com/wiki/Aerith_Gainsborough>
+
+Launched Tuesday, October 12, 2010
+
+
+## New Features & Highlights (Summary)
+* Improved support for running XPath queries against the service response bodies.
+* Added support for request retries and exponential backoff.
+* Added support for HTTP request/response header logging.
+* Bug fixes and enhancements:
+ * [Bug in Samples](http://developer.amazonwebservices.com/connect/thread.jspa?threadID=52748)
+ * [Can't set ACL on object using the SDK](http://developer.amazonwebservices.com/connect/thread.jspa?threadID=52305)
+ * [Range requests for S3 - status codes 200, 206](http://developer.amazonwebservices.com/connect/thread.jspa?threadID=52738)
+ * [S3 change_storage_redundancy() function clears public-read ACL](http://developer.amazonwebservices.com/connect/thread.jspa?threadID=52652)
+
+
+## Base/Runtime class
+* **New:** Added support for request retries and exponential backoff for all `500` and `503` HTTP status codes.
+* **New:** Added the `enable_debug_mode()` method to enable HTTP request/response header logging to `STDERR`.
+
+
+## Service Classes
+### AmazonS3
+* **Fixed:** Lots of tweaks to the documentation.
+* **Fixed:** The `change_content_type()`, `change_storage_redundancy()`, `set_object_acl()`, and `update_object()` methods now respect the existing content-type, storage redundancy, and ACL settings when updating.
+* **New:** Added the `get_object_metadata()` method has been added as a singular interface for obtaining all available metadata for an object.
+
+
+## Utility Classes
+### CFArray
+* **New:** Added the `each()` method which accepts a callback function to execute for each entry in the array. Works similarly to [jQuery's each()](http://api.jquery.com/each).
+* **New:** Added the `map()` method which accepts a callback function to execute for each entry in the array. Works similarly to [jQuery's map()](http://api.jquery.com/map).
+* **New:** Added the `reduce()` method which accepts a callback function to execute for each entry in the array. Works similarly to [DomCrawler reduce()](http://github.com/symfony/symfony/blob/master/src/Symfony/Component/DomCrawler/Crawler.php) from the [Symfony 2](http://symfony-reloaded.org) Preview Release.
+* **New:** Added the `first()` and `last()` methods to return the first and last nodes in the array, respectively.
+
+### CFInfo
+* **New:** Retrieves information about the current installation of the AWS SDK for PHP.
+
+### CFSimpleXML
+* **New:** Added the `query()` method, which allows for XPath queries while the results are wrapped in a `CFArray` response.
+* **New:** Added the `parent()` method, which allows for traversing back up the document tree.
+* **New:** Added the `stringify()` method, which typecasts the value as a string.
+* **New:** Added the `is()` and `contains()` methods, which allow for testing whether the XML value is or contains a given value, respectively.
+* **Changed:** Now extends the `SimpleXMLIterator` class, which in-turn extends the `SimpleXMLElement` class. This adds new iterator methods to the `CFSimpleXML` class.
+
+
+## Third-party Libraries
+### CacheCore
+* **New:** Upgraded to version 1.2.
+* **New:** Added a static `init` method that allows for chainable cache initialization (5.3+).
+
+### RequestCore
+* **New:** Added `206` as a successful status code (i.e., Range GET).
+
+
+## Compatibility Test
+* **Fixed:** Some of the links in the compatibility test were missing. These have been fixed.
+
+
+----
+
+# Changelog: AWS SDK for PHP 1.0
+
+Launched Tuesday, September 28, 2010
+
+This is a complete list of changes since we forked from the CloudFusion 2.5.x trunk build.
+
+
+## New Features & Highlights (Summary)
+* The new file to include is `sdk.class.php` rather than `cloudfusion.class.php`.
+* Because of the increased reliance on [JSON](http://json.org) across AWS services, the minimum supported version is now PHP 5.2 ([Released in November 2006](http://www.php.net/ChangeLog-5.php#5.2.0); Justified by these [WordPress usage statistics](http://wpdevel.wordpress.com/2010/07/09/suggest-topics-for-the-july-15-2010-dev/comment-page-1/#comment-8542) and the fact that [PHP 5.2 has been end-of-life'd](http://www.php.net/archive/2010.php#id2010-07-22-1) in favor of 5.3).
+* Up-to-date service support for [EC2](http://aws.amazon.com/ec2), [S3](http://aws.amazon.com/s3), [SQS](http://aws.amazon.com/sqs), [SimpleDB](http://aws.amazon.com/simpledb), [CloudWatch](http://aws.amazon.com/cloudwatch), and [CloudFront](http://aws.amazon.com/cloudfront).
+* Added service support for [SNS](http://aws.amazon.com/sns).
+* Limited testing for third-party API-compatible services such as [Eucalyptus](http://open.eucalyptus.com), [Walrus](http://open.eucalyptus.com) and [Google Storage](http://sandbox.google.com/storage).
+* Improved the consistency of setting complex data types across services. (Required some backwards-incompatible changes.)
+* Added new APIs and syntactic sugar for SimpleXML responses, batch requests and response caching.
+* Moved away from _global_ constants in favor of _class_ constants.
+* Minor, but notable improvements to the monkey patching support.
+* Added a complete list of bug fix and patch contributors. Give credit where credit is due. ;)
+
+**Note: ALL backwards-incompatible changes are noted below. Please review the changes if you are upgrading.** We're making a small number of backwards-incompatible changes in order to improve the consistency across services. We're making these changes _now_ so that we can ensure that future versions will always be backwards-compatible with the next major version change.
+
+
+## File structure
+The package file structure has been refined in a few ways:
+
+* All service-specific classes are inside the `/services/` directory.
+* All utility-specific classes are inside the `/utilities/` directory.
+* All third-party classes are inside the `/lib/` directory.
+
+
+## Base/Runtime class
+* **Fixed:** Resolved issues: [#206](http://code.google.com/p/tarzan-aws/issues/detail?id=206).
+* **New:** The following global constants have been added: `CFRUNTIME_NAME`, `CFRUNTIME_VERSION`, `CFRUNTIME_BUILD`, `CFRUNTIME_URL`, and `CFRUNTIME_USERAGENT`
+* **New:** Now supports camelCase versions of the snake_case method names. (e.g. `getObjectList()` will get translated to `get_object_list()` behind the scenes.)
+* **New:** Added `set_resource_prefix()` and `allow_hostname_override()` (in addition to `set_hostname()`) to support third-party, API-compatible services.
+* **New:** Added new caching APIs: `cache()` and `delete_cache()`, which work differently from the methods they replace. See docs for more information.
+* **New:** Added new batch request APIs, `batch()` and `CFBatchRequest` which are intended to replace the old `returnCurlHandle` optional parameter.
+* **New:** Will look for the `config.inc.php` file first in the same directory (`./config.inc.php`), and then fallback to `~/.aws/sdk/config.inc.php`.
+* **Changed:** Renamed the `CloudFusion` base class to `CFRuntime`.
+* **Changed:** `CloudFusion_Exception` has been renamed as `CFRuntime_Exception`.
+* **Changed:** Renamed the `CloudFusion::$enable_ssl` property to `CFRuntime::$use_ssl`.
+* **Changed:** Renamed the `CloudFusion::$set_proxy` property to `CFRuntime::$proxy`.
+* **Changed:** `CFRuntime::disable_ssl()` no longer takes any parameters. Once SSL is off, it is always off for that class instance.
+* **Changed:** All date-related constants are now class constants of the `CFUtilities` class (e.g. `CFUtilities::DATE_FORMAT_ISO8601`).
+ * Use `CFUtilities::konst()` if you're extending classes and need to do something such as `$this->util::DATE_FORMAT_ISO8601` but keep getting the `T_PAAMAYIM_NEKUDOTAYIMM` error.
+* **Changed:** All `x-cloudfusion-` and `x-tarzan-` HTTP headers are now `x-aws-`.
+* **Changed:** `CloudFusion::autoloader()` is now in its own separate class: `CFLoader::autoloader()`. This prevents it from being incorrectly inherited by extending classes.
+* **Changed:** `RequestCore`, `ResponseCore` and `SimpleXMLElement` are now extended by `CFRequest`, `CFResponse` and `CFSimpleXML`, respectively. These new classes are now used by default.
+* **Changed:** Changes to monkey patching:
+ * You must now extend `CFRequest` instead of `RequestCore`, and then pass that class name to `set_request_class()`.
+ * You must now extend `CFResponse` instead of `ResponseCore`, and then pass that class name to `set_response_class()`.
+ * You can now monkey patch `CFSimpleXML` (extended from `SimpleXMLElement`) with `set_parser_class()`.
+ * You can now monkey patch `CFBatchRequest` with `set_batch_class()`.
+ * No changes for monkey patching `CFUtilities` with `set_utilities_class()`.
+* **Removed:** Removed ALL existing _global_ constants and replaced them with _class_ constants.
+* **Removed:** Removed `cache_response()` and `delete_cache_response()`.
+
+
+## Service classes
+
+### AmazonCloudFront
+* **Fixed:** Resolved issues: [#124](http://code.google.com/p/tarzan-aws/issues/detail?id=124), [#225](http://code.google.com/p/tarzan-aws/issues/detail?id=225), [#229](http://code.google.com/p/tarzan-aws/issues/detail?id=229), [#232](http://code.google.com/p/tarzan-aws/issues/detail?id=232), [#239](http://code.google.com/p/tarzan-aws/issues/detail?id=239).
+* **Fixed:** Fixed an issue where `AmazonCloudFront` sent a `RequestCore` user agent in requests.
+* **New:** Class is now up-to-date with the [2010-07-15](http://docs.amazonwebservices.com/AmazonCloudFront/2010-07-15/APIReference/) API release.
+* **New:** Added _class_ constants for deployment states: `STATE_INPROGRESS` and `STATE_DEPLOYED`.
+* **New:** Now supports streaming distributions.
+* **New:** Now supports HTTPS (as well as HTTPS-only) access.
+* **New:** Now supports Origin Access Identities. Added `create_oai()`, `list_oais()`, `get_oai()`, `delete_oai()`, `generate_oai_xml()` and `update_oai_xml()`.
+* **New:** Now supports private (signed) URLs. Added `get_private_object_url()`.
+* **New:** Now supports default root objects.
+* **New:** Now supports invalidation.
+* **New:** Added `get_distribution_list()`, `get_streaming_distribution_list()` and `get_oai_list()` which return simplified arrays of identifiers.
+* **Changed:** Replaced all of the remaining `CDN_*` constants with _class_ constants.
+
+### AmazonCloudWatch
+* **New:** Added new _class_ constants: `DEFAULT_URL`, `REGION_US_E1`, `REGION_US_W1`, `REGION_EU_W1`, and `REGION_APAC_SE1`.
+* **New:** Now supports the _Northern California_, _European_ and _Asia-Pacific_ regions.
+* **New:** The _global_ `CW_DEFAULT_URL` constant has been replaced by `AmazonCloudFront::DEFAULT_URL`.
+
+### AmazonEC2
+* **Fixed:** Resolved issues: [#124](http://code.google.com/p/tarzan-aws/issues/detail?id=124), [#131](http://code.google.com/p/tarzan-aws/issues/detail?id=131), [#138](http://code.google.com/p/tarzan-aws/issues/detail?id=138), [#139](http://code.google.com/p/tarzan-aws/issues/detail?id=139), [#154](http://code.google.com/p/tarzan-aws/issues/detail?id=154), [#173](http://code.google.com/p/tarzan-aws/issues/detail?id=173), [#200](http://code.google.com/p/tarzan-aws/issues/detail?id=200), [#233](http://code.google.com/p/tarzan-aws/issues/detail?id=233).
+* **New:** Class is now up-to-date with the [2010-06-15](http://docs.amazonwebservices.com/AWSEC2/2010-06-15/APIReference/) API release.
+* **New:** Now supports [Paid AMIs](http://developer.amazonwebservices.com/connect/entry.jspa?externalID=865&categoryID=87).
+* **New:** Now supports [Multiple instance types](http://developer.amazonwebservices.com/connect/entry.jspa?externalID=992&categoryID=87).
+* **New:** Now supports [Elastic IPs](http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1344&categoryID=87).
+* **New:** Now supports [Availability Zones](http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1344&categoryID=87).
+* **New:** Now supports [Elastic Block Store](http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1665&categoryID=87).
+* **New:** Now supports [Windows instances](http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1765&categoryID=87).
+* **New:** Now supports the [European region](http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1926&categoryID=87).
+* **New:** Now supports the _Northern California_ and _Asia-Pacific_ regions.
+* **New:** Now supports [Reserved instances](http://developer.amazonwebservices.com/connect/entry.jspa?externalID=2213&categoryID=87).
+* **New:** Now supports [Shared snapshots](http://developer.amazonwebservices.com/connect/entry.jspa?externalID=2843&categoryID=87).
+* **New:** Now supports [EBS AMIs](http://developer.amazonwebservices.com/connect/entry.jspa?externalID=3105&categoryID=87).
+* **New:** Now supports [Spot instances](http://developer.amazonwebservices.com/connect/entry.jspa?externalID=3215&categoryID=87).
+* **New:** Now supports [Cluster Compute Instances](http://developer.amazonwebservices.com/connect/entry.jspa?externalID=3965&categoryID=87).
+* **New:** Now supports [Placement Groups](http://developer.amazonwebservices.com/connect/entry.jspa?externalID=3965&categoryID=87).
+* **New:** Added new _class_ constants for regions: `REGION_US_E1`, `REGION_US_W1`, `REGION_EU_W1`, `REGION_APAC_SE1`.
+* **New:** Added new _class_ constants for run-state codes: `STATE_PENDING`, `STATE_RUNNING`, `STATE_SHUTTING_DOWN`, `STATE_TERMINATED`, `STATE_STOPPING`, `STATE_STOPPED`.
+* **New:** Added support for decrypting the Administrator password for Microsoft Windows instances.
+* **New:** Instead of needing to pass `Parameter.0`, `Parameter.1`, ...`Parameter.n` individually to certain methods, you can now reliably pass a string for a single value or an indexed array for a list of values.
+* **New:** Limited tested has been done with the Eucalyptus EC2-clone.
+* **Changed:** The `$account_id` parameter has been removed from the constructor.
+* **Changed:** The _global_ `EC2_LOCATION_US` and `EC2_LOCATION_EU` constants have been replaced.
+* **Changed:** The `set_locale()` method has been renamed to `set_region()`. It accepts any of the region constants.
+
+### AmazonIAM
+* **New:** Up-to-date with the [2010-03-31](http://docs.amazonwebservices.com/sns/2010-03-31/api/) API release.
+
+### AmazonS3
+* **Fixed:** Resolved issues: [#31](http://code.google.com/p/tarzan-aws/issues/detail?id=31), [#72](http://code.google.com/p/tarzan-aws/issues/detail?id=72), [#123](http://code.google.com/p/tarzan-aws/issues/detail?id=123), [#156](http://code.google.com/p/tarzan-aws/issues/detail?id=156), [#199](http://code.google.com/p/tarzan-aws/issues/detail?id=199), [#201](http://code.google.com/p/tarzan-aws/issues/detail?id=201), [#203](http://code.google.com/p/tarzan-aws/issues/detail?id=203), [#207](http://code.google.com/p/tarzan-aws/issues/detail?id=207), [#208](http://code.google.com/p/tarzan-aws/issues/detail?id=208), [#209](http://code.google.com/p/tarzan-aws/issues/detail?id=209), [#210](http://code.google.com/p/tarzan-aws/issues/detail?id=210), [#212](http://code.google.com/p/tarzan-aws/issues/detail?id=212), [#216](http://code.google.com/p/tarzan-aws/issues/detail?id=216), [#217](http://code.google.com/p/tarzan-aws/issues/detail?id=217), [#226](http://code.google.com/p/tarzan-aws/issues/detail?id=226), [#228](http://code.google.com/p/tarzan-aws/issues/detail?id=228), [#234](http://code.google.com/p/tarzan-aws/issues/detail?id=234), [#235](http://code.google.com/p/tarzan-aws/issues/detail?id=235).
+* **Fixed:** Fixed an issue where `AmazonS3` sent a `RequestCore` user agent in requests.
+* **New:** Now supports the _Northern California_ and _Asia-Pacific_ regions.
+* **New:** Now supports the new _EU (Ireland)_ REST endpoint.
+* **New:** Now supports MFA Delete.
+* **New:** Now supports Conditional Copy.
+* **New:** Now supports Reduced Redundancy Storage (RRS). Added `change_storage_redundancy()`.
+* **New:** Now supports Object Versioning. Added `enable_versioning()`, `disable_versioning`, `get_versioning_status()`, and `list_bucket_object_versions()`.
+* **New:** Now supports Bucket Policies. Added `set_bucket_policy()`, `get_bucket_policy()`, and `delete_bucket_policy()`.
+* **New:** Now supports Bucket Notifications. Added `create_bucket_notification()`, `get_bucket_notifications()`, and `delete_bucket_notification()`.
+* **New:** Added _class_ constants for regions: `REGION_US_E1`, `REGION_US_W1`, `REGION_EU_W1`, `REGION_APAC_SE1`.
+* **New:** Added _class_ constants for storage types: `STORAGE_STANDARD` and `STORAGE_REDUCED`.
+* **New:** Enhanced `create_object()` with the ability to upload a file from the file system.
+* **New:** Enhanced `get_object()` with the ability to download a file to the file system.
+* **New:** Enhanced `get_bucket_list()` and `get_object_list()` with performance improvements.
+* **New:** Enhanced all GET operations with the ability to generate pre-authenticated URLs. This is the same feature as `get_object_url()` has had, applied to all GET operations.
+* **New:** Limited testing with Walrus, the Eucalyptus S3-clone.
+* **New:** Limited testing with Google Storage.
+* **Changed:** Replaced all of the remaining `S3_*` constants with _class_ constants: `self::ACL_*`, `self::GRANT_*`, `self::USERS_*`, and `self::PCRE_ALL`.
+* **Changed:** Changed the function signature for `create_object()`. The filename is now passed as the second parameter, while the remaining options are now passed as the third parameter. This behavior now matches all of the other object-related methods.
+* **Changed:** Changed the function signature for `head_object()`, `delete_object()`, and `get_object_acl()`. The methods now accept optional parameters as the third parameter instead of simply `returnCurlHandle`.
+* **Changed:** Changed the function signature for `get_object_url()` and `get_torrent_url()`. Instead of passing a number of seconds until the URL expires, you now pass a string that `strtotime()` understands (including `60 seconds`).
+* **Changed:** Changed the function signature for `get_object_url()`. Instead of passing a boolean value for `$torrent`, the last parameter is now an `$opt` variable which allows you to set `torrent` and `method` parameters.
+* **Changed:** Changed how `returnCurlHandle` is used. Instead of passing `true` as the last parameter to most methods, you now need to explicitly set `array('returnCurlHandle' => true)`. This behavior is consistent with the implementation in other classes.
+* **Changed:** Optional parameter names changed in `list_objects()`: `maxKeys` is now `max-keys`.
+* **Changed:** `get_bucket_locale()` is now called `get_bucket_region()`, and returns the response body as a _string_ for easier comparison with class constants.
+* **Changed:** `get_bucket_size()` is now called `get_bucket_object_count()`. Everything else about it is identical.
+* **Changed:** `head_bucket()` is now called `get_bucket_headers()`. Everything else about it is identical.
+* **Changed:** `head_object()` is now called `get_object_headers()`. Everything else about it is identical.
+* **Changed:** `create_bucket()` has two backward-incompatible changes:
+ * Method now **requires** the region (formerly _locale_) to be set.
+ * Method takes an `$acl` parameter so that the ACL can be set directly when creating a new bucket.
+* **Changed:** Bucket names are now validated. Creating a new bucket now requires the more stringent DNS-valid guidelines, while the process of reading existing buckets follows the looser path-style guidelines. This change also means that the reading of path-style bucket names is now supported, when previously they weren’t.
+* **Removed:** Removed `store_remote_file()` because its intended usage repeatedly confused users, and had potential for misuse. If you were using it to upload from the local file system, you should be using `create_object` instead.
+* **Removed:** Removed `copy_bucket()`, `replace_bucket()`, `duplicate_object()`, `move_object()`, and `rename_object()` because only a small number of users used them, and they weren't very robust anyway.
+* **Removed:** Removed `get_bucket()` because it was just an alias for `list_objects()` anyway. Use the latter from now on -- it's identical.
+
+### AmazonSDB
+* **Fixed:** Resolved issues: [#205](http://code.google.com/p/tarzan-aws/issues/detail?id=205).
+* **New:** Class is now up-to-date with the [2009-04-15](http://docs.amazonwebservices.com/AmazonSimpleDB/2009-04-15/DeveloperGuide/) API release.
+* **Changed:** Changed the function signatures for `get_attributes()` and `delete_attributes()` to improve consistency.
+
+### AmazonSNS
+* **New:** Up-to-date with the [2010-03-31](http://docs.amazonwebservices.com/sns/2010-03-31/api/) API release.
+
+### AmazonSQS
+* **Fixed:** Resolved issues: [#137](http://code.google.com/p/tarzan-aws/issues/detail?id=137), [#213](http://code.google.com/p/tarzan-aws/issues/detail?id=213), [#219](http://code.google.com/p/tarzan-aws/issues/detail?id=219), [#220](http://code.google.com/p/tarzan-aws/issues/detail?id=220), [#221](http://code.google.com/p/tarzan-aws/issues/detail?id=221), [#222](http://code.google.com/p/tarzan-aws/issues/detail?id=222).
+* **Fixed:** In CloudFusion 2.5, neither `add_permission()` nor `remove_permission()` were functional. They are now working.
+* **New:** Now supports the _Northern California_ and _Asia-Pacific_ regions.
+* **New:** Now supports the new _US-East (N. Virginia)_ endpoint.
+* **New:** Now supports the new _EU (Ireland)_ endpoint.
+* **New:** Added new _class_ constants for regions: `REGION_US_E1`, `REGION_US_W1`, `REGION_EU_W1`, and `REGION_APAC_SE1`.
+* **Changed:** Because we now support multiple region endpoints, queue names alone are no longer sufficient for referencing your queues. As such, you must now use a full-queue URL instead of just the queue name.
+* **Changed:** The _global_ `SQS_LOCATION_US` and `SQS_LOCATION_EU` constants have been replaced.
+* **Changed:** Renamed `set_locale()` as `set_region()`. It accepts any of the region constants.
+* **Changed:** Changed the function signature for `list_queues()`. See the updated API reference.
+* **Changed:** Changed the function signature for `set_queue_attributes()`. See the updated API reference.
+* **Changed:** Changed how `returnCurlHandle` is used. Instead of passing `true` as the last parameter to most methods, you now need to explicitly set `array('returnCurlHandle' => true)`. This behavior is consistent with the implementation in other classes.
+* **Changed:** Function signature changed in `get_queue_attributes()`. The `$attribute_name` parameter is now passed as a value in the `$opt` parameter.
+
+### AmazonSQSQueue
+* **Removed:** `AmazonSQSQueue` was a simple wrapper around the AmazonSDB class. It generally failed as an object-centric approach to working with SQS, and as such, has been eliminated. Use the `AmazonSQS` class instead.
+
+
+## Utility Classes
+### CFArray
+* **New:** Extends `ArrayObject`.
+* **New:** Simplified typecasting of SimpleXML nodes to native types (e.g. integers, strings).
+
+### CFBatchRequest
+* **New:** Provides a higher-level API for executing batch requests.
+
+### CFComplexType
+* **New:** Used internally by several classes to handle various complex data-types (e.g. single or multiple values, `Key.x.Subkey.y.Value` combinations).
+* **New:** Introduces a way to convert between JSON, YAML, and the PHP equivalent of Lists and Maps (nested associative arrays).
+
+### CFRequest
+* **New:** Sets some project-specific settings and passes them to the lower-level RequestCore.
+
+### CFResponse
+* **New:** No additional changes from the base `ResponseCore` class.
+
+### CFPolicy
+* **New:** Used for constructing Base64-encoded, JSON policy documents to be passed around to other methods.
+
+### CFSimpleXML
+* **New:** Extends `SimpleXMLElement`.
+* **New:** Simplified node retrieval. All SimpleXML-based objects (e.g. `$response->body`) now have magic methods that allow you to quickly retrieve nodes with the same name
+ * e.g. `$response->body->Name()` will return an array of all SimpleXML nodes that match the `//Name` XPath expression.
+
+### CFUtilities
+* **Fixed:** `to_query_string()` now explicitly passes a `&` character to `http_build_query()` to avoid configuration issues with MAMP/WAMP/XAMP installations.
+* **Fixed:** `convert_response_to_array()` has been fixed to correctly return an all-array response under both PHP 5.2 and 5.3. Previously, PHP 5.3 returned a mix of `array`s and `stdClass` objects.
+* **New:** Added `konst()` to retrieve the value of a class constant, while avoiding the `T_PAAMAYIM_NEKUDOTAYIM` error. Misspelled because `const` is a reserved word.
+* **New:** Added `is_base64()` to determine whether or not a string is Base64-encoded data.
+* **New:** Added `decode_uhex()` to decode `\uXXXX` entities back into their unicode equivalents.
+* **Changed:** Changed `size_readable()`. Now supports units up to exabytes.
+* **Changed:** Moved the `DATE_FORMAT_*` _global_ constants into this class as _class_ constants.
+* **Removed:** Removed `json_encode_php51()` now that the minimum required version is PHP 5.2 (which includes the JSON extension by default).
+* **Removed:** Removed `hex_to_base64()`.
+
+
+## Third-party Libraries
+### CacheCore
+* **New:** Upgraded to version 1.1.1.
+* **New:** Now supports both the [memcache](http://php.net/memcache) extension, but also the newer, faster [memcached](http://php.net/memcached) extension. Prefers `memcached` if both are installed.
+* **Deprecated:** Support for MySQL and PostgreSQL as storage mechanisms has been **deprecated**. Since they're using PDO, they'll continue to function (as we're maintaining SQLite support via PDO), but we recommend migrating to using APC, XCache, Memcache or SQLite if you'd like to continue using response caching.
+* New BSD licensed
+* <http://github.com/skyzyx/cachecore>
+
+### RequestCore
+* **New:** Upgraded to version 1.2.
+* **New:** Now supports streaming up and down.
+* **New:** Now supports "rolling" requests for better scalability.
+* New BSD licensed
+* <http://github.com/skyzyx/requestcore>
diff --git a/3rdparty/aws-sdk/_docs/CONTRIBUTORS.md b/3rdparty/aws-sdk/_docs/CONTRIBUTORS.md
new file mode 100644
index 00000000000..3523bf6723c
--- /dev/null
+++ b/3rdparty/aws-sdk/_docs/CONTRIBUTORS.md
@@ -0,0 +1,64 @@
+# Contributors
+
+## AWS SDK for PHP Contributors
+
+Contributions were provided under the Apache 2.0 License, as appropriate.
+
+The following people have provided ideas, support and bug fixes:
+
+* [arech8](http://developer.amazonwebservices.com/connect/profile.jspa?userID=154435) (bug fixes)
+* [Aizat Faiz](http://aizatto.com) (bug fixes)
+* [Ben Lumley](http://github.com/benlumley) (bug fixes)
+* [David Chan](http://www.chandeeland.org) (bug fixes)
+* [Eric Caron](http://www.ericcaron.com) (bug fixes)
+* [Jason Ardell](http://ardell.posterous.com/) (bug fixes)
+* [Jeremy Archuleta](http://code.google.com/u/jeremy.archuleta/) (bug fixes)
+* [Jimmy Berry](http://blog.boombatower.com/) (bug fixes, patches)
+* [Paul Voegler](mailto:voegler@gmx.de) (bug fixes, bug reports, patches)
+* [Peter Bowen](http://github.com/pzb) (feedback, bug reports)
+* [zoxa](https://github.com/zoxa) (bug fixes)
+
+
+## CloudFusion/CacheCore/RequestCore Contributors
+
+Contributions were provided under the New BSD License, as appropriate.
+
+The following people have provided ideas, support and bug fixes:
+
+* [Aaron Collegeman](http://blog.aaroncollegeman.com) (bug fixes)
+* [Alex Schenkel](http://code.google.com/u/alex.schenkel/) (bug fixes)
+* [Andrzej Bednarczyk](http://kreo-consulting.com) (bug fixes)
+* [bprater](http://code.google.com/u/bprater/) (bug fixes)
+* [castoware](http://code.google.com/u/castoware/) (bug fixes)
+* [Chris Chen](http://github.com/chrischen) (bug fixes, patches, support)
+* [Chris Mytton](http://hecticjeff.net) (bug fixes)
+* [evgen.dm](http://code.google.com/u/evgen.dm/) (bug fixes)
+* [gafitescu](http://code.google.com/u/gafitescu/) (bug fixes)
+* [Gary Richardson](http://code.google.com/u/gary.richardson/) (bug fixes)
+* [Gil Hildebrand](http://squidoo.com) (bug fixes)
+* [Guilherme Blanco](http://blog.bisna.com) (bug fixes)
+* [hammjazz](http://code.google.com/u/hammjazz/) (bug fixes)
+* [HelloBunty](http://code.google.com/u/HelloBunty/) (bug fixes)
+* [inputrequired](http://code.google.com/u/inputrequired/) (bug fixes)
+* [Ivo Beckers](http://infopractica.nl) (bug fixes)
+* [Jason Litka](http://jasonlitka.com) (bug fixes, patches)
+* [Jeremy Archuleta](http://code.google.com/u/jeremy.archuleta/) (bug fixes)
+* [John Beales](http://johnbeales.com) (bug fixes)
+* [John Parker](http://code.google.com/u/john3parker/) (bug fixes)
+* [Jon Cianciullo](http://code.google.com/u/jon.cianciullo/) (bug fixes)
+* [kris0476](http://code.google.com/u/kris0476/) (bug fixes)
+* [Matt Terenzio](http://jour.nali.st/blog) (bug fixes, patches)
+* [Mike Jetter](http://mbjetter.com) (bug fixes)
+* [Morten Blinksbjerg Nielsen](http://mbn.dk) (bug fixes)
+* [nathell](http://code.google.com/u/nathell/) (bug fixes)
+* [nickgsuperstar](http://code.google.com/u/nickgsuperstar/) (bug fixes)
+* [ofpichon](http://code.google.com/u/ofpichon/) (bug fixes)
+* [Otavio Ferreira](http://otaviofff.me) (bug fixes)
+* [Paul Voegler](mailto:voegler@gmx.de) (bug fixes, bug reports, patches)
+* [Steve Brozosky](http://code.google.com/u/@UBZWSlJVBxhHXAN1/) (bug fixes)
+* [Steve Chu](http://stevechu.org) (bug fixes)
+* [tommusic](http://code.google.com/u/tommusic/) (bug fixes)
+* [Tyler Hall](http://clickontyler.com) (bug fixes)
+* [webcentrica.co.uk](http://code.google.com/u/@VhBQQldUBBBEXAF1/) (bug fixes)
+* [worden341](http://github.com/worden341) (bug fixes)
+* [yakkyjunk](http://code.google.com/u/yakkyjunk/) (bug fixes)
diff --git a/3rdparty/aws-sdk/_docs/DYNAMODBSESSIONHANDLER.html b/3rdparty/aws-sdk/_docs/DYNAMODBSESSIONHANDLER.html
new file mode 100644
index 00000000000..8b1545db50a
--- /dev/null
+++ b/3rdparty/aws-sdk/_docs/DYNAMODBSESSIONHANDLER.html
@@ -0,0 +1,235 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8">
+ <title>README</title>
+ <style type="text/css" media="screen">
+ body {
+ font: 18px/1.5em 'Book Antiqua', 'Palatino Linotype', Palatino, 'Minion Pro', Cambria, Georgia, serif;
+ padding: 50px 10%;
+ max-width: 1000px;
+ margin: 0 auto;
+ color: #080000;
+ background-color: #fbfbf9;
+ }
+ code {
+ font: 13px/1.4em Monaco, monospace;
+ background-color: #f3f3f3;
+ color: #444;
+ padding: 1px 2px;
+
+ border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ }
+ pre {
+ border: 1px solid #ddd;
+ border-left: 6px solid #c0c0c0;
+ background-color: #f3f3f3;
+ color: #444;
+ font: 13px/1.4em Monaco, monospace;
+ overflow: auto;
+
+ margin: 1em 0 1.5em 0;
+ padding: 1em;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+
+ -webkit-border-top-right-radius: 5px;
+ -webkit-border-bottom-right-radius: 5px;
+ -moz-border-radius-topright: 5px;
+ -moz-border-radius-bottomright: 5px;
+ border-top-right-radius: 5px;
+ border-bottom-right-radius: 5px;
+ }
+ pre code {
+ font-family: inherit;
+ font-size: inherit;
+ background-color: inherit;
+ color: inherit;
+ padding: 0;
+
+ border-radius: none;
+ -webkit-border-radius: none;
+ -moz-border-radius: none;
+ }
+ a {
+ color: #326EA1;
+ text-decoration: underline;
+ padding: 1px 2px;
+ -webkit-transition: background-color 0.15s;
+ -webkit-transition: color 0.15s;
+ -moz-transition: background-color 0.15s;
+ -moz-transition: color 0.15s;
+ transition: background-color 0.15s;
+ transition: color 0.15s;
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ border-radius: 2px;
+ }
+ a:hover, a.hover {
+ color: #fff;
+ background-color: #333;
+ text-decoration: none;
+ padding: 1px 2px;
+ }
+ a.active {
+ font-weight: bold;
+ }
+ h1, h2, h3, h4, h5, h6 {
+ padding: 0.8em 0 0.2em 0;
+ margin: 0;
+ }
+ h1 {
+ margin-top: 30px;
+ padding: 15px 0 5px 5px;
+ font-size: 2em;
+ line-height: 1.3em;
+ border-bottom: 3px solid #cdcdcc;
+ }
+ h2 {
+ margin-top: 30px;
+ padding: 15px 0 5px 5px;
+ font-size: 1.5em;
+ line-height: 1.3em;
+ border-bottom: 1px solid #cdcdcc;
+ }
+ li {
+ margin: 0;
+ padding: 0;
+ }
+ em, i {
+ font-style: italic;
+ }
+ strong, b {
+ font-weight: bold;
+ color: #000;
+ }
+ p {
+ margin: 0;
+ padding: 0.5em 0;
+ }
+ ul.columns {
+ -moz-column-count: 3;
+ -moz-column-gap: 20px;
+ -webkit-column-count: 3;
+ -webkit-column-gap: 20px;
+ column-count: 3;
+ column-gap: 20px;
+ }
+ dl dt {
+ font: 13px/1.4em Monaco, monospace;
+ font-weight: bold;
+ }
+ dl dd {
+ margin-bottom: 0.5em;
+ }
+ </style>
+ </head>
+ <body>
+ <h1>DynamoDB Session Handler</h1>
+ <p>The <strong>DynamoDB Session Handler</strong> is a custom session handler for PHP that allows Amazon DynamoDB to be used as a session store while still using PHP&rsquo;s native session functions.</p>
+
+ <h2>What issues does this address?</h2>
+ <p>The native PHP session handler stores sessions on the local file system. This is unreliable in distributed web applications, because the user may be routed to servers that do not contain the session data. To solve this problem, PHP developers have implemented custom solutions for storing user session data using databases, shared file systems, Memcache servers, tamper-proof cookies, etc., by taking advantage of the interface provided by PHP via the <code>session_set_save_handler()</code> function. Unfortunately, most of these solutions require a lot of configuration or prior knowledge about the storage mechanism in order to setup. Some of them also require the provisioning or management of additional servers.</p>
+
+ <h2>Proposed solution</h2>
+ <p>The DynamoDB Session Handler uses Amazon DynamoDB as a session store, which alleviates many of the problems with existing solutions. There are no additional servers to manage, and there is very little configuration required. The Amazon DynamoDB is also fundamentally designed for low latency (the data is even stored on <abbr title="Solid State Drive">SSD</abbr>s), so the performance impact is much smaller when compared to other databases. Since the Session Handler is designed to be a drop in replacement for the default PHP session handler, it also implements session locking in a familiar way.</p>
+
+ <h2>How do I use it?</h2>
+ <p>The first step is to instantiate the Amazon DynamoDB client and register the session handler.</p>
+ <pre>require_once 'AWSSDKforPHP/sdk.class.php';
+
+// Instantiate the Amazon DynamoDB client.
+// REMEMBER: You need to set 'default_cache_config' in your config.inc.php.
+$dynamodb = new AmazonDynamoDB();
+
+// Register the DynamoDB Session Handler.
+$handler = $dynamodb->register_session_handler(array(
+ 'table_name' => 'my-sessions-table'
+));</pre>
+ <p>Before you can use the session handler, you need to create a table to store the sessions in. This can be done through the <a href="https://console.aws.amazon.com/dynamodb/home">AWS Console for Amazon DynamoDB</a>, or using the session handler class (which you must configure with the table name like in the example above).</p>
+ <pre>// Create a table for session storage with default settings.
+$handler->create_sessions_table();</pre>
+ <p>If you create the table via the AWS Console, you need to make sure the primary key is a string. By default the DynamoDB Session Handler looks for a key named "id", so if you name the key something else, you will need to specify that when you configure the session handler (see the <a href="#configuration">Configuration section</a> below).</p>
+ <p>Once the session handler is registered with a valid table, you can write to (and read from) the session using the standard <code>$_SESSION</code> superglobal.</p>
+ <pre>// Start the session. This will acquire a lock if session locking is enabled.
+session_start();
+
+// Alter the session data.
+$_SESSION['username'] = 'jeremy';
+$_SESSION['role'] = 'admin';
+
+// Close and write to the session.
+// REMEMBER: You should close the session ASAP to release the session lock.
+session_write_close();</pre>
+
+ <h3>Removing expired sessions</h3>
+ <p>The session handler ties into PHP's native session garbage collection functionality, so expired sessions will be deleted periodically and automatically based on how you configure PHP to do the garbage collection. See the PHP manual for the following PHP INI settings: <a href="http://www.php.net/manual/en/session.configuration.php#ini.session.gc-probability">session.gc_probability</a>, <a href="http://www.php.net/manual/en/session.configuration.php#ini.session.gc-divisor">session.gc_divisor</a>, and <a href="http://www.php.net/manual/en/session.configuration.php#ini.session.gc-maxlifetime">session.gc_maxlifetime</a>. You may also manually call the <code>DynamoDBSessionHandler::garbage_collect()</code> to clean up the expired sessions.</p>
+
+ <h2 id="configuration">Configuring the DynamoDB Session Handler</h2>
+ <p>You may configure the behavior of the session handler using a the following settings:</p>
+ <dl>
+ <dt>table_name</dt>
+ <dd>The name of the DynamoDB table in which to store sessions.</dd>
+
+ <dt>hash_key</dt>
+ <dd>The name of the primary hash key in the DynamoDB sessions table.</dd>
+
+ <dt>session_lifetime</dt>
+ <dd>The lifetime of an inactive session before it should be garbage collected. If <code>0</code> is used, then the actual lifetime value that will be used is <code>ini_get('session.gc_maxlifetime')</code>.</dd>
+
+ <dt>consistent_reads</dt>
+ <dd>Whether or not the session handler should do consistent reads from DynamoDB.</dd>
+
+ <dt>session_locking</dt>
+ <dd>Whether or not the session handler should do session locking (see the <a href="#session_locking">Session locking section</a> for more information).</dd>
+
+ <dt>max_lock_wait_time</dt>
+ <dd>Maximum time, in seconds, that the session handler should take to acquire a lock before giving up. Only used if <code>session_locking</code> is <code>true</code>.</dd>
+
+ <dt>min_lock_retry_utime</dt>
+ <dd>Minimum time, in microseconds, that the session handler should wait to retry acquiring a lock. Only used if <code>session_locking</code> is <code>true</code>.</dd>
+
+ <dt>max_lock_retry_utime</dt>
+ <dd>Maximum time, in microseconds, that the session handler should wait to retry acquiring a lock. Only used if <code>session_locking</code> is <code>true</code>.</dd>
+ </dl>
+
+ <p>To configure the Session Handle, you must pass the configuration data into the constructor. (<strong>Note</strong>: The values used below are actually the default settings.)</p>
+ <pre>$dynamodb = new AmazonDynamoDB();
+$handler = $dynamodb->register_session_handler(array(
+ 'table_name' => 'sessions',
+ 'hash_key' => 'id',
+ 'session_lifetime' => 0,
+ 'consistent_reads' => true,
+ 'session_locking' => true,
+ 'max_lock_wait_time' => 15,
+ 'min_lock_retry_utime' => 5000,
+ 'max_lock_retry_utime' => 50000,
+));</pre>
+
+ <h2 id="session_locking">Session locking</h2>
+ <p>The default session handler for PHP locks sessions using a pessimistic locking algorithm. If a request (process) opens a session for reading using the <code>session_start()</code> function, it first acquires a lock. The lock is closed when that request writes back to the session, either when the request is complete, or via the <code>session_write_close()</code> function. Since the DynamoDB Session Handler is meant to be a drop in replacement for the default session handler, it also implements the same locking scheme. However, this can be slow, undesirable, and costly when multiple, simultaneous requests from the same user occur, particularly with ajax requests or HTML iframes. In some cases, you may not want or need the session to be locked. After evaluating whether or not your application actually requires session locking, you may turn off locking when you configure the session handler by setting <code>session_locking</code> to <code>false</code>.</p>
+
+ <h2 id="pricing">Pricing</h2>
+ <p>Aside from nominal data storage and data transfer fees, the costs associated with using Amazon DynamoDB are calculated based on provisioned throughput capacity and item size (see the <a href="http://aws.amazon.com/dynamodb/#pricing">Amazon DynamoDB pricing</a> details). Throughput is measured in units of Read Capacity and Write Capacity. Ultimately, the throughput and costs required for your sessions table is going to be based on your website traffic, but the following is a list of the capacity units required for each session-related operation:</p>
+ <ul>
+ <li><strong>Reading</strong> via <code>session_start()</code>
+ <p>With locking enabled: 1 unit of Write Capacity + 1 unit of Write Capacity for each time it must retry acquiring the lock</p>
+ <p>With locking disabed: 1 unit of Read Capacity (or 0.5 units of Read Capacity if <i>consistent reads</i> are disabled)</p>
+ </li>
+ <li><strong>Writing</strong> via <code>session_write_close()</code>
+ <p>1 unit of Write Capacity</p>
+ </li>
+ <li><strong>Deleting</strong> via <code>session_destroy()</code>
+ <p>1 unit of Write Capacity</p>
+ </li>
+ <li><strong>Garbage Collecting</strong> via <code>DyanamoDBSessionHandler::garbage_collect()</code>
+ <p>0.5 units of Read Capacity per KB of data in the sessions table + 1 unit of Write Capacity per expired item</p>
+ </li>
+ </ul>
+
+ <h2 id="more_information">More information</h2>
+ <p>For more information on the Amazon DynamoDB service please visit the <a href="http://aws.amazon.com/dynamodb">Amazon DynamoDB homepage</a>.</p>
+
+ </body>
+</html>
diff --git a/3rdparty/aws-sdk/_docs/KNOWNISSUES.md b/3rdparty/aws-sdk/_docs/KNOWNISSUES.md
new file mode 100644
index 00000000000..9773c3932b8
--- /dev/null
+++ b/3rdparty/aws-sdk/_docs/KNOWNISSUES.md
@@ -0,0 +1,65 @@
+# Known Issues
+
+## 2GB limit for 32-bit stacks; all Windows stacks.
+
+Because PHP's integer type is signed and many platforms use 32-bit integers, the AWS SDK for PHP does not correctly
+handle files larger than 2GB on a 32-bit stack (where "stack" includes CPU, OS, web server, and PHP binary). This is a
+[well-known PHP issue]. In the case of Microsoft® Windows®, there are no official builds of PHP that support 64-bit
+integers.
+
+The recommended solution is to use a 64-bit Linux stack, such as the [64-bit Amazon Linux AMI] with the latest version of
+PHP installed.
+
+For more information, please see: [PHP filesize: Return values]. A workaround is suggested in
+`AmazonS3::create_mpu_object()` [with files bigger than 2GB].
+
+ [well-known PHP issue]: http://www.google.com/search?q=php+2gb+32-bit
+ [64-bit Amazon Linux AMI]: http://aws.amazon.com/amazon-linux-ami/
+ [PHP filesize: Return values]: http://docs.php.net/manual/en/function.filesize.php#refsect1-function.filesize-returnvalues
+ [with files bigger than 2GB]: https://forums.aws.amazon.com/thread.jspa?messageID=215487#215487
+
+
+## Amazon S3 Buckets containing periods
+
+Amazon S3's SSL certificate covers domains that match `*.s3.amazonaws.com`. When buckets (e.g., `my-bucket`) are accessed
+using DNS-style addressing (e.g., `my-bucket.s3.amazonaws.com`), those SSL/HTTPS connections are covered by the certificate.
+
+However, when a bucket name contains one or more periods (e.g., `s3.my-domain.com`) and is accessed using DNS-style
+addressing (e.g., `s3.my-domain.com.s3.amazonaws.com`), that SSL/HTTPS connection will fail because the certificate
+doesn't match.
+
+The most secure workaround is to change the bucket name to one that does not contain periods. Less secure workarounds
+are to use `disable_ssl()` or `disable_ssl_verification()`. Because of the security implications, calling either of
+these methods will throw a warning. You can avoid the warning by adjusting your `error_reporting()` settings.
+
+
+## Expiring request signatures
+
+When leveraging `AmazonS3::create_mpu_object()`, it's possible that later parts of the multipart upload will fail if
+the upload takes more than 15 minutes.
+
+
+## Too many open file connections
+
+When leveraging `AmazonS3::create_mpu_object()`, it's possible that the SDK will attempt to open too many file resources
+at once. Because the file connection limit is not available to the PHP environment, the SDK is unable to automatically
+adjust the number of connections it attempts to open.
+
+A workaround is to increase the part size so that fewer file connections are opened.
+
+
+## Exceptionally large batch requests
+
+When leveraging the batch request feature to execute multiple requests in parallel, it's possible that the SDK will
+throw a fatal exception if a particular batch pool is exceptionally large and a service gets overloaded with requests.
+
+This seems to be most common when attempting to send a large number of emails with the SES service.
+
+
+## Long-running processes using SSL leak memory
+
+When making requests with the SDK over SSL during long-running processes, there will be a gradual memory leak that can
+eventually cause a crash. The leak occurs within the PHP bindings for cURL when attempting to verify the peer during an
+SSL handshake. See <https://bugs.php.net/61030> for details about the bug.
+
+A workaround is to disable SSL for requests executed in long-running processes.
diff --git a/3rdparty/aws-sdk/_docs/LICENSE.md b/3rdparty/aws-sdk/_docs/LICENSE.md
new file mode 100644
index 00000000000..853ab3bae8e
--- /dev/null
+++ b/3rdparty/aws-sdk/_docs/LICENSE.md
@@ -0,0 +1,151 @@
+# Apache License
+Version 2.0, January 2004
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+
+## 1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1
+through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the
+License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled
+by, or are under common control with that entity. For the purposes of this definition, "control" means
+(i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract
+or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial
+ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software
+source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form,
+including but not limited to compiled object code, generated documentation, and conversions to other media
+types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License,
+as indicated by a copyright notice that is included in or attached to the work (an example is provided in the
+Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from)
+the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent,
+as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not
+include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work
+and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any
+modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to
+Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to
+submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of
+electronic, verbal, or written communication sent to the Licensor or its representatives, including but not
+limited to communication on electronic mailing lists, source code control systems, and issue tracking systems
+that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but
+excluding communication that is conspicuously marked or otherwise designated in writing by the copyright
+owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been
+received by Licensor and subsequently incorporated within the Work.
+
+
+## 2. Grant of Copyright License.
+
+Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare
+Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such
+Derivative Works in Source or Object form.
+
+
+## 3. Grant of Patent License.
+
+Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent
+license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such
+license applies only to those patent claims licensable by such Contributor that are necessarily infringed by
+their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such
+Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim
+or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work
+constitutes direct or contributory patent infringement, then any patent licenses granted to You under this
+License for that Work shall terminate as of the date such litigation is filed.
+
+
+## 4. Redistribution.
+
+You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without
+modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ 2. You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent,
+ trademark, and attribution notices from the Source form of the Work, excluding those notices that do
+ not pertain to any part of the Derivative Works; and
+
+ 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that
+ You distribute must include a readable copy of the attribution notices contained within such NOTICE
+ file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed as part of the Derivative Works; within
+ the Source form or documentation, if provided along with the Derivative Works; or, within a display
+ generated by the Derivative Works, if and wherever such third-party notices normally appear. The
+ contents of the NOTICE file are for informational purposes only and do not modify the License. You may
+ add Your own attribution notices within Derivative Works that You distribute, alongside or as an
+ addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be
+ construed as modifying the License.
+
+You may add Your own copyright statement to Your modifications and may provide additional or different license
+terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative
+Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the
+conditions stated in this License.
+
+
+## 5. Submission of Contributions.
+
+Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by
+You to the Licensor shall be under the terms and conditions of this License, without any additional terms or
+conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate
+license agreement you may have executed with Licensor regarding such Contributions.
+
+
+## 6. Trademarks.
+
+This License does not grant permission to use the trade names, trademarks, service marks, or product names of
+the Licensor, except as required for reasonable and customary use in describing the origin of the Work and
+reproducing the content of the NOTICE file.
+
+
+## 7. Disclaimer of Warranty.
+
+Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor
+provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the
+appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of
+permissions under this License.
+
+
+## 8. Limitation of Liability.
+
+In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless
+required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any
+Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential
+damages of any character arising as a result of this License or out of the use or inability to use the Work
+(including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or
+any and all other commercial damages or losses), even if such Contributor has been advised of the possibility
+of such damages.
+
+
+## 9. Accepting Warranty or Additional Liability.
+
+While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for,
+acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this
+License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole
+responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold
+each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason
+of your accepting any such warranty or additional liability.
+
+
+END OF TERMS AND CONDITIONS
diff --git a/3rdparty/aws-sdk/_docs/NOTICE.md b/3rdparty/aws-sdk/_docs/NOTICE.md
new file mode 100644
index 00000000000..780c2e4c9d5
--- /dev/null
+++ b/3rdparty/aws-sdk/_docs/NOTICE.md
@@ -0,0 +1,444 @@
+# AWS SDK for PHP
+
+Based on [CloudFusion](http://getcloudfusion.com). Includes other third-party software.
+
+See below for complete copyright and licensing notices.
+
+
+## AWS SDK for PHP
+
+<http://aws.amazon.com/php>
+
+Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License").
+You may not use this file except in compliance with the License.
+A copy of the License is located at
+
+<http://aws.amazon.com/apache2.0>
+
+or in the "license" file accompanying this file. This file is distributed
+on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+express or implied. See the License for the specific language governing
+permissions and limitations under the License.
+
+
+## CloudFusion
+
+<http://getcloudfusion.com>
+
+* Copyright 2005-2010 [Ryan Parman](http://ryanparman.com)
+* Copyright 2007-2010 [Foleeo Inc.](http://warpshare.com)
+* Copyright 2007-2010 "CONTRIBUTORS" (see [CONTRIBUTORS.md](CONTRIBUTORS.md) for a list)
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+* Neither the name of the organization nor the names of its contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+<http://opensource.org/licenses/bsd-license.php>
+
+
+## CacheCore
+
+<http://github.com/skyzyx/cachecore>
+
+* Copyright 2007-2010 [Ryan Parman](http://ryanparman.com)
+* Copyright 2007-2010 [Foleeo Inc.](http://warpshare.com)
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+* Neither the name of the organization nor the names of its contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+<http://opensource.org/licenses/bsd-license.php>
+
+
+## RequestCore
+
+<http://github.com/skyzyx/requestcore>
+
+* Copyright 2007-2010 [Ryan Parman](http://ryanparman.com)
+* Copyright 2007-2010 [Foleeo Inc.](http://warpshare.com)
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+* Neither the name of the organization nor the names of its contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+<http://opensource.org/licenses/bsd-license.php>
+
+
+## SimplePie
+
+<http://simplepie.org>
+
+* Copyright 2004-2010 [Ryan Parman](http://ryanparman.com)
+* Copyright 2005-2010 [Geoffrey Sneddon](http://gsnedders.com)
+* Copyright 2008-2011 [Ryan McCue](http://ryanmccue.info)
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+* Neither the name of the organization nor the names of its contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+<http://opensource.org/licenses/bsd-license.php>
+
+
+## Reqwest
+
+<https://github.com/ded/reqwest>
+
+* Copyright 2011 [Dustin Diaz](http://dustindiaz.com)
+
+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.
+
+<http://www.opensource.org/licenses/mit-license.php>
+
+
+## Human readable file sizes
+
+<http://aidanlister.com/2004/04/human-readable-file-sizes/>
+
+* Copyright 2004-2010 [Aidan Lister](http://aidanlister.com)
+* Copyright 2007-2010 [Ryan Parman](http://ryanparman.com)
+
+Redistribution and use in source and binary forms, with or without
+modification, is permitted provided that the following conditions
+are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ 3. The name "PHP" must not be used to endorse or promote products
+ derived from this software without prior written permission. For
+ written permission, please contact group@php.net.
+
+ 4. Products derived from this software may not be called "PHP", nor
+ may "PHP" appear in their name, without prior written permission
+ from group@php.net. You may indicate that your software works in
+ conjunction with PHP by saying "Foo for PHP" instead of calling
+ it "PHP Foo" or "phpfoo"
+
+ 5. The PHP Group may publish revised and/or new versions of the
+ license from time to time. Each version will be given a
+ distinguishing version number.
+ Once covered code has been published under a particular version
+ of the license, you may always continue to use it under the terms
+ of that version. You may also choose to use such covered code
+ under the terms of any subsequent version of the license
+ published by the PHP Group. No one other than the PHP Group has
+ the right to modify the terms applicable to covered code created
+ under this License.
+
+ 6. Redistributions of any form whatsoever must retain the following
+ acknowledgment:
+ "This product includes PHP software, freely available from
+ <http://www.php.net/software/>".
+
+THIS SOFTWARE IS PROVIDED BY THE PHP DEVELOPMENT TEAM ``AS IS'' AND
+ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PHP
+DEVELOPMENT TEAM OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+<http://www.php.net/license/3_01.txt>
+
+
+## Snippets from PHP.net documentation
+
+* `CFUtilities::is_base64()` - Copyright 2008 "debug" <http://us.php.net/manual/en/function.base64-decode.php#81425>
+
+Redistribution and use in source and binary forms, with or without
+modification, is permitted provided that the following conditions
+are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ 3. The name "PHP" must not be used to endorse or promote products
+ derived from this software without prior written permission. For
+ written permission, please contact group@php.net.
+
+ 4. Products derived from this software may not be called "PHP", nor
+ may "PHP" appear in their name, without prior written permission
+ from group@php.net. You may indicate that your software works in
+ conjunction with PHP by saying "Foo for PHP" instead of calling
+ it "PHP Foo" or "phpfoo"
+
+ 5. The PHP Group may publish revised and/or new versions of the
+ license from time to time. Each version will be given a
+ distinguishing version number.
+ Once covered code has been published under a particular version
+ of the license, you may always continue to use it under the terms
+ of that version. You may also choose to use such covered code
+ under the terms of any subsequent version of the license
+ published by the PHP Group. No one other than the PHP Group has
+ the right to modify the terms applicable to covered code created
+ under this License.
+
+ 6. Redistributions of any form whatsoever must retain the following
+ acknowledgment:
+ "This product includes PHP software, freely available from
+ <http://www.php.net/software/>".
+
+THIS SOFTWARE IS PROVIDED BY THE PHP DEVELOPMENT TEAM ``AS IS'' AND
+ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PHP
+DEVELOPMENT TEAM OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+<http://www.php.net/license/3_01.txt>
+
+
+## phunction PHP framework
+
+<http://sourceforge.net/projects/phunction/>
+
+* Copyright 2010 [Alix Axel](mailto:alix-axel@users.sf.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.
+
+<http://www.opensource.org/licenses/mit-license.php>
+
+
+## Symfony YAML Component
+
+<http://components.symfony-project.org/yaml/>
+
+Copyright 2008-2009 [Fabien Potencier](http://fabien.potencier.org)
+
+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.
+
+<http://opensource.org/licenses/mit-license.php>
+
+
+## PEAR Console_ProgressBar
+
+<http://pear.php.net/package/Console_ProgressBar/>
+
+Copyright 2003-2007 [Stefan Walk](http://pear.php.net/user/et)
+
+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.
+
+<http://opensource.org/licenses/mit-license.php>
+
+
+## Mozilla Certificate Authority
+
+* <http://curl.haxx.se/ca/cacert.pem>
+* <https://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1>
+
+The contents of this file are subject to the Mozilla Public License Version
+1.1 (the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+http://www.mozilla.org/MPL/
+
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is the Netscape security libraries.
+
+The Initial Developer of the Original Code is Netscape Communications
+Corporation. Portions created by the Initial Developer are Copyright
+(C) 1994-2000 the Initial Developer. All Rights Reserved.
+
+<http://www.mozilla.org/MPL/>
+
+
+## array-to-domdocument
+
+<https://code.google.com/p/array-to-domdocument/>
+
+* Copyright 2010-2011 [Omer Hassan](https://code.google.com/u/113495690012051782542/)
+* Portions copyright 2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+
+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.
+
+<http://opensource.org/licenses/mit-license.php>
diff --git a/3rdparty/aws-sdk/_docs/STREAMWRAPPER_README.html b/3rdparty/aws-sdk/_docs/STREAMWRAPPER_README.html
new file mode 100644
index 00000000000..5d91068aa23
--- /dev/null
+++ b/3rdparty/aws-sdk/_docs/STREAMWRAPPER_README.html
@@ -0,0 +1,243 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8">
+ <title>README</title>
+ <style type="text/css" media="screen">
+ body {
+ font: 18px/1.5em 'Book Antiqua', 'Palatino Linotype', Palatino, 'Minion Pro', Cambria, Georgia, serif;
+ padding: 50px 10%;
+ max-width: 1000px;
+ margin: 0 auto;
+ color: #080000;
+ background-color: #fbfbf9;
+ }
+ code {
+ font: 13px/1.4em Monaco, monospace;
+ background-color: #f3f3f3;
+ color: #444;
+ padding: 1px 2px;
+
+ border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ }
+ pre {
+ border: 1px solid #ddd;
+ border-left: 6px solid #c0c0c0;
+ background-color: #f3f3f3;
+ color: #444;
+ font: 13px/1.4em Monaco, monospace;
+ overflow: auto;
+
+ margin: 1em 0 1.5em 0;
+ padding: 1em;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+
+ -webkit-border-top-right-radius: 5px;
+ -webkit-border-bottom-right-radius: 5px;
+ -moz-border-radius-topright: 5px;
+ -moz-border-radius-bottomright: 5px;
+ border-top-right-radius: 5px;
+ border-bottom-right-radius: 5px;
+ }
+ pre code {
+ font-family: inherit;
+ font-size: inherit;
+ background-color: inherit;
+ color: inherit;
+ padding: 0;
+
+ border-radius: none;
+ -webkit-border-radius: none;
+ -moz-border-radius: none;
+ }
+ a {
+ color: #326EA1;
+ text-decoration: underline;
+ padding: 1px 2px;
+ -webkit-transition: background-color 0.15s;
+ -webkit-transition: color 0.15s;
+ -moz-transition: background-color 0.15s;
+ -moz-transition: color 0.15s;
+ transition: background-color 0.15s;
+ transition: color 0.15s;
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ border-radius: 2px;
+ }
+ a:hover, a.hover {
+ color: #fff;
+ background-color: #333;
+ text-decoration: none;
+ padding: 1px 2px;
+ }
+ a.active {
+ font-weight: bold;
+ }
+ h1, h2, h3, h4, h5, h6 {
+ padding: 0.8em 0 0.2em 0;
+ margin: 0;
+ }
+ h1 {
+ margin-top: 30px;
+ padding: 15px 0 5px 5px;
+ font-size: 2em;
+ line-height: 1.3em;
+ border-bottom: 3px solid #cdcdcc;
+ }
+ h2 {
+ margin-top: 30px;
+ padding: 15px 0 5px 5px;
+ font-size: 1.5em;
+ line-height: 1.3em;
+ border-bottom: 1px solid #cdcdcc;
+ }
+ li {
+ margin: 0;
+ padding: 0;
+ }
+ em, i {
+ font-style: italic;
+ }
+ strong, b {
+ font-weight: bold;
+ color: #000;
+ }
+ p {
+ margin: 0;
+ padding: 0.5em 0;
+ }
+ ul.columns {
+ -moz-column-count: 3;
+ -moz-column-gap: 20px;
+ -webkit-column-count: 3;
+ -webkit-column-gap: 20px;
+ column-count: 3;
+ column-gap: 20px;
+ }
+ </style>
+ </head>
+ <body>
+ <h1>S3 Stream Wrapper</h1>
+ <p>The <strong>S3 Stream Wrapper</strong> is a stream wrapper interface for PHP that provides access to Amazon S3 using PHP&#8217;s standard File System API functions.</p>
+
+ <h2>What issues does this address?</h2>
+ <p>There are a large number of existing applications, code snippets and other bits of PHP that are designed to read and write from the local file system as part of their normal operations. Many of these apps could benefit from moving into the cloud, but doing so would require rewriting a substantial amount of code.</p>
+ <p>What if we could simplify this process so that the updates required to make an existing application cloud-backed would be very minimal?</p>
+
+ <h2>Proposed solution</h2>
+ <p>PHP provides an interface for solving this exact kind of problem, called the <a href="http://php.net/streamwrapper">Stream Wrapper</a> interface. By writing a class that implements this interface and <a href="http://php.net/manual/en/function.stream-wrapper-register.php">registering it as a handler</a> we can reduce both the amount of rewriting that needs to be done for existing applications, as well as substantially lower the learning curve for reading and writing from Amazon S3.</p>
+
+ <h2>How do I use it?</h2>
+ <p>After including the AWS SDK for PHP in your project, use the <code>AmazonS3::register_stream_wrapper()</code> method to register <code>s3://</code> as a <a href="http://php.net/manual/en/wrappers.php">supported stream wrapper</a> for Amazon S3. <em>It's that simple</em>. Amazon S3 file patterns take the following form: <code>s3://bucket/object</code>.</p>
+
+ <pre><code>require_once 'AWSSDKforPHP/sdk.class.php';
+
+$s3 = new AmazonS3();
+$s3->register_stream_wrapper();
+
+$directory = 's3://my-new-bucket';
+$filename = $directory . '/put.txt';
+$contents = '';
+
+if (mkdir($directory))
+{
+ if (file_put_contents($filename, 'This is some sample data.'))
+ {
+ $handle = fopen($filename, 'rb+');
+ $contents = stream_get_contents($handle);
+ fclose($handle);
+ }
+
+ rmdir($directory);
+}
+
+echo $contents;</code></pre>
+
+ <p>You may also pass a different protocol name as a parameter to <code>AmazonS3::register_stream_wrapper()</code> if you want to use something besides <code>s3://</code>. Using this technique you can create more than one stream wrapper with different configurations (e.g. for different regions). To do that you just need to create separate instances of the <code>AmazonS3</code> class, configure them, and then register a stream wrapper for each of them with different protocol names.</p>
+
+ <pre><code>require_once 'AWSSDKforPHP/sdk.class.php';
+
+$s3east = new AmazonS3();
+$s3east->set_region(AmazonS3::REGION_US_E1);
+$s3east->register_stream_wrapper('s3east');
+mkdir('s3east://my-easterly-bucket');
+
+$s3west = new AmazonS3();
+$s3west->set_region(AmazonS3::REGION_US_W1);
+$s3west->register_stream_wrapper('s3west');
+mkdir('s3west://my-westerly-bucket');</code></pre>
+
+ <h2>Tests and usage examples</h2>
+ <p>We are also including tests written in the <a href="http://qa.php.net/phpt_details.php">PHPT</a> format. Not only do these tests show how the software can be used, but any tests submitted back to us should be in this format. These tests will likely fail for you unless you change the bucket names to be globally unique across S3. You can run the tests with <code>pear</code>.</p>
+ <pre><code>cd S3StreamWrapper/tests;
+pear run-tests;</code></pre>
+ <p>If you have <a href="http://phpunit.de">PHPUnit</a> 3.6+ and <a href="http://xdebug.org">Xdebug</a> installed, you can generate a code coverage report as follows:</p>
+ <pre><code>cd S3StreamWrapper/tests && \
+phpunit --colors --coverage-html ./_coverage_report . && \
+open ./_coverage_report/index.html;</code></pre>
+
+ <h2>Notes and Known Issues</h2>
+ <ul>
+ <li><p><code>stream_lock()</code> and <code>stream_cast()</code> are not currently implemented, and likely won't be.</p></li>
+ <li><p>Strangely <code>touch()</code> doesn&#8217;t seem to work. I think this is because of an issue with my implementation of <code>url_stat()</code>, but I can&#8217;t find any information on the magical combination of parameters that will make this work.</p></li>
+ <li><p>Using <code>fopen()</code> will always open in <code>rb+</code> mode. Amazon S3 as a service doesn&#8217;t support anything else.</p></li>
+ <li><p>Because of the way that PHP interacts with the <a href="http://php.net/manual/en/class.streamwrapper.php">StreamWrapper</a> interface, it&#8217;s difficult to optimize for batch requests under the hood. If you need to push or pull data from several objects, you may find that using <a href="http://docs.amazonwebservices.com/AWSSDKforPHP/latest/#m=CFRuntime/batch">batch requests</a> with the <a href="http://docs.amazonwebservices.com/AWSSDKforPHP/latest/#i=AmazonS3">standard interface</a> has better latency.</p></li>
+ <li><p><code>rmdir()</code> does not do a force-delete, so you will need to iterate over the files to delete them one-by-one.</p></li>
+ <li><p><code>realpath()</code>, <code>glob()</code>, <code>chmod()</code>, <code>chown()</code>, <code>chgrp()</code>, <code>tempnam()</code> and a few other functions don&#8217;t support the StreamWrapper interface at the PHP-level because they're designed to work with the (no/low-latency) local file system.</p></li>
+ <li><p>Support for <code>ftruncate()</code> does not exist in any current release of PHP, but is implemented on the PHP trunk for a future release. <a href="http://bugs.php.net/53888">http://bugs.php.net/53888</a>.</p></li>
+ <li><p>Since <a href="http://docs.amazonwebservices.com/AmazonS3/latest/gsg/WorkingWithS3.html#WriteObject">Amazon S3 doesn&#8217;t support appending data</a>, it is best to avoid functions that expect or rely on that functionality (e.g. <a href="http://php.net/fputcsv">fputcsv()</a>).</p></li>
+ </ul>
+
+ <h2>Successfully tested with</h2>
+ <ul class="columns">
+ <li><a href="http://php.net/close_dir">close_dir()</a></li>
+ <li><a href="http://php.net/file_exists">file_exists()</a></li>
+ <li><a href="http://php.net/file_get_contents">file_get_contents()</a></li>
+ <li><a href="http://php.net/file_put_contents">file_put_contents()</a></li>
+ <li><a href="http://php.net/fclose">fclose()</a></li>
+ <li><a href="http://php.net/feof">feof()</a></li>
+ <li><a href="http://php.net/fflush">fflush()</a></li>
+ <li><a href="http://php.net/fgetc">fgetc()</a></li>
+ <li><a href="http://php.net/fgetcsv">fgetcsv()</a></li>
+ <li><a href="http://php.net/fgets">fgets()</a></li>
+ <li><a href="http://php.net/fgetss">fgetss()</a></li>
+ <li><a href="http://php.net/fopen">fopen()</a></li>
+ <li><a href="http://php.net/fpassthru">fpassthru()</a></li>
+ <li><a href="http://php.net/fputs">fputs()</a></li>
+ <li><a href="http://php.net/fread">fread()</a></li>
+ <li><a href="http://php.net/fseek">fseek()</a></li>
+ <li><a href="http://php.net/fstat">fstat()</a></li>
+ <li><a href="http://php.net/ftell">ftell()</a></li>
+ <li><a href="http://php.net/fwrite">fwrite()</a></li>
+ <li><a href="http://php.net/is_dir">is_dir()</a></li>
+ <li><a href="http://php.net/is_file">is_file()</a></li>
+ <li><a href="http://php.net/is_readable">is_readable()</a></li>
+ <li><a href="http://php.net/is_writable">is_writable()</a></li>
+ <li><a href="http://php.net/mkdir">mkdir()</a></li>
+ <li><a href="http://php.net/open_dir">open_dir()</a></li>
+ <li><a href="http://php.net/read_dir">read_dir()</a></li>
+ <li><a href="http://php.net/rewind">rewind()</a></li>
+ <li><a href="http://php.net/rewinddir">rewinddir()</a></li>
+ <li><a href="http://php.net/rmdir">rmdir()</a></li>
+ <li><a href="http://php.net/scandir">scandir()</a></li>
+ <li><a href="http://php.net/stream_get_contents">stream_get_contents()</a></li>
+ <li><a href="http://php.net/unlink">unlink()</a></li>
+ </ul>
+
+ <h2>Known issues with</h2>
+ <ul>
+ <li><a href="http://php.net/chgrp">chgrp()</a></li>
+ <li><a href="http://php.net/chmod">chmod()</a></li>
+ <li><a href="http://php.net/chown">chown()</a></li>
+ <li><a href="http://php.net/fputcsv">fputcsv()</a></li>
+ <li><a href="http://php.net/glob">glob()</a></li>
+ <li><a href="http://php.net/realpath">realpath()</a></li>
+ <li><a href="http://php.net/tempnam">tempnam()</a></li>
+ <li><a href="http://php.net/touch">touch()</a></li>
+ </ul>
+
+ <p>A future version <em>may</em> provide S3-specific implementations of some of these functions (e.g., <code>s3chmod()</code>, <code>s3glob()</code>, <code>s3touch()</code>).</p>
+ </body>
+</html>
diff --git a/3rdparty/aws-sdk/_docs/WHERE_IS_THE_API_REFERENCE.md b/3rdparty/aws-sdk/_docs/WHERE_IS_THE_API_REFERENCE.md
new file mode 100644
index 00000000000..7ad235576b4
--- /dev/null
+++ b/3rdparty/aws-sdk/_docs/WHERE_IS_THE_API_REFERENCE.md
@@ -0,0 +1,2 @@
+You can find the API Reference at:
+http://docs.amazonwebservices.com/AWSSDKforPHP/latest/
diff --git a/3rdparty/aws-sdk/authentication/signable.interface.php b/3rdparty/aws-sdk/authentication/signable.interface.php
new file mode 100644
index 00000000000..5316d16a815
--- /dev/null
+++ b/3rdparty/aws-sdk/authentication/signable.interface.php
@@ -0,0 +1,48 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// INTERFACE
+
+/**
+ * The interface implemented by all signing classes.
+ *
+ * @version 2011.11.22
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+interface Signable
+{
+ /**
+ * Constructs a new instance of the implementing class.
+ *
+ * @param string $endpoint (Required) The endpoint to direct the request to.
+ * @param string $operation (Required) The operation to execute as a result of this request.
+ * @param array $payload (Required) The options to use as part of the payload in the request.
+ * @param CFCredential $credentials (Required) The credentials to use for signing and making requests.
+ * @return void
+ */
+ public function __construct($endpoint, $operation, $payload, CFCredential $credentials);
+
+ /**
+ * Generates a cURL handle with all of the required authentication bits set.
+ *
+ * @return resource A cURL handle ready for executing.
+ */
+ public function authenticate();
+}
diff --git a/3rdparty/aws-sdk/authentication/signature_v2query.class.php b/3rdparty/aws-sdk/authentication/signature_v2query.class.php
new file mode 100644
index 00000000000..a91190e1a25
--- /dev/null
+++ b/3rdparty/aws-sdk/authentication/signature_v2query.class.php
@@ -0,0 +1,163 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Implements support for Signature v2 (AWS Query).
+ *
+ * @version 2011.11.22
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+class AuthV2Query extends Signer implements Signable
+{
+ /**
+ * Constructs a new instance of the <AuthV2Query> class.
+ *
+ * @param string $endpoint (Required) The endpoint to direct the request to.
+ * @param string $operation (Required) The operation to execute as a result of this request.
+ * @param array $payload (Required) The options to use as part of the payload in the request.
+ * @param CFCredential $credentials (Required) The credentials to use for signing and making requests.
+ * @return void
+ */
+ public function __construct($endpoint, $operation, $payload, CFCredential $credentials)
+ {
+ parent::__construct($endpoint, $operation, $payload, $credentials);
+ }
+
+ /**
+ * Generates a cURL handle with all of the required authentication bits set.
+ *
+ * @return resource A cURL handle ready for executing.
+ */
+ public function authenticate()
+ {
+ // Determine signing values
+ $current_time = time();
+ $date = gmdate(CFUtilities::DATE_FORMAT_RFC2616, $current_time);
+ $timestamp = gmdate(CFUtilities::DATE_FORMAT_ISO8601, $current_time);
+ $query = array();
+
+ // Do we have an authentication token?
+ if ($this->auth_token)
+ {
+ $headers['X-Amz-Security-Token'] = $this->auth_token;
+ $query['SecurityToken'] = $this->auth_token;
+ }
+
+ // Only add it if it exists.
+ if ($this->api_version)
+ {
+ $query['Version'] = $this->api_version;
+ }
+
+ $query['Action'] = $this->operation;
+ $query['AWSAccessKeyId'] = $this->key;
+ $query['SignatureMethod'] = 'HmacSHA256';
+ $query['SignatureVersion'] = 2;
+ $query['Timestamp'] = $timestamp;
+
+ // Merge in any options that were passed in
+ if (is_array($this->payload))
+ {
+ $query = array_merge($query, $this->payload);
+ }
+
+ // Do a case-sensitive, natural order sort on the array keys.
+ uksort($query, 'strcmp');
+
+ // Create the string that needs to be hashed.
+ $canonical_query_string = $this->util->to_signable_string($query);
+
+ // Remove the default scheme from the domain.
+ $domain = str_replace(array('http://', 'https://'), '', $this->endpoint);
+
+ // Parse our request.
+ $parsed_url = parse_url('http://' . $domain);
+
+ // Set the proper host header.
+ if (isset($parsed_url['port']) && (integer) $parsed_url['port'] !== 80 && (integer) $parsed_url['port'] !== 443)
+ {
+ $host_header = strtolower($parsed_url['host']) . ':' . $parsed_url['port'];
+ }
+ else
+ {
+ $host_header = strtolower($parsed_url['host']);
+ }
+
+ // Set the proper request URI.
+ $request_uri = isset($parsed_url['path']) ? $parsed_url['path'] : '/';
+
+ // Prepare the string to sign
+ $this->string_to_sign = "POST\n$host_header\n$request_uri\n$canonical_query_string";
+
+ // Hash the AWS secret key and generate a signature for the request.
+ $query['Signature'] = base64_encode(hash_hmac('sha256', $this->string_to_sign, $this->secret_key, true));
+
+ // Generate the querystring from $query
+ $this->querystring = $this->util->to_query_string($query);
+
+ // Gather information to pass along to other classes.
+ $helpers = array(
+ 'utilities' => $this->utilities_class,
+ 'request' => $this->request_class,
+ 'response' => $this->response_class,
+ );
+
+ // Compose the request.
+ $request_url = ($this->use_ssl ? 'https://' : 'http://') . $domain;
+ $request_url .= !isset($parsed_url['path']) ? '/' : '';
+
+ // Instantiate the request class
+ $request = new $this->request_class($request_url, $this->proxy, $helpers, $this->credentials);
+ $request->set_method('POST');
+ $request->set_body($this->querystring);
+ $headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8';
+
+ // Pass along registered stream callbacks
+ if ($this->registered_streaming_read_callback)
+ {
+ $request->register_streaming_read_callback($this->registered_streaming_read_callback);
+ }
+
+ if ($this->registered_streaming_write_callback)
+ {
+ $request->register_streaming_write_callback($this->registered_streaming_write_callback);
+ }
+
+ // Sort headers
+ uksort($headers, 'strnatcasecmp');
+
+ // Add headers to request and compute the string to sign
+ foreach ($headers as $header_key => $header_value)
+ {
+ // Strip linebreaks from header values as they're illegal and can allow for security issues
+ $header_value = str_replace(array("\r", "\n"), '', $header_value);
+
+ // Add the header if it has a value
+ if ($header_value !== '')
+ {
+ $request->add_header($header_key, $header_value);
+ }
+ }
+
+ return $request;
+ }
+}
diff --git a/3rdparty/aws-sdk/authentication/signature_v3json.class.php b/3rdparty/aws-sdk/authentication/signature_v3json.class.php
new file mode 100644
index 00000000000..d07f554d1f7
--- /dev/null
+++ b/3rdparty/aws-sdk/authentication/signature_v3json.class.php
@@ -0,0 +1,235 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Implements support for Signature v3 (JSON).
+ *
+ * @version 2011.12.08
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+class AuthV3JSON extends Signer implements Signable
+{
+ /**
+ * Constructs a new instance of the <AuthV3JSON> class.
+ *
+ * @param string $endpoint (Required) The endpoint to direct the request to.
+ * @param string $operation (Required) The operation to execute as a result of this request.
+ * @param array $payload (Required) The options to use as part of the payload in the request.
+ * @param CFCredential $credentials (Required) The credentials to use for signing and making requests.
+ * @return void
+ */
+ public function __construct($endpoint, $operation, $payload, CFCredential $credentials)
+ {
+ parent::__construct($endpoint, $operation, $payload, $credentials);
+ }
+
+ /**
+ * Generates a cURL handle with all of the required authentication bits set.
+ *
+ * @return resource A cURL handle ready for executing.
+ */
+ public function authenticate()
+ {
+ // Determine signing values
+ $current_time = time();
+ $date = gmdate(CFUtilities::DATE_FORMAT_RFC2616, $current_time);
+ $timestamp = gmdate(CFUtilities::DATE_FORMAT_ISO8601, $current_time);
+ $nonce = $this->util->generate_guid();
+ $curlopts = array();
+ $signed_headers = array();
+ $return_curl_handle = false;
+ $x_amz_target = null;
+ $query = array('body' => $this->payload);
+
+ // Do we have an authentication token?
+ if ($this->auth_token)
+ {
+ $headers['X-Amz-Security-Token'] = $this->auth_token;
+ $query['SecurityToken'] = $this->auth_token;
+ }
+
+ // Manage the key-value pairs that are used in the query.
+ if (stripos($this->operation, 'x-amz-target') !== false)
+ {
+ $x_amz_target = trim(str_ireplace('x-amz-target:', '', $this->operation));
+ }
+ else
+ {
+ $query['Action'] = $this->operation;
+ }
+
+ // Only add it if it exists.
+ if ($this->api_version)
+ {
+ $query['Version'] = $this->api_version;
+ }
+
+ $curlopts = array();
+
+ // Set custom CURLOPT settings
+ if (is_array($this->payload) && isset($this->payload['curlopts']))
+ {
+ $curlopts = $this->payload['curlopts'];
+ unset($this->payload['curlopts']);
+ }
+
+ // Merge in any options that were passed in
+ if (is_array($this->payload))
+ {
+ $query = array_merge($query, $this->payload);
+ }
+
+ $return_curl_handle = isset($query['returnCurlHandle']) ? $query['returnCurlHandle'] : false;
+ unset($query['returnCurlHandle']);
+
+ // Do a case-sensitive, natural order sort on the array keys.
+ uksort($query, 'strcmp');
+
+ // Normalize JSON input
+ if (isset($query['body']) && $query['body'] === '[]')
+ {
+ $query['body'] = '{}';
+ }
+
+ // Create the string that needs to be hashed.
+ $canonical_query_string = $this->util->encode_signature2($query['body']);
+
+ // Remove the default scheme from the domain.
+ $domain = str_replace(array('http://', 'https://'), '', $this->endpoint);
+
+ // Parse our request.
+ $parsed_url = parse_url('http://' . $domain);
+
+ // Set the proper host header.
+ if (isset($parsed_url['port']) && (integer) $parsed_url['port'] !== 80 && (integer) $parsed_url['port'] !== 443)
+ {
+ $host_header = strtolower($parsed_url['host']) . ':' . $parsed_url['port'];
+ }
+ else
+ {
+ $host_header = strtolower($parsed_url['host']);
+ }
+
+ // Set the proper request URI.
+ $request_uri = isset($parsed_url['path']) ? $parsed_url['path'] : '/';
+
+ // Generate the querystring from $query
+ $this->querystring = $this->util->to_query_string($query);
+
+ // Gather information to pass along to other classes.
+ $helpers = array(
+ 'utilities' => $this->utilities_class,
+ 'request' => $this->request_class,
+ 'response' => $this->response_class,
+ );
+
+ // Compose the request.
+ $request_url = ($this->use_ssl ? 'https://' : 'http://') . $domain;
+ $request_url .= !isset($parsed_url['path']) ? '/' : '';
+
+ // Instantiate the request class
+ $request = new $this->request_class($request_url, $this->proxy, $helpers, $this->credentials);
+ $request->set_method('POST');
+ //$request->set_body($this->querystring);
+ //$headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8';
+
+ // Signing using X-Amz-Target is handled differently.
+ $headers['X-Amz-Target'] = $x_amz_target;
+ $headers['Content-Type'] = 'application/x-amz-json-1.0';
+ $request->set_body($query['body']);
+ $this->querystring = $query['body'];
+
+ // Pass along registered stream callbacks
+ if ($this->registered_streaming_read_callback)
+ {
+ $request->register_streaming_read_callback($this->registered_streaming_read_callback);
+ }
+
+ if ($this->registered_streaming_write_callback)
+ {
+ $request->register_streaming_write_callback($this->registered_streaming_write_callback);
+ }
+
+ // Add authentication headers
+ // $headers['X-Amz-Nonce'] = $nonce;
+ $headers['Date'] = $date;
+ $headers['Content-Length'] = strlen($this->querystring);
+ $headers['Content-MD5'] = $this->util->hex_to_base64(md5($this->querystring));
+ $headers['Host'] = $host_header;
+
+ // Sort headers
+ uksort($headers, 'strnatcasecmp');
+
+ // Prepare the string to sign (HTTP)
+ $this->string_to_sign = "POST\n$request_uri\n\n";
+
+ // Add headers to request and compute the string to sign
+ foreach ($headers as $header_key => $header_value)
+ {
+ // Strip linebreaks from header values as they're illegal and can allow for security issues
+ $header_value = str_replace(array("\r", "\n"), '', $header_value);
+
+ // Add the header if it has a value
+ if ($header_value !== '')
+ {
+ $request->add_header($header_key, $header_value);
+ }
+
+ // Generate the string to sign
+ if (
+ substr(strtolower($header_key), 0, 8) === 'content-' ||
+ strtolower($header_key) === 'date' ||
+ strtolower($header_key) === 'expires' ||
+ strtolower($header_key) === 'host' ||
+ substr(strtolower($header_key), 0, 6) === 'x-amz-'
+ )
+ {
+ $this->string_to_sign .= strtolower($header_key) . ':' . $header_value . "\n";
+ $signed_headers[] = $header_key;
+ }
+ }
+
+ $this->string_to_sign .= "\n";
+
+ if (isset($query['body']) && $query['body'] !== '')
+ {
+ $this->string_to_sign .= $query['body'];
+ }
+
+ // Convert from string-to-sign to bytes-to-sign
+ $bytes_to_sign = hash('sha256', $this->string_to_sign, true);
+
+ // Hash the AWS secret key and generate a signature for the request.
+ $signature = base64_encode(hash_hmac('sha256', $bytes_to_sign, $this->secret_key, true));
+
+ $headers['X-Amzn-Authorization'] = 'AWS3'
+ . ' AWSAccessKeyId=' . $this->key
+ . ',Algorithm=HmacSHA256'
+ . ',SignedHeaders=' . implode(';', $signed_headers)
+ . ',Signature=' . $signature;
+
+ $request->add_header('X-Amzn-Authorization', $headers['X-Amzn-Authorization']);
+ $request->request_headers = $headers;
+
+ return $request;
+ }
+}
diff --git a/3rdparty/aws-sdk/authentication/signature_v3query.class.php b/3rdparty/aws-sdk/authentication/signature_v3query.class.php
new file mode 100644
index 00000000000..04565f928ed
--- /dev/null
+++ b/3rdparty/aws-sdk/authentication/signature_v3query.class.php
@@ -0,0 +1,192 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Implements support for Signature v3 (AWS Query).
+ *
+ * @version 2011.11.22
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+class AuthV3Query extends Signer implements Signable
+{
+ /**
+ * Constructs a new instance of the <AuthV3Query> class.
+ *
+ * @param string $endpoint (Required) The endpoint to direct the request to.
+ * @param string $operation (Required) The operation to execute as a result of this request.
+ * @param array $payload (Required) The options to use as part of the payload in the request.
+ * @param CFCredential $credentials (Required) The credentials to use for signing and making requests.
+ * @return void
+ */
+ public function __construct($endpoint, $operation, $payload, CFCredential $credentials)
+ {
+ parent::__construct($endpoint, $operation, $payload, $credentials);
+ }
+
+ /**
+ * Generates a cURL handle with all of the required authentication bits set.
+ *
+ * @return resource A cURL handle ready for executing.
+ */
+ public function authenticate()
+ {
+ // Determine signing values
+ $current_time = time();
+ $date = gmdate(CFUtilities::DATE_FORMAT_RFC2616, $current_time);
+ $timestamp = gmdate(CFUtilities::DATE_FORMAT_ISO8601, $current_time);
+ $nonce = $this->util->generate_guid();
+ $curlopts = array();
+ $signed_headers = array();
+
+ // Do we have an authentication token?
+ if ($this->auth_token)
+ {
+ $headers['X-Amz-Security-Token'] = $this->auth_token;
+ $query['SecurityToken'] = $this->auth_token;
+ }
+
+ $query['Action'] = $this->operation;
+ $query['Version'] = $this->api_version;
+
+ // Set custom CURLOPT settings
+ if (is_array($this->payload) && isset($this->payload['curlopts']))
+ {
+ $curlopts = $this->payload['curlopts'];
+ unset($this->payload['curlopts']);
+ }
+
+ // Merge in any options that were passed in
+ if (is_array($this->payload))
+ {
+ $query = array_merge($query, $this->payload);
+ }
+
+ $return_curl_handle = isset($query['returnCurlHandle']) ? $query['returnCurlHandle'] : false;
+ unset($query['returnCurlHandle']);
+
+ // Do a case-sensitive, natural order sort on the array keys.
+ uksort($query, 'strcmp');
+ $canonical_query_string = $this->util->to_signable_string($query);
+
+ // Remove the default scheme from the domain.
+ $domain = str_replace(array('http://', 'https://'), '', $this->endpoint);
+
+ // Parse our request.
+ $parsed_url = parse_url('http://' . $domain);
+
+ // Set the proper host header.
+ if (isset($parsed_url['port']) && (integer) $parsed_url['port'] !== 80 && (integer) $parsed_url['port'] !== 443)
+ {
+ $host_header = strtolower($parsed_url['host']) . ':' . $parsed_url['port'];
+ }
+ else
+ {
+ $host_header = strtolower($parsed_url['host']);
+ }
+
+ // Set the proper request URI.
+ $request_uri = isset($parsed_url['path']) ? $parsed_url['path'] : '/';
+
+ // Generate the querystring from $query
+ $this->querystring = $this->util->to_query_string($query);
+
+ // Gather information to pass along to other classes.
+ $helpers = array(
+ 'utilities' => $this->utilities_class,
+ 'request' => $this->request_class,
+ 'response' => $this->response_class,
+ );
+
+ // Compose the request.
+ $request_url = ($this->use_ssl ? 'https://' : 'http://') . $domain;
+ $request_url .= !isset($parsed_url['path']) ? '/' : '';
+
+ // Instantiate the request class
+ $request = new $this->request_class($request_url, $this->proxy, $helpers, $this->credentials);
+ $request->set_method('POST');
+ $request->set_body($this->querystring);
+ $headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8';
+
+ // Pass along registered stream callbacks
+ if ($this->registered_streaming_read_callback)
+ {
+ $request->register_streaming_read_callback($this->registered_streaming_read_callback);
+ }
+
+ if ($this->registered_streaming_write_callback)
+ {
+ $request->register_streaming_write_callback($this->registered_streaming_write_callback);
+ }
+
+ // Add authentication headers
+ $headers['X-Amz-Nonce'] = $nonce;
+ $headers['Date'] = $date;
+ $headers['Content-Length'] = strlen($this->querystring);
+ $headers['Content-MD5'] = $this->util->hex_to_base64(md5($this->querystring));
+ $headers['Host'] = $host_header;
+
+ // Sort headers
+ uksort($headers, 'strnatcasecmp');
+
+ // Prepare the string to sign (HTTPS)
+ $this->string_to_sign = $date . $nonce;
+
+ // Add headers to request and compute the string to sign
+ foreach ($headers as $header_key => $header_value)
+ {
+ // Strip linebreaks from header values as they're illegal and can allow for security issues
+ $header_value = str_replace(array("\r", "\n"), '', $header_value);
+
+ // Add the header if it has a value
+ if ($header_value !== '')
+ {
+ $request->add_header($header_key, $header_value);
+ }
+
+ // Generate the string to sign
+ if (
+ substr(strtolower($header_key), 0, 8) === 'content-' ||
+ strtolower($header_key) === 'date' ||
+ strtolower($header_key) === 'expires' ||
+ strtolower($header_key) === 'host' ||
+ substr(strtolower($header_key), 0, 6) === 'x-amz-'
+ )
+ {
+ $signed_headers[] = $header_key;
+ }
+ }
+
+ // Hash the AWS secret key and generate a signature for the request.
+ $signature = base64_encode(hash_hmac('sha256', $this->string_to_sign, $this->secret_key, true));
+
+ $headers['X-Amzn-Authorization'] = 'AWS3-HTTPS'
+ . ' AWSAccessKeyId=' . $this->key
+ . ',Algorithm=HmacSHA256'
+ . ',SignedHeaders=' . implode(';', $signed_headers)
+ . ',Signature=' . $signature;
+
+ $request->add_header('X-Amzn-Authorization', $headers['X-Amzn-Authorization']);
+ $request->request_headers = $headers;
+
+ return $request;
+ }
+}
diff --git a/3rdparty/aws-sdk/authentication/signature_v4json.class.php b/3rdparty/aws-sdk/authentication/signature_v4json.class.php
new file mode 100644
index 00000000000..d3ab07ad8bf
--- /dev/null
+++ b/3rdparty/aws-sdk/authentication/signature_v4json.class.php
@@ -0,0 +1,353 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Implements support for Signature v4 (Query).
+ *
+ * @version 2011.01.03
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+class AuthV4JSON extends Signer implements Signable
+{
+ /**
+ * Constructs a new instance of the <AuthV4Query> class.
+ *
+ * @param string $endpoint (Required) The endpoint to direct the request to.
+ * @param string $operation (Required) The operation to execute as a result of this request.
+ * @param array $payload (Required) The options to use as part of the payload in the request.
+ * @param CFCredential $credentials (Required) The credentials to use for signing and making requests.
+ * @return void
+ */
+ public function __construct($endpoint, $operation, $payload, CFCredential $credentials)
+ {
+ parent::__construct($endpoint, $operation, $payload, $credentials);
+ }
+
+ /**
+ * Generates a cURL handle with all of the required authentication bits set.
+ *
+ * @return resource A cURL handle ready for executing.
+ */
+ public function authenticate()
+ {
+ // Determine signing values
+ $current_time = time();
+ $timestamp = gmdate(CFUtilities::DATE_FORMAT_SIGV4, $current_time);
+
+ // Initialize
+ $x_amz_target = null;
+
+ $this->headers = array();
+ $this->signed_headers = array();
+ $this->canonical_headers = array();
+ $this->query = array();
+
+ // Prepare JSON structure
+ $decoded = json_decode($this->payload, true);
+ $data = (array) (is_array($decoded) ? $decoded : $this->payload);
+ unset($data['curlopts']);
+ unset($data['returnCurlHandle']);
+ $this->body = json_encode($data);
+ if ($this->body === '' || $this->body === '[]')
+ {
+ $this->body = '{}';
+ }
+
+ // Do we have an authentication token?
+ if ($this->auth_token)
+ {
+ $this->headers['X-Amz-Security-Token'] = $this->auth_token;
+ $this->query['SecurityToken'] = $this->auth_token;
+ }
+
+ // Manage the key-value pairs that are used in the query.
+ if (stripos($this->operation, 'x-amz-target') !== false)
+ {
+ $x_amz_target = trim(str_ireplace('x-amz-target:', '', $this->operation));
+ }
+ else
+ {
+ $this->query['Action'] = $this->operation;
+ }
+
+ // Only add it if it exists.
+ if ($this->api_version)
+ {
+ $this->query['Version'] = $this->api_version;
+ }
+
+ // Do a case-sensitive, natural order sort on the array keys.
+ uksort($this->query, 'strcmp');
+
+ // Remove the default scheme from the domain.
+ $domain = str_replace(array('http://', 'https://'), '', $this->endpoint);
+
+ // Parse our request.
+ $parsed_url = parse_url('http://' . $domain);
+
+ // Set the proper host header.
+ if (isset($parsed_url['port']) && (integer) $parsed_url['port'] !== 80 && (integer) $parsed_url['port'] !== 443)
+ {
+ $host_header = strtolower($parsed_url['host']) . ':' . $parsed_url['port'];
+ }
+ else
+ {
+ $host_header = strtolower($parsed_url['host']);
+ }
+
+ // Generate the querystring from $this->query
+ $this->querystring = $this->util->to_query_string($this->query);
+
+ // Gather information to pass along to other classes.
+ $helpers = array(
+ 'utilities' => $this->utilities_class,
+ 'request' => $this->request_class,
+ 'response' => $this->response_class,
+ );
+
+ // Compose the request.
+ $request_url = ($this->use_ssl ? 'https://' : 'http://') . $domain;
+ $request_url .= !isset($parsed_url['path']) ? '/' : '';
+
+ // Instantiate the request class
+ $request = new $this->request_class($request_url, $this->proxy, $helpers, $this->credentials);
+ $request->set_method('POST');
+ $request->set_body($this->body);
+ $this->querystring = $this->body;
+ $this->headers['Content-Type'] = 'application/x-amz-json-1.1';
+ $this->headers['X-Amz-Target'] = $x_amz_target;
+
+ // Pass along registered stream callbacks
+ if ($this->registered_streaming_read_callback)
+ {
+ $request->register_streaming_read_callback($this->registered_streaming_read_callback);
+ }
+
+ if ($this->registered_streaming_write_callback)
+ {
+ $request->register_streaming_write_callback($this->registered_streaming_write_callback);
+ }
+
+ // Add authentication headers
+ $this->headers['X-Amz-Date'] = $timestamp;
+ $this->headers['Content-Length'] = strlen($this->querystring);
+ $this->headers['Host'] = $host_header;
+
+ // Sort headers
+ uksort($this->headers, 'strnatcasecmp');
+
+ // Add headers to request and compute the string to sign
+ foreach ($this->headers as $header_key => $header_value)
+ {
+ // Strip linebreaks from header values as they're illegal and can allow for security issues
+ $header_value = str_replace(array("\r", "\n"), '', $header_value);
+
+ $request->add_header($header_key, $header_value);
+ $this->canonical_headers[] = strtolower($header_key) . ':' . $header_value;
+
+ $this->signed_headers[] = strtolower($header_key);
+ }
+
+ $this->headers['Authorization'] = $this->authorization($timestamp);
+ $request->add_header('Authorization', $this->headers['Authorization']);
+ $request->request_headers = $this->headers;
+
+ return $request;
+ }
+
+ /**
+ * Generates the authorization string to use for the request.
+ *
+ * @param string $datetime (Required) The current timestamp.
+ * @return string The authorization string.
+ */
+ protected function authorization($datetime)
+ {
+ $access_key_id = $this->key;
+
+ $parts = array();
+ $parts[] = "AWS4-HMAC-SHA256 Credential=${access_key_id}/" . $this->credential_string($datetime);
+ $parts[] = 'SignedHeaders=' . implode(';', $this->signed_headers);
+ $parts[] = 'Signature=' . $this->hex16($this->signature($datetime));
+
+ return implode(',', $parts);
+ }
+
+ /**
+ * Calculate the signature.
+ *
+ * @param string $datetime (Required) The current timestamp.
+ * @return string The signature.
+ */
+ protected function signature($datetime)
+ {
+ $k_date = $this->hmac('AWS4' . $this->secret_key, substr($datetime, 0, 8));
+ $k_region = $this->hmac($k_date, $this->region());
+ $k_service = $this->hmac($k_region, $this->service());
+ $k_credentials = $this->hmac($k_service, 'aws4_request');
+ $signature = $this->hmac($k_credentials, $this->string_to_sign($datetime));
+
+ return $signature;
+ }
+
+ /**
+ * Calculate the string to sign.
+ *
+ * @param string $datetime (Required) The current timestamp.
+ * @return string The string to sign.
+ */
+ protected function string_to_sign($datetime)
+ {
+ $parts = array();
+ $parts[] = 'AWS4-HMAC-SHA256';
+ $parts[] = $datetime;
+ $parts[] = $this->credential_string($datetime);
+ $parts[] = $this->hex16($this->hash($this->canonical_request()));
+
+ $this->string_to_sign = implode("\n", $parts);
+
+ return $this->string_to_sign;
+ }
+
+ /**
+ * Generates the credential string to use for signing.
+ *
+ * @param string $datetime (Required) The current timestamp.
+ * @return string The credential string.
+ */
+ protected function credential_string($datetime)
+ {
+ $parts = array();
+ $parts[] = substr($datetime, 0, 8);
+ $parts[] = $this->region();
+ $parts[] = $this->service();
+ $parts[] = 'aws4_request';
+
+ return implode('/', $parts);
+ }
+
+ /**
+ * Calculate the canonical request.
+ *
+ * @return string The canonical request.
+ */
+ protected function canonical_request()
+ {
+ $parts = array();
+ $parts[] = 'POST';
+ $parts[] = $this->canonical_uri();
+ $parts[] = ''; // $parts[] = $this->canonical_querystring();
+ $parts[] = implode("\n", $this->canonical_headers) . "\n";
+ $parts[] = implode(';', $this->signed_headers);
+ $parts[] = $this->hex16($this->hash($this->body));
+
+ $this->canonical_request = implode("\n", $parts);
+
+ return $this->canonical_request;
+ }
+
+ /**
+ * The region ID to use in the signature.
+ *
+ * @return return The region ID.
+ */
+ protected function region()
+ {
+ $pieces = explode('.', $this->endpoint);
+
+ // Handle cases with single/no region (i.e. service.region.amazonaws.com vs. service.amazonaws.com)
+ if (count($pieces < 4))
+ {
+ return 'us-east-1';
+ }
+
+ return $pieces[1];
+ }
+
+ /**
+ * The service ID to use in the signature.
+ *
+ * @return return The service ID.
+ */
+ protected function service()
+ {
+ $pieces = explode('.', $this->endpoint);
+ return $pieces[0];
+ }
+
+ /**
+ * The request URI path.
+ *
+ * @return string The request URI path.
+ */
+ protected function canonical_uri()
+ {
+ return '/';
+ }
+
+ /**
+ * The canonical query string.
+ *
+ * @return string The canonical query string.
+ */
+ protected function canonical_querystring()
+ {
+ if (!isset($this->canonical_querystring))
+ {
+ $this->canonical_querystring = $this->util->to_signable_string($this->query);
+ }
+
+ return $this->canonical_querystring;
+ }
+
+ /**
+ * Hex16-pack the data.
+ *
+ * @param string $value (Required) The data to hex16 pack.
+ * @return string The hex16-packed data.
+ */
+ protected function hex16($value)
+ {
+ $result = unpack('H*', $value);
+ return reset($result);
+ }
+
+ /**
+ * Applies HMAC SHA-256 encryption to the string, salted by the key.
+ *
+ * @return string Raw HMAC SHA-256 hashed string.
+ */
+ protected function hmac($key, $string)
+ {
+ return hash_hmac('sha256', $string, $key, true);
+ }
+
+ /**
+ * SHA-256 hashes the string.
+ *
+ * @return string Raw SHA-256 hashed string.
+ */
+ protected function hash($string)
+ {
+ return hash('sha256', $string, true);
+ }
+}
diff --git a/3rdparty/aws-sdk/authentication/signature_v4query.class.php b/3rdparty/aws-sdk/authentication/signature_v4query.class.php
new file mode 100644
index 00000000000..bd5a3fbf5b5
--- /dev/null
+++ b/3rdparty/aws-sdk/authentication/signature_v4query.class.php
@@ -0,0 +1,345 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Implements support for Signature v4 (Query).
+ *
+ * @version 2011.01.03
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+class AuthV4Query extends Signer implements Signable
+{
+ /**
+ * Constructs a new instance of the <AuthV4Query> class.
+ *
+ * @param string $endpoint (Required) The endpoint to direct the request to.
+ * @param string $operation (Required) The operation to execute as a result of this request.
+ * @param array $payload (Required) The options to use as part of the payload in the request.
+ * @param CFCredential $credentials (Required) The credentials to use for signing and making requests.
+ * @return void
+ */
+ public function __construct($endpoint, $operation, $payload, CFCredential $credentials)
+ {
+ parent::__construct($endpoint, $operation, $payload, $credentials);
+ }
+
+ /**
+ * Generates a cURL handle with all of the required authentication bits set.
+ *
+ * @return resource A cURL handle ready for executing.
+ */
+ public function authenticate()
+ {
+ // Determine signing values
+ $current_time = time();
+ $timestamp = gmdate(CFUtilities::DATE_FORMAT_SIGV4, $current_time);
+
+ // Initialize
+ $x_amz_target = null;
+
+ $this->headers = array();
+ $this->signed_headers = array();
+ $this->canonical_headers = array();
+ $this->query = array('body' => is_array($this->payload) ? $this->payload : array());
+
+ // Do we have an authentication token?
+ if ($this->auth_token)
+ {
+ $this->headers['X-Amz-Security-Token'] = $this->auth_token;
+ $this->query['body']['SecurityToken'] = $this->auth_token;
+ }
+
+ // Manage the key-value pairs that are used in the query.
+ if (stripos($this->operation, 'x-amz-target') !== false)
+ {
+ $x_amz_target = trim(str_ireplace('x-amz-target:', '', $this->operation));
+ }
+ else
+ {
+ $this->query['body']['Action'] = $this->operation;
+ }
+
+ // Only add it if it exists.
+ if ($this->api_version)
+ {
+ $this->query['body']['Version'] = $this->api_version;
+ }
+
+ // Do a case-sensitive, natural order sort on the array keys.
+ uksort($this->query['body'], 'strcmp');
+
+ // Remove the default scheme from the domain.
+ $domain = str_replace(array('http://', 'https://'), '', $this->endpoint);
+
+ // Parse our request.
+ $parsed_url = parse_url('http://' . $domain);
+
+ // Set the proper host header.
+ if (isset($parsed_url['port']) && (integer) $parsed_url['port'] !== 80 && (integer) $parsed_url['port'] !== 443)
+ {
+ $host_header = strtolower($parsed_url['host']) . ':' . $parsed_url['port'];
+ }
+ else
+ {
+ $host_header = strtolower($parsed_url['host']);
+ }
+
+ // Generate the querystring from $this->query
+ $this->querystring = $this->util->to_query_string($this->query);
+
+ // Gather information to pass along to other classes.
+ $helpers = array(
+ 'utilities' => $this->utilities_class,
+ 'request' => $this->request_class,
+ 'response' => $this->response_class,
+ );
+
+ // Compose the request.
+ $request_url = ($this->use_ssl ? 'https://' : 'http://') . $domain;
+ $request_url .= !isset($parsed_url['path']) ? '/' : '';
+
+ // Instantiate the request class
+ $request = new $this->request_class($request_url, $this->proxy, $helpers, $this->credentials);
+ $request->set_method('POST');
+ $request->set_body($this->canonical_querystring());
+ $this->querystring = $this->canonical_querystring();
+
+ $this->headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8';
+ $this->headers['X-Amz-Target'] = $x_amz_target;
+
+ // Pass along registered stream callbacks
+ if ($this->registered_streaming_read_callback)
+ {
+ $request->register_streaming_read_callback($this->registered_streaming_read_callback);
+ }
+
+ if ($this->registered_streaming_write_callback)
+ {
+ $request->register_streaming_write_callback($this->registered_streaming_write_callback);
+ }
+
+ // Add authentication headers
+ $this->headers['X-Amz-Date'] = $timestamp;
+ $this->headers['Content-Length'] = strlen($this->querystring);
+ $this->headers['Content-MD5'] = $this->util->hex_to_base64(md5($this->querystring));
+ $this->headers['Host'] = $host_header;
+
+ // Sort headers
+ uksort($this->headers, 'strnatcasecmp');
+
+ // Add headers to request and compute the string to sign
+ foreach ($this->headers as $header_key => $header_value)
+ {
+ // Strip linebreaks from header values as they're illegal and can allow for security issues
+ $header_value = str_replace(array("\r", "\n"), '', $header_value);
+
+ $request->add_header($header_key, $header_value);
+ $this->canonical_headers[] = strtolower($header_key) . ':' . $header_value;
+
+ $this->signed_headers[] = strtolower($header_key);
+ }
+
+ $this->headers['Authorization'] = $this->authorization($timestamp);
+
+ $request->add_header('Authorization', $this->headers['Authorization']);
+ $request->request_headers = $this->headers;
+
+ return $request;
+ }
+
+ /**
+ * Generates the authorization string to use for the request.
+ *
+ * @param string $datetime (Required) The current timestamp.
+ * @return string The authorization string.
+ */
+ protected function authorization($datetime)
+ {
+ $access_key_id = $this->key;
+
+ $parts = array();
+ $parts[] = "AWS4-HMAC-SHA256 Credential=${access_key_id}/" . $this->credential_string($datetime);
+ $parts[] = 'SignedHeaders=' . implode(';', $this->signed_headers);
+ $parts[] = 'Signature=' . $this->hex16($this->signature($datetime));
+
+ return implode(',', $parts);
+ }
+
+ /**
+ * Calculate the signature.
+ *
+ * @param string $datetime (Required) The current timestamp.
+ * @return string The signature.
+ */
+ protected function signature($datetime)
+ {
+ $k_date = $this->hmac('AWS4' . $this->secret_key, substr($datetime, 0, 8));
+ $k_region = $this->hmac($k_date, $this->region());
+ $k_service = $this->hmac($k_region, $this->service());
+ $k_credentials = $this->hmac($k_service, 'aws4_request');
+ $signature = $this->hmac($k_credentials, $this->string_to_sign($datetime));
+
+ return $signature;
+ }
+
+ /**
+ * Calculate the string to sign.
+ *
+ * @param string $datetime (Required) The current timestamp.
+ * @return string The string to sign.
+ */
+ protected function string_to_sign($datetime)
+ {
+ $parts = array();
+ $parts[] = 'AWS4-HMAC-SHA256';
+ $parts[] = $datetime;
+ $parts[] = $this->credential_string($datetime);
+ $parts[] = $this->hex16($this->hash($this->canonical_request()));
+
+ $this->string_to_sign = implode("\n", $parts);
+
+ return $this->string_to_sign;
+ }
+
+ /**
+ * Generates the credential string to use for signing.
+ *
+ * @param string $datetime (Required) The current timestamp.
+ * @return string The credential string.
+ */
+ protected function credential_string($datetime)
+ {
+ $parts = array();
+ $parts[] = substr($datetime, 0, 8);
+ $parts[] = $this->region();
+ $parts[] = $this->service();
+ $parts[] = 'aws4_request';
+
+ return implode('/', $parts);
+ }
+
+ /**
+ * Calculate the canonical request.
+ *
+ * @return string The canonical request.
+ */
+ protected function canonical_request()
+ {
+ $parts = array();
+ $parts[] = 'POST';
+ $parts[] = $this->canonical_uri();
+ $parts[] = ''; // $parts[] = $this->canonical_querystring();
+ $parts[] = implode("\n", $this->canonical_headers) . "\n";
+ $parts[] = implode(';', $this->signed_headers);
+ $parts[] = $this->hex16($this->hash($this->canonical_querystring()));
+
+ $this->canonical_request = implode("\n", $parts);
+
+ return $this->canonical_request;
+ }
+
+ /**
+ * The region ID to use in the signature.
+ *
+ * @return return The region ID.
+ */
+ protected function region()
+ {
+ $pieces = explode('.', $this->endpoint);
+
+ // Handle cases with single/no region (i.e. service.region.amazonaws.com vs. service.amazonaws.com)
+ if (count($pieces < 4))
+ {
+ return 'us-east-1';
+ }
+
+ return $pieces[1];
+ }
+
+ /**
+ * The service ID to use in the signature.
+ *
+ * @return return The service ID.
+ */
+ protected function service()
+ {
+ $pieces = explode('.', $this->endpoint);
+ return ($pieces[0] === 'email') ? 'ses' : $pieces[0];
+ }
+
+ /**
+ * The request URI path.
+ *
+ * @return string The request URI path.
+ */
+ protected function canonical_uri()
+ {
+ return '/';
+ }
+
+ /**
+ * The canonical query string.
+ *
+ * @return string The canonical query string.
+ */
+ protected function canonical_querystring()
+ {
+ if (!isset($this->canonical_querystring))
+ {
+ $this->canonical_querystring = $this->util->to_signable_string($this->query['body']);
+ }
+
+ return $this->canonical_querystring;
+ }
+
+ /**
+ * Hex16-pack the data.
+ *
+ * @param string $value (Required) The data to hex16 pack.
+ * @return string The hex16-packed data.
+ */
+ protected function hex16($value)
+ {
+ $result = unpack('H*', $value);
+ return reset($result);
+ }
+
+ /**
+ * Applies HMAC SHA-256 encryption to the string, salted by the key.
+ *
+ * @return string Raw HMAC SHA-256 hashed string.
+ */
+ protected function hmac($key, $string)
+ {
+ return hash_hmac('sha256', $string, $key, true);
+ }
+
+ /**
+ * SHA-256 hashes the string.
+ *
+ * @return string Raw SHA-256 hashed string.
+ */
+ protected function hash($string)
+ {
+ return hash('sha256', $string, true);
+ }
+}
diff --git a/3rdparty/aws-sdk/authentication/signer.abstract.php b/3rdparty/aws-sdk/authentication/signer.abstract.php
new file mode 100644
index 00000000000..f6bf7912f7b
--- /dev/null
+++ b/3rdparty/aws-sdk/authentication/signer.abstract.php
@@ -0,0 +1,68 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * The abstract class that serves as the base class that signer classes extend.
+ *
+ * @version 2011.11.22
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+abstract class Signer
+{
+ /**
+ * The endpoint to direct the request to.
+ */
+ public $endpoint;
+
+ /**
+ * The operation to execute as a result of this request.
+ */
+ public $operation;
+
+ /**
+ * The options to use as part of the payload in the request.
+ */
+ public $payload;
+
+ /**
+ * The credentials to use for signing and making requests.
+ */
+ public $credentials;
+
+
+ /**
+ * Constructs a new instance of the implementing class.
+ *
+ * @param string $endpoint (Required) The endpoint to direct the request to.
+ * @param string $operation (Required) The operation to execute as a result of this request.
+ * @param array $payload (Required) The options to use as part of the payload in the request.
+ * @param CFCredential $credentials (Required) The credentials to use for signing and making requests.
+ * @return void
+ */
+ public function __construct($endpoint, $operation, $payload, CFCredential $credentials)
+ {
+ $this->endpoint = $endpoint;
+ $this->operation = $operation;
+ $this->payload = $payload;
+ $this->credentials = $credentials;
+ }
+}
diff --git a/3rdparty/aws-sdk/lib/cachecore/LICENSE b/3rdparty/aws-sdk/lib/cachecore/LICENSE
new file mode 100755
index 00000000000..49b38bd620a
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/cachecore/LICENSE
@@ -0,0 +1,25 @@
+Copyright (c) 2006-2010 Ryan Parman, Foleeo Inc., and contributors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are
+permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of
+ conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice, this list
+ of conditions and the following disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ * Neither the name of Ryan Parman, Foleeo Inc. nor the names of its contributors may be used to
+ endorse or promote products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
+AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
diff --git a/3rdparty/aws-sdk/lib/cachecore/README b/3rdparty/aws-sdk/lib/cachecore/README
new file mode 100755
index 00000000000..07e00267cbb
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/cachecore/README
@@ -0,0 +1 @@
+A simple caching system for PHP5 that provides a single interface for a variety of storage types.
diff --git a/3rdparty/aws-sdk/lib/cachecore/_sql/README b/3rdparty/aws-sdk/lib/cachecore/_sql/README
new file mode 100755
index 00000000000..e25d53d1208
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/cachecore/_sql/README
@@ -0,0 +1,5 @@
+The .sql files in this directory contain the code to create the tables for database caching.
+
+If you're not using database caching, you can safely ignore these.
+
+If you ARE using database caching, simply load the correct *.sql file into your database to set up the required tables.
diff --git a/3rdparty/aws-sdk/lib/cachecore/_sql/mysql.sql b/3rdparty/aws-sdk/lib/cachecore/_sql/mysql.sql
new file mode 100755
index 00000000000..2efee3a732f
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/cachecore/_sql/mysql.sql
@@ -0,0 +1,7 @@
+CREATE TABLE `cache` (
+ `id` char(40) NOT NULL default '',
+ `expires` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+ `data` longtext,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `id` (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 \ No newline at end of file
diff --git a/3rdparty/aws-sdk/lib/cachecore/_sql/pgsql.sql b/3rdparty/aws-sdk/lib/cachecore/_sql/pgsql.sql
new file mode 100755
index 00000000000..f2bdd86a528
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/cachecore/_sql/pgsql.sql
@@ -0,0 +1,6 @@
+CREATE TABLE "cache" (
+ expires timestamp without time zone NOT NULL,
+ id character(40) NOT NULL,
+ data text NOT NULL
+)
+WITH (OIDS=TRUE); \ No newline at end of file
diff --git a/3rdparty/aws-sdk/lib/cachecore/_sql/sqlite3.sql b/3rdparty/aws-sdk/lib/cachecore/_sql/sqlite3.sql
new file mode 100755
index 00000000000..590f45e4ff1
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/cachecore/_sql/sqlite3.sql
@@ -0,0 +1,2 @@
+CREATE TABLE cache (id TEXT, expires NUMERIC, data BLOB);
+CREATE UNIQUE INDEX idx ON cache(id ASC); \ No newline at end of file
diff --git a/3rdparty/aws-sdk/lib/cachecore/cacheapc.class.php b/3rdparty/aws-sdk/lib/cachecore/cacheapc.class.php
new file mode 100755
index 00000000000..59f5e88f397
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/cachecore/cacheapc.class.php
@@ -0,0 +1,126 @@
+<?php
+/**
+ * Container for all APC-based cache methods. Inherits additional methods from <CacheCore>. Adheres
+ * to the ICacheCore interface.
+ *
+ * @version 2012.04.17
+ * @copyright 2006-2012 Ryan Parman
+ * @copyright 2006-2010 Foleeo, Inc.
+ * @copyright 2012 Amazon.com, Inc. or its affiliates.
+ * @copyright 2008-2010 Contributors
+ * @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
+ * @link http://github.com/skyzyx/cachecore CacheCore
+ * @link http://getcloudfusion.com CloudFusion
+ * @link http://php.net/apc APC
+ */
+class CacheAPC extends CacheCore implements ICacheCore
+{
+
+ /*%******************************************************************************************%*/
+ // CONSTRUCTOR
+
+ /**
+ * Constructs a new instance of this class.
+ *
+ * @param string $name (Required) A name to uniquely identify the cache object.
+ * @param string $location (Optional) The location to store the cache object in. This may vary by cache method. The default value is NULL.
+ * @param integer $expires (Optional) The number of seconds until a cache object is considered stale. The default value is 0.
+ * @param boolean $gzip (Optional) Whether data should be gzipped before being stored. The default value is true.
+ * @return object Reference to the cache object.
+ */
+ public function __construct($name, $location = null, $expires = 0, $gzip = true)
+ {
+ parent::__construct($name, null, $expires, $gzip);
+ $this->id = $this->name;
+ }
+
+ /**
+ * Creates a new cache.
+ *
+ * @param mixed $data (Required) The data to cache.
+ * @return boolean Whether the operation was successful.
+ */
+ public function create($data)
+ {
+ $data = serialize($data);
+ $data = $this->gzip ? gzcompress($data) : $data;
+
+ return apc_add($this->id, $data, $this->expires);
+ }
+
+ /**
+ * Reads a cache.
+ *
+ * @return mixed Either the content of the cache object, or boolean `false`.
+ */
+ public function read()
+ {
+ if ($data = apc_fetch($this->id))
+ {
+ $data = $this->gzip ? gzuncompress($data) : $data;
+ return unserialize($data);
+ }
+
+ return false;
+ }
+
+ /**
+ * Updates an existing cache.
+ *
+ * @param mixed $data (Required) The data to cache.
+ * @return boolean Whether the operation was successful.
+ */
+ public function update($data)
+ {
+ $data = serialize($data);
+ $data = $this->gzip ? gzcompress($data) : $data;
+
+ return apc_store($this->id, $data, $this->expires);
+ }
+
+ /**
+ * Deletes a cache.
+ *
+ * @return boolean Whether the operation was successful.
+ */
+ public function delete()
+ {
+ return apc_delete($this->id);
+ }
+
+ /**
+ * Implemented here, but always returns `false`. APC manages its own expirations.
+ *
+ * @return boolean Whether the cache is expired or not.
+ */
+ public function is_expired()
+ {
+ return false;
+ }
+
+ /**
+ * Implemented here, but always returns `false`. APC manages its own expirations.
+ *
+ * @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
+ */
+ public function timestamp()
+ {
+ return false;
+ }
+
+ /**
+ * Implemented here, but always returns `false`. APC manages its own expirations.
+ *
+ * @return boolean Whether the operation was successful.
+ */
+ public function reset()
+ {
+ return false;
+ }
+}
+
+
+/*%******************************************************************************************%*/
+// EXCEPTIONS
+
+class CacheAPC_Exception extends CacheCore_Exception {}
diff --git a/3rdparty/aws-sdk/lib/cachecore/cachecore.class.php b/3rdparty/aws-sdk/lib/cachecore/cachecore.class.php
new file mode 100755
index 00000000000..1670d316408
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/cachecore/cachecore.class.php
@@ -0,0 +1,160 @@
+<?php
+/**
+ * Container for all shared caching methods. This is not intended to be instantiated directly, but is
+ * extended by the cache-specific classes.
+ *
+ * @version 2012.04.17
+ * @copyright 2006-2012 Ryan Parman
+ * @copyright 2006-2010 Foleeo, Inc.
+ * @copyright 2012 Amazon.com, Inc. or its affiliates.
+ * @copyright 2008-2010 Contributors
+ * @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
+ * @link http://github.com/skyzyx/cachecore CacheCore
+ * @link http://getcloudfusion.com CloudFusion
+ */
+class CacheCore
+{
+ /**
+ * A name to uniquely identify the cache object by.
+ */
+ var $name;
+
+ /**
+ * Where to store the cache.
+ */
+ var $location;
+
+ /**
+ * The number of seconds before a cache object is considered stale.
+ */
+ var $expires;
+
+ /**
+ * Used internally to uniquely identify the location + name of the cache object.
+ */
+ var $id;
+
+ /**
+ * Stores the time when the cache object was created.
+ */
+ var $timestamp;
+
+ /**
+ * Stores whether or not the content should be gzipped when stored
+ */
+ var $gzip;
+
+
+ /*%******************************************************************************************%*/
+ // CONSTRUCTOR
+
+ /**
+ * Constructs a new instance of this class.
+ *
+ * @param string $name (Required) A name to uniquely identify the cache object.
+ * @param string $location (Optional) The location to store the cache object in. This may vary by cache method. The default value is NULL.
+ * @param integer $expires (Optional) The number of seconds until a cache object is considered stale. The default value is 0.
+ * @param boolean $gzip (Optional) Whether data should be gzipped before being stored. The default value is true.
+ * @return object Reference to the cache object.
+ */
+ public function __construct($name, $location = null, $expires = 0, $gzip = true)
+ {
+ if (!extension_loaded('zlib'))
+ {
+ $gzip = false;
+ }
+
+ $this->name = $name;
+ $this->location = $location;
+ $this->expires = $expires;
+ $this->gzip = $gzip;
+
+ return $this;
+ }
+
+ /**
+ * Allows for chaining from the constructor. Requires PHP 5.3 or newer.
+ *
+ * @param string $name (Required) A name to uniquely identify the cache object.
+ * @param string $location (Optional) The location to store the cache object in. This may vary by cache method. The default value is NULL.
+ * @param integer $expires (Optional) The number of seconds until a cache object is considered stale. The default value is 0.
+ * @param boolean $gzip (Optional) Whether data should be gzipped before being stored. The default value is true.
+ * @return object Reference to the cache object.
+ */
+ public static function init($name, $location = null, $expires = 0, $gzip = true)
+ {
+ if (version_compare(PHP_VERSION, '5.3.0', '<'))
+ {
+ throw new Exception('PHP 5.3 or newer is required to use CacheCore::init().');
+ }
+
+ $self = get_called_class();
+ return new $self($name, $location, $expires, $gzip);
+ }
+
+ /**
+ * Set the number of seconds until a cache expires.
+ *
+ * @param integer $expires (Optional) The number of seconds until a cache object is considered stale. The default value is 0.
+ * @return $this
+ */
+ public function expire_in($seconds)
+ {
+ $this->expires = $seconds;
+ return $this;
+ }
+
+ /**
+ * Provides a simple, straightforward cache-logic mechanism. Useful for non-complex response caches.
+ *
+ * @param string|function $callback (Required) The name of the function to fire when we need to fetch new data to cache.
+ * @param array params (Optional) Parameters to pass into the callback function, as an array.
+ * @return array The cached data being requested.
+ */
+ public function response_manager($callback, $params = null)
+ {
+ // Automatically handle $params values.
+ $params = is_array($params) ? $params : array($params);
+
+ if ($data = $this->read())
+ {
+ if ($this->is_expired())
+ {
+ if ($data = call_user_func_array($callback, $params))
+ {
+ $this->update($data);
+ }
+ else
+ {
+ $this->reset();
+ $data = $this->read();
+ }
+ }
+ }
+ else
+ {
+ if ($data = call_user_func_array($callback, $params))
+ {
+ $this->create($data);
+ }
+ }
+
+ return $data;
+ }
+}
+
+
+/*%******************************************************************************************%*/
+// CORE DEPENDENCIES
+
+// Include the ICacheCore interface.
+if (file_exists(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'icachecore.interface.php'))
+{
+ include_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'icachecore.interface.php';
+}
+
+
+/*%******************************************************************************************%*/
+// EXCEPTIONS
+
+class CacheCore_Exception extends Exception {}
diff --git a/3rdparty/aws-sdk/lib/cachecore/cachefile.class.php b/3rdparty/aws-sdk/lib/cachecore/cachefile.class.php
new file mode 100755
index 00000000000..3df240151fb
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/cachecore/cachefile.class.php
@@ -0,0 +1,189 @@
+<?php
+/**
+ * Container for all file-based cache methods. Inherits additional methods from <CacheCore>. Adheres
+ * to the ICacheCore interface.
+ *
+ * @version 2012.04.17
+ * @copyright 2006-2012 Ryan Parman
+ * @copyright 2006-2010 Foleeo, Inc.
+ * @copyright 2012 Amazon.com, Inc. or its affiliates.
+ * @copyright 2008-2010 Contributors
+ * @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
+ * @link http://github.com/skyzyx/cachecore CacheCore
+ * @link http://getcloudfusion.com CloudFusion
+ */
+class CacheFile extends CacheCore implements ICacheCore
+{
+
+ /*%******************************************************************************************%*/
+ // CONSTRUCTOR
+
+ /**
+ * Constructs a new instance of this class.
+ *
+ * @param string $name (Required) A name to uniquely identify the cache object.
+ * @param string $location (Optional) The location to store the cache object in. This may vary by cache method. The default value is NULL.
+ * @param integer $expires (Optional) The number of seconds until a cache object is considered stale. The default value is 0.
+ * @param boolean $gzip (Optional) Whether data should be gzipped before being stored. The default value is true.
+ * @return object Reference to the cache object.
+ */
+ public function __construct($name, $location = null, $expires = 0, $gzip = true)
+ {
+ parent::__construct($name, $location, $expires, $gzip);
+ $this->id = $this->location . '/' . $this->name . '.cache';
+ }
+
+ /**
+ * Creates a new cache.
+ *
+ * @param mixed $data (Required) The data to cache.
+ * @return boolean Whether the operation was successful.
+ */
+ public function create($data)
+ {
+ if (file_exists($this->id))
+ {
+ return false;
+ }
+ elseif (realpath($this->location) && file_exists($this->location) && is_writeable($this->location))
+ {
+ $data = serialize($data);
+ $data = $this->gzip ? gzcompress($data) : $data;
+
+ return (bool) file_put_contents($this->id, $data);
+ }
+ elseif (realpath($this->location) && file_exists($this->location))
+ {
+ throw new CacheFile_Exception('The file system location "' . $this->location . '" is not writable. Check the file system permissions for this directory.');
+ }
+ else
+ {
+ throw new CacheFile_Exception('The file system location "' . $this->location . '" does not exist. Create the directory, or double-check any relative paths that may have been set.');
+ }
+
+ return false;
+ }
+
+ /**
+ * Reads a cache.
+ *
+ * @return mixed Either the content of the cache object, or boolean `false`.
+ */
+ public function read()
+ {
+ if (file_exists($this->id) && is_readable($this->id))
+ {
+ $data = file_get_contents($this->id);
+ $data = $this->gzip ? gzuncompress($data) : $data;
+ $data = unserialize($data);
+
+ if ($data === false)
+ {
+ /*
+ This should only happen when someone changes the gzip settings and there is
+ existing data or someone has been mucking about in the cache folder manually.
+ Delete the bad entry since the file cache doesn't clean up after itself and
+ then return false so fresh data will be retrieved.
+ */
+ $this->delete();
+ return false;
+ }
+
+ return $data;
+ }
+
+ return false;
+ }
+
+ /**
+ * Updates an existing cache.
+ *
+ * @param mixed $data (Required) The data to cache.
+ * @return boolean Whether the operation was successful.
+ */
+ public function update($data)
+ {
+ if (file_exists($this->id) && is_writeable($this->id))
+ {
+ $data = serialize($data);
+ $data = $this->gzip ? gzcompress($data) : $data;
+
+ return (bool) file_put_contents($this->id, $data);
+ }
+ else
+ {
+ throw new CacheFile_Exception('The file system location is not writeable. Check your file system permissions and ensure that the cache directory exists.');
+ }
+
+ return false;
+ }
+
+ /**
+ * Deletes a cache.
+ *
+ * @return boolean Whether the operation was successful.
+ */
+ public function delete()
+ {
+ if (file_exists($this->id))
+ {
+ return unlink($this->id);
+ }
+
+ return false;
+ }
+
+ /**
+ * Checks whether the cache object is expired or not.
+ *
+ * @return boolean Whether the cache is expired or not.
+ */
+ public function is_expired()
+ {
+ if ($this->timestamp() + $this->expires < time())
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Retrieves the timestamp of the cache.
+ *
+ * @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
+ */
+ public function timestamp()
+ {
+ clearstatcache();
+
+ if (file_exists($this->id))
+ {
+ $this->timestamp = filemtime($this->id);
+ return $this->timestamp;
+ }
+
+ return false;
+ }
+
+ /**
+ * Resets the freshness of the cache.
+ *
+ * @return boolean Whether the operation was successful.
+ */
+ public function reset()
+ {
+ if (file_exists($this->id))
+ {
+ return touch($this->id);
+ }
+
+ return false;
+ }
+}
+
+
+/*%******************************************************************************************%*/
+// EXCEPTIONS
+
+class CacheFile_Exception extends CacheCore_Exception {}
diff --git a/3rdparty/aws-sdk/lib/cachecore/cachemc.class.php b/3rdparty/aws-sdk/lib/cachecore/cachemc.class.php
new file mode 100755
index 00000000000..5b0f8a93061
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/cachecore/cachemc.class.php
@@ -0,0 +1,183 @@
+<?php
+/**
+ * Container for all Memcache-based cache methods. Inherits additional methods from <CacheCore>. Adheres
+ * to the ICacheCore interface.
+ *
+ * @version 2012.04.17
+ * @copyright 2006-2012 Ryan Parman
+ * @copyright 2006-2010 Foleeo, Inc.
+ * @copyright 2012 Amazon.com, Inc. or its affiliates.
+ * @copyright 2008-2010 Contributors
+ * @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
+ * @link http://github.com/skyzyx/cachecore CacheCore
+ * @link http://getcloudfusion.com CloudFusion
+ * @link http://php.net/memcache Memcache
+ * @link http://php.net/memcached Memcached
+ */
+class CacheMC extends CacheCore implements ICacheCore
+{
+ /**
+ * Holds the Memcache object.
+ */
+ var $memcache = null;
+
+ /**
+ * Whether the Memcached extension is being used (as opposed to Memcache).
+ */
+ var $is_memcached = false;
+
+
+ /*%******************************************************************************************%*/
+ // CONSTRUCTOR
+
+ /**
+ * Constructs a new instance of this class.
+ *
+ * @param string $name (Required) A name to uniquely identify the cache object.
+ * @param string $location (Optional) The location to store the cache object in. This may vary by cache method. The default value is NULL.
+ * @param integer $expires (Optional) The number of seconds until a cache object is considered stale. The default value is 0.
+ * @param boolean $gzip (Optional) Whether data should be gzipped before being stored. The default value is true.
+ * @return object Reference to the cache object.
+ */
+ public function __construct($name, $location = null, $expires = 0, $gzip = true)
+ {
+ parent::__construct($name, null, $expires, $gzip);
+ $this->id = $this->name;
+
+ // Prefer Memcached over Memcache.
+ if (class_exists('Memcached'))
+ {
+ $this->memcache = new Memcached();
+ $this->is_memcached = true;
+ }
+ elseif (class_exists('Memcache'))
+ {
+ $this->memcache = new Memcache();
+ }
+ else
+ {
+ return false;
+ }
+
+ // Enable compression, if available
+ if ($this->gzip)
+ {
+ if ($this->is_memcached)
+ {
+ $this->memcache->setOption(Memcached::OPT_COMPRESSION, true);
+ }
+ else
+ {
+ $this->gzip = MEMCACHE_COMPRESSED;
+ }
+ }
+
+ // Process Memcached servers.
+ if (isset($location) && sizeof($location) > 0)
+ {
+ foreach ($location as $loc)
+ {
+ if (isset($loc['port']) && !empty($loc['port']))
+ {
+ $this->memcache->addServer($loc['host'], $loc['port']);
+ }
+ else
+ {
+ $this->memcache->addServer($loc['host'], 11211);
+ }
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Creates a new cache.
+ *
+ * @param mixed $data (Required) The data to cache.
+ * @return boolean Whether the operation was successful.
+ */
+ public function create($data)
+ {
+ if ($this->is_memcached)
+ {
+ return $this->memcache->set($this->id, $data, $this->expires);
+ }
+ return $this->memcache->set($this->id, $data, $this->gzip, $this->expires);
+ }
+
+ /**
+ * Reads a cache.
+ *
+ * @return mixed Either the content of the cache object, or boolean `false`.
+ */
+ public function read()
+ {
+ if ($this->is_memcached)
+ {
+ return $this->memcache->get($this->id);
+ }
+ return $this->memcache->get($this->id, $this->gzip);
+ }
+
+ /**
+ * Updates an existing cache.
+ *
+ * @param mixed $data (Required) The data to cache.
+ * @return boolean Whether the operation was successful.
+ */
+ public function update($data)
+ {
+ if ($this->is_memcached)
+ {
+ return $this->memcache->replace($this->id, $data, $this->expires);
+ }
+ return $this->memcache->replace($this->id, $data, $this->gzip, $this->expires);
+ }
+
+ /**
+ * Deletes a cache.
+ *
+ * @return boolean Whether the operation was successful.
+ */
+ public function delete()
+ {
+ return $this->memcache->delete($this->id);
+ }
+
+ /**
+ * Implemented here, but always returns `false`. Memcache manages its own expirations.
+ *
+ * @return boolean Whether the cache is expired or not.
+ */
+ public function is_expired()
+ {
+ return false;
+ }
+
+ /**
+ * Implemented here, but always returns `false`. Memcache manages its own expirations.
+ *
+ * @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
+ */
+ public function timestamp()
+ {
+ return false;
+ }
+
+ /**
+ * Implemented here, but always returns `false`. Memcache manages its own expirations.
+ *
+ * @return boolean Whether the operation was successful.
+ */
+ public function reset()
+ {
+ return false;
+ }
+}
+
+
+/*%******************************************************************************************%*/
+// EXCEPTIONS
+
+class CacheMC_Exception extends CacheCore_Exception {}
diff --git a/3rdparty/aws-sdk/lib/cachecore/cachepdo.class.php b/3rdparty/aws-sdk/lib/cachecore/cachepdo.class.php
new file mode 100755
index 00000000000..5716021d8fc
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/cachecore/cachepdo.class.php
@@ -0,0 +1,297 @@
+<?php
+/**
+ * Container for all PDO-based cache methods. Inherits additional methods from <CacheCore>. Adheres
+ * to the ICacheCore interface.
+ *
+ * @version 2012.04.17
+ * @copyright 2006-2012 Ryan Parman
+ * @copyright 2006-2010 Foleeo, Inc.
+ * @copyright 2012 Amazon.com, Inc. or its affiliates.
+ * @copyright 2008-2010 Contributors
+ * @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
+ * @link http://github.com/skyzyx/cachecore CacheCore
+ * @link http://getcloudfusion.com CloudFusion
+ * @link http://php.net/pdo PDO
+ */
+class CachePDO extends CacheCore implements ICacheCore
+{
+ /**
+ * Reference to the PDO connection object.
+ */
+ var $pdo = null;
+
+ /**
+ * Holds the parsed URL components.
+ */
+ var $dsn = null;
+
+ /**
+ * Holds the PDO-friendly version of the connection string.
+ */
+ var $dsn_string = null;
+
+ /**
+ * Holds the prepared statement for creating an entry.
+ */
+ var $create = null;
+
+ /**
+ * Holds the prepared statement for reading an entry.
+ */
+ var $read = null;
+
+ /**
+ * Holds the prepared statement for updating an entry.
+ */
+ var $update = null;
+
+ /**
+ * Holds the prepared statement for resetting the expiry of an entry.
+ */
+ var $reset = null;
+
+ /**
+ * Holds the prepared statement for deleting an entry.
+ */
+ var $delete = null;
+
+ /**
+ * Holds the response of the read so we only need to fetch it once instead of doing
+ * multiple queries.
+ */
+ var $store_read = null;
+
+
+ /*%******************************************************************************************%*/
+ // CONSTRUCTOR
+
+ /**
+ * Constructs a new instance of this class.
+ *
+ * Tested with [MySQL 5.0.x](http://mysql.com), [PostgreSQL](http://postgresql.com), and
+ * [SQLite 3.x](http://sqlite.org). SQLite 2.x is assumed to work. No other PDO-supported databases have
+ * been tested (e.g. Oracle, Microsoft SQL Server, IBM DB2, ODBC, Sybase, Firebird). Feel free to send
+ * patches for additional database support.
+ *
+ * See <http://php.net/pdo> for more information.
+ *
+ * @param string $name (Required) A name to uniquely identify the cache object.
+ * @param string $location (Optional) The location to store the cache object in. This may vary by cache method. The default value is NULL.
+ * @param integer $expires (Optional) The number of seconds until a cache object is considered stale. The default value is 0.
+ * @param boolean $gzip (Optional) Whether data should be gzipped before being stored. The default value is true.
+ * @return object Reference to the cache object.
+ */
+ public function __construct($name, $location = null, $expires = 0, $gzip = true)
+ {
+ // Make sure the name is no longer than 40 characters.
+ $name = sha1($name);
+
+ // Call parent constructor and set id.
+ parent::__construct($name, $location, $expires, $gzip);
+ $this->id = $this->name;
+ $options = array();
+
+ // Check if the location contains :// (e.g. mysql://user:pass@hostname:port/table)
+ if (stripos($location, '://') === false)
+ {
+ // No? Just pass it through.
+ $this->dsn = parse_url($location);
+ $this->dsn_string = $location;
+ }
+ else
+ {
+ // Yes? Parse and set the DSN
+ $this->dsn = parse_url($location);
+ $this->dsn_string = $this->dsn['scheme'] . ':host=' . $this->dsn['host'] . ((isset($this->dsn['port'])) ? ';port=' . $this->dsn['port'] : '') . ';dbname=' . substr($this->dsn['path'], 1);
+ }
+
+ // Make sure that user/pass are defined.
+ $user = isset($this->dsn['user']) ? $this->dsn['user'] : null;
+ $pass = isset($this->dsn['pass']) ? $this->dsn['pass'] : null;
+
+ // Set persistence for databases that support it.
+ switch ($this->dsn['scheme'])
+ {
+ case 'mysql': // MySQL
+ case 'pgsql': // PostgreSQL
+ $options[PDO::ATTR_PERSISTENT] = true;
+ break;
+ }
+
+ // Instantiate a new PDO object with a persistent connection.
+ $this->pdo = new PDO($this->dsn_string, $user, $pass, $options);
+
+ // Define prepared statements for improved performance.
+ $this->create = $this->pdo->prepare("INSERT INTO cache (id, expires, data) VALUES (:id, :expires, :data)");
+ $this->read = $this->pdo->prepare("SELECT id, expires, data FROM cache WHERE id = :id");
+ $this->reset = $this->pdo->prepare("UPDATE cache SET expires = :expires WHERE id = :id");
+ $this->delete = $this->pdo->prepare("DELETE FROM cache WHERE id = :id");
+ }
+
+ /**
+ * Creates a new cache.
+ *
+ * @param mixed $data (Required) The data to cache.
+ * @return boolean Whether the operation was successful.
+ */
+ public function create($data)
+ {
+ $data = serialize($data);
+ $data = $this->gzip ? gzcompress($data) : $data;
+
+ $this->create->bindParam(':id', $this->id);
+ $this->create->bindParam(':data', $data);
+ $this->create->bindParam(':expires', $this->generate_timestamp());
+
+ return (bool) $this->create->execute();
+ }
+
+ /**
+ * Reads a cache.
+ *
+ * @return mixed Either the content of the cache object, or boolean `false`.
+ */
+ public function read()
+ {
+ if (!$this->store_read)
+ {
+ $this->read->bindParam(':id', $this->id);
+ $this->read->execute();
+ $this->store_read = $this->read->fetch(PDO::FETCH_ASSOC);
+ }
+
+ if ($this->store_read)
+ {
+ $data = $this->store_read['data'];
+ $data = $this->gzip ? gzuncompress($data) : $data;
+
+ return unserialize($data);
+ }
+
+ return false;
+ }
+
+ /**
+ * Updates an existing cache.
+ *
+ * @param mixed $data (Required) The data to cache.
+ * @return boolean Whether the operation was successful.
+ */
+ public function update($data)
+ {
+ $this->delete();
+ return $this->create($data);
+ }
+
+ /**
+ * Deletes a cache.
+ *
+ * @return boolean Whether the operation was successful.
+ */
+ public function delete()
+ {
+ $this->delete->bindParam(':id', $this->id);
+ return $this->delete->execute();
+ }
+
+ /**
+ * Checks whether the cache object is expired or not.
+ *
+ * @return boolean Whether the cache is expired or not.
+ */
+ public function is_expired()
+ {
+ if ($this->timestamp() + $this->expires < time())
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Retrieves the timestamp of the cache.
+ *
+ * @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
+ */
+ public function timestamp()
+ {
+ if (!$this->store_read)
+ {
+ $this->read->bindParam(':id', $this->id);
+ $this->read->execute();
+ $this->store_read = $this->read->fetch(PDO::FETCH_ASSOC);
+ }
+
+ if ($this->store_read)
+ {
+ $value = $this->store_read['expires'];
+
+ // If 'expires' isn't yet an integer, convert it into one.
+ if (!is_numeric($value))
+ {
+ $value = strtotime($value);
+ }
+
+ $this->timestamp = date('U', $value);
+ return $this->timestamp;
+ }
+
+ return false;
+ }
+
+ /**
+ * Resets the freshness of the cache.
+ *
+ * @return boolean Whether the operation was successful.
+ */
+ public function reset()
+ {
+ $this->reset->bindParam(':id', $this->id);
+ $this->reset->bindParam(':expires', $this->generate_timestamp());
+ return (bool) $this->reset->execute();
+ }
+
+ /**
+ * Returns a list of supported PDO database drivers. Identical to <PDO::getAvailableDrivers()>.
+ *
+ * @return array The list of supported database drivers.
+ * @link http://php.net/pdo.getavailabledrivers PHP Method
+ */
+ public function get_drivers()
+ {
+ return PDO::getAvailableDrivers();
+ }
+
+ /**
+ * Returns a timestamp value apropriate to the current database type.
+ *
+ * @return mixed Timestamp for MySQL and PostgreSQL, integer value for SQLite.
+ */
+ protected function generate_timestamp()
+ {
+ // Define 'expires' settings differently.
+ switch ($this->dsn['scheme'])
+ {
+ // These support timestamps.
+ case 'mysql': // MySQL
+ case 'pgsql': // PostgreSQL
+ $expires = date(DATE_FORMAT_MYSQL, time());
+ break;
+
+ // These support integers.
+ case 'sqlite': // SQLite 3
+ case 'sqlite2': // SQLite 2
+ $expires = time();
+ break;
+ }
+
+ return $expires;
+ }
+}
+
+
+/*%******************************************************************************************%*/
+// EXCEPTIONS
+
+class CachePDO_Exception extends CacheCore_Exception {}
diff --git a/3rdparty/aws-sdk/lib/cachecore/cachexcache.class.php b/3rdparty/aws-sdk/lib/cachecore/cachexcache.class.php
new file mode 100755
index 00000000000..a0f279aaea3
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/cachecore/cachexcache.class.php
@@ -0,0 +1,129 @@
+<?php
+/**
+ * Container for all XCache-based cache methods. Inherits additional methods from <CacheCore>. Adheres
+ * to the ICacheCore interface.
+ *
+ * @version 2012.04.17
+ * @copyright 2006-2012 Ryan Parman
+ * @copyright 2006-2010 Foleeo, Inc.
+ * @copyright 2012 Amazon.com, Inc. or its affiliates.
+ * @copyright 2008-2010 Contributors
+ * @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
+ * @link http://github.com/skyzyx/cachecore CacheCore
+ * @link http://getcloudfusion.com CloudFusion
+ * @link http://xcache.lighttpd.net XCache
+ */
+class CacheXCache extends CacheCore implements ICacheCore
+{
+
+ /*%******************************************************************************************%*/
+ // CONSTRUCTOR
+
+ /**
+ * Constructs a new instance of this class.
+ *
+ * @param string $name (Required) A name to uniquely identify the cache object.
+ * @param string $location (Optional) The location to store the cache object in. This may vary by cache method. The default value is NULL.
+ * @param integer $expires (Optional) The number of seconds until a cache object is considered stale. The default value is 0.
+ * @param boolean $gzip (Optional) Whether data should be gzipped before being stored. The default value is true.
+ * @return object Reference to the cache object.
+ */
+ public function __construct($name, $location = null, $expires = 0, $gzip = true)
+ {
+ parent::__construct($name, null, $expires, $gzip);
+ $this->id = $this->name;
+ }
+
+ /**
+ * Creates a new cache.
+ *
+ * @param mixed $data (Required) The data to cache.
+ * @return boolean Whether the operation was successful.
+ */
+ public function create($data)
+ {
+ $data = serialize($data);
+ $data = $this->gzip ? gzcompress($data) : $data;
+
+ return xcache_set($this->id, $data, $this->expires);
+ }
+
+ /**
+ * Reads a cache.
+ *
+ * @return mixed Either the content of the cache object, or boolean `false`.
+ */
+ public function read()
+ {
+ if ($data = xcache_get($this->id))
+ {
+ $data = $this->gzip ? gzuncompress($data) : $data;
+ return unserialize($data);
+ }
+
+ return false;
+ }
+
+ /**
+ * Updates an existing cache.
+ *
+ * @param mixed $data (Required) The data to cache.
+ * @return boolean Whether the operation was successful.
+ */
+ public function update($data)
+ {
+ $data = serialize($data);
+ $data = $this->gzip ? gzcompress($data) : $data;
+
+ return xcache_set($this->id, $data, $this->expires);
+ }
+
+ /**
+ * Deletes a cache.
+ *
+ * @return boolean Whether the operation was successful.
+ */
+ public function delete()
+ {
+ return xcache_unset($this->id);
+ }
+
+ /**
+ * Defined here, but always returns false. XCache manages it's own expirations. It's worth
+ * mentioning that if the server is configured for a long xcache.var_gc_interval then it IS
+ * possible for expired data to remain in the var cache, though it is not possible to access
+ * it.
+ *
+ * @return boolean Whether the cache is expired or not.
+ */
+ public function is_expired()
+ {
+ return false;
+ }
+
+ /**
+ * Implemented here, but always returns `false`. XCache manages its own expirations.
+ *
+ * @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
+ */
+ public function timestamp()
+ {
+ return false;
+ }
+
+ /**
+ * Implemented here, but always returns `false`. XCache manages its own expirations.
+ *
+ * @return boolean Whether the operation was successful.
+ */
+ public function reset()
+ {
+ return false;
+ }
+}
+
+
+/*%******************************************************************************************%*/
+// EXCEPTIONS
+
+class CacheXCache_Exception extends CacheCore_Exception {}
diff --git a/3rdparty/aws-sdk/lib/cachecore/icachecore.interface.php b/3rdparty/aws-sdk/lib/cachecore/icachecore.interface.php
new file mode 100755
index 00000000000..8d49f5bf492
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/cachecore/icachecore.interface.php
@@ -0,0 +1,66 @@
+<?php
+/**
+ * Defines the methods that all implementing classes MUST have. Covers CRUD (create, read, update,
+ * delete) methods, as well as others that are used in the base <CacheCore> class.
+ *
+ * @version 2009.03.22
+ * @copyright 2006-2010 Ryan Parman
+ * @copyright 2006-2010 Foleeo, Inc.
+ * @copyright 2008-2010 Contributors
+ * @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
+ * @link http://github.com/skyzyx/cachecore CacheCore
+ * @link http://getcloudfusion.com CloudFusion
+ */
+interface ICacheCore
+{
+ /**
+ * Creates a new cache.
+ *
+ * @param mixed $data (Required) The data to cache.
+ * @return boolean Whether the operation was successful.
+ */
+ public function create($data);
+
+ /**
+ * Reads a cache.
+ *
+ * @return mixed Either the content of the cache object, or boolean `false`.
+ */
+ public function read();
+
+ /**
+ * Updates an existing cache.
+ *
+ * @param mixed $data (Required) The data to cache.
+ * @return boolean Whether the operation was successful.
+ */
+ public function update($data);
+
+ /**
+ * Deletes a cache.
+ *
+ * @return boolean Whether the operation was successful.
+ */
+ public function delete();
+
+ /**
+ * Checks whether the cache object is expired or not.
+ *
+ * @return boolean Whether the cache is expired or not.
+ */
+ public function is_expired();
+
+ /**
+ * Retrieves the timestamp of the cache.
+ *
+ * @return mixed Either the Unix time stamp of the cache creation, or boolean `false`.
+ */
+ public function timestamp();
+
+ /**
+ * Resets the freshness of the cache.
+ *
+ * @return boolean Whether the operation was successful.
+ */
+ public function reset();
+}
diff --git a/3rdparty/aws-sdk/lib/dom/ArrayToDOMDocument.php b/3rdparty/aws-sdk/lib/dom/ArrayToDOMDocument.php
new file mode 100644
index 00000000000..06ad502eebb
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/dom/ArrayToDOMDocument.php
@@ -0,0 +1,181 @@
+<?php
+/**
+ * @author Omer Hassan
+ * @author Ryan Parman
+ * @license MIT
+ */
+class Array2DOM
+{
+ const ATTRIBUTES = '__attributes__';
+ const CONTENT = '__content__';
+
+ /**
+ * @param array $source
+ * @param string $rootTagName
+ * @return DOMDocument
+ */
+ public static function arrayToDOMDocument(array $source, $rootTagName = 'root')
+ {
+ $document = new DOMDocument();
+ $document->appendChild(self::createDOMElement($source, $rootTagName, $document));
+
+ return $document;
+ }
+
+ /**
+ * @param array $source
+ * @param string $rootTagName
+ * @param bool $formatOutput
+ * @return string
+ */
+ public static function arrayToXMLString(array $source, $rootTagName = 'root', $formatOutput = true)
+ {
+ $document = self::arrayToDOMDocument($source, $rootTagName);
+ $document->formatOutput = $formatOutput;
+
+ return $document->saveXML();
+ }
+
+ /**
+ * @param DOMDocument $document
+ * @return array
+ */
+ public static function domDocumentToArray(DOMDocument $document)
+ {
+ return self::createArray($document->documentElement);
+ }
+
+ /**
+ * @param string $xmlString
+ * @return array
+ */
+ public static function xmlStringToArray($xmlString)
+ {
+ $document = new DOMDocument();
+
+ return $document->loadXML($xmlString) ? self::domDocumentToArray($document) : array();
+ }
+
+ /**
+ * @param mixed $source
+ * @param string $tagName
+ * @param DOMDocument $document
+ * @return DOMNode
+ */
+ private static function createDOMElement($source, $tagName, DOMDocument $document)
+ {
+ if (!is_array($source))
+ {
+ $element = $document->createElement($tagName);
+ $element->appendChild($document->createCDATASection($source));
+
+ return $element;
+ }
+
+ $element = $document->createElement($tagName);
+
+ foreach ($source as $key => $value)
+ {
+ if (is_string($key) && !is_numeric($key))
+ {
+ if ($key === self::ATTRIBUTES)
+ {
+ foreach ($value as $attributeName => $attributeValue)
+ {
+ $element->setAttribute($attributeName, $attributeValue);
+ }
+ }
+ elseif ($key === self::CONTENT)
+ {
+ $element->appendChild($document->createCDATASection($value));
+ }
+ elseif (is_string($value) && !is_numeric($value))
+ {
+ $element->appendChild(self::createDOMElement($value, $key, $document));
+ }
+ elseif (is_array($value) && count($value))
+ {
+ $keyNode = $document->createElement($key);
+
+ foreach ($value as $elementKey => $elementValue)
+ {
+ if (is_string($elementKey) && !is_numeric($elementKey))
+ {
+ $keyNode->appendChild(self::createDOMElement($elementValue, $elementKey, $document));
+ }
+ else
+ {
+ $element->appendChild(self::createDOMElement($elementValue, $key, $document));
+ }
+ }
+
+ if ($keyNode->hasChildNodes())
+ {
+ $element->appendChild($keyNode);
+ }
+ }
+ else
+ {
+ if (is_bool($value))
+ {
+ $value = $value ? 'true' : 'false';
+ }
+
+ $element->appendChild(self::createDOMElement($value, $key, $document));
+ }
+ }
+ else
+ {
+ $element->appendChild(self::createDOMElement($value, $tagName, $document));
+ }
+ }
+
+ return $element;
+ }
+
+ /**
+ * @param DOMNode $domNode
+ * @return array
+ */
+ private static function createArray(DOMNode $domNode)
+ {
+ $array = array();
+
+ for ($i = 0; $i < $domNode->childNodes->length; $i++)
+ {
+ $item = $domNode->childNodes->item($i);
+
+ if ($item->nodeType === XML_ELEMENT_NODE)
+ {
+ $arrayElement = array();
+
+ for ($attributeIndex = 0; !is_null($attribute = $item->attributes->item($attributeIndex)); $attributeIndex++)
+ {
+ if ($attribute->nodeType === XML_ATTRIBUTE_NODE)
+ {
+ $arrayElement[self::ATTRIBUTES][$attribute->nodeName] = $attribute->nodeValue;
+ }
+ }
+
+ $children = self::createArray($item);
+
+ if (is_array($children))
+ {
+ $arrayElement = array_merge($arrayElement, $children);
+ }
+ else
+ {
+ $arrayElement[self::CONTENT] = $children;
+ }
+
+ $array[$item->nodeName][] = $arrayElement;
+ }
+ elseif ($item->nodeType === XML_CDATA_SECTION_NODE || ($item->nodeType === XML_TEXT_NODE && trim($item->nodeValue) !== ''))
+ {
+ return $item->nodeValue;
+ }
+ }
+
+ return $array;
+ }
+}
diff --git a/3rdparty/aws-sdk/lib/requestcore/LICENSE b/3rdparty/aws-sdk/lib/requestcore/LICENSE
new file mode 100755
index 00000000000..49b38bd620a
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/requestcore/LICENSE
@@ -0,0 +1,25 @@
+Copyright (c) 2006-2010 Ryan Parman, Foleeo Inc., and contributors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are
+permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this list of
+ conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice, this list
+ of conditions and the following disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ * Neither the name of Ryan Parman, Foleeo Inc. nor the names of its contributors may be used to
+ endorse or promote products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
+AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
diff --git a/3rdparty/aws-sdk/lib/requestcore/README.md b/3rdparty/aws-sdk/lib/requestcore/README.md
new file mode 100755
index 00000000000..373ea4dccad
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/requestcore/README.md
@@ -0,0 +1,15 @@
+# RequestCore
+
+RequestCore is a lightweight cURL-based HTTP request/response class that leverages MultiCurl for parallel requests.
+
+### PEAR HTTP_Request?
+
+RequestCore was written as a replacement for [PEAR HTTP_Request](http://pear.php.net/http_request/). While PEAR HTTP_Request is full-featured and heavy, RequestCore features only the essentials and is very lightweight. It also leverages the batch request support in cURL's `curl_multi_exec()` to enable multi-threaded requests that fire in parallel.
+
+### Reference and Download
+
+You can find the class reference at <http://skyzyx.github.com/requestcore/>. You can get the code from <http://github.com/skyzyx/requestcore>.
+
+### License and Copyright
+
+This code is Copyright (c) 2008-2010, Ryan Parman. However, I'm licensing this code for others to use under the [Simplified BSD license](http://www.opensource.org/licenses/bsd-license.php).
diff --git a/3rdparty/aws-sdk/lib/requestcore/cacert.pem b/3rdparty/aws-sdk/lib/requestcore/cacert.pem
new file mode 100755
index 00000000000..80bff62fd27
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/requestcore/cacert.pem
@@ -0,0 +1,3390 @@
+##
+## ca-bundle.crt -- Bundle of CA Root Certificates
+##
+## Certificate data from Mozilla as of: Wed Jan 18 00:04:16 2012
+##
+## This is a bundle of X.509 certificates of public Certificate Authorities
+## (CA). These were automatically extracted from Mozilla's root certificates
+## file (certdata.txt). This file can be found in the mozilla source tree:
+## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
+##
+## It contains the certificates in PEM format and therefore
+## can be directly used with curl / libcurl / php_curl, or with
+## an Apache+mod_ssl webserver for SSL client authentication.
+## Just configure this file as the SSLCACertificateFile.
+##
+
+# ***** BEGIN LICENSE BLOCK *****
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# The Original Code is the Netscape security libraries.
+#
+# The Initial Developer of the Original Code is
+# Netscape Communications Corporation.
+# Portions created by the Initial Developer are Copyright (C) 1994-2000
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either the GNU General Public License Version 2 or later (the "GPL"), or
+# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+# in which case the provisions of the GPL or the LGPL are applicable instead
+# of those above. If you wish to allow use of your version of this file only
+# under the terms of either the GPL or the LGPL, and not to allow others to
+# use your version of this file under the terms of the MPL, indicate your
+# decision by deleting the provisions above and replace them with the notice
+# and other provisions required by the GPL or the LGPL. If you do not delete
+# the provisions above, a recipient may use your version of this file under
+# the terms of any one of the MPL, the GPL or the LGPL.
+#
+# ***** END LICENSE BLOCK *****
+# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.81 $ $Date: 2012/01/17 22:02:37 $
+
+GTE CyberTrust Global Root
+==========================
+-----BEGIN CERTIFICATE-----
+MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
+Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
+A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
+MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
+Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
+IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
+sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
+HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
+AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
+M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
+NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
+-----END CERTIFICATE-----
+
+Thawte Server CA
+================
+-----BEGIN CERTIFICATE-----
+MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
+DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
+dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
+AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
+b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
+BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
+c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
+A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
+ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
+/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
+1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
+MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
+GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
+GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
+-----END CERTIFICATE-----
+
+Thawte Premium Server CA
+========================
+-----BEGIN CERTIFICATE-----
+MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
+DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
+dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
+AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
+ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
+AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
+VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
+aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
+cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
+aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
+Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
+qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
+SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
+8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
+UCemDaYj+bvLpgcUQg==
+-----END CERTIFICATE-----
+
+Equifax Secure CA
+=================
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
+ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
+MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
+B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
+nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
+fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
+8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
+A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
+CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
+A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
+spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
+Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
+zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
+BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
+70+sB3c4
+-----END CERTIFICATE-----
+
+Digital Signature Trust Co. Global CA 1
+=======================================
+-----BEGIN CERTIFICATE-----
+MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
+ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy
+MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
+IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA
+A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE
+NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i
+o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
+BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
+dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
+IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY
+MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM
+BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
+ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq
+kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4
+RbyhkwS7hp86W0N6w4pl
+-----END CERTIFICATE-----
+
+Digital Signature Trust Co. Global CA 3
+=======================================
+-----BEGIN CERTIFICATE-----
+MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
+ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy
+MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
+IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA
+A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD
+VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS
+xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
+BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
+dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
+IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
+MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM
+BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
+AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi
+up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1
+mPnHfxsb1gYgAlihw6ID
+-----END CERTIFICATE-----
+
+Verisign Class 3 Public Primary Certification Authority
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
+FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
+IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
+XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
+IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
+A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
+f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
+hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
+TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
+WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
+Tqj/ZA1k
+-----END CERTIFICATE-----
+
+Verisign Class 3 Public Primary Certification Authority - G2
+============================================================
+-----BEGIN CERTIFICATE-----
+MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
+MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
+eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
+dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
+MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
+eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
+dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
+FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
+lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
+MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
+1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
+Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
+-----END CERTIFICATE-----
+
+GlobalSign Root CA
+==================
+-----BEGIN CERTIFICATE-----
+MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
+GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
+b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
+BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
+VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
+DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
+THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
+Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
+c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
+gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
+HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
+AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
+Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
+j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
+hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
+X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
+-----END CERTIFICATE-----
+
+GlobalSign Root CA - R2
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
+YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
+bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
+aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
+bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
+ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
+s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
+S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
+TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
+ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
+FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
+YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
+BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
+9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
+01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
+9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
+TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
+-----END CERTIFICATE-----
+
+ValiCert Class 1 VA
+===================
+-----BEGIN CERTIFICATE-----
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
+b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
+bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
+MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
+d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
+UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
+LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
+A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
+GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
+DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
+lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
+icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
+Orf1LXLI
+-----END CERTIFICATE-----
+
+ValiCert Class 2 VA
+===================
+-----BEGIN CERTIFICATE-----
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
+b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
+bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
+MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
+d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
+UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
+LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
+A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
+CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
+ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
+SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
+UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
+W9ViH0Pd
+-----END CERTIFICATE-----
+
+RSA Root Certificate 1
+======================
+-----BEGIN CERTIFICATE-----
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
+b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
+bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
+MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
+d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
+UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
+LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
+A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
+3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
+BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
+3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
+V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
+on+jjBXu
+-----END CERTIFICATE-----
+
+Verisign Class 3 Public Primary Certification Authority - G3
+============================================================
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
+UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
+cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
+IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
+dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
+cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
+Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
+EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
+cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
+EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
+055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
+ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
+j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
+/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
+xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
+t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
+-----END CERTIFICATE-----
+
+Verisign Class 4 Public Primary Certification Authority - G3
+============================================================
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
+UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
+cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
+IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
+dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
+cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
+Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
+tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
+8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
+Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
+Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
+j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
+mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
+fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
+RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
+UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
+-----END CERTIFICATE-----
+
+Entrust.net Secure Server CA
+============================
+-----BEGIN CERTIFICATE-----
+MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
+BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
+cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
+ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
+cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
+A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
+eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
+dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
+aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
+gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
+ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
+CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
+dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
+bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
+cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
+dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
+NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
+HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
+BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
+Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
+n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
+-----END CERTIFICATE-----
+
+Entrust.net Premium 2048 Secure Server CA
+=========================================
+-----BEGIN CERTIFICATE-----
+MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
+ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
+bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
+BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
+NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
+d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
+MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
+ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
+Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
+hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
+nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
+VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC
+AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER
+gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
+AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
+oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS
+o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z
+2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX
+OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
+-----END CERTIFICATE-----
+
+Baltimore CyberTrust Root
+=========================
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
+ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
+ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
+SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
+dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
+uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
+UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
+G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
+XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
+l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
+VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
+BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
+cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
+hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
+Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
+RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
+-----END CERTIFICATE-----
+
+Equifax Secure Global eBusiness CA
+==================================
+-----BEGIN CERTIFICATE-----
+MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
+RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
+bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
+HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
+b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
+PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
+qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
+hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
+BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
+MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
+I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
+NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
+-----END CERTIFICATE-----
+
+Equifax Secure eBusiness CA 1
+=============================
+-----BEGIN CERTIFICATE-----
+MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
+RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
+LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
+ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
+IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
+1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
+IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
+MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
+Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
+AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
+lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
+KpYrtWKmpj29f5JZzVoqgrI3eQ==
+-----END CERTIFICATE-----
+
+Equifax Secure eBusiness CA 2
+=============================
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE
+ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
+MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT
+DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB
+nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn
+2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5
+BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG
+A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx
+JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG
+A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e
+uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB
+Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1
+jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia
+78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm
+V+GRMOrN
+-----END CERTIFICATE-----
+
+AddTrust Low-Value Services Root
+================================
+-----BEGIN CERTIFICATE-----
+MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
+QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
+cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
+CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
+ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
+54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
+oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
+Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
+GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
+HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
+AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
+RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
+HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
+ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
+iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
+eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
+mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
+ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
+-----END CERTIFICATE-----
+
+AddTrust External Root
+======================
+-----BEGIN CERTIFICATE-----
+MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
+QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
+VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
+NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
+cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
+Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
++iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
+Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
+aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
+2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
+7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
+BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
+VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
+VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
+IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
+j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
+6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
+e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
+G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
+-----END CERTIFICATE-----
+
+AddTrust Public Services Root
+=============================
+-----BEGIN CERTIFICATE-----
+MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
+QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
+cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
+BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
+dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
+nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
+d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
+Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
+HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
+A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
+/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
+FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
+A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
+JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
++YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
+GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
+Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
+EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
+-----END CERTIFICATE-----
+
+AddTrust Qualified Certificates Root
+====================================
+-----BEGIN CERTIFICATE-----
+MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
+QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
+cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
+CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
+IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
+64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
+KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
+L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
+wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
+MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
+BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
+BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
+azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
+ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
+GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
+dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
+RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
+iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
+-----END CERTIFICATE-----
+
+Entrust Root Certification Authority
+====================================
+-----BEGIN CERTIFICATE-----
+MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
+BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
+b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
+A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
+MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
+MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
+Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
+dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
+A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
+Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
+j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
+rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
+DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
+MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
+hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
+A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
+Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
+v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
+W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
+tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
+-----END CERTIFICATE-----
+
+RSA Security 2048 v3
+====================
+-----BEGIN CERTIFICATE-----
+MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
+ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
+MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
+BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
+Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
+WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
+KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
++Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
+MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
+FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
+v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
+0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
+VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
+nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
+pKnXwiJPZ9d37CAFYd4=
+-----END CERTIFICATE-----
+
+GeoTrust Global CA
+==================
+-----BEGIN CERTIFICATE-----
+MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
+Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
+MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
+LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
+BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
+8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
+T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
+vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
+AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
+DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
+zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
+d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
+mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
+XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
+Mw==
+-----END CERTIFICATE-----
+
+GeoTrust Global CA 2
+====================
+-----BEGIN CERTIFICATE-----
+MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
+R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
+MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
+LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
+NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
+LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
+Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
+HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
+MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
+K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
+srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
+ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
+OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
+x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
+H4z1Ir+rzoPz4iIprn2DQKi6bA==
+-----END CERTIFICATE-----
+
+GeoTrust Universal CA
+=====================
+-----BEGIN CERTIFICATE-----
+MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
+R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
+MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
+Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
+ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
+JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
+RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
+7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
+8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
+qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
+Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
+Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
+KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
+ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
+XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
+hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
+aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
+qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
+oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
+xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
+KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
+DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
+xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
+p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
+P/rmMuGNG2+k5o7Y+SlIis5z/iw=
+-----END CERTIFICATE-----
+
+GeoTrust Universal CA 2
+=======================
+-----BEGIN CERTIFICATE-----
+MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
+R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
+MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
+SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
+A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
+DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
+j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
+JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
+QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
+WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
+20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
+ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
+SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
+8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
++/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
+BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
+dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
+4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
+A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
+Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
+pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
+FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
+gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
+X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
+-----END CERTIFICATE-----
+
+America Online Root Certification Authority 1
+=============================================
+-----BEGIN CERTIFICATE-----
+MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
+QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
+Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
+A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
+T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
+v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
+DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
+sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
+8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
+AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
+o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
+GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
+VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
+3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
+Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
+sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
+-----END CERTIFICATE-----
+
+America Online Root Certification Authority 2
+=============================================
+-----BEGIN CERTIFICATE-----
+MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
+QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
+Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG
+A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
+T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD
+ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en
+fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8
+f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO
+qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN
+RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0
+gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn
+6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid
+FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6
+Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj
+B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
+aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
+AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY
+T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p
++DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg
+JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy
+zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO
+ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh
+1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf
+GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff
+Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP
+cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
+-----END CERTIFICATE-----
+
+Visa eCommerce Root
+===================
+-----BEGIN CERTIFICATE-----
+MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
+EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
+QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
+WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
+VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
+bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
+F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
+RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
+TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
+/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
+GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
+MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
+CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
+YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
+zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
+YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
+398znM/jra6O1I7mT1GvFpLgXPYHDw==
+-----END CERTIFICATE-----
+
+Certum Root CA
+==============
+-----BEGIN CERTIFICATE-----
+MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
+ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
+Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
+by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
+wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
+kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
+89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
+Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
+NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
+hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
+GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
+GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
+0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
+qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
+-----END CERTIFICATE-----
+
+Comodo AAA Services root
+========================
+-----BEGIN CERTIFICATE-----
+MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
+R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
+TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
+MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
+c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
+BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
+C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
+i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
+Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
+Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
+Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
+BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
+cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
+LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
+7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
+Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
+8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
+12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
+-----END CERTIFICATE-----
+
+Comodo Secure Services root
+===========================
+-----BEGIN CERTIFICATE-----
+MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
+R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
+TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
+MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
+Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
+BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
+9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
+rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
+oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
+p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
+FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
+gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
+YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
+aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
+4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
+Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
+DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
+pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
+RR3B7Hzs/Sk=
+-----END CERTIFICATE-----
+
+Comodo Trusted Services root
+============================
+-----BEGIN CERTIFICATE-----
+MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
+R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
+TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
+MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
+bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
+IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
+3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
+/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
+juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
+ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
+DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
+/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
+ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
+cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
+uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
+pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
+BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
+R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
+9y5Xt5hwXsjEeLBi
+-----END CERTIFICATE-----
+
+QuoVadis Root CA
+================
+-----BEGIN CERTIFICATE-----
+MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
+ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
+MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
+cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
+EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
+J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
+F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
+YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
+AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
+PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
+ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
+MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
+YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
+ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
+Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
+Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
+BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
+FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
+tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
+fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
+LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
+gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
+5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
+5nrQNiOKSnQ2+Q==
+-----END CERTIFICATE-----
+
+QuoVadis Root CA 2
+==================
+-----BEGIN CERTIFICATE-----
+MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
+EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
+ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
+aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
+DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
+XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
+lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
+lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
+lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
+66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
+wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
+D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
+BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
+J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
+DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
+a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
+ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
+Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
+UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
+VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
++JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
+IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
+WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
+f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
+4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
+VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
+-----END CERTIFICATE-----
+
+QuoVadis Root CA 3
+==================
+-----BEGIN CERTIFICATE-----
+MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
+EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
+OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
+aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
+DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
+DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
+KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
+DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
+BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
+p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
+nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
+MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
+Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
+uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
+BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
+YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
+aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
+BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
+ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
+AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
+qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
+hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
+POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
+Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
+8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
+bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
+g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
+vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
+qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
+-----END CERTIFICATE-----
+
+Security Communication Root CA
+==============================
+-----BEGIN CERTIFICATE-----
+MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
+U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
+HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
+U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
+8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
+DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
+5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
+DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
+JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
+DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
+0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
+mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
+s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
+6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
+FL39vmwLAw==
+-----END CERTIFICATE-----
+
+Sonera Class 2 Root CA
+======================
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
+U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
+NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
+IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
+/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
+dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
+f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
+tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
+nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
+XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
+0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
+cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
+Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
+EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
+llpwrN9M
+-----END CERTIFICATE-----
+
+Staat der Nederlanden Root CA
+=============================
+-----BEGIN CERTIFICATE-----
+MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
+ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
+Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
+HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
+bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
+vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
+jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
+C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
+vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
+22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
+HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
+dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
+BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
+EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
+MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
+nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
+iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
+-----END CERTIFICATE-----
+
+TDC Internet Root CA
+====================
+-----BEGIN CERTIFICATE-----
+MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE
+ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx
+NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu
+ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j
+xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL
+znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc
+5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6
+otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI
+AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM
+VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM
+MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC
+AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe
+UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G
+CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
+gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
+2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb
+O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU
+Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
+-----END CERTIFICATE-----
+
+TDC OCES Root CA
+================
+-----BEGIN CERTIFICATE-----
+MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE
+ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5
+MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB
+IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH
+nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0
+zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV
+iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde
+dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO
+3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB
+5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k
+ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm
+cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp
+Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x
+LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM
+MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm
+aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
+MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647
++RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6
+NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4
+A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc
+A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9
+AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1
+AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw==
+-----END CERTIFICATE-----
+
+UTN DATACorp SGC Root CA
+========================
+-----BEGIN CERTIFICATE-----
+MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
+BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
+IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
+BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
+MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
+HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
+dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
+raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
+wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
+9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
+33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
+DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
+BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
+LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
+DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
+Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
+I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
+EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
+DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
+-----END CERTIFICATE-----
+
+UTN USERFirst Hardware Root CA
+==============================
+-----BEGIN CERTIFICATE-----
+MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
+BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
+IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
+BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
+OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
+eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
+ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
+wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
+tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
+i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
+Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
+gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
+lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
+UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
+BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
+//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
+XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
+lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
+iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
+nfhmqA==
+-----END CERTIFICATE-----
+
+Camerfirma Chambers of Commerce Root
+====================================
+-----BEGIN CERTIFICATE-----
+MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
+QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
+ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
+NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
+cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
+MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
+AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
+xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
+NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
+DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
+d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
+EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
+cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
+AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
+bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
+VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
+aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
+fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
+L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
+UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
+ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
+erfutGWaIZDgqtCYvDi1czyL+Nw=
+-----END CERTIFICATE-----
+
+Camerfirma Global Chambersign Root
+==================================
+-----BEGIN CERTIFICATE-----
+MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
+QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
+ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
+NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
+YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
+MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
+ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
+1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
+by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
+6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
+8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
+BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
+aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
+Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
+aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
+ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
+bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
+PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
+gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
+PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
+IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
+t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
+-----END CERTIFICATE-----
+
+NetLock Notary (Class A) Root
+=============================
+-----BEGIN CERTIFICATE-----
+MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
+EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
+dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
+ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
+DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
+EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
+VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
+cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
+D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
+z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
+/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
+tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
+4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
+A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
+Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
+bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
+IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
+LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
+ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
+IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
+IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
+b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
+bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
+Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
+bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
+ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
+ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
+CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
+KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
+8CgHrTwXZoi1/baI
+-----END CERTIFICATE-----
+
+NetLock Business (Class B) Root
+===============================
+-----BEGIN CERTIFICATE-----
+MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT
+CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
+BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg
+VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD
+VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv
+bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg
+VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
+iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S
+o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr
+1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV
+HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ
+RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh
+dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0
+ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv
+c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
+YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
+c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz
+Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA
+bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
+IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2
+YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj
+cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM
+43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR
+stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI
+-----END CERTIFICATE-----
+
+NetLock Express (Class C) Root
+==============================
+-----BEGIN CERTIFICATE-----
+MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT
+CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV
+BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD
+KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ
+BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
+dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j
+ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB
+jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z
+W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63
+euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw
+DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN
+RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn
+YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB
+IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i
+aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
+ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
+ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo
+dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y
+emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k
+IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ
+UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg
+YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2
+xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW
+gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A==
+-----END CERTIFICATE-----
+
+XRamp Global CA Root
+====================
+-----BEGIN CERTIFICATE-----
+MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
+BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
+dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
+dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
+HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
+U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
+IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
+foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
+zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
+AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
+xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
+EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
+oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
+AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
+/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
+qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
+nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
+8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
+-----END CERTIFICATE-----
+
+Go Daddy Class 2 CA
+===================
+-----BEGIN CERTIFICATE-----
+MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
+VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
+A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
+RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
+ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
+2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
+qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
+YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
+vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
+BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
+atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
+MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
+A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
+PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
+I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
+HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
+Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
+vZ8=
+-----END CERTIFICATE-----
+
+Starfield Class 2 CA
+====================
+-----BEGIN CERTIFICATE-----
+MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
+U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
+Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
+MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
+A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
+SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
+bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
+JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
+epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
+F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
+MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
+hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
+bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
+afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
+PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
+xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
+KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
+QBFGmh95DmK/D5fs4C8fF5Q=
+-----END CERTIFICATE-----
+
+StartCom Certification Authority
+================================
+-----BEGIN CERTIFICATE-----
+MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
+U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
+ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
+NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
+LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
+U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
+ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
+o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
+Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
+eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
+2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
+6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
+osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
+untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
+UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
+37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
+FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
+Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
+YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
+AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
+Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
+U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
+LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
+cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
+cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
+dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
+AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
+3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
+vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
+fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
+fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
+EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
+yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
+1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
+lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
+g14=
+-----END CERTIFICATE-----
+
+Taiwan GRCA
+===========
+-----BEGIN CERTIFICATE-----
+MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
+EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
+DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
+dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
+ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
+w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
+BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
+1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
+htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
+J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
+Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
+B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
+O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
+lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
+HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
+09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
+TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
+Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
+Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
+D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
+DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
+Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
+7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
+CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
++fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
+-----END CERTIFICATE-----
+
+Firmaprofesional Root CA
+========================
+-----BEGIN CERTIFICATE-----
+MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT
+GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp
+Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA
+ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL
+MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT
+OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2
+ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V
+j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH
+lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf
+3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8
+NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww
+KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG
+AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud
+DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD
+ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
+u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf
+wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm
+7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG
+VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA=
+-----END CERTIFICATE-----
+
+Wells Fargo Root CA
+===================
+-----BEGIN CERTIFICATE-----
+MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV
+BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv
+cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
+MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl
+bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv
+MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX
+x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3
+E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5
+OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j
+sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj
+YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF
+BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD
+ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv
+m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R
+OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
+x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023
+tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
+-----END CERTIFICATE-----
+
+Swisscom Root CA 1
+==================
+-----BEGIN CERTIFICATE-----
+MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
+EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
+dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
+MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
+aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
+IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
+MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
+NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
+AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
+b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
+7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
+cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
+WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
+haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
+MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
+HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
+BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
+MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
+jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
+MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
+VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
+vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
+OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
+1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
+nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
+x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
+NY6E0F/6MBr1mmz0DlP5OlvRHA==
+-----END CERTIFICATE-----
+
+DigiCert Assured ID Root CA
+===========================
+-----BEGIN CERTIFICATE-----
+MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
+IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
+MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
+ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
+9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
+UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
+/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
+oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
+GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
+66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
+hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
+EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
+SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
+8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
+-----END CERTIFICATE-----
+
+DigiCert Global Root CA
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
+HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
+MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
+dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
+hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
+TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
+BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
+4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
+7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
+o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
+8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
+BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
+EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
+tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
+UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
+CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
+-----END CERTIFICATE-----
+
+DigiCert High Assurance EV Root CA
+==================================
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
+KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
+MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
+MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
+Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
+Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
+OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
+MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
+NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
+h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
+Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
+JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
+V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
+myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
+mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
+vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
+-----END CERTIFICATE-----
+
+Certplus Class 2 Primary CA
+===========================
+-----BEGIN CERTIFICATE-----
+MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
+BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
+OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
+dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
+5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
+Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
+YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
+e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
+CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
+YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
+L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
+P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
+TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
+7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
+//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
+l7+ijrRU
+-----END CERTIFICATE-----
+
+DST Root CA X3
+==============
+-----BEGIN CERTIFICATE-----
+MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
+ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
+DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
+cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
+rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
+UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
+xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
+utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
+AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
+MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
+dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
+GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
+RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
+fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
+-----END CERTIFICATE-----
+
+DST ACES CA X6
+==============
+-----BEGIN CERTIFICATE-----
+MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
+EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
+MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
+MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
+CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
+DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
+pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
+GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
+MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
+EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
+Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
+dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
+CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
+5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
+Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
+nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
+vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
+oKfN5XozNmr6mis=
+-----END CERTIFICATE-----
+
+TURKTRUST Certificate Services Provider Root 1
+==============================================
+-----BEGIN CERTIFICATE-----
+MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
+bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
+MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
+acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
+MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
+U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
+TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
+aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
+yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
+Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
+8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
+W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
+BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
+sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
+q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
+B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
+nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
+-----END CERTIFICATE-----
+
+TURKTRUST Certificate Services Provider Root 2
+==============================================
+-----BEGIN CERTIFICATE-----
+MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
+bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
+MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
+QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
+MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
+dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
+A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
+acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
+LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
+x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
+QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
+5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
+AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
+A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
+Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
+Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
+9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
+UrbnBEI=
+-----END CERTIFICATE-----
+
+SwissSign Gold CA - G2
+======================
+-----BEGIN CERTIFICATE-----
+MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
+EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
+MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
+c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
+AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
+t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
+jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
+vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
+ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
+AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
+jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
+peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
+7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
+GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
+OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
+L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
+5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
+44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
+Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
+Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
+mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
+vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
+KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
+NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
+viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
+-----END CERTIFICATE-----
+
+SwissSign Silver CA - G2
+========================
+-----BEGIN CERTIFICATE-----
+MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT
+BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
+DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3
+aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
+9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
+N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm
++/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
+6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu
+MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h
+qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5
+FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
+ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
+celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X
+CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
+BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
+tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
+cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
+4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
+kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L
+3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx
+/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa
+DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
+e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
+WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ
+DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
+DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
+-----END CERTIFICATE-----
+
+GeoTrust Primary Certification Authority
+========================================
+-----BEGIN CERTIFICATE-----
+MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
+EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
+ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
+CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
+cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
+b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
+nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
+RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
+tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
+AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
+hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
+Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
+NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
+Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
+1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
+-----END CERTIFICATE-----
+
+thawte Primary Root CA
+======================
+-----BEGIN CERTIFICATE-----
+MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
+BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
+aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
+cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
+MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
+SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
+KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
+FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
+oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
+1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
+q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
+aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
+afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
+VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
+AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
+uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
+xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
+jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
+z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
+-----END CERTIFICATE-----
+
+VeriSign Class 3 Public Primary Certification Authority - G5
+============================================================
+-----BEGIN CERTIFICATE-----
+MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
+BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
+ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
+IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
+yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
+biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
+dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
+j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
+Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
+Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
+fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
+BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
+Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
+aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
+SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
+KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
+Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
+ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
+-----END CERTIFICATE-----
+
+SecureTrust CA
+==============
+-----BEGIN CERTIFICATE-----
+MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
+EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
+dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
+BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
+OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
+DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
+GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
+01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
+ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
+BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
+aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
+KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
+SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
+mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
+nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
+3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
+-----END CERTIFICATE-----
+
+Secure Global CA
+================
+-----BEGIN CERTIFICATE-----
+MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
+EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
+bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
+MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
+Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
+YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
+bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
+8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
+HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
+0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
+EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
+oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
+MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
+CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
+3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
+f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
+-----END CERTIFICATE-----
+
+COMODO Certification Authority
+==============================
+-----BEGIN CERTIFICATE-----
+MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
+BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
+A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
+dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
+MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
+T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
++7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
+xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
+4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
+1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
+rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
+BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
+b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
+AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
+OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
+RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
+IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
++8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
+-----END CERTIFICATE-----
+
+Network Solutions Certificate Authority
+=======================================
+-----BEGIN CERTIFICATE-----
+MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
+EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
+IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
+MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
+MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
+jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
+aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
+crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
+/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
+AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
+BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
+bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
+A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
+4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
+GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
+wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
+ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
+-----END CERTIFICATE-----
+
+WellsSecure Public Root Certificate Authority
+=============================================
+-----BEGIN CERTIFICATE-----
+MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
+F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
+NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
+MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
+bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
+VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
+iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
+i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
+bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
+K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
+AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
+cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
+lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
+i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
+GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
+Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
+K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
+bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
+qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
+E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
+tylv2G0xffX8oRAHh84vWdw+WNs=
+-----END CERTIFICATE-----
+
+COMODO ECC Certification Authority
+==================================
+-----BEGIN CERTIFICATE-----
+MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
+R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
+ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
+dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
+GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
+Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
+b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
+4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
+wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
+BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
+FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
+U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
+-----END CERTIFICATE-----
+
+IGC/A
+=====
+-----BEGIN CERTIFICATE-----
+MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
+VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
+Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
+MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
+EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
+STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
+IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
+TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
+So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
+HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
+frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
+tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
+egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
+iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
+q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
+MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
+Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
+lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
+0mBWWg==
+-----END CERTIFICATE-----
+
+Security Communication EV RootCA1
+=================================
+-----BEGIN CERTIFICATE-----
+MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
+U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
+dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
+BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
+Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
+/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
+WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
+ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
+bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
+9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
+SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
+iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
+Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
+mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
+T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
+-----END CERTIFICATE-----
+
+OISTE WISeKey Global Root GA CA
+===============================
+-----BEGIN CERTIFICATE-----
+MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
+BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
+A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
+bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
+VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
+IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
+IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
+Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
+Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
+d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
+/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
+LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
+KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
+MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
++vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
+hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
+okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
+-----END CERTIFICATE-----
+
+Microsec e-Szigno Root CA
+=========================
+-----BEGIN CERTIFICATE-----
+MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
+BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
+EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
+MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
+dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
+GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
+d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
+oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
+QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
+PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
+MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
+IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
+VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
+LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
+dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
+AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
+4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
+AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
+egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
+Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
+PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
+c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
+cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
+IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
+WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
+MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
+MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
+Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
+HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
+nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
+aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
+86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
+yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
+S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
+-----END CERTIFICATE-----
+
+Certigna
+========
+-----BEGIN CERTIFICATE-----
+MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
+EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
+MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
+Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
+XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
+GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
+ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
+DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
+Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
+tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
+BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
+SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
+hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
+PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
+1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
+WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
+-----END CERTIFICATE-----
+
+AC Ra\xC3\xADz Certic\xC3\xA1mara S.A.
+======================================
+-----BEGIN CERTIFICATE-----
+MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT
+AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg
+LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w
+HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+
+U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh
+IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B
+AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN
+yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU
+2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3
+4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP
+2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm
+8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf
+HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa
+Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK
+5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b
+czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
+AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g
+ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF
+BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug
+cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf
+AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX
+EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v
+/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3
+MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4
+3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk
+eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f
+/RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h
+RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU
+Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ==
+-----END CERTIFICATE-----
+
+TC TrustCenter Class 2 CA II
+============================
+-----BEGIN CERTIFICATE-----
+MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
+REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
+IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw
+MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
+c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE
+AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw
+IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2
+xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ
+Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u
+SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB
+/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB
+7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
+Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
+cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
+SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
+TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G
+dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ
+KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj
+TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP
+JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk
+vQ==
+-----END CERTIFICATE-----
+
+TC TrustCenter Class 3 CA II
+============================
+-----BEGIN CERTIFICATE-----
+MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
+REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
+IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw
+MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
+c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE
+AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W
+yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo
+6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ
+uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk
+2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB
+/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB
+7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
+Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
+cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
+SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
+TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE
+O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8
+yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9
+IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal
+092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc
+5A==
+-----END CERTIFICATE-----
+
+TC TrustCenter Universal CA I
+=============================
+-----BEGIN CERTIFICATE-----
+MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC
+REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
+IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN
+MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg
+VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw
+JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC
+qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv
+xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw
+ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O
+gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j
+BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG
+1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy
+vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3
+ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
+ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a
+7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
+-----END CERTIFICATE-----
+
+Deutsche Telekom Root CA 2
+==========================
+-----BEGIN CERTIFICATE-----
+MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
+RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
+A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
+MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
+A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
+b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
+bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
+KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
+AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
+Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
+jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
+HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
+E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
+zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
+rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
+dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
+Cm26OWMohpLzGITY+9HPBVZkVw==
+-----END CERTIFICATE-----
+
+ComSign Secured CA
+==================
+-----BEGIN CERTIFICATE-----
+MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE
+AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w
+NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD
+QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs
+49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH
+7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB
+kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1
+9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw
+AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t
+U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA
+j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC
+AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a
+BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp
+FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP
+51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
+OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
+-----END CERTIFICATE-----
+
+Cybertrust Global Root
+======================
+-----BEGIN CERTIFICATE-----
+MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
+ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
+MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
+ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
++Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
+0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
+AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
+89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
+8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
+BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
+MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
+A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
+lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
+5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
+hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
+X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
+WL1WMRJOEcgh4LMRkWXbtKaIOM5V
+-----END CERTIFICATE-----
+
+ePKI Root Certification Authority
+=================================
+-----BEGIN CERTIFICATE-----
+MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG
+EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
+Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx
+MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq
+MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
+AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs
+IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi
+lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv
+qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
+12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O
+WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+
+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao
+lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
+vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi
+Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi
+MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
+ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
+1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq
+KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV
+xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP
+NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r
+GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE
+xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx
+gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy
+sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
+BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
+-----END CERTIFICATE-----
+
+T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
+=============================================================================================================================
+-----BEGIN CERTIFICATE-----
+MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
+DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
+aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
+b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
+BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
+S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
+MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
+IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
+n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
+IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
+dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
+cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
+Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
+xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
+6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
+hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
+BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
+MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
+N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
+y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
+LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
+dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
+-----END CERTIFICATE-----
+
+Buypass Class 2 CA 1
+====================
+-----BEGIN CERTIFICATE-----
+MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
+QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
+MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
+c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
+cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
+0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
+0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
+uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
+MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
+AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
+1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
+7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
+fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
+wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
+-----END CERTIFICATE-----
+
+Buypass Class 3 CA 1
+====================
+-----BEGIN CERTIFICATE-----
+MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
+QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1
+MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
+c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx
+ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0
+n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia
+AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c
+1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC
+MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P
+AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7
+pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA
+EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5
+htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj
+el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
+-----END CERTIFICATE-----
+
+EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
+==========================================================================
+-----BEGIN CERTIFICATE-----
+MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF
+bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg
+QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe
+Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
+ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt
+IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG
+SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by
+X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b
+gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr
+eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ
+TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy
+Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn
+uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI
+qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
+ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0
+Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
+/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW
+Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
+FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm
+zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
+XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT
+bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU
+RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK
+1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt
+2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ
+Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9
+AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
+-----END CERTIFICATE-----
+
+certSIGN ROOT CA
+================
+-----BEGIN CERTIFICATE-----
+MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
+VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
+Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
+CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
+JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
+rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
+ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
+0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
+AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
+Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
+AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
+SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
+x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
+vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
+TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
+-----END CERTIFICATE-----
+
+CNNIC ROOT
+==========
+-----BEGIN CERTIFICATE-----
+MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
+ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
+OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
+o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
+VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
+VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
+czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
+y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
+wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
+lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
+Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
+O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
+BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
+G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
+mxE=
+-----END CERTIFICATE-----
+
+ApplicationCA - Japanese Government
+===================================
+-----BEGIN CERTIFICATE-----
+MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
+SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
+MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
+cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
+fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
+wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
+jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
+nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
+WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
+BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
+vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
+o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
+/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
+io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
+dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
+rosot4LKGAfmt1t06SAZf7IbiVQ=
+-----END CERTIFICATE-----
+
+GeoTrust Primary Certification Authority - G3
+=============================================
+-----BEGIN CERTIFICATE-----
+MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
+BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
+IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
+eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
+NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
+YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
+LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
+K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
+c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
+IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
+dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
+MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
+2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
+cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
+Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
+AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
+t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
+-----END CERTIFICATE-----
+
+thawte Primary Root CA - G2
+===========================
+-----BEGIN CERTIFICATE-----
+MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
+VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
+IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
+Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
+MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
+b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
+IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
+LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
+8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
+mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
+G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
+rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
+-----END CERTIFICATE-----
+
+thawte Primary Root CA - G3
+===========================
+-----BEGIN CERTIFICATE-----
+MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
+BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
+aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
+cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
+ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
+d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
+VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
+A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
+P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
++BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
+7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
+vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
+BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
+KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
+A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
+t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
+8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
+er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
+-----END CERTIFICATE-----
+
+GeoTrust Primary Certification Authority - G2
+=============================================
+-----BEGIN CERTIFICATE-----
+MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
+VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
+Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
+ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
+OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
+MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
+b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
+BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
+KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
+VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
+EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
+ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
+npaqBA+K
+-----END CERTIFICATE-----
+
+VeriSign Universal Root Certification Authority
+===============================================
+-----BEGIN CERTIFICATE-----
+MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
+BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
+ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
+IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
+IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
+UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
+cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
+IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
+1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
+MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
+9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
+AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
+tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
+CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
+a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
+DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
+Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
+Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
+P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
+wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
+mJO37M2CYfE45k+XmCpajQ==
+-----END CERTIFICATE-----
+
+VeriSign Class 3 Public Primary Certification Authority - G4
+============================================================
+-----BEGIN CERTIFICATE-----
+MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
+VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
+b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
+ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
+MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
+cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
+b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
+IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
+Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
+rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
+/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
+HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
+Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
+A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
+AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
+-----END CERTIFICATE-----
+
+NetLock Arany (Class Gold) Főtanúsítvány
+============================================
+-----BEGIN CERTIFICATE-----
+MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
+A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
+dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
+cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
+MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
+ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
+biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
+c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
+0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
+/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
+H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
+fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
+neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
+BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
+qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
+YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
+bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
+NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
+dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
+-----END CERTIFICATE-----
+
+Staat der Nederlanden Root CA - G2
+==================================
+-----BEGIN CERTIFICATE-----
+MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
+CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
+Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC
+TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
+ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ
+5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn
+vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj
+CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil
+e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR
+OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI
+CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65
+48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi
+trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737
+qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB
+AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC
+ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
+HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA
+A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz
++51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj
+f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN
+kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk
+CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF
+URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb
+CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h
+oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV
+IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm
+66+KAQ==
+-----END CERTIFICATE-----
+
+CA Disig
+========
+-----BEGIN CERTIFICATE-----
+MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
+QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
+MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
+bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
+GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
+Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
+hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
+ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
+gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
+AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
+aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
+ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
+BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
+WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
+mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
+CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
+ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
+4Z7CRneC9VkGjCFMhwnN5ag=
+-----END CERTIFICATE-----
+
+Juur-SK
+=======
+-----BEGIN CERTIFICATE-----
+MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
+c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
+DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
+SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
+aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
+TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
++Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
+UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
+Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
+MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
+HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
+AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
+cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
+AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
+cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
+FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
+A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
+ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
+abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
+IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
+Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
+yyqcjg==
+-----END CERTIFICATE-----
+
+Hongkong Post Root CA 1
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
+DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
+NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
+IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
+ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
+auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
+qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
+V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
+HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
+h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
+l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
+IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
+T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
+c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
+-----END CERTIFICATE-----
+
+SecureSign RootCA11
+===================
+-----BEGIN CERTIFICATE-----
+MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
+SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
+b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
+KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
+cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
+TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
+wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
+g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
+O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
+bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
+t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
+OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
+bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
+Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
+y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
+lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
+-----END CERTIFICATE-----
+
+ACEDICOM Root
+=============
+-----BEGIN CERTIFICATE-----
+MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD
+T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4
+MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG
+A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF
+AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk
+WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD
+YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew
+MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb
+m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk
+HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT
+xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2
+3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9
+2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq
+TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz
+4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU
+9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
+bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg
+aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP
+eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk
+zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1
+ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI
+KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq
+nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE
+I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp
+MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o
+tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA==
+-----END CERTIFICATE-----
+
+Verisign Class 3 Public Primary Certification Authority
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx
+FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
+IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow
+XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
+IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
+A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
+f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
+hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky
+CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX
+bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/
+D/xwzoiQ
+-----END CERTIFICATE-----
+
+Microsec e-Szigno Root CA 2009
+==============================
+-----BEGIN CERTIFICATE-----
+MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
+MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
+c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
+dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
+BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
+U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
+fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
+0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
+pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
+1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
+AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
+QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
+FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
+lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
+I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
+tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
+yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
+LXpUq3DDfSJlgnCW
+-----END CERTIFICATE-----
+
+E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi
+===================================================
+-----BEGIN CERTIFICATE-----
+MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
+EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz
+ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3
+MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0
+cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u
+aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY
+8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y
+jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI
+JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk
+9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD
+AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG
+SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d
+F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq
+D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4
+Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq
+fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX
+-----END CERTIFICATE-----
+
+GlobalSign Root CA - R3
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
+YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
+bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
+aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
+bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
+iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
+0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
+rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
+OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
+xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
+FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
+lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
+EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
+bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
+YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
+kpeDMdmztcpHWD9f
+-----END CERTIFICATE-----
+
+TC TrustCenter Universal CA III
+===============================
+-----BEGIN CERTIFICATE-----
+MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC
+REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
+IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe
+Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU
+QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex
+KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt
+QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO
+juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut
+CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1
+M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G
+A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
+BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA
+g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+
+KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK
+BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV
+CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq
+woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg==
+-----END CERTIFICATE-----
+
+Autoridad de Certificacion Firmaprofesional CIF A62634068
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
+BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
+MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
+QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
+NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
+Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
+B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
+7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
+ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
+plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
+MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
+LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
+bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
+vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
+EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
+DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
+cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
+bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
+ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
+51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
+R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
+T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
+Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
+osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
+crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
+saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
+KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
+6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
+-----END CERTIFICATE-----
+
+Izenpe.com
+==========
+-----BEGIN CERTIFICATE-----
+MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG
+EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz
+MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
+QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ
+03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK
+ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU
++zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC
+PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
+OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK
+F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK
+0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+
+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB
+leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID
+AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+
+SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG
+NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
+MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
+BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l
+Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga
+kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q
+hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs
+g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5
+aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5
+nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC
+ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo
+Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
+WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
+-----END CERTIFICATE-----
+
+Chambers of Commerce Root - 2008
+================================
+-----BEGIN CERTIFICATE-----
+MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
+MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
+bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
+QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
+Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
+ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
+EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
+cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
+AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
+XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
+h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
+ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
+NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
+D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
+lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
+0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
+ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
+EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
+G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
+BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
+bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
+bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
+CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
+AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
+wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
+3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
+RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
+M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
+YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
+9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
+zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
+nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
+OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
+-----END CERTIFICATE-----
+
+Global Chambersign Root - 2008
+==============================
+-----BEGIN CERTIFICATE-----
+MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
+MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
+bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
+QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
+NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
+Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
+QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
+aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
+VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
+XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
+ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
+/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
+TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
+H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
+Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
+HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
+wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
+AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
+BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
+BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
+aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
+aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
+1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
+dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
+/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
+ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
+dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
+9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
+foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
+qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
+P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
+c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
+09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
+-----END CERTIFICATE-----
+
+Go Daddy Root Certificate Authority - G2
+========================================
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
+B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
+MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
+MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
+b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
+A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
+9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
++qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
+fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
+NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
+MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
+BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
+vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
+5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
+N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
+LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
+-----END CERTIFICATE-----
+
+Starfield Root Certificate Authority - G2
+=========================================
+-----BEGIN CERTIFICATE-----
+MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
+B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
+b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
+eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
+DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
+VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
+dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
+W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
+bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
+N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
+ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
+JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
+TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
+4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
+F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
+pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
+c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
+-----END CERTIFICATE-----
+
+Starfield Services Root Certificate Authority - G2
+==================================================
+-----BEGIN CERTIFICATE-----
+MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
+B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
+b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
+IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
+BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
+dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
+Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
+h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
+hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
+LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
+rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
+AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
+SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
+E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
+xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
+iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
+YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
+-----END CERTIFICATE-----
+
+AffirmTrust Commercial
+======================
+-----BEGIN CERTIFICATE-----
+MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
+BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
+MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
+bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
+DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
+C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
+BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
+MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
+HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
+hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
+qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
+0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
+sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
+-----END CERTIFICATE-----
+
+AffirmTrust Networking
+======================
+-----BEGIN CERTIFICATE-----
+MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
+BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
+MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
+bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
+Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
+dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
+/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
+h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
+HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
+UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
+12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
+WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
+/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
+-----END CERTIFICATE-----
+
+AffirmTrust Premium
+===================
+-----BEGIN CERTIFICATE-----
+MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
+BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
+OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
+dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
+MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
+BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
+5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
++7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
+GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
+p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
+S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
+6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
+/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
++Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
+/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
+MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
+Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
+6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
+L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
++4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
+BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
+IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
+g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
+zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
+-----END CERTIFICATE-----
+
+AffirmTrust Premium ECC
+=======================
+-----BEGIN CERTIFICATE-----
+MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
+BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
+MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
+cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
+IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
+N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
+BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
+BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
+57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
+eQ==
+-----END CERTIFICATE-----
+
+Certum Trusted Network CA
+=========================
+-----BEGIN CERTIFICATE-----
+MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
+ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
+MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
+ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
+l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
+J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
+fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
+cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
+Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
+DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
+jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
+mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
+Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
+03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
+-----END CERTIFICATE-----
+
+Certinomis - Autorité Racine
+=============================
+-----BEGIN CERTIFICATE-----
+MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
+Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
+LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG
+A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw
+JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD
+ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa
+wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly
+Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw
+2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N
+jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q
+c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC
+lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb
+xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g
+530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna
+4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
+A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
+KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x
+WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva
+R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40
+nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B
+CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv
+JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE
+qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b
+WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE
+wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
+vgt2Fl43N+bYdJeimUV5
+-----END CERTIFICATE-----
+
+Root CA Generalitat Valenciana
+==============================
+-----BEGIN CERTIFICATE-----
+MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
+ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
+IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
+WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
+CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
+F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
+ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
+D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
+JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
+AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
+dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
+ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
+AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
+YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
+AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
+aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
+AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
+YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
+AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
+OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
+dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
+BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
+A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
+b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
+TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
+Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
+NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
+iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
++GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
+-----END CERTIFICATE-----
+
+A-Trust-nQual-03
+================
+-----BEGIN CERTIFICATE-----
+MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE
+Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy
+a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R
+dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw
+RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0
+ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1
+c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA
+zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n
+yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE
+SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4
+iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V
+cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV
+eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40
+ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr
+sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd
+JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS
+mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6
+ahq97BvIxYSazQ==
+-----END CERTIFICATE-----
+
+TWCA Root Certification Authority
+=================================
+-----BEGIN CERTIFICATE-----
+MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
+VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
+EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
+IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
+QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
+oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
+4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
+y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
+BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
+9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
+mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
+QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
+T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
+Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
+-----END CERTIFICATE-----
+
+Security Communication RootCA2
+==============================
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
+U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
+dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
+SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
+aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
+3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
+spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
+EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
+QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
+CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
+u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
+3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
+tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
+mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
+-----END CERTIFICATE-----
+
+EC-ACC
+======
+-----BEGIN CERTIFICATE-----
+MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
+BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
+ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
+VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
+CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
+BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
+MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
+SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
+Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
+cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
+w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
+ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
+HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
+E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
+0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
+BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
+VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
+Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
+dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
+lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
+Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
+l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
+E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
+5EI=
+-----END CERTIFICATE-----
+
+Hellenic Academic and Research Institutions RootCA 2011
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
+O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
+aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
+IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
+AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
+IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
+IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
+1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
+71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
+8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
+3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
+MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
+MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
+b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
+XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
+TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
+/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
+7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
+-----END CERTIFICATE-----
diff --git a/3rdparty/aws-sdk/lib/requestcore/requestcore.class.php b/3rdparty/aws-sdk/lib/requestcore/requestcore.class.php
new file mode 100755
index 00000000000..087694f08cd
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/requestcore/requestcore.class.php
@@ -0,0 +1,1028 @@
+<?php
+/**
+ * Handles all HTTP requests using cURL and manages the responses.
+ *
+ * @version 2012.01.17
+ * @copyright 2006-2011 Ryan Parman
+ * @copyright 2006-2010 Foleeo Inc.
+ * @copyright 2010-2011 Amazon.com, Inc. or its affiliates.
+ * @copyright 2008-2011 Contributors
+ * @license http://opensource.org/licenses/bsd-license.php Simplified BSD License
+ */
+class RequestCore
+{
+ /**
+ * The URL being requested.
+ */
+ public $request_url;
+
+ /**
+ * The headers being sent in the request.
+ */
+ public $request_headers;
+
+ /**
+ * The body being sent in the request.
+ */
+ public $request_body;
+
+ /**
+ * The response returned by the request.
+ */
+ public $response;
+
+ /**
+ * The headers returned by the request.
+ */
+ public $response_headers;
+
+ /**
+ * The body returned by the request.
+ */
+ public $response_body;
+
+ /**
+ * The HTTP status code returned by the request.
+ */
+ public $response_code;
+
+ /**
+ * Additional response data.
+ */
+ public $response_info;
+
+ /**
+ * The handle for the cURL object.
+ */
+ public $curl_handle;
+
+ /**
+ * The method by which the request is being made.
+ */
+ public $method;
+
+ /**
+ * Stores the proxy settings to use for the request.
+ */
+ public $proxy = null;
+
+ /**
+ * The username to use for the request.
+ */
+ public $username = null;
+
+ /**
+ * The password to use for the request.
+ */
+ public $password = null;
+
+ /**
+ * Custom CURLOPT settings.
+ */
+ public $curlopts = null;
+
+ /**
+ * The state of debug mode.
+ */
+ public $debug_mode = false;
+
+ /**
+ * The default class to use for HTTP Requests (defaults to <RequestCore>).
+ */
+ public $request_class = 'RequestCore';
+
+ /**
+ * The default class to use for HTTP Responses (defaults to <ResponseCore>).
+ */
+ public $response_class = 'ResponseCore';
+
+ /**
+ * Default useragent string to use.
+ */
+ public $useragent = 'RequestCore/1.4.4';
+
+ /**
+ * File to read from while streaming up.
+ */
+ public $read_file = null;
+
+ /**
+ * The resource to read from while streaming up.
+ */
+ public $read_stream = null;
+
+ /**
+ * The size of the stream to read from.
+ */
+ public $read_stream_size = null;
+
+ /**
+ * The length already read from the stream.
+ */
+ public $read_stream_read = 0;
+
+ /**
+ * File to write to while streaming down.
+ */
+ public $write_file = null;
+
+ /**
+ * The resource to write to while streaming down.
+ */
+ public $write_stream = null;
+
+ /**
+ * Stores the intended starting seek position.
+ */
+ public $seek_position = null;
+
+ /**
+ * The location of the cacert.pem file to use.
+ */
+ public $cacert_location = false;
+
+ /**
+ * The state of SSL certificate verification.
+ */
+ public $ssl_verification = true;
+
+ /**
+ * The user-defined callback function to call when a stream is read from.
+ */
+ public $registered_streaming_read_callback = null;
+
+ /**
+ * The user-defined callback function to call when a stream is written to.
+ */
+ public $registered_streaming_write_callback = null;
+
+
+ /*%******************************************************************************************%*/
+ // CONSTANTS
+
+ /**
+ * GET HTTP Method
+ */
+ const HTTP_GET = 'GET';
+
+ /**
+ * POST HTTP Method
+ */
+ const HTTP_POST = 'POST';
+
+ /**
+ * PUT HTTP Method
+ */
+ const HTTP_PUT = 'PUT';
+
+ /**
+ * DELETE HTTP Method
+ */
+ const HTTP_DELETE = 'DELETE';
+
+ /**
+ * HEAD HTTP Method
+ */
+ const HTTP_HEAD = 'HEAD';
+
+
+ /*%******************************************************************************************%*/
+ // CONSTRUCTOR/DESTRUCTOR
+
+ /**
+ * Constructs a new instance of this class.
+ *
+ * @param string $url (Optional) The URL to request or service endpoint to query.
+ * @param string $proxy (Optional) The faux-url to use for proxy settings. Takes the following format: `proxy://user:pass@hostname:port`
+ * @param array $helpers (Optional) An associative array of classnames to use for request, and response functionality. Gets passed in automatically by the calling class.
+ * @return $this A reference to the current instance.
+ */
+ public function __construct($url = null, $proxy = null, $helpers = null)
+ {
+ // Set some default values.
+ $this->request_url = $url;
+ $this->method = self::HTTP_GET;
+ $this->request_headers = array();
+ $this->request_body = '';
+
+ // Set a new Request class if one was set.
+ if (isset($helpers['request']) && !empty($helpers['request']))
+ {
+ $this->request_class = $helpers['request'];
+ }
+
+ // Set a new Request class if one was set.
+ if (isset($helpers['response']) && !empty($helpers['response']))
+ {
+ $this->response_class = $helpers['response'];
+ }
+
+ if ($proxy)
+ {
+ $this->set_proxy($proxy);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Destructs the instance. Closes opened file handles.
+ *
+ * @return $this A reference to the current instance.
+ */
+ public function __destruct()
+ {
+ if (isset($this->read_file) && isset($this->read_stream))
+ {
+ fclose($this->read_stream);
+ }
+
+ if (isset($this->write_file) && isset($this->write_stream))
+ {
+ fclose($this->write_stream);
+ }
+
+ return $this;
+ }
+
+
+ /*%******************************************************************************************%*/
+ // REQUEST METHODS
+
+ /**
+ * Sets the credentials to use for authentication.
+ *
+ * @param string $user (Required) The username to authenticate with.
+ * @param string $pass (Required) The password to authenticate with.
+ * @return $this A reference to the current instance.
+ */
+ public function set_credentials($user, $pass)
+ {
+ $this->username = $user;
+ $this->password = $pass;
+ return $this;
+ }
+
+ /**
+ * Adds a custom HTTP header to the cURL request.
+ *
+ * @param string $key (Required) The custom HTTP header to set.
+ * @param mixed $value (Required) The value to assign to the custom HTTP header.
+ * @return $this A reference to the current instance.
+ */
+ public function add_header($key, $value)
+ {
+ $this->request_headers[$key] = $value;
+ return $this;
+ }
+
+ /**
+ * Removes an HTTP header from the cURL request.
+ *
+ * @param string $key (Required) The custom HTTP header to set.
+ * @return $this A reference to the current instance.
+ */
+ public function remove_header($key)
+ {
+ if (isset($this->request_headers[$key]))
+ {
+ unset($this->request_headers[$key]);
+ }
+ return $this;
+ }
+
+ /**
+ * Set the method type for the request.
+ *
+ * @param string $method (Required) One of the following constants: <HTTP_GET>, <HTTP_POST>, <HTTP_PUT>, <HTTP_HEAD>, <HTTP_DELETE>.
+ * @return $this A reference to the current instance.
+ */
+ public function set_method($method)
+ {
+ $this->method = strtoupper($method);
+ return $this;
+ }
+
+ /**
+ * Sets a custom useragent string for the class.
+ *
+ * @param string $ua (Required) The useragent string to use.
+ * @return $this A reference to the current instance.
+ */
+ public function set_useragent($ua)
+ {
+ $this->useragent = $ua;
+ return $this;
+ }
+
+ /**
+ * Set the body to send in the request.
+ *
+ * @param string $body (Required) The textual content to send along in the body of the request.
+ * @return $this A reference to the current instance.
+ */
+ public function set_body($body)
+ {
+ $this->request_body = $body;
+ return $this;
+ }
+
+ /**
+ * Set the URL to make the request to.
+ *
+ * @param string $url (Required) The URL to make the request to.
+ * @return $this A reference to the current instance.
+ */
+ public function set_request_url($url)
+ {
+ $this->request_url = $url;
+ return $this;
+ }
+
+ /**
+ * Set additional CURLOPT settings. These will merge with the default settings, and override if
+ * there is a duplicate.
+ *
+ * @param array $curlopts (Optional) A set of key-value pairs that set `CURLOPT` options. These will merge with the existing CURLOPTs, and ones passed here will override the defaults. Keys should be the `CURLOPT_*` constants, not strings.
+ * @return $this A reference to the current instance.
+ */
+ public function set_curlopts($curlopts)
+ {
+ $this->curlopts = $curlopts;
+ return $this;
+ }
+
+ /**
+ * Sets the length in bytes to read from the stream while streaming up.
+ *
+ * @param integer $size (Required) The length in bytes to read from the stream.
+ * @return $this A reference to the current instance.
+ */
+ public function set_read_stream_size($size)
+ {
+ $this->read_stream_size = $size;
+
+ return $this;
+ }
+
+ /**
+ * Sets the resource to read from while streaming up. Reads the stream from its current position until
+ * EOF or `$size` bytes have been read. If `$size` is not given it will be determined by <php:fstat()> and
+ * <php:ftell()>.
+ *
+ * @param resource $resource (Required) The readable resource to read from.
+ * @param integer $size (Optional) The size of the stream to read.
+ * @return $this A reference to the current instance.
+ */
+ public function set_read_stream($resource, $size = null)
+ {
+ if (!isset($size) || $size < 0)
+ {
+ $stats = fstat($resource);
+
+ if ($stats && $stats['size'] >= 0)
+ {
+ $position = ftell($resource);
+
+ if ($position !== false && $position >= 0)
+ {
+ $size = $stats['size'] - $position;
+ }
+ }
+ }
+
+ $this->read_stream = $resource;
+
+ return $this->set_read_stream_size($size);
+ }
+
+ /**
+ * Sets the file to read from while streaming up.
+ *
+ * @param string $location (Required) The readable location to read from.
+ * @return $this A reference to the current instance.
+ */
+ public function set_read_file($location)
+ {
+ $this->read_file = $location;
+ $read_file_handle = fopen($location, 'r');
+
+ return $this->set_read_stream($read_file_handle);
+ }
+
+ /**
+ * Sets the resource to write to while streaming down.
+ *
+ * @param resource $resource (Required) The writeable resource to write to.
+ * @return $this A reference to the current instance.
+ */
+ public function set_write_stream($resource)
+ {
+ $this->write_stream = $resource;
+
+ return $this;
+ }
+
+ /**
+ * Sets the file to write to while streaming down.
+ *
+ * @param string $location (Required) The writeable location to write to.
+ * @return $this A reference to the current instance.
+ */
+ public function set_write_file($location)
+ {
+ $this->write_file = $location;
+ $write_file_handle = fopen($location, 'w');
+
+ return $this->set_write_stream($write_file_handle);
+ }
+
+ /**
+ * Set the proxy to use for making requests.
+ *
+ * @param string $proxy (Required) The faux-url to use for proxy settings. Takes the following format: `proxy://user:pass@hostname:port`
+ * @return $this A reference to the current instance.
+ */
+ public function set_proxy($proxy)
+ {
+ $proxy = parse_url($proxy);
+ $proxy['user'] = isset($proxy['user']) ? $proxy['user'] : null;
+ $proxy['pass'] = isset($proxy['pass']) ? $proxy['pass'] : null;
+ $proxy['port'] = isset($proxy['port']) ? $proxy['port'] : null;
+ $this->proxy = $proxy;
+ return $this;
+ }
+
+ /**
+ * Set the intended starting seek position.
+ *
+ * @param integer $position (Required) The byte-position of the stream to begin reading from.
+ * @return $this A reference to the current instance.
+ */
+ public function set_seek_position($position)
+ {
+ $this->seek_position = isset($position) ? (integer) $position : null;
+
+ return $this;
+ }
+
+ /**
+ * Register a callback function to execute whenever a data stream is read from using
+ * <CFRequest::streaming_read_callback()>.
+ *
+ * The user-defined callback function should accept three arguments:
+ *
+ * <ul>
+ * <li><code>$curl_handle</code> - <code>resource</code> - Required - The cURL handle resource that represents the in-progress transfer.</li>
+ * <li><code>$file_handle</code> - <code>resource</code> - Required - The file handle resource that represents the file on the local file system.</li>
+ * <li><code>$length</code> - <code>integer</code> - Required - The length in kilobytes of the data chunk that was transferred.</li>
+ * </ul>
+ *
+ * @param string|array|function $callback (Required) The callback function is called by <php:call_user_func()>, so you can pass the following values: <ul>
+ * <li>The name of a global function to execute, passed as a string.</li>
+ * <li>A method to execute, passed as <code>array('ClassName', 'MethodName')</code>.</li>
+ * <li>An anonymous function (PHP 5.3+).</li></ul>
+ * @return $this A reference to the current instance.
+ */
+ public function register_streaming_read_callback($callback)
+ {
+ $this->registered_streaming_read_callback = $callback;
+
+ return $this;
+ }
+
+ /**
+ * Register a callback function to execute whenever a data stream is written to using
+ * <CFRequest::streaming_write_callback()>.
+ *
+ * The user-defined callback function should accept two arguments:
+ *
+ * <ul>
+ * <li><code>$curl_handle</code> - <code>resource</code> - Required - The cURL handle resource that represents the in-progress transfer.</li>
+ * <li><code>$length</code> - <code>integer</code> - Required - The length in kilobytes of the data chunk that was transferred.</li>
+ * </ul>
+ *
+ * @param string|array|function $callback (Required) The callback function is called by <php:call_user_func()>, so you can pass the following values: <ul>
+ * <li>The name of a global function to execute, passed as a string.</li>
+ * <li>A method to execute, passed as <code>array('ClassName', 'MethodName')</code>.</li>
+ * <li>An anonymous function (PHP 5.3+).</li></ul>
+ * @return $this A reference to the current instance.
+ */
+ public function register_streaming_write_callback($callback)
+ {
+ $this->registered_streaming_write_callback = $callback;
+
+ return $this;
+ }
+
+
+ /*%******************************************************************************************%*/
+ // PREPARE, SEND, AND PROCESS REQUEST
+
+ /**
+ * A callback function that is invoked by cURL for streaming up.
+ *
+ * @param resource $curl_handle (Required) The cURL handle for the request.
+ * @param resource $file_handle (Required) The open file handle resource.
+ * @param integer $length (Required) The maximum number of bytes to read.
+ * @return binary Binary data from a stream.
+ */
+ public function streaming_read_callback($curl_handle, $file_handle, $length)
+ {
+ // Once we've sent as much as we're supposed to send...
+ if ($this->read_stream_read >= $this->read_stream_size)
+ {
+ // Send EOF
+ return '';
+ }
+
+ // If we're at the beginning of an upload and need to seek...
+ if ($this->read_stream_read == 0 && isset($this->seek_position) && $this->seek_position !== ftell($this->read_stream))
+ {
+ if (fseek($this->read_stream, $this->seek_position) !== 0)
+ {
+ throw new RequestCore_Exception('The stream does not support seeking and is either not at the requested position or the position is unknown.');
+ }
+ }
+
+ $read = fread($this->read_stream, min($this->read_stream_size - $this->read_stream_read, $length)); // Remaining upload data or cURL's requested chunk size
+ $this->read_stream_read += strlen($read);
+
+ $out = $read === false ? '' : $read;
+
+ // Execute callback function
+ if ($this->registered_streaming_read_callback)
+ {
+ call_user_func($this->registered_streaming_read_callback, $curl_handle, $file_handle, $out);
+ }
+
+ return $out;
+ }
+
+ /**
+ * A callback function that is invoked by cURL for streaming down.
+ *
+ * @param resource $curl_handle (Required) The cURL handle for the request.
+ * @param binary $data (Required) The data to write.
+ * @return integer The number of bytes written.
+ */
+ public function streaming_write_callback($curl_handle, $data)
+ {
+ $length = strlen($data);
+ $written_total = 0;
+ $written_last = 0;
+
+ while ($written_total < $length)
+ {
+ $written_last = fwrite($this->write_stream, substr($data, $written_total));
+
+ if ($written_last === false)
+ {
+ return $written_total;
+ }
+
+ $written_total += $written_last;
+ }
+
+ // Execute callback function
+ if ($this->registered_streaming_write_callback)
+ {
+ call_user_func($this->registered_streaming_write_callback, $curl_handle, $written_total);
+ }
+
+ return $written_total;
+ }
+
+ /**
+ * Prepares and adds the details of the cURL request. This can be passed along to a <php:curl_multi_exec()>
+ * function.
+ *
+ * @return resource The handle for the cURL object.
+ */
+ public function prep_request()
+ {
+ $curl_handle = curl_init();
+
+ // Set default options.
+ curl_setopt($curl_handle, CURLOPT_URL, $this->request_url);
+ curl_setopt($curl_handle, CURLOPT_FILETIME, true);
+ curl_setopt($curl_handle, CURLOPT_FRESH_CONNECT, false);
+ curl_setopt($curl_handle, CURLOPT_CLOSEPOLICY, CURLCLOSEPOLICY_LEAST_RECENTLY_USED);
+ curl_setopt($curl_handle, CURLOPT_MAXREDIRS, 5);
+ curl_setopt($curl_handle, CURLOPT_HEADER, true);
+ curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($curl_handle, CURLOPT_TIMEOUT, 5184000);
+ curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 120);
+ curl_setopt($curl_handle, CURLOPT_NOSIGNAL, true);
+ curl_setopt($curl_handle, CURLOPT_REFERER, $this->request_url);
+ curl_setopt($curl_handle, CURLOPT_USERAGENT, $this->useragent);
+ curl_setopt($curl_handle, CURLOPT_READFUNCTION, array($this, 'streaming_read_callback'));
+
+ // Verification of the SSL cert
+ if ($this->ssl_verification)
+ {
+ curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, true);
+ curl_setopt($curl_handle, CURLOPT_SSL_VERIFYHOST, 2);
+ }
+ else
+ {
+ curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false);
+ curl_setopt($curl_handle, CURLOPT_SSL_VERIFYHOST, false);
+ }
+
+ // chmod the file as 0755
+ if ($this->cacert_location === true)
+ {
+ curl_setopt($curl_handle, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
+ }
+ elseif (is_string($this->cacert_location))
+ {
+ curl_setopt($curl_handle, CURLOPT_CAINFO, $this->cacert_location);
+ }
+
+ // Debug mode
+ if ($this->debug_mode)
+ {
+ curl_setopt($curl_handle, CURLOPT_VERBOSE, true);
+ }
+
+ // Handle open_basedir & safe mode
+ if (!ini_get('safe_mode') && !ini_get('open_basedir'))
+ {
+ curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, true);
+ }
+
+ // Enable a proxy connection if requested.
+ if ($this->proxy)
+ {
+ curl_setopt($curl_handle, CURLOPT_HTTPPROXYTUNNEL, true);
+
+ $host = $this->proxy['host'];
+ $host .= ($this->proxy['port']) ? ':' . $this->proxy['port'] : '';
+ curl_setopt($curl_handle, CURLOPT_PROXY, $host);
+
+ if (isset($this->proxy['user']) && isset($this->proxy['pass']))
+ {
+ curl_setopt($curl_handle, CURLOPT_PROXYUSERPWD, $this->proxy['user'] . ':' . $this->proxy['pass']);
+ }
+ }
+
+ // Set credentials for HTTP Basic/Digest Authentication.
+ if ($this->username && $this->password)
+ {
+ curl_setopt($curl_handle, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
+ curl_setopt($curl_handle, CURLOPT_USERPWD, $this->username . ':' . $this->password);
+ }
+
+ // Handle the encoding if we can.
+ if (extension_loaded('zlib'))
+ {
+ curl_setopt($curl_handle, CURLOPT_ENCODING, 'gzip, deflate');
+ }
+
+ // Process custom headers
+ if (isset($this->request_headers) && count($this->request_headers))
+ {
+ $temp_headers = array();
+
+ foreach ($this->request_headers as $k => $v)
+ {
+ $temp_headers[] = $k . ': ' . $v;
+ }
+
+ curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $temp_headers);
+ }
+
+ switch ($this->method)
+ {
+ case self::HTTP_PUT:
+ curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'PUT');
+ if (isset($this->read_stream))
+ {
+ if (!isset($this->read_stream_size) || $this->read_stream_size < 0)
+ {
+ throw new RequestCore_Exception('The stream size for the streaming upload cannot be determined.');
+ }
+
+ curl_setopt($curl_handle, CURLOPT_INFILESIZE, $this->read_stream_size);
+ curl_setopt($curl_handle, CURLOPT_UPLOAD, true);
+ }
+ else
+ {
+ curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $this->request_body);
+ }
+ break;
+
+ case self::HTTP_POST:
+ curl_setopt($curl_handle, CURLOPT_POST, true);
+ curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $this->request_body);
+ break;
+
+ case self::HTTP_HEAD:
+ curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, self::HTTP_HEAD);
+ curl_setopt($curl_handle, CURLOPT_NOBODY, 1);
+ break;
+
+ default: // Assumed GET
+ curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, $this->method);
+ if (isset($this->write_stream))
+ {
+ curl_setopt($curl_handle, CURLOPT_WRITEFUNCTION, array($this, 'streaming_write_callback'));
+ curl_setopt($curl_handle, CURLOPT_HEADER, false);
+ }
+ else
+ {
+ curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $this->request_body);
+ }
+ break;
+ }
+
+ // Merge in the CURLOPTs
+ if (isset($this->curlopts) && sizeof($this->curlopts) > 0)
+ {
+ foreach ($this->curlopts as $k => $v)
+ {
+ curl_setopt($curl_handle, $k, $v);
+ }
+ }
+
+ return $curl_handle;
+ }
+
+ /**
+ * Take the post-processed cURL data and break it down into useful header/body/info chunks. Uses the
+ * data stored in the `curl_handle` and `response` properties unless replacement data is passed in via
+ * parameters.
+ *
+ * @param resource $curl_handle (Optional) The reference to the already executed cURL request.
+ * @param string $response (Optional) The actual response content itself that needs to be parsed.
+ * @return ResponseCore A <ResponseCore> object containing a parsed HTTP response.
+ */
+ public function process_response($curl_handle = null, $response = null)
+ {
+ // Accept a custom one if it's passed.
+ if ($curl_handle && $response)
+ {
+ $this->curl_handle = $curl_handle;
+ $this->response = $response;
+ }
+
+ // As long as this came back as a valid resource...
+ if (is_resource($this->curl_handle))
+ {
+ // Determine what's what.
+ $header_size = curl_getinfo($this->curl_handle, CURLINFO_HEADER_SIZE);
+ $this->response_headers = substr($this->response, 0, $header_size);
+ $this->response_body = substr($this->response, $header_size);
+ $this->response_code = curl_getinfo($this->curl_handle, CURLINFO_HTTP_CODE);
+ $this->response_info = curl_getinfo($this->curl_handle);
+
+ // Parse out the headers
+ $this->response_headers = explode("\r\n\r\n", trim($this->response_headers));
+ $this->response_headers = array_pop($this->response_headers);
+ $this->response_headers = explode("\r\n", $this->response_headers);
+ array_shift($this->response_headers);
+
+ // Loop through and split up the headers.
+ $header_assoc = array();
+ foreach ($this->response_headers as $header)
+ {
+ $kv = explode(': ', $header);
+ $header_assoc[strtolower($kv[0])] = $kv[1];
+ }
+
+ // Reset the headers to the appropriate property.
+ $this->response_headers = $header_assoc;
+ $this->response_headers['_info'] = $this->response_info;
+ $this->response_headers['_info']['method'] = $this->method;
+
+ if ($curl_handle && $response)
+ {
+ return new $this->response_class($this->response_headers, $this->response_body, $this->response_code, $this->curl_handle);
+ }
+ }
+
+ // Return false
+ return false;
+ }
+
+ /**
+ * Sends the request, calling necessary utility functions to update built-in properties.
+ *
+ * @param boolean $parse (Optional) Whether to parse the response with ResponseCore or not.
+ * @return string The resulting unparsed data from the request.
+ */
+ public function send_request($parse = false)
+ {
+ set_time_limit(0);
+
+ $curl_handle = $this->prep_request();
+ $this->response = curl_exec($curl_handle);
+
+ if ($this->response === false)
+ {
+ throw new cURL_Exception('cURL resource: ' . (string) $curl_handle . '; cURL error: ' . curl_error($curl_handle) . ' (cURL error code ' . curl_errno($curl_handle) . '). See http://curl.haxx.se/libcurl/c/libcurl-errors.html for an explanation of error codes.');
+ }
+
+ $parsed_response = $this->process_response($curl_handle, $this->response);
+
+ curl_close($curl_handle);
+
+ if ($parse)
+ {
+ return $parsed_response;
+ }
+
+ return $this->response;
+ }
+
+ /**
+ * Sends the request using <php:curl_multi_exec()>, enabling parallel requests. Uses the "rolling" method.
+ *
+ * @param array $handles (Required) An indexed array of cURL handles to process simultaneously.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>callback</code> - <code>string|array</code> - Optional - The string name of a function to pass the response data to. If this is a method, pass an array where the <code>[0]</code> index is the class and the <code>[1]</code> index is the method name.</li>
+ * <li><code>limit</code> - <code>integer</code> - Optional - The number of simultaneous requests to make. This can be useful for scaling around slow server responses. Defaults to trusting cURLs judgement as to how many to use.</li></ul>
+ * @return array Post-processed cURL responses.
+ */
+ public function send_multi_request($handles, $opt = null)
+ {
+ set_time_limit(0);
+
+ // Skip everything if there are no handles to process.
+ if (count($handles) === 0) return array();
+
+ if (!$opt) $opt = array();
+
+ // Initialize any missing options
+ $limit = isset($opt['limit']) ? $opt['limit'] : -1;
+
+ // Initialize
+ $handle_list = $handles;
+ $http = new $this->request_class();
+ $multi_handle = curl_multi_init();
+ $handles_post = array();
+ $added = count($handles);
+ $last_handle = null;
+ $count = 0;
+ $i = 0;
+
+ // Loop through the cURL handles and add as many as it set by the limit parameter.
+ while ($i < $added)
+ {
+ if ($limit > 0 && $i >= $limit) break;
+ curl_multi_add_handle($multi_handle, array_shift($handles));
+ $i++;
+ }
+
+ do
+ {
+ $active = false;
+
+ // Start executing and wait for a response.
+ while (($status = curl_multi_exec($multi_handle, $active)) === CURLM_CALL_MULTI_PERFORM)
+ {
+ // Start looking for possible responses immediately when we have to add more handles
+ if (count($handles) > 0) break;
+ }
+
+ // Figure out which requests finished.
+ $to_process = array();
+
+ while ($done = curl_multi_info_read($multi_handle))
+ {
+ // Since curl_errno() isn't reliable for handles that were in multirequests, we check the 'result' of the info read, which contains the curl error number, (listed here http://curl.haxx.se/libcurl/c/libcurl-errors.html )
+ if ($done['result'] > 0)
+ {
+ throw new cURL_Multi_Exception('cURL resource: ' . (string) $done['handle'] . '; cURL error: ' . curl_error($done['handle']) . ' (cURL error code ' . $done['result'] . '). See http://curl.haxx.se/libcurl/c/libcurl-errors.html for an explanation of error codes.');
+ }
+
+ // Because curl_multi_info_read() might return more than one message about a request, we check to see if this request is already in our array of completed requests
+ elseif (!isset($to_process[(int) $done['handle']]))
+ {
+ $to_process[(int) $done['handle']] = $done;
+ }
+ }
+
+ // Actually deal with the request
+ foreach ($to_process as $pkey => $done)
+ {
+ $response = $http->process_response($done['handle'], curl_multi_getcontent($done['handle']));
+ $key = array_search($done['handle'], $handle_list, true);
+ $handles_post[$key] = $response;
+
+ if (count($handles) > 0)
+ {
+ curl_multi_add_handle($multi_handle, array_shift($handles));
+ }
+
+ curl_multi_remove_handle($multi_handle, $done['handle']);
+ curl_close($done['handle']);
+ }
+ }
+ while ($active || count($handles_post) < $added);
+
+ curl_multi_close($multi_handle);
+
+ ksort($handles_post, SORT_NUMERIC);
+ return $handles_post;
+ }
+
+
+ /*%******************************************************************************************%*/
+ // RESPONSE METHODS
+
+ /**
+ * Get the HTTP response headers from the request.
+ *
+ * @param string $header (Optional) A specific header value to return. Defaults to all headers.
+ * @return string|array All or selected header values.
+ */
+ public function get_response_header($header = null)
+ {
+ if ($header)
+ {
+ return $this->response_headers[strtolower($header)];
+ }
+ return $this->response_headers;
+ }
+
+ /**
+ * Get the HTTP response body from the request.
+ *
+ * @return string The response body.
+ */
+ public function get_response_body()
+ {
+ return $this->response_body;
+ }
+
+ /**
+ * Get the HTTP response code from the request.
+ *
+ * @return string The HTTP response code.
+ */
+ public function get_response_code()
+ {
+ return $this->response_code;
+ }
+}
+
+
+/**
+ * Container for all response-related methods.
+ */
+class ResponseCore
+{
+ /**
+ * Stores the HTTP header information.
+ */
+ public $header;
+
+ /**
+ * Stores the SimpleXML response.
+ */
+ public $body;
+
+ /**
+ * Stores the HTTP response code.
+ */
+ public $status;
+
+ /**
+ * Constructs a new instance of this class.
+ *
+ * @param array $header (Required) Associative array of HTTP headers (typically returned by <RequestCore::get_response_header()>).
+ * @param string $body (Required) XML-formatted response from AWS.
+ * @param integer $status (Optional) HTTP response status code from the request.
+ * @return object Contains an <php:array> `header` property (HTTP headers as an associative array), a <php:SimpleXMLElement> or <php:string> `body` property, and an <php:integer> `status` code.
+ */
+ public function __construct($header, $body, $status = null)
+ {
+ $this->header = $header;
+ $this->body = $body;
+ $this->status = $status;
+
+ return $this;
+ }
+
+ /**
+ * Did we receive the status code we expected?
+ *
+ * @param integer|array $codes (Optional) The status code(s) to expect. Pass an <php:integer> for a single acceptable value, or an <php:array> of integers for multiple acceptable values.
+ * @return boolean Whether we received the expected status code or not.
+ */
+ public function isOK($codes = array(200, 201, 204, 206))
+ {
+ if (is_array($codes))
+ {
+ return in_array($this->status, $codes);
+ }
+
+ return $this->status === $codes;
+ }
+}
+
+class cURL_Exception extends Exception {}
+class cURL_Multi_Exception extends cURL_Exception {}
+class RequestCore_Exception extends Exception {}
diff --git a/3rdparty/aws-sdk/lib/yaml/LICENSE b/3rdparty/aws-sdk/lib/yaml/LICENSE
new file mode 100644
index 00000000000..3cef853170e
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/yaml/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2008-2009 Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/3rdparty/aws-sdk/lib/yaml/README.markdown b/3rdparty/aws-sdk/lib/yaml/README.markdown
new file mode 100644
index 00000000000..e4f80cfbac4
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/yaml/README.markdown
@@ -0,0 +1,15 @@
+Symfony YAML: A PHP library that speaks YAML
+============================================
+
+Symfony YAML is a PHP library that parses YAML strings and converts them to
+PHP arrays. It can also converts PHP arrays to YAML strings. Its official
+website is at http://components.symfony-project.org/yaml/.
+
+The documentation is to be found in the `doc/` directory.
+
+Symfony YAML is licensed under the MIT license (see LICENSE file).
+
+The Symfony YAML library is developed and maintained by the
+[symfony](http://www.symfony-project.org/) project team. It has been extracted
+from symfony to be used as a standalone library. Symfony YAML is part of the
+[symfony components project](http://components.symfony-project.org/).
diff --git a/3rdparty/aws-sdk/lib/yaml/lib/sfYaml.php b/3rdparty/aws-sdk/lib/yaml/lib/sfYaml.php
new file mode 100644
index 00000000000..1d89ccc9736
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/yaml/lib/sfYaml.php
@@ -0,0 +1,135 @@
+<?php
+
+/*
+ * This file is part of the symfony package.
+ * (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * sfYaml offers convenience methods to load and dump YAML.
+ *
+ * @package symfony
+ * @subpackage yaml
+ * @author Fabien Potencier <fabien.potencier@symfony-project.com>
+ * @version SVN: $Id: sfYaml.class.php 8988 2008-05-15 20:24:26Z fabien $
+ */
+class sfYaml
+{
+ static protected
+ $spec = '1.2';
+
+ /**
+ * Sets the YAML specification version to use.
+ *
+ * @param string $version The YAML specification version
+ */
+ static public function setSpecVersion($version)
+ {
+ if (!in_array($version, array('1.1', '1.2')))
+ {
+ throw new InvalidArgumentException(sprintf('Version %s of the YAML specifications is not supported', $version));
+ }
+
+ self::$spec = $version;
+ }
+
+ /**
+ * Gets the YAML specification version to use.
+ *
+ * @return string The YAML specification version
+ */
+ static public function getSpecVersion()
+ {
+ return self::$spec;
+ }
+
+ /**
+ * Loads YAML into a PHP array.
+ *
+ * The load method, when supplied with a YAML stream (string or file),
+ * will do its best to convert YAML in a file into a PHP array.
+ *
+ * Usage:
+ * <code>
+ * $array = sfYaml::load('config.yml');
+ * print_r($array);
+ * </code>
+ *
+ * @param string $input Path of YAML file or string containing YAML
+ *
+ * @return array The YAML converted to a PHP array
+ *
+ * @throws InvalidArgumentException If the YAML is not valid
+ */
+ public static function load($input)
+ {
+ $file = '';
+
+ // if input is a file, process it
+ if (strpos($input, "\n") === false && is_file($input))
+ {
+ $file = $input;
+
+ ob_start();
+ $retval = include($input);
+ $content = ob_get_clean();
+
+ // if an array is returned by the config file assume it's in plain php form else in YAML
+ $input = is_array($retval) ? $retval : $content;
+ }
+
+ // if an array is returned by the config file assume it's in plain php form else in YAML
+ if (is_array($input))
+ {
+ return $input;
+ }
+
+ require_once dirname(__FILE__).'/sfYamlParser.php';
+
+ $yaml = new sfYamlParser();
+
+ try
+ {
+ $ret = $yaml->parse($input);
+ }
+ catch (Exception $e)
+ {
+ throw new InvalidArgumentException(sprintf('Unable to parse %s: %s', $file ? sprintf('file "%s"', $file) : 'string', $e->getMessage()));
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Dumps a PHP array to a YAML string.
+ *
+ * The dump method, when supplied with an array, will do its best
+ * to convert the array into friendly YAML.
+ *
+ * @param array $array PHP array
+ * @param integer $inline The level where you switch to inline YAML
+ *
+ * @return string A YAML string representing the original PHP array
+ */
+ public static function dump($array, $inline = 2)
+ {
+ require_once dirname(__FILE__).'/sfYamlDumper.php';
+
+ $yaml = new sfYamlDumper();
+
+ return $yaml->dump($array, $inline);
+ }
+}
+
+/**
+ * Wraps echo to automatically provide a newline.
+ *
+ * @param string $string The string to echo with new line
+ */
+function echoln($string)
+{
+ echo $string."\n";
+}
diff --git a/3rdparty/aws-sdk/lib/yaml/lib/sfYamlDumper.php b/3rdparty/aws-sdk/lib/yaml/lib/sfYamlDumper.php
new file mode 100644
index 00000000000..0ada2b37d21
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/yaml/lib/sfYamlDumper.php
@@ -0,0 +1,60 @@
+<?php
+
+/*
+ * This file is part of the symfony package.
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+require_once(dirname(__FILE__).'/sfYamlInline.php');
+
+/**
+ * sfYamlDumper dumps PHP variables to YAML strings.
+ *
+ * @package symfony
+ * @subpackage yaml
+ * @author Fabien Potencier <fabien.potencier@symfony-project.com>
+ * @version SVN: $Id: sfYamlDumper.class.php 10575 2008-08-01 13:08:42Z nicolas $
+ */
+class sfYamlDumper
+{
+ /**
+ * Dumps a PHP value to YAML.
+ *
+ * @param mixed $input The PHP value
+ * @param integer $inline The level where you switch to inline YAML
+ * @param integer $indent The level o indentation indentation (used internally)
+ *
+ * @return string The YAML representation of the PHP value
+ */
+ public function dump($input, $inline = 0, $indent = 0)
+ {
+ $output = '';
+ $prefix = $indent ? str_repeat(' ', $indent) : '';
+
+ if ($inline <= 0 || !is_array($input) || empty($input))
+ {
+ $output .= $prefix.sfYamlInline::dump($input);
+ }
+ else
+ {
+ $isAHash = array_keys($input) !== range(0, count($input) - 1);
+
+ foreach ($input as $key => $value)
+ {
+ $willBeInlined = $inline - 1 <= 0 || !is_array($value) || empty($value);
+
+ $output .= sprintf('%s%s%s%s',
+ $prefix,
+ $isAHash ? sfYamlInline::dump($key).':' : '-',
+ $willBeInlined ? ' ' : "\n",
+ $this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + 2)
+ ).($willBeInlined ? "\n" : '');
+ }
+ }
+
+ return $output;
+ }
+}
diff --git a/3rdparty/aws-sdk/lib/yaml/lib/sfYamlInline.php b/3rdparty/aws-sdk/lib/yaml/lib/sfYamlInline.php
new file mode 100644
index 00000000000..66edb4f07ab
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/yaml/lib/sfYamlInline.php
@@ -0,0 +1,442 @@
+<?php
+
+/*
+ * This file is part of the symfony package.
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+require_once dirname(__FILE__).'/sfYaml.php';
+
+/**
+ * sfYamlInline implements a YAML parser/dumper for the YAML inline syntax.
+ *
+ * @package symfony
+ * @subpackage yaml
+ * @author Fabien Potencier <fabien.potencier@symfony-project.com>
+ * @version SVN: $Id: sfYamlInline.class.php 16177 2009-03-11 08:32:48Z fabien $
+ */
+class sfYamlInline
+{
+ const REGEX_QUOTED_STRING = '(?:"([^"\\\\]*(?:\\\\.[^"\\\\]*)*)"|\'([^\']*(?:\'\'[^\']*)*)\')';
+
+ /**
+ * Convert a YAML string to a PHP array.
+ *
+ * @param string $value A YAML string
+ *
+ * @return array A PHP array representing the YAML string
+ */
+ static public function load($value)
+ {
+ $value = trim($value);
+
+ if (0 == strlen($value))
+ {
+ return '';
+ }
+
+ if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2)
+ {
+ $mbEncoding = mb_internal_encoding();
+ mb_internal_encoding('ASCII');
+ }
+
+ switch ($value[0])
+ {
+ case '[':
+ $result = self::parseSequence($value);
+ break;
+ case '{':
+ $result = self::parseMapping($value);
+ break;
+ default:
+ $result = self::parseScalar($value);
+ }
+
+ if (isset($mbEncoding))
+ {
+ mb_internal_encoding($mbEncoding);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Dumps a given PHP variable to a YAML string.
+ *
+ * @param mixed $value The PHP variable to convert
+ *
+ * @return string The YAML string representing the PHP array
+ */
+ static public function dump($value)
+ {
+ if ('1.1' === sfYaml::getSpecVersion())
+ {
+ $trueValues = array('true', 'on', '+', 'yes', 'y');
+ $falseValues = array('false', 'off', '-', 'no', 'n');
+ }
+ else
+ {
+ $trueValues = array('true');
+ $falseValues = array('false');
+ }
+
+ switch (true)
+ {
+ case is_resource($value):
+ throw new InvalidArgumentException('Unable to dump PHP resources in a YAML file.');
+ case is_object($value):
+ return '!!php/object:'.serialize($value);
+ case is_array($value):
+ return self::dumpArray($value);
+ case null === $value:
+ return 'null';
+ case true === $value:
+ return 'true';
+ case false === $value:
+ return 'false';
+ case ctype_digit($value):
+ return is_string($value) ? "'$value'" : (int) $value;
+ case is_numeric($value):
+ return is_infinite($value) ? str_ireplace('INF', '.Inf', strval($value)) : (is_string($value) ? "'$value'" : $value);
+ case false !== strpos($value, "\n") || false !== strpos($value, "\r"):
+ return sprintf('"%s"', str_replace(array('"', "\n", "\r"), array('\\"', '\n', '\r'), $value));
+ case preg_match('/[ \s \' " \: \{ \} \[ \] , & \* \# \?] | \A[ - ? | < > = ! % @ ` ]/x', $value):
+ return sprintf("'%s'", str_replace('\'', '\'\'', $value));
+ case '' == $value:
+ return "''";
+ case preg_match(self::getTimestampRegex(), $value):
+ return "'$value'";
+ case in_array(strtolower($value), $trueValues):
+ return "'$value'";
+ case in_array(strtolower($value), $falseValues):
+ return "'$value'";
+ case in_array(strtolower($value), array('null', '~')):
+ return "'$value'";
+ default:
+ return $value;
+ }
+ }
+
+ /**
+ * Dumps a PHP array to a YAML string.
+ *
+ * @param array $value The PHP array to dump
+ *
+ * @return string The YAML string representing the PHP array
+ */
+ static protected function dumpArray($value)
+ {
+ // array
+ $keys = array_keys($value);
+ if (
+ (1 == count($keys) && '0' == $keys[0])
+ ||
+ (count($keys) > 1 && array_reduce($keys, create_function('$v,$w', 'return (integer) $v + $w;'), 0) == count($keys) * (count($keys) - 1) / 2))
+ {
+ $output = array();
+ foreach ($value as $val)
+ {
+ $output[] = self::dump($val);
+ }
+
+ return sprintf('[%s]', implode(', ', $output));
+ }
+
+ // mapping
+ $output = array();
+ foreach ($value as $key => $val)
+ {
+ $output[] = sprintf('%s: %s', self::dump($key), self::dump($val));
+ }
+
+ return sprintf('{ %s }', implode(', ', $output));
+ }
+
+ /**
+ * Parses a scalar to a YAML string.
+ *
+ * @param scalar $scalar
+ * @param string $delimiters
+ * @param array $stringDelimiter
+ * @param integer $i
+ * @param boolean $evaluate
+ *
+ * @return string A YAML string
+ */
+ static public function parseScalar($scalar, $delimiters = null, $stringDelimiters = array('"', "'"), &$i = 0, $evaluate = true)
+ {
+ if (in_array($scalar[$i], $stringDelimiters))
+ {
+ // quoted scalar
+ $output = self::parseQuotedScalar($scalar, $i);
+ }
+ else
+ {
+ // "normal" string
+ if (!$delimiters)
+ {
+ $output = substr($scalar, $i);
+ $i += strlen($output);
+
+ // remove comments
+ if (false !== $strpos = strpos($output, ' #'))
+ {
+ $output = rtrim(substr($output, 0, $strpos));
+ }
+ }
+ else if (preg_match('/^(.+?)('.implode('|', $delimiters).')/', substr($scalar, $i), $match))
+ {
+ $output = $match[1];
+ $i += strlen($output);
+ }
+ else
+ {
+ throw new InvalidArgumentException(sprintf('Malformed inline YAML string (%s).', $scalar));
+ }
+
+ $output = $evaluate ? self::evaluateScalar($output) : $output;
+ }
+
+ return $output;
+ }
+
+ /**
+ * Parses a quoted scalar to YAML.
+ *
+ * @param string $scalar
+ * @param integer $i
+ *
+ * @return string A YAML string
+ */
+ static protected function parseQuotedScalar($scalar, &$i)
+ {
+ if (!preg_match('/'.self::REGEX_QUOTED_STRING.'/A', substr($scalar, $i), $match))
+ {
+ throw new InvalidArgumentException(sprintf('Malformed inline YAML string (%s).', substr($scalar, $i)));
+ }
+
+ $output = substr($match[0], 1, strlen($match[0]) - 2);
+
+ if ('"' == $scalar[$i])
+ {
+ // evaluate the string
+ $output = str_replace(array('\\"', '\\n', '\\r'), array('"', "\n", "\r"), $output);
+ }
+ else
+ {
+ // unescape '
+ $output = str_replace('\'\'', '\'', $output);
+ }
+
+ $i += strlen($match[0]);
+
+ return $output;
+ }
+
+ /**
+ * Parses a sequence to a YAML string.
+ *
+ * @param string $sequence
+ * @param integer $i
+ *
+ * @return string A YAML string
+ */
+ static protected function parseSequence($sequence, &$i = 0)
+ {
+ $output = array();
+ $len = strlen($sequence);
+ $i += 1;
+
+ // [foo, bar, ...]
+ while ($i < $len)
+ {
+ switch ($sequence[$i])
+ {
+ case '[':
+ // nested sequence
+ $output[] = self::parseSequence($sequence, $i);
+ break;
+ case '{':
+ // nested mapping
+ $output[] = self::parseMapping($sequence, $i);
+ break;
+ case ']':
+ return $output;
+ case ',':
+ case ' ':
+ break;
+ default:
+ $isQuoted = in_array($sequence[$i], array('"', "'"));
+ $value = self::parseScalar($sequence, array(',', ']'), array('"', "'"), $i);
+
+ if (!$isQuoted && false !== strpos($value, ': '))
+ {
+ // embedded mapping?
+ try
+ {
+ $value = self::parseMapping('{'.$value.'}');
+ }
+ catch (InvalidArgumentException $e)
+ {
+ // no, it's not
+ }
+ }
+
+ $output[] = $value;
+
+ --$i;
+ }
+
+ ++$i;
+ }
+
+ throw new InvalidArgumentException(sprintf('Malformed inline YAML string %s', $sequence));
+ }
+
+ /**
+ * Parses a mapping to a YAML string.
+ *
+ * @param string $mapping
+ * @param integer $i
+ *
+ * @return string A YAML string
+ */
+ static protected function parseMapping($mapping, &$i = 0)
+ {
+ $output = array();
+ $len = strlen($mapping);
+ $i += 1;
+
+ // {foo: bar, bar:foo, ...}
+ while ($i < $len)
+ {
+ switch ($mapping[$i])
+ {
+ case ' ':
+ case ',':
+ ++$i;
+ continue 2;
+ case '}':
+ return $output;
+ }
+
+ // key
+ $key = self::parseScalar($mapping, array(':', ' '), array('"', "'"), $i, false);
+
+ // value
+ $done = false;
+ while ($i < $len)
+ {
+ switch ($mapping[$i])
+ {
+ case '[':
+ // nested sequence
+ $output[$key] = self::parseSequence($mapping, $i);
+ $done = true;
+ break;
+ case '{':
+ // nested mapping
+ $output[$key] = self::parseMapping($mapping, $i);
+ $done = true;
+ break;
+ case ':':
+ case ' ':
+ break;
+ default:
+ $output[$key] = self::parseScalar($mapping, array(',', '}'), array('"', "'"), $i);
+ $done = true;
+ --$i;
+ }
+
+ ++$i;
+
+ if ($done)
+ {
+ continue 2;
+ }
+ }
+ }
+
+ throw new InvalidArgumentException(sprintf('Malformed inline YAML string %s', $mapping));
+ }
+
+ /**
+ * Evaluates scalars and replaces magic values.
+ *
+ * @param string $scalar
+ *
+ * @return string A YAML string
+ */
+ static protected function evaluateScalar($scalar)
+ {
+ $scalar = trim($scalar);
+
+ if ('1.1' === sfYaml::getSpecVersion())
+ {
+ $trueValues = array('true', 'on', '+', 'yes', 'y');
+ $falseValues = array('false', 'off', '-', 'no', 'n');
+ }
+ else
+ {
+ $trueValues = array('true');
+ $falseValues = array('false');
+ }
+
+ switch (true)
+ {
+ case 'null' == strtolower($scalar):
+ case '' == $scalar:
+ case '~' == $scalar:
+ return null;
+ case 0 === strpos($scalar, '!str'):
+ return (string) substr($scalar, 5);
+ case 0 === strpos($scalar, '! '):
+ return intval(self::parseScalar(substr($scalar, 2)));
+ case 0 === strpos($scalar, '!!php/object:'):
+ return unserialize(substr($scalar, 13));
+ case ctype_digit($scalar):
+ $raw = $scalar;
+ $cast = intval($scalar);
+ return '0' == $scalar[0] ? octdec($scalar) : (((string) $raw == (string) $cast) ? $cast : $raw);
+ case in_array(strtolower($scalar), $trueValues):
+ return true;
+ case in_array(strtolower($scalar), $falseValues):
+ return false;
+ case is_numeric($scalar):
+ return '0x' == $scalar[0].$scalar[1] ? hexdec($scalar) : floatval($scalar);
+ case 0 == strcasecmp($scalar, '.inf'):
+ case 0 == strcasecmp($scalar, '.NaN'):
+ return -log(0);
+ case 0 == strcasecmp($scalar, '-.inf'):
+ return log(0);
+ case preg_match('/^(-|\+)?[0-9,]+(\.[0-9]+)?$/', $scalar):
+ return floatval(str_replace(',', '', $scalar));
+ case preg_match(self::getTimestampRegex(), $scalar):
+ return strtotime($scalar);
+ default:
+ return (string) $scalar;
+ }
+ }
+
+ static protected function getTimestampRegex()
+ {
+ return <<<EOF
+ ~^
+ (?P<year>[0-9][0-9][0-9][0-9])
+ -(?P<month>[0-9][0-9]?)
+ -(?P<day>[0-9][0-9]?)
+ (?:(?:[Tt]|[ \t]+)
+ (?P<hour>[0-9][0-9]?)
+ :(?P<minute>[0-9][0-9])
+ :(?P<second>[0-9][0-9])
+ (?:\.(?P<fraction>[0-9]*))?
+ (?:[ \t]*(?P<tz>Z|(?P<tz_sign>[-+])(?P<tz_hour>[0-9][0-9]?)
+ (?::(?P<tz_minute>[0-9][0-9]))?))?)?
+ $~x
+EOF;
+ }
+}
diff --git a/3rdparty/aws-sdk/lib/yaml/lib/sfYamlParser.php b/3rdparty/aws-sdk/lib/yaml/lib/sfYamlParser.php
new file mode 100644
index 00000000000..4c56a56db07
--- /dev/null
+++ b/3rdparty/aws-sdk/lib/yaml/lib/sfYamlParser.php
@@ -0,0 +1,612 @@
+<?php
+
+/*
+ * This file is part of the symfony package.
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+require_once(dirname(__FILE__).'/sfYamlInline.php');
+
+if (!defined('PREG_BAD_UTF8_OFFSET_ERROR'))
+{
+ define('PREG_BAD_UTF8_OFFSET_ERROR', 5);
+}
+
+/**
+ * sfYamlParser parses YAML strings to convert them to PHP arrays.
+ *
+ * @package symfony
+ * @subpackage yaml
+ * @author Fabien Potencier <fabien.potencier@symfony-project.com>
+ * @version SVN: $Id: sfYamlParser.class.php 10832 2008-08-13 07:46:08Z fabien $
+ */
+class sfYamlParser
+{
+ protected
+ $offset = 0,
+ $lines = array(),
+ $currentLineNb = -1,
+ $currentLine = '',
+ $refs = array();
+
+ /**
+ * Constructor
+ *
+ * @param integer $offset The offset of YAML document (used for line numbers in error messages)
+ */
+ public function __construct($offset = 0)
+ {
+ $this->offset = $offset;
+ }
+
+ /**
+ * Parses a YAML string to a PHP value.
+ *
+ * @param string $value A YAML string
+ *
+ * @return mixed A PHP value
+ *
+ * @throws InvalidArgumentException If the YAML is not valid
+ */
+ public function parse($value)
+ {
+ $value = str_replace("\t", ' ', $value); // Convert tabs to spaces.
+
+ $this->currentLineNb = -1;
+ $this->currentLine = '';
+ $this->lines = explode("\n", $this->cleanup($value));
+
+ if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2)
+ {
+ $mbEncoding = mb_internal_encoding();
+ mb_internal_encoding('ASCII');
+ }
+
+ $data = array();
+ while ($this->moveToNextLine())
+ {
+ if ($this->isCurrentLineEmpty())
+ {
+ continue;
+ }
+
+ // tab?
+ if (preg_match('#^\t+#', $this->currentLine))
+ {
+ throw new InvalidArgumentException(sprintf('A YAML file cannot contain tabs as indentation at line %d (%s).', $this->getRealCurrentLineNb() + 1, $this->currentLine));
+ }
+
+ $isRef = $isInPlace = $isProcessed = false;
+ if (preg_match('#^\-((?P<leadspaces>\s+)(?P<value>.+?))?\s*$#', $this->currentLine, $values))
+ {
+ if (isset($values['value']) && preg_match('#^&(?P<ref>[^ ]+) *(?P<value>.*)#', $values['value'], $matches))
+ {
+ $isRef = $matches['ref'];
+ $values['value'] = $matches['value'];
+ }
+
+ // array
+ if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#'))
+ {
+ $c = $this->getRealCurrentLineNb() + 1;
+ $parser = new sfYamlParser($c);
+ $parser->refs =& $this->refs;
+ $data[] = $parser->parse($this->getNextEmbedBlock());
+ }
+ else
+ {
+ if (isset($values['leadspaces'])
+ && ' ' == $values['leadspaces']
+ && preg_match('#^(?P<key>'.sfYamlInline::REGEX_QUOTED_STRING.'|[^ \'"\{].*?) *\:(\s+(?P<value>.+?))?\s*$#', $values['value'], $matches))
+ {
+ // this is a compact notation element, add to next block and parse
+ $c = $this->getRealCurrentLineNb();
+ $parser = new sfYamlParser($c);
+ $parser->refs =& $this->refs;
+
+ $block = $values['value'];
+ if (!$this->isNextLineIndented())
+ {
+ $block .= "\n".$this->getNextEmbedBlock($this->getCurrentLineIndentation() + 2);
+ }
+
+ $data[] = $parser->parse($block);
+ }
+ else
+ {
+ $data[] = $this->parseValue($values['value']);
+ }
+ }
+ }
+ else if (preg_match('#^(?P<key>'.sfYamlInline::REGEX_QUOTED_STRING.'|[^ \'"].*?) *\:(\s+(?P<value>.+?))?\s*$#', $this->currentLine, $values))
+ {
+ $key = sfYamlInline::parseScalar($values['key']);
+
+ if ('<<' === $key)
+ {
+ if (isset($values['value']) && '*' === substr($values['value'], 0, 1))
+ {
+ $isInPlace = substr($values['value'], 1);
+ if (!array_key_exists($isInPlace, $this->refs))
+ {
+ throw new InvalidArgumentException(sprintf('Reference "%s" does not exist at line %s (%s).', $isInPlace, $this->getRealCurrentLineNb() + 1, $this->currentLine));
+ }
+ }
+ else
+ {
+ if (isset($values['value']) && $values['value'] !== '')
+ {
+ $value = $values['value'];
+ }
+ else
+ {
+ $value = $this->getNextEmbedBlock();
+ }
+ $c = $this->getRealCurrentLineNb() + 1;
+ $parser = new sfYamlParser($c);
+ $parser->refs =& $this->refs;
+ $parsed = $parser->parse($value);
+
+ $merged = array();
+ if (!is_array($parsed))
+ {
+ throw new InvalidArgumentException(sprintf("YAML merge keys used with a scalar value instead of an array at line %s (%s)", $this->getRealCurrentLineNb() + 1, $this->currentLine));
+ }
+ else if (isset($parsed[0]))
+ {
+ // Numeric array, merge individual elements
+ foreach (array_reverse($parsed) as $parsedItem)
+ {
+ if (!is_array($parsedItem))
+ {
+ throw new InvalidArgumentException(sprintf("Merge items must be arrays at line %s (%s).", $this->getRealCurrentLineNb() + 1, $parsedItem));
+ }
+ $merged = array_merge($parsedItem, $merged);
+ }
+ }
+ else
+ {
+ // Associative array, merge
+ $merged = array_merge($merge, $parsed);
+ }
+
+ $isProcessed = $merged;
+ }
+ }
+ else if (isset($values['value']) && preg_match('#^&(?P<ref>[^ ]+) *(?P<value>.*)#', $values['value'], $matches))
+ {
+ $isRef = $matches['ref'];
+ $values['value'] = $matches['value'];
+ }
+
+ if ($isProcessed)
+ {
+ // Merge keys
+ $data = $isProcessed;
+ }
+ // hash
+ else if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#'))
+ {
+ // if next line is less indented or equal, then it means that the current value is null
+ if ($this->isNextLineIndented())
+ {
+ $data[$key] = null;
+ }
+ else
+ {
+ $c = $this->getRealCurrentLineNb() + 1;
+ $parser = new sfYamlParser($c);
+ $parser->refs =& $this->refs;
+ $data[$key] = $parser->parse($this->getNextEmbedBlock());
+ }
+ }
+ else
+ {
+ if ($isInPlace)
+ {
+ $data = $this->refs[$isInPlace];
+ }
+ else
+ {
+ $data[$key] = $this->parseValue($values['value']);
+ }
+ }
+ }
+ else
+ {
+ // 1-liner followed by newline
+ if (2 == count($this->lines) && empty($this->lines[1]))
+ {
+ $value = sfYamlInline::load($this->lines[0]);
+ if (is_array($value))
+ {
+ $first = reset($value);
+ if ('*' === substr($first, 0, 1))
+ {
+ $data = array();
+ foreach ($value as $alias)
+ {
+ $data[] = $this->refs[substr($alias, 1)];
+ }
+ $value = $data;
+ }
+ }
+
+ if (isset($mbEncoding))
+ {
+ mb_internal_encoding($mbEncoding);
+ }
+
+ return $value;
+ }
+
+ switch (preg_last_error())
+ {
+ case PREG_INTERNAL_ERROR:
+ $error = 'Internal PCRE error on line';
+ break;
+ case PREG_BACKTRACK_LIMIT_ERROR:
+ $error = 'pcre.backtrack_limit reached on line';
+ break;
+ case PREG_RECURSION_LIMIT_ERROR:
+ $error = 'pcre.recursion_limit reached on line';
+ break;
+ case PREG_BAD_UTF8_ERROR:
+ $error = 'Malformed UTF-8 data on line';
+ break;
+ case PREG_BAD_UTF8_OFFSET_ERROR:
+ $error = 'Offset doesn\'t correspond to the begin of a valid UTF-8 code point on line';
+ break;
+ default:
+ $error = 'Unable to parse line';
+ }
+
+ throw new InvalidArgumentException(sprintf('%s %d (%s).', $error, $this->getRealCurrentLineNb() + 1, $this->currentLine));
+ }
+
+ if ($isRef)
+ {
+ $this->refs[$isRef] = end($data);
+ }
+ }
+
+ if (isset($mbEncoding))
+ {
+ mb_internal_encoding($mbEncoding);
+ }
+
+ return empty($data) ? null : $data;
+ }
+
+ /**
+ * Returns the current line number (takes the offset into account).
+ *
+ * @return integer The current line number
+ */
+ protected function getRealCurrentLineNb()
+ {
+ return $this->currentLineNb + $this->offset;
+ }
+
+ /**
+ * Returns the current line indentation.
+ *
+ * @return integer The current line indentation
+ */
+ protected function getCurrentLineIndentation()
+ {
+ return strlen($this->currentLine) - strlen(ltrim($this->currentLine, ' '));
+ }
+
+ /**
+ * Returns the next embed block of YAML.
+ *
+ * @param integer $indentation The indent level at which the block is to be read, or null for default
+ *
+ * @return string A YAML string
+ */
+ protected function getNextEmbedBlock($indentation = null)
+ {
+ $this->moveToNextLine();
+
+ if (null === $indentation)
+ {
+ $newIndent = $this->getCurrentLineIndentation();
+
+ if (!$this->isCurrentLineEmpty() && 0 == $newIndent)
+ {
+ throw new InvalidArgumentException(sprintf('Indentation problem at line %d (%s)', $this->getRealCurrentLineNb() + 1, $this->currentLine));
+ }
+ }
+ else
+ {
+ $newIndent = $indentation;
+ }
+
+ $data = array(substr($this->currentLine, $newIndent));
+
+ while ($this->moveToNextLine())
+ {
+ if ($this->isCurrentLineEmpty())
+ {
+ if ($this->isCurrentLineBlank())
+ {
+ $data[] = substr($this->currentLine, $newIndent);
+ }
+
+ continue;
+ }
+
+ $indent = $this->getCurrentLineIndentation();
+
+ if (preg_match('#^(?P<text> *)$#', $this->currentLine, $match))
+ {
+ // empty line
+ $data[] = $match['text'];
+ }
+ else if ($indent >= $newIndent)
+ {
+ $data[] = substr($this->currentLine, $newIndent);
+ }
+ else if (0 == $indent)
+ {
+ $this->moveToPreviousLine();
+
+ break;
+ }
+ else
+ {
+ throw new InvalidArgumentException(sprintf('Indentation problem at line %d (%s)', $this->getRealCurrentLineNb() + 1, $this->currentLine));
+ }
+ }
+
+ return implode("\n", $data);
+ }
+
+ /**
+ * Moves the parser to the next line.
+ */
+ protected function moveToNextLine()
+ {
+ if ($this->currentLineNb >= count($this->lines) - 1)
+ {
+ return false;
+ }
+
+ $this->currentLine = $this->lines[++$this->currentLineNb];
+
+ return true;
+ }
+
+ /**
+ * Moves the parser to the previous line.
+ */
+ protected function moveToPreviousLine()
+ {
+ $this->currentLine = $this->lines[--$this->currentLineNb];
+ }
+
+ /**
+ * Parses a YAML value.
+ *
+ * @param string $value A YAML value
+ *
+ * @return mixed A PHP value
+ */
+ protected function parseValue($value)
+ {
+ if ('*' === substr($value, 0, 1))
+ {
+ if (false !== $pos = strpos($value, '#'))
+ {
+ $value = substr($value, 1, $pos - 2);
+ }
+ else
+ {
+ $value = substr($value, 1);
+ }
+
+ if (!array_key_exists($value, $this->refs))
+ {
+ throw new InvalidArgumentException(sprintf('Reference "%s" does not exist (%s).', $value, $this->currentLine));
+ }
+ return $this->refs[$value];
+ }
+
+ if (preg_match('/^(?P<separator>\||>)(?P<modifiers>\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P<comments> +#.*)?$/', $value, $matches))
+ {
+ $modifiers = isset($matches['modifiers']) ? $matches['modifiers'] : '';
+
+ return $this->parseFoldedScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), intval(abs($modifiers)));
+ }
+ else
+ {
+ return sfYamlInline::load($value);
+ }
+ }
+
+ /**
+ * Parses a folded scalar.
+ *
+ * @param string $separator The separator that was used to begin this folded scalar (| or >)
+ * @param string $indicator The indicator that was used to begin this folded scalar (+ or -)
+ * @param integer $indentation The indentation that was used to begin this folded scalar
+ *
+ * @return string The text value
+ */
+ protected function parseFoldedScalar($separator, $indicator = '', $indentation = 0)
+ {
+ $separator = '|' == $separator ? "\n" : ' ';
+ $text = '';
+
+ $notEOF = $this->moveToNextLine();
+
+ while ($notEOF && $this->isCurrentLineBlank())
+ {
+ $text .= "\n";
+
+ $notEOF = $this->moveToNextLine();
+ }
+
+ if (!$notEOF)
+ {
+ return '';
+ }
+
+ if (!preg_match('#^(?P<indent>'.($indentation ? str_repeat(' ', $indentation) : ' +').')(?P<text>.*)$#', $this->currentLine, $matches))
+ {
+ $this->moveToPreviousLine();
+
+ return '';
+ }
+
+ $textIndent = $matches['indent'];
+ $previousIndent = 0;
+
+ $text .= $matches['text'].$separator;
+ while ($this->currentLineNb + 1 < count($this->lines))
+ {
+ $this->moveToNextLine();
+
+ if (preg_match('#^(?P<indent> {'.strlen($textIndent).',})(?P<text>.+)$#', $this->currentLine, $matches))
+ {
+ if (' ' == $separator && $previousIndent != $matches['indent'])
+ {
+ $text = substr($text, 0, -1)."\n";
+ }
+ $previousIndent = $matches['indent'];
+
+ $text .= str_repeat(' ', $diff = strlen($matches['indent']) - strlen($textIndent)).$matches['text'].($diff ? "\n" : $separator);
+ }
+ else if (preg_match('#^(?P<text> *)$#', $this->currentLine, $matches))
+ {
+ $text .= preg_replace('#^ {1,'.strlen($textIndent).'}#', '', $matches['text'])."\n";
+ }
+ else
+ {
+ $this->moveToPreviousLine();
+
+ break;
+ }
+ }
+
+ if (' ' == $separator)
+ {
+ // replace last separator by a newline
+ $text = preg_replace('/ (\n*)$/', "\n$1", $text);
+ }
+
+ switch ($indicator)
+ {
+ case '':
+ $text = preg_replace('#\n+$#s', "\n", $text);
+ break;
+ case '+':
+ break;
+ case '-':
+ $text = preg_replace('#\n+$#s', '', $text);
+ break;
+ }
+
+ return $text;
+ }
+
+ /**
+ * Returns true if the next line is indented.
+ *
+ * @return Boolean Returns true if the next line is indented, false otherwise
+ */
+ protected function isNextLineIndented()
+ {
+ $currentIndentation = $this->getCurrentLineIndentation();
+ $notEOF = $this->moveToNextLine();
+
+ while ($notEOF && $this->isCurrentLineEmpty())
+ {
+ $notEOF = $this->moveToNextLine();
+ }
+
+ if (false === $notEOF)
+ {
+ return false;
+ }
+
+ $ret = false;
+ if ($this->getCurrentLineIndentation() <= $currentIndentation)
+ {
+ $ret = true;
+ }
+
+ $this->moveToPreviousLine();
+
+ return $ret;
+ }
+
+ /**
+ * Returns true if the current line is blank or if it is a comment line.
+ *
+ * @return Boolean Returns true if the current line is empty or if it is a comment line, false otherwise
+ */
+ protected function isCurrentLineEmpty()
+ {
+ return $this->isCurrentLineBlank() || $this->isCurrentLineComment();
+ }
+
+ /**
+ * Returns true if the current line is blank.
+ *
+ * @return Boolean Returns true if the current line is blank, false otherwise
+ */
+ protected function isCurrentLineBlank()
+ {
+ return '' == trim($this->currentLine, ' ');
+ }
+
+ /**
+ * Returns true if the current line is a comment line.
+ *
+ * @return Boolean Returns true if the current line is a comment line, false otherwise
+ */
+ protected function isCurrentLineComment()
+ {
+ //checking explicitly the first char of the trim is faster than loops or strpos
+ $ltrimmedLine = ltrim($this->currentLine, ' ');
+ return $ltrimmedLine[0] === '#';
+ }
+
+ /**
+ * Cleanups a YAML string to be parsed.
+ *
+ * @param string $value The input YAML string
+ *
+ * @return string A cleaned up YAML string
+ */
+ protected function cleanup($value)
+ {
+ $value = str_replace(array("\r\n", "\r"), "\n", $value);
+
+ if (!preg_match("#\n$#", $value))
+ {
+ $value .= "\n";
+ }
+
+ // strip YAML header
+ $count = 0;
+ $value = preg_replace('#^\%YAML[: ][\d\.]+.*\n#s', '', $value, -1, $count);
+ $this->offset += $count;
+
+ // remove leading comments and/or ---
+ $trimmedValue = preg_replace('#^((\#.*?\n)|(\-\-\-.*?\n))*#s', '', $value, -1, $count);
+ if ($count == 1)
+ {
+ // items have been removed, update the offset
+ $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n");
+ $value = $trimmedValue;
+ }
+
+ return $value;
+ }
+}
diff --git a/3rdparty/aws-sdk/sdk.class.php b/3rdparty/aws-sdk/sdk.class.php
new file mode 100755
index 00000000000..8dcb7bf252f
--- /dev/null
+++ b/3rdparty/aws-sdk/sdk.class.php
@@ -0,0 +1,1435 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// EXCEPTIONS
+
+/**
+ * Default CFRuntime Exception.
+ */
+class CFRuntime_Exception extends Exception {}
+
+/**
+ * Parsing Exception.
+ */
+class Parser_Exception extends Exception {}
+
+
+/*%******************************************************************************************%*/
+// DETERMINE WHAT ENVIRONMENT DATA TO ADD TO THE USERAGENT FOR METRIC TRACKING
+
+/*
+ Define a temporary callback function for this calculation. Get the PHP version and any
+ required/optional extensions that are leveraged.
+
+ Tracking this data gives Amazon better metrics about what configurations are being used
+ so that forward-looking plans for the code can be made with more certainty (e.g. What
+ version of PHP are most people running? Do they tend to have the latest PCRE?).
+*/
+function __aws_sdk_ua_callback()
+{
+ $ua_append = '';
+ $extensions = get_loaded_extensions();
+ $sorted_extensions = array();
+
+ if ($extensions)
+ {
+ foreach ($extensions as $extension)
+ {
+ if ($extension === 'curl' && function_exists('curl_version'))
+ {
+ $curl_version = curl_version();
+ $sorted_extensions[strtolower($extension)] = $curl_version['version'];
+ }
+ elseif ($extension === 'pcre' && defined('PCRE_VERSION'))
+ {
+ $pcre_version = explode(' ', PCRE_VERSION);
+ $sorted_extensions[strtolower($extension)] = $pcre_version[0];
+ }
+ elseif ($extension === 'openssl' && defined('OPENSSL_VERSION_TEXT'))
+ {
+ $openssl_version = explode(' ', OPENSSL_VERSION_TEXT);
+ $sorted_extensions[strtolower($extension)] = $openssl_version[1];
+ }
+ else
+ {
+ $sorted_extensions[strtolower($extension)] = phpversion($extension);
+ }
+ }
+ }
+
+ foreach (array('simplexml', 'json', 'pcre', 'spl', 'curl', 'openssl', 'apc', 'xcache', 'memcache', 'memcached', 'pdo', 'pdo_sqlite', 'sqlite', 'sqlite3', 'zlib', 'xdebug') as $ua_ext)
+ {
+ if (isset($sorted_extensions[$ua_ext]) && $sorted_extensions[$ua_ext])
+ {
+ $ua_append .= ' ' . $ua_ext . '/' . $sorted_extensions[$ua_ext];
+ }
+ elseif (isset($sorted_extensions[$ua_ext]))
+ {
+ $ua_append .= ' ' . $ua_ext . '/0';
+ }
+ }
+
+ foreach (array('memory_limit', 'date.timezone', 'open_basedir', 'safe_mode', 'zend.enable_gc') as $cfg)
+ {
+ $cfg_value = ini_get($cfg);
+
+ if (in_array($cfg, array('memory_limit', 'date.timezone'), true))
+ {
+ $ua_append .= ' ' . $cfg . '/' . str_replace('/', '.', $cfg_value);
+ }
+ elseif (in_array($cfg, array('open_basedir', 'safe_mode', 'zend.enable_gc'), true))
+ {
+ if ($cfg_value === false || $cfg_value === '' || $cfg_value === 0)
+ {
+ $cfg_value = 'off';
+ }
+ elseif ($cfg_value === true || $cfg_value === '1' || $cfg_value === 1)
+ {
+ $cfg_value = 'on';
+ }
+
+ $ua_append .= ' ' . $cfg . '/' . $cfg_value;
+ }
+ }
+
+ return $ua_append;
+}
+
+
+/*%******************************************************************************************%*/
+// INTERMEDIARY CONSTANTS
+
+define('CFRUNTIME_NAME', 'aws-sdk-php');
+define('CFRUNTIME_VERSION', '1.5.6.2');
+define('CFRUNTIME_BUILD', '20120529180000');
+define('CFRUNTIME_USERAGENT', CFRUNTIME_NAME . '/' . CFRUNTIME_VERSION . ' PHP/' . PHP_VERSION . ' ' . str_replace(' ', '_', php_uname('s')) . '/' . str_replace(' ', '_', php_uname('r')) . ' Arch/' . php_uname('m') . ' SAPI/' . php_sapi_name() . ' Integer/' . PHP_INT_MAX . ' Build/' . CFRUNTIME_BUILD . __aws_sdk_ua_callback());
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Core functionality and default settings shared across all SDK classes. All methods and properties in this
+ * class are inherited by the service-specific classes.
+ *
+ * @version 2012.05.29
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+class CFRuntime
+{
+ /*%******************************************************************************************%*/
+ // CONSTANTS
+
+ /**
+ * Name of the software.
+ */
+ const NAME = CFRUNTIME_NAME;
+
+ /**
+ * Version of the software.
+ */
+ const VERSION = CFRUNTIME_VERSION;
+
+ /**
+ * Build ID of the software.
+ */
+ const BUILD = CFRUNTIME_BUILD;
+
+ /**
+ * User agent string used to identify the software.
+ */
+ const USERAGENT = CFRUNTIME_USERAGENT;
+
+
+ /*%******************************************************************************************%*/
+ // PROPERTIES
+
+ /**
+ * The Amazon API Key.
+ */
+ public $key;
+
+ /**
+ * The Amazon API Secret Key.
+ */
+ public $secret_key;
+
+ /**
+ * The Amazon Authentication Token.
+ */
+ public $auth_token;
+
+ /**
+ * Handle for the utility functions.
+ */
+ public $util;
+
+ /**
+ * An identifier for the current AWS service.
+ */
+ public $service = null;
+
+ /**
+ * The supported API version.
+ */
+ public $api_version = null;
+
+ /**
+ * The state of whether auth should be handled as AWS Query.
+ */
+ public $use_aws_query = true;
+
+ /**
+ * The default class to use for utilities (defaults to <CFUtilities>).
+ */
+ public $utilities_class = 'CFUtilities';
+
+ /**
+ * The default class to use for HTTP requests (defaults to <CFRequest>).
+ */
+ public $request_class = 'CFRequest';
+
+ /**
+ * The default class to use for HTTP responses (defaults to <CFResponse>).
+ */
+ public $response_class = 'CFResponse';
+
+ /**
+ * The default class to use for parsing XML (defaults to <CFSimpleXML>).
+ */
+ public $parser_class = 'CFSimpleXML';
+
+ /**
+ * The default class to use for handling batch requests (defaults to <CFBatchRequest>).
+ */
+ public $batch_class = 'CFBatchRequest';
+
+ /**
+ * The state of SSL/HTTPS use.
+ */
+ public $use_ssl = true;
+
+ /**
+ * The state of SSL certificate verification.
+ */
+ public $ssl_verification = true;
+
+ /**
+ * The proxy to use for connecting.
+ */
+ public $proxy = null;
+
+ /**
+ * The alternate hostname to use, if any.
+ */
+ public $hostname = null;
+
+ /**
+ * The state of the capability to override the hostname with <set_hostname()>.
+ */
+ public $override_hostname = true;
+
+ /**
+ * The alternate port number to use, if any.
+ */
+ public $port_number = null;
+
+ /**
+ * The alternate resource prefix to use, if any.
+ */
+ public $resource_prefix = null;
+
+ /**
+ * The state of cache flow usage.
+ */
+ public $use_cache_flow = false;
+
+ /**
+ * The caching class to use.
+ */
+ public $cache_class = null;
+
+ /**
+ * The caching location to use.
+ */
+ public $cache_location = null;
+
+ /**
+ * When the cache should be considered stale.
+ */
+ public $cache_expires = null;
+
+ /**
+ * The state of cache compression.
+ */
+ public $cache_compress = null;
+
+ /**
+ * The current instantiated cache object.
+ */
+ public $cache_object = null;
+
+ /**
+ * The current instantiated batch request object.
+ */
+ public $batch_object = null;
+
+ /**
+ * The internally instantiated batch request object.
+ */
+ public $internal_batch_object = null;
+
+ /**
+ * The state of batch flow usage.
+ */
+ public $use_batch_flow = false;
+
+ /**
+ * The state of the cache deletion setting.
+ */
+ public $delete_cache = false;
+
+ /**
+ * The state of the debug mode setting.
+ */
+ public $debug_mode = false;
+
+ /**
+ * The number of times to retry failed requests.
+ */
+ public $max_retries = 3;
+
+ /**
+ * The user-defined callback function to call when a stream is read from.
+ */
+ public $registered_streaming_read_callback = null;
+
+ /**
+ * The user-defined callback function to call when a stream is written to.
+ */
+ public $registered_streaming_write_callback = null;
+
+ /**
+ * The credentials to use for authentication.
+ */
+ public $credentials = array();
+
+ /**
+ * The authentication class to use.
+ */
+ public $auth_class = null;
+
+ /**
+ * The operation to execute.
+ */
+ public $operation = null;
+
+ /**
+ * The payload to send.
+ */
+ public $payload = array();
+
+ /**
+ * The string prefix to prepend to the operation name.
+ */
+ public $operation_prefix = '';
+
+ /**
+ * The number of times a request has been retried.
+ */
+ public $redirects = 0;
+
+ /**
+ * The state of whether the response should be parsed or not.
+ */
+ public $parse_the_response = true;
+
+
+ /*%******************************************************************************************%*/
+ // CONSTRUCTOR
+
+ /**
+ * The constructor. This class should not be instantiated directly. Rather, a service-specific class
+ * should be instantiated.
+ *
+ * @param array $options (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>certificate_authority</code> - <code>boolean</code> - Optional - Determines which Cerificate Authority file to use. A value of boolean <code>false</code> will use the Certificate Authority file available on the system. A value of boolean <code>true</code> will use the Certificate Authority provided by the SDK. Passing a file system path to a Certificate Authority file (chmodded to <code>0755</code>) will use that. Leave this set to <code>false</code> if you're not sure.</li>
+ * <li><code>credentials</code> - <code>string</code> - Optional - The name of the credential set to use for authentication.</li>
+ * <li><code>default_cache_config</code> - <code>string</code> - Optional - This option allows a preferred storage type to be configured for long-term caching. This can be changed later using the <set_cache_config()> method. Valid values are: <code>apc</code>, <code>xcache</code>, or a file system path such as <code>./cache</code> or <code>/tmp/cache/</code>.</li>
+ * <li><code>key</code> - <code>string</code> - Optional - Your AWS key, or a session key. If blank, the default credential set will be used.</li>
+ * <li><code>secret</code> - <code>string</code> - Optional - Your AWS secret key, or a session secret key. If blank, the default credential set will be used.</li>
+ * <li><code>token</code> - <code>string</code> - Optional - An AWS session token.</li></ul>
+ * @return void
+ */
+ public function __construct(array $options = array())
+ {
+ // Instantiate the utilities class.
+ $this->util = new $this->utilities_class();
+
+ // Determine the current service.
+ $this->service = get_class($this);
+
+ // Create credentials based on the options
+ $instance_credentials = new CFCredential($options);
+
+ // Retreive a credential set from config.inc.php if it exists
+ if (isset($options['credentials']))
+ {
+ // Use a specific credential set and merge with the instance credentials
+ $this->credentials = CFCredentials::get($options['credentials'])
+ ->merge($instance_credentials);
+ }
+ else
+ {
+ try
+ {
+ // Use the default credential set and merge with the instance credentials
+ $this->credentials = CFCredentials::get(CFCredentials::DEFAULT_KEY)
+ ->merge($instance_credentials);
+ }
+ catch (CFCredentials_Exception $e)
+ {
+ if (isset($options['key']) && isset($options['secret']))
+ {
+ // Only the instance credentials were provided
+ $this->credentials = $instance_credentials;
+ }
+ else
+ {
+ // No credentials provided in the config file or constructor
+ throw new CFCredentials_Exception('No credentials were provided to ' . $this->service . '.');
+ }
+ }
+ }
+
+ // Set internal credentials after they are resolved
+ $this->key = $this->credentials->key;
+ $this->secret_key = $this->credentials->secret;
+ $this->auth_token = $this->credentials->token;
+
+ // Automatically enable whichever caching mechanism is set to default.
+ $this->set_cache_config($this->credentials->default_cache_config);
+ }
+
+ /**
+ * Alternate approach to constructing a new instance. Supports chaining.
+ *
+ * @param array $options (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>certificate_authority</code> - <code>boolean</code> - Optional - Determines which Cerificate Authority file to use. A value of boolean <code>false</code> will use the Certificate Authority file available on the system. A value of boolean <code>true</code> will use the Certificate Authority provided by the SDK. Passing a file system path to a Certificate Authority file (chmodded to <code>0755</code>) will use that. Leave this set to <code>false</code> if you're not sure.</li>
+ * <li><code>credentials</code> - <code>string</code> - Optional - The name of the credential set to use for authentication.</li>
+ * <li><code>default_cache_config</code> - <code>string</code> - Optional - This option allows a preferred storage type to be configured for long-term caching. This can be changed later using the <set_cache_config()> method. Valid values are: <code>apc</code>, <code>xcache</code>, or a file system path such as <code>./cache</code> or <code>/tmp/cache/</code>.</li>
+ * <li><code>key</code> - <code>string</code> - Optional - Your AWS key, or a session key. If blank, the default credential set will be used.</li>
+ * <li><code>secret</code> - <code>string</code> - Optional - Your AWS secret key, or a session secret key. If blank, the default credential set will be used.</li>
+ * <li><code>token</code> - <code>string</code> - Optional - An AWS session token.</li></ul>
+ * @return void
+ */
+ public static function factory(array $options = array())
+ {
+ if (version_compare(PHP_VERSION, '5.3.0', '<'))
+ {
+ throw new Exception('PHP 5.3 or newer is required to instantiate a new class with CLASS::factory().');
+ }
+
+ $self = get_called_class();
+ return new $self($options);
+ }
+
+
+ /*%******************************************************************************************%*/
+ // MAGIC METHODS
+
+ /**
+ * A magic method that allows `camelCase` method names to be translated into `snake_case` names.
+ *
+ * @param string $name (Required) The name of the method.
+ * @param array $arguments (Required) The arguments passed to the method.
+ * @return mixed The results of the intended method.
+ */
+ public function __call($name, $arguments)
+ {
+ // Convert camelCase method calls to snake_case.
+ $method_name = strtolower(preg_replace('/([a-z])([A-Z])/', '$1_$2', $name));
+
+ if (method_exists($this, $method_name))
+ {
+ return call_user_func_array(array($this, $method_name), $arguments);
+ }
+
+ throw new CFRuntime_Exception('The method ' . $name . '() is undefined. Attempted to map to ' . $method_name . '() which is also undefined. Error occurred');
+ }
+
+
+ /*%******************************************************************************************%*/
+ // SET CUSTOM SETTINGS
+
+ /**
+ * Set the proxy settings to use.
+ *
+ * @param string $proxy (Required) Accepts proxy credentials in the following format: `proxy://user:pass@hostname:port`
+ * @return $this A reference to the current instance.
+ */
+ public function set_proxy($proxy)
+ {
+ $this->proxy = $proxy;
+ return $this;
+ }
+
+ /**
+ * Set the hostname to connect to. This is useful for alternate services that are API-compatible with
+ * AWS, but run from a different hostname.
+ *
+ * @param string $hostname (Required) The alternate hostname to use in place of the default one. Useful for mock or test applications living on different hostnames.
+ * @param integer $port_number (Optional) The alternate port number to use in place of the default one. Useful for mock or test applications living on different port numbers.
+ * @return $this A reference to the current instance.
+ */
+ public function set_hostname($hostname, $port_number = null)
+ {
+ if ($this->override_hostname)
+ {
+ $this->hostname = $hostname;
+
+ if ($port_number)
+ {
+ $this->port_number = $port_number;
+ $this->hostname .= ':' . (string) $this->port_number;
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Set the resource prefix to use. This method is useful for alternate services that are API-compatible
+ * with AWS.
+ *
+ * @param string $prefix (Required) An alternate prefix to prepend to the resource path. Useful for mock or test applications.
+ * @return $this A reference to the current instance.
+ */
+ public function set_resource_prefix($prefix)
+ {
+ $this->resource_prefix = $prefix;
+ return $this;
+ }
+
+ /**
+ * Disables any subsequent use of the <set_hostname()> method.
+ *
+ * @param boolean $override (Optional) Whether or not subsequent calls to <set_hostname()> should be obeyed. A `false` value disables the further effectiveness of <set_hostname()>. Defaults to `true`.
+ * @return $this A reference to the current instance.
+ */
+ public function allow_hostname_override($override = true)
+ {
+ $this->override_hostname = $override;
+ return $this;
+ }
+
+ /**
+ * Disables SSL/HTTPS connections for hosts that don't support them. Some services, however, still
+ * require SSL support.
+ *
+ * This method will throw a user warning when invoked, which can be hidden by changing your
+ * <php:error_reporting()> settings.
+ *
+ * @return $this A reference to the current instance.
+ */
+ public function disable_ssl()
+ {
+ trigger_error('Disabling SSL connections is potentially unsafe and highly discouraged.', E_USER_WARNING);
+ $this->use_ssl = false;
+ return $this;
+ }
+
+ /**
+ * Disables the verification of the SSL Certificate Authority. Doing so can enable an attacker to carry
+ * out a man-in-the-middle attack.
+ *
+ * https://secure.wikimedia.org/wikipedia/en/wiki/Man-in-the-middle_attack
+ *
+ * This method will throw a user warning when invoked, which can be hidden by changing your
+ * <php:error_reporting()> settings.
+ *
+ * @return $this A reference to the current instance.
+ */
+ public function disable_ssl_verification($ssl_verification = false)
+ {
+ trigger_error('Disabling the verification of SSL certificates can lead to man-in-the-middle attacks. It is potentially unsafe and highly discouraged.', E_USER_WARNING);
+ $this->ssl_verification = $ssl_verification;
+ return $this;
+ }
+
+ /**
+ * Enables HTTP request/response header logging to `STDERR`.
+ *
+ * @param boolean $enabled (Optional) Whether or not to enable debug mode. Defaults to `true`.
+ * @return $this A reference to the current instance.
+ */
+ public function enable_debug_mode($enabled = true)
+ {
+ $this->debug_mode = $enabled;
+ return $this;
+ }
+
+ /**
+ * Sets the maximum number of times to retry failed requests.
+ *
+ * @param integer $retries (Optional) The maximum number of times to retry failed requests. Defaults to `3`.
+ * @return $this A reference to the current instance.
+ */
+ public function set_max_retries($retries = 3)
+ {
+ $this->max_retries = $retries;
+ return $this;
+ }
+
+ /**
+ * Set the caching configuration to use for response caching.
+ *
+ * @param string $location (Required) <p>The location to store the cache object in. This may vary by cache method.</p><ul><li>File - The local file system paths such as <code>./cache</code> (relative) or <code>/tmp/cache/</code> (absolute). The location must be server-writable.</li><li>APC - Pass in <code>apc</code> to use this lightweight cache. You must have the <a href="http://php.net/apc">APC extension</a> installed.</li><li>XCache - Pass in <code>xcache</code> to use this lightweight cache. You must have the <a href="http://xcache.lighttpd.net">XCache</a> extension installed.</li><li>Memcached - Pass in an indexed array of associative arrays. Each associative array should have a <code>host</code> and a <code>port</code> value representing a <a href="http://php.net/memcached">Memcached</a> server to connect to.</li><li>PDO - A URL-style string (e.g. <code>pdo.mysql://user:pass@localhost/cache</code>) or a standard DSN-style string (e.g. <code>pdo.sqlite:/sqlite/cache.db</code>). MUST be prefixed with <code>pdo.</code>. See <code>CachePDO</code> and <a href="http://php.net/pdo">PDO</a> for more details.</li></ul>
+ * @param boolean $gzip (Optional) Whether or not data should be gzipped before being stored. A value of `true` will compress the contents before caching them. A value of `false` will leave the contents uncompressed. Defaults to `true`.
+ * @return $this A reference to the current instance.
+ */
+ public function set_cache_config($location, $gzip = true)
+ {
+ // If we have an array, we're probably passing in Memcached servers and ports.
+ if (is_array($location))
+ {
+ $this->cache_class = 'CacheMC';
+ }
+ else
+ {
+ // I would expect locations like `/tmp/cache`, `pdo.mysql://user:pass@hostname:port`, `pdo.sqlite:memory:`, and `apc`.
+ $type = strtolower(substr($location, 0, 3));
+ switch ($type)
+ {
+ case 'apc':
+ $this->cache_class = 'CacheAPC';
+ break;
+
+ case 'xca': // First three letters of `xcache`
+ $this->cache_class = 'CacheXCache';
+ break;
+
+ case 'pdo':
+ $this->cache_class = 'CachePDO';
+ $location = substr($location, 4);
+ break;
+
+ default:
+ $this->cache_class = 'CacheFile';
+ break;
+ }
+ }
+
+ // Set the remaining cache information.
+ $this->cache_location = $location;
+ $this->cache_compress = $gzip;
+
+ return $this;
+ }
+
+ /**
+ * Register a callback function to execute whenever a data stream is read from using
+ * <CFRequest::streaming_read_callback()>.
+ *
+ * The user-defined callback function should accept three arguments:
+ *
+ * <ul>
+ * <li><code>$curl_handle</code> - <code>resource</code> - Required - The cURL handle resource that represents the in-progress transfer.</li>
+ * <li><code>$file_handle</code> - <code>resource</code> - Required - The file handle resource that represents the file on the local file system.</li>
+ * <li><code>$length</code> - <code>integer</code> - Required - The length in kilobytes of the data chunk that was transferred.</li>
+ * </ul>
+ *
+ * @param string|array|function $callback (Required) The callback function is called by <php:call_user_func()>, so you can pass the following values: <ul>
+ * <li>The name of a global function to execute, passed as a string.</li>
+ * <li>A method to execute, passed as <code>array('ClassName', 'MethodName')</code>.</li>
+ * <li>An anonymous function (PHP 5.3+).</li></ul>
+ * @return $this A reference to the current instance.
+ */
+ public function register_streaming_read_callback($callback)
+ {
+ $this->registered_streaming_read_callback = $callback;
+ return $this;
+ }
+
+ /**
+ * Register a callback function to execute whenever a data stream is written to using
+ * <CFRequest::streaming_write_callback()>.
+ *
+ * The user-defined callback function should accept two arguments:
+ *
+ * <ul>
+ * <li><code>$curl_handle</code> - <code>resource</code> - Required - The cURL handle resource that represents the in-progress transfer.</li>
+ * <li><code>$length</code> - <code>integer</code> - Required - The length in kilobytes of the data chunk that was transferred.</li>
+ * </ul>
+ *
+ * @param string|array|function $callback (Required) The callback function is called by <php:call_user_func()>, so you can pass the following values: <ul>
+ * <li>The name of a global function to execute, passed as a string.</li>
+ * <li>A method to execute, passed as <code>array('ClassName', 'MethodName')</code>.</li>
+ * <li>An anonymous function (PHP 5.3+).</li></ul>
+ * @return $this A reference to the current instance.
+ */
+ public function register_streaming_write_callback($callback)
+ {
+ $this->registered_streaming_write_callback = $callback;
+ return $this;
+ }
+
+ /**
+ * Fetches and caches STS credentials. This is meant to be used by the constructor, and is not to be
+ * manually invoked.
+ *
+ * @param CacheCore $cache (Required) The a reference to the cache object that is being used to handle the caching.
+ * @param array $options (Required) The options that were passed into the constructor.
+ * @return mixed The data to be cached, or NULL.
+ */
+ public function cache_sts_credentials($cache, $options)
+ {
+ $token = new AmazonSTS($options);
+ $response = $token->get_session_token();
+
+ if ($response->isOK())
+ {
+ // Update the expiration
+ $expiration_time = strtotime((string) $response->body->GetSessionTokenResult->Credentials->Expiration);
+ $expiration_duration = round(($expiration_time - time()) * 0.85);
+ $cache->expire_in($expiration_duration);
+
+ // Return the important data
+ return array(
+ 'key' => (string) $response->body->GetSessionTokenResult->Credentials->AccessKeyId,
+ 'secret' => (string) $response->body->GetSessionTokenResult->Credentials->SecretAccessKey,
+ 'token' => (string) $response->body->GetSessionTokenResult->Credentials->SessionToken,
+ 'expires' => (string) $response->body->GetSessionTokenResult->Credentials->Expiration,
+ );
+ }
+
+ return null;
+ }
+
+
+ /*%******************************************************************************************%*/
+ // SET CUSTOM CLASSES
+
+ /**
+ * Set a custom class for this functionality. Use this method when extending/overriding existing classes
+ * with new functionality.
+ *
+ * The replacement class must extend from <CFUtilities>.
+ *
+ * @param string $class (Optional) The name of the new class to use for this functionality.
+ * @return $this A reference to the current instance.
+ */
+ public function set_utilities_class($class = 'CFUtilities')
+ {
+ $this->utilities_class = $class;
+ $this->util = new $this->utilities_class();
+ return $this;
+ }
+
+ /**
+ * Set a custom class for this functionality. Use this method when extending/overriding existing classes
+ * with new functionality.
+ *
+ * The replacement class must extend from <CFRequest>.
+ *
+ * @param string $class (Optional) The name of the new class to use for this functionality.
+ * @param $this A reference to the current instance.
+ */
+ public function set_request_class($class = 'CFRequest')
+ {
+ $this->request_class = $class;
+ return $this;
+ }
+
+ /**
+ * Set a custom class for this functionality. Use this method when extending/overriding existing classes
+ * with new functionality.
+ *
+ * The replacement class must extend from <CFResponse>.
+ *
+ * @param string $class (Optional) The name of the new class to use for this functionality.
+ * @return $this A reference to the current instance.
+ */
+ public function set_response_class($class = 'CFResponse')
+ {
+ $this->response_class = $class;
+ return $this;
+ }
+
+ /**
+ * Set a custom class for this functionality. Use this method when extending/overriding existing classes
+ * with new functionality.
+ *
+ * The replacement class must extend from <CFSimpleXML>.
+ *
+ * @param string $class (Optional) The name of the new class to use for this functionality.
+ * @return $this A reference to the current instance.
+ */
+ public function set_parser_class($class = 'CFSimpleXML')
+ {
+ $this->parser_class = $class;
+ return $this;
+ }
+
+ /**
+ * Set a custom class for this functionality. Use this method when extending/overriding existing classes
+ * with new functionality.
+ *
+ * The replacement class must extend from <CFBatchRequest>.
+ *
+ * @param string $class (Optional) The name of the new class to use for this functionality.
+ * @return $this A reference to the current instance.
+ */
+ public function set_batch_class($class = 'CFBatchRequest')
+ {
+ $this->batch_class = $class;
+ return $this;
+ }
+
+
+ /*%******************************************************************************************%*/
+ // AUTHENTICATION
+
+ /**
+ * Default, shared method for authenticating a connection to AWS.
+ *
+ * @param string $operation (Required) Indicates the operation to perform.
+ * @param array $payload (Required) An associative array of parameters for authenticating. See the individual methods for allowed keys.
+ * @return CFResponse Object containing a parsed HTTP response.
+ */
+ public function authenticate($operation, $payload)
+ {
+ $original_payload = $payload;
+ $method_arguments = func_get_args();
+ $curlopts = array();
+ $return_curl_handle = false;
+
+ if (substr($operation, 0, strlen($this->operation_prefix)) !== $this->operation_prefix)
+ {
+ $operation = $this->operation_prefix . $operation;
+ }
+
+ // Extract the custom CURLOPT settings from the payload
+ if (is_array($payload) && isset($payload['curlopts']))
+ {
+ $curlopts = $payload['curlopts'];
+ unset($payload['curlopts']);
+ }
+
+ // Determine whether the response or curl handle should be returned
+ if (is_array($payload) && isset($payload['returnCurlHandle']))
+ {
+ $return_curl_handle = isset($payload['returnCurlHandle']) ? $payload['returnCurlHandle'] : false;
+ unset($payload['returnCurlHandle']);
+ }
+
+ // Use the caching flow to determine if we need to do a round-trip to the server.
+ if ($this->use_cache_flow)
+ {
+ // Generate an identifier specific to this particular set of arguments.
+ $cache_id = $this->key . '_' . get_class($this) . '_' . $operation . '_' . sha1(serialize($method_arguments));
+
+ // Instantiate the appropriate caching object.
+ $this->cache_object = new $this->cache_class($cache_id, $this->cache_location, $this->cache_expires, $this->cache_compress);
+
+ if ($this->delete_cache)
+ {
+ $this->use_cache_flow = false;
+ $this->delete_cache = false;
+ return $this->cache_object->delete();
+ }
+
+ // Invoke the cache callback function to determine whether to pull data from the cache or make a fresh request.
+ $data = $this->cache_object->response_manager(array($this, 'cache_callback'), $method_arguments);
+
+ // Parse the XML body
+ $data = $this->parse_callback($data);
+
+ // End!
+ return $data;
+ }
+
+ /*%******************************************************************************************%*/
+
+ // Signer
+ $signer = new $this->auth_class($this->hostname, $operation, $payload, $this->credentials);
+ $signer->key = $this->key;
+ $signer->secret_key = $this->secret_key;
+ $signer->auth_token = $this->auth_token;
+ $signer->api_version = $this->api_version;
+ $signer->utilities_class = $this->utilities_class;
+ $signer->request_class = $this->request_class;
+ $signer->response_class = $this->response_class;
+ $signer->use_ssl = $this->use_ssl;
+ $signer->proxy = $this->proxy;
+ $signer->util = $this->util;
+ $signer->registered_streaming_read_callback = $this->registered_streaming_read_callback;
+ $signer->registered_streaming_write_callback = $this->registered_streaming_write_callback;
+ $request = $signer->authenticate();
+
+ // Update RequestCore settings
+ $request->request_class = $this->request_class;
+ $request->response_class = $this->response_class;
+ $request->ssl_verification = $this->ssl_verification;
+
+ /*%******************************************************************************************%*/
+
+ // Debug mode
+ if ($this->debug_mode)
+ {
+ $request->debug_mode = $this->debug_mode;
+ }
+
+ // Set custom CURLOPT settings
+ if (count($curlopts))
+ {
+ $request->set_curlopts($curlopts);
+ }
+
+ // Manage the (newer) batch request API or the (older) returnCurlHandle setting.
+ if ($this->use_batch_flow)
+ {
+ $handle = $request->prep_request();
+ $this->batch_object->add($handle);
+ $this->use_batch_flow = false;
+
+ return $handle;
+ }
+ elseif ($return_curl_handle)
+ {
+ return $request->prep_request();
+ }
+
+ // Send!
+ $request->send_request();
+
+ // Prepare the response.
+ $headers = $request->get_response_header();
+ $headers['x-aws-stringtosign'] = $signer->string_to_sign;
+
+ if (isset($signer->canonical_request))
+ {
+ $headers['x-aws-canonicalrequest'] = $signer->canonical_request;
+ }
+
+ $headers['x-aws-request-headers'] = $request->request_headers;
+ $headers['x-aws-body'] = $signer->querystring;
+
+ $data = new $this->response_class($headers, ($this->parse_the_response === true) ? $this->parse_callback($request->get_response_body()) : $request->get_response_body(), $request->get_response_code());
+
+ // Was it Amazon's fault the request failed? Retry the request until we reach $max_retries.
+ if (
+ (integer) $request->get_response_code() === 500 || // Internal Error (presumably transient)
+ (integer) $request->get_response_code() === 503) // Service Unavailable (presumably transient)
+ {
+ if ($this->redirects <= $this->max_retries)
+ {
+ // Exponential backoff
+ $delay = (integer) (pow(4, $this->redirects) * 100000);
+ usleep($delay);
+ $this->redirects++;
+ $data = $this->authenticate($operation, $original_payload);
+ }
+ }
+
+ // DynamoDB has custom logic
+ elseif (
+ (integer) $request->get_response_code() === 400 &&
+ stripos((string) $request->get_response_body(), 'com.amazonaws.dynamodb.') !== false && (
+ stripos((string) $request->get_response_body(), 'ProvisionedThroughputExceededException') !== false
+ )
+ )
+ {
+ if ($this->redirects === 0)
+ {
+ $this->redirects++;
+ $data = $this->authenticate($operation, $original_payload);
+ }
+ elseif ($this->redirects <= max($this->max_retries, 10))
+ {
+ // Exponential backoff
+ $delay = (integer) (pow(2, ($this->redirects - 1)) * 50000);
+ usleep($delay);
+ $this->redirects++;
+ $data = $this->authenticate($operation, $original_payload);
+ }
+ }
+
+ $this->redirects = 0;
+ return $data;
+ }
+
+
+ /*%******************************************************************************************%*/
+ // BATCH REQUEST LAYER
+
+ /**
+ * Specifies that the intended request should be queued for a later batch request.
+ *
+ * @param CFBatchRequest $queue (Optional) The <CFBatchRequest> instance to use for managing batch requests. If not available, it generates a new instance of <CFBatchRequest>.
+ * @return $this A reference to the current instance.
+ */
+ public function batch(CFBatchRequest &$queue = null)
+ {
+ if ($queue)
+ {
+ $this->batch_object = $queue;
+ }
+ elseif ($this->internal_batch_object)
+ {
+ $this->batch_object = &$this->internal_batch_object;
+ }
+ else
+ {
+ $this->internal_batch_object = new $this->batch_class();
+ $this->batch_object = &$this->internal_batch_object;
+ }
+
+ $this->use_batch_flow = true;
+
+ return $this;
+ }
+
+ /**
+ * Executes the batch request queue by sending all queued requests.
+ *
+ * @param boolean $clear_after_send (Optional) Whether or not to clear the batch queue after sending a request. Defaults to `true`. Set this to `false` if you are caching batch responses and want to retrieve results later.
+ * @return array An array of <CFResponse> objects.
+ */
+ public function send($clear_after_send = true)
+ {
+ if ($this->use_batch_flow)
+ {
+ // When we send the request, disable batch flow.
+ $this->use_batch_flow = false;
+
+ // If we're not caching, simply send the request.
+ if (!$this->use_cache_flow)
+ {
+ $response = $this->batch_object->send();
+ $parsed_data = array_map(array($this, 'parse_callback'), $response);
+ $parsed_data = new CFArray($parsed_data);
+
+ // Clear the queue
+ if ($clear_after_send)
+ {
+ $this->batch_object->queue = array();
+ }
+
+ return $parsed_data;
+ }
+
+ // Generate an identifier specific to this particular set of arguments.
+ $cache_id = $this->key . '_' . get_class($this) . '_' . sha1(serialize($this->batch_object));
+
+ // Instantiate the appropriate caching object.
+ $this->cache_object = new $this->cache_class($cache_id, $this->cache_location, $this->cache_expires, $this->cache_compress);
+
+ if ($this->delete_cache)
+ {
+ $this->use_cache_flow = false;
+ $this->delete_cache = false;
+ return $this->cache_object->delete();
+ }
+
+ // Invoke the cache callback function to determine whether to pull data from the cache or make a fresh request.
+ $data_set = $this->cache_object->response_manager(array($this, 'cache_callback_batch'), array($this->batch_object));
+ $parsed_data = array_map(array($this, 'parse_callback'), $data_set);
+ $parsed_data = new CFArray($parsed_data);
+
+ // Clear the queue
+ if ($clear_after_send)
+ {
+ $this->batch_object->queue = array();
+ }
+
+ // End!
+ return $parsed_data;
+ }
+
+ // Load the class
+ $null = new CFBatchRequest();
+ unset($null);
+
+ throw new CFBatchRequest_Exception('You must use $object->batch()->send()');
+ }
+
+ /**
+ * Parses a response body into a PHP object if appropriate.
+ *
+ * @param CFResponse|string $response (Required) The <CFResponse> object to parse, or an XML string that would otherwise be a response body.
+ * @param string $content_type (Optional) The content-type to use when determining how to parse the content.
+ * @return CFResponse|string A parsed <CFResponse> object, or parsed XML.
+ */
+ public function parse_callback($response, $headers = null)
+ {
+ // Bail out
+ if (!$this->parse_the_response) return $response;
+
+ // Shorten this so we have a (mostly) single code path
+ if (isset($response->body))
+ {
+ if (is_string($response->body))
+ {
+ $body = $response->body;
+ }
+ else
+ {
+ return $response;
+ }
+ }
+ elseif (is_string($response))
+ {
+ $body = $response;
+ }
+ else
+ {
+ return $response;
+ }
+
+ // Decompress gzipped content
+ if (isset($headers['content-encoding']))
+ {
+ switch (strtolower(trim($headers['content-encoding'], "\x09\x0A\x0D\x20")))
+ {
+ case 'gzip':
+ case 'x-gzip':
+ $decoder = new CFGzipDecode($body);
+ if ($decoder->parse())
+ {
+ $body = $decoder->data;
+ }
+ break;
+
+ case 'deflate':
+ if (($uncompressed = gzuncompress($body)) !== false)
+ {
+ $body = $uncompressed;
+ }
+ elseif (($uncompressed = gzinflate($body)) !== false)
+ {
+ $body = $uncompressed;
+ }
+ break;
+ }
+ }
+
+ // Look for XML cues
+ if (
+ (isset($headers['content-type']) && ($headers['content-type'] === 'text/xml' || $headers['content-type'] === 'application/xml')) || // We know it's XML
+ (!isset($headers['content-type']) && (stripos($body, '<?xml') === 0 || strpos($body, '<Error>') === 0) || preg_match('/^<(\w*) xmlns="http(s?):\/\/(\w*).amazon(aws)?.com/im', $body)) // Sniff for XML
+ )
+ {
+ // Strip the default XML namespace to simplify XPath expressions
+ $body = str_replace("xmlns=", "ns=", $body);
+
+ try {
+ // Parse the XML body
+ $body = new $this->parser_class($body);
+ }
+ catch (Exception $e)
+ {
+ throw new Parser_Exception($e->getMessage());
+ }
+ }
+ // Look for JSON cues
+ elseif (
+ (isset($headers['content-type']) && ($headers['content-type'] === 'application/json') || $headers['content-type'] === 'application/x-amz-json-1.0') || // We know it's JSON
+ (!isset($headers['content-type']) && $this->util->is_json($body)) // Sniff for JSON
+ )
+ {
+ // Normalize JSON to a CFSimpleXML object
+ $body = CFJSON::to_xml($body, $this->parser_class);
+ }
+
+ // Put the parsed data back where it goes
+ if (isset($response->body))
+ {
+ $response->body = $body;
+ }
+ else
+ {
+ $response = $body;
+ }
+
+ return $response;
+ }
+
+
+ /*%******************************************************************************************%*/
+ // CACHING LAYER
+
+ /**
+ * Specifies that the resulting <CFResponse> object should be cached according to the settings from
+ * <set_cache_config()>.
+ *
+ * @param string|integer $expires (Required) The time the cache is to expire. Accepts a number of seconds as an integer, or an amount of time, as a string, that is understood by <php:strtotime()> (e.g. "1 hour").
+ * @param $this A reference to the current instance.
+ * @return $this
+ */
+ public function cache($expires)
+ {
+ // Die if they haven't used set_cache_config().
+ if (!$this->cache_class)
+ {
+ throw new CFRuntime_Exception('Must call set_cache_config() before using cache()');
+ }
+
+ if (is_string($expires))
+ {
+ $expires = strtotime($expires);
+ $this->cache_expires = $expires - time();
+ }
+ elseif (is_int($expires))
+ {
+ $this->cache_expires = $expires;
+ }
+
+ $this->use_cache_flow = true;
+
+ return $this;
+ }
+
+ /**
+ * The callback function that is executed when the cache doesn't exist or has expired. The response of
+ * this method is cached. Accepts identical parameters as the <authenticate()> method. Never call this
+ * method directly -- it is used internally by the caching system.
+ *
+ * @param string $operation (Required) Indicates the operation to perform.
+ * @param array $payload (Required) An associative array of parameters for authenticating. See the individual methods for allowed keys.
+ * @return CFResponse A parsed HTTP response.
+ */
+ public function cache_callback($operation, $payload)
+ {
+ // Disable the cache flow since it's already been handled.
+ $this->use_cache_flow = false;
+
+ // Make the request
+ $response = $this->authenticate($operation, $payload);
+
+ // If this is an XML document, convert it back to a string.
+ if (isset($response->body) && ($response->body instanceof SimpleXMLElement))
+ {
+ $response->body = $response->body->asXML();
+ }
+
+ return $response;
+ }
+
+ /**
+ * Used for caching the results of a batch request. Never call this method directly; it is used
+ * internally by the caching system.
+ *
+ * @param CFBatchRequest $batch (Required) The batch request object to send.
+ * @return CFResponse A parsed HTTP response.
+ */
+ public function cache_callback_batch(CFBatchRequest $batch)
+ {
+ return $batch->send();
+ }
+
+ /**
+ * Deletes a cached <CFResponse> object using the specified cache storage type.
+ *
+ * @return boolean A value of `true` if cached object exists and is successfully deleted, otherwise `false`.
+ */
+ public function delete_cache()
+ {
+ $this->use_cache_flow = true;
+ $this->delete_cache = true;
+
+ return $this;
+ }
+}
+
+
+/**
+ * Contains the functionality for auto-loading service classes.
+ */
+class CFLoader
+{
+ /*%******************************************************************************************%*/
+ // AUTO-LOADER
+
+ /**
+ * Automatically load classes that aren't included.
+ *
+ * @param string $class (Required) The classname to load.
+ * @return boolean Whether or not the file was successfully loaded.
+ */
+ public static function autoloader($class)
+ {
+ $path = dirname(__FILE__) . DIRECTORY_SEPARATOR;
+
+ // Amazon SDK classes
+ if (strstr($class, 'Amazon'))
+ {
+ if (file_exists($require_this = $path . 'services' . DIRECTORY_SEPARATOR . str_ireplace('Amazon', '', strtolower($class)) . '.class.php'))
+ {
+ require_once $require_this;
+ return true;
+ }
+
+ return false;
+ }
+
+ // Utility classes
+ elseif (strstr($class, 'CF'))
+ {
+ if (file_exists($require_this = $path . 'utilities' . DIRECTORY_SEPARATOR . str_ireplace('CF', '', strtolower($class)) . '.class.php'))
+ {
+ require_once $require_this;
+ return true;
+ }
+
+ return false;
+ }
+
+ // Load CacheCore
+ elseif (strstr($class, 'Cache'))
+ {
+ if (file_exists($require_this = $path . 'lib' . DIRECTORY_SEPARATOR . 'cachecore' . DIRECTORY_SEPARATOR . strtolower($class) . '.class.php'))
+ {
+ require_once $require_this;
+ return true;
+ }
+
+ return false;
+ }
+
+ // Load RequestCore
+ elseif (strstr($class, 'RequestCore') || strstr($class, 'ResponseCore'))
+ {
+ if (file_exists($require_this = $path . 'lib' . DIRECTORY_SEPARATOR . 'requestcore' . DIRECTORY_SEPARATOR . 'requestcore.class.php'))
+ {
+ require_once $require_this;
+ return true;
+ }
+
+ return false;
+ }
+
+ // Load array-to-domdocument
+ elseif (strstr($class, 'Array2DOM'))
+ {
+ if (file_exists($require_this = $path . 'lib' . DIRECTORY_SEPARATOR . 'dom' . DIRECTORY_SEPARATOR . 'ArrayToDOMDocument.php'))
+ {
+ require_once $require_this;
+ return true;
+ }
+
+ return false;
+ }
+
+ // Load Authentication Signers
+ elseif (strstr($class, 'Auth'))
+ {
+ if (file_exists($require_this = $path . 'authentication' . DIRECTORY_SEPARATOR . str_replace('auth', 'signature_', strtolower($class)) . '.class.php'))
+ {
+ require_once $require_this;
+ return true;
+ }
+
+ return false;
+ }
+
+ // Load Signer interface
+ elseif ($class === 'Signer')
+ {
+ if (!interface_exists('Signable', false) &&
+ file_exists($require_this = $path . 'authentication' . DIRECTORY_SEPARATOR . 'signable.interface.php'))
+ {
+ require_once $require_this;
+ }
+
+ if (file_exists($require_this = $path . 'authentication' . DIRECTORY_SEPARATOR . 'signer.abstract.php'))
+ {
+ require_once $require_this;
+ return true;
+ }
+
+ return false;
+ }
+
+ // Load Symfony YAML classes
+ elseif (strstr($class, 'sfYaml'))
+ {
+ if (file_exists($require_this = $path . 'lib' . DIRECTORY_SEPARATOR . 'yaml' . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'sfYaml.php'))
+ {
+ require_once $require_this;
+ return true;
+ }
+
+ return false;
+ }
+
+ return false;
+ }
+}
+
+// Register the autoloader.
+spl_autoload_register(array('CFLoader', 'autoloader'));
+
+// Don't look for any configuration files, the Amazon S3 storage backend handles configuration
+
+// /*%******************************************************************************************%*/
+// // CONFIGURATION
+//
+// // Look for include file in the same directory (e.g. `./config.inc.php`).
+// if (file_exists(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'config.inc.php'))
+// {
+// include_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'config.inc.php';
+// }
+// // Fallback to `~/.aws/sdk/config.inc.php`
+// else
+// {
+// if (!isset($_ENV['HOME']) && isset($_SERVER['HOME']))
+// {
+// $_ENV['HOME'] = $_SERVER['HOME'];
+// }
+// elseif (!isset($_ENV['HOME']) && !isset($_SERVER['HOME']))
+// {
+// $_ENV['HOME'] = `cd ~ && pwd`;
+// if (!$_ENV['HOME'])
+// {
+// switch (strtolower(PHP_OS))
+// {
+// case 'darwin':
+// $_ENV['HOME'] = '/Users/' . get_current_user();
+// break;
+//
+// case 'windows':
+// case 'winnt':
+// case 'win32':
+// $_ENV['HOME'] = 'c:' . DIRECTORY_SEPARATOR . 'Documents and Settings' . DIRECTORY_SEPARATOR . get_current_user();
+// break;
+//
+// default:
+// $_ENV['HOME'] = '/home/' . get_current_user();
+// break;
+// }
+// }
+// }
+//
+// if (getenv('HOME') && file_exists(getenv('HOME') . DIRECTORY_SEPARATOR . '.aws' . DIRECTORY_SEPARATOR . 'sdk' . DIRECTORY_SEPARATOR . 'config.inc.php'))
+// {
+// include_once getenv('HOME') . DIRECTORY_SEPARATOR . '.aws' . DIRECTORY_SEPARATOR . 'sdk' . DIRECTORY_SEPARATOR . 'config.inc.php';
+// }
+// }
diff --git a/3rdparty/aws-sdk/services/s3.class.php b/3rdparty/aws-sdk/services/s3.class.php
new file mode 100755
index 00000000000..2e9e1cd52b1
--- /dev/null
+++ b/3rdparty/aws-sdk/services/s3.class.php
@@ -0,0 +1,3979 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// EXCEPTIONS
+
+/**
+ * Default S3 Exception.
+ */
+class S3_Exception extends Exception {}
+
+
+/*%******************************************************************************************%*/
+// MAIN CLASS
+
+/**
+ * Amazon S3 is a web service that enables you to store data in the cloud. You can then download the data
+ * or use the data with other AWS services, such as Amazon Elastic Cloud Computer (EC2).
+ *
+ * Amazon Simple Storage Service (Amazon S3) is storage for the Internet. You can use Amazon S3 to store
+ * and retrieve any amount of data at any time, from anywhere on the web. You can accomplish these tasks
+ * using the AWS Management Console, which is a simple and intuitive web interface.
+ *
+ * To get the most out of Amazon S3, you need to understand a few simple concepts. Amazon S3 stores data
+ * as objects in buckets. An object is comprised of a file and optionally any metadata that describes
+ * that file.
+ *
+ * To store an object in Amazon S3, you upload the file you want to store to a bucket. When you upload a
+ * file, you can set permissions on the object as well as any metadata.
+ *
+ * Buckets are the containers for objects. You can have one or more buckets. For each bucket, you can control
+ * access to the bucket (who can create, delete, and list objects in the bucket), view access logs for the
+ * bucket and its objects, and choose the geographical region where Amazon S3 will store the bucket and its
+ * contents.
+ *
+ * Visit <http://aws.amazon.com/s3/> for more information.
+ *
+ * @version 2012.01.17
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/s3/ Amazon Simple Storage Service
+ * @link http://aws.amazon.com/documentation/s3/ Amazon Simple Storage Service documentation
+ */
+class AmazonS3 extends CFRuntime
+{
+ /*%******************************************************************************************%*/
+ // REGIONAL ENDPOINTS
+
+ /**
+ * Specify the queue URL for the US-Standard (Northern Virginia & Washington State) Region.
+ */
+ const REGION_US_E1 = 's3.amazonaws.com';
+
+ /**
+ * Specify the queue URL for the US-Standard (Northern Virginia & Washington State) Region.
+ */
+ const REGION_VIRGINIA = self::REGION_US_E1;
+
+ /**
+ * Specify the queue URL for the US-Standard (Northern Virginia & Washington State) Region.
+ */
+ const REGION_US_STANDARD = self::REGION_US_E1;
+
+ /**
+ * Specify the queue URL for the US-West 1 (Northern California) Region.
+ */
+ const REGION_US_W1 = 's3-us-west-1.amazonaws.com';
+
+ /**
+ * Specify the queue URL for the US-West 1 (Northern California) Region.
+ */
+ const REGION_CALIFORNIA = self::REGION_US_W1;
+
+ /**
+ * Specify the queue URL for the US-West 2 (Oregon) Region.
+ */
+ const REGION_US_W2 = 's3-us-west-2.amazonaws.com';
+
+ /**
+ * Specify the queue URL for the US-West 2 (Oregon) Region.
+ */
+ const REGION_OREGON = self::REGION_US_W2;
+
+ /**
+ * Specify the queue URL for the EU (Ireland) Region.
+ */
+ const REGION_EU_W1 = 's3-eu-west-1.amazonaws.com';
+
+ /**
+ * Specify the queue URL for the EU (Ireland) Region.
+ */
+ const REGION_IRELAND = self::REGION_EU_W1;
+
+ /**
+ * Specify the queue URL for the Asia Pacific (Singapore) Region.
+ */
+ const REGION_APAC_SE1 = 's3-ap-southeast-1.amazonaws.com';
+
+ /**
+ * Specify the queue URL for the Asia Pacific (Singapore) Region.
+ */
+ const REGION_SINGAPORE = self::REGION_APAC_SE1;
+
+ /**
+ * Specify the queue URL for the Asia Pacific (Japan) Region.
+ */
+ const REGION_APAC_NE1 = 's3-ap-northeast-1.amazonaws.com';
+
+ /**
+ * Specify the queue URL for the Asia Pacific (Japan) Region.
+ */
+ const REGION_TOKYO = self::REGION_APAC_NE1;
+
+ /**
+ * Specify the queue URL for the South America (Sao Paulo) Region.
+ */
+ const REGION_SA_E1 = 's3-sa-east-1.amazonaws.com';
+
+ /**
+ * Specify the queue URL for the South America (Sao Paulo) Region.
+ */
+ const REGION_SAO_PAULO = self::REGION_SA_E1;
+
+ /**
+ * Specify the queue URL for the United States GovCloud Region.
+ */
+ const REGION_US_GOV1 = 's3-us-gov-west-1.amazonaws.com';
+
+ /**
+ * Specify the queue URL for the United States GovCloud FIPS 140-2 Region.
+ */
+ const REGION_US_GOV1_FIPS = 's3-fips-us-gov-west-1.amazonaws.com';
+
+ /**
+ * The default endpoint.
+ */
+ const DEFAULT_URL = self::REGION_US_E1;
+
+
+ /*%******************************************************************************************%*/
+ // REGIONAL WEBSITE ENDPOINTS
+
+ /**
+ * Specify the queue URL for the US-Standard (Northern Virginia & Washington State) Website Region.
+ */
+ const REGION_US_E1_WEBSITE = 's3-website-us-east-1.amazonaws.com';
+
+ /**
+ * Specify the queue URL for the US-Standard (Northern Virginia & Washington State) Website Region.
+ */
+ const REGION_VIRGINIA_WEBSITE = self::REGION_US_E1_WEBSITE;
+
+ /**
+ * Specify the queue URL for the US-Standard (Northern Virginia & Washington State) Website Region.
+ */
+ const REGION_US_STANDARD_WEBSITE = self::REGION_US_E1_WEBSITE;
+
+ /**
+ * Specify the queue URL for the US-West 1 (Northern California) Website Region.
+ */
+ const REGION_US_W1_WEBSITE = 's3-website-us-west-1.amazonaws.com';
+
+ /**
+ * Specify the queue URL for the US-West 1 (Northern California) Website Region.
+ */
+ const REGION_CALIFORNIA_WEBSITE = self::REGION_US_W1_WEBSITE;
+
+ /**
+ * Specify the queue URL for the US-West 2 (Oregon) Website Region.
+ */
+ const REGION_US_W2_WEBSITE = 's3-website-us-west-2.amazonaws.com';
+
+ /**
+ * Specify the queue URL for the US-West 2 (Oregon) Website Region.
+ */
+ const REGION_OREGON_WEBSITE = self::REGION_US_W2_WEBSITE;
+
+ /**
+ * Specify the queue URL for the EU (Ireland) Website Region.
+ */
+ const REGION_EU_W1_WEBSITE = 's3-website-eu-west-1.amazonaws.com';
+
+ /**
+ * Specify the queue URL for the EU (Ireland) Website Region.
+ */
+ const REGION_IRELAND_WEBSITE = self::REGION_EU_W1_WEBSITE;
+
+ /**
+ * Specify the queue URL for the Asia Pacific (Singapore) Website Region.
+ */
+ const REGION_APAC_SE1_WEBSITE = 's3-website-ap-southeast-1.amazonaws.com';
+
+ /**
+ * Specify the queue URL for the Asia Pacific (Singapore) Website Region.
+ */
+ const REGION_SINGAPORE_WEBSITE = self::REGION_APAC_SE1_WEBSITE;
+
+ /**
+ * Specify the queue URL for the Asia Pacific (Japan) Website Region.
+ */
+ const REGION_APAC_NE1_WEBSITE = 's3-website-ap-northeast-1.amazonaws.com';
+
+ /**
+ * Specify the queue URL for the Asia Pacific (Japan) Website Region.
+ */
+ const REGION_TOKYO_WEBSITE = self::REGION_APAC_NE1_WEBSITE;
+
+ /**
+ * Specify the queue URL for the South America (Sao Paulo) Website Region.
+ */
+ const REGION_SA_E1_WEBSITE = 's3-website-sa-east-1.amazonaws.com';
+
+ /**
+ * Specify the queue URL for the South America (Sao Paulo) Website Region.
+ */
+ const REGION_SAO_PAULO_WEBSITE = self::REGION_SA_E1_WEBSITE;
+
+ /**
+ * Specify the queue URL for the United States GovCloud Website Region.
+ */
+ const REGION_US_GOV1_WEBSITE = 's3-website-us-gov-west-1.amazonaws.com';
+
+
+ /*%******************************************************************************************%*/
+ // ACL
+
+ /**
+ * ACL: Owner-only read/write.
+ */
+ const ACL_PRIVATE = 'private';
+
+ /**
+ * ACL: Owner read/write, public read.
+ */
+ const ACL_PUBLIC = 'public-read';
+
+ /**
+ * ACL: Public read/write.
+ */
+ const ACL_OPEN = 'public-read-write';
+
+ /**
+ * ACL: Owner read/write, authenticated read.
+ */
+ const ACL_AUTH_READ = 'authenticated-read';
+
+ /**
+ * ACL: Bucket owner read.
+ */
+ const ACL_OWNER_READ = 'bucket-owner-read';
+
+ /**
+ * ACL: Bucket owner full control.
+ */
+ const ACL_OWNER_FULL_CONTROL = 'bucket-owner-full-control';
+
+
+ /*%******************************************************************************************%*/
+ // GRANTS
+
+ /**
+ * When applied to a bucket, grants permission to list the bucket. When applied to an object, this
+ * grants permission to read the object data and/or metadata.
+ */
+ const GRANT_READ = 'READ';
+
+ /**
+ * When applied to a bucket, grants permission to create, overwrite, and delete any object in the
+ * bucket. This permission is not supported for objects.
+ */
+ const GRANT_WRITE = 'WRITE';
+
+ /**
+ * Grants permission to read the ACL for the applicable bucket or object. The owner of a bucket or
+ * object always has this permission implicitly.
+ */
+ const GRANT_READ_ACP = 'READ_ACP';
+
+ /**
+ * Gives permission to overwrite the ACP for the applicable bucket or object. The owner of a bucket
+ * or object always has this permission implicitly. Granting this permission is equivalent to granting
+ * FULL_CONTROL because the grant recipient can make any changes to the ACP.
+ */
+ const GRANT_WRITE_ACP = 'WRITE_ACP';
+
+ /**
+ * Provides READ, WRITE, READ_ACP, and WRITE_ACP permissions. It does not convey additional rights and
+ * is provided only for convenience.
+ */
+ const GRANT_FULL_CONTROL = 'FULL_CONTROL';
+
+
+ /*%******************************************************************************************%*/
+ // USERS
+
+ /**
+ * The "AuthenticatedUsers" group for access control policies.
+ */
+ const USERS_AUTH = 'http://acs.amazonaws.com/groups/global/AuthenticatedUsers';
+
+ /**
+ * The "AllUsers" group for access control policies.
+ */
+ const USERS_ALL = 'http://acs.amazonaws.com/groups/global/AllUsers';
+
+ /**
+ * The "LogDelivery" group for access control policies.
+ */
+ const USERS_LOGGING = 'http://acs.amazonaws.com/groups/s3/LogDelivery';
+
+
+ /*%******************************************************************************************%*/
+ // PATTERNS
+
+ /**
+ * PCRE: Match all items
+ */
+ const PCRE_ALL = '/.*/i';
+
+
+ /*%******************************************************************************************%*/
+ // STORAGE
+
+ /**
+ * Standard storage redundancy.
+ */
+ const STORAGE_STANDARD = 'STANDARD';
+
+ /**
+ * Reduced storage redundancy.
+ */
+ const STORAGE_REDUCED = 'REDUCED_REDUNDANCY';
+
+
+ /*%******************************************************************************************%*/
+ // PROPERTIES
+
+ /**
+ * The request URL.
+ */
+ public $request_url;
+
+ /**
+ * The virtual host setting.
+ */
+ public $vhost;
+
+ /**
+ * The base XML elements to use for access control policy methods.
+ */
+ public $base_acp_xml;
+
+ /**
+ * The base XML elements to use for creating buckets in regions.
+ */
+ public $base_location_constraint;
+
+ /**
+ * The base XML elements to use for logging methods.
+ */
+ public $base_logging_xml;
+
+ /**
+ * The base XML elements to use for notifications.
+ */
+ public $base_notification_xml;
+
+ /**
+ * The base XML elements to use for versioning.
+ */
+ public $base_versioning_xml;
+
+ /**
+ * The base XML elements to use for completing a multipart upload.
+ */
+ public $complete_mpu_xml;
+
+ /**
+ * The base XML elements to use for website support.
+ */
+ public $website_config_xml;
+
+ /**
+ * The base XML elements to use for multi-object delete support.
+ */
+ public $multi_object_delete_xml;
+
+ /**
+ * The base XML elements to use for object expiration support.
+ */
+ public $object_expiration_xml;
+
+ /**
+ * The DNS vs. Path-style setting.
+ */
+ public $path_style = false;
+
+ /**
+ * The state of whether the prefix change is temporary or permanent.
+ */
+ public $temporary_prefix = false;
+
+
+ /*%******************************************************************************************%*/
+ // CONSTRUCTOR
+
+ /**
+ * Constructs a new instance of <AmazonS3>.
+ *
+ * @param array $options (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>certificate_authority</code> - <code>boolean</code> - Optional - Determines which Cerificate Authority file to use. A value of boolean <code>false</code> will use the Certificate Authority file available on the system. A value of boolean <code>true</code> will use the Certificate Authority provided by the SDK. Passing a file system path to a Certificate Authority file (chmodded to <code>0755</code>) will use that. Leave this set to <code>false</code> if you're not sure.</li>
+ * <li><code>credentials</code> - <code>string</code> - Optional - The name of the credential set to use for authentication.</li>
+ * <li><code>default_cache_config</code> - <code>string</code> - Optional - This option allows a preferred storage type to be configured for long-term caching. This can be changed later using the <set_cache_config()> method. Valid values are: <code>apc</code>, <code>xcache</code>, or a file system path such as <code>./cache</code> or <code>/tmp/cache/</code>.</li>
+ * <li><code>key</code> - <code>string</code> - Optional - Your AWS key, or a session key. If blank, the default credential set will be used.</li>
+ * <li><code>secret</code> - <code>string</code> - Optional - Your AWS secret key, or a session secret key. If blank, the default credential set will be used.</li>
+ * <li><code>token</code> - <code>string</code> - Optional - An AWS session token.</li></ul>
+ * @return void
+ */
+ public function __construct(array $options = array())
+ {
+ $this->vhost = null;
+ $this->api_version = '2006-03-01';
+ $this->hostname = self::DEFAULT_URL;
+
+ $this->base_acp_xml = '<?xml version="1.0" encoding="UTF-8"?><AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/latest/"></AccessControlPolicy>';
+ $this->base_location_constraint = '<?xml version="1.0" encoding="UTF-8"?><CreateBucketConfiguration xmlns="http://s3.amazonaws.com/doc/' . $this->api_version . '/"><LocationConstraint></LocationConstraint></CreateBucketConfiguration>';
+ $this->base_logging_xml = '<?xml version="1.0" encoding="utf-8"?><BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/' . $this->api_version . '"></BucketLoggingStatus>';
+ $this->base_notification_xml = '<?xml version="1.0" encoding="utf-8"?><NotificationConfiguration></NotificationConfiguration>';
+ $this->base_versioning_xml = '<?xml version="1.0" encoding="utf-8"?><VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/' . $this->api_version . '/"></VersioningConfiguration>';
+ $this->complete_mpu_xml = '<?xml version="1.0" encoding="utf-8"?><CompleteMultipartUpload></CompleteMultipartUpload>';
+ $this->website_config_xml = '<?xml version="1.0" encoding="utf-8"?><WebsiteConfiguration xmlns="http://s3.amazonaws.com/doc/' . $this->api_version . '/"><IndexDocument><Suffix>index.html</Suffix></IndexDocument><ErrorDocument><Key>error.html</Key></ErrorDocument></WebsiteConfiguration>';
+ $this->multi_object_delete_xml = '<?xml version="1.0" encoding="utf-8"?><Delete></Delete>';
+ $this->object_expiration_xml = '<?xml version="1.0" encoding="utf-8"?><LifecycleConfiguration></LifecycleConfiguration>';
+
+ parent::__construct($options);
+ }
+
+
+ /*%******************************************************************************************%*/
+ // AUTHENTICATION
+
+ /**
+ * Authenticates a connection to Amazon S3. Do not use directly unless implementing custom methods for
+ * this class.
+ *
+ * @param string $operation (Required) The name of the bucket to operate on (S3 Only).
+ * @param array $payload (Required) An associative array of parameters for authenticating. See inline comments for allowed keys.
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/S3_Authentication.html REST authentication
+ */
+ public function authenticate($operation, $payload)
+ {
+ /*
+ * Overriding or extending this class? You can pass the following "magic" keys into $opt.
+ *
+ * ## verb, resource, sub_resource and query_string ##
+ * <verb> /<resource>?<sub_resource>&<query_string>
+ * GET /filename.txt?versions&prefix=abc&max-items=1
+ *
+ * ## versionId, uploadId, partNumber, response-* ##
+ * These don't follow the same rules as above, in that the they needs to be signed, while
+ * other query_string values do not.
+ *
+ * ## curlopts ##
+ * These values get passed directly to the cURL methods in RequestCore.
+ *
+ * ## fileUpload, fileDownload, seekTo ##
+ * These are slightly modified and then passed to the cURL methods in RequestCore.
+ *
+ * ## headers ##
+ * $opt['headers'] is an array, whose keys are HTTP headers to be sent.
+ *
+ * ## body ##
+ * This is the request body that is sent to the server via PUT/POST.
+ *
+ * ## preauth ##
+ * This is a hook that tells authenticate() to generate a pre-authenticated URL.
+ *
+ * ## returnCurlHandle ##
+ * Tells authenticate() to return the cURL handle for the request instead of executing it.
+ */
+
+ // Rename variables (to overcome inheritence issues)
+ $bucket = $operation;
+ $opt = $payload;
+
+ // Validate the S3 bucket name
+ if (!$this->validate_bucketname_support($bucket))
+ {
+ // @codeCoverageIgnoreStart
+ throw new S3_Exception('S3 does not support "' . $bucket . '" as a valid bucket name. Review "Bucket Restrictions and Limitations" in the S3 Developer Guide for more information.');
+ // @codeCoverageIgnoreEnd
+ }
+
+ // Die if $opt isn't set.
+ if (!$opt) return false;
+
+ $method_arguments = func_get_args();
+
+ // Use the caching flow to determine if we need to do a round-trip to the server.
+ if ($this->use_cache_flow)
+ {
+ // Generate an identifier specific to this particular set of arguments.
+ $cache_id = $this->key . '_' . get_class($this) . '_' . $bucket . '_' . sha1(serialize($method_arguments));
+
+ // Instantiate the appropriate caching object.
+ $this->cache_object = new $this->cache_class($cache_id, $this->cache_location, $this->cache_expires, $this->cache_compress);
+
+ if ($this->delete_cache)
+ {
+ $this->use_cache_flow = false;
+ $this->delete_cache = false;
+ return $this->cache_object->delete();
+ }
+
+ // Invoke the cache callback function to determine whether to pull data from the cache or make a fresh request.
+ $data = $this->cache_object->response_manager(array($this, 'cache_callback'), $method_arguments);
+
+ if ($this->parse_the_response)
+ {
+ // Parse the XML body
+ $data = $this->parse_callback($data);
+ }
+
+ // End!
+ return $data;
+ }
+
+ // If we haven't already set a resource prefix and the bucket name isn't DNS-valid...
+ if ((!$this->resource_prefix && !$this->validate_bucketname_create($bucket)) || $this->path_style)
+ {
+ // Fall back to the older path-style URI
+ $this->set_resource_prefix('/' . $bucket);
+ $this->temporary_prefix = true;
+ }
+
+ // Determine hostname
+ $scheme = $this->use_ssl ? 'https://' : 'http://';
+ if ($this->resource_prefix || $this->path_style) // Use bucket-in-path method.
+ {
+ $hostname = $this->hostname . $this->resource_prefix . (($bucket === '' || $this->resource_prefix === '/' . $bucket) ? '' : ('/' . $bucket));
+ }
+ else
+ {
+ $hostname = $this->vhost ? $this->vhost : (($bucket === '') ? $this->hostname : ($bucket . '.') . $this->hostname);
+ }
+
+ // Get the UTC timestamp in RFC 2616 format
+ $date = gmdate(CFUtilities::DATE_FORMAT_RFC2616, time());
+
+ // Storage for request parameters.
+ $resource = '';
+ $sub_resource = '';
+ $querystringparams = array();
+ $signable_querystringparams = array();
+ $string_to_sign = '';
+ $headers = array(
+ 'Content-MD5' => '',
+ 'Content-Type' => 'application/x-www-form-urlencoded',
+ 'Date' => $date
+ );
+
+ /*%******************************************************************************************%*/
+
+ // Do we have an authentication token?
+ if ($this->auth_token)
+ {
+ $headers['X-Amz-Security-Token'] = $this->auth_token;
+ }
+
+ // Handle specific resources
+ if (isset($opt['resource']))
+ {
+ $resource .= $opt['resource'];
+ }
+
+ // Merge query string values
+ if (isset($opt['query_string']))
+ {
+ $querystringparams = array_merge($querystringparams, $opt['query_string']);
+ }
+ $query_string = $this->util->to_query_string($querystringparams);
+
+ // Merge the signable query string values. Must be alphabetical.
+ $signable_list = array(
+ 'partNumber',
+ 'response-cache-control',
+ 'response-content-disposition',
+ 'response-content-encoding',
+ 'response-content-language',
+ 'response-content-type',
+ 'response-expires',
+ 'uploadId',
+ 'versionId'
+ );
+ foreach ($signable_list as $item)
+ {
+ if (isset($opt[$item]))
+ {
+ $signable_querystringparams[$item] = $opt[$item];
+ }
+ }
+ $signable_query_string = $this->util->to_query_string($signable_querystringparams);
+
+ // Merge the HTTP headers
+ if (isset($opt['headers']))
+ {
+ $headers = array_merge($headers, $opt['headers']);
+ }
+
+ // Compile the URI to request
+ $conjunction = '?';
+ $signable_resource = '/' . str_replace('%2F', '/', rawurlencode($resource));
+ $non_signable_resource = '';
+
+ if (isset($opt['sub_resource']))
+ {
+ $signable_resource .= $conjunction . rawurlencode($opt['sub_resource']);
+ $conjunction = '&';
+ }
+ if ($signable_query_string !== '')
+ {
+ $signable_query_string = $conjunction . $signable_query_string;
+ $conjunction = '&';
+ }
+ if ($query_string !== '')
+ {
+ $non_signable_resource .= $conjunction . $query_string;
+ $conjunction = '&';
+ }
+ if (substr($hostname, -1) === substr($signable_resource, 0, 1))
+ {
+ $signable_resource = ltrim($signable_resource, '/');
+ }
+
+ $this->request_url = $scheme . $hostname . $signable_resource . $signable_query_string . $non_signable_resource;
+
+ if (isset($opt['location']))
+ {
+ $this->request_url = $opt['location'];
+ }
+
+ // Gather information to pass along to other classes.
+ $helpers = array(
+ 'utilities' => $this->utilities_class,
+ 'request' => $this->request_class,
+ 'response' => $this->response_class,
+ );
+
+ // Instantiate the request class
+ $request = new $this->request_class($this->request_url, $this->proxy, $helpers, $this->credentials);
+
+ // Update RequestCore settings
+ $request->request_class = $this->request_class;
+ $request->response_class = $this->response_class;
+ $request->ssl_verification = $this->ssl_verification;
+
+ // Pass along registered stream callbacks
+ if ($this->registered_streaming_read_callback)
+ {
+ $request->register_streaming_read_callback($this->registered_streaming_read_callback);
+ }
+
+ if ($this->registered_streaming_write_callback)
+ {
+ $request->register_streaming_write_callback($this->registered_streaming_write_callback);
+ }
+
+ // Streaming uploads
+ if (isset($opt['fileUpload']))
+ {
+ if (is_resource($opt['fileUpload']))
+ {
+ // Determine the length to read from the stream
+ $length = null; // From current position until EOF by default, size determined by set_read_stream()
+
+ if (isset($headers['Content-Length']))
+ {
+ $length = $headers['Content-Length'];
+ }
+ elseif (isset($opt['seekTo']))
+ {
+ // Read from seekTo until EOF by default
+ $stats = fstat($opt['fileUpload']);
+
+ if ($stats && $stats['size'] >= 0)
+ {
+ $length = $stats['size'] - (integer) $opt['seekTo'];
+ }
+ }
+
+ $request->set_read_stream($opt['fileUpload'], $length);
+
+ if ($headers['Content-Type'] === 'application/x-www-form-urlencoded')
+ {
+ $headers['Content-Type'] = 'application/octet-stream';
+ }
+ }
+ else
+ {
+ $request->set_read_file($opt['fileUpload']);
+
+ // Determine the length to read from the file
+ $length = $request->read_stream_size; // The file size by default
+
+ if (isset($headers['Content-Length']))
+ {
+ $length = $headers['Content-Length'];
+ }
+ elseif (isset($opt['seekTo']) && isset($length))
+ {
+ // Read from seekTo until EOF by default
+ $length -= (integer) $opt['seekTo'];
+ }
+
+ $request->set_read_stream_size($length);
+
+ // Attempt to guess the correct mime-type
+ if ($headers['Content-Type'] === 'application/x-www-form-urlencoded')
+ {
+ $extension = explode('.', $opt['fileUpload']);
+ $extension = array_pop($extension);
+ $mime_type = CFMimeTypes::get_mimetype($extension);
+ $headers['Content-Type'] = $mime_type;
+ }
+ }
+
+ $headers['Content-Length'] = $request->read_stream_size;
+ $headers['Content-MD5'] = '';
+ }
+
+ // Handle streaming file offsets
+ if (isset($opt['seekTo']))
+ {
+ // Pass the seek position to RequestCore
+ $request->set_seek_position((integer) $opt['seekTo']);
+ }
+
+ // Streaming downloads
+ if (isset($opt['fileDownload']))
+ {
+ if (is_resource($opt['fileDownload']))
+ {
+ $request->set_write_stream($opt['fileDownload']);
+ }
+ else
+ {
+ $request->set_write_file($opt['fileDownload']);
+ }
+ }
+
+ $curlopts = array();
+
+ // Set custom CURLOPT settings
+ if (isset($opt['curlopts']))
+ {
+ $curlopts = $opt['curlopts'];
+ }
+
+ // Debug mode
+ if ($this->debug_mode)
+ {
+ $curlopts[CURLOPT_VERBOSE] = true;
+ }
+
+ // Set the curl options.
+ if (count($curlopts))
+ {
+ $request->set_curlopts($curlopts);
+ }
+
+ // Do we have a verb?
+ if (isset($opt['verb']))
+ {
+ $request->set_method($opt['verb']);
+ $string_to_sign .= $opt['verb'] . "\n";
+ }
+
+ // Add headers and content when we have a body
+ if (isset($opt['body']))
+ {
+ $request->set_body($opt['body']);
+ $headers['Content-Length'] = strlen($opt['body']);
+
+ if ($headers['Content-Type'] === 'application/x-www-form-urlencoded')
+ {
+ $headers['Content-Type'] = 'application/octet-stream';
+ }
+
+ if (!isset($opt['NoContentMD5']) || $opt['NoContentMD5'] !== true)
+ {
+ $headers['Content-MD5'] = $this->util->hex_to_base64(md5($opt['body']));
+ }
+ }
+
+ // Handle query-string authentication
+ if (isset($opt['preauth']) && (integer) $opt['preauth'] > 0)
+ {
+ unset($headers['Date']);
+ $headers['Content-Type'] = '';
+ $headers['Expires'] = is_int($opt['preauth']) ? $opt['preauth'] : strtotime($opt['preauth']);
+ }
+
+ // Sort headers
+ uksort($headers, 'strnatcasecmp');
+
+ // Add headers to request and compute the string to sign
+ foreach ($headers as $header_key => $header_value)
+ {
+ // Strip linebreaks from header values as they're illegal and can allow for security issues
+ $header_value = str_replace(array("\r", "\n"), '', $header_value);
+
+ // Add the header if it has a value
+ if ($header_value !== '')
+ {
+ $request->add_header($header_key, $header_value);
+ }
+
+ // Generate the string to sign
+ if (
+ strtolower($header_key) === 'content-md5' ||
+ strtolower($header_key) === 'content-type' ||
+ strtolower($header_key) === 'date' ||
+ (strtolower($header_key) === 'expires' && isset($opt['preauth']) && (integer) $opt['preauth'] > 0)
+ )
+ {
+ $string_to_sign .= $header_value . "\n";
+ }
+ elseif (substr(strtolower($header_key), 0, 6) === 'x-amz-')
+ {
+ $string_to_sign .= strtolower($header_key) . ':' . $header_value . "\n";
+ }
+ }
+
+ // Add the signable resource location
+ $string_to_sign .= ($this->resource_prefix ? $this->resource_prefix : '');
+ $string_to_sign .= (($bucket === '' || $this->resource_prefix === '/' . $bucket) ? '' : ('/' . $bucket)) . $signable_resource . urldecode($signable_query_string);
+
+ // Hash the AWS secret key and generate a signature for the request.
+ $signature = base64_encode(hash_hmac('sha1', $string_to_sign, $this->secret_key, true));
+ $request->add_header('Authorization', 'AWS ' . $this->key . ':' . $signature);
+
+ // If we're generating a URL, return the URL to the calling method.
+ if (isset($opt['preauth']) && (integer) $opt['preauth'] > 0)
+ {
+ $query_params = array(
+ 'AWSAccessKeyId' => $this->key,
+ 'Expires' => $headers['Expires'],
+ 'Signature' => $signature,
+ );
+
+ // If using short-term credentials, add the token to the query string
+ if ($this->auth_token)
+ {
+ $query_params['x-amz-security-token'] = $this->auth_token;
+ }
+
+ return $this->request_url . $conjunction . http_build_query($query_params, '', '&');
+ }
+ elseif (isset($opt['preauth']))
+ {
+ return $this->request_url;
+ }
+
+ /*%******************************************************************************************%*/
+
+ // If our changes were temporary, reset them.
+ if ($this->temporary_prefix)
+ {
+ $this->temporary_prefix = false;
+ $this->resource_prefix = null;
+ }
+
+ // Manage the (newer) batch request API or the (older) returnCurlHandle setting.
+ if ($this->use_batch_flow)
+ {
+ $handle = $request->prep_request();
+ $this->batch_object->add($handle);
+ $this->use_batch_flow = false;
+
+ return $handle;
+ }
+ elseif (isset($opt['returnCurlHandle']) && $opt['returnCurlHandle'] === true)
+ {
+ return $request->prep_request();
+ }
+
+ // Send!
+ $request->send_request();
+
+ // Prepare the response
+ $headers = $request->get_response_header();
+ $headers['x-aws-request-url'] = $this->request_url;
+ $headers['x-aws-redirects'] = $this->redirects;
+ $headers['x-aws-stringtosign'] = $string_to_sign;
+ $headers['x-aws-requestheaders'] = $request->request_headers;
+
+ // Did we have a request body?
+ if (isset($opt['body']))
+ {
+ $headers['x-aws-requestbody'] = $opt['body'];
+ }
+
+ $data = new $this->response_class($headers, $this->parse_callback($request->get_response_body()), $request->get_response_code());
+
+ // Did Amazon tell us to redirect? Typically happens for multiple rapid requests EU datacenters.
+ // @see: http://docs.amazonwebservices.com/AmazonS3/latest/dev/Redirects.html
+ // @codeCoverageIgnoreStart
+ if ((integer) $request->get_response_code() === 307) // Temporary redirect to new endpoint.
+ {
+ $this->redirects++;
+ $opt['location'] = $headers['location'];
+ $data = $this->authenticate($bucket, $opt);
+ }
+
+ // Was it Amazon's fault the request failed? Retry the request until we reach $max_retries.
+ elseif ((integer) $request->get_response_code() === 500 || (integer) $request->get_response_code() === 503)
+ {
+ if ($this->redirects <= $this->max_retries)
+ {
+ // Exponential backoff
+ $delay = (integer) (pow(4, $this->redirects) * 100000);
+ usleep($delay);
+ $this->redirects++;
+ $data = $this->authenticate($bucket, $opt);
+ }
+ }
+ // @codeCoverageIgnoreEnd
+
+ // Return!
+ $this->redirects = 0;
+ return $data;
+ }
+
+ /**
+ * Validates whether or not the specified Amazon S3 bucket name is valid for DNS-style access. This
+ * method is leveraged by any method that creates buckets.
+ *
+ * @param string $bucket (Required) The name of the bucket to validate.
+ * @return boolean Whether or not the specified Amazon S3 bucket name is valid for DNS-style access. A value of <code>true</code> means that the bucket name is valid. A value of <code>false</code> means that the bucket name is invalid.
+ */
+ public function validate_bucketname_create($bucket)
+ {
+ // list_buckets() uses this. Let it pass.
+ if ($bucket === '') return true;
+
+ if (
+ ($bucket === null || $bucket === false) || // Must not be null or false
+ preg_match('/[^(a-z0-9\-\.)]/', $bucket) || // Must be in the lowercase Roman alphabet, period or hyphen
+ !preg_match('/^([a-z]|\d)/', $bucket) || // Must start with a number or letter
+ !(strlen($bucket) >= 3 && strlen($bucket) <= 63) || // Must be between 3 and 63 characters long
+ (strpos($bucket, '..') !== false) || // Bucket names cannot contain two, adjacent periods
+ (strpos($bucket, '-.') !== false) || // Bucket names cannot contain dashes next to periods
+ (strpos($bucket, '.-') !== false) || // Bucket names cannot contain dashes next to periods
+ preg_match('/(-|\.)$/', $bucket) || // Bucket names should not end with a dash or period
+ preg_match('/^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/', $bucket) // Must not be formatted as an IP address
+ ) return false;
+
+ return true;
+ }
+
+ /**
+ * Validates whether or not the specified Amazon S3 bucket name is valid for path-style access. This
+ * method is leveraged by any method that reads from buckets.
+ *
+ * @param string $bucket (Required) The name of the bucket to validate.
+ * @return boolean Whether or not the bucket name is valid. A value of <code>true</code> means that the bucket name is valid. A value of <code>false</code> means that the bucket name is invalid.
+ */
+ public function validate_bucketname_support($bucket)
+ {
+ // list_buckets() uses this. Let it pass.
+ if ($bucket === '') return true;
+
+ // Validate
+ if (
+ ($bucket === null || $bucket === false) || // Must not be null or false
+ preg_match('/[^(a-z0-9_\-\.)]/i', $bucket) || // Must be in the Roman alphabet, period, hyphen or underscore
+ !preg_match('/^([a-z]|\d)/i', $bucket) || // Must start with a number or letter
+ !(strlen($bucket) >= 3 && strlen($bucket) <= 255) || // Must be between 3 and 255 characters long
+ preg_match('/^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/', $bucket) // Must not be formatted as an IP address
+ ) return false;
+
+ return true;
+ }
+
+ /*%******************************************************************************************%*/
+ // SETTERS
+
+ /**
+ * Sets the region to use for subsequent Amazon S3 operations. This will also reset any prior use of
+ * <enable_path_style()>.
+ *
+ * @param string $region (Required) The region to use for subsequent Amazon S3 operations. For a complete list of REGION constants, see the <code>AmazonS3</code> Constants page in the API reference.
+ * @return $this A reference to the current instance.
+ */
+ public function set_region($region)
+ {
+ // @codeCoverageIgnoreStart
+ $this->set_hostname($region);
+
+ switch ($region)
+ {
+ case self::REGION_US_E1: // Northern Virginia
+ $this->enable_path_style(false);
+ break;
+
+ case self::REGION_EU_W1: // Ireland
+ $this->enable_path_style(); // Always use path-style access for EU endpoint.
+ break;
+
+ default:
+ $this->enable_path_style(false);
+ break;
+
+ }
+ // @codeCoverageIgnoreEnd
+
+ return $this;
+ }
+
+ /**
+ * Sets the virtual host to use in place of the default `bucket.s3.amazonaws.com` domain.
+ *
+ * @param string $vhost (Required) The virtual host to use in place of the default `bucket.s3.amazonaws.com` domain.
+ * @return $this A reference to the current instance.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/VirtualHosting.html Virtual Hosting of Buckets
+ */
+ public function set_vhost($vhost)
+ {
+ $this->vhost = $vhost;
+ return $this;
+ }
+
+ /**
+ * Enables the use of the older path-style URI access for all requests.
+ *
+ * @param string $style (Optional) Whether or not to enable path-style URI access for all requests. The default value is <code>true</code>.
+ * @return $this A reference to the current instance.
+ */
+ public function enable_path_style($style = true)
+ {
+ $this->path_style = $style;
+ return $this;
+ }
+
+
+ /*%******************************************************************************************%*/
+ // BUCKET METHODS
+
+ /**
+ * Creates an Amazon S3 bucket.
+ *
+ * Every object stored in Amazon S3 is contained in a bucket. Buckets partition the namespace of
+ * objects stored in Amazon S3 at the top level. in a bucket, any name can be used for objects.
+ * However, bucket names must be unique across all of Amazon S3.
+ *
+ * @param string $bucket (Required) The name of the bucket to create.
+ * @param string $region (Required) The preferred geographical location for the bucket. [Allowed values: `AmazonS3::REGION_US_E1 `, `AmazonS3::REGION_US_W1`, `AmazonS3::REGION_EU_W1`, `AmazonS3::REGION_APAC_SE1`, `AmazonS3::REGION_APAC_NE1`]
+ * @param string $acl (Optional) The ACL settings for the specified bucket. [Allowed values: <code>AmazonS3::ACL_PRIVATE</code>, <code>AmazonS3::ACL_PUBLIC</code>, <code>AmazonS3::ACL_OPEN</code>, <code>AmazonS3::ACL_AUTH_READ</code>, <code>AmazonS3::ACL_OWNER_READ</code>, <code>AmazonS3::ACL_OWNER_FULL_CONTROL</code>]. The default value is <ACL_PRIVATE>.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/UsingBucket.html Working with Amazon S3 Buckets
+ */
+ public function create_bucket($bucket, $region, $acl = self::ACL_PRIVATE, $opt = null)
+ {
+ // If the bucket contains uppercase letters...
+ if (preg_match('/[A-Z]/', $bucket))
+ {
+ // Throw a warning
+ trigger_error('Since DNS-valid bucket names cannot contain uppercase characters, "' . $bucket . '" has been automatically converted to "' . strtolower($bucket) . '"', E_USER_WARNING);
+
+ // Force the bucketname to lowercase
+ $bucket = strtolower($bucket);
+ }
+
+ // Validate the S3 bucket name for creation
+ if (!$this->validate_bucketname_create($bucket))
+ {
+ // @codeCoverageIgnoreStart
+ throw new S3_Exception('"' . $bucket . '" is not DNS-valid (i.e., <bucketname>.s3.amazonaws.com), and cannot be used as an S3 bucket name. Review "Bucket Restrictions and Limitations" in the S3 Developer Guide for more information.');
+ // @codeCoverageIgnoreEnd
+ }
+
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'PUT';
+ $opt['headers'] = array(
+ 'Content-Type' => 'application/xml',
+ 'x-amz-acl' => $acl
+ );
+
+ // Defaults
+ $this->set_region($region); // Also sets path-style
+ $xml = simplexml_load_string($this->base_location_constraint);
+
+ switch ($region)
+ {
+ case self::REGION_US_E1: // Northern Virginia
+ $opt['body'] = '';
+ break;
+
+ case self::REGION_EU_W1: // Ireland
+ $xml->LocationConstraint = 'EU';
+ $opt['body'] = $xml->asXML();
+ break;
+
+ default:
+ $xml->LocationConstraint = str_replace(array('s3-', '.amazonaws.com'), '', $region);
+ $opt['body'] = $xml->asXML();
+ break;
+ }
+
+ $response = $this->authenticate($bucket, $opt);
+
+ // Make sure we're set back to DNS-style URLs
+ $this->enable_path_style(false);
+
+ return $response;
+ }
+
+ /**
+ * Gets the region in which the specified Amazon S3 bucket is located.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>preauth</code> - <code>integer|string</code> - Optional - Specifies that a presigned URL for this request should be returned. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function get_bucket_region($bucket, $opt = null)
+ {
+ // Add this to our request
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'GET';
+ $opt['sub_resource'] = 'location';
+
+ // Authenticate to S3
+ $response = $this->authenticate($bucket, $opt);
+
+ if ($response->isOK())
+ {
+ // Handle body
+ $response->body = (string) $response->body;
+ }
+
+ return $response;
+ }
+
+ /**
+ * Gets the HTTP headers for the specified Amazon S3 bucket.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>preauth</code> - <code>integer|string</code> - Optional - Specifies that a presigned URL for this request should be returned. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function get_bucket_headers($bucket, $opt = null)
+ {
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'HEAD';
+
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Deletes a bucket from an Amazon S3 account. A bucket must be empty before the bucket itself can be deleted.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param boolean $force (Optional) Whether to force-delete the bucket and all of its contents. The default value is <code>false</code>.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return mixed A <CFResponse> object if the bucket was deleted successfully. Returns boolean <code>false</code> if otherwise.
+ */
+ public function delete_bucket($bucket, $force = false, $opt = null)
+ {
+ // Set default value
+ $success = true;
+
+ if ($force)
+ {
+ // Delete all of the items from the bucket.
+ $success = $this->delete_all_object_versions($bucket);
+ }
+
+ // As long as we were successful...
+ if ($success)
+ {
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'DELETE';
+
+ return $this->authenticate($bucket, $opt);
+ }
+
+ // @codeCoverageIgnoreStart
+ return false;
+ // @codeCoverageIgnoreEnd
+ }
+
+ /**
+ * Gets a list of all buckets contained in the caller's Amazon S3 account.
+ *
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>preauth</code> - <code>integer|string</code> - Optional - Specifies that a presigned URL for this request should be returned. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function list_buckets($opt = null)
+ {
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'GET';
+
+ return $this->authenticate('', $opt);
+ }
+
+ /**
+ * Gets the access control list (ACL) settings for the specified Amazon S3 bucket.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>preauth</code> - <code>integer|string</code> - Optional - Specifies that a presigned URL for this request should be returned. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/RESTAccessPolicy.html REST Access Control Policy
+ */
+ public function get_bucket_acl($bucket, $opt = null)
+ {
+ // Add this to our request
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'GET';
+ $opt['sub_resource'] = 'acl';
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Sets the access control list (ACL) settings for the specified Amazon S3 bucket.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $acl (Optional) The ACL settings for the specified bucket. [Allowed values: <code>AmazonS3::ACL_PRIVATE</code>, <code>AmazonS3::ACL_PUBLIC</code>, <code>AmazonS3::ACL_OPEN</code>, <code>AmazonS3::ACL_AUTH_READ</code>, <code>AmazonS3::ACL_OWNER_READ</code>, <code>AmazonS3::ACL_OWNER_FULL_CONTROL</code>]. Alternatively, an array of associative arrays. Each associative array contains an `id` and a `permission` key. The default value is <ACL_PRIVATE>.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/RESTAccessPolicy.html REST Access Control Policy
+ */
+ public function set_bucket_acl($bucket, $acl = self::ACL_PRIVATE, $opt = null)
+ {
+ // Add this to our request
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'PUT';
+ $opt['sub_resource'] = 'acl';
+ $opt['headers'] = array(
+ 'Content-Type' => 'application/xml'
+ );
+
+ // Make sure these are defined.
+ // @codeCoverageIgnoreStart
+ if (!$this->credentials->canonical_id || !$this->credentials->canonical_name)
+ {
+ // Fetch the data live.
+ $canonical = $this->get_canonical_user_id();
+ $this->credentials->canonical_id = $canonical['id'];
+ $this->credentials->canonical_name = $canonical['display_name'];
+ }
+ // @codeCoverageIgnoreEnd
+
+ if (is_array($acl))
+ {
+ $opt['body'] = $this->generate_access_policy($this->credentials->canonical_id, $this->credentials->canonical_name, $acl);
+ }
+ else
+ {
+ $opt['body'] = '';
+ $opt['headers']['x-amz-acl'] = $acl;
+ }
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+
+ /*%******************************************************************************************%*/
+ // OBJECT METHODS
+
+ /**
+ * Creates an Amazon S3 object. After an Amazon S3 bucket is created, objects can be stored in it.
+ *
+ * Each standard object can hold up to 5 GB of data. When an object is stored in Amazon S3, the data is streamed
+ * to multiple storage servers in multiple data centers. This ensures the data remains available in the
+ * event of internal network or hardware failure.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $filename (Required) The file name for the object.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>body</code> - <code>string</code> - Required; Conditional - The data to be stored in the object. Either this parameter or <code>fileUpload</code> must be specified.</li>
+ * <li><code>fileUpload</code> - <code>string|resource</code> - Required; Conditional - The URL/path for the file to upload, or an open resource. Either this parameter or <code>body</code> is required.</li>
+ * <li><code>acl</code> - <code>string</code> - Optional - The ACL settings for the specified object. [Allowed values: <code>AmazonS3::ACL_PRIVATE</code>, <code>AmazonS3::ACL_PUBLIC</code>, <code>AmazonS3::ACL_OPEN</code>, <code>AmazonS3::ACL_AUTH_READ</code>, <code>AmazonS3::ACL_OWNER_READ</code>, <code>AmazonS3::ACL_OWNER_FULL_CONTROL</code>]. The default value is <code>ACL_PRIVATE</code>.</li>
+ * <li><code>contentType</code> - <code>string</code> - Optional - The type of content that is being sent in the body. If a file is being uploaded via <code>fileUpload</code> as a file system path, it will attempt to determine the correct mime-type based on the file extension. The default value is <code>application/octet-stream</code>.</li>
+ * <li><code>encryption</code> - <code>string</code> - Optional - The algorithm to use for encrypting the object. [Allowed values: <code>AES256</code>]</li>
+ * <li><code>headers</code> - <code>array</code> - Optional - Standard HTTP headers to send along in the request. Accepts an associative array of key-value pairs.</li>
+ * <li><code>length</code> - <code>integer</code> - Optional - The size of the object in bytes. For more information, see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13">RFC 2616, section 14.13</a>. The value can also be passed to the <code>header</code> option as <code>Content-Length</code>.</li>
+ * <li><code>meta</code> - <code>array</code> - Optional - An associative array of key-value pairs. Represented by <code>x-amz-meta-:</code>. Any header starting with this prefix is considered user metadata. It will be stored with the object and returned when you retrieve the object. The total size of the HTTP request, not including the body, must be less than 4 KB.</li>
+ * <li><code>seekTo</code> - <code>integer</code> - Optional - The starting position in bytes within the file/stream to upload from.</li>
+ * <li><code>storage</code> - <code>string</code> - Optional - Whether to use Standard or Reduced Redundancy storage. [Allowed values: <code>AmazonS3::STORAGE_STANDARD</code>, <code>AmazonS3::STORAGE_REDUCED</code>]. The default value is <code>STORAGE_STANDARD</code>.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/RESTAccessPolicy.html REST Access Control Policy
+ */
+ public function create_object($bucket, $filename, $opt = null)
+ {
+ if (!$opt) $opt = array();
+
+ // Add this to our request
+ $opt['verb'] = 'PUT';
+ $opt['resource'] = $filename;
+
+ // Handle content length. Can also be passed as an HTTP header.
+ if (isset($opt['length']))
+ {
+ $opt['headers']['Content-Length'] = $opt['length'];
+ unset($opt['length']);
+ }
+
+ // Handle content type. Can also be passed as an HTTP header.
+ if (isset($opt['contentType']))
+ {
+ $opt['headers']['Content-Type'] = $opt['contentType'];
+ unset($opt['contentType']);
+ }
+
+ // Handle Access Control Lists. Can also be passed as an HTTP header.
+ if (isset($opt['acl']))
+ {
+ $opt['headers']['x-amz-acl'] = $opt['acl'];
+ unset($opt['acl']);
+ }
+
+ // Handle storage settings. Can also be passed as an HTTP header.
+ if (isset($opt['storage']))
+ {
+ $opt['headers']['x-amz-storage-class'] = $opt['storage'];
+ unset($opt['storage']);
+ }
+
+ // Handle encryption settings. Can also be passed as an HTTP header.
+ if (isset($opt['encryption']))
+ {
+ $opt['headers']['x-amz-server-side-encryption'] = $opt['encryption'];
+ unset($opt['encryption']);
+ }
+
+ // Handle meta tags. Can also be passed as an HTTP header.
+ if (isset($opt['meta']))
+ {
+ foreach ($opt['meta'] as $meta_key => $meta_value)
+ {
+ // e.g., `My Meta Header` is converted to `x-amz-meta-my-meta-header`.
+ $opt['headers']['x-amz-meta-' . strtolower(str_replace(' ', '-', $meta_key))] = $meta_value;
+ }
+ unset($opt['meta']);
+ }
+
+ $opt['headers']['Expect'] = '100-continue';
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Gets the contents of an Amazon S3 object in the specified bucket.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $filename (Required) The file name for the object.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>etag</code> - <code>string</code> - Optional - The <code>ETag</code> header passed in from a previous request. If specified, request <code>LastModified</code> option must be specified as well. Will trigger a <code>304 Not Modified</code> status code if the file hasn't changed.</li>
+ * <li><code>fileDownload</code> - <code>string|resource</code> - Optional - The file system location to download the file to, or an open file resource. Must be a server-writable location.</li>
+ * <li><code>headers</code> - <code>array</code> - Optional - Standard HTTP headers to send along in the request. Accepts an associative array of key-value pairs.</li>
+ * <li><code>lastmodified</code> - <code>string</code> - Optional - The <code>LastModified</code> header passed in from a previous request. If specified, request <code>ETag</code> option must be specified as well. Will trigger a <code>304 Not Modified</code> status code if the file hasn't changed.</li>
+ * <li><code>preauth</code> - <code>integer|string</code> - Optional - Specifies that a presigned URL for this request should be returned. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
+ * <li><code>range</code> - <code>string</code> - Optional - The range of bytes to fetch from the object. Specify this parameter when downloading partial bits or completing incomplete object downloads. The specified range must be notated with a hyphen (e.g., 0-10485759). Defaults to the byte range of the complete Amazon S3 object.</li>
+ * <li><code>response</code> - <code>array</code> - Optional - Allows adjustments to specific response headers. Pass an associative array where each key is one of the following: <code>cache-control</code>, <code>content-disposition</code>, <code>content-encoding</code>, <code>content-language</code>, <code>content-type</code>, <code>expires</code>. The <code>expires</code> value should use <php:gmdate()> and be formatted with the <code>DATE_RFC2822</code> constant.</li>
+ * <li><code>versionId</code> - <code>string</code> - Optional - The version of the object to retrieve. Version IDs are returned in the <code>x-amz-version-id</code> header of any previous object-related request.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function get_object($bucket, $filename, $opt = null)
+ {
+ if (!$opt) $opt = array();
+
+ // Add this to our request
+ $opt['verb'] = 'GET';
+ $opt['resource'] = $filename;
+
+ if (!isset($opt['headers']) || !is_array($opt['headers']))
+ {
+ $opt['headers'] = array();
+ }
+
+ if (isset($opt['lastmodified']))
+ {
+ $opt['headers']['If-Modified-Since'] = $opt['lastmodified'];
+ }
+
+ if (isset($opt['etag']))
+ {
+ $opt['headers']['If-None-Match'] = $opt['etag'];
+ }
+
+ // Partial content range
+ if (isset($opt['range']))
+ {
+ $opt['headers']['Range'] = 'bytes=' . $opt['range'];
+ }
+
+ // GET responses
+ if (isset($opt['response']))
+ {
+ foreach ($opt['response'] as $key => $value)
+ {
+ $opt['response-' . $key] = $value;
+ unset($opt['response'][$key]);
+ }
+ }
+
+ // Authenticate to S3
+ $this->parse_the_response = false;
+ $response = $this->authenticate($bucket, $opt);
+ $this->parse_the_response = true;
+
+ return $response;
+ }
+
+ /**
+ * Gets the HTTP headers for the specified Amazon S3 object.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $filename (Required) The file name for the object.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>versionId</code> - <code>string</code> - Optional - The version of the object to retrieve. Version IDs are returned in the <code>x-amz-version-id</code> header of any previous object-related request.</li>
+ * <li><code>preauth</code> - <code>integer|string</code> - Optional - Specifies that a presigned URL for this request should be returned. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function get_object_headers($bucket, $filename, $opt = null)
+ {
+ // Add this to our request
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'HEAD';
+ $opt['resource'] = $filename;
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Deletes an Amazon S3 object from the specified bucket.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $filename (Required) The file name for the object.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>versionId</code> - <code>string</code> - Optional - The version of the object to delete. Version IDs are returned in the <code>x-amz-version-id</code> header of any previous object-related request.</li>
+ * <li><code>MFASerial</code> - <code>string</code> - Optional - The serial number on the back of the Gemalto device. <code>MFASerial</code> and <code>MFAToken</code> must both be set for MFA to work.</li>
+ * <li><code>MFAToken</code> - <code>string</code> - Optional - The current token displayed on the Gemalto device. <code>MFASerial</code> and <code>MFAToken</code> must both be set for MFA to work.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://aws.amazon.com/mfa/ Multi-Factor Authentication
+ */
+ public function delete_object($bucket, $filename, $opt = null)
+ {
+ // Add this to our request
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'DELETE';
+ $opt['resource'] = $filename;
+
+ // Enable MFA delete?
+ // @codeCoverageIgnoreStart
+ if (isset($opt['MFASerial']) && isset($opt['MFAToken']))
+ {
+ $opt['headers'] = array(
+ 'x-amz-mfa' => ($opt['MFASerial'] . ' ' . $opt['MFAToken'])
+ );
+ }
+ // @codeCoverageIgnoreEnd
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Deletes two or more specified Amazon S3 objects from the specified bucket.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>objects</code> - <code>array</code> - Required - The object references to delete from the bucket. <ul>
+ * <li><code>key</code> - <code>string</code> - Required - The name of the object (e.g., the "key") to delete. This should include the entire file path including all "subdirectories".</li>
+ * <li><code>version_id</code> - <code>string</code> - Optional - If the object is versioned, include the version ID to delete.</li>
+ * </ul></li>
+ * <li><code>quiet</code> - <code>boolean</code> - Optional - Whether or not Amazon S3 should use "Quiet" mode for this operation. A value of <code>true</code> will enable Quiet mode. A value of <code>false</code> will use Verbose mode. The default value is <code>false</code>.</li>
+ * <li><code>MFASerial</code> - <code>string</code> - Optional - The serial number on the back of the Gemalto device. <code>MFASerial</code> and <code>MFAToken</code> must both be set for MFA to work.</li>
+ * <li><code>MFAToken</code> - <code>string</code> - Optional - The current token displayed on the Gemalto device. <code>MFASerial</code> and <code>MFAToken</code> must both be set for MFA to work.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://aws.amazon.com/mfa/ Multi-Factor Authentication
+ */
+ public function delete_objects($bucket, $opt = null)
+ {
+ // Add this to our request
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'POST';
+ $opt['sub_resource'] = 'delete';
+ $opt['body'] = '';
+
+ // Bail out
+ if (!isset($opt['objects']) || !is_array($opt['objects']))
+ {
+ throw new S3_Exception('The ' . __FUNCTION__ . ' method requires the "objects" option to be set as an array.');
+ }
+
+ $xml = new SimpleXMLElement($this->multi_object_delete_xml);
+
+ // Add the objects
+ foreach ($opt['objects'] as $object)
+ {
+ $xobject = $xml->addChild('Object');
+ $xobject->addChild('Key', $object['key']);
+
+ if (isset($object['version_id']))
+ {
+ $xobject->addChild('VersionId', $object['version_id']);
+ }
+ }
+
+ // Quiet mode?
+ if (isset($opt['quiet']))
+ {
+ $quiet = 'false';
+ if (is_bool($opt['quiet'])) // Boolean
+ {
+ $quiet = $opt['quiet'] ? 'true' : 'false';
+ }
+ elseif (is_string($opt['quiet'])) // String
+ {
+ $quiet = ($opt['quiet'] === 'true') ? 'true' : 'false';
+ }
+
+ $xml->addChild('Quiet', $quiet);
+ }
+
+ // Enable MFA delete?
+ // @codeCoverageIgnoreStart
+ if (isset($opt['MFASerial']) && isset($opt['MFAToken']))
+ {
+ $opt['headers'] = array(
+ 'x-amz-mfa' => ($opt['MFASerial'] . ' ' . $opt['MFAToken'])
+ );
+ }
+ // @codeCoverageIgnoreEnd
+
+ $opt['body'] = $xml->asXML();
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Gets a list of all Amazon S3 objects in the specified bucket.
+ *
+ * NOTE: <strong>This method is paginated</strong>, and will not return more than <code>max-keys</code> keys. If you want to retrieve a list of all keys, you will need to make multiple calls to this function using the <code>marker</code> option to specify the pagination offset (the key of the last processed key--lexically ordered) and the <code>IsTruncated</code> response key to detect when all results have been processed. See: <a href="http://docs.amazonwebservices.com/AmazonS3/latest/API/index.html?RESTBucketGET.html">the S3 REST documentation for get_bucket</a> for more information.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>delimiter</code> - <code>string</code> - Optional - Keys that contain the same string between the prefix and the first occurrence of the delimiter will be rolled up into a single result element in the CommonPrefixes collection.</li>
+ * <li><code>marker</code> - <code>string</code> - Optional - Restricts the response to contain results that only occur alphabetically after the value of the marker.</li>
+ * <li><code>max-keys</code> - <code>string</code> - Optional - The maximum number of results returned by the method call. The returned list will contain no more results than the specified value, but may return fewer. The default value is 1000.</li>
+ * <li><code>preauth</code> - <code>integer|string</code> - Optional - Specifies that a presigned URL for this request should be returned. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
+ * <li><code>prefix</code> - <code>string</code> - Optional - Restricts the response to contain results that begin only with the specified prefix.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function list_objects($bucket, $opt = null)
+ {
+ if (!$opt) $opt = array();
+
+ // Add this to our request
+ $opt['verb'] = 'GET';
+
+ foreach (array('delimiter', 'marker', 'max-keys', 'prefix') as $param)
+ {
+ if (isset($opt[$param]))
+ {
+ $opt['query_string'][$param] = $opt[$param];
+ unset($opt[$param]);
+ }
+ }
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Copies an Amazon S3 object to a new location, whether in the same Amazon S3 region, bucket, or otherwise.
+ *
+ * @param array $source (Required) The bucket and file name to copy from. The following keys must be set: <ul>
+ * <li><code>bucket</code> - <code>string</code> - Required - Specifies the name of the bucket containing the source object.</li>
+ * <li><code>filename</code> - <code>string</code> - Required - Specifies the file name of the source object to copy.</li></ul>
+ * @param array $dest (Required) The bucket and file name to copy to. The following keys must be set: <ul>
+ * <li><code>bucket</code> - <code>string</code> - Required - Specifies the name of the bucket to copy the object to.</li>
+ * <li><code>filename</code> - <code>string</code> - Required - Specifies the file name to copy the object to.</li></ul>
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>acl</code> - <code>string</code> - Optional - The ACL settings for the specified object. [Allowed values: <code>AmazonS3::ACL_PRIVATE</code>, <code>AmazonS3::ACL_PUBLIC</code>, <code>AmazonS3::ACL_OPEN</code>, <code>AmazonS3::ACL_AUTH_READ</code>, <code>AmazonS3::ACL_OWNER_READ</code>, <code>AmazonS3::ACL_OWNER_FULL_CONTROL</code>]. Alternatively, an array of associative arrays. Each associative array contains an <code>id</code> and a <code>permission</code> key. The default value is <code>ACL_PRIVATE</code>.</li>
+ * <li><code>encryption</code> - <code>string</code> - Optional - The algorithm to use for encrypting the object. [Allowed values: <code>AES256</code>]</li>
+ * <li><code>storage</code> - <code>string</code> - Optional - Whether to use Standard or Reduced Redundancy storage. [Allowed values: <code>AmazonS3::STORAGE_STANDARD</code>, <code>AmazonS3::STORAGE_REDUCED</code>]. The default value is <code>STORAGE_STANDARD</code>.</li>
+ * <li><code>versionId</code> - <code>string</code> - Optional - The version of the object to copy. Version IDs are returned in the <code>x-amz-version-id</code> header of any previous object-related request.</li>
+ * <li><code>ifMatch</code> - <code>string</code> - Optional - The ETag header from a previous request. Copies the object if its entity tag (ETag) matches the specified tag; otherwise, the request returns a <code>412</code> HTTP status code error (precondition failed). Used in conjunction with <code>ifUnmodifiedSince</code>.</li>
+ * <li><code>ifUnmodifiedSince</code> - <code>string</code> - Optional - The LastModified header from a previous request. Copies the object if it hasn't been modified since the specified time; otherwise, the request returns a <code>412</code> HTTP status code error (precondition failed). Used in conjunction with <code>ifMatch</code>.</li>
+ * <li><code>ifNoneMatch</code> - <code>string</code> - Optional - The ETag header from a previous request. Copies the object if its entity tag (ETag) is different than the specified ETag; otherwise, the request returns a <code>412</code> HTTP status code error (failed condition). Used in conjunction with <code>ifModifiedSince</code>.</li>
+ * <li><code>ifModifiedSince</code> - <code>string</code> - Optional - The LastModified header from a previous request. Copies the object if it has been modified since the specified time; otherwise, the request returns a <code>412</code> HTTP status code error (failed condition). Used in conjunction with <code>ifNoneMatch</code>.</li>
+ * <li><code>headers</code> - <code>array</code> - Optional - Standard HTTP headers to send along in the request. Accepts an associative array of key-value pairs.</li>
+ * <li><code>meta</code> - <code>array</code> - Optional - Associative array of key-value pairs. Represented by <code>x-amz-meta-:</code> Any header starting with this prefix is considered user metadata. It will be stored with the object and returned when you retrieve the object. The total size of the HTTP request, not including the body, must be less than 4 KB.</li>
+ * <li><code>metadataDirective</code> - <code>string</code> - Optional - Accepts either COPY or REPLACE. You will likely never need to use this, as it manages itself with no issues.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/API/RESTObjectCOPY.html Copying Amazon S3 Objects
+ */
+ public function copy_object($source, $dest, $opt = null)
+ {
+ if (!$opt) $opt = array();
+ $batch = array();
+
+ // Add this to our request
+ $opt['verb'] = 'PUT';
+ $opt['resource'] = $dest['filename'];
+ $opt['body'] = '';
+
+ // Handle copy source
+ if (isset($source['bucket']) && isset($source['filename']))
+ {
+ $opt['headers']['x-amz-copy-source'] = '/' . $source['bucket'] . '/' . rawurlencode($source['filename'])
+ . (isset($opt['versionId']) ? ('?' . 'versionId=' . rawurlencode($opt['versionId'])) : ''); // Append the versionId to copy, if available
+ unset($opt['versionId']);
+
+ // Determine if we need to lookup the pre-existing content-type.
+ if (
+ (!$this->use_batch_flow && !isset($opt['returnCurlHandle'])) &&
+ !in_array(strtolower('content-type'), array_map('strtolower', array_keys($opt['headers'])))
+ )
+ {
+ $response = $this->get_object_headers($source['bucket'], $source['filename']);
+ if ($response->isOK())
+ {
+ $opt['headers']['Content-Type'] = $response->header['content-type'];
+ }
+ }
+ }
+
+ // Handle metadata directive
+ $opt['headers']['x-amz-metadata-directive'] = 'COPY';
+ if ($source['bucket'] === $dest['bucket'] && $source['filename'] === $dest['filename'])
+ {
+ $opt['headers']['x-amz-metadata-directive'] = 'REPLACE';
+ }
+ if (isset($opt['metadataDirective']))
+ {
+ $opt['headers']['x-amz-metadata-directive'] = $opt['metadataDirective'];
+ unset($opt['metadataDirective']);
+ }
+
+ // Handle Access Control Lists. Can also pass canned ACLs as an HTTP header.
+ if (isset($opt['acl']) && is_array($opt['acl']))
+ {
+ $batch[] = $this->set_object_acl($dest['bucket'], $dest['filename'], $opt['acl'], array(
+ 'returnCurlHandle' => true
+ ));
+ unset($opt['acl']);
+ }
+ elseif (isset($opt['acl']))
+ {
+ $opt['headers']['x-amz-acl'] = $opt['acl'];
+ unset($opt['acl']);
+ }
+
+ // Handle storage settings. Can also be passed as an HTTP header.
+ if (isset($opt['storage']))
+ {
+ $opt['headers']['x-amz-storage-class'] = $opt['storage'];
+ unset($opt['storage']);
+ }
+
+ // Handle encryption settings. Can also be passed as an HTTP header.
+ if (isset($opt['encryption']))
+ {
+ $opt['headers']['x-amz-server-side-encryption'] = $opt['encryption'];
+ unset($opt['encryption']);
+ }
+
+ // Handle conditional-copy parameters
+ if (isset($opt['ifMatch']))
+ {
+ $opt['headers']['x-amz-copy-source-if-match'] = $opt['ifMatch'];
+ unset($opt['ifMatch']);
+ }
+ if (isset($opt['ifNoneMatch']))
+ {
+ $opt['headers']['x-amz-copy-source-if-none-match'] = $opt['ifNoneMatch'];
+ unset($opt['ifNoneMatch']);
+ }
+ if (isset($opt['ifUnmodifiedSince']))
+ {
+ $opt['headers']['x-amz-copy-source-if-unmodified-since'] = $opt['ifUnmodifiedSince'];
+ unset($opt['ifUnmodifiedSince']);
+ }
+ if (isset($opt['ifModifiedSince']))
+ {
+ $opt['headers']['x-amz-copy-source-if-modified-since'] = $opt['ifModifiedSince'];
+ unset($opt['ifModifiedSince']);
+ }
+
+ // Handle meta tags. Can also be passed as an HTTP header.
+ if (isset($opt['meta']))
+ {
+ foreach ($opt['meta'] as $meta_key => $meta_value)
+ {
+ // e.g., `My Meta Header` is converted to `x-amz-meta-my-meta-header`.
+ $opt['headers']['x-amz-meta-' . strtolower(str_replace(' ', '-', $meta_key))] = $meta_value;
+ }
+ unset($opt['meta']);
+ }
+
+ // Authenticate to S3
+ $response = $this->authenticate($dest['bucket'], $opt);
+
+ // Attempt to reset ACLs
+ $http = new RequestCore();
+ $http->send_multi_request($batch);
+
+ return $response;
+ }
+
+ /**
+ * Updates an Amazon S3 object with new headers or other metadata. To replace the content of the
+ * specified Amazon S3 object, call <create_object()> with the same bucket and file name parameters.
+ *
+ * @param string $bucket (Required) The name of the bucket that contains the source file.
+ * @param string $filename (Required) The source file name that you want to update.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>acl</code> - <code>string</code> - Optional - The ACL settings for the specified object. [Allowed values: <code>AmazonS3::ACL_PRIVATE</code>, <code>AmazonS3::ACL_PUBLIC</code>, <code>AmazonS3::ACL_OPEN</code>, <code>AmazonS3::ACL_AUTH_READ</code>, <code>AmazonS3::ACL_OWNER_READ</code>, <code>AmazonS3::ACL_OWNER_FULL_CONTROL</code>]. The default value is <ACL_PRIVATE>.</li>
+ * <li><code>headers</code> - <code>array</code> - Optional - Standard HTTP headers to send along in the request. Accepts an associative array of key-value pairs.</li>
+ * <li><code>meta</code> - <code>array</code> - Optional - An associative array of key-value pairs. Any header with the <code>x-amz-meta-</code> prefix is considered user metadata and is stored with the Amazon S3 object. It will be stored with the object and returned when you retrieve the object. The total size of the HTTP request, not including the body, must be less than 4 KB.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/API/RESTObjectCOPY.html Copying Amazon S3 Objects
+ */
+ public function update_object($bucket, $filename, $opt = null)
+ {
+ if (!$opt) $opt = array();
+ $opt['metadataDirective'] = 'REPLACE';
+
+ // Authenticate to S3
+ return $this->copy_object(
+ array('bucket' => $bucket, 'filename' => $filename),
+ array('bucket' => $bucket, 'filename' => $filename),
+ $opt
+ );
+ }
+
+
+ /*%******************************************************************************************%*/
+ // ACCESS CONTROL LISTS
+
+ /**
+ * Gets the access control list (ACL) settings for the specified Amazon S3 object.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $filename (Required) The file name for the object.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>versionId</code> - <code>string</code> - Optional - The version of the object to retrieve. Version IDs are returned in the <code>x-amz-version-id</code> header of any previous object-related request.</li>
+ * <li><code>preauth</code> - <code>integer|string</code> - Optional - Specifies that a presigned URL for this request should be returned. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/RESTAccessPolicy.html REST Access Control Policy
+ */
+ public function get_object_acl($bucket, $filename, $opt = null)
+ {
+ // Add this to our request
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'GET';
+ $opt['resource'] = $filename;
+ $opt['sub_resource'] = 'acl';
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Sets the access control list (ACL) settings for the specified Amazon S3 object.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $filename (Required) The file name for the object.
+ * @param string $acl (Optional) The ACL settings for the specified object. Accepts any of the following constants: [Allowed values: <code>AmazonS3::ACL_PRIVATE</code>, <code>AmazonS3::ACL_PUBLIC</code>, <code>AmazonS3::ACL_OPEN</code>, <code>AmazonS3::ACL_AUTH_READ</code>, <code>AmazonS3::ACL_OWNER_READ</code>, <code>AmazonS3::ACL_OWNER_FULL_CONTROL</code>]. Alternatively, an array of associative arrays. Each associative array contains an <code>id</code> and a <code>permission</code> key. The default value is <code>ACL_PRIVATE</code>.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/RESTAccessPolicy.html REST Access Control Policy
+ */
+ public function set_object_acl($bucket, $filename, $acl = self::ACL_PRIVATE, $opt = null)
+ {
+ // Add this to our request
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'PUT';
+ $opt['resource'] = $filename;
+ $opt['sub_resource'] = 'acl';
+
+ // Retrieve the original metadata
+ $metadata = $this->get_object_metadata($bucket, $filename);
+ if ($metadata && $metadata['ContentType'])
+ {
+ $opt['headers']['Content-Type'] = $metadata['ContentType'];
+ }
+ if ($metadata && $metadata['StorageClass'])
+ {
+ $opt['headers']['x-amz-storage-class'] = $metadata['StorageClass'];
+ }
+
+ // Make sure these are defined.
+ // @codeCoverageIgnoreStart
+ if (!$this->credentials->canonical_id || !$this->credentials->canonical_name)
+ {
+ // Fetch the data live.
+ $canonical = $this->get_canonical_user_id();
+ $this->credentials->canonical_id = $canonical['id'];
+ $this->credentials->canonical_name = $canonical['display_name'];
+ }
+ // @codeCoverageIgnoreEnd
+
+ if (is_array($acl))
+ {
+ $opt['body'] = $this->generate_access_policy($this->credentials->canonical_id, $this->credentials->canonical_name, $acl);
+ }
+ else
+ {
+ $opt['body'] = '';
+ $opt['headers']['x-amz-acl'] = $acl;
+ }
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Generates the XML to be used for the Access Control Policy.
+ *
+ * @param string $canonical_id (Required) The canonical ID for the bucket owner. This is provided as the `id` return value from <get_canonical_user_id()>.
+ * @param string $canonical_name (Required) The canonical display name for the bucket owner. This is provided as the `display_name` value from <get_canonical_user_id()>.
+ * @param array $users (Optional) An array of associative arrays. Each associative array contains an `id` value and a `permission` value.
+ * @return string Access Control Policy XML.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/S3_ACLs.html Access Control Lists
+ */
+ public function generate_access_policy($canonical_id, $canonical_name, $users)
+ {
+ $xml = simplexml_load_string($this->base_acp_xml);
+ $owner = $xml->addChild('Owner');
+ $owner->addChild('ID', $canonical_id);
+ $owner->addChild('DisplayName', $canonical_name);
+ $acl = $xml->addChild('AccessControlList');
+
+ foreach ($users as $user)
+ {
+ $grant = $acl->addChild('Grant');
+ $grantee = $grant->addChild('Grantee');
+
+ switch ($user['id'])
+ {
+ // Authorized Users
+ case self::USERS_AUTH:
+ $grantee->addAttribute('xsi:type', 'Group', 'http://www.w3.org/2001/XMLSchema-instance');
+ $grantee->addChild('URI', self::USERS_AUTH);
+ break;
+
+ // All Users
+ case self::USERS_ALL:
+ $grantee->addAttribute('xsi:type', 'Group', 'http://www.w3.org/2001/XMLSchema-instance');
+ $grantee->addChild('URI', self::USERS_ALL);
+ break;
+
+ // The Logging User
+ case self::USERS_LOGGING:
+ $grantee->addAttribute('xsi:type', 'Group', 'http://www.w3.org/2001/XMLSchema-instance');
+ $grantee->addChild('URI', self::USERS_LOGGING);
+ break;
+
+ // Email Address or Canonical Id
+ default:
+ if (strpos($user['id'], '@'))
+ {
+ $grantee->addAttribute('xsi:type', 'AmazonCustomerByEmail', 'http://www.w3.org/2001/XMLSchema-instance');
+ $grantee->addChild('EmailAddress', $user['id']);
+ }
+ else
+ {
+ // Assume Canonical Id
+ $grantee->addAttribute('xsi:type', 'CanonicalUser', 'http://www.w3.org/2001/XMLSchema-instance');
+ $grantee->addChild('ID', $user['id']);
+ }
+ break;
+ }
+
+ $grant->addChild('Permission', $user['permission']);
+ }
+
+ return $xml->asXML();
+ }
+
+
+ /*%******************************************************************************************%*/
+ // LOGGING METHODS
+
+ /**
+ * Gets the access logs associated with the specified Amazon S3 bucket.
+ *
+ * @param string $bucket (Required) The name of the bucket to use. Pass a `null` value when using the <set_vhost()> method.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>preauth</code> - <code>integer|string</code> - Optional - Specifies that a presigned URL for this request should be returned. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/ServerLogs.html Server Access Logging
+ */
+ public function get_logs($bucket, $opt = null)
+ {
+ // Add this to our request
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'GET';
+ $opt['sub_resource'] = 'logging';
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Enables access logging for the specified Amazon S3 bucket.
+ *
+ * @param string $bucket (Required) The name of the bucket to enable logging for. Pass a `null` value when using the <set_vhost()> method.
+ * @param string $target_bucket (Required) The name of the bucket to store the logs in.
+ * @param string $target_prefix (Required) The prefix to give to the log file names.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>users</code> - <code>array</code> - Optional - An array of associative arrays specifying any user to give access to. Each associative array contains an <code>id</code> and <code>permission</code> value.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/LoggingAPI.html Server Access Logging Configuration API
+ */
+ public function enable_logging($bucket, $target_bucket, $target_prefix, $opt = null)
+ {
+ // Add this to our request
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'PUT';
+ $opt['sub_resource'] = 'logging';
+ $opt['headers'] = array(
+ 'Content-Type' => 'application/xml'
+ );
+
+ $xml = simplexml_load_string($this->base_logging_xml);
+ $LoggingEnabled = $xml->addChild('LoggingEnabled');
+ $LoggingEnabled->addChild('TargetBucket', $target_bucket);
+ $LoggingEnabled->addChild('TargetPrefix', $target_prefix);
+ $TargetGrants = $LoggingEnabled->addChild('TargetGrants');
+
+ if (isset($opt['users']) && is_array($opt['users']))
+ {
+ foreach ($opt['users'] as $user)
+ {
+ $grant = $TargetGrants->addChild('Grant');
+ $grantee = $grant->addChild('Grantee');
+
+ switch ($user['id'])
+ {
+ // Authorized Users
+ case self::USERS_AUTH:
+ $grantee->addAttribute('xsi:type', 'Group', 'http://www.w3.org/2001/XMLSchema-instance');
+ $grantee->addChild('URI', self::USERS_AUTH);
+ break;
+
+ // All Users
+ case self::USERS_ALL:
+ $grantee->addAttribute('xsi:type', 'Group', 'http://www.w3.org/2001/XMLSchema-instance');
+ $grantee->addChild('URI', self::USERS_ALL);
+ break;
+
+ // The Logging User
+ case self::USERS_LOGGING:
+ $grantee->addAttribute('xsi:type', 'Group', 'http://www.w3.org/2001/XMLSchema-instance');
+ $grantee->addChild('URI', self::USERS_LOGGING);
+ break;
+
+ // Email Address or Canonical Id
+ default:
+ if (strpos($user['id'], '@'))
+ {
+ $grantee->addAttribute('xsi:type', 'AmazonCustomerByEmail', 'http://www.w3.org/2001/XMLSchema-instance');
+ $grantee->addChild('EmailAddress', $user['id']);
+ }
+ else
+ {
+ // Assume Canonical Id
+ $grantee->addAttribute('xsi:type', 'CanonicalUser', 'http://www.w3.org/2001/XMLSchema-instance');
+ $grantee->addChild('ID', $user['id']);
+ }
+ break;
+ }
+
+ $grant->addChild('Permission', $user['permission']);
+ }
+ }
+
+ $opt['body'] = $xml->asXML();
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Disables access logging for the specified Amazon S3 bucket.
+ *
+ * @param string $bucket (Required) The name of the bucket to use. Pass `null` if using <set_vhost()>.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/LoggingAPI.html Server Access Logging Configuration API
+ */
+ public function disable_logging($bucket, $opt = null)
+ {
+ // Add this to our request
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'PUT';
+ $opt['sub_resource'] = 'logging';
+ $opt['headers'] = array(
+ 'Content-Type' => 'application/xml'
+ );
+ $opt['body'] = $this->base_logging_xml;
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+
+ /*%******************************************************************************************%*/
+ // CONVENIENCE METHODS
+
+ /**
+ * Gets whether or not the specified Amazon S3 bucket exists in Amazon S3. This includes buckets
+ * that do not belong to the caller.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @return boolean A value of <code>true</code> if the bucket exists, or a value of <code>false</code> if it does not.
+ */
+ public function if_bucket_exists($bucket)
+ {
+ if ($this->use_batch_flow)
+ {
+ throw new S3_Exception(__FUNCTION__ . '() cannot be batch requested');
+ }
+
+ $header = $this->get_bucket_headers($bucket);
+ return (bool) $header->isOK();
+ }
+
+ /**
+ * Gets whether or not the specified Amazon S3 object exists in the specified bucket.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $filename (Required) The file name for the object.
+ * @return boolean A value of <code>true</code> if the object exists, or a value of <code>false</code> if it does not.
+ */
+ public function if_object_exists($bucket, $filename)
+ {
+ if ($this->use_batch_flow)
+ {
+ throw new S3_Exception(__FUNCTION__ . '() cannot be batch requested');
+ }
+
+ $header = $this->get_object_headers($bucket, $filename);
+
+ if ($header->isOK()) { return true; }
+ elseif ($header->status === 404) { return false; }
+
+ // @codeCoverageIgnoreStart
+ return null;
+ // @codeCoverageIgnoreEnd
+ }
+
+ /**
+ * Gets whether or not the specified Amazon S3 bucket has a bucket policy associated with it.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @return boolean A value of <code>true</code> if a bucket policy exists, or a value of <code>false</code> if one does not.
+ */
+ public function if_bucket_policy_exists($bucket)
+ {
+ if ($this->use_batch_flow)
+ {
+ // @codeCoverageIgnoreStart
+ throw new S3_Exception(__FUNCTION__ . '() cannot be batch requested');
+ // @codeCoverageIgnoreEnd
+ }
+
+ $response = $this->get_bucket_policy($bucket);
+
+ if ($response->isOK()) { return true; }
+ elseif ($response->status === 404) { return false; }
+
+ // @codeCoverageIgnoreStart
+ return null;
+ // @codeCoverageIgnoreEnd
+ }
+
+ /**
+ * Gets the number of Amazon S3 objects in the specified bucket.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @return integer The number of Amazon S3 objects in the bucket.
+ */
+ public function get_bucket_object_count($bucket)
+ {
+ if ($this->use_batch_flow)
+ {
+ // @codeCoverageIgnoreStart
+ throw new S3_Exception(__FUNCTION__ . '() cannot be batch requested');
+ // @codeCoverageIgnoreEnd
+ }
+
+ return count($this->get_object_list($bucket));
+ }
+
+ /**
+ * Gets the cumulative file size of the contents of the Amazon S3 bucket.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param boolean $friendly_format (Optional) A value of <code>true</code> will format the return value to 2 decimal points using the largest possible unit (i.e., 3.42 GB). A value of <code>false</code> will format the return value as the raw number of bytes.
+ * @return integer|string The number of bytes as an integer, or the friendly format as a string.
+ */
+ public function get_bucket_filesize($bucket, $friendly_format = false)
+ {
+ if ($this->use_batch_flow)
+ {
+ throw new S3_Exception(__FUNCTION__ . '() cannot be batch requested');
+ }
+
+ $filesize = 0;
+ $list = $this->list_objects($bucket);
+
+ foreach ($list->body->Contents as $filename)
+ {
+ $filesize += (integer) $filename->Size;
+ }
+
+ while ((string) $list->body->IsTruncated === 'true')
+ {
+ $body = (array) $list->body;
+ $list = $this->list_objects($bucket, array(
+ 'marker' => (string) end($body['Contents'])->Key
+ ));
+
+ foreach ($list->body->Contents as $object)
+ {
+ $filesize += (integer) $object->Size;
+ }
+ }
+
+ if ($friendly_format)
+ {
+ $filesize = $this->util->size_readable($filesize);
+ }
+
+ return $filesize;
+ }
+
+ /**
+ * Gets the file size of the specified Amazon S3 object.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $filename (Required) The file name for the object.
+ * @param boolean $friendly_format (Optional) A value of <code>true</code> will format the return value to 2 decimal points using the largest possible unit (i.e., 3.42 GB). A value of <code>false</code> will format the return value as the raw number of bytes.
+ * @return integer|string The number of bytes as an integer, or the friendly format as a string.
+ */
+ public function get_object_filesize($bucket, $filename, $friendly_format = false)
+ {
+ if ($this->use_batch_flow)
+ {
+ throw new S3_Exception(__FUNCTION__ . '() cannot be batch requested');
+ }
+
+ $object = $this->get_object_headers($bucket, $filename);
+ $filesize = (integer) $object->header['content-length'];
+
+ if ($friendly_format)
+ {
+ $filesize = $this->util->size_readable($filesize);
+ }
+
+ return $filesize;
+ }
+
+ /**
+ * Changes the content type for an existing Amazon S3 object.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $filename (Required) The file name for the object.
+ * @param string $contentType (Required) The content-type to apply to the object.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function change_content_type($bucket, $filename, $contentType, $opt = null)
+ {
+ if (!$opt) $opt = array();
+
+ // Retrieve the original metadata
+ $metadata = $this->get_object_metadata($bucket, $filename);
+ if ($metadata && $metadata['ACL'])
+ {
+ $opt['acl'] = $metadata['ACL'];
+ }
+ if ($metadata && $metadata['StorageClass'])
+ {
+ $opt['headers']['x-amz-storage-class'] = $metadata['StorageClass'];
+ }
+
+ // Merge optional parameters
+ $opt = array_merge_recursive(array(
+ 'headers' => array(
+ 'Content-Type' => $contentType
+ ),
+ 'metadataDirective' => 'COPY'
+ ), $opt);
+
+ return $this->copy_object(
+ array('bucket' => $bucket, 'filename' => $filename),
+ array('bucket' => $bucket, 'filename' => $filename),
+ $opt
+ );
+ }
+
+ /**
+ * Changes the storage redundancy for an existing object.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $filename (Required) The file name for the object.
+ * @param string $storage (Required) The storage setting to apply to the object. [Allowed values: <code>AmazonS3::STORAGE_STANDARD</code>, <code>AmazonS3::STORAGE_REDUCED</code>]
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function change_storage_redundancy($bucket, $filename, $storage, $opt = null)
+ {
+ if (!$opt) $opt = array();
+
+ // Retrieve the original metadata
+ $metadata = $this->get_object_metadata($bucket, $filename);
+ if ($metadata && $metadata['ACL'])
+ {
+ $opt['acl'] = $metadata['ACL'];
+ }
+ if ($metadata && $metadata['ContentType'])
+ {
+ $opt['headers']['Content-Type'] = $metadata['ContentType'];
+ }
+
+ // Merge optional parameters
+ $opt = array_merge(array(
+ 'storage' => $storage,
+ 'metadataDirective' => 'COPY',
+ ), $opt);
+
+ return $this->copy_object(
+ array('bucket' => $bucket, 'filename' => $filename),
+ array('bucket' => $bucket, 'filename' => $filename),
+ $opt
+ );
+ }
+
+ /**
+ * Gets a simplified list of bucket names on an Amazon S3 account.
+ *
+ * @param string $pcre (Optional) A Perl-Compatible Regular Expression (PCRE) to filter the bucket names against.
+ * @return array The list of matching bucket names. If there are no results, the method will return an empty array.
+ * @link http://php.net/pcre Regular Expressions (Perl-Compatible)
+ */
+ public function get_bucket_list($pcre = null)
+ {
+ if ($this->use_batch_flow)
+ {
+ throw new S3_Exception(__FUNCTION__ . '() cannot be batch requested');
+ }
+
+ // Get a list of buckets.
+ $list = $this->list_buckets();
+ if ($list = $list->body->query('descendant-or-self::Name'))
+ {
+ $list = $list->map_string($pcre);
+ return $list;
+ }
+
+ // @codeCoverageIgnoreStart
+ return array();
+ // @codeCoverageIgnoreEnd
+ }
+
+ /**
+ * Gets a simplified list of Amazon S3 object file names contained in a bucket.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>delimiter</code> - <code>string</code> - Optional - Keys that contain the same string between the prefix and the first occurrence of the delimiter will be rolled up into a single result element in the CommonPrefixes collection.</li>
+ * <li><code>marker</code> - <code>string</code> - Optional - Restricts the response to contain results that only occur alphabetically after the value of the marker.</li>
+ * <li><code>max-keys</code> - <code>integer</code> - Optional - The maximum number of results returned by the method call. The returned list will contain no more results than the specified value, but may return less. A value of zero is treated as if you did not specify max-keys.</li>
+ * <li><code>pcre</code> - <code>string</code> - Optional - A Perl-Compatible Regular Expression (PCRE) to filter the names against. This is applied only AFTER any native Amazon S3 filtering from specified <code>prefix</code>, <code>marker</code>, <code>max-keys</code>, or <code>delimiter</code> values are applied.</li>
+ * <li><code>prefix</code> - <code>string</code> - Optional - Restricts the response to contain results that begin only with the specified prefix.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * @return array The list of matching object names. If there are no results, the method will return an empty array.
+ * @link http://php.net/pcre Regular Expressions (Perl-Compatible)
+ */
+ public function get_object_list($bucket, $opt = null)
+ {
+ if ($this->use_batch_flow)
+ {
+ throw new S3_Exception(__FUNCTION__ . '() cannot be batch requested');
+ }
+
+ if (!$opt) $opt = array();
+ unset($opt['returnCurlHandle']); // This would cause problems
+
+ // Set some default values
+ $pcre = isset($opt['pcre']) ? $opt['pcre'] : null;
+ $max_keys = (isset($opt['max-keys']) && is_int($opt['max-keys'])) ? $opt['max-keys'] : null;
+ $objects = array();
+
+ if (!$max_keys)
+ {
+ // No max-keys specified. Get everything.
+ do
+ {
+ $list = $this->list_objects($bucket, $opt);
+ if ($keys = $list->body->query('descendant-or-self::Key')->map_string($pcre))
+ {
+ $objects = array_merge($objects, $keys);
+ }
+
+ $body = (array) $list->body;
+ $opt = array_merge($opt, array(
+ 'marker' => (isset($body['Contents']) && is_array($body['Contents'])) ?
+ ((string) end($body['Contents'])->Key) :
+ ((string) $list->body->Contents->Key)
+ ));
+ }
+ while ((string) $list->body->IsTruncated === 'true');
+ }
+ else
+ {
+ // Max-keys specified. Approximate number of loops and make the requests.
+
+ $max_keys = $opt['max-keys'];
+ $loops = ceil($max_keys / 1000);
+
+ do
+ {
+ $list = $this->list_objects($bucket, $opt);
+ $keys = $list->body->query('descendant-or-self::Key')->map_string($pcre);
+
+ if ($count = count($keys))
+ {
+ $objects = array_merge($objects, $keys);
+
+ if ($count < 1000)
+ {
+ break;
+ }
+ }
+
+ if ($max_keys > 1000)
+ {
+ $max_keys -= 1000;
+ }
+
+ $body = (array) $list->body;
+ $opt = array_merge($opt, array(
+ 'max-keys' => $max_keys,
+ 'marker' => (isset($body['Contents']) && is_array($body['Contents'])) ?
+ ((string) end($body['Contents'])->Key) :
+ ((string) $list->body->Contents->Key)
+ ));
+ }
+ while (--$loops);
+ }
+
+ return $objects;
+ }
+
+ /**
+ * Deletes all Amazon S3 objects inside the specified bucket.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $pcre (Optional) A Perl-Compatible Regular Expression (PCRE) to filter the names against. The default value is <PCRE_ALL>.
+ * @return boolean A value of <code>true</code> means that all objects were successfully deleted. A value of <code>false</code> means that at least one object failed to delete.
+ * @link http://php.net/pcre Regular Expressions (Perl-Compatible)
+ */
+ public function delete_all_objects($bucket, $pcre = self::PCRE_ALL)
+ {
+ // Collect all matches
+ $list = $this->get_object_list($bucket, array('pcre' => $pcre));
+
+ // As long as we have at least one match...
+ if (count($list) > 0)
+ {
+ $objects = array();
+
+ foreach ($list as $object)
+ {
+ $objects[] = array('key' => $object);
+ }
+
+ $batch = new CFBatchRequest();
+ $batch->use_credentials($this->credentials);
+
+ foreach (array_chunk($objects, 1000) as $object_set)
+ {
+ $this->batch($batch)->delete_objects($bucket, array(
+ 'objects' => $object_set
+ ));
+ }
+
+ $responses = $this->batch($batch)->send();
+ $is_ok = true;
+
+ foreach ($responses as $response)
+ {
+ if (!$response->isOK() || isset($response->body->Error))
+ {
+ $is_ok = false;
+ }
+ }
+
+ return $is_ok;
+ }
+
+ // If there are no matches, return true
+ return true;
+ }
+
+ /**
+ * Deletes all of the versions of all Amazon S3 objects inside the specified bucket.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $pcre (Optional) A Perl-Compatible Regular Expression (PCRE) to filter the names against. The default value is <PCRE_ALL>.
+ * @return boolean A value of <code>true</code> means that all object versions were successfully deleted. A value of <code>false</code> means that at least one object/version failed to delete.
+ * @link http://php.net/pcre Regular Expressions (Perl-Compatible)
+ */
+ public function delete_all_object_versions($bucket, $pcre = null)
+ {
+ // Instantiate
+ $versions = $this->list_bucket_object_versions($bucket);
+
+ // Gather all nodes together into a single array
+ if ($versions->body->DeleteMarker() && $versions->body->Version())
+ {
+ $markers = array_merge($versions->body->DeleteMarker()->getArrayCopy(), $versions->body->Version()->getArrayCopy());
+ }
+ elseif ($versions->body->DeleteMarker())
+ {
+ $markers = $versions->body->DeleteMarker()->getArrayCopy();
+ }
+ elseif ($versions->body->Version())
+ {
+ $markers = $versions->body->Version()->getArrayCopy();
+ }
+ else
+ {
+ $markers = array();
+ }
+
+ while ((string) $versions->body->IsTruncated === 'true')
+ {
+ $versions = $this->list_bucket_object_versions($bucket, array(
+ 'key-marker' => (string) $versions->body->NextKeyMarker
+ ));
+
+ // Gather all nodes together into a single array
+ if ($versions->body->DeleteMarker() && $versions->body->Version())
+ {
+ $markers = array_merge($markers, $versions->body->DeleteMarker()->getArrayCopy(), $versions->body->Version()->getArrayCopy());
+ }
+ elseif ($versions->body->DeleteMarker())
+ {
+ $markers = array_merge($markers, $versions->body->DeleteMarker()->getArrayCopy());
+ }
+ elseif ($versions->body->Version())
+ {
+ $markers = array_merge($markers, $versions->body->Version()->getArrayCopy());
+ }
+ }
+
+ $objects = array();
+
+ // Loop through markers
+ foreach ($markers as $marker)
+ {
+ if ($pcre)
+ {
+ if (preg_match($pcre, (string) $marker->Key))
+ {
+ $xx = array('key' => (string) $marker->Key);
+ if ((string) $marker->VersionId !== 'null')
+ {
+ $xx['version_id'] = (string) $marker->VersionId;
+ }
+ $objects[] = $xx;
+ unset($xx);
+ }
+ }
+ else
+ {
+ $xx = array('key' => (string) $marker->Key);
+ if ((string) $marker->VersionId !== 'null')
+ {
+ $xx['version_id'] = (string) $marker->VersionId;
+ }
+ $objects[] = $xx;
+ unset($xx);
+ }
+ }
+
+ $batch = new CFBatchRequest();
+ $batch->use_credentials($this->credentials);
+
+ foreach (array_chunk($objects, 1000) as $object_set)
+ {
+ $this->batch($batch)->delete_objects($bucket, array(
+ 'objects' => $object_set
+ ));
+ }
+
+ $responses = $this->batch($batch)->send();
+ $is_ok = true;
+
+ foreach ($responses as $response)
+ {
+ if (!$response->isOK() || isset($response->body->Error))
+ {
+ $is_ok = false;
+ }
+ }
+
+ return $is_ok;
+ }
+
+ /**
+ * Gets the collective metadata for the given Amazon S3 object.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $filename (Required) The file name for the Amazon S3 object.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>versionId</code> - <code>string</code> - Optional - The version of the object to retrieve. Version IDs are returned in the <code>x-amz-version-id</code> header of any previous object-related request.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return mixed If the object exists, the method returns the collective metadata for the Amazon S3 object. If the object does not exist, the method returns boolean <code>false</code>.
+ */
+ public function get_object_metadata($bucket, $filename, $opt = null)
+ {
+ $batch = new CFBatchRequest();
+ $this->batch($batch)->get_object_acl($bucket, $filename); // Get ACL info
+ $this->batch($batch)->get_object_headers($bucket, $filename); // Get content-type
+ $this->batch($batch)->list_objects($bucket, array( // Get other metadata
+ 'max-keys' => 1,
+ 'prefix' => $filename
+ ));
+ $response = $this->batch($batch)->send();
+
+ // Fail if any requests were unsuccessful
+ if (!$response->areOK())
+ {
+ return false;
+ }
+
+ $data = array(
+ 'ACL' => array(),
+ 'ContentType' => null,
+ 'ETag' => null,
+ 'Headers' => null,
+ 'Key' => null,
+ 'LastModified' => null,
+ 'Owner' => array(),
+ 'Size' => null,
+ 'StorageClass' => null,
+ );
+
+ // Add the content type
+ $data['ContentType'] = (string) $response[1]->header['content-type'];
+
+ // Add the other metadata (including storage type)
+ $contents = json_decode(json_encode($response[2]->body->query('descendant-or-self::Contents')->first()), true);
+ $data = array_merge($data, (is_array($contents) ? $contents : array()));
+
+ // Add ACL info
+ $grants = $response[0]->body->query('descendant-or-self::Grant');
+ $max = count($grants);
+
+ // Add raw header info
+ $data['Headers'] = $response[1]->header;
+ foreach (array('_info', 'x-amz-id-2', 'x-amz-request-id', 'cneonction', 'server', 'content-length', 'content-type', 'etag') as $header)
+ {
+ unset($data['Headers'][$header]);
+ }
+ ksort($data['Headers']);
+
+ if (count($grants) > 0)
+ {
+ foreach ($grants as $grant)
+ {
+ $dgrant = array(
+ 'id' => (string) $this->util->try_these(array('ID', 'URI'), $grant->Grantee),
+ 'permission' => (string) $grant->Permission
+ );
+
+ $data['ACL'][] = $dgrant;
+ }
+ }
+
+ return $data;
+ }
+
+
+ /*%******************************************************************************************%*/
+ // URLS
+
+ /**
+ * Gets the web-accessible URL for the Amazon S3 object or generates a time-limited signed request for
+ * a private file.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $filename (Required) The file name for the Amazon S3 object.
+ * @param integer|string $preauth (Optional) Specifies that a presigned URL for this request should be returned. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>https</code> - <code>boolean</code> - Optional - Set to <code>true</code> if you would like the URL be in https mode. Otherwise, the default behavior is always to use http regardless of your SSL settings.
+ * <li><code>method</code> - <code>string</code> - Optional - The HTTP method to use for the request. Defaults to a value of <code>GET</code>.</li>
+ * <li><code>response</code> - <code>array</code> - Optional - Allows adjustments to specific response headers. Pass an associative array where each key is one of the following: <code>cache-control</code>, <code>content-disposition</code>, <code>content-encoding</code>, <code>content-language</code>, <code>content-type</code>, <code>expires</code>. The <code>expires</code> value should use <php:gmdate()> and be formatted with the <code>DATE_RFC2822</code> constant.</li>
+ * <li><code>torrent</code> - <code>boolean</code> - Optional - A value of <code>true</code> will return a URL to a torrent of the Amazon S3 object. A value of <code>false</code> will return a non-torrent URL. Defaults to <code>false</code>.</li>
+ * <li><code>versionId</code> - <code>string</code> - Optional - The version of the object. Version IDs are returned in the <code>x-amz-version-id</code> header of any previous object-related request.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return string The file URL, with authentication and/or torrent parameters if requested.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/S3_QSAuth.html Using Query String Authentication
+ */
+ public function get_object_url($bucket, $filename, $preauth = 0, $opt = null)
+ {
+ // Add this to our request
+ if (!$opt) $opt = array();
+ $opt['verb'] = isset($opt['method']) ? $opt['method'] : 'GET';
+ $opt['resource'] = $filename;
+ $opt['preauth'] = $preauth;
+
+ if (isset($opt['torrent']) && $opt['torrent'])
+ {
+ $opt['sub_resource'] = 'torrent';
+ unset($opt['torrent']);
+ }
+
+ // GET responses
+ if (isset($opt['response']))
+ {
+ foreach ($opt['response'] as $key => $value)
+ {
+ $opt['response-' . $key] = $value;
+ unset($opt['response'][$key]);
+ }
+ }
+
+ // Determine whether or not to use SSL
+ $use_ssl = isset($opt['https']) ? (bool) $opt['https'] : false;
+ unset($opt['https']);
+ $current_use_ssl_setting = $this->use_ssl;
+
+ // Authenticate to S3
+ $this->use_ssl = $use_ssl;
+ $response = $this->authenticate($bucket, $opt);
+ $this->use_ssl = $current_use_ssl_setting;
+
+ return $response;
+ }
+
+ /**
+ * Gets the web-accessible URL to a torrent of the Amazon S3 object. The Amazon S3 object's access
+ * control list settings (ACL) MUST be set to <ACL_PUBLIC> for a valid URL to be returned.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $filename (Required) The file name for the object.
+ * @param integer|string $preauth (Optional) Specifies that a presigned URL for this request should be returned. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.
+ * @return string The torrent URL, with authentication parameters if requested.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?S3TorrentRetrieve.html Using BitTorrent to Retrieve Objects Stored in Amazon S3
+ */
+ public function get_torrent_url($bucket, $filename, $preauth = 0)
+ {
+ return $this->get_object_url($bucket, $filename, $preauth, array(
+ 'torrent' => true
+ ));
+ }
+
+
+ /*%******************************************************************************************%*/
+ // VERSIONING
+
+ /**
+ * Enables versioning support for the specified Amazon S3 bucket.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>MFASerial</code> - string (Optional) The serial number on the back of the Gemalto device. <code>MFASerial</code>, <code>MFAToken</code> and <code>MFAStatus</code> must all be set for MFA to work.</li>
+ * <li><code>MFAToken</code> - string (Optional) The current token displayed on the Gemalto device. <code>MFASerial</code>, <code>MFAToken</code> and <code>MFAStatus</code> must all be set for MFA to work.</li>
+ * <li><code>MFAStatus</code> - string (Optional) The MFA Delete status. Can be <code>Enabled</code> or <code>Disabled</code>. <code>MFASerial</code>, <code>MFAToken</code> and <code>MFAStatus</code> must all be set for MFA to work.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://aws.amazon.com/mfa/ Multi-Factor Authentication
+ */
+ public function enable_versioning($bucket, $opt = null)
+ {
+ if (!$opt) $opt = array();
+
+ // Add this to our request
+ $opt['verb'] = 'PUT';
+ $opt['sub_resource'] = 'versioning';
+ $opt['headers'] = array(
+ 'Content-Type' => 'application/xml'
+ );
+
+ $xml = simplexml_load_string($this->base_versioning_xml);
+ $xml->addChild('Status', 'Enabled');
+
+ // Enable MFA delete?
+ // @codeCoverageIgnoreStart
+ if (isset($opt['MFASerial']) && isset($opt['MFAToken']) && isset($opt['MFAStatus']))
+ {
+ $xml->addChild('MfaDelete', $opt['MFAStatus']);
+ $opt['headers']['x-amz-mfa'] = ($opt['MFASerial'] . ' ' . $opt['MFAToken']);
+ }
+ // @codeCoverageIgnoreEnd
+
+ $opt['body'] = $xml->asXML();
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Disables versioning support for the specified Amazon S3 bucket.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>MFASerial</code> - <code>string</code> - Optional - The serial number on the back of the Gemalto device. <code>MFASerial</code>, <code>MFAToken</code> and <code>MFAStatus</code> must all be set for MFA to work.</li>
+ * <li><code>MFAToken</code> - <code>string</code> - Optional - The current token displayed on the Gemalto device. <code>MFASerial</code>, <code>MFAToken</code> and <code>MFAStatus</code> must all be set for MFA to work.</li>
+ * <li><code>MFAStatus</code> - <code>string</code> - Optional - The MFA Delete status. Can be <code>Enabled</code> or <code>Disabled</code>. <code>MFASerial</code>, <code>MFAToken</code> and <code>MFAStatus</code> must all be set for MFA to work.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://aws.amazon.com/mfa/ Multi-Factor Authentication
+ */
+ public function disable_versioning($bucket, $opt = null)
+ {
+ if (!$opt) $opt = array();
+
+ // Add this to our request
+ $opt['verb'] = 'PUT';
+ $opt['sub_resource'] = 'versioning';
+ $opt['headers'] = array(
+ 'Content-Type' => 'application/xml'
+ );
+
+ $xml = simplexml_load_string($this->base_versioning_xml);
+ $xml->addChild('Status', 'Suspended');
+
+ // Enable MFA delete?
+ // @codeCoverageIgnoreStart
+ if (isset($opt['MFASerial']) && isset($opt['MFAToken']) && isset($opt['MFAStatus']))
+ {
+ $xml->addChild('MfaDelete', $opt['MFAStatus']);
+ $opt['headers']['x-amz-mfa'] = ($opt['MFASerial'] . ' ' . $opt['MFAToken']);
+ }
+ // @codeCoverageIgnoreEnd
+
+ $opt['body'] = $xml->asXML();
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Gets an Amazon S3 bucket's versioning status.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>preauth</code> - <code>integer|string</code> - Optional - Specifies that a presigned URL for this request should be returned. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function get_versioning_status($bucket, $opt = null)
+ {
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'GET';
+ $opt['sub_resource'] = 'versioning';
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Gets a list of all the versions of Amazon S3 objects in the specified bucket.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>delimiter</code> - <code>string</code> - Optional - Unicode string parameter. Keys that contain the same string between the prefix and the first occurrence of the delimiter will be rolled up into a single result element in the CommonPrefixes collection.</li>
+ * <li><code>key-marker</code> - <code>string</code> - Optional - Restricts the response to contain results that only occur alphabetically after the value of the <code>key-marker</code>.</li>
+ * <li><code>max-keys</code> - <code>string</code> - Optional - Limits the number of results returned in response to your query. Will return no more than this number of results, but possibly less.</li>
+ * <li><code>prefix</code> - <code>string</code> - Optional - Restricts the response to only contain results that begin with the specified prefix.</li>
+ * <li><code>version-id-marker</code> - <code>string</code> - Optional - Restricts the response to contain results that only occur alphabetically after the value of the <code>version-id-marker</code>.</li>
+ * <li><code>preauth</code> - <code>integer|string</code> - Optional - Specifies that a presigned URL for this request should be returned. May be passed as a number of seconds since UNIX Epoch, or any string compatible with <php:strtotime()>.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function list_bucket_object_versions($bucket, $opt = null)
+ {
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'GET';
+ $opt['sub_resource'] = 'versions';
+
+ foreach (array('delimiter', 'key-marker', 'max-keys', 'prefix', 'version-id-marker') as $param)
+ {
+ if (isset($opt[$param]))
+ {
+ $opt['query_string'][$param] = $opt[$param];
+ unset($opt[$param]);
+ }
+ }
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+
+ /*%******************************************************************************************%*/
+ // BUCKET POLICIES
+
+ /**
+ * Sets the policy sub-resource for the specified Amazon S3 bucket. The specified policy replaces any
+ * policy the bucket already has.
+ *
+ * To perform this operation, the caller must be authorized to set a policy for the bucket and have
+ * PutPolicy permissions. If the caller does not have PutPolicy permissions for the bucket, Amazon S3
+ * returns a `403 Access Denied` error. If the caller has the correct permissions but has not been
+ * authorized by the bucket owner, Amazon S3 returns a `405 Method Not Allowed` error.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param CFPolicy $policy (Required) The JSON policy to use.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/AccessPolicyLanguage.html Appendix: The Access Policy Language
+ */
+ public function set_bucket_policy($bucket, CFPolicy $policy, $opt = null)
+ {
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'PUT';
+ $opt['sub_resource'] = 'policy';
+ $opt['body'] = $policy->get_json();
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Gets the policy of the specified Amazon S3 bucket.
+ *
+ * To use this operation, the caller must have GetPolicy permissions for the specified bucket and must be
+ * the bucket owner. If the caller does not have GetPolicy permissions, this method will generate a
+ * `403 Access Denied` error. If the caller has the correct permissions but is not the bucket owner, this
+ * method will generate a `405 Method Not Allowed` error. If the bucket does not have a policy defined for
+ * it, this method will generate a `404 Policy Not Found` error.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function get_bucket_policy($bucket, $opt = null)
+ {
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'GET';
+ $opt['sub_resource'] = 'policy';
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Deletes the bucket policy for the specified Amazon S3 bucket. To delete the policy, the caller must
+ * be the bucket owner and have `DeletePolicy` permissions for the specified bucket.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response. If you do not have `DeletePolicy` permissions, Amazon S3 returns a `403 Access Denied` error. If you have the correct permissions, but are not the bucket owner, Amazon S3 returns a `405 Method Not Allowed` error. If the bucket doesn't have a policy, Amazon S3 returns a `204 No Content` error.
+ */
+ public function delete_bucket_policy($bucket, $opt = null)
+ {
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'DELETE';
+ $opt['sub_resource'] = 'policy';
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+
+ /*%******************************************************************************************%*/
+ // BUCKET NOTIFICATIONS
+
+ /**
+ * Enables notifications of specified events for an Amazon S3 bucket. Currently, the
+ * `s3:ReducedRedundancyLostObject` event is the only event supported for notifications. The
+ * `s3:ReducedRedundancyLostObject` event is triggered when Amazon S3 detects that it has lost all
+ * copies of an Amazon S3 object and can no longer service requests for that object.
+ *
+ * If the bucket owner and Amazon SNS topic owner are the same, the bucket owner has permission to
+ * publish notifications to the topic by default. Otherwise, the owner of the topic must create a
+ * policy to enable the bucket owner to publish to the topic.
+ *
+ * By default, only the bucket owner can configure notifications on a bucket. However, bucket owners
+ * can use bucket policies to grant permission to other users to set this configuration with the
+ * `s3:PutBucketNotification` permission.
+ *
+ * After a PUT operation is called to configure notifications on a bucket, Amazon S3 publishes a test
+ * notification to ensure that the topic exists and that the bucket owner has permission to publish
+ * to the specified topic. If the notification is successfully published to the SNS topic, the PUT
+ * operation updates the bucket configuration and returns the 200 OK responses with a
+ * `x-amz-sns-test-message-id` header containing the message ID of the test notification sent to topic.
+ *
+ * @param string $bucket (Required) The name of the bucket to create bucket notifications for.
+ * @param string $topic_arn (Required) The SNS topic ARN to send notifications to.
+ * @param string $event (Required) The event type to listen for.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/NotificationHowTo.html Setting Up Notification of Bucket Events
+ */
+ public function create_bucket_notification($bucket, $topic_arn, $event, $opt = null)
+ {
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'PUT';
+ $opt['sub_resource'] = 'notification';
+ $opt['headers'] = array(
+ 'Content-Type' => 'application/xml'
+ );
+
+ $xml = simplexml_load_string($this->base_notification_xml);
+ $topic_config = $xml->addChild('TopicConfiguration');
+ $topic_config->addChild('Topic', $topic_arn);
+ $topic_config->addChild('Event', $event);
+
+ $opt['body'] = $xml->asXML();
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Gets the notification configuration of a bucket. Currently, the `s3:ReducedRedundancyLostObject` event
+ * is the only event supported for notifications. The `s3:ReducedRedundancyLostObject` event is triggered
+ * when Amazon S3 detects that it has lost all replicas of a Reduced Redundancy Storage object and can no
+ * longer service requests for that object.
+ *
+ * If notifications are not enabled on the bucket, the operation returns an empty
+ * `NotificatonConfiguration` element.
+ *
+ * By default, you must be the bucket owner to read the notification configuration of a bucket. However,
+ * the bucket owner can use a bucket policy to grant permission to other users to read this configuration
+ * with the `s3:GetBucketNotification` permission.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/NotificationHowTo.html Setting Up Notification of Bucket Events
+ */
+ public function get_bucket_notifications($bucket, $opt = null)
+ {
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'GET';
+ $opt['sub_resource'] = 'notification';
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Empties the list of SNS topics to send notifications to.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/NotificationHowTo.html Setting Up Notification of Bucket Events
+ */
+ public function delete_bucket_notification($bucket, $opt = null)
+ {
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'PUT';
+ $opt['sub_resource'] = 'notification';
+ $opt['body'] = $this->base_notification_xml;
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+
+ /*%******************************************************************************************%*/
+ // MULTIPART UPLOAD
+
+ /**
+ * Calculates the correct values for sequentially reading a file for multipart upload. This method should
+ * be used in conjunction with <upload_part()>.
+ *
+ * @param integer $filesize (Required) The size in bytes of the entire file.
+ * @param integer $part_size (Required) The size in bytes of the part of the file to send.
+ * @return array An array containing key-value pairs. The keys are `seekTo` and `length`.
+ */
+ public function get_multipart_counts($filesize, $part_size)
+ {
+ $i = 0;
+ $sizecount = $filesize;
+ $values = array();
+
+ while ($sizecount > 0)
+ {
+ $sizecount -= $part_size;
+ $values[] = array(
+ 'seekTo' => ($part_size * $i),
+ 'length' => (($sizecount > 0) ? $part_size : ($sizecount + $part_size)),
+ );
+ $i++;
+ }
+
+ return $values;
+ }
+
+ /**
+ * Initiates a multipart upload and returns an `UploadId`.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $filename (Required) The file name for the object.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>acl</code> - <code>string</code> - Optional - The ACL settings for the specified object. [Allowed values: <code>AmazonS3::ACL_PRIVATE</code>, <code>AmazonS3::ACL_PUBLIC</code>, <code>AmazonS3::ACL_OPEN</code>, <code>AmazonS3::ACL_AUTH_READ</code>, <code>AmazonS3::ACL_OWNER_READ</code>, <code>AmazonS3::ACL_OWNER_FULL_CONTROL</code>]. The default value is <code>ACL_PRIVATE</code>.</li>
+ * <li><code>contentType</code> - <code>string</code> - Optional - The type of content that is being sent. The default value is <code>application/octet-stream</code>.</li>
+ * <li><code>encryption</code> - <code>string</code> - Optional - The algorithm to use for encrypting the object. [Allowed values: <code>AES256</code>]</li>
+ * <li><code>headers</code> - <code>array</code> - Optional - Standard HTTP headers to send along in the request. Accepts an associative array of key-value pairs.</li>
+ * <li><code>meta</code> - <code>array</code> - Optional - An associative array of key-value pairs. Any header starting with <code>x-amz-meta-:</code> is considered user metadata. It will be stored with the object and returned when you retrieve the object. The total size of the HTTP request, not including the body, must be less than 4 KB.</li>
+ * <li><code>storage</code> - <code>string</code> - Optional - Whether to use Standard or Reduced Redundancy storage. [Allowed values: <code>AmazonS3::STORAGE_STANDARD</code>, <code>AmazonS3::STORAGE_REDUCED</code>]. The default value is <code>STORAGE_STANDARD</code>.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/RESTAccessPolicy.html REST Access Control Policy
+ */
+ public function initiate_multipart_upload($bucket, $filename, $opt = null)
+ {
+ if (!$opt) $opt = array();
+
+ // Add this to our request
+ $opt['verb'] = 'POST';
+ $opt['resource'] = $filename;
+ $opt['sub_resource'] = 'uploads';
+ $opt['body'] = '';
+
+ // Handle content type. Can also be passed as an HTTP header.
+ if (isset($opt['contentType']))
+ {
+ $opt['headers']['Content-Type'] = $opt['contentType'];
+ unset($opt['contentType']);
+ }
+
+ // Set a default content type.
+ if (!isset($opt['headers']['Content-Type']))
+ {
+ $opt['headers']['Content-Type'] = 'application/octet-stream';
+ }
+
+ // Handle Access Control Lists. Can also be passed as an HTTP header.
+ if (isset($opt['acl']))
+ {
+ $opt['headers']['x-amz-acl'] = $opt['acl'];
+ unset($opt['acl']);
+ }
+
+ // Handle storage settings. Can also be passed as an HTTP header.
+ if (isset($opt['storage']))
+ {
+ $opt['headers']['x-amz-storage-class'] = $opt['storage'];
+ unset($opt['storage']);
+ }
+
+ // Handle encryption settings. Can also be passed as an HTTP header.
+ if (isset($opt['encryption']))
+ {
+ $opt['headers']['x-amz-server-side-encryption'] = $opt['encryption'];
+ unset($opt['encryption']);
+ }
+
+ // Handle meta tags. Can also be passed as an HTTP header.
+ if (isset($opt['meta']))
+ {
+ foreach ($opt['meta'] as $meta_key => $meta_value)
+ {
+ // e.g., `My Meta Header` is converted to `x-amz-meta-my-meta-header`.
+ $opt['headers']['x-amz-meta-' . strtolower(str_replace(' ', '-', $meta_key))] = $meta_value;
+ }
+ unset($opt['meta']);
+ }
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Uploads a single part of a multipart upload. The part size cannot be smaller than 5 MB
+ * or larger than 5 TB. A multipart upload can have no more than 10,000 parts.
+ *
+ * Amazon S3 charges for storage as well as requests to the service. Smaller part sizes (and more
+ * requests) allow for faster failures and better upload reliability. Larger part sizes (and fewer
+ * requests) costs slightly less but has lower upload reliability.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $filename (Required) The file name for the object.
+ * @param string $upload_id (Required) The upload ID identifying the multipart upload whose parts are being listed. The upload ID is retrieved from a call to <initiate_multipart_upload()>.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>fileUpload</code> - <code>string|resource</code> - Required - The URL/path for the file to upload or an open resource.</li>
+ * <li><code>partNumber</code> - <code>integer</code> - Required - The part number order of the multipart upload.</li>
+ * <li><code>expect</code> - <code>string</code> - Optional - Specifies that the SDK not send the request body until it receives an acknowledgement. If the message is rejected based on the headers, the body of the message is not sent. For more information, see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.20">RFC 2616, section 14.20</a>. The value can also be passed to the <code>header</code> option as <code>Expect</code>. [Allowed values: <code>100-continue</code>]</li>
+ * <li><code>headers</code> - <code>array</code> - Optional - Standard HTTP headers to send along in the request. Accepts an associative array of key-value pairs.</li>
+ * <li><code>length</code> - <code>integer</code> - Optional - The size of the part in bytes. For more information, see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13">RFC 2616, section 14.13</a>. The value can also be passed to the <code>header</code> option as <code>Content-Length</code>.</li>
+ * <li><code>md5</code> - <code>string</code> - Optional - The base64 encoded 128-bit MD5 digest of the part data. This header can be used as a message integrity check to verify that the part data is the same data that was originally sent. Although it is optional, we recommend using this mechanism as an end-to-end integrity check. For more information, see <a href="http://www.ietf.org/rfc/rfc1864.txt">RFC 1864</a>. The value can also be passed to the <code>header</code> option as <code>Content-MD5</code>.</li>
+ * <li><code>seekTo</code> - <code>integer</code> - Optional - The starting position in bytes for the piece of the file/stream to upload.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function upload_part($bucket, $filename, $upload_id, $opt = null)
+ {
+ if (!$opt) $opt = array();
+
+ // Add this to our request
+ $opt['verb'] = 'PUT';
+ $opt['resource'] = $filename;
+ $opt['uploadId'] = $upload_id;
+
+ if (!isset($opt['fileUpload']) || !isset($opt['partNumber']))
+ {
+ throw new S3_Exception('The `fileUpload` and `partNumber` options are both required in ' . __FUNCTION__ . '().');
+ }
+
+ // Handle expectation. Can also be passed as an HTTP header.
+ if (isset($opt['expect']))
+ {
+ $opt['headers']['Expect'] = $opt['expect'];
+ unset($opt['expect']);
+ }
+
+ // Handle content length. Can also be passed as an HTTP header.
+ if (isset($opt['length']))
+ {
+ $opt['headers']['Content-Length'] = $opt['length'];
+ unset($opt['length']);
+ }
+
+ // Handle content md5. Can also be passed as an HTTP header.
+ if (isset($opt['md5']))
+ {
+ $opt['headers']['Content-MD5'] = $opt['md5'];
+ unset($opt['md5']);
+ }
+
+ $opt['headers']['Expect'] = '100-continue';
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Lists the completed parts of an in-progress multipart upload.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $filename (Required) The file name for the object.
+ * @param string $upload_id (Required) The upload ID identifying the multipart upload whose parts are being listed. The upload ID is retrieved from a call to <initiate_multipart_upload()>.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>max-parts</code> - <code>integer</code> - Optional - The maximum number of parts to return in the response body.</li>
+ * <li><code>part-number-marker</code> - <code>string</code> - Optional - Restricts the response to contain results that only occur numerically after the value of the <code>part-number-marker</code>.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function list_parts($bucket, $filename, $upload_id, $opt = null)
+ {
+ if (!$opt) $opt = array();
+
+ // Add this to our request
+ $opt['verb'] = 'GET';
+ $opt['resource'] = $filename;
+ $opt['uploadId'] = $upload_id;
+ $opt['query_string'] = array();
+
+ foreach (array('max-parts', 'part-number-marker') as $param)
+ {
+ if (isset($opt[$param]))
+ {
+ $opt['query_string'][$param] = $opt[$param];
+ unset($opt[$param]);
+ }
+ }
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Aborts an in-progress multipart upload. This operation cannot be reversed.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $filename (Required) The file name for the object.
+ * @param string $upload_id (Required) The upload ID identifying the multipart upload whose parts are being listed. The upload ID is retrieved from a call to <initiate_multipart_upload()>.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function abort_multipart_upload($bucket, $filename, $upload_id, $opt = null)
+ {
+ if (!$opt) $opt = array();
+
+ // Add this to our request
+ $opt['verb'] = 'DELETE';
+ $opt['resource'] = $filename;
+ $opt['uploadId'] = $upload_id;
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Completes an in-progress multipart upload. A multipart upload is completed by describing the part
+ * numbers and corresponding ETag values in order, and submitting that data to Amazon S3 as an XML document.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $filename (Required) The file name for the object.
+ * @param string $upload_id (Required) The upload ID identifying the multipart upload whose parts are being listed. The upload ID is retrieved from a call to <initiate_multipart_upload()>.
+ * @param string|array|SimpleXMLElement|CFResponse $parts (Required) The completion XML document. This document can be provided in multiple ways; as a string of XML, as a <php:SimpleXMLElement> object representing the XML document, as an indexed array of associative arrays where the keys are <code>PartNumber</code> and <code>ETag</code>, or as a <CFResponse> object returned by <list_parts()>.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function complete_multipart_upload($bucket, $filename, $upload_id, $parts, $opt = null)
+ {
+ if (!$opt) $opt = array();
+
+ // Add this to our request
+ $opt['verb'] = 'POST';
+ $opt['resource'] = $filename;
+ $opt['uploadId'] = $upload_id;
+ $opt['headers'] = array(
+ 'Content-Type' => 'application/xml'
+ );
+
+ // Disable Content-MD5 calculation for this operation
+ $opt['NoContentMD5'] = true;
+
+ if (is_string($parts))
+ {
+ // Assume it's the intended XML.
+ $opt['body'] = $parts;
+ }
+ elseif ($parts instanceof SimpleXMLElement)
+ {
+ // Assume it's a SimpleXMLElement object representing the XML.
+ $opt['body'] = $parts->asXML();
+ }
+ elseif (is_array($parts) || $parts instanceof CFResponse)
+ {
+ $xml = simplexml_load_string($this->complete_mpu_xml);
+
+ if (is_array($parts))
+ {
+ // Generate the appropriate XML.
+ foreach ($parts as $node)
+ {
+ $part = $xml->addChild('Part');
+ $part->addChild('PartNumber', $node['PartNumber']);
+ $part->addChild('ETag', $node['ETag']);
+ }
+
+ }
+ elseif ($parts instanceof CFResponse)
+ {
+ // Assume it's a response from list_parts().
+ foreach ($parts->body->Part as $node)
+ {
+ $part = $xml->addChild('Part');
+ $part->addChild('PartNumber', (string) $node->PartNumber);
+ $part->addChild('ETag', (string) $node->ETag);
+ }
+ }
+
+ $opt['body'] = $xml->asXML();
+ }
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Lists the in-progress multipart uploads.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>delimiter</code> - <code>string</code> - Optional - Keys that contain the same string between the prefix and the first occurrence of the delimiter will be rolled up into a single result element in the CommonPrefixes collection.</li>
+ * <li><code>key-marker</code> - <code>string</code> - Optional - Restricts the response to contain results that only occur alphabetically after the value of the <code>key-marker</code>. If used in conjunction with <code>upload-id-marker</code>, the results will be filtered to include keys whose upload ID is alphabetically after the value of <code>upload-id-marker</code>.</li>
+ * <li><code>upload-id-marker</code> - <code>string</code> - Optional - Restricts the response to contain results that only occur alphabetically after the value of the <code>upload-id-marker</code>. Must be used in conjunction with <code>key-marker</code>.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function list_multipart_uploads($bucket, $opt = null)
+ {
+ if (!$opt) $opt = array();
+
+ // Add this to our request
+ $opt['verb'] = 'GET';
+ $opt['sub_resource'] = 'uploads';
+
+ foreach (array('key-marker', 'max-uploads', 'upload-id-marker') as $param)
+ {
+ if (isset($opt[$param]))
+ {
+ $opt['query_string'][$param] = $opt[$param];
+ unset($opt[$param]);
+ }
+ }
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Since Amazon S3's standard <copy_object()> operation only supports copying objects that are smaller than
+ * 5 GB, the ability to copy large objects (greater than 5 GB) requires the use of "Multipart Copy".
+ *
+ * Copying large objects requires the developer to initiate a new multipart "upload", copy pieces of the
+ * large object (specifying a range of bytes up to 5 GB from the large source file), then complete the
+ * multipart "upload".
+ *
+ * NOTE: <strong>This is a synchronous operation</strong>, not an <em>asynchronous</em> operation, which means
+ * that Amazon S3 will not return a response for this operation until the copy has completed across the Amazon
+ * S3 server fleet. Copying objects within a single region will complete more quickly than copying objects
+ * <em>across</em> regions. The synchronous nature of this operation is different from other services where
+ * responses are typically returned immediately, even if the operation itself has not yet been completed on
+ * the server-side.
+ *
+ * @param array $source (Required) The bucket and file name to copy from. The following keys must be set: <ul>
+ * <li><code>bucket</code> - <code>string</code> - Required - Specifies the name of the bucket containing the source object.</li>
+ * <li><code>filename</code> - <code>string</code> - Required - Specifies the file name of the source object to copy.</li></ul>
+ * @param array $dest (Required) The bucket and file name to copy to. The following keys must be set: <ul>
+ * <li><code>bucket</code> - <code>string</code> - Required - Specifies the name of the bucket to copy the object to.</li>
+ * <li><code>filename</code> - <code>string</code> - Required - Specifies the file name to copy the object to.</li></ul>
+ * @param string $upload_id (Required) The upload ID identifying the multipart upload whose parts are being listed. The upload ID is retrieved from a call to <initiate_multipart_upload()>.
+ * @param integer $part_number (Required) A part number uniquely identifies a part and defines its position within the destination object. When you complete a multipart upload, a complete object is created by concatenating parts in ascending order based on part number. If you copy a new part using the same part number as a previously copied/uploaded part, the previously written part is overwritten.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>ifMatch</code> - <code>string</code> - Optional - The ETag header from a previous request. Copies the object if its entity tag (ETag) matches the specified tag; otherwise, the request returns a <code>412</code> HTTP status code error (precondition failed). Used in conjunction with <code>ifUnmodifiedSince</code>.</li>
+ * <li><code>ifUnmodifiedSince</code> - <code>string</code> - Optional - The LastModified header from a previous request. Copies the object if it hasn't been modified since the specified time; otherwise, the request returns a <code>412</code> HTTP status code error (precondition failed). Used in conjunction with <code>ifMatch</code>.</li>
+ * <li><code>ifNoneMatch</code> - <code>string</code> - Optional - The ETag header from a previous request. Copies the object if its entity tag (ETag) is different than the specified ETag; otherwise, the request returns a <code>412</code> HTTP status code error (failed condition). Used in conjunction with <code>ifModifiedSince</code>.</li>
+ * <li><code>ifModifiedSince</code> - <code>string</code> - Optional - The LastModified header from a previous request. Copies the object if it has been modified since the specified time; otherwise, the request returns a <code>412</code> HTTP status code error (failed condition). Used in conjunction with <code>ifNoneMatch</code>.</li>
+ * <li><code>range</code> - <code>string</code> - Optional - The range of bytes to copy from the object. Specify this parameter when copying partial bits. The specified range must be notated with a hyphen (e.g., 0-10485759). Defaults to the byte range of the complete Amazon S3 object.</li>
+ * <li><code>versionId</code> - <code>string</code> - Optional - The version of the object to copy. Version IDs are returned in the <code>x-amz-version-id</code> header of any previous object-related request.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function copy_part($source, $dest, $upload_id, $part_number, $opt = null)
+ {
+ if (!$opt) $opt = array();
+
+ // Add this to our request
+ $opt['verb'] = 'PUT';
+ $opt['resource'] = $dest['filename'];
+ $opt['uploadId'] = $upload_id;
+ $opt['partNumber'] = $part_number;
+
+ // Handle copy source
+ if (isset($source['bucket']) && isset($source['filename']))
+ {
+ $opt['headers']['x-amz-copy-source'] = '/' . $source['bucket'] . '/' . rawurlencode($source['filename'])
+ . (isset($opt['versionId']) ? ('?' . 'versionId=' . rawurlencode($opt['versionId'])) : ''); // Append the versionId to copy, if available
+ unset($opt['versionId']);
+ }
+
+ // Handle conditional-copy parameters
+ if (isset($opt['ifMatch']))
+ {
+ $opt['headers']['x-amz-copy-source-if-match'] = $opt['ifMatch'];
+ unset($opt['ifMatch']);
+ }
+ if (isset($opt['ifNoneMatch']))
+ {
+ $opt['headers']['x-amz-copy-source-if-none-match'] = $opt['ifNoneMatch'];
+ unset($opt['ifNoneMatch']);
+ }
+ if (isset($opt['ifUnmodifiedSince']))
+ {
+ $opt['headers']['x-amz-copy-source-if-unmodified-since'] = $opt['ifUnmodifiedSince'];
+ unset($opt['ifUnmodifiedSince']);
+ }
+ if (isset($opt['ifModifiedSince']))
+ {
+ $opt['headers']['x-amz-copy-source-if-modified-since'] = $opt['ifModifiedSince'];
+ unset($opt['ifModifiedSince']);
+ }
+
+ // Partial content range
+ if (isset($opt['range']))
+ {
+ $opt['headers']['x-amz-copy-source-range'] = 'bytes=' . $opt['range'];
+ }
+
+ // Authenticate to S3
+ return $this->authenticate($dest['bucket'], $opt);
+ }
+
+ /**
+ * Creates an Amazon S3 object using the multipart upload APIs. It is analogous to <create_object()>.
+ *
+ * While each individual part of a multipart upload can hold up to 5 GB of data, this method limits the
+ * part size to a maximum of 500 MB. The combined size of all parts can not exceed 5 TB of data. When an
+ * object is stored in Amazon S3, the data is streamed to multiple storage servers in multiple data
+ * centers. This ensures the data remains available in the event of internal network or hardware failure.
+ *
+ * Amazon S3 charges for storage as well as requests to the service. Smaller part sizes (and more
+ * requests) allow for faster failures and better upload reliability. Larger part sizes (and fewer
+ * requests) costs slightly less but has lower upload reliability.
+ *
+ * In certain cases with large objects, it's possible for this method to attempt to open more file system
+ * connections than allowed by the OS. In this case, either
+ * <a href="https://forums.aws.amazon.com/thread.jspa?threadID=70216">increase the number of connections
+ * allowed</a> or increase the value of the <code>partSize</code> parameter to use a larger part size.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string $filename (Required) The file name for the object.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>fileUpload</code> - <code>string|resource</code> - Required - The URL/path for the file to upload, or an open resource.</li>
+ * <li><code>acl</code> - <code>string</code> - Optional - The ACL settings for the specified object. [Allowed values: <code>AmazonS3::ACL_PRIVATE</code>, <code>AmazonS3::ACL_PUBLIC</code>, <code>AmazonS3::ACL_OPEN</code>, <code>AmazonS3::ACL_AUTH_READ</code>, <code>AmazonS3::ACL_OWNER_READ</code>, <code>AmazonS3::ACL_OWNER_FULL_CONTROL</code>]. The default value is <code>ACL_PRIVATE</code>.</li>
+ * <li><code>contentType</code> - <code>string</code> - Optional - The type of content that is being sent in the body. The default value is <code>application/octet-stream</code>.</li>
+ * <li><code>headers</code> - <code>array</code> - Optional - Standard HTTP headers to send along in the request. Accepts an associative array of key-value pairs.</li>
+ * <li><code>length</code> - <code>integer</code> - Optional - The size of the object in bytes. For more information, see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13">RFC 2616, section 14.13</a>. The value can also be passed to the <code>header</code> option as <code>Content-Length</code>.</li>
+ * <li><code>limit</code> - <code>integer</code> - Optional - The maximum number of concurrent uploads done by cURL. Gets passed to <code>CFBatchRequest</code>.</li>
+ * <li><code>meta</code> - <code>array</code> - Optional - An associative array of key-value pairs. Any header starting with <code>x-amz-meta-:</code> is considered user metadata. It will be stored with the object and returned when you retrieve the object. The total size of the HTTP request, not including the body, must be less than 4 KB.</li>
+ * <li><code>partSize</code> - <code>integer</code> - Optional - The size of an individual part. The size may not be smaller than 5 MB or larger than 500 MB. The default value is 50 MB.</li>
+ * <li><code>seekTo</code> - <code>integer</code> - Optional - The starting position in bytes for the first piece of the file/stream to upload.</li>
+ * <li><code>storage</code> - <code>string</code> - Optional - Whether to use Standard or Reduced Redundancy storage. [Allowed values: <code>AmazonS3::STORAGE_STANDARD</code>, <code>AmazonS3::STORAGE_REDUCED</code>]. The default value is <code>STORAGE_STANDARD</code>.</li>
+ * <li><code>uploadId</code> - <code>string</code> - Optional - An upload ID identifying an existing multipart upload to use. If this option is not set, one will be created automatically.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/RESTAccessPolicy.html REST Access Control Policy
+ */
+ public function create_mpu_object($bucket, $filename, $opt = null)
+ {
+ if ($this->use_batch_flow)
+ {
+ throw new S3_Exception(__FUNCTION__ . '() cannot be batch requested');
+ }
+
+ if (!$opt) $opt = array();
+
+ // Handle content length. Can also be passed as an HTTP header.
+ if (isset($opt['length']))
+ {
+ $opt['headers']['Content-Length'] = $opt['length'];
+ unset($opt['length']);
+ }
+
+ if (!isset($opt['fileUpload']))
+ {
+ throw new S3_Exception('The `fileUpload` option is required in ' . __FUNCTION__ . '().');
+ }
+ elseif (is_resource($opt['fileUpload']))
+ {
+ $opt['limit'] = 1; // We can only read from this one resource.
+ $upload_position = isset($opt['seekTo']) ? (integer) $opt['seekTo'] : ftell($opt['fileUpload']);
+ $upload_filesize = isset($opt['headers']['Content-Length']) ? (integer) $opt['headers']['Content-Length'] : null;
+
+ if (!isset($upload_filesize) && $upload_position !== false)
+ {
+ $stats = fstat($opt['fileUpload']);
+
+ if ($stats && $stats['size'] >= 0)
+ {
+ $upload_filesize = $stats['size'] - $upload_position;
+ }
+ }
+ }
+ else
+ {
+ $upload_position = isset($opt['seekTo']) ? (integer) $opt['seekTo'] : 0;
+
+ if (isset($opt['headers']['Content-Length']))
+ {
+ $upload_filesize = (integer) $opt['headers']['Content-Length'];
+ }
+ else
+ {
+ $upload_filesize = filesize($opt['fileUpload']);
+
+ if ($upload_filesize !== false)
+ {
+ $upload_filesize -= $upload_position;
+ }
+ }
+ }
+
+ if ($upload_position === false || !isset($upload_filesize) || $upload_filesize === false || $upload_filesize < 0)
+ {
+ throw new S3_Exception('The size of `fileUpload` cannot be determined in ' . __FUNCTION__ . '().');
+ }
+
+ // Handle part size
+ if (isset($opt['partSize']))
+ {
+ // If less that 5 MB...
+ if ((integer) $opt['partSize'] < 5242880)
+ {
+ $opt['partSize'] = 5242880; // 5 MB
+ }
+ // If more than 500 MB...
+ elseif ((integer) $opt['partSize'] > 524288000)
+ {
+ $opt['partSize'] = 524288000; // 500 MB
+ }
+ }
+ else
+ {
+ $opt['partSize'] = 52428800; // 50 MB
+ }
+
+ // If the upload size is smaller than the piece size, failover to create_object().
+ if ($upload_filesize < $opt['partSize'] && !isset($opt['uploadId']))
+ {
+ return $this->create_object($bucket, $filename, $opt);
+ }
+
+ // Initiate multipart upload
+ if (isset($opt['uploadId']))
+ {
+ $upload_id = $opt['uploadId'];
+ }
+ else
+ {
+ // Compose options for initiate_multipart_upload().
+ $_opt = array();
+ foreach (array('contentType', 'acl', 'storage', 'headers', 'meta') as $param)
+ {
+ if (isset($opt[$param]))
+ {
+ $_opt[$param] = $opt[$param];
+ }
+ }
+
+ $upload = $this->initiate_multipart_upload($bucket, $filename, $_opt);
+ if (!$upload->isOK())
+ {
+ return $upload;
+ }
+
+ // Fetch the UploadId
+ $upload_id = (string) $upload->body->UploadId;
+ }
+
+ // Get the list of pieces
+ $pieces = $this->get_multipart_counts($upload_filesize, (integer) $opt['partSize']);
+
+ // Queue batch requests
+ $batch = new CFBatchRequest(isset($opt['limit']) ? (integer) $opt['limit'] : null);
+ foreach ($pieces as $i => $piece)
+ {
+ $this->batch($batch)->upload_part($bucket, $filename, $upload_id, array(
+ 'expect' => '100-continue',
+ 'fileUpload' => $opt['fileUpload'],
+ 'partNumber' => ($i + 1),
+ 'seekTo' => $upload_position + (integer) $piece['seekTo'],
+ 'length' => (integer) $piece['length'],
+ ));
+ }
+
+ // Send batch requests
+ $batch_responses = $this->batch($batch)->send();
+ if (!$batch_responses->areOK())
+ {
+ return $batch_responses;
+ }
+
+ // Compose completion XML
+ $parts = array();
+ foreach ($batch_responses as $i => $response)
+ {
+ $parts[] = array('PartNumber' => ($i + 1), 'ETag' => $response->header['etag']);
+ }
+
+ return $this->complete_multipart_upload($bucket, $filename, $upload_id, $parts);
+ }
+
+ /**
+ * Aborts all multipart uploads initiated before the specified date. This operation cannot be reversed.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param string|integer $when (Optional) The time and date to use for comparison. Accepts any value that <php:strtotime()> understands.
+ * @return CFArray A <CFArray> containing a series of 0 or more <CFResponse> objects, containing a parsed HTTP response.
+ */
+ public function abort_multipart_uploads_by_date($bucket, $when = null)
+ {
+ if ($this->use_batch_flow)
+ {
+ // @codeCoverageIgnoreStart
+ throw new S3_Exception(__FUNCTION__ . '() cannot be batch requested');
+ // @codeCoverageIgnoreEnd
+ }
+
+ $when = $when ? $when : time();
+ $handles = array();
+ $data = $this->list_multipart_uploads($bucket)->body;
+ $when = is_int($when) ? $when : strtotime($when);
+
+ if (!($data instanceof CFSimpleXML))
+ {
+ return false;
+ }
+
+ $list = $data->query('descendant-or-self::Upload/Initiated');
+
+ if (count($list) > 0)
+ {
+ foreach ($list as $node)
+ {
+ if (strtotime((string) $node) < $when)
+ {
+ $q = new CFBatchRequest();
+ $parent = $node->parent();
+
+ $upload_id = $parent
+ ->query('descendant-or-self::UploadId')
+ ->first()
+ ->to_string();
+
+ $filename = $parent
+ ->query('descendant-or-self::Key')
+ ->first()
+ ->to_string();
+
+ $handles[] = $this->abort_multipart_upload($bucket, $filename, $upload_id, array(
+ 'returnCurlHandle' => true
+ ));
+ }
+ }
+
+ $http = new CFRequest();
+ $responses = $http->send_multi_request($handles);
+
+ if (is_array($responses) && count($responses) > 0)
+ {
+ return new CFArray($responses);
+ }
+ }
+
+ return new CFArray();
+ }
+
+
+ /*%******************************************************************************************%*/
+ // WEBSITE CONFIGURATION
+
+ /**
+ * Enables and configures an Amazon S3 website using the corresponding bucket as the content source.
+ * The website will have one default domain name associated with it, which is the bucket name. If you
+ * attempt to configure an Amazon S3 website for a bucket whose name is not compatible with DNS,
+ * Amazon S3 returns an <code>InvalidBucketName</code> error. For more information on bucket names and DNS,
+ * refer to <a href="http://docs.amazonwebservices.com/AmazonS3/latest/dev/BucketRestrictions.html">Bucket Restrictions and Limitations.</a>
+ *
+ * To visit the bucket as a website a new endpoint is created in the following pattern:
+ * <code>http://&lt;bucketName&gt;.s3-website-&lt;region&gt;.amazonaws.com</code>. This is a sample URL
+ * for a bucket called <code>example-bucket</code> in the <code>us-east-1</code> region.
+ * (e.g., <code>http://example-bucket.s3-website-us-east-1.amazonaws.com</code>)
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>indexDocument</code> - <code>string</code> - Optional - The file path to use as the root document. The default value is <code>index.html</code>.</li>
+ * <li><code>errorDocument</code> - <code>string</code> - Optional - The file path to use as the error document. The default value is <code>error.html</code>.</li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function create_website_config($bucket, $opt = null)
+ {
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'PUT';
+ $opt['sub_resource'] = 'website';
+
+ $xml = simplexml_load_string($this->website_config_xml);
+ if (isset($opt['indexDocument']))
+ {
+ $xml->IndexDocument->Suffix = $opt['indexDocument'];
+ }
+ if (isset($opt['errorDocument']))
+ {
+ $xml->ErrorDocument->Key = $opt['errorDocument'];
+ }
+
+ $opt['body'] = $xml->asXML();
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Retrieves the website configuration for a bucket. The contents of this response are identical to the
+ * content submitted by the user during the website creation operation. If a website configuration has
+ * never been set, Amazon S3 will return a 404 error.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function get_website_config($bucket, $opt = null)
+ {
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'GET';
+ $opt['sub_resource'] = 'website';
+ $opt['headers'] = array(
+ 'Content-Type' => 'application/xml'
+ );
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ /**
+ * Removes the website configuration for a bucket.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function delete_website_config($bucket, $opt = null)
+ {
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'DELETE';
+ $opt['sub_resource'] = 'website';
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+
+ /*%******************************************************************************************%*/
+ // OBJECT EXPIRATION
+
+ /**
+ * Enables the ability to specify an expiry period for objects when an object should be deleted,
+ * measured as number of days from creation time. Amazon S3 guarantees that the object will be
+ * deleted when the expiration time is passed.
+ *
+ * @param string $bucket (Required) The name of the bucket to use.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>rules</code> - <code>string</code> - Required - The object expiration rule-sets to apply to the bucket. <ul>
+ * <li><code>x</code> - <code>array</code> - Required - This represents a simple array index. <ul>
+ * <li><code>id</code> - <code>string</code> - Optional - Unique identifier for the rule. The value cannot be longer than 255 characters.
+ * <li><code>prefix</code> - <code>string</code> - Required - The Amazon S3 object prefix which targets the file(s) for expiration.</li>
+ * <li><code>expiration</code> - <code>array</code> - Required - The container for the unit of measurement by which the expiration time is calculated. <ul>
+ * <li><code>days</code> - <code>integer</code> - Required - The number of days until the targetted objects expire from the bucket.</li>
+ * </ul></li>
+ * <li><code>enabled</code> - <code>boolean</code> - Optional - Whether or not to enable this rule-set. A value of <code>true</code> enables the rule-set. A value of <code>false</code> disables the rule-set. The default value is <code>true</code>.</li>
+ * </ul></li>
+ * </ul></li>
+ * <li><code>curlopts</code> - <code>array</code> - Optional - A set of values to pass directly into <code>curl_setopt()</code>, where the key is a pre-defined <code>CURLOPT_*</code> constant.</li>
+ * <li><code>returnCurlHandle</code> - <code>boolean</code> - Optional - A private toggle specifying that the cURL handle be returned rather than actually completing the request. This toggle is useful for manually managed batch requests.</li></ul>
+ * @return CFResponse A <CFResponse> object containing a parsed HTTP response.
+ */
+ public function create_object_expiration_config($bucket, $opt = null)
+ {
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'PUT';
+ $opt['sub_resource'] = 'lifecycle';
+ $opt['headers'] = array(
+ 'Content-Type' => 'application/xml'
+ );
+
+ $xml = simplexml_load_string($this->object_expiration_xml, $this->parser_class);
+
+ if (isset($opt['rules']) && is_array($opt['rules']) && count($opt['rules']))
+ {
+ foreach ($opt['rules'] as $rule)
+ {
+ $xrule = $xml->addChild('Rule');
+
+ // ID
+ if (isset($rule['id']))
+ {
+ if (strlen($rule['id']) > 255)
+ {
+ throw new S3_Exception('The "id" for a rule must not be more than 255 characters in the ' . __FUNCTION__ . ' method.');
+ }
+
+ $xrule->addChild('ID', $rule['id']);
+ }
+
+ // Prefix
+ if (isset($rule['prefix']))
+ {
+ $xrule->addChild('Prefix', $rule['prefix']);
+ }
+ else
+ {
+ throw new S3_Exception('Each rule requires a "prefix" in the ' . __FUNCTION__ . ' method.');
+ }
+
+ // Status
+ $enabled = 'Enabled';
+ if (isset($rule['enabled']))
+ {
+ if (is_bool($rule['enabled'])) // Boolean
+ {
+ $enabled = $rule['enabled'] ? 'Enabled' : 'Disabled';
+ }
+ elseif (is_string($rule['enabled'])) // String
+ {
+ $enabled = (strtolower($rule['enabled']) === 'true') ? 'Enabled' : 'Disabled';
+ }
+
+ $xrule->addChild('Status', $enabled);
+ }
+ else
+ {
+ $xrule->addChild('Status', 'Enabled');
+ }
+
+ // Expiration
+ if (isset($rule['expiration']))
+ {
+ $xexpiration = $xrule->addChild('Expiration');
+
+ if (isset($rule['expiration']['days']))
+ {
+ $xexpiration->addChild('Days', $rule['expiration']['days']);
+ }
+ }
+ else
+ {
+ throw new S3_Exception('Each rule requires a "expiration" in the ' . __FUNCTION__ . ' method.');
+ }
+ }
+ }
+
+ $opt['body'] = $xml->asXML();
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ public function get_object_expiration_config($bucket, $opt = null)
+ {
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'GET';
+ $opt['sub_resource'] = 'lifecycle';
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+ public function delete_object_expiration_config($bucket, $opt = null)
+ {
+ if (!$opt) $opt = array();
+ $opt['verb'] = 'DELETE';
+ $opt['sub_resource'] = 'lifecycle';
+
+ // Authenticate to S3
+ return $this->authenticate($bucket, $opt);
+ }
+
+
+ /*%******************************************************************************************%*/
+ // MISCELLANEOUS
+
+ /**
+ * Gets the canonical user ID and display name from the Amazon S3 server.
+ *
+ * @return array An associative array containing the `id` and `display_name` values.
+ */
+ public function get_canonical_user_id()
+ {
+ if ($this->use_batch_flow)
+ {
+ throw new S3_Exception(__FUNCTION__ . '() cannot be batch requested');
+ }
+
+ $id = $this->list_buckets();
+
+ return array(
+ 'id' => (string) $id->body->Owner->ID,
+ 'display_name' => (string) $id->body->Owner->DisplayName
+ );
+ }
+
+ /**
+ * Loads and registers the S3StreamWrapper class as a stream wrapper.
+ *
+ * @param string $protocol (Optional) The name of the protocol to register.
+ * @return boolean Whether or not the registration succeeded.
+ */
+ public function register_stream_wrapper($protocol = 's3')
+ {
+ require_once dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'extensions'
+ . DIRECTORY_SEPARATOR . 's3streamwrapper.class.php';
+
+ return S3StreamWrapper::register($this, $protocol);
+ }
+}
diff --git a/3rdparty/aws-sdk/utilities/array.class.php b/3rdparty/aws-sdk/utilities/array.class.php
new file mode 100644
index 00000000000..dea673546f8
--- /dev/null
+++ b/3rdparty/aws-sdk/utilities/array.class.php
@@ -0,0 +1,312 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * The <CFArray> object extends PHP's built-in <php:ArrayObject> object by providing convenience methods for
+ * rapidly manipulating array data. Specifically, the `CFArray` object is intended for working with
+ * <CFResponse> and <CFSimpleXML> objects that are returned by AWS services.
+ *
+ * @version 2012.01.17
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ * @link http://php.net/ArrayObject ArrayObject
+ */
+class CFArray extends ArrayObject
+{
+ /**
+ * Constructs a new instance of <CFArray>.
+ *
+ * @param mixed $input (Optional) The input parameter accepts an array or an Object. The default value is an empty array.
+ * @param integer $flags (Optional) Flags to control the behavior of the ArrayObject object. Defaults to <STD_PROP_LIST>.
+ * @param string $iterator_class (Optional) Specify the class that will be used for iteration of the <php:ArrayObject> object. <php:ArrayIterator> is the default class used.
+ * @return mixed Either an array of matches, or a single <CFSimpleXML> element.
+ */
+ public function __construct($input = array(), $flags = self::STD_PROP_LIST, $iterator_class = 'ArrayIterator')
+ {
+ // Provide a default value
+ $input = $input ? $input : array();
+
+ try {
+ return parent::__construct($input, $flags, $iterator_class);
+ }
+ catch (InvalidArgumentException $e)
+ {
+ throw new CFArray_Exception($e->getMessage());
+ }
+ }
+
+ /**
+ * Alternate approach to constructing a new instance. Supports chaining.
+ *
+ * @param mixed $input (Optional) The input parameter accepts an array or an Object. The default value is an empty array.
+ * @param integer $flags (Optional) Flags to control the behavior of the ArrayObject object. Defaults to <STD_PROP_LIST>.
+ * @param string $iterator_class (Optional) Specify the class that will be used for iteration of the <php:ArrayObject> object. <php:ArrayIterator> is the default class used.
+ * @return mixed Either an array of matches, or a single <CFSimpleXML> element.
+ */
+ public static function init($input = array(), $flags = self::STD_PROP_LIST, $iterator_class = 'ArrayIterator')
+ {
+ if (version_compare(PHP_VERSION, '5.3.0', '<'))
+ {
+ throw new Exception('PHP 5.3 or newer is required to instantiate a new class with CLASS::init().');
+ }
+
+ $self = get_called_class();
+ return new $self($input, $flags, $iterator_class);
+ }
+
+ /**
+ * Handles how the object is rendered when cast as a string.
+ *
+ * @return string The word "Array".
+ */
+ public function __toString()
+ {
+ return 'Array';
+ }
+
+
+ /*%******************************************************************************************%*/
+ // REFORMATTING
+
+ /**
+ * Maps each element in the <CFArray> object as an integer.
+ *
+ * @return array The contents of the <CFArray> object mapped as integers.
+ */
+ public function map_integer()
+ {
+ return array_map('intval', $this->getArrayCopy());
+ }
+
+ /**
+ * Maps each element in the CFArray object as a string.
+ *
+ * @param string $pcre (Optional) A Perl-Compatible Regular Expression (PCRE) to filter the names against.
+ * @return array The contents of the <CFArray> object mapped as strings. If there are no results, the method will return an empty array.
+ */
+ public function map_string($pcre = null)
+ {
+ $list = array_map('strval', $this->getArrayCopy());
+ $dlist = array();
+
+ if ($pcre)
+ {
+ foreach ($list as $item)
+ {
+ $dlist[] = preg_match($pcre, $item) ? $item : null;
+ }
+
+ $list = array_values(array_filter($dlist));
+ }
+
+ return $list;
+ }
+
+
+ /*%******************************************************************************************%*/
+ // CONFIRMATION
+
+ /**
+ * Verifies that _all_ responses were successful. A single failed request will cause <areOK()> to return false. Equivalent to <CFResponse::isOK()>, except it applies to all responses.
+ *
+ * @return boolean Whether _all_ requests were successful or not.
+ */
+ public function areOK()
+ {
+ $dlist = array();
+ $list = $this->getArrayCopy();
+
+ foreach ($list as $response)
+ {
+ if ($response instanceof CFResponse)
+ {
+ $dlist[] = $response->isOK();
+ }
+ }
+
+ return (array_search(false, $dlist, true) !== false) ? false : true;
+ }
+
+
+ /*%******************************************************************************************%*/
+ // ITERATING AND EXECUTING
+
+ /**
+ * Iterates over a <CFArray> object, and executes a function for each matched element.
+ *
+ * The callback function takes three parameters: <ul>
+ * <li><code>$item</code> - <code>mixed</code> - Optional - The individual node in the array.</li>
+ * <li><code>$key</code> - <code>mixed</code> - Optional - The key for the array node.</li>
+ * <li><code>$bind</code> - <code>mixed</code> - Optional - The variable that was passed into the $bind parameter.</li></ul>
+ *
+ * @param string|function $callback (Required) The callback function to execute. PHP 5.3 or newer can use an anonymous function.
+ * @param mixed $bind (Optional) A variable from the calling scope to pass-by-reference into the local scope of the callback function.
+ * @return CFArray The original <CFArray> object.
+ */
+ public function each($callback, &$bind = null)
+ {
+ $items = $this->getArrayCopy();
+
+ foreach ($items as $key => &$item)
+ {
+ $callback($item, $key, $bind);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Passes each element in the current <CFArray> object through a function, and produces a new <CFArray> object containing the return values.
+ *
+ * The callback function takes three parameters: <ul>
+ * <li><code>$item</code> - <code>mixed</code> - Optional - The individual node in the array.</li>
+ * <li><code>$key</code> - <code>mixed</code> - Optional - The key for the array node.</li>
+ * <li><code>$bind</code> - <code>mixed</code> - Optional - The variable that was passed into the $bind parameter.</li></ul>
+ *
+ * @param string|function $callback (Required) The callback function to execute. PHP 5.3 or newer can use an anonymous function.
+ * @param mixed $bind (Optional) A variable from the calling scope to pass-by-reference into the local scope of the callback function.
+ * @return CFArray A new <CFArray> object containing the return values.
+ */
+ public function map($callback, &$bind = null)
+ {
+ $items = $this->getArrayCopy();
+ $collect = array();
+
+ foreach ($items as $key => &$item)
+ {
+ $collect[] = $callback($item, $key, $bind);
+ }
+
+ return new CFArray($collect);
+ }
+
+ /**
+ * Filters the list of nodes by passing each value in the current <CFArray> object through a function. The node will be removed if the function returns `false`.
+ *
+ * The callback function takes three parameters: <ul>
+ * <li><code>$item</code> - <code>mixed</code> - Optional - The individual node in the array.</li>
+ * <li><code>$key</code> - <code>mixed</code> - Optional - The key for the array node.</li>
+ * <li><code>$bind</code> - <code>mixed</code> - Optional - The variable that was passed into the $bind parameter.</li></ul>
+ *
+ * @param string|function $callback (Required) The callback function to execute. PHP 5.3 or newer can use an anonymous function.
+ * @param mixed $bind (Optional) A variable from the calling scope to pass-by-reference into the local scope of the callback function.
+ * @return CFArray A new <CFArray> object containing the return values.
+ */
+ public function filter($callback, &$bind = null)
+ {
+ $items = $this->getArrayCopy();
+ $collect = array();
+
+ foreach ($items as $key => &$item)
+ {
+ if ($callback($item, $key, $bind) !== false)
+ {
+ $collect[] = $item;
+ }
+ }
+
+ return new CFArray($collect);
+ }
+
+ /**
+ * Alias for <filter()>. This functionality was incorrectly named _reduce_ in earlier versions of the SDK.
+ *
+ * @param string|function $callback (Required) The callback function to execute. PHP 5.3 or newer can use an anonymous function.
+ * @param mixed $bind (Optional) A variable from the calling scope to pass-by-reference into the local scope of the callback function.
+ * @return CFArray A new <CFArray> object containing the return values.
+ */
+ public function reduce($callback, &$bind = null)
+ {
+ return $this->filter($callback, $bind);
+ }
+
+
+ /*%******************************************************************************************%*/
+ // TRAVERSAL
+
+ /**
+ * Gets the first result in the array.
+ *
+ * @return mixed The first result in the <CFArray> object. Returns `false` if there are no items in the array.
+ */
+ public function first()
+ {
+ $items = $this->getArrayCopy();
+ return count($items) ? $items[0] : false;
+ }
+
+ /**
+ * Gets the last result in the array.
+ *
+ * @return mixed The last result in the <CFArray> object. Returns `false` if there are no items in the array.
+ */
+ public function last()
+ {
+ $items = $this->getArrayCopy();
+ return count($items) ? end($items) : false;
+ }
+
+ /**
+ * Removes all `null` values from an array.
+ *
+ * @return CFArray A new <CFArray> object containing the non-null values.
+ */
+ public function compress()
+ {
+ return new CFArray(array_filter($this->getArrayCopy()));
+ }
+
+ /**
+ * Reindexes the array, starting from zero.
+ *
+ * @return CFArray A new <CFArray> object with indexes starting at zero.
+ */
+ public function reindex()
+ {
+ return new CFArray(array_values($this->getArrayCopy()));
+ }
+
+
+ /*%******************************************************************************************%*/
+ // ALTERNATE FORMATS
+
+ /**
+ * Gets the current XML node as a JSON string.
+ *
+ * @return string The current XML node as a JSON string.
+ */
+ public function to_json()
+ {
+ return json_encode($this->getArrayCopy());
+ }
+
+ /**
+ * Gets the current XML node as a YAML string.
+ *
+ * @return string The current XML node as a YAML string.
+ */
+ public function to_yaml()
+ {
+ return sfYaml::dump($this->getArrayCopy(), 5);
+ }
+}
+
+class CFArray_Exception extends Exception {}
diff --git a/3rdparty/aws-sdk/utilities/batchrequest.class.php b/3rdparty/aws-sdk/utilities/batchrequest.class.php
new file mode 100644
index 00000000000..978283471a4
--- /dev/null
+++ b/3rdparty/aws-sdk/utilities/batchrequest.class.php
@@ -0,0 +1,126 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// EXCEPTIONS
+
+/**
+ * Default CFBatchRequest Exception.
+ */
+class CFBatchRequest_Exception extends Exception {}
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Simplifies the flow involved with managing and executing a batch request queue. Batch requesting is the
+ * ability to queue up a series of requests and execute them all in parallel. This allows for faster
+ * application performance when a lot of requests are involved.
+ *
+ * @version 2011.12.02
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+class CFBatchRequest extends CFRuntime
+{
+ /**
+ * Stores the cURL handles that are to be processed.
+ */
+ public $queue;
+
+ /**
+ * Stores the size of the request window.
+ */
+ public $limit;
+
+ /**
+ * The proxy to use for connecting.
+ */
+ public $proxy = null;
+
+ /**
+ * The helpers to use when connecting.
+ */
+ public $helpers = null;
+
+ /**
+ * The active credential set.
+ */
+ public $credentials;
+
+
+ /*%******************************************************************************************%*/
+ // CONSTRUCTOR
+
+ /**
+ * Constructs a new instance of this class.
+ *
+ * @param integer $limit (Optional) The size of the request window. Defaults to unlimited.
+ * @return boolean `false` if no valid values are set, otherwise `true`.
+ */
+ public function __construct($limit = null)
+ {
+ $this->queue = array();
+ $this->limit = $limit ? $limit : -1;
+ $this->credentials = new CFCredential(array());
+ return $this;
+ }
+
+ /**
+ * Sets the AWS credentials to use for the batch request.
+ *
+ * @param CFCredential $credentials (Required) The credentials to use for signing and making requests.
+ * @return $this A reference to the current instance.
+ */
+ public function use_credentials(CFCredential $credentials)
+ {
+ $this->credentials = $credentials;
+ return $this;
+ }
+
+ /**
+ * Adds a new cURL handle to the request queue.
+ *
+ * @param resource $handle (Required) A cURL resource to add to the queue.
+ * @return $this A reference to the current instance.
+ */
+ public function add($handle)
+ {
+ $this->queue[] = $handle;
+ return $this;
+ }
+
+ /**
+ * Executes the batch request queue.
+ *
+ * @param array $opt (DO NOT USE) Enabled for compatibility with the method this overrides, although any values passed will be ignored.
+ * @return array An indexed array of <CFResponse> objects.
+ */
+ public function send($opt = null)
+ {
+ $http = new $this->request_class(null, $this->proxy, null, $this->credentials);
+
+ // Make the request
+ $response = $http->send_multi_request($this->queue, array(
+ 'limit' => $this->limit
+ ));
+
+ return $response;
+ }
+}
diff --git a/3rdparty/aws-sdk/utilities/complextype.class.php b/3rdparty/aws-sdk/utilities/complextype.class.php
new file mode 100644
index 00000000000..e0509b9e368
--- /dev/null
+++ b/3rdparty/aws-sdk/utilities/complextype.class.php
@@ -0,0 +1,123 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Contains utility methods used for converting array, JSON, and YAML data types into query string keys.
+ *
+ * @version 2010.11.11
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+class CFComplexType
+{
+ /**
+ * Takes a JSON object, as a string, to convert to query string keys.
+ *
+ * @param string $json (Required) A JSON object. The JSON string should use canonical rules (e.g., double quotes, quoted keys) as is required by PHP's <php:json_encode()> function.
+ * @param string $member (Optional) The name of the "member" property that AWS uses for lists in certain services. Defaults to an empty string.
+ * @param string $default_key (Optional) The default key to use when the value for `$data` is a string. Defaults to an empty string.
+ * @return array The option group parameters to merge into another method's `$opt` parameter.
+ */
+ public static function json($json, $member = '', $default_key = '')
+ {
+ return self::option_group(json_decode($json, true), $member, $default_key);
+ }
+
+ /**
+ * Takes a YAML object, as a string, to convert to query string keys.
+ *
+ * @param string $yaml (Required) A YAML object.
+ * @param string $member (Optional) The name of the "member" property that AWS uses for lists in certain services. Defaults to an empty string.
+ * @param string $default_key (Optional) The default key to use when the value for `$data` is a string. Defaults to an empty string.
+ * @return array The option group parameters to merge into another method's `$opt` parameter.
+ */
+ public static function yaml($yaml, $member = '', $default_key = '')
+ {
+ return self::option_group(sfYaml::load($yaml), $member, $default_key);
+ }
+
+ /**
+ * Takes an associative array to convert to query string keys.
+ *
+ * @param array $map (Required) An associative array.
+ * @param string $member (Optional) The name of the "member" property that AWS uses for lists in certain services. Defaults to an empty string.
+ * @param string $default_key (Optional) The default key to use when the value for `$data` is a string. Defaults to an empty string.
+ * @return array The option group parameters to merge into another method's `$opt` parameter.
+ */
+ public static function map($map, $member = '', $default_key = '')
+ {
+ return self::option_group($map, $member, $default_key);
+ }
+
+ /**
+ * A protected method that is used by <json()>, <yaml()> and <map()>.
+ *
+ * @param string|array $data (Required) The data to iterate over.
+ * @param string $member (Optional) The name of the "member" property that AWS uses for lists in certain services. Defaults to an empty string.
+ * @param string $key (Optional) The default key to use when the value for `$data` is a string. Defaults to an empty string.
+ * @param array $out (Optional) INTERNAL ONLY. The array that contains the calculated values up to this point.
+ * @return array The option group parameters to merge into another method's `$opt` parameter.
+ */
+ public static function option_group($data, $member = '', $key = '', &$out = array())
+ {
+ $reset = $key;
+
+ if (is_array($data))
+ {
+ foreach ($data as $k => $v)
+ {
+ // Avoid 0-based indexes.
+ if (is_int($k))
+ {
+ $k = $k + 1;
+
+ if ($member !== '')
+ {
+ $key .= '.' . $member;
+ }
+ }
+
+ $key .= ($key === '' ? $k : '.' . $k);
+
+ if (is_array($v))
+ {
+ self::option_group($v, $member, $key, $out);
+ }
+ elseif ($v instanceof CFStepConfig)
+ {
+ self::option_group($v->get_config(), $member, $key, $out);
+ }
+ else
+ {
+ $out[$key] = $v;
+ }
+
+ $key = $reset;
+ }
+ }
+ else
+ {
+ $out[$key] = $data;
+ }
+
+ return $out;
+ }
+}
diff --git a/3rdparty/aws-sdk/utilities/credential.class.php b/3rdparty/aws-sdk/utilities/credential.class.php
new file mode 100644
index 00000000000..05c0ffcf6d8
--- /dev/null
+++ b/3rdparty/aws-sdk/utilities/credential.class.php
@@ -0,0 +1,157 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * The <CFCredential> class represents an individual credential set.
+ *
+ * @version 2011.11.15
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+class CFCredential implements ArrayAccess
+{
+ /**
+ * Stores the internal <php:ArrayObject> representation of the collection.
+ */
+ private $collection;
+
+ /**
+ * Default getter. Enables syntax such as $object->method->chained_method();. Also supports
+ * $object->key. Matching methods are prioritized over matching keys.
+ *
+ * @param string $name (Required) The name of the method to execute or key to retrieve.
+ * @return mixed The results of calling the function <code>$name()</code>, or the value of the key <code>$object[$name]</code>.
+ */
+ public function __get($name)
+ {
+ return $this[$name];
+ }
+
+ /**
+ * Default setter.
+ *
+ * @param string $name (Required) The name of the method to execute.
+ * @param string $value (Required) The value to pass to the method.
+ * @return mixed The results of calling the function, <code>$name</code>.
+ */
+ public function __set($name, $value)
+ {
+ $this[$name] = $value;
+ return $this;
+ }
+
+ /**
+ * Create a clone of the object.
+ *
+ * @return CFCredential A clone of the current instance.
+ */
+ public function __clone()
+ {
+ $this->collection = clone $this->collection;
+ }
+
+
+ /*%******************************************************************************************%*/
+ // CONSTRUCTOR
+
+ /**
+ * Constructs a new instance of the <CFCredential> class.
+ */
+ public function __construct($value = array())
+ {
+ $this->collection = new ArrayObject($value, ArrayObject::ARRAY_AS_PROPS);
+ }
+
+ /**
+ * Check whether or not a specific offset exists.
+ *
+ * @param integer $offset (Required) The location in the collection to verify the existence of.
+ * @return boolean A value of <code>true</code> indicates that the collection offset exists. A value of <code>false</code> indicates that it does not.
+ */
+ public function offsetExists($offset)
+ {
+ return $this->collection->offsetExists($offset);
+ }
+
+ /**
+ * Get the value for a specific offset.
+ *
+ * @param integer $offset (Required) The location in the collection to retrieve the value for.
+ * @return mixed The value of the collection offset. <code>NULL</code> is returned if the offset does not exist.
+ */
+ public function offsetGet($offset)
+ {
+ if ($this->collection->offsetExists($offset))
+ {
+ return $this->collection->offsetGet($offset);
+ }
+
+ return null;
+ }
+
+ /**
+ * Set the value for a specific offset.
+ *
+ * @param integer $offset (Required) The location in the collection to set a new value for.
+ * @param mixed $value (Required) The new value for the collection location.
+ * @return CFCredential A reference to the current collection.
+ */
+ public function offsetSet($offset, $value)
+ {
+ $this->collection->offsetSet($offset, $value);
+ return $this;
+ }
+
+ /**
+ * Unset the value for a specific offset.
+ *
+ * @param integer $offset (Required) The location in the collection to unset.
+ * @return CFCredential A reference to the current collection.
+ */
+ public function offsetUnset($offset)
+ {
+ $this->collection->offsetUnset($offset);
+ return $this;
+ }
+
+ /**
+ * Merge another instance of <CFCredential> onto this one.
+ *
+ * @param CFCredential $credential (Required) Another instance of <CFCredential>.
+ * @return CFCredential A reference to the current collection.
+ */
+ public function merge(CFCredential $credential)
+ {
+ $merged = array_merge($this->to_array(), $credential->to_array());
+ $this->collection->exchangeArray($merged);
+ return $this;
+ }
+
+ /**
+ * Retrieves the data as a standard array.
+ *
+ * @return array The data as an array.
+ */
+ public function to_array()
+ {
+ return $this->collection->getArrayCopy();
+ }
+}
diff --git a/3rdparty/aws-sdk/utilities/credentials.class.php b/3rdparty/aws-sdk/utilities/credentials.class.php
new file mode 100644
index 00000000000..2504a081b23
--- /dev/null
+++ b/3rdparty/aws-sdk/utilities/credentials.class.php
@@ -0,0 +1,125 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * The <CFCredentials> class enables developers to easily switch between multiple sets of credentials.
+ *
+ * @version 2011.11.15
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+class CFCredentials
+{
+ /**
+ * The key used to specify the default credential set
+ */
+ const DEFAULT_KEY = '@default';
+
+ /**
+ * The key used to identify inherited credentials
+ */
+ const INHERIT_KEY = '@inherit';
+
+ /**
+ * Stores the credentials
+ */
+ protected static $credentials = array();
+
+ /**
+ * Prevents this class from being constructed
+ */
+ final private function __construct() {}
+
+ /**
+ * Stores the credentials for re-use.
+ *
+ * @param array $credential_sets (Required) The named credential sets that should be made available to the application.
+ * @return void
+ */
+ public static function set(array $credential_sets)
+ {
+ // Make sure a default credential set is specified or can be inferred
+ if (count($credential_sets) === 1)
+ {
+ $credential_sets[self::DEFAULT_KEY] = reset($credential_sets);
+ }
+ elseif (!isset($credential_sets[self::DEFAULT_KEY]))
+ {
+ throw new CFCredentials_Exception('If more than one credential set is provided, a default credential set (identified by the key "' . self::DEFAULT_KEY . '") must be specified.');
+ }
+
+ // Resolve any @inherit tags
+ foreach ($credential_sets as $credential_name => &$credential_set)
+ {
+ if (is_array($credential_set))
+ {
+ foreach ($credential_set as $credential_key => &$credential_value)
+ {
+ if ($credential_key === self::INHERIT_KEY)
+ {
+ if (!isset($credential_sets[$credential_value]))
+ {
+ throw new CFCredentials_Exception('The credential set, "' . $credential_value . '", does not exist and cannot be inherited.');
+ }
+
+ $credential_set = array_merge($credential_sets[$credential_value], $credential_set);
+ unset($credential_set[self::INHERIT_KEY]);
+ }
+ }
+ }
+ }
+
+ // Normalize the value of the @default credential set
+ $default = $credential_sets[self::DEFAULT_KEY];
+ if (is_string($default))
+ {
+ if (!isset($credential_sets[$default]))
+ {
+ throw new CFCredentials_Exception('The credential set, "' . $default . '", does not exist and cannot be used as the default credential set.');
+ }
+
+ $credential_sets[self::DEFAULT_KEY] = $credential_sets[$default];
+ }
+
+ // Store the credentials
+ self::$credentials = $credential_sets;
+ }
+
+ /**
+ * Retrieves the requested credentials from the internal credential store.
+ *
+ * @param string $credential_set (Optional) The name of the credential set to retrieve. The default value is set in DEFAULT_KEY.
+ * @return stdClass A stdClass object where the properties represent the keys that were provided.
+ */
+ public static function get($credential_name = self::DEFAULT_KEY)
+ {
+ // Make sure the credential set exists
+ if (!isset(self::$credentials[$credential_name]))
+ {
+ throw new CFCredentials_Exception('The credential set, "' . $credential_name . '", does not exist and cannot be retrieved.');
+ }
+
+ // Return the credential set as an object
+ return new CFCredential(self::$credentials[$credential_name]);
+ }
+}
+
+class CFCredentials_Exception extends Exception {}
diff --git a/3rdparty/aws-sdk/utilities/gzipdecode.class.php b/3rdparty/aws-sdk/utilities/gzipdecode.class.php
new file mode 100644
index 00000000000..f80822a7048
--- /dev/null
+++ b/3rdparty/aws-sdk/utilities/gzipdecode.class.php
@@ -0,0 +1,377 @@
+<?php
+/*
+ * Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+/**
+ * SimplePie
+ *
+ * A PHP-Based RSS and Atom Feed Framework.
+ * Takes the hard work out of managing a complete RSS/Atom solution.
+ *
+ * Copyright (c) 2004-2010, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * * Neither the name of the SimplePie Team nor the names of its contributors may be used
+ * to endorse or promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
+ * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package SimplePie
+ * @version 1.3-dev
+ * @copyright 2004-2010 Ryan Parman, Geoffrey Sneddon, Ryan McCue
+ * @author Ryan Parman
+ * @author Geoffrey Sneddon
+ * @author Ryan McCue
+ * @link http://simplepie.org/ SimplePie
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ * @todo phpDoc comments
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Handles a variety of primary and edge cases around gzip/deflate decoding in PHP.
+ *
+ * @version 2011.02.21
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ * @link https://github.com/simplepie/simplepie/blob/master/SimplePie/gzdecode.php SimplePie_gzdecode
+ */
+class CFGzipDecode
+{
+ /**
+ * Compressed data
+ *
+ * @access private
+ * @see gzdecode::$data
+ */
+ public $compressed_data;
+
+ /**
+ * Size of compressed data
+ *
+ * @access private
+ */
+ public $compressed_size;
+
+ /**
+ * Minimum size of a valid gzip string
+ *
+ * @access private
+ */
+ public $min_compressed_size = 18;
+
+ /**
+ * Current position of pointer
+ *
+ * @access private
+ */
+ public $position = 0;
+
+ /**
+ * Flags (FLG)
+ *
+ * @access private
+ */
+ public $flags;
+
+ /**
+ * Uncompressed data
+ *
+ * @access public
+ * @see gzdecode::$compressed_data
+ */
+ public $data;
+
+ /**
+ * Modified time
+ *
+ * @access public
+ */
+ public $MTIME;
+
+ /**
+ * Extra Flags
+ *
+ * @access public
+ */
+ public $XFL;
+
+ /**
+ * Operating System
+ *
+ * @access public
+ */
+ public $OS;
+
+ /**
+ * Subfield ID 1
+ *
+ * @access public
+ * @see gzdecode::$extra_field
+ * @see gzdecode::$SI2
+ */
+ public $SI1;
+
+ /**
+ * Subfield ID 2
+ *
+ * @access public
+ * @see gzdecode::$extra_field
+ * @see gzdecode::$SI1
+ */
+ public $SI2;
+
+ /**
+ * Extra field content
+ *
+ * @access public
+ * @see gzdecode::$SI1
+ * @see gzdecode::$SI2
+ */
+ public $extra_field;
+
+ /**
+ * Original filename
+ *
+ * @access public
+ */
+ public $filename;
+
+ /**
+ * Human readable comment
+ *
+ * @access public
+ */
+ public $comment;
+
+ /**
+ * Don't allow anything to be set
+ *
+ * @access public
+ */
+ public function __set($name, $value)
+ {
+ trigger_error("Cannot write property $name", E_USER_ERROR);
+ }
+
+ /**
+ * Set the compressed string and related properties
+ *
+ * @access public
+ */
+ public function __construct($data)
+ {
+ $this->compressed_data = $data;
+ $this->compressed_size = strlen($data);
+ }
+
+ /**
+ * Decode the GZIP stream
+ *
+ * @access public
+ */
+ public function parse()
+ {
+ if ($this->compressed_size >= $this->min_compressed_size)
+ {
+ // Check ID1, ID2, and CM
+ if (substr($this->compressed_data, 0, 3) !== "\x1F\x8B\x08")
+ {
+ return false;
+ }
+
+ // Get the FLG (FLaGs)
+ $this->flags = ord($this->compressed_data[3]);
+
+ // FLG bits above (1 << 4) are reserved
+ if ($this->flags > 0x1F)
+ {
+ return false;
+ }
+
+ // Advance the pointer after the above
+ $this->position += 4;
+
+ // MTIME
+ $mtime = substr($this->compressed_data, $this->position, 4);
+ // Reverse the string if we're on a big-endian arch because l is the only signed long and is machine endianness
+ if (current(unpack('S', "\x00\x01")) === 1)
+ {
+ $mtime = strrev($mtime);
+ }
+ $this->MTIME = current(unpack('l', $mtime));
+ $this->position += 4;
+
+ // Get the XFL (eXtra FLags)
+ $this->XFL = ord($this->compressed_data[$this->position++]);
+
+ // Get the OS (Operating System)
+ $this->OS = ord($this->compressed_data[$this->position++]);
+
+ // Parse the FEXTRA
+ if ($this->flags & 4)
+ {
+ // Read subfield IDs
+ $this->SI1 = $this->compressed_data[$this->position++];
+ $this->SI2 = $this->compressed_data[$this->position++];
+
+ // SI2 set to zero is reserved for future use
+ if ($this->SI2 === "\x00")
+ {
+ return false;
+ }
+
+ // Get the length of the extra field
+ $len = current(unpack('v', substr($this->compressed_data, $this->position, 2)));
+ $position += 2;
+
+ // Check the length of the string is still valid
+ $this->min_compressed_size += $len + 4;
+ if ($this->compressed_size >= $this->min_compressed_size)
+ {
+ // Set the extra field to the given data
+ $this->extra_field = substr($this->compressed_data, $this->position, $len);
+ $this->position += $len;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ // Parse the FNAME
+ if ($this->flags & 8)
+ {
+ // Get the length of the filename
+ $len = strcspn($this->compressed_data, "\x00", $this->position);
+
+ // Check the length of the string is still valid
+ $this->min_compressed_size += $len + 1;
+ if ($this->compressed_size >= $this->min_compressed_size)
+ {
+ // Set the original filename to the given string
+ $this->filename = substr($this->compressed_data, $this->position, $len);
+ $this->position += $len + 1;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ // Parse the FCOMMENT
+ if ($this->flags & 16)
+ {
+ // Get the length of the comment
+ $len = strcspn($this->compressed_data, "\x00", $this->position);
+
+ // Check the length of the string is still valid
+ $this->min_compressed_size += $len + 1;
+ if ($this->compressed_size >= $this->min_compressed_size)
+ {
+ // Set the original comment to the given string
+ $this->comment = substr($this->compressed_data, $this->position, $len);
+ $this->position += $len + 1;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ // Parse the FHCRC
+ if ($this->flags & 2)
+ {
+ // Check the length of the string is still valid
+ $this->min_compressed_size += $len + 2;
+ if ($this->compressed_size >= $this->min_compressed_size)
+ {
+ // Read the CRC
+ $crc = current(unpack('v', substr($this->compressed_data, $this->position, 2)));
+
+ // Check the CRC matches
+ if ((crc32(substr($this->compressed_data, 0, $this->position)) & 0xFFFF) === $crc)
+ {
+ $this->position += 2;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ // Decompress the actual data
+ if (($this->data = gzinflate(substr($this->compressed_data, $this->position, -8))) === false)
+ {
+ return false;
+ }
+ else
+ {
+ $this->position = $this->compressed_size - 8;
+ }
+
+ // Check CRC of data
+ $crc = current(unpack('V', substr($this->compressed_data, $this->position, 4)));
+ $this->position += 4;
+ /*if (extension_loaded('hash') && sprintf('%u', current(unpack('V', hash('crc32b', $this->data)))) !== sprintf('%u', $crc))
+ {
+ return false;
+ }*/
+
+ // Check ISIZE of data
+ $isize = current(unpack('V', substr($this->compressed_data, $this->position, 4)));
+ $this->position += 4;
+ if (sprintf('%u', strlen($this->data) & 0xFFFFFFFF) !== sprintf('%u', $isize))
+ {
+ return false;
+ }
+
+ // Wow, against all odds, we've actually got a valid gzip string
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+}
diff --git a/3rdparty/aws-sdk/utilities/hadoopbase.class.php b/3rdparty/aws-sdk/utilities/hadoopbase.class.php
new file mode 100644
index 00000000000..eb8bc5c3a81
--- /dev/null
+++ b/3rdparty/aws-sdk/utilities/hadoopbase.class.php
@@ -0,0 +1,67 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Contains core functionality for Hadoop helpers.
+ *
+ * @version 2011.05.03
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ * @link http://hadoop.apache.org Apache Hadoop
+ */
+class CFHadoopBase
+{
+ /**
+ * Runs a specified script on the master node of your cluster.
+ *
+ * @param string $script (Required) The script to run with `script-runner.jar`.
+ * @param array $args (Optional) An indexed array of arguments to pass to the script.
+ * @return array A standard array that is intended to be passed into a <CFStepConfig> object.
+ */
+ public static function script_runner($script, $args = null)
+ {
+ if (!$args) $args = array();
+ array_unshift($args, $script);
+
+ return array(
+ 'Jar' => 's3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar',
+ 'Args' => $args
+ );
+ }
+
+ /**
+ * Prepares a Hive or Pig script before passing it to the script runner.
+ *
+ * @param string $type (Required) The type of script to run. [Allowed values: `hive`, `pig`].
+ * @param array $args (Optional) An indexed array of arguments to pass to the script.
+ * @return array A standard array that is intended to be passed into a <CFStepConfig> object.
+ * @link http://hive.apache.org Apache Hive
+ * @link http://pig.apache.org Apache Pig
+ */
+ public static function hive_pig_script($type, $args = null)
+ {
+ if (!$args) $args = array();
+ $args = is_array($args) ? $args : array($args);
+ $args = array_merge(array('--base-path', 's3://us-east-1.elasticmapreduce/libs/' . $type . '/'), $args);
+
+ return self::script_runner('s3://us-east-1.elasticmapreduce/libs/' . $type . '/' . $type . '-script', $args);
+ }
+}
diff --git a/3rdparty/aws-sdk/utilities/hadoopbootstrap.class.php b/3rdparty/aws-sdk/utilities/hadoopbootstrap.class.php
new file mode 100644
index 00000000000..baaa0c08d4b
--- /dev/null
+++ b/3rdparty/aws-sdk/utilities/hadoopbootstrap.class.php
@@ -0,0 +1,127 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Contains a set of pre-built Amazon EMR Hadoop Bootstrap Actions.
+ *
+ * @version 2011.05.03
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ * @link http://hadoop.apache.org Apache Hadoop
+ */
+class CFHadoopBootstrap extends CFHadoopBase
+{
+ // Config file types
+ const CONFIG_SITE = 'S';
+ const CONFIG_DEFAULT = 'D';
+ const CONFIG_CORE = 'C';
+ const CONFIG_HDFS = 'H';
+ const CONFIG_MAPREDUCE = 'M';
+
+ // Daemon types
+ const DAEMON_NAME_NODE = 'namenode';
+ const DAEMON_DATA_NODE = 'datanode';
+ const DAEMON_JOB_TRACKER = 'jobtracker';
+ const DAEMON_TASK_TRACKER = 'tasktracker';
+ const DAEMON_CLIENT = 'client';
+
+ /**
+ * Create a new run-if bootstrap action which lets you conditionally run bootstrap actions.
+ *
+ * @param string $condition (Required) The condition to evaluate. If <code>true</code>, the bootstrap action executes.
+ * @param array $args (Optional) An indexed array of arguments to pass to the script.
+ * @return array A configuration set to be provided when running a job flow.
+ */
+ public static function run_if($condition, $args = null)
+ {
+ if (!$args) $args = array();
+ $args = is_array($args) ? $args : array($args);
+
+ return self::script_runner('s3://us-east-1.elasticmapreduce/bootstrap-actions/run-if', $args);
+ }
+
+ /**
+ * Specify options to merge with Hadoop's default configuration.
+ *
+ * @param string $file (Required) The Hadoop configuration file to merge with. [Allowed values: <code>CFHadoopBootstrap::CONFIG_SITE</code>, <code>CFHadoopBootstrap::CONFIG_DEFAULT</code>, <code>CFHadoopBootstrap::CONFIG_CORE</code>, <code>CFHadoopBootstrap::CONFIG_HDFS</code>, <code>CFHadoopBootstrap::CONFIG_MAPREDUCE</code>]
+ * @param string|array $config (Required) This can either be an XML file in S3 (as <code>s3://bucket/path</code>), or an associative array of key-value pairs.
+ * @return array A configuration set to be provided when running a job flow.
+ */
+ public static function configure($file, $config)
+ {
+ $args = array();
+ $file_arg = '-' . $file;
+
+ if (is_string($config))
+ {
+ $args[] = $file_arg;
+ $args[] = $config;
+ }
+ elseif (is_array($config))
+ {
+ foreach ($config as $key => $value)
+ {
+ $args[] = $file_arg;
+ $args[] = $key . '=' . $value;
+ }
+ }
+
+ return self::script_runner('s3://us-east-1.elasticmapreduce/bootstrap-actions/configure-hadoop', $args);
+ }
+
+ /**
+ * Create a new bootstrap action which lets you configure Hadoop's daemons. The options are written to
+ * the <code>hadoop-user-env.sh</code> file.
+ *
+ * @param string $daemon_type (Required) The Hadoop daemon to configure.
+ * @param array $opt (Optional) An associative array of parameters that can have the following keys: <ul>
+ * <li><code>HeapSize</code> - <code>integer</code> - Optional - The requested heap size of the daemon, in megabytes.</li>
+ * <li><code>CLIOptions</code> - <code>string</code> - Optional - Additional Java command line arguments to pass to the daemon.</li>
+ * <li><code>Replace</code> - <code>boolean</code> - Optional - Whether or not the file should be replaced. A value of <code>true</code> will replace the existing configuration file. A value of <code>false</code> will append the options to the configuration file.</li></ul>
+ * @return array A configuration set to be provided when running a job flow.
+ */
+ public static function daemon($daemon_type, $opt = null)
+ {
+ if (!$opt) $opt = array();
+ $args = array();
+
+ foreach ($opt as $key => $value)
+ {
+ switch ($key)
+ {
+ case 'HeapSize':
+ $args[] = '--' . $daemon_type . '-heap-size=' . $value;
+ break;
+ case 'CLIOptions':
+ $args[] = '--' . $daemon_type . '-opts="' . $value . '"';
+ break;
+ case 'Replace':
+ if ((is_string($value) && $value === 'true') || (is_bool($value) && $value === true))
+ {
+ $args[] = '--replace';
+ }
+ break;
+ }
+ }
+
+ return self::script_runner('s3://us-east-1.elasticmapreduce/bootstrap-actions/configure-daemons', $args);
+ }
+}
diff --git a/3rdparty/aws-sdk/utilities/hadoopstep.class.php b/3rdparty/aws-sdk/utilities/hadoopstep.class.php
new file mode 100644
index 00000000000..2371e007489
--- /dev/null
+++ b/3rdparty/aws-sdk/utilities/hadoopstep.class.php
@@ -0,0 +1,98 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Contains a set of pre-built Amazon EMR Hadoop steps.
+ *
+ * @version 2011.05.03
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ * @link http://hadoop.apache.org Apache Hadoop
+ */
+class CFHadoopStep extends CFHadoopBase
+{
+ /**
+ * When ran as the first step in your job flow, enables the Hadoop debugging UI in the AWS
+ * Management Console.
+ *
+ * @return array A standard array that is intended to be passed into a <CFStepConfig> object.
+ */
+ public static function enable_debugging()
+ {
+ return self::script_runner('s3://us-east-1.elasticmapreduce/libs/state-pusher/0.1/fetch');
+ }
+
+ /**
+ * Step that installs Hive on your job flow.
+ *
+ * @return array A standard array that is intended to be passed into a <CFStepConfig> object.
+ * @link http://hive.apache.org Apache Hive
+ */
+ public static function install_hive()
+ {
+ return self::hive_pig_script('hive', '--install-hive');
+ }
+
+ /**
+ * Step that runs a Hive script on your job flow.
+ *
+ * @param string $script (Required) The script to run with `script-runner.jar`.
+ * @param array $args (Optional) An indexed array of arguments to pass to the script.
+ * @return array A standard array that is intended to be passed into a <CFStepConfig> object.
+ * @link http://hive.apache.org Apache Hive
+ */
+ public static function run_hive_script($script, $args = null)
+ {
+ if (!$args) $args = array();
+ $args = is_array($args) ? $args : array($args);
+ $args = array_merge(array('--run-hive-script', '--args', '-f', $script), $args);
+
+ return self::hive_pig_script('hive', $args);
+ }
+
+ /**
+ * Step that installs Pig on your job flow.
+ *
+ * @return array A standard array that is intended to be passed into a <CFStepConfig> object.
+ * @link http://pig.apache.org Apache Pig
+ */
+ public static function install_pig()
+ {
+ return self::hive_pig_script('pig', '--install-pig');
+ }
+
+ /**
+ * Step that runs a Pig script on your job flow.
+ *
+ * @param string $script (Required) The script to run with `script-runner.jar`.
+ * @param array $args (Optional) An indexed array of arguments to pass to the script.
+ * @return array A standard array that is intended to be passed into a <CFStepConfig> object.
+ * @link http://pig.apache.org Apache Pig
+ */
+ public static function run_pig_script($script, $args = null)
+ {
+ if (!$args) $args = array();
+ $args = is_array($args) ? $args : array($args);
+ $args = array_merge(array('--run-pig-script', '--args', '-f', $script), $args);
+
+ return self::hive_pig_script('pig', $args);
+ }
+}
diff --git a/3rdparty/aws-sdk/utilities/info.class.php b/3rdparty/aws-sdk/utilities/info.class.php
new file mode 100644
index 00000000000..2ba289a5f01
--- /dev/null
+++ b/3rdparty/aws-sdk/utilities/info.class.php
@@ -0,0 +1,69 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Contains a series of methods that provide information about the SDK.
+ *
+ * @version 2010.10.01
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+class CFInfo
+{
+ /**
+ * Gets information about the web service APIs that the SDK supports.
+ *
+ * @return array An associative array containing service classes and API versions.
+ */
+ public static function api_support()
+ {
+ $existing_classes = get_declared_classes();
+
+ foreach (glob(dirname(dirname(__FILE__)) . '/services/*.class.php') as $file)
+ {
+ include $file;
+ }
+
+ $with_sdk_classes = get_declared_classes();
+ $new_classes = array_diff($with_sdk_classes, $existing_classes);
+ $filtered_classes = array();
+ $collect = array();
+
+ foreach ($new_classes as $class)
+ {
+ if (strpos($class, 'Amazon') !== false)
+ {
+ $filtered_classes[] = $class;
+ }
+ }
+
+ $filtered_classes = array_values($filtered_classes);
+
+ foreach ($filtered_classes as $class)
+ {
+ $obj = new $class();
+ $collect[get_class($obj)] = $obj->api_version;
+ unset($obj);
+ }
+
+ return $collect;
+ }
+}
diff --git a/3rdparty/aws-sdk/utilities/json.class.php b/3rdparty/aws-sdk/utilities/json.class.php
new file mode 100644
index 00000000000..dfa83839863
--- /dev/null
+++ b/3rdparty/aws-sdk/utilities/json.class.php
@@ -0,0 +1,89 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Handles the conversion of data from JSON to other formats.
+ *
+ * @version 2012.01.27
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+class CFJSON
+{
+ /**
+ * Converts a JSON string to a CFSimpleXML object.
+ *
+ * @param string|array $json (Required) Pass either a valid JSON-formatted string, or an associative array.
+ * @param string $parser (Optional) The name of the class to use to parse the XML. This class should extend <code>SimpleXMLElement</code>. Has a default value of <code>CFSimpleXML</code>.
+ * @return CFSimpleXML An XML representation of the data.
+ */
+ public static function to_xml($json, $parser = 'CFSimpleXML')
+ {
+ // If we haven't parsed the JSON, do it
+ if (!is_array($json))
+ {
+ // Handle the case of JSON-encoded NULL value
+ if ($json === 'null')
+ {
+ $json = null;
+ }
+ else
+ {
+ $json = json_decode($json, true);
+
+ if (function_exists('json_last_error'))
+ {
+ // Did we encounter an error?
+ switch (json_last_error())
+ {
+ case JSON_ERROR_DEPTH:
+ throw new JSON_Exception('Maximum stack depth exceeded.');
+
+ case JSON_ERROR_CTRL_CHAR:
+ throw new JSON_Exception('Unexpected control character found.');
+
+ case JSON_ERROR_SYNTAX:
+ throw new JSON_Exception('Syntax error; Malformed JSON.');
+
+ case JSON_ERROR_STATE_MISMATCH:
+ throw new JSON_Exception('Invalid or malformed JSON.');
+ }
+ }
+ // json_last_error() not available?
+ elseif ($json === null)
+ {
+ throw new JSON_Exception('Unknown JSON error. Be sure to validate your JSON and read the notes on http://php.net/json_decode.');
+ }
+ }
+ }
+
+ // Hand off for the recursive work
+ $string = Array2DOM::arrayToXMLString($json, 'rootElement', true);
+
+ return simplexml_load_string($string, $parser, LIBXML_NOCDATA);
+ }
+}
+
+
+/**
+ * Default JSON Exception.
+ */
+class JSON_Exception extends Exception {}
diff --git a/3rdparty/aws-sdk/utilities/manifest.class.php b/3rdparty/aws-sdk/utilities/manifest.class.php
new file mode 100644
index 00000000000..82410a328db
--- /dev/null
+++ b/3rdparty/aws-sdk/utilities/manifest.class.php
@@ -0,0 +1,54 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Simplifies the process of generating manifests for the AWS Import/Export service.
+ *
+ * @version 2010.11.22
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+class CFManifest
+{
+
+ /**
+ * Takes a JSON object as a string to convert to a YAML manifest.
+ *
+ * @param string $json (Required) A JSON object. The JSON string should use canonical rules (e.g., double quotes, quoted keys) as is required by PHP's <php:json_encode()> function.
+ * @return string A YAML manifest document.
+ */
+ public static function json($json)
+ {
+ $map = json_decode($json, true);
+ return sfYaml::dump($map);
+ }
+
+ /**
+ * Takes an associative array to convert to a YAML manifest.
+ *
+ * @param array $map (Required) An associative array.
+ * @return string A YAML manifest document.
+ */
+ public static function map($map)
+ {
+ return sfYaml::dump($map);
+ }
+}
diff --git a/3rdparty/aws-sdk/utilities/mimetypes.class.php b/3rdparty/aws-sdk/utilities/mimetypes.class.php
new file mode 100644
index 00000000000..5fa23d3942a
--- /dev/null
+++ b/3rdparty/aws-sdk/utilities/mimetypes.class.php
@@ -0,0 +1,223 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Simplifies the process of looking up the content-types for a variety of file extensions.
+ *
+ * @version 2010.07.20
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+class CFMimeTypes
+{
+ /**
+ * Map of the extension-to-mime-types that we support.
+ */
+ public static $mime_types = array(
+ '3gp' => 'video/3gpp',
+ 'ai' => 'application/postscript',
+ 'aif' => 'audio/x-aiff',
+ 'aifc' => 'audio/x-aiff',
+ 'aiff' => 'audio/x-aiff',
+ 'asc' => 'text/plain',
+ 'atom' => 'application/atom+xml',
+ 'au' => 'audio/basic',
+ 'avi' => 'video/x-msvideo',
+ 'bcpio' => 'application/x-bcpio',
+ 'bin' => 'application/octet-stream',
+ 'bmp' => 'image/bmp',
+ 'cdf' => 'application/x-netcdf',
+ 'cgm' => 'image/cgm',
+ 'class' => 'application/octet-stream',
+ 'cpio' => 'application/x-cpio',
+ 'cpt' => 'application/mac-compactpro',
+ 'csh' => 'application/x-csh',
+ 'css' => 'text/css',
+ 'dcr' => 'application/x-director',
+ 'dif' => 'video/x-dv',
+ 'dir' => 'application/x-director',
+ 'djv' => 'image/vnd.djvu',
+ 'djvu' => 'image/vnd.djvu',
+ 'dll' => 'application/octet-stream',
+ 'dmg' => 'application/octet-stream',
+ 'dms' => 'application/octet-stream',
+ 'doc' => 'application/msword',
+ 'dtd' => 'application/xml-dtd',
+ 'dv' => 'video/x-dv',
+ 'dvi' => 'application/x-dvi',
+ 'dxr' => 'application/x-director',
+ 'eps' => 'application/postscript',
+ 'etx' => 'text/x-setext',
+ 'exe' => 'application/octet-stream',
+ 'ez' => 'application/andrew-inset',
+ 'flv' => 'video/x-flv',
+ 'gif' => 'image/gif',
+ 'gram' => 'application/srgs',
+ 'grxml' => 'application/srgs+xml',
+ 'gtar' => 'application/x-gtar',
+ 'gz' => 'application/x-gzip',
+ 'hdf' => 'application/x-hdf',
+ 'hqx' => 'application/mac-binhex40',
+ 'htm' => 'text/html',
+ 'html' => 'text/html',
+ 'ice' => 'x-conference/x-cooltalk',
+ 'ico' => 'image/x-icon',
+ 'ics' => 'text/calendar',
+ 'ief' => 'image/ief',
+ 'ifb' => 'text/calendar',
+ 'iges' => 'model/iges',
+ 'igs' => 'model/iges',
+ 'jnlp' => 'application/x-java-jnlp-file',
+ 'jp2' => 'image/jp2',
+ 'jpe' => 'image/jpeg',
+ 'jpeg' => 'image/jpeg',
+ 'jpg' => 'image/jpeg',
+ 'js' => 'application/x-javascript',
+ 'kar' => 'audio/midi',
+ 'latex' => 'application/x-latex',
+ 'lha' => 'application/octet-stream',
+ 'lzh' => 'application/octet-stream',
+ 'm3u' => 'audio/x-mpegurl',
+ 'm4a' => 'audio/mp4a-latm',
+ 'm4p' => 'audio/mp4a-latm',
+ 'm4u' => 'video/vnd.mpegurl',
+ 'm4v' => 'video/x-m4v',
+ 'mac' => 'image/x-macpaint',
+ 'man' => 'application/x-troff-man',
+ 'mathml' => 'application/mathml+xml',
+ 'me' => 'application/x-troff-me',
+ 'mesh' => 'model/mesh',
+ 'mid' => 'audio/midi',
+ 'midi' => 'audio/midi',
+ 'mif' => 'application/vnd.mif',
+ 'mov' => 'video/quicktime',
+ 'movie' => 'video/x-sgi-movie',
+ 'mp2' => 'audio/mpeg',
+ 'mp3' => 'audio/mpeg',
+ 'mp4' => 'video/mp4',
+ 'mpe' => 'video/mpeg',
+ 'mpeg' => 'video/mpeg',
+ 'mpg' => 'video/mpeg',
+ 'mpga' => 'audio/mpeg',
+ 'ms' => 'application/x-troff-ms',
+ 'msh' => 'model/mesh',
+ 'mxu' => 'video/vnd.mpegurl',
+ 'nc' => 'application/x-netcdf',
+ 'oda' => 'application/oda',
+ 'ogg' => 'application/ogg',
+ 'ogv' => 'video/ogv',
+ 'pbm' => 'image/x-portable-bitmap',
+ 'pct' => 'image/pict',
+ 'pdb' => 'chemical/x-pdb',
+ 'pdf' => 'application/pdf',
+ 'pgm' => 'image/x-portable-graymap',
+ 'pgn' => 'application/x-chess-pgn',
+ 'pic' => 'image/pict',
+ 'pict' => 'image/pict',
+ 'png' => 'image/png',
+ 'pnm' => 'image/x-portable-anymap',
+ 'pnt' => 'image/x-macpaint',
+ 'pntg' => 'image/x-macpaint',
+ 'ppm' => 'image/x-portable-pixmap',
+ 'ppt' => 'application/vnd.ms-powerpoint',
+ 'ps' => 'application/postscript',
+ 'qt' => 'video/quicktime',
+ 'qti' => 'image/x-quicktime',
+ 'qtif' => 'image/x-quicktime',
+ 'ra' => 'audio/x-pn-realaudio',
+ 'ram' => 'audio/x-pn-realaudio',
+ 'ras' => 'image/x-cmu-raster',
+ 'rdf' => 'application/rdf+xml',
+ 'rgb' => 'image/x-rgb',
+ 'rm' => 'application/vnd.rn-realmedia',
+ 'roff' => 'application/x-troff',
+ 'rtf' => 'text/rtf',
+ 'rtx' => 'text/richtext',
+ 'sgm' => 'text/sgml',
+ 'sgml' => 'text/sgml',
+ 'sh' => 'application/x-sh',
+ 'shar' => 'application/x-shar',
+ 'silo' => 'model/mesh',
+ 'sit' => 'application/x-stuffit',
+ 'skd' => 'application/x-koan',
+ 'skm' => 'application/x-koan',
+ 'skp' => 'application/x-koan',
+ 'skt' => 'application/x-koan',
+ 'smi' => 'application/smil',
+ 'smil' => 'application/smil',
+ 'snd' => 'audio/basic',
+ 'so' => 'application/octet-stream',
+ 'spl' => 'application/x-futuresplash',
+ 'src' => 'application/x-wais-source',
+ 'sv4cpio' => 'application/x-sv4cpio',
+ 'sv4crc' => 'application/x-sv4crc',
+ 'svg' => 'image/svg+xml',
+ 'swf' => 'application/x-shockwave-flash',
+ 't' => 'application/x-troff',
+ 'tar' => 'application/x-tar',
+ 'tcl' => 'application/x-tcl',
+ 'tex' => 'application/x-tex',
+ 'texi' => 'application/x-texinfo',
+ 'texinfo' => 'application/x-texinfo',
+ 'tif' => 'image/tiff',
+ 'tiff' => 'image/tiff',
+ 'tr' => 'application/x-troff',
+ 'tsv' => 'text/tab-separated-values',
+ 'txt' => 'text/plain',
+ 'ustar' => 'application/x-ustar',
+ 'vcd' => 'application/x-cdlink',
+ 'vrml' => 'model/vrml',
+ 'vxml' => 'application/voicexml+xml',
+ 'wav' => 'audio/x-wav',
+ 'wbmp' => 'image/vnd.wap.wbmp',
+ 'wbxml' => 'application/vnd.wap.wbxml',
+ 'webm' => 'video/webm',
+ 'wml' => 'text/vnd.wap.wml',
+ 'wmlc' => 'application/vnd.wap.wmlc',
+ 'wmls' => 'text/vnd.wap.wmlscript',
+ 'wmlsc' => 'application/vnd.wap.wmlscriptc',
+ 'wmv' => 'video/x-ms-wmv',
+ 'wrl' => 'model/vrml',
+ 'xbm' => 'image/x-xbitmap',
+ 'xht' => 'application/xhtml+xml',
+ 'xhtml' => 'application/xhtml+xml',
+ 'xls' => 'application/vnd.ms-excel',
+ 'xml' => 'application/xml',
+ 'xpm' => 'image/x-xpixmap',
+ 'xsl' => 'application/xml',
+ 'xslt' => 'application/xslt+xml',
+ 'xul' => 'application/vnd.mozilla.xul+xml',
+ 'xwd' => 'image/x-xwindowdump',
+ 'xyz' => 'chemical/x-xyz',
+ 'zip' => 'application/zip',
+ );
+
+ /**
+ * Attempt to match the file extension to a known mime-type.
+ *
+ * @param string $ext (Required) The file extension to attempt to map.
+ * @return string The mime-type to use for the file extension.
+ */
+ public static function get_mimetype($ext)
+ {
+ return (isset(self::$mime_types[$ext]) ? self::$mime_types[$ext] : 'application/octet-stream');
+ }
+}
diff --git a/3rdparty/aws-sdk/utilities/policy.class.php b/3rdparty/aws-sdk/utilities/policy.class.php
new file mode 100644
index 00000000000..9c53fee0d72
--- /dev/null
+++ b/3rdparty/aws-sdk/utilities/policy.class.php
@@ -0,0 +1,134 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Simplifies the process of signing JSON policy documents.
+ *
+ * @version 2011.04.25
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+class CFPolicy
+{
+ /**
+ * Stores the object that contains the authentication credentials.
+ */
+ public $auth;
+
+ /**
+ * Stores the policy object that we're working with.
+ */
+ public $json_policy;
+
+ /**
+ * Constructs a new instance of this class.
+ *
+ * @param CFRuntime $auth (Required) An instance of any authenticated AWS object that is an instance of <CFRuntime> (e.g. <AmazonEC2>, <AmazonS3>).
+ * @param string|array $policy (Required) The associative array representing the S3 policy to use, or a string of JSON content.
+ * @return $this A reference to the current instance.
+ * @link http://docs.amazonwebservices.com/AmazonS3/2006-03-01/dev/index.html?HTTPPOSTForms.html S3 Policies
+ * @link http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?AccessPolicyLanguage.html Access Policy Language
+ */
+ public function __construct($auth, $policy)
+ {
+ $this->auth = $auth;
+
+ if (is_array($policy)) // We received an associative array...
+ {
+ $this->json_policy = json_encode($policy);
+ }
+ else // We received a valid, parseable JSON string...
+ {
+ $this->json_policy = json_encode(json_decode($policy, true));
+ }
+
+ return $this;
+ }
+
+ /**
+ * Alternate approach to constructing a new instance. Supports chaining.
+ *
+ * @param CFRuntime $auth (Required) An instance of any authenticated AWS object that is an instance of <CFRuntime> (e.g. <AmazonEC2>, <AmazonS3>).
+ * @param string|array $policy (Required) The associative array representing the S3 policy to use, or a string of JSON content.
+ * @return $this A reference to the current instance.
+ */
+ public static function init($auth, $policy)
+ {
+ if (version_compare(PHP_VERSION, '5.3.0', '<'))
+ {
+ throw new Exception('PHP 5.3 or newer is required to instantiate a new class with CLASS::init().');
+ }
+
+ $self = get_called_class();
+ return new $self($auth, $policy);
+ }
+
+ /**
+ * Get the key from the authenticated instance.
+ *
+ * @return string The key from the authenticated instance.
+ */
+ public function get_key()
+ {
+ return $this->auth->key;
+ }
+
+ /**
+ * Base64-encodes the JSON string.
+ *
+ * @return string The Base64-encoded version of the JSON string.
+ */
+ public function get_policy()
+ {
+ return base64_encode($this->json_policy);
+ }
+
+ /**
+ * Gets the JSON string with the whitespace removed.
+ *
+ * @return string The JSON string without extraneous whitespace.
+ */
+ public function get_json()
+ {
+ return $this->json_policy;
+ }
+
+ /**
+ * Gets the JSON string with the whitespace removed.
+ *
+ * @return string The Base64-encoded, signed JSON string.
+ */
+ public function get_policy_signature()
+ {
+ return base64_encode(hash_hmac('sha1', $this->get_policy(), $this->auth->secret_key));
+ }
+
+ /**
+ * Decode a policy that was returned from the service.
+ *
+ * @param string $response (Required) The policy returned by AWS that you want to decode into an object.
+ * @return string The Base64-encoded, signed JSON string.
+ */
+ public static function decode_policy($response)
+ {
+ return json_decode(urldecode($response), true);
+ }
+}
diff --git a/3rdparty/aws-sdk/utilities/request.class.php b/3rdparty/aws-sdk/utilities/request.class.php
new file mode 100644
index 00000000000..8e049fb5169
--- /dev/null
+++ b/3rdparty/aws-sdk/utilities/request.class.php
@@ -0,0 +1,70 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Wraps the underlying `RequestCore` class with some AWS-specific customizations.
+ *
+ * @version 2011.12.02
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+class CFRequest extends RequestCore
+{
+ /**
+ * The default class to use for HTTP Requests (defaults to <CFRequest>).
+ */
+ public $request_class = 'CFRequest';
+
+ /**
+ * The default class to use for HTTP Responses (defaults to <CFResponse>).
+ */
+ public $response_class = 'CFResponse';
+
+ /**
+ * The active credential set.
+ */
+ public $credentials;
+
+
+ /*%******************************************************************************************%*/
+ // CONSTRUCTOR
+
+ /**
+ * Constructs a new instance of this class.
+ *
+ * @param string $url (Optional) The URL to request or service endpoint to query.
+ * @param string $proxy (Optional) The faux-url to use for proxy settings. Takes the following format: `proxy://user:pass@hostname:port`
+ * @param array $helpers (Optional) An associative array of classnames to use for request, and response functionality. Gets passed in automatically by the calling class.
+ * @param CFCredential $credentials (Required) The credentials to use for signing and making requests.
+ * @return $this A reference to the current instance.
+ */
+ public function __construct($url = null, $proxy = null, $helpers = null, CFCredential $credentials = null)
+ {
+ parent::__construct($url, $proxy, $helpers);
+
+ // Standard settings for all requests
+ $this->set_useragent(CFRUNTIME_USERAGENT);
+ $this->credentials = $credentials;
+ $this->cacert_location = ($this->credentials['certificate_authority'] ? $this->credentials['certificate_authority'] : false);
+
+ return $this;
+ }
+}
diff --git a/3rdparty/aws-sdk/utilities/response.class.php b/3rdparty/aws-sdk/utilities/response.class.php
new file mode 100644
index 00000000000..740d55d5d94
--- /dev/null
+++ b/3rdparty/aws-sdk/utilities/response.class.php
@@ -0,0 +1,29 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Wraps the underlying `ResponseCore` class with some AWS-specific customizations.
+ *
+ * @version 2010.10.11
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+class CFResponse extends ResponseCore {}
diff --git a/3rdparty/aws-sdk/utilities/simplexml.class.php b/3rdparty/aws-sdk/utilities/simplexml.class.php
new file mode 100644
index 00000000000..ba93b9ea3c0
--- /dev/null
+++ b/3rdparty/aws-sdk/utilities/simplexml.class.php
@@ -0,0 +1,248 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Wraps the underlying `SimpleXMLIterator` class with enhancements for rapidly traversing the DOM tree,
+ * converting types, and comparisons.
+ *
+ * @version 2012.01.17
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ * @link http://php.net/SimpleXML SimpleXML
+ */
+class CFSimpleXML extends SimpleXMLIterator
+{
+ /**
+ * Stores the namespace name to use in XPath queries.
+ */
+ public $xml_ns;
+
+ /**
+ * Stores the namespace URI to use in XPath queries.
+ */
+ public $xml_ns_url;
+
+ /**
+ * Catches requests made to methods that don't exist. Specifically, looks for child nodes via XPath.
+ *
+ * @param string $name (Required) The name of the method.
+ * @param array $arguments (Required) The arguments passed to the method.
+ * @return mixed Either an array of matches, or a single <CFSimpleXML> element.
+ */
+ public function __call($name, $arguments)
+ {
+ // Remap $this
+ $self = $this;
+
+ // Re-base the XML
+ $self = new CFSimpleXML($self->asXML());
+
+ // Determine XPath query
+ $self->xpath_expression = 'descendant-or-self::' . $name;
+
+ // Get the results and augment with CFArray
+ $results = $self->xpath($self->xpath_expression);
+ if (!count($results)) return false;
+ $results = new CFArray($results);
+
+ // If an integer was passed, return only that result
+ if (isset($arguments[0]) && is_int($arguments[0]))
+ {
+ if (isset($results[$arguments[0]]))
+ {
+ return $results[$arguments[0]];
+ }
+
+ return false;
+ }
+
+ return $results;
+ }
+
+ /**
+ * Alternate approach to constructing a new instance. Supports chaining.
+ *
+ * @param string $data (Required) A well-formed XML string or the path or URL to an XML document if $data_is_url is <code>true</code>.
+ * @param integer $options (Optional) Used to specify additional LibXML parameters. The default value is <code>0</code>.
+ * @param boolean $data_is_url (Optional) Specify a value of <code>true</code> to specify that data is a path or URL to an XML document instead of string data. The default value is <code>false</code>.
+ * @param string $ns (Optional) The XML namespace to return values for.
+ * @param boolean $is_prefix (Optional) (No description provided by PHP.net.)
+ * @return CFSimpleXML Creates a new <CFSimpleXML> element.
+ */
+ public static function init($data, $options = 0, $data_is_url, $ns, $is_prefix = false)
+ {
+ if (version_compare(PHP_VERSION, '5.3.0', '<'))
+ {
+ throw new Exception('PHP 5.3 or newer is required to instantiate a new class with CLASS::init().');
+ }
+
+ $self = get_called_class();
+ return new $self($data, $options, $data_is_url, $ns, $is_prefix);
+ }
+
+
+ /*%******************************************************************************************%*/
+ // TRAVERSAL
+
+ /**
+ * Wraps the results of an XPath query in a <CFArray> object.
+ *
+ * @param string $expr (Required) The XPath expression to use to query the XML response.
+ * @return CFArray A <CFArray> object containing the results of the XPath query.
+ */
+ public function query($expr)
+ {
+ return new CFArray($this->xpath($expr));
+ }
+
+ /**
+ * Gets the parent or a preferred ancestor of the current element.
+ *
+ * @param string $node (Optional) Name of the ancestor element to match and return.
+ * @return CFSimpleXML A <CFSimpleXML> object containing the requested node.
+ */
+ public function parent($node = null)
+ {
+ if ($node)
+ {
+ $parents = $this->xpath('ancestor-or-self::' . $node);
+ }
+ else
+ {
+ $parents = $this->xpath('parent::*');
+ }
+
+ return $parents[0];
+ }
+
+
+ /*%******************************************************************************************%*/
+ // ALTERNATE FORMATS
+
+ /**
+ * Gets the current XML node as a true string.
+ *
+ * @return string The current XML node as a true string.
+ */
+ public function to_string()
+ {
+ return (string) $this;
+ }
+
+ /**
+ * Gets the current XML node as <CFArray>, a child class of PHP's <php:ArrayObject> class.
+ *
+ * @return CFArray The current XML node as a <CFArray> object.
+ */
+ public function to_array()
+ {
+ return new CFArray(json_decode(json_encode($this), true));
+ }
+
+ /**
+ * Gets the current XML node as a stdClass object.
+ *
+ * @return array The current XML node as a stdClass object.
+ */
+ public function to_stdClass()
+ {
+ return json_decode(json_encode($this));
+ }
+
+ /**
+ * Gets the current XML node as a JSON string.
+ *
+ * @return string The current XML node as a JSON string.
+ */
+ public function to_json()
+ {
+ return json_encode($this);
+ }
+
+ /**
+ * Gets the current XML node as a YAML string.
+ *
+ * @return string The current XML node as a YAML string.
+ */
+ public function to_yaml()
+ {
+ return sfYaml::dump(json_decode(json_encode($this), true), 5);
+ }
+
+
+ /*%******************************************************************************************%*/
+ // COMPARISONS
+
+ /**
+ * Whether or not the current node exactly matches the compared value.
+ *
+ * @param string $value (Required) The value to compare the current node to.
+ * @return boolean Whether or not the current node exactly matches the compared value.
+ */
+ public function is($value)
+ {
+ return ((string) $this === $value);
+ }
+
+ /**
+ * Whether or not the current node contains the compared value.
+ *
+ * @param string $value (Required) The value to use to determine whether it is contained within the node.
+ * @return boolean Whether or not the current node contains the compared value.
+ */
+ public function contains($value)
+ {
+ return (stripos((string) $this, $value) !== false);
+ }
+
+ /**
+ * Whether or not the current node matches the regular expression pattern.
+ *
+ * @param string $pattern (Required) The pattern to match the current node against.
+ * @return boolean Whether or not the current node matches the pattern.
+ */
+ public function matches($pattern)
+ {
+ return (bool) preg_match($pattern, (string) $this);
+ }
+
+ /**
+ * Whether or not the current node starts with the compared value.
+ *
+ * @param string $value (Required) The value to compare the current node to.
+ * @return boolean Whether or not the current node starts with the compared value.
+ */
+ public function starts_with($value)
+ {
+ return $this->matches("@^$value@u");
+ }
+
+ /**
+ * Whether or not the current node ends with the compared value.
+ *
+ * @param string $value (Required) The value to compare the current node to.
+ * @return boolean Whether or not the current node ends with the compared value.
+ */
+ public function ends_with($value)
+ {
+ return $this->matches("@$value$@u");
+ }
+}
diff --git a/3rdparty/aws-sdk/utilities/stacktemplate.class.php b/3rdparty/aws-sdk/utilities/stacktemplate.class.php
new file mode 100644
index 00000000000..1e29ef34036
--- /dev/null
+++ b/3rdparty/aws-sdk/utilities/stacktemplate.class.php
@@ -0,0 +1,52 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Simplifies the process of preparing JSON stack templates.
+ *
+ * @version 2011.02.03
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+class CFStackTemplate
+{
+ /**
+ * Removes whitespace from a JSON template.
+ *
+ * @param string $template (Required) A JSON representation of the stack template. Must have <a href="http://docs.php.net/manual/en/function.json-decode.php#refsect1-function.json-decode-examples">strict JSON-specific formatting</a>.
+ * @return string A JSON representation of the template.
+ */
+ public static function json($template)
+ {
+ return json_encode(json_decode($template, true));
+ }
+
+ /**
+ * Converts an associative array (map) of the template into a JSON string.
+ *
+ * @param array $template (Required) An associative array that maps directly to its JSON counterpart.
+ * @return string A JSON representation of the template.
+ */
+ public static function map($template)
+ {
+ return json_encode($template);
+ }
+}
diff --git a/3rdparty/aws-sdk/utilities/stepconfig.class.php b/3rdparty/aws-sdk/utilities/stepconfig.class.php
new file mode 100644
index 00000000000..71492995f44
--- /dev/null
+++ b/3rdparty/aws-sdk/utilities/stepconfig.class.php
@@ -0,0 +1,91 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Contains functionality for simplifying Amazon EMR Hadoop steps.
+ *
+ * @version 2010.11.16
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+class CFStepConfig
+{
+
+ /**
+ * Stores the configuration map.
+ */
+ public $config;
+
+ /**
+ * Constructs a new instance of this class.
+ *
+ * @param array $config (Required) An associative array representing the Hadoop step configuration.
+ * @return $this A reference to the current instance.
+ */
+ public function __construct($config)
+ {
+ // Handle Hadoop jar arguments
+ if (isset($config['HadoopJarStep']['Args']) && $args = $config['HadoopJarStep']['Args'])
+ {
+ $config['HadoopJarStep']['Args'] = is_array($args) ? $args : array($args);
+ }
+
+ $this->config = $config;
+ }
+
+ /**
+ * Constructs a new instance of this class, and allows chaining.
+ *
+ * @param array $config (Required) An associative array representing the Hadoop step configuration.
+ * @return $this A reference to the current instance.
+ */
+ public static function init($config)
+ {
+ if (version_compare(PHP_VERSION, '5.3.0', '<'))
+ {
+ throw new Exception('PHP 5.3 or newer is required to instantiate a new class with CLASS::init().');
+ }
+
+ $self = get_called_class();
+ return new $self($config);
+ }
+
+ /**
+ * Returns a JSON representation of the object when typecast as a string.
+ *
+ * @return string A JSON representation of the object.
+ * @link http://www.php.net/manual/en/language.oop5.magic.php#language.oop5.magic.tostring PHP Magic Methods
+ */
+ public function __toString()
+ {
+ return json_encode($this->config);
+ }
+
+ /**
+ * Returns the configuration data.
+ *
+ * @return array The configuration data.
+ */
+ public function get_config()
+ {
+ return $this->config;
+ }
+}
diff --git a/3rdparty/aws-sdk/utilities/utilities.class.php b/3rdparty/aws-sdk/utilities/utilities.class.php
new file mode 100755
index 00000000000..d4d1120abff
--- /dev/null
+++ b/3rdparty/aws-sdk/utilities/utilities.class.php
@@ -0,0 +1,399 @@
+<?php
+/*
+ * Copyright 2010-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License").
+ * You may not use this file except in compliance with the License.
+ * A copy of the License is located at
+ *
+ * http://aws.amazon.com/apache2.0
+ *
+ * or in the "license" file accompanying this file. This file is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+ * express or implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+
+/*%******************************************************************************************%*/
+// CLASS
+
+/**
+ * Contains a set of utility methods for connecting to, and working with, AWS.
+ *
+ * @version 2010.09.30
+ * @license See the included NOTICE.md file for more information.
+ * @copyright See the included NOTICE.md file for more information.
+ * @link http://aws.amazon.com/php/ PHP Developer Center
+ */
+class CFUtilities
+{
+
+ /*%******************************************************************************************%*/
+ // CONSTANTS
+
+ /**
+ * Define the RFC 2616-compliant date format.
+ */
+ const DATE_FORMAT_RFC2616 = 'D, d M Y H:i:s \G\M\T';
+
+ /**
+ * Define the ISO-8601-compliant date format.
+ */
+ const DATE_FORMAT_ISO8601 = 'Y-m-d\TH:i:s\Z';
+
+ /**
+ * Define the MySQL-compliant date format.
+ */
+ const DATE_FORMAT_MYSQL = 'Y-m-d H:i:s';
+
+ /**
+ * Define the Signature v4 date format.
+ */
+ const DATE_FORMAT_SIGV4 = 'Ymd\THis\Z';
+
+
+ /*%******************************************************************************************%*/
+ // METHODS
+
+ /**
+ * Constructs a new instance of this class.
+ *
+ * @return $this A reference to the current instance.
+ */
+ public function __construct()
+ {
+ return $this;
+ }
+
+ /**
+ * Retrieves the value of a class constant, while avoiding the `T_PAAMAYIM_NEKUDOTAYIM` error. Misspelled because `const` is a reserved word.
+ *
+ * @param object $class (Required) An instance of the class containing the constant.
+ * @param string $const (Required) The name of the constant to retrieve.
+ * @return mixed The value of the class constant.
+ */
+ public function konst($class, $const)
+ {
+ if (is_string($class))
+ {
+ $ref = new ReflectionClass($class);
+ }
+ else
+ {
+ $ref = new ReflectionObject($class);
+ }
+
+ return $ref->getConstant($const);
+ }
+
+ /**
+ * Convert a HEX value to Base64.
+ *
+ * @param string $str (Required) Value to convert.
+ * @return string Base64-encoded string.
+ */
+ public function hex_to_base64($str)
+ {
+ $raw = '';
+
+ for ($i = 0; $i < strlen($str); $i += 2)
+ {
+ $raw .= chr(hexdec(substr($str, $i, 2)));
+ }
+
+ return base64_encode($raw);
+ }
+
+ /**
+ * Convert an associative array into a query string.
+ *
+ * @param array $array (Required) Array to convert.
+ * @return string URL-friendly query string.
+ */
+ public function to_query_string($array)
+ {
+ $temp = array();
+
+ foreach ($array as $key => $value)
+ {
+ if (is_string($key) && !is_array($value))
+ {
+ $temp[] = rawurlencode($key) . '=' . rawurlencode($value);
+ }
+ }
+
+ return implode('&', $temp);
+ }
+
+ /**
+ * Convert an associative array into a sign-able string.
+ *
+ * @param array $array (Required) Array to convert.
+ * @return string URL-friendly sign-able string.
+ */
+ public function to_signable_string($array)
+ {
+ $t = array();
+
+ foreach ($array as $k => $v)
+ {
+ $t[] = $this->encode_signature2($k) . '=' . $this->encode_signature2($v);
+ }
+
+ return implode('&', $t);
+ }
+
+ /**
+ * Encode the value according to RFC 3986.
+ *
+ * @param string $string (Required) String to convert.
+ * @return string URL-friendly sign-able string.
+ */
+ public function encode_signature2($string)
+ {
+ $string = rawurlencode($string);
+ return str_replace('%7E', '~', $string);
+ }
+
+ /**
+ * Convert a query string into an associative array. Multiple, identical keys will become an indexed array.
+ *
+ * @param string $qs (Required) Query string to convert.
+ * @return array Associative array of keys and values.
+ */
+ public function query_to_array($qs)
+ {
+ $query = explode('&', $qs);
+ $data = array();
+
+ foreach ($query as $q)
+ {
+ $q = explode('=', $q);
+
+ if (isset($data[$q[0]]) && is_array($data[$q[0]]))
+ {
+ $data[$q[0]][] = urldecode($q[1]);
+ }
+ else if (isset($data[$q[0]]) && !is_array($data[$q[0]]))
+ {
+ $data[$q[0]] = array($data[$q[0]]);
+ $data[$q[0]][] = urldecode($q[1]);
+ }
+ else
+ {
+ $data[urldecode($q[0])] = urldecode($q[1]);
+ }
+ }
+ return $data;
+ }
+
+ /**
+ * Return human readable file sizes.
+ *
+ * @author Aidan Lister <aidan@php.net>
+ * @author Ryan Parman <ryan@getcloudfusion.com>
+ * @license http://www.php.net/license/3_01.txt PHP License
+ * @param integer $size (Required) Filesize in bytes.
+ * @param string $unit (Optional) The maximum unit to use. Defaults to the largest appropriate unit.
+ * @param string $default (Optional) The format for the return string. Defaults to `%01.2f %s`.
+ * @return string The human-readable file size.
+ * @link http://aidanlister.com/repos/v/function.size_readable.php Original Function
+ */
+ public function size_readable($size, $unit = null, $default = null)
+ {
+ // Units
+ $sizes = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB');
+ $mod = 1024;
+ $ii = count($sizes) - 1;
+
+ // Max unit
+ $unit = array_search((string) $unit, $sizes);
+ if ($unit === null || $unit === false)
+ {
+ $unit = $ii;
+ }
+
+ // Return string
+ if ($default === null)
+ {
+ $default = '%01.2f %s';
+ }
+
+ // Loop
+ $i = 0;
+ while ($unit != $i && $size >= 1024 && $i < $ii)
+ {
+ $size /= $mod;
+ $i++;
+ }
+
+ return sprintf($default, $size, $sizes[$i]);
+ }
+
+ /**
+ * Convert a number of seconds into Hours:Minutes:Seconds.
+ *
+ * @param integer $seconds (Required) The number of seconds to convert.
+ * @return string The formatted time.
+ */
+ public function time_hms($seconds)
+ {
+ $time = '';
+
+ // First pass
+ $hours = (int) ($seconds / 3600);
+ $seconds = $seconds % 3600;
+ $minutes = (int) ($seconds / 60);
+ $seconds = $seconds % 60;
+
+ // Cleanup
+ $time .= ($hours) ? $hours . ':' : '';
+ $time .= ($minutes < 10 && $hours > 0) ? '0' . $minutes : $minutes;
+ $time .= ':';
+ $time .= ($seconds < 10) ? '0' . $seconds : $seconds;
+
+ return $time;
+ }
+
+ /**
+ * Returns the first value that is set. Based on [Try.these()](http://api.prototypejs.org/language/Try/these/) from [Prototype](http://prototypejs.org).
+ *
+ * @param array $attrs (Required) The attributes to test, as strings. Intended for testing properties of the $base object, but also works with variables if you place an @ symbol at the beginning of the command.
+ * @param object $base (Optional) The base object to use, if any.
+ * @param mixed $default (Optional) What to return if there are no matches. Defaults to `null`.
+ * @return mixed Either a matching property of a given object, boolean `false`, or any other data type you might choose.
+ */
+ public function try_these($attrs, $base = null, $default = null)
+ {
+ if ($base)
+ {
+ foreach ($attrs as $attr)
+ {
+ if (isset($base->$attr))
+ {
+ return $base->$attr;
+ }
+ }
+ }
+ else
+ {
+ foreach ($attrs as $attr)
+ {
+ if (isset($attr))
+ {
+ return $attr;
+ }
+ }
+ }
+
+ return $default;
+ }
+
+ /**
+ * Can be removed once all calls are updated.
+ *
+ * @deprecated Use <php:json_encode()> instead.
+ * @param mixed $obj (Required) The PHP object to convert into a JSON string.
+ * @return string A JSON string.
+ */
+ public function json_encode($obj)
+ {
+ return json_encode($obj);
+ }
+
+ /**
+ * Converts a SimpleXML response to an array structure.
+ *
+ * @param ResponseCore $response (Required) A response value.
+ * @return array The response value as a standard, multi-dimensional array.
+ */
+ public function convert_response_to_array(ResponseCore $response)
+ {
+ return json_decode(json_encode($response), true);
+ }
+
+ /**
+ * Checks to see if a date stamp is ISO-8601 formatted, and if not, makes it so.
+ *
+ * @param string $datestamp (Required) A date stamp, or a string that can be parsed into a date stamp.
+ * @return string An ISO-8601 formatted date stamp.
+ */
+ public function convert_date_to_iso8601($datestamp)
+ {
+ if (!preg_match('/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}((\+|-)\d{2}:\d{2}|Z)/m', $datestamp))
+ {
+ return gmdate(self::DATE_FORMAT_ISO8601, strtotime($datestamp));
+ }
+
+ return $datestamp;
+ }
+
+ /**
+ * Determines whether the data is Base64 encoded or not.
+ *
+ * @license http://us.php.net/manual/en/function.base64-decode.php#81425 PHP License
+ * @param string $s (Required) The string to test.
+ * @return boolean Whether the string is Base64 encoded or not.
+ */
+ public function is_base64($s)
+ {
+ return (bool) preg_match('/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $s);
+ }
+
+ /**
+ * Determines whether the data is a JSON string or not.
+ *
+ * @param string $s (Required) The string to test.
+ * @return boolean Whether the string is a valid JSON object or not.
+ */
+ public function is_json($s)
+ {
+ return !!(json_decode($s) instanceof stdClass);
+ }
+
+ /**
+ * Decodes `\uXXXX` entities into their real unicode character equivalents.
+ *
+ * @param string $s (Required) The string to decode.
+ * @return string The decoded string.
+ */
+ public function decode_uhex($s)
+ {
+ preg_match_all('/\\\u([0-9a-f]{4})/i', $s, $matches);
+ $matches = $matches[count($matches) - 1];
+ $map = array();
+
+ foreach ($matches as $match)
+ {
+ if (!isset($map[$match]))
+ {
+ $map['\u' . $match] = html_entity_decode('&#' . hexdec($match) . ';', ENT_NOQUOTES, 'UTF-8');
+ }
+ }
+
+ return str_replace(array_keys($map), $map, $s);
+ }
+
+ /**
+ * Generates a random GUID.
+ *
+ * @author Alix Axel <http://www.php.net/manual/en/function.com-create-guid.php#99425>
+ * @license http://www.php.net/license/3_01.txt PHP License
+ * @return string A random GUID.
+ */
+ public function generate_guid()
+ {
+ return sprintf(
+ '%04X%04X-%04X-%04X-%04X-%04X%04X%04X',
+ mt_rand(0, 65535),
+ mt_rand(0, 65535),
+ mt_rand(0, 65535),
+ mt_rand(16384, 20479),
+ mt_rand(32768, 49151),
+ mt_rand(0, 65535),
+ mt_rand(0, 65535),
+ mt_rand(0, 65535)
+ );
+ }
+}
diff --git a/3rdparty/mediawiki/CSSMin.php b/3rdparty/mediawiki/CSSMin.php
new file mode 100644
index 00000000000..e9c2badf62b
--- /dev/null
+++ b/3rdparty/mediawiki/CSSMin.php
@@ -0,0 +1,228 @@
+<?php
+/**
+ * Minification of CSS stylesheets.
+ *
+ * Copyright 2010 Wikimedia Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed
+ * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ *
+ * @file
+ * @version 0.1.1 -- 2010-09-11
+ * @author Trevor Parscal <tparscal@wikimedia.org>
+ * @copyright Copyright 2010 Wikimedia Foundation
+ * @license http://www.apache.org/licenses/LICENSE-2.0
+ */
+
+/**
+ * Transforms CSS data
+ *
+ * This class provides minification, URL remapping, URL extracting, and data-URL embedding.
+ */
+class CSSMin {
+
+ /* Constants */
+
+ /**
+ * Maximum file size to still qualify for in-line embedding as a data-URI
+ *
+ * 24,576 is used because Internet Explorer has a 32,768 byte limit for data URIs,
+ * which when base64 encoded will result in a 1/3 increase in size.
+ */
+ const EMBED_SIZE_LIMIT = 24576;
+ const URL_REGEX = 'url\(\s*[\'"]?(?P<file>[^\?\)\'"]*)(?P<query>\??[^\)\'"]*)[\'"]?\s*\)';
+
+ /* Protected Static Members */
+
+ /** @var array List of common image files extensions and mime-types */
+ protected static $mimeTypes = array(
+ 'gif' => 'image/gif',
+ 'jpe' => 'image/jpeg',
+ 'jpeg' => 'image/jpeg',
+ 'jpg' => 'image/jpeg',
+ 'png' => 'image/png',
+ 'tif' => 'image/tiff',
+ 'tiff' => 'image/tiff',
+ 'xbm' => 'image/x-xbitmap',
+ );
+
+ /* Static Methods */
+
+ /**
+ * Gets a list of local file paths which are referenced in a CSS style sheet
+ *
+ * @param $source string CSS data to remap
+ * @param $path string File path where the source was read from (optional)
+ * @return array List of local file references
+ */
+ public static function getLocalFileReferences( $source, $path = null ) {
+ $files = array();
+ $rFlags = PREG_OFFSET_CAPTURE | PREG_SET_ORDER;
+ if ( preg_match_all( '/' . self::URL_REGEX . '/', $source, $matches, $rFlags ) ) {
+ foreach ( $matches as $match ) {
+ $file = ( isset( $path )
+ ? rtrim( $path, '/' ) . '/'
+ : '' ) . "{$match['file'][0]}";
+
+ // Only proceed if we can access the file
+ if ( !is_null( $path ) && file_exists( $file ) ) {
+ $files[] = $file;
+ }
+ }
+ }
+ return $files;
+ }
+
+ /**
+ * @param $file string
+ * @return bool|string
+ */
+ protected static function getMimeType( $file ) {
+ $realpath = realpath( $file );
+ // Try a couple of different ways to get the mime-type of a file, in order of
+ // preference
+ if (
+ $realpath
+ && function_exists( 'finfo_file' )
+ && function_exists( 'finfo_open' )
+ && defined( 'FILEINFO_MIME_TYPE' )
+ ) {
+ // As of PHP 5.3, this is how you get the mime-type of a file; it uses the Fileinfo
+ // PECL extension
+ return finfo_file( finfo_open( FILEINFO_MIME_TYPE ), $realpath );
+ } elseif ( function_exists( 'mime_content_type' ) ) {
+ // Before this was deprecated in PHP 5.3, this was how you got the mime-type of a file
+ return mime_content_type( $file );
+ } else {
+ // Worst-case scenario has happened, use the file extension to infer the mime-type
+ $ext = strtolower( pathinfo( $file, PATHINFO_EXTENSION ) );
+ if ( isset( self::$mimeTypes[$ext] ) ) {
+ return self::$mimeTypes[$ext];
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Remaps CSS URL paths and automatically embeds data URIs for URL rules
+ * preceded by an /* @embed * / comment
+ *
+ * @param $source string CSS data to remap
+ * @param $local string File path where the source was read from
+ * @param $remote string URL path to the file
+ * @param $embedData bool If false, never do any data URI embedding, even if / * @embed * / is found
+ * @return string Remapped CSS data
+ */
+ public static function remap( $source, $local, $remote, $embedData = true ) {
+ $pattern = '/((?P<embed>\s*\/\*\s*\@embed\s*\*\/)(?P<pre>[^\;\}]*))?' .
+ self::URL_REGEX . '(?P<post>[^;]*)[\;]?/';
+ $offset = 0;
+ while ( preg_match( $pattern, $source, $match, PREG_OFFSET_CAPTURE, $offset ) ) {
+ // Skip fully-qualified URLs and data URIs
+ $urlScheme = parse_url( $match['file'][0], PHP_URL_SCHEME );
+ if ( $urlScheme ) {
+ // Move the offset to the end of the match, leaving it alone
+ $offset = $match[0][1] + strlen( $match[0][0] );
+ continue;
+ }
+ // URLs with absolute paths like /w/index.php need to be expanded
+ // to absolute URLs but otherwise left alone
+ if ( $match['file'][0] !== '' && $match['file'][0][0] === '/' ) {
+ // Replace the file path with an expanded (possibly protocol-relative) URL
+ // ...but only if wfExpandUrl() is even available.
+ // This will not be the case if we're running outside of MW
+ $lengthIncrease = 0;
+ if ( function_exists( 'wfExpandUrl' ) ) {
+ $expanded = wfExpandUrl( $match['file'][0], PROTO_RELATIVE );
+ $origLength = strlen( $match['file'][0] );
+ $lengthIncrease = strlen( $expanded ) - $origLength;
+ $source = substr_replace( $source, $expanded,
+ $match['file'][1], $origLength
+ );
+ }
+ // Move the offset to the end of the match, leaving it alone
+ $offset = $match[0][1] + strlen( $match[0][0] ) + $lengthIncrease;
+ continue;
+ }
+ // Shortcuts
+ $embed = $match['embed'][0];
+ $pre = $match['pre'][0];
+ $post = $match['post'][0];
+ $query = $match['query'][0];
+ $url = "{$remote}/{$match['file'][0]}";
+ $file = "{$local}/{$match['file'][0]}";
+ // bug 27052 - Guard against double slashes, because foo//../bar
+ // apparently resolves to foo/bar on (some?) clients
+ $url = preg_replace( '#([^:])//+#', '\1/', $url );
+ $replacement = false;
+ if ( $local !== false && file_exists( $file ) ) {
+ // Add version parameter as a time-stamp in ISO 8601 format,
+ // using Z for the timezone, meaning GMT
+ $url .= '?' . gmdate( 'Y-m-d\TH:i:s\Z', round( filemtime( $file ), -2 ) );
+ // Embedding requires a bit of extra processing, so let's skip that if we can
+ if ( $embedData && $embed ) {
+ $type = self::getMimeType( $file );
+ // Detect when URLs were preceeded with embed tags, and also verify file size is
+ // below the limit
+ if (
+ $type
+ && $match['embed'][1] > 0
+ && filesize( $file ) < self::EMBED_SIZE_LIMIT
+ ) {
+ // Strip off any trailing = symbols (makes browsers freak out)
+ $data = base64_encode( file_get_contents( $file ) );
+ // Build 2 CSS properties; one which uses a base64 encoded data URI in place
+ // of the @embed comment to try and retain line-number integrity, and the
+ // other with a remapped an versioned URL and an Internet Explorer hack
+ // making it ignored in all browsers that support data URIs
+ $replacement = "{$pre}url(data:{$type};base64,{$data}){$post};";
+ $replacement .= "{$pre}url({$url}){$post}!ie;";
+ }
+ }
+ if ( $replacement === false ) {
+ // Assume that all paths are relative to $remote, and make them absolute
+ $replacement = "{$embed}{$pre}url({$url}){$post};";
+ }
+ } elseif ( $local === false ) {
+ // Assume that all paths are relative to $remote, and make them absolute
+ $replacement = "{$embed}{$pre}url({$url}{$query}){$post};";
+ }
+ if ( $replacement !== false ) {
+ // Perform replacement on the source
+ $source = substr_replace(
+ $source, $replacement, $match[0][1], strlen( $match[0][0] )
+ );
+ // Move the offset to the end of the replacement in the source
+ $offset = $match[0][1] + strlen( $replacement );
+ continue;
+ }
+ // Move the offset to the end of the match, leaving it alone
+ $offset = $match[0][1] + strlen( $match[0][0] );
+ }
+ return $source;
+ }
+
+ /**
+ * Removes whitespace from CSS data
+ *
+ * @param $css string CSS data to minify
+ * @return string Minified CSS data
+ */
+ public static function minify( $css ) {
+ return trim(
+ str_replace(
+ array( '; ', ': ', ' {', '{ ', ', ', '} ', ';}' ),
+ array( ';', ':', '{', '{', ',', '}', '}' ),
+ preg_replace( array( '/\s+/', '/\/\*.*?\*\//s' ), array( ' ', '' ), $css )
+ )
+ );
+ }
+}
diff --git a/3rdparty/mediawiki/JavaScriptMinifier.php b/3rdparty/mediawiki/JavaScriptMinifier.php
new file mode 100644
index 00000000000..db5326c7cfb
--- /dev/null
+++ b/3rdparty/mediawiki/JavaScriptMinifier.php
@@ -0,0 +1,606 @@
+<?php
+/**
+ * JavaScript Minifier
+ *
+ * @file
+ * @author Paul Copperman <paul.copperman@gmail.com>
+ * @license Choose any of Apache, MIT, GPL, LGPL
+ */
+
+/**
+ * This class is meant to safely minify javascript code, while leaving syntactically correct
+ * programs intact. Other libraries, such as JSMin require a certain coding style to work
+ * correctly. OTOH, libraries like jsminplus, that do parse the code correctly are rather
+ * slow, because they construct a complete parse tree before outputting the code minified.
+ * So this class is meant to allow arbitrary (but syntactically correct) input, while being
+ * fast enough to be used for on-the-fly minifying.
+ */
+class JavaScriptMinifier {
+
+ /* Class constants */
+ /* Parsing states.
+ * The state machine is only necessary to decide whether to parse a slash as division
+ * operator or as regexp literal.
+ * States are named after the next expected item. We only distinguish states when the
+ * distinction is relevant for our purpose.
+ */
+ const STATEMENT = 0;
+ const CONDITION = 1;
+ const PROPERTY_ASSIGNMENT = 2;
+ const EXPRESSION = 3;
+ const EXPRESSION_NO_NL = 4; // only relevant for semicolon insertion
+ const EXPRESSION_OP = 5;
+ const EXPRESSION_FUNC = 6;
+ const EXPRESSION_TERNARY = 7; // used to determine the role of a colon
+ const EXPRESSION_TERNARY_OP = 8;
+ const EXPRESSION_TERNARY_FUNC = 9;
+ const PAREN_EXPRESSION = 10; // expression which is not on the top level
+ const PAREN_EXPRESSION_OP = 11;
+ const PAREN_EXPRESSION_FUNC = 12;
+ const PROPERTY_EXPRESSION = 13; // expression which is within an object literal
+ const PROPERTY_EXPRESSION_OP = 14;
+ const PROPERTY_EXPRESSION_FUNC = 15;
+
+ /* Token types */
+ const TYPE_UN_OP = 1; // unary operators
+ const TYPE_INCR_OP = 2; // ++ and --
+ const TYPE_BIN_OP = 3; // binary operators
+ const TYPE_ADD_OP = 4; // + and - which can be either unary or binary ops
+ const TYPE_HOOK = 5; // ?
+ const TYPE_COLON = 6; // :
+ const TYPE_COMMA = 7; // ,
+ const TYPE_SEMICOLON = 8; // ;
+ const TYPE_BRACE_OPEN = 9; // {
+ const TYPE_BRACE_CLOSE = 10; // }
+ const TYPE_PAREN_OPEN = 11; // ( and [
+ const TYPE_PAREN_CLOSE = 12; // ) and ]
+ const TYPE_RETURN = 13; // keywords: break, continue, return, throw
+ const TYPE_IF = 14; // keywords: catch, for, with, switch, while, if
+ const TYPE_DO = 15; // keywords: case, var, finally, else, do, try
+ const TYPE_FUNC = 16; // keywords: function
+ const TYPE_LITERAL = 17; // all literals, identifiers and unrecognised tokens
+
+ // Sanity limit to avoid excessive memory usage
+ const STACK_LIMIT = 1000;
+
+ /* Static functions */
+
+ /**
+ * Returns minified JavaScript code.
+ *
+ * NOTE: $maxLineLength isn't a strict maximum. Longer lines will be produced when
+ * literals (e.g. quoted strings) longer than $maxLineLength are encountered
+ * or when required to guard against semicolon insertion.
+ *
+ * @param $s String JavaScript code to minify
+ * @param $statementsOnOwnLine Bool Whether to put each statement on its own line
+ * @param $maxLineLength Int Maximum length of a single line, or -1 for no maximum.
+ * @return String Minified code
+ */
+ public static function minify( $s, $statementsOnOwnLine = false, $maxLineLength = 1000 ) {
+ // First we declare a few tables that contain our parsing rules
+
+ // $opChars : characters, which can be combined without whitespace in between them
+ $opChars = array(
+ '!' => true,
+ '"' => true,
+ '%' => true,
+ '&' => true,
+ "'" => true,
+ '(' => true,
+ ')' => true,
+ '*' => true,
+ '+' => true,
+ ',' => true,
+ '-' => true,
+ '.' => true,
+ '/' => true,
+ ':' => true,
+ ';' => true,
+ '<' => true,
+ '=' => true,
+ '>' => true,
+ '?' => true,
+ '[' => true,
+ ']' => true,
+ '^' => true,
+ '{' => true,
+ '|' => true,
+ '}' => true,
+ '~' => true
+ );
+
+ // $tokenTypes : maps keywords and operators to their corresponding token type
+ $tokenTypes = array(
+ '!' => self::TYPE_UN_OP,
+ '~' => self::TYPE_UN_OP,
+ 'delete' => self::TYPE_UN_OP,
+ 'new' => self::TYPE_UN_OP,
+ 'typeof' => self::TYPE_UN_OP,
+ 'void' => self::TYPE_UN_OP,
+ '++' => self::TYPE_INCR_OP,
+ '--' => self::TYPE_INCR_OP,
+ '!=' => self::TYPE_BIN_OP,
+ '!==' => self::TYPE_BIN_OP,
+ '%' => self::TYPE_BIN_OP,
+ '%=' => self::TYPE_BIN_OP,
+ '&' => self::TYPE_BIN_OP,
+ '&&' => self::TYPE_BIN_OP,
+ '&=' => self::TYPE_BIN_OP,
+ '*' => self::TYPE_BIN_OP,
+ '*=' => self::TYPE_BIN_OP,
+ '+=' => self::TYPE_BIN_OP,
+ '-=' => self::TYPE_BIN_OP,
+ '.' => self::TYPE_BIN_OP,
+ '/' => self::TYPE_BIN_OP,
+ '/=' => self::TYPE_BIN_OP,
+ '<' => self::TYPE_BIN_OP,
+ '<<' => self::TYPE_BIN_OP,
+ '<<=' => self::TYPE_BIN_OP,
+ '<=' => self::TYPE_BIN_OP,
+ '=' => self::TYPE_BIN_OP,
+ '==' => self::TYPE_BIN_OP,
+ '===' => self::TYPE_BIN_OP,
+ '>' => self::TYPE_BIN_OP,
+ '>=' => self::TYPE_BIN_OP,
+ '>>' => self::TYPE_BIN_OP,
+ '>>=' => self::TYPE_BIN_OP,
+ '>>>' => self::TYPE_BIN_OP,
+ '>>>=' => self::TYPE_BIN_OP,
+ '^' => self::TYPE_BIN_OP,
+ '^=' => self::TYPE_BIN_OP,
+ '|' => self::TYPE_BIN_OP,
+ '|=' => self::TYPE_BIN_OP,
+ '||' => self::TYPE_BIN_OP,
+ 'in' => self::TYPE_BIN_OP,
+ 'instanceof' => self::TYPE_BIN_OP,
+ '+' => self::TYPE_ADD_OP,
+ '-' => self::TYPE_ADD_OP,
+ '?' => self::TYPE_HOOK,
+ ':' => self::TYPE_COLON,
+ ',' => self::TYPE_COMMA,
+ ';' => self::TYPE_SEMICOLON,
+ '{' => self::TYPE_BRACE_OPEN,
+ '}' => self::TYPE_BRACE_CLOSE,
+ '(' => self::TYPE_PAREN_OPEN,
+ '[' => self::TYPE_PAREN_OPEN,
+ ')' => self::TYPE_PAREN_CLOSE,
+ ']' => self::TYPE_PAREN_CLOSE,
+ 'break' => self::TYPE_RETURN,
+ 'continue' => self::TYPE_RETURN,
+ 'return' => self::TYPE_RETURN,
+ 'throw' => self::TYPE_RETURN,
+ 'catch' => self::TYPE_IF,
+ 'for' => self::TYPE_IF,
+ 'if' => self::TYPE_IF,
+ 'switch' => self::TYPE_IF,
+ 'while' => self::TYPE_IF,
+ 'with' => self::TYPE_IF,
+ 'case' => self::TYPE_DO,
+ 'do' => self::TYPE_DO,
+ 'else' => self::TYPE_DO,
+ 'finally' => self::TYPE_DO,
+ 'try' => self::TYPE_DO,
+ 'var' => self::TYPE_DO,
+ 'function' => self::TYPE_FUNC
+ );
+
+ // $goto : This is the main table for our state machine. For every state/token pair
+ // the following state is defined. When no rule exists for a given pair,
+ // the state is left unchanged.
+ $goto = array(
+ self::STATEMENT => array(
+ self::TYPE_UN_OP => self::EXPRESSION,
+ self::TYPE_INCR_OP => self::EXPRESSION,
+ self::TYPE_ADD_OP => self::EXPRESSION,
+ self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION,
+ self::TYPE_RETURN => self::EXPRESSION_NO_NL,
+ self::TYPE_IF => self::CONDITION,
+ self::TYPE_FUNC => self::CONDITION,
+ self::TYPE_LITERAL => self::EXPRESSION_OP
+ ),
+ self::CONDITION => array(
+ self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION
+ ),
+ self::PROPERTY_ASSIGNMENT => array(
+ self::TYPE_COLON => self::PROPERTY_EXPRESSION,
+ self::TYPE_BRACE_OPEN => self::STATEMENT
+ ),
+ self::EXPRESSION => array(
+ self::TYPE_SEMICOLON => self::STATEMENT,
+ self::TYPE_BRACE_OPEN => self::PROPERTY_ASSIGNMENT,
+ self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION,
+ self::TYPE_FUNC => self::EXPRESSION_FUNC,
+ self::TYPE_LITERAL => self::EXPRESSION_OP
+ ),
+ self::EXPRESSION_NO_NL => array(
+ self::TYPE_SEMICOLON => self::STATEMENT,
+ self::TYPE_BRACE_OPEN => self::PROPERTY_ASSIGNMENT,
+ self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION,
+ self::TYPE_FUNC => self::EXPRESSION_FUNC,
+ self::TYPE_LITERAL => self::EXPRESSION_OP
+ ),
+ self::EXPRESSION_OP => array(
+ self::TYPE_BIN_OP => self::EXPRESSION,
+ self::TYPE_ADD_OP => self::EXPRESSION,
+ self::TYPE_HOOK => self::EXPRESSION_TERNARY,
+ self::TYPE_COLON => self::STATEMENT,
+ self::TYPE_COMMA => self::EXPRESSION,
+ self::TYPE_SEMICOLON => self::STATEMENT,
+ self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION
+ ),
+ self::EXPRESSION_FUNC => array(
+ self::TYPE_BRACE_OPEN => self::STATEMENT
+ ),
+ self::EXPRESSION_TERNARY => array(
+ self::TYPE_BRACE_OPEN => self::PROPERTY_ASSIGNMENT,
+ self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION,
+ self::TYPE_FUNC => self::EXPRESSION_TERNARY_FUNC,
+ self::TYPE_LITERAL => self::EXPRESSION_TERNARY_OP
+ ),
+ self::EXPRESSION_TERNARY_OP => array(
+ self::TYPE_BIN_OP => self::EXPRESSION_TERNARY,
+ self::TYPE_ADD_OP => self::EXPRESSION_TERNARY,
+ self::TYPE_HOOK => self::EXPRESSION_TERNARY,
+ self::TYPE_COMMA => self::EXPRESSION_TERNARY,
+ self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION
+ ),
+ self::EXPRESSION_TERNARY_FUNC => array(
+ self::TYPE_BRACE_OPEN => self::STATEMENT
+ ),
+ self::PAREN_EXPRESSION => array(
+ self::TYPE_BRACE_OPEN => self::PROPERTY_ASSIGNMENT,
+ self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION,
+ self::TYPE_FUNC => self::PAREN_EXPRESSION_FUNC,
+ self::TYPE_LITERAL => self::PAREN_EXPRESSION_OP
+ ),
+ self::PAREN_EXPRESSION_OP => array(
+ self::TYPE_BIN_OP => self::PAREN_EXPRESSION,
+ self::TYPE_ADD_OP => self::PAREN_EXPRESSION,
+ self::TYPE_HOOK => self::PAREN_EXPRESSION,
+ self::TYPE_COLON => self::PAREN_EXPRESSION,
+ self::TYPE_COMMA => self::PAREN_EXPRESSION,
+ self::TYPE_SEMICOLON => self::PAREN_EXPRESSION,
+ self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION
+ ),
+ self::PAREN_EXPRESSION_FUNC => array(
+ self::TYPE_BRACE_OPEN => self::STATEMENT
+ ),
+ self::PROPERTY_EXPRESSION => array(
+ self::TYPE_BRACE_OPEN => self::PROPERTY_ASSIGNMENT,
+ self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION,
+ self::TYPE_FUNC => self::PROPERTY_EXPRESSION_FUNC,
+ self::TYPE_LITERAL => self::PROPERTY_EXPRESSION_OP
+ ),
+ self::PROPERTY_EXPRESSION_OP => array(
+ self::TYPE_BIN_OP => self::PROPERTY_EXPRESSION,
+ self::TYPE_ADD_OP => self::PROPERTY_EXPRESSION,
+ self::TYPE_HOOK => self::PROPERTY_EXPRESSION,
+ self::TYPE_COMMA => self::PROPERTY_ASSIGNMENT,
+ self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION
+ ),
+ self::PROPERTY_EXPRESSION_FUNC => array(
+ self::TYPE_BRACE_OPEN => self::STATEMENT
+ )
+ );
+
+ // $push : This table contains the rules for when to push a state onto the stack.
+ // The pushed state is the state to return to when the corresponding
+ // closing token is found
+ $push = array(
+ self::STATEMENT => array(
+ self::TYPE_BRACE_OPEN => self::STATEMENT,
+ self::TYPE_PAREN_OPEN => self::EXPRESSION_OP
+ ),
+ self::CONDITION => array(
+ self::TYPE_PAREN_OPEN => self::STATEMENT
+ ),
+ self::PROPERTY_ASSIGNMENT => array(
+ self::TYPE_BRACE_OPEN => self::PROPERTY_ASSIGNMENT
+ ),
+ self::EXPRESSION => array(
+ self::TYPE_BRACE_OPEN => self::EXPRESSION_OP,
+ self::TYPE_PAREN_OPEN => self::EXPRESSION_OP
+ ),
+ self::EXPRESSION_NO_NL => array(
+ self::TYPE_BRACE_OPEN => self::EXPRESSION_OP,
+ self::TYPE_PAREN_OPEN => self::EXPRESSION_OP
+ ),
+ self::EXPRESSION_OP => array(
+ self::TYPE_HOOK => self::EXPRESSION,
+ self::TYPE_PAREN_OPEN => self::EXPRESSION_OP
+ ),
+ self::EXPRESSION_FUNC => array(
+ self::TYPE_BRACE_OPEN => self::EXPRESSION_OP
+ ),
+ self::EXPRESSION_TERNARY => array(
+ self::TYPE_BRACE_OPEN => self::EXPRESSION_TERNARY_OP,
+ self::TYPE_PAREN_OPEN => self::EXPRESSION_TERNARY_OP
+ ),
+ self::EXPRESSION_TERNARY_OP => array(
+ self::TYPE_HOOK => self::EXPRESSION_TERNARY,
+ self::TYPE_PAREN_OPEN => self::EXPRESSION_TERNARY_OP
+ ),
+ self::EXPRESSION_TERNARY_FUNC => array(
+ self::TYPE_BRACE_OPEN => self::EXPRESSION_TERNARY_OP
+ ),
+ self::PAREN_EXPRESSION => array(
+ self::TYPE_BRACE_OPEN => self::PAREN_EXPRESSION_OP,
+ self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION_OP
+ ),
+ self::PAREN_EXPRESSION_OP => array(
+ self::TYPE_PAREN_OPEN => self::PAREN_EXPRESSION_OP
+ ),
+ self::PAREN_EXPRESSION_FUNC => array(
+ self::TYPE_BRACE_OPEN => self::PAREN_EXPRESSION_OP
+ ),
+ self::PROPERTY_EXPRESSION => array(
+ self::TYPE_BRACE_OPEN => self::PROPERTY_EXPRESSION_OP,
+ self::TYPE_PAREN_OPEN => self::PROPERTY_EXPRESSION_OP
+ ),
+ self::PROPERTY_EXPRESSION_OP => array(
+ self::TYPE_PAREN_OPEN => self::PROPERTY_EXPRESSION_OP
+ ),
+ self::PROPERTY_EXPRESSION_FUNC => array(
+ self::TYPE_BRACE_OPEN => self::PROPERTY_EXPRESSION_OP
+ )
+ );
+
+ // $pop : Rules for when to pop a state from the stack
+ $pop = array(
+ self::STATEMENT => array( self::TYPE_BRACE_CLOSE => true ),
+ self::PROPERTY_ASSIGNMENT => array( self::TYPE_BRACE_CLOSE => true ),
+ self::EXPRESSION => array( self::TYPE_BRACE_CLOSE => true ),
+ self::EXPRESSION_NO_NL => array( self::TYPE_BRACE_CLOSE => true ),
+ self::EXPRESSION_OP => array( self::TYPE_BRACE_CLOSE => true ),
+ self::EXPRESSION_TERNARY_OP => array( self::TYPE_COLON => true ),
+ self::PAREN_EXPRESSION => array( self::TYPE_PAREN_CLOSE => true ),
+ self::PAREN_EXPRESSION_OP => array( self::TYPE_PAREN_CLOSE => true ),
+ self::PROPERTY_EXPRESSION => array( self::TYPE_BRACE_CLOSE => true ),
+ self::PROPERTY_EXPRESSION_OP => array( self::TYPE_BRACE_CLOSE => true )
+ );
+
+ // $semicolon : Rules for when a semicolon insertion is appropriate
+ $semicolon = array(
+ self::EXPRESSION_NO_NL => array(
+ self::TYPE_UN_OP => true,
+ self::TYPE_INCR_OP => true,
+ self::TYPE_ADD_OP => true,
+ self::TYPE_BRACE_OPEN => true,
+ self::TYPE_PAREN_OPEN => true,
+ self::TYPE_RETURN => true,
+ self::TYPE_IF => true,
+ self::TYPE_DO => true,
+ self::TYPE_FUNC => true,
+ self::TYPE_LITERAL => true
+ ),
+ self::EXPRESSION_OP => array(
+ self::TYPE_UN_OP => true,
+ self::TYPE_INCR_OP => true,
+ self::TYPE_BRACE_OPEN => true,
+ self::TYPE_RETURN => true,
+ self::TYPE_IF => true,
+ self::TYPE_DO => true,
+ self::TYPE_FUNC => true,
+ self::TYPE_LITERAL => true
+ )
+ );
+
+ // Rules for when newlines should be inserted if
+ // $statementsOnOwnLine is enabled.
+ // $newlineBefore is checked before switching state,
+ // $newlineAfter is checked after
+ $newlineBefore = array(
+ self::STATEMENT => array(
+ self::TYPE_BRACE_CLOSE => true,
+ ),
+ );
+ $newlineAfter = array(
+ self::STATEMENT => array(
+ self::TYPE_BRACE_OPEN => true,
+ self::TYPE_PAREN_CLOSE => true,
+ self::TYPE_SEMICOLON => true,
+ ),
+ );
+
+ // $divStates : Contains all states that can be followed by a division operator
+ $divStates = array(
+ self::EXPRESSION_OP => true,
+ self::EXPRESSION_TERNARY_OP => true,
+ self::PAREN_EXPRESSION_OP => true,
+ self::PROPERTY_EXPRESSION_OP => true
+ );
+
+ // Here's where the minifying takes place: Loop through the input, looking for tokens
+ // and output them to $out, taking actions to the above defined rules when appropriate.
+ $out = '';
+ $pos = 0;
+ $length = strlen( $s );
+ $lineLength = 0;
+ $newlineFound = true;
+ $state = self::STATEMENT;
+ $stack = array();
+ $last = ';'; // Pretend that we have seen a semicolon yet
+ while( $pos < $length ) {
+ // First, skip over any whitespace and multiline comments, recording whether we
+ // found any newline character
+ $skip = strspn( $s, " \t\n\r\xb\xc", $pos );
+ if( !$skip ) {
+ $ch = $s[$pos];
+ if( $ch === '/' && substr( $s, $pos, 2 ) === '/*' ) {
+ // Multiline comment. Search for the end token or EOT.
+ $end = strpos( $s, '*/', $pos + 2 );
+ $skip = $end === false ? $length - $pos : $end - $pos + 2;
+ }
+ }
+ if( $skip ) {
+ // The semicolon insertion mechanism needs to know whether there was a newline
+ // between two tokens, so record it now.
+ if( !$newlineFound && strcspn( $s, "\r\n", $pos, $skip ) !== $skip ) {
+ $newlineFound = true;
+ }
+ $pos += $skip;
+ continue;
+ }
+ // Handle C++-style comments and html comments, which are treated as single line
+ // comments by the browser, regardless of whether the end tag is on the same line.
+ // Handle --> the same way, but only if it's at the beginning of the line
+ if( ( $ch === '/' && substr( $s, $pos, 2 ) === '//' )
+ || ( $ch === '<' && substr( $s, $pos, 4 ) === '<!--' )
+ || ( $ch === '-' && $newlineFound && substr( $s, $pos, 3 ) === '-->' )
+ ) {
+ $pos += strcspn( $s, "\r\n", $pos );
+ continue;
+ }
+
+ // Find out which kind of token we're handling. $end will point past the end of it.
+ $end = $pos + 1;
+ // Handle string literals
+ if( $ch === "'" || $ch === '"' ) {
+ // Search to the end of the string literal, skipping over backslash escapes
+ $search = $ch . '\\';
+ do{
+ $end += strcspn( $s, $search, $end ) + 2;
+ } while( $end - 2 < $length && $s[$end - 2] === '\\' );
+ $end--;
+ // We have to distinguish between regexp literals and division operators
+ // A division operator is only possible in certain states
+ } elseif( $ch === '/' && !isset( $divStates[$state] ) ) {
+ // Regexp literal, search to the end, skipping over backslash escapes and
+ // character classes
+ for( ; ; ) {
+ do{
+ $end += strcspn( $s, '/[\\', $end ) + 2;
+ } while( $end - 2 < $length && $s[$end - 2] === '\\' );
+ $end--;
+ if( $end - 1 >= $length || $s[$end - 1] === '/' ) {
+ break;
+ }
+ do{
+ $end += strcspn( $s, ']\\', $end ) + 2;
+ } while( $end - 2 < $length && $s[$end - 2] === '\\' );
+ $end--;
+ };
+ // Search past the regexp modifiers (gi)
+ while( $end < $length && ctype_alpha( $s[$end] ) ) {
+ $end++;
+ }
+ } elseif(
+ $ch === '0'
+ && ($pos + 1 < $length) && ($s[$pos + 1] === 'x' || $s[$pos + 1] === 'X' )
+ ) {
+ // Hex numeric literal
+ $end++; // x or X
+ $len = strspn( $s, '0123456789ABCDEFabcdef', $end );
+ if ( !$len ) {
+ return self::parseError($s, $pos, 'Expected a hexadecimal number but found ' . substr( $s, $pos, 5 ) . '...' );
+ }
+ $end += $len;
+ } elseif(
+ ctype_digit( $ch )
+ || ( $ch === '.' && $pos + 1 < $length && ctype_digit( $s[$pos + 1] ) )
+ ) {
+ $end += strspn( $s, '0123456789', $end );
+ $decimal = strspn( $s, '.', $end );
+ if ($decimal) {
+ if ( $decimal > 2 ) {
+ return self::parseError($s, $end, 'The number has too many decimal points' );
+ }
+ $end += strspn( $s, '0123456789', $end + 1 ) + $decimal;
+ }
+ $exponent = strspn( $s, 'eE', $end );
+ if( $exponent ) {
+ if ( $exponent > 1 ) {
+ return self::parseError($s, $end, 'Number with several E' );
+ }
+ $end++;
+
+ // + sign is optional; - sign is required.
+ $end += strspn( $s, '-+', $end );
+ $len = strspn( $s, '0123456789', $end );
+ if ( !$len ) {
+ return self::parseError($s, $pos, 'No decimal digits after e, how many zeroes should be added?' );
+ }
+ $end += $len;
+ }
+ } elseif( isset( $opChars[$ch] ) ) {
+ // Punctuation character. Search for the longest matching operator.
+ while(
+ $end < $length
+ && isset( $tokenTypes[substr( $s, $pos, $end - $pos + 1 )] )
+ ) {
+ $end++;
+ }
+ } else {
+ // Identifier or reserved word. Search for the end by excluding whitespace and
+ // punctuation.
+ $end += strcspn( $s, " \t\n.;,=<>+-{}()[]?:*/%'\"!&|^~\xb\xc\r", $end );
+ }
+
+ // Now get the token type from our type array
+ $token = substr( $s, $pos, $end - $pos ); // so $end - $pos == strlen( $token )
+ $type = isset( $tokenTypes[$token] ) ? $tokenTypes[$token] : self::TYPE_LITERAL;
+
+ if( $newlineFound && isset( $semicolon[$state][$type] ) ) {
+ // This token triggers the semicolon insertion mechanism of javascript. While we
+ // could add the ; token here ourselves, keeping the newline has a few advantages.
+ $out .= "\n";
+ $state = self::STATEMENT;
+ $lineLength = 0;
+ } elseif( $maxLineLength > 0 && $lineLength + $end - $pos > $maxLineLength &&
+ !isset( $semicolon[$state][$type] ) && $type !== self::TYPE_INCR_OP )
+ {
+ // This line would get too long if we added $token, so add a newline first.
+ // Only do this if it won't trigger semicolon insertion and if it won't
+ // put a postfix increment operator on its own line, which is illegal in js.
+ $out .= "\n";
+ $lineLength = 0;
+ // Check, whether we have to separate the token from the last one with whitespace
+ } elseif( !isset( $opChars[$last] ) && !isset( $opChars[$ch] ) ) {
+ $out .= ' ';
+ $lineLength++;
+ // Don't accidentally create ++, -- or // tokens
+ } elseif( $last === $ch && ( $ch === '+' || $ch === '-' || $ch === '/' ) ) {
+ $out .= ' ';
+ $lineLength++;
+ }
+
+ $out .= $token;
+ $lineLength += $end - $pos; // += strlen( $token )
+ $last = $s[$end - 1];
+ $pos = $end;
+ $newlineFound = false;
+
+ // Output a newline after the token if required
+ // This is checked before AND after switching state
+ $newlineAdded = false;
+ if ( $statementsOnOwnLine && !$newlineAdded && isset( $newlineBefore[$state][$type] ) ) {
+ $out .= "\n";
+ $lineLength = 0;
+ $newlineAdded = true;
+ }
+
+ // Now that we have output our token, transition into the new state.
+ if( isset( $push[$state][$type] ) && count( $stack ) < self::STACK_LIMIT ) {
+ $stack[] = $push[$state][$type];
+ }
+ if( $stack && isset( $pop[$state][$type] ) ) {
+ $state = array_pop( $stack );
+ } elseif( isset( $goto[$state][$type] ) ) {
+ $state = $goto[$state][$type];
+ }
+
+ // Check for newline insertion again
+ if ( $statementsOnOwnLine && !$newlineAdded && isset( $newlineAfter[$state][$type] ) ) {
+ $out .= "\n";
+ $lineLength = 0;
+ }
+ }
+ return $out;
+ }
+
+ static function parseError($fullJavascript, $position, $errorMsg) {
+ // TODO: Handle the error: trigger_error, throw exception, return false...
+ return false;
+ }
+}
diff --git a/3rdparty/miniColors/GPL-LICENSE.txt b/3rdparty/miniColors/GPL-LICENSE.txt
new file mode 100644
index 00000000000..11dddd00ef0
--- /dev/null
+++ b/3rdparty/miniColors/GPL-LICENSE.txt
@@ -0,0 +1,278 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
diff --git a/3rdparty/miniColors/MIT-LICENSE.txt b/3rdparty/miniColors/MIT-LICENSE.txt
new file mode 100644
index 00000000000..ec6f7581576
--- /dev/null
+++ b/3rdparty/miniColors/MIT-LICENSE.txt
@@ -0,0 +1,20 @@
+Copyright (c) Cory LaViska
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/3rdparty/miniColors/css/images/colors.png b/3rdparty/miniColors/css/images/colors.png
new file mode 100755
index 00000000000..1b4f819d8d9
--- /dev/null
+++ b/3rdparty/miniColors/css/images/colors.png
Binary files differ
diff --git a/3rdparty/miniColors/css/images/trigger.png b/3rdparty/miniColors/css/images/trigger.png
new file mode 100755
index 00000000000..8c169fd6053
--- /dev/null
+++ b/3rdparty/miniColors/css/images/trigger.png
Binary files differ
diff --git a/3rdparty/miniColors/css/jquery.miniColors.css b/3rdparty/miniColors/css/jquery.miniColors.css
new file mode 100755
index 00000000000..381bc1dc065
--- /dev/null
+++ b/3rdparty/miniColors/css/jquery.miniColors.css
@@ -0,0 +1,81 @@
+.miniColors-trigger {
+ height: 22px;
+ width: 22px;
+ background: url(images/trigger.png) center no-repeat;
+ vertical-align: middle;
+ margin: 0 .25em;
+ display: inline-block;
+ outline: none;
+}
+
+.miniColors-selector {
+ position: absolute;
+ width: 175px;
+ height: 150px;
+ background: #FFF;
+ border: solid 1px #BBB;
+ -moz-box-shadow: 0 0 6px rgba(0, 0, 0, .25);
+ -webkit-box-shadow: 0 0 6px rgba(0, 0, 0, .25);
+ box-shadow: 0 0 6px rgba(0, 0, 0, .25);
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ border-radius: 5px;
+ padding: 5px;
+ z-index: 999999;
+}
+
+.miniColors-selector.black {
+ background: #000;
+ border-color: #000;
+}
+
+.miniColors-colors {
+ position: absolute;
+ top: 5px;
+ left: 5px;
+ width: 150px;
+ height: 150px;
+ background: url(images/colors.png) right no-repeat;
+ cursor: crosshair;
+}
+
+.miniColors-hues {
+ position: absolute;
+ top: 5px;
+ left: 160px;
+ width: 20px;
+ height: 150px;
+ background: url(images/colors.png) left no-repeat;
+ cursor: crosshair;
+}
+
+.miniColors-colorPicker {
+ position: absolute;
+ width: 9px;
+ height: 9px;
+ border: 1px solid #fff;
+ -moz-border-radius: 11px;
+ -webkit-border-radius: 11px;
+ border-radius: 11px;
+}
+.miniColors-colorPicker-inner {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 7px;
+ height: 7px;
+ border: 1px solid #000;
+ -moz-border-radius: 9px;
+ -webkit-border-radius: 9px;
+ border-radius: 9px;
+}
+
+.miniColors-huePicker {
+ position: absolute;
+ left: -3px;
+ width: 24px;
+ height: 1px;
+ border: 1px solid #fff;
+ border-radius: 2px;
+ background: #000;
+} \ No newline at end of file
diff --git a/3rdparty/miniColors/js/jquery.miniColors.js b/3rdparty/miniColors/js/jquery.miniColors.js
new file mode 100755
index 00000000000..187db3fa84e
--- /dev/null
+++ b/3rdparty/miniColors/js/jquery.miniColors.js
@@ -0,0 +1,580 @@
+/*
+ * jQuery miniColors: A small color selector
+ *
+ * Copyright 2011 Cory LaViska for A Beautiful Site, LLC. (http://abeautifulsite.net/)
+ *
+ * Dual licensed under the MIT or GPL Version 2 licenses
+ *
+*/
+if(jQuery) (function($) {
+
+ $.extend($.fn, {
+
+ miniColors: function(o, data) {
+
+ var create = function(input, o, data) {
+ //
+ // Creates a new instance of the miniColors selector
+ //
+
+ // Determine initial color (defaults to white)
+ var color = expandHex(input.val());
+ if( !color ) color = 'ffffff';
+ var hsb = hex2hsb(color);
+
+ // Create trigger
+ var trigger = $('<a class="miniColors-trigger" style="background-color: #' + color + '" href="#"></a>');
+ trigger.insertAfter(input);
+
+ // Set input data and update attributes
+ input
+ .addClass('miniColors')
+ .data('original-maxlength', input.attr('maxlength') || null)
+ .data('original-autocomplete', input.attr('autocomplete') || null)
+ .data('letterCase', 'uppercase')
+ .data('trigger', trigger)
+ .data('hsb', hsb)
+ .data('change', o.change ? o.change : null)
+ .data('close', o.close ? o.close : null)
+ .data('open', o.open ? o.open : null)
+ .attr('maxlength', 7)
+ .attr('autocomplete', 'off')
+ .val('#' + convertCase(color, o.letterCase));
+
+ // Handle options
+ if( o.readonly ) input.prop('readonly', true);
+ if( o.disabled ) disable(input);
+
+ // Show selector when trigger is clicked
+ trigger.bind('click.miniColors', function(event) {
+ event.preventDefault();
+ if( input.val() === '' ) input.val('#');
+ show(input);
+
+ });
+
+ // Show selector when input receives focus
+ input.bind('focus.miniColors', function(event) {
+ if( input.val() === '' ) input.val('#');
+ show(input);
+ });
+
+ // Hide on blur
+ input.bind('blur.miniColors', function(event) {
+ var hex = expandHex( hsb2hex(input.data('hsb')) );
+ input.val( hex ? '#' + convertCase(hex, input.data('letterCase')) : '' );
+ });
+
+ // Hide when tabbing out of the input
+ input.bind('keydown.miniColors', function(event) {
+ if( event.keyCode === 9 ) hide(input);
+ });
+
+ // Update when color is typed in
+ input.bind('keyup.miniColors', function(event) {
+ setColorFromInput(input);
+ });
+
+ // Handle pasting
+ input.bind('paste.miniColors', function(event) {
+ // Short pause to wait for paste to complete
+ setTimeout( function() {
+ setColorFromInput(input);
+ }, 5);
+ });
+
+ };
+
+ var destroy = function(input) {
+ //
+ // Destroys an active instance of the miniColors selector
+ //
+
+ hide();
+ input = $(input);
+
+ // Restore to original state
+ input.data('trigger').remove();
+ input
+ .attr('autocomplete', input.data('original-autocomplete'))
+ .attr('maxlength', input.data('original-maxlength'))
+ .removeData()
+ .removeClass('miniColors')
+ .unbind('.miniColors');
+ $(document).unbind('.miniColors');
+ };
+
+ var enable = function(input) {
+ //
+ // Enables the input control and the selector
+ //
+ input
+ .prop('disabled', false)
+ .data('trigger')
+ .css('opacity', 1);
+ };
+
+ var disable = function(input) {
+ //
+ // Disables the input control and the selector
+ //
+ hide(input);
+ input
+ .prop('disabled', true)
+ .data('trigger')
+ .css('opacity', 0.5);
+ };
+
+ var show = function(input) {
+ //
+ // Shows the miniColors selector
+ //
+ if( input.prop('disabled') ) return false;
+
+ // Hide all other instances
+ hide();
+
+ // Generate the selector
+ var selector = $('<div class="miniColors-selector"></div>');
+ selector
+ .append('<div class="miniColors-colors" style="background-color: #FFF;"><div class="miniColors-colorPicker"><div class="miniColors-colorPicker-inner"></div></div>')
+ .append('<div class="miniColors-hues"><div class="miniColors-huePicker"></div></div>')
+ .css({
+ top: input.is(':visible') ? input.offset().top + input.outerHeight() : input.data('trigger').offset().top + input.data('trigger').outerHeight(),
+ left: input.is(':visible') ? input.offset().left : input.data('trigger').offset().left,
+ display: 'none'
+ })
+ .addClass( input.attr('class') );
+
+ // Set background for colors
+ var hsb = input.data('hsb');
+ selector
+ .find('.miniColors-colors')
+ .css('backgroundColor', '#' + hsb2hex({ h: hsb.h, s: 100, b: 100 }));
+
+ // Set colorPicker position
+ var colorPosition = input.data('colorPosition');
+ if( !colorPosition ) colorPosition = getColorPositionFromHSB(hsb);
+ selector.find('.miniColors-colorPicker')
+ .css('top', colorPosition.y + 'px')
+ .css('left', colorPosition.x + 'px');
+
+ // Set huePicker position
+ var huePosition = input.data('huePosition');
+ if( !huePosition ) huePosition = getHuePositionFromHSB(hsb);
+ selector.find('.miniColors-huePicker').css('top', huePosition.y + 'px');
+
+ // Set input data
+ input
+ .data('selector', selector)
+ .data('huePicker', selector.find('.miniColors-huePicker'))
+ .data('colorPicker', selector.find('.miniColors-colorPicker'))
+ .data('mousebutton', 0);
+
+ $('BODY').append(selector);
+ selector.fadeIn(100);
+
+ // Prevent text selection in IE
+ selector.bind('selectstart', function() { return false; });
+
+ $(document).bind('mousedown.miniColors touchstart.miniColors', function(event) {
+
+ input.data('mousebutton', 1);
+ var testSubject = $(event.target).parents().andSelf();
+
+ if( testSubject.hasClass('miniColors-colors') ) {
+ event.preventDefault();
+ input.data('moving', 'colors');
+ moveColor(input, event);
+ }
+
+ if( testSubject.hasClass('miniColors-hues') ) {
+ event.preventDefault();
+ input.data('moving', 'hues');
+ moveHue(input, event);
+ }
+
+ if( testSubject.hasClass('miniColors-selector') ) {
+ event.preventDefault();
+ return;
+ }
+
+ if( testSubject.hasClass('miniColors') ) return;
+
+ hide(input);
+ });
+
+ $(document)
+ .bind('mouseup.miniColors touchend.miniColors', function(event) {
+ event.preventDefault();
+ input.data('mousebutton', 0).removeData('moving');
+ })
+ .bind('mousemove.miniColors touchmove.miniColors', function(event) {
+ event.preventDefault();
+ if( input.data('mousebutton') === 1 ) {
+ if( input.data('moving') === 'colors' ) moveColor(input, event);
+ if( input.data('moving') === 'hues' ) moveHue(input, event);
+ }
+ });
+
+ // Fire open callback
+ if( input.data('open') ) {
+ input.data('open').call(input.get(0), '#' + hsb2hex(hsb), hsb2rgb(hsb));
+ }
+
+ };
+
+ var hide = function(input) {
+
+ //
+ // Hides one or more miniColors selectors
+ //
+
+ // Hide all other instances if input isn't specified
+ if( !input ) input = '.miniColors';
+
+ $(input).each( function() {
+ var selector = $(this).data('selector');
+ $(this).removeData('selector');
+ $(selector).fadeOut(100, function() {
+ // Fire close callback
+ if( input.data('close') ) {
+ var hsb = input.data('hsb'), hex = hsb2hex(hsb);
+ input.data('close').call(input.get(0), '#' + hex, hsb2rgb(hsb));
+ }
+ $(this).remove();
+ });
+ });
+
+ $(document).unbind('.miniColors');
+
+ };
+
+ var moveColor = function(input, event) {
+
+ var colorPicker = input.data('colorPicker');
+
+ colorPicker.hide();
+
+ var position = {
+ x: event.pageX,
+ y: event.pageY
+ };
+
+ // Touch support
+ if( event.originalEvent.changedTouches ) {
+ position.x = event.originalEvent.changedTouches[0].pageX;
+ position.y = event.originalEvent.changedTouches[0].pageY;
+ }
+ position.x = position.x - input.data('selector').find('.miniColors-colors').offset().left - 5;
+ position.y = position.y - input.data('selector').find('.miniColors-colors').offset().top - 5;
+ if( position.x <= -5 ) position.x = -5;
+ if( position.x >= 144 ) position.x = 144;
+ if( position.y <= -5 ) position.y = -5;
+ if( position.y >= 144 ) position.y = 144;
+
+ input.data('colorPosition', position);
+ colorPicker.css('left', position.x).css('top', position.y).show();
+
+ // Calculate saturation
+ var s = Math.round((position.x + 5) * 0.67);
+ if( s < 0 ) s = 0;
+ if( s > 100 ) s = 100;
+
+ // Calculate brightness
+ var b = 100 - Math.round((position.y + 5) * 0.67);
+ if( b < 0 ) b = 0;
+ if( b > 100 ) b = 100;
+
+ // Update HSB values
+ var hsb = input.data('hsb');
+ hsb.s = s;
+ hsb.b = b;
+
+ // Set color
+ setColor(input, hsb, true);
+ };
+
+ var moveHue = function(input, event) {
+
+ var huePicker = input.data('huePicker');
+
+ huePicker.hide();
+
+ var position = {
+ y: event.pageY
+ };
+
+ // Touch support
+ if( event.originalEvent.changedTouches ) {
+ position.y = event.originalEvent.changedTouches[0].pageY;
+ }
+
+ position.y = position.y - input.data('selector').find('.miniColors-colors').offset().top - 1;
+ if( position.y <= -1 ) position.y = -1;
+ if( position.y >= 149 ) position.y = 149;
+ input.data('huePosition', position);
+ huePicker.css('top', position.y).show();
+
+ // Calculate hue
+ var h = Math.round((150 - position.y - 1) * 2.4);
+ if( h < 0 ) h = 0;
+ if( h > 360 ) h = 360;
+
+ // Update HSB values
+ var hsb = input.data('hsb');
+ hsb.h = h;
+
+ // Set color
+ setColor(input, hsb, true);
+
+ };
+
+ var setColor = function(input, hsb, updateInput) {
+ input.data('hsb', hsb);
+ var hex = hsb2hex(hsb);
+ if( updateInput ) input.val( '#' + convertCase(hex, input.data('letterCase')) );
+ input.data('trigger').css('backgroundColor', '#' + hex);
+ if( input.data('selector') ) input.data('selector').find('.miniColors-colors').css('backgroundColor', '#' + hsb2hex({ h: hsb.h, s: 100, b: 100 }));
+
+ // Fire change callback
+ if( input.data('change') ) {
+ if( hex === input.data('lastChange') ) return;
+ input.data('change').call(input.get(0), '#' + hex, hsb2rgb(hsb));
+ input.data('lastChange', hex);
+ }
+
+ };
+
+ var setColorFromInput = function(input) {
+
+ input.val('#' + cleanHex(input.val()));
+ var hex = expandHex(input.val());
+ if( !hex ) return false;
+
+ // Get HSB equivalent
+ var hsb = hex2hsb(hex);
+
+ // If color is the same, no change required
+ var currentHSB = input.data('hsb');
+ if( hsb.h === currentHSB.h && hsb.s === currentHSB.s && hsb.b === currentHSB.b ) return true;
+
+ // Set colorPicker position
+ var colorPosition = getColorPositionFromHSB(hsb);
+ var colorPicker = $(input.data('colorPicker'));
+ colorPicker.css('top', colorPosition.y + 'px').css('left', colorPosition.x + 'px');
+ input.data('colorPosition', colorPosition);
+
+ // Set huePosition position
+ var huePosition = getHuePositionFromHSB(hsb);
+ var huePicker = $(input.data('huePicker'));
+ huePicker.css('top', huePosition.y + 'px');
+ input.data('huePosition', huePosition);
+
+ setColor(input, hsb);
+
+ return true;
+
+ };
+
+ var convertCase = function(string, letterCase) {
+ if( letterCase === 'lowercase' ) return string.toLowerCase();
+ if( letterCase === 'uppercase' ) return string.toUpperCase();
+ return string;
+ };
+
+ var getColorPositionFromHSB = function(hsb) {
+ var x = Math.ceil(hsb.s / 0.67);
+ if( x < 0 ) x = 0;
+ if( x > 150 ) x = 150;
+ var y = 150 - Math.ceil(hsb.b / 0.67);
+ if( y < 0 ) y = 0;
+ if( y > 150 ) y = 150;
+ return { x: x - 5, y: y - 5 };
+ };
+
+ var getHuePositionFromHSB = function(hsb) {
+ var y = 150 - (hsb.h / 2.4);
+ if( y < 0 ) h = 0;
+ if( y > 150 ) h = 150;
+ return { y: y - 1 };
+ };
+
+ var cleanHex = function(hex) {
+ return hex.replace(/[^A-F0-9]/ig, '');
+ };
+
+ var expandHex = function(hex) {
+ hex = cleanHex(hex);
+ if( !hex ) return null;
+ if( hex.length === 3 ) hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
+ return hex.length === 6 ? hex : null;
+ };
+
+ var hsb2rgb = function(hsb) {
+ var rgb = {};
+ var h = Math.round(hsb.h);
+ var s = Math.round(hsb.s*255/100);
+ var v = Math.round(hsb.b*255/100);
+ if(s === 0) {
+ rgb.r = rgb.g = rgb.b = v;
+ } else {
+ var t1 = v;
+ var t2 = (255 - s) * v / 255;
+ var t3 = (t1 - t2) * (h % 60) / 60;
+ if( h === 360 ) h = 0;
+ if( h < 60 ) { rgb.r = t1; rgb.b = t2; rgb.g = t2 + t3; }
+ else if( h < 120 ) {rgb.g = t1; rgb.b = t2; rgb.r = t1 - t3; }
+ else if( h < 180 ) {rgb.g = t1; rgb.r = t2; rgb.b = t2 + t3; }
+ else if( h < 240 ) {rgb.b = t1; rgb.r = t2; rgb.g = t1 - t3; }
+ else if( h < 300 ) {rgb.b = t1; rgb.g = t2; rgb.r = t2 + t3; }
+ else if( h < 360 ) {rgb.r = t1; rgb.g = t2; rgb.b = t1 - t3; }
+ else { rgb.r = 0; rgb.g = 0; rgb.b = 0; }
+ }
+ return {
+ r: Math.round(rgb.r),
+ g: Math.round(rgb.g),
+ b: Math.round(rgb.b)
+ };
+ };
+
+ var rgb2hex = function(rgb) {
+ var hex = [
+ rgb.r.toString(16),
+ rgb.g.toString(16),
+ rgb.b.toString(16)
+ ];
+ $.each(hex, function(nr, val) {
+ if (val.length === 1) hex[nr] = '0' + val;
+ });
+ return hex.join('');
+ };
+
+ var hex2rgb = function(hex) {
+ hex = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16);
+
+ return {
+ r: hex >> 16,
+ g: (hex & 0x00FF00) >> 8,
+ b: (hex & 0x0000FF)
+ };
+ };
+
+ var rgb2hsb = function(rgb) {
+ var hsb = { h: 0, s: 0, b: 0 };
+ var min = Math.min(rgb.r, rgb.g, rgb.b);
+ var max = Math.max(rgb.r, rgb.g, rgb.b);
+ var delta = max - min;
+ hsb.b = max;
+ hsb.s = max !== 0 ? 255 * delta / max : 0;
+ if( hsb.s !== 0 ) {
+ if( rgb.r === max ) {
+ hsb.h = (rgb.g - rgb.b) / delta;
+ } else if( rgb.g === max ) {
+ hsb.h = 2 + (rgb.b - rgb.r) / delta;
+ } else {
+ hsb.h = 4 + (rgb.r - rgb.g) / delta;
+ }
+ } else {
+ hsb.h = -1;
+ }
+ hsb.h *= 60;
+ if( hsb.h < 0 ) {
+ hsb.h += 360;
+ }
+ hsb.s *= 100/255;
+ hsb.b *= 100/255;
+ return hsb;
+ };
+
+ var hex2hsb = function(hex) {
+ var hsb = rgb2hsb(hex2rgb(hex));
+ // Zero out hue marker for black, white, and grays (saturation === 0)
+ if( hsb.s === 0 ) hsb.h = 360;
+ return hsb;
+ };
+
+ var hsb2hex = function(hsb) {
+ return rgb2hex(hsb2rgb(hsb));
+ };
+
+
+ // Handle calls to $([selector]).miniColors()
+ switch(o) {
+
+ case 'readonly':
+
+ $(this).each( function() {
+ if( !$(this).hasClass('miniColors') ) return;
+ $(this).prop('readonly', data);
+ });
+
+ return $(this);
+
+ case 'disabled':
+
+ $(this).each( function() {
+ if( !$(this).hasClass('miniColors') ) return;
+ if( data ) {
+ disable($(this));
+ } else {
+ enable($(this));
+ }
+ });
+
+ return $(this);
+
+ case 'value':
+
+ // Getter
+ if( data === undefined ) {
+ if( !$(this).hasClass('miniColors') ) return;
+ var input = $(this),
+ hex = expandHex(input.val());
+ return hex ? '#' + convertCase(hex, input.data('letterCase')) : null;
+ }
+
+ // Setter
+ $(this).each( function() {
+ if( !$(this).hasClass('miniColors') ) return;
+ $(this).val(data);
+ setColorFromInput($(this));
+ });
+
+ return $(this);
+
+ case 'destroy':
+
+ $(this).each( function() {
+ if( !$(this).hasClass('miniColors') ) return;
+ destroy($(this));
+ });
+
+ return $(this);
+
+ default:
+
+ if( !o ) o = {};
+
+ $(this).each( function() {
+
+ // Must be called on an input element
+ if( $(this)[0].tagName.toLowerCase() !== 'input' ) return;
+
+ // If a trigger is present, the control was already created
+ if( $(this).data('trigger') ) return;
+
+ // Create the control
+ create($(this), o, data);
+
+ });
+
+ return $(this);
+
+ }
+
+ }
+
+ });
+
+})(jQuery); \ No newline at end of file
diff --git a/3rdparty/miniColors/js/jquery.miniColors.min.js b/3rdparty/miniColors/js/jquery.miniColors.min.js
new file mode 100755
index 00000000000..c00e0ace6b5
--- /dev/null
+++ b/3rdparty/miniColors/js/jquery.miniColors.min.js
@@ -0,0 +1,9 @@
+/*
+ * jQuery miniColors: A small color selector
+ *
+ * Copyright 2011 Cory LaViska for A Beautiful Site, LLC. (http://abeautifulsite.net/)
+ *
+ * Dual licensed under the MIT or GPL Version 2 licenses
+ *
+*/
+if(jQuery)(function($){$.extend($.fn,{miniColors:function(o,data){var create=function(input,o,data){var color=expandHex(input.val());if(!color)color='ffffff';var hsb=hex2hsb(color);var trigger=$('<a class="miniColors-trigger" style="background-color: #'+color+'" href="#"></a>');trigger.insertAfter(input);input.addClass('miniColors').data('original-maxlength',input.attr('maxlength')||null).data('original-autocomplete',input.attr('autocomplete')||null).data('letterCase','uppercase').data('trigger',trigger).data('hsb',hsb).data('change',o.change?o.change:null).data('close',o.close?o.close:null).data('open',o.open?o.open:null).attr('maxlength',7).attr('autocomplete','off').val('#'+convertCase(color,o.letterCase));if(o.readonly)input.prop('readonly',true);if(o.disabled)disable(input);trigger.bind('click.miniColors',function(event){event.preventDefault();if(input.val()==='')input.val('#');show(input)});input.bind('focus.miniColors',function(event){if(input.val()==='')input.val('#');show(input)});input.bind('blur.miniColors',function(event){var hex=expandHex(hsb2hex(input.data('hsb')));input.val(hex?'#'+convertCase(hex,input.data('letterCase')):'')});input.bind('keydown.miniColors',function(event){if(event.keyCode===9)hide(input)});input.bind('keyup.miniColors',function(event){setColorFromInput(input)});input.bind('paste.miniColors',function(event){setTimeout(function(){setColorFromInput(input)},5)})};var destroy=function(input){hide();input=$(input);input.data('trigger').remove();input.attr('autocomplete',input.data('original-autocomplete')).attr('maxlength',input.data('original-maxlength')).removeData().removeClass('miniColors').unbind('.miniColors');$(document).unbind('.miniColors')};var enable=function(input){input.prop('disabled',false).data('trigger').css('opacity',1)};var disable=function(input){hide(input);input.prop('disabled',true).data('trigger').css('opacity',0.5)};var show=function(input){if(input.prop('disabled'))return false;hide();var selector=$('<div class="miniColors-selector"></div>');selector.append('<div class="miniColors-colors" style="background-color: #FFF;"><div class="miniColors-colorPicker"><div class="miniColors-colorPicker-inner"></div></div>').append('<div class="miniColors-hues"><div class="miniColors-huePicker"></div></div>').css({top:input.is(':visible')?input.offset().top+input.outerHeight():input.data('trigger').offset().top+input.data('trigger').outerHeight(),left:input.is(':visible')?input.offset().left:input.data('trigger').offset().left,display:'none'}).addClass(input.attr('class'));var hsb=input.data('hsb');selector.find('.miniColors-colors').css('backgroundColor','#'+hsb2hex({h:hsb.h,s:100,b:100}));var colorPosition=input.data('colorPosition');if(!colorPosition)colorPosition=getColorPositionFromHSB(hsb);selector.find('.miniColors-colorPicker').css('top',colorPosition.y+'px').css('left',colorPosition.x+'px');var huePosition=input.data('huePosition');if(!huePosition)huePosition=getHuePositionFromHSB(hsb);selector.find('.miniColors-huePicker').css('top',huePosition.y+'px');input.data('selector',selector).data('huePicker',selector.find('.miniColors-huePicker')).data('colorPicker',selector.find('.miniColors-colorPicker')).data('mousebutton',0);$('BODY').append(selector);selector.fadeIn(100);selector.bind('selectstart',function(){return false});$(document).bind('mousedown.miniColors touchstart.miniColors',function(event){input.data('mousebutton',1);var testSubject=$(event.target).parents().andSelf();if(testSubject.hasClass('miniColors-colors')){event.preventDefault();input.data('moving','colors');moveColor(input,event)}if(testSubject.hasClass('miniColors-hues')){event.preventDefault();input.data('moving','hues');moveHue(input,event)}if(testSubject.hasClass('miniColors-selector')){event.preventDefault();return}if(testSubject.hasClass('miniColors'))return;hide(input)});$(document).bind('mouseup.miniColors touchend.miniColors',function(event){event.preventDefault();input.data('mousebutton',0).removeData('moving')}).bind('mousemove.miniColors touchmove.miniColors',function(event){event.preventDefault();if(input.data('mousebutton')===1){if(input.data('moving')==='colors')moveColor(input,event);if(input.data('moving')==='hues')moveHue(input,event)}});if(input.data('open')){input.data('open').call(input.get(0),'#'+hsb2hex(hsb),hsb2rgb(hsb))}};var hide=function(input){if(!input)input='.miniColors';$(input).each(function(){var selector=$(this).data('selector');$(this).removeData('selector');$(selector).fadeOut(100,function(){if(input.data('close')){var hsb=input.data('hsb'),hex=hsb2hex(hsb);input.data('close').call(input.get(0),'#'+hex,hsb2rgb(hsb))}$(this).remove()})});$(document).unbind('.miniColors')};var moveColor=function(input,event){var colorPicker=input.data('colorPicker');colorPicker.hide();var position={x:event.pageX,y:event.pageY};if(event.originalEvent.changedTouches){position.x=event.originalEvent.changedTouches[0].pageX;position.y=event.originalEvent.changedTouches[0].pageY}position.x=position.x-input.data('selector').find('.miniColors-colors').offset().left-5;position.y=position.y-input.data('selector').find('.miniColors-colors').offset().top-5;if(position.x<=-5)position.x=-5;if(position.x>=144)position.x=144;if(position.y<=-5)position.y=-5;if(position.y>=144)position.y=144;input.data('colorPosition',position);colorPicker.css('left',position.x).css('top',position.y).show();var s=Math.round((position.x+5)*0.67);if(s<0)s=0;if(s>100)s=100;var b=100-Math.round((position.y+5)*0.67);if(b<0)b=0;if(b>100)b=100;var hsb=input.data('hsb');hsb.s=s;hsb.b=b;setColor(input,hsb,true)};var moveHue=function(input,event){var huePicker=input.data('huePicker');huePicker.hide();var position={y:event.pageY};if(event.originalEvent.changedTouches){position.y=event.originalEvent.changedTouches[0].pageY}position.y=position.y-input.data('selector').find('.miniColors-colors').offset().top-1;if(position.y<=-1)position.y=-1;if(position.y>=149)position.y=149;input.data('huePosition',position);huePicker.css('top',position.y).show();var h=Math.round((150-position.y-1)*2.4);if(h<0)h=0;if(h>360)h=360;var hsb=input.data('hsb');hsb.h=h;setColor(input,hsb,true)};var setColor=function(input,hsb,updateInput){input.data('hsb',hsb);var hex=hsb2hex(hsb);if(updateInput)input.val('#'+convertCase(hex,input.data('letterCase')));input.data('trigger').css('backgroundColor','#'+hex);if(input.data('selector'))input.data('selector').find('.miniColors-colors').css('backgroundColor','#'+hsb2hex({h:hsb.h,s:100,b:100}));if(input.data('change')){if(hex===input.data('lastChange'))return;input.data('change').call(input.get(0),'#'+hex,hsb2rgb(hsb));input.data('lastChange',hex)}};var setColorFromInput=function(input){input.val('#'+cleanHex(input.val()));var hex=expandHex(input.val());if(!hex)return false;var hsb=hex2hsb(hex);var currentHSB=input.data('hsb');if(hsb.h===currentHSB.h&&hsb.s===currentHSB.s&&hsb.b===currentHSB.b)return true;var colorPosition=getColorPositionFromHSB(hsb);var colorPicker=$(input.data('colorPicker'));colorPicker.css('top',colorPosition.y+'px').css('left',colorPosition.x+'px');input.data('colorPosition',colorPosition);var huePosition=getHuePositionFromHSB(hsb);var huePicker=$(input.data('huePicker'));huePicker.css('top',huePosition.y+'px');input.data('huePosition',huePosition);setColor(input,hsb);return true};var convertCase=function(string,letterCase){if(letterCase==='lowercase')return string.toLowerCase();if(letterCase==='uppercase')return string.toUpperCase();return string};var getColorPositionFromHSB=function(hsb){var x=Math.ceil(hsb.s/0.67);if(x<0)x=0;if(x>150)x=150;var y=150-Math.ceil(hsb.b/0.67);if(y<0)y=0;if(y>150)y=150;return{x:x-5,y:y-5}};var getHuePositionFromHSB=function(hsb){var y=150-(hsb.h/2.4);if(y<0)h=0;if(y>150)h=150;return{y:y-1}};var cleanHex=function(hex){return hex.replace(/[^A-F0-9]/ig,'')};var expandHex=function(hex){hex=cleanHex(hex);if(!hex)return null;if(hex.length===3)hex=hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];return hex.length===6?hex:null};var hsb2rgb=function(hsb){var rgb={};var h=Math.round(hsb.h);var s=Math.round(hsb.s*255/100);var v=Math.round(hsb.b*255/100);if(s===0){rgb.r=rgb.g=rgb.b=v}else{var t1=v;var t2=(255-s)*v/255;var t3=(t1-t2)*(h%60)/60;if(h===360)h=0;if(h<60){rgb.r=t1;rgb.b=t2;rgb.g=t2+t3}else if(h<120){rgb.g=t1;rgb.b=t2;rgb.r=t1-t3}else if(h<180){rgb.g=t1;rgb.r=t2;rgb.b=t2+t3}else if(h<240){rgb.b=t1;rgb.r=t2;rgb.g=t1-t3}else if(h<300){rgb.b=t1;rgb.g=t2;rgb.r=t2+t3}else if(h<360){rgb.r=t1;rgb.g=t2;rgb.b=t1-t3}else{rgb.r=0;rgb.g=0;rgb.b=0}}return{r:Math.round(rgb.r),g:Math.round(rgb.g),b:Math.round(rgb.b)}};var rgb2hex=function(rgb){var hex=[rgb.r.toString(16),rgb.g.toString(16),rgb.b.toString(16)];$.each(hex,function(nr,val){if(val.length===1)hex[nr]='0'+val});return hex.join('')};var hex2rgb=function(hex){hex=parseInt(((hex.indexOf('#')>-1)?hex.substring(1):hex),16);return{r:hex>>16,g:(hex&0x00FF00)>>8,b:(hex&0x0000FF)}};var rgb2hsb=function(rgb){var hsb={h:0,s:0,b:0};var min=Math.min(rgb.r,rgb.g,rgb.b);var max=Math.max(rgb.r,rgb.g,rgb.b);var delta=max-min;hsb.b=max;hsb.s=max!==0?255*delta/max:0;if(hsb.s!==0){if(rgb.r===max){hsb.h=(rgb.g-rgb.b)/delta}else if(rgb.g===max){hsb.h=2+(rgb.b-rgb.r)/delta}else{hsb.h=4+(rgb.r-rgb.g)/delta}}else{hsb.h=-1}hsb.h*=60;if(hsb.h<0){hsb.h+=360}hsb.s*=100/255;hsb.b*=100/255;return hsb};var hex2hsb=function(hex){var hsb=rgb2hsb(hex2rgb(hex));if(hsb.s===0)hsb.h=360;return hsb};var hsb2hex=function(hsb){return rgb2hex(hsb2rgb(hsb))};switch(o){case'readonly':$(this).each(function(){if(!$(this).hasClass('miniColors'))return;$(this).prop('readonly',data)});return $(this);case'disabled':$(this).each(function(){if(!$(this).hasClass('miniColors'))return;if(data){disable($(this))}else{enable($(this))}});return $(this);case'value':if(data===undefined){if(!$(this).hasClass('miniColors'))return;var input=$(this),hex=expandHex(input.val());return hex?'#'+convertCase(hex,input.data('letterCase')):null}$(this).each(function(){if(!$(this).hasClass('miniColors'))return;$(this).val(data);setColorFromInput($(this))});return $(this);case'destroy':$(this).each(function(){if(!$(this).hasClass('miniColors'))return;destroy($(this))});return $(this);default:if(!o)o={};$(this).each(function(){if($(this)[0].tagName.toLowerCase()!=='input')return;if($(this).data('trigger'))return;create($(this),o,data)});return $(this)}}})})(jQuery); \ No newline at end of file
diff --git a/apps/user_openid/class.openid.v3.php b/3rdparty/openid/class.openid.v3.php
index 8afb9e5b817..eeb31986659 100644
--- a/apps/user_openid/class.openid.v3.php
+++ b/3rdparty/openid/class.openid.v3.php
@@ -324,5 +324,3 @@ class SimpleOpenID{
}
}
}
-
-?> \ No newline at end of file
diff --git a/apps/user_openid/phpmyid.php b/3rdparty/openid/phpmyid.php
index 5aaab642856..13fd31c47ca 100644
--- a/apps/user_openid/phpmyid.php
+++ b/3rdparty/openid/phpmyid.php
@@ -1705,4 +1705,3 @@ $run_mode = (isset($_REQUEST['openid_mode'])
debug("Run mode: $run_mode at: " . time());
debug($_REQUEST, 'Request params');
call_user_func($run_mode . '_mode');
-?>
diff --git a/3rdparty/when/MIT-LICENSE.txt b/3rdparty/when/MIT-LICENSE.txt
deleted file mode 100644
index b4429c89ac1..00000000000
--- a/3rdparty/when/MIT-LICENSE.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-License
-
-Copyright (c) 2010 Thomas Planer
-
-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/3rdparty/when/When.php b/3rdparty/when/When.php
deleted file mode 100644
index d54f296ed61..00000000000
--- a/3rdparty/when/When.php
+++ /dev/null
@@ -1,731 +0,0 @@
-<?php
-/**
- * Name: When
- * Author: Thomas Planer <tplaner@gmail.com>
- * Location: http://github.com/tplaner/When
- * Created: September 2010
- * Description: Determines the next date of recursion given an iCalendar "rrule" like pattern.
- * Requirements: PHP 5.3+ - makes extensive use of the Date and Time library (http://us2.php.net/manual/en/book.datetime.php)
- */
-class When
-{
- protected $frequency;
-
- protected $start_date;
- protected $try_date;
-
- protected $end_date;
-
- protected $gobymonth;
- protected $bymonth;
-
- protected $gobyweekno;
- protected $byweekno;
-
- protected $gobyyearday;
- protected $byyearday;
-
- protected $gobymonthday;
- protected $bymonthday;
-
- protected $gobyday;
- protected $byday;
-
- protected $gobysetpos;
- protected $bysetpos;
-
- protected $suggestions;
-
- protected $count;
- protected $counter;
-
- protected $goenddate;
-
- protected $interval;
-
- protected $wkst;
-
- protected $valid_week_days;
- protected $valid_frequency;
-
- /**
- * __construct
- */
- public function __construct()
- {
- $this->frequency = null;
-
- $this->gobymonth = false;
- $this->bymonth = range(1,12);
-
- $this->gobymonthday = false;
- $this->bymonthday = range(1,31);
-
- $this->gobyday = false;
- // setup the valid week days (0 = sunday)
- $this->byday = range(0,6);
-
- $this->gobyyearday = false;
- $this->byyearday = range(0,366);
-
- $this->gobysetpos = false;
- $this->bysetpos = range(1,366);
-
- $this->gobyweekno = false;
- // setup the range for valid weeks
- $this->byweekno = range(0,54);
-
- $this->suggestions = array();
-
- // this will be set if a count() is specified
- $this->count = 0;
- // how many *valid* results we returned
- $this->counter = 0;
-
- // max date we'll return
- $this->end_date = new DateTime('9999-12-31');
-
- // the interval to increase the pattern by
- $this->interval = 1;
-
- // what day does the week start on? (0 = sunday)
- $this->wkst = 0;
-
- $this->valid_week_days = array('SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA');
-
- $this->valid_frequency = array('SECONDLY', 'MINUTELY', 'HOURLY', 'DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY');
- }
-
- /**
- * @param DateTime|string $start_date of the recursion - also is the first return value.
- * @param string $frequency of the recrusion, valid frequencies: secondly, minutely, hourly, daily, weekly, monthly, yearly
- */
- public function recur($start_date, $frequency = "daily")
- {
- try
- {
- if(is_object($start_date))
- {
- $this->start_date = clone $start_date;
- }
- else
- {
- // timestamps within the RFC have a 'Z' at the end of them, remove this.
- $start_date = trim($start_date, 'Z');
- $this->start_date = new DateTime($start_date);
- }
-
- $this->try_date = clone $this->start_date;
- }
- catch(Exception $e)
- {
- throw new InvalidArgumentException('Invalid start date DateTime: ' . $e);
- }
-
- $this->freq($frequency);
-
- return $this;
- }
-
- public function freq($frequency)
- {
- if(in_array(strtoupper($frequency), $this->valid_frequency))
- {
- $this->frequency = strtoupper($frequency);
- }
- else
- {
- throw new InvalidArgumentException('Invalid frequency type.');
- }
-
- return $this;
- }
-
- // accepts an rrule directly
- public function rrule($rrule)
- {
- // strip off a trailing semi-colon
- $rrule = trim($rrule, ";");
-
- $parts = explode(";", $rrule);
-
- foreach($parts as $part)
- {
- list($rule, $param) = explode("=", $part);
-
- $rule = strtoupper($rule);
- $param = strtoupper($param);
-
- switch($rule)
- {
- case "FREQ":
- $this->frequency = $param;
- break;
- case "UNTIL":
- $this->until($param);
- break;
- case "COUNT":
- $this->count($param);
- break;
- case "INTERVAL":
- $this->interval($param);
- break;
- case "BYDAY":
- $params = explode(",", $param);
- $this->byday($params);
- break;
- case "BYMONTHDAY":
- $params = explode(",", $param);
- $this->bymonthday($params);
- break;
- case "BYYEARDAY":
- $params = explode(",", $param);
- $this->byyearday($params);
- break;
- case "BYWEEKNO":
- $params = explode(",", $param);
- $this->byweekno($params);
- break;
- case "BYMONTH":
- $params = explode(",", $param);
- $this->bymonth($params);
- break;
- case "BYSETPOS":
- $params = explode(",", $param);
- $this->bysetpos($params);
- break;
- case "WKST":
- $this->wkst($param);
- break;
- }
- }
-
- return $this;
- }
-
- //max number of items to return based on the pattern
- public function count($count)
- {
- $this->count = (int)$count;
-
- return $this;
- }
-
- // how often the recurrence rule repeats
- public function interval($interval)
- {
- $this->interval = (int)$interval;
-
- return $this;
- }
-
- // starting day of the week
- public function wkst($day)
- {
- switch($day)
- {
- case 'SU':
- $this->wkst = 0;
- break;
- case 'MO':
- $this->wkst = 1;
- break;
- case 'TU':
- $this->wkst = 2;
- break;
- case 'WE':
- $this->wkst = 3;
- break;
- case 'TH':
- $this->wkst = 4;
- break;
- case 'FR':
- $this->wkst = 5;
- break;
- case 'SA':
- $this->wkst = 6;
- break;
- }
-
- return $this;
- }
-
- // max date
- public function until($end_date)
- {
- try
- {
- if(is_object($end_date))
- {
- $this->end_date = clone $end_date;
- }
- else
- {
- // timestamps within the RFC have a 'Z' at the end of them, remove this.
- $end_date = trim($end_date, 'Z');
- $this->end_date = new DateTime($end_date);
- }
- }
- catch(Exception $e)
- {
- throw new InvalidArgumentException('Invalid end date DateTime: ' . $e);
- }
-
- return $this;
- }
-
- public function bymonth($months)
- {
- if(is_array($months))
- {
- $this->gobymonth = true;
- $this->bymonth = $months;
- }
-
- return $this;
- }
-
- public function bymonthday($days)
- {
- if(is_array($days))
- {
- $this->gobymonthday = true;
- $this->bymonthday = $days;
- }
-
- return $this;
- }
-
- public function byweekno($weeks)
- {
- $this->gobyweekno = true;
-
- if(is_array($weeks))
- {
- $this->byweekno = $weeks;
- }
-
- return $this;
- }
-
- public function bysetpos($days)
- {
- $this->gobysetpos = true;
-
- if(is_array($days))
- {
- $this->bysetpos = $days;
- }
-
- return $this;
- }
-
- public function byday($days)
- {
- $this->gobyday = true;
-
- if(is_array($days))
- {
- $this->byday = array();
- foreach($days as $day)
- {
- $len = strlen($day);
-
- $as = '+';
-
- // 0 mean no occurence is set
- $occ = 0;
-
- if($len == 3)
- {
- $occ = substr($day, 0, 1);
- }
- if($len == 4)
- {
- $as = substr($day, 0, 1);
- $occ = substr($day, 1, 1);
- }
-
- if($as == '-')
- {
- $occ = '-' . $occ;
- }
- else
- {
- $occ = '+' . $occ;
- }
-
- $day = substr($day, -2, 2);
- switch($day)
- {
- case 'SU':
- $this->byday[] = $occ . 'SU';
- break;
- case 'MO':
- $this->byday[] = $occ . 'MO';
- break;
- case 'TU':
- $this->byday[] = $occ . 'TU';
- break;
- case 'WE':
- $this->byday[] = $occ . 'WE';
- break;
- case 'TH':
- $this->byday[] = $occ . 'TH';
- break;
- case 'FR':
- $this->byday[] = $occ . 'FR';
- break;
- case 'SA':
- $this->byday[] = $occ . 'SA';
- break;
- }
- }
- }
-
- return $this;
- }
-
- public function byyearday($days)
- {
- $this->gobyyearday = true;
-
- if(is_array($days))
- {
- $this->byyearday = $days;
- }
-
- return $this;
- }
-
- // this creates a basic list of dates to "try"
- protected function create_suggestions()
- {
- switch($this->frequency)
- {
- case "YEARLY":
- $interval = 'year';
- break;
- case "MONTHLY":
- $interval = 'month';
- break;
- case "WEEKLY":
- $interval = 'week';
- break;
- case "DAILY":
- $interval = 'day';
- break;
- case "HOURLY":
- $interval = 'hour';
- break;
- case "MINUTELY":
- $interval = 'minute';
- break;
- case "SECONDLY":
- $interval = 'second';
- break;
- }
-
- $month_day = $this->try_date->format('j');
- $month = $this->try_date->format('n');
- $year = $this->try_date->format('Y');
-
- $timestamp = $this->try_date->format('H:i:s');
-
- if($this->gobysetpos)
- {
- if($this->try_date == $this->start_date)
- {
- $this->suggestions[] = clone $this->try_date;
- }
- else
- {
- if($this->gobyday)
- {
- foreach($this->bysetpos as $_pos)
- {
- $tmp_array = array();
- $_mdays = range(1, date('t',mktime(0,0,0,$month,1,$year)));
- foreach($_mdays as $_mday)
- {
- $date_time = new DateTime($year . '-' . $month . '-' . $_mday . ' ' . $timestamp);
-
- $occur = ceil($_mday / 7);
-
- $day_of_week = $date_time->format('l');
- $dow_abr = strtoupper(substr($day_of_week, 0, 2));
-
- // set the day of the month + (positive)
- $occur = '+' . $occur . $dow_abr;
- $occur_zero = '+0' . $dow_abr;
-
- // set the day of the month - (negative)
- $total_days = $date_time->format('t') - $date_time->format('j');
- $occur_neg = '-' . ceil(($total_days + 1)/7) . $dow_abr;
-
- $day_from_end_of_month = $date_time->format('t') + 1 - $_mday;
-
- if(in_array($occur, $this->byday) || in_array($occur_zero, $this->byday) || in_array($occur_neg, $this->byday))
- {
- $tmp_array[] = clone $date_time;
- }
- }
-
- if($_pos > 0)
- {
- $this->suggestions[] = clone $tmp_array[$_pos - 1];
- }
- else
- {
- $this->suggestions[] = clone $tmp_array[count($tmp_array) + $_pos];
- }
-
- }
- }
- }
- }
- elseif($this->gobyyearday)
- {
- foreach($this->byyearday as $_day)
- {
- if($_day >= 0)
- {
- $_day--;
-
- $_time = strtotime('+' . $_day . ' days', mktime(0, 0, 0, 1, 1, $year));
- $this->suggestions[] = new Datetime(date('Y-m-d', $_time) . ' ' . $timestamp);
- }
- else
- {
- $year_day_neg = 365 + $_day;
- $leap_year = $this->try_date->format('L');
- if($leap_year == 1)
- {
- $year_day_neg = 366 + $_day;
- }
-
- $_time = strtotime('+' . $year_day_neg . ' days', mktime(0, 0, 0, 1, 1, $year));
- $this->suggestions[] = new Datetime(date('Y-m-d', $_time) . ' ' . $timestamp);
- }
- }
- }
- // special case because for years you need to loop through the months too
- elseif($this->gobyday && $interval == "year")
- {
- foreach($this->bymonth as $_month)
- {
- // this creates an array of days of the month
- $_mdays = range(1, date('t',mktime(0,0,0,$_month,1,$year)));
- foreach($_mdays as $_mday)
- {
- $date_time = new DateTime($year . '-' . $_month . '-' . $_mday . ' ' . $timestamp);
-
- // get the week of the month (1, 2, 3, 4, 5, etc)
- $week = $date_time->format('W');
-
- if($date_time >= $this->start_date && in_array($week, $this->byweekno))
- {
- $this->suggestions[] = clone $date_time;
- }
- }
- }
- }
- elseif($interval == "day")
- {
- $this->suggestions[] = clone $this->try_date;
- }
- elseif($interval == "week")
- {
- $this->suggestions[] = clone $this->try_date;
-
- if($this->gobyday)
- {
- $week_day = $this->try_date->format('w');
-
- $days_in_month = $this->try_date->format('t');
-
- $overflow_count = 1;
- $_day = $month_day;
-
- $run = true;
- while($run)
- {
- $_day++;
- if($_day <= $days_in_month)
- {
- $tmp_date = new DateTime($year . '-' . $month . '-' . $_day . ' ' . $timestamp);
- }
- else
- {
- //$tmp_month = $month+1;
- $tmp_date = new DateTime($year . '-' . $month . '-' . $overflow_count . ' ' . $timestamp);
- $tmp_date->modify('+1 month');
- $overflow_count++;
- }
-
- $week_day = $tmp_date->format('w');
-
- if($this->try_date == $this->start_date)
- {
- if($week_day == $this->wkst)
- {
- $this->try_date = clone $tmp_date;
- $this->try_date->modify('-7 days');
- $run = false;
- }
- }
-
- if($week_day != $this->wkst)
- {
- $this->suggestions[] = clone $tmp_date;
- }
- else
- {
- $run = false;
- }
- }
- }
- }
- elseif($this->gobyday && $interval == "month")
- {
- $_mdays = range(1, date('t',mktime(0,0,0,$month,1,$year)));
- foreach($_mdays as $_mday)
- {
- $date_time = new DateTime($year . '-' . $month . '-' . $_mday . ' ' . $timestamp);
-
- // get the week of the month (1, 2, 3, 4, 5, etc)
- $week = $date_time->format('W');
-
- if($date_time >= $this->start_date && in_array($week, $this->byweekno))
- {
- $this->suggestions[] = clone $date_time;
- }
- }
- }
- elseif($this->gobymonth)
- {
- foreach($this->bymonth as $_month)
- {
- $date_time = new DateTime($year . '-' . $_month . '-' . $month_day . ' ' . $timestamp);
-
- if($date_time >= $this->start_date)
- {
- $this->suggestions[] = clone $date_time;
- }
- }
- }
- else
- {
- $this->suggestions[] = clone $this->try_date;
- }
-
- if($interval == "month")
- {
-
- $this->try_date->modify('first day of next month');
- if((int) date('t', $this->try_date->format('U')) > (int) $this->start_date->format('j')){
- $this->try_date->modify('+' . (int) $this->start_date->format('j') - 1 . ' day');
- }else{
- $this->try_date->modify('+' . (int) date('t', $this->try_date->format('U')) - 1 . ' day');
- }
- }
- else
- {
- $this->try_date->modify($this->interval . ' ' . $interval);
- }
- }
-
- protected function valid_date($date)
- {
- $year = $date->format('Y');
- $month = $date->format('n');
- $day = $date->format('j');
-
- $year_day = $date->format('z') + 1;
-
- $year_day_neg = -366 + $year_day;
- $leap_year = $date->format('L');
- if($leap_year == 1)
- {
- $year_day_neg = -367 + $year_day;
- }
-
- // this is the nth occurence of the date
- $occur = ceil($day / 7);
-
- $week = $date->format('W');
-
- $day_of_week = $date->format('l');
- $dow_abr = strtoupper(substr($day_of_week, 0, 2));
-
- // set the day of the month + (positive)
- $occur = '+' . $occur . $dow_abr;
- $occur_zero = '+0' . $dow_abr;
-
- // set the day of the month - (negative)
- $total_days = $date->format('t') - $date->format('j');
- $occur_neg = '-' . ceil(($total_days + 1)/7) . $dow_abr;
-
- $day_from_end_of_month = $date->format('t') + 1 - $day;
-
- if(in_array($month, $this->bymonth) &&
- (in_array($occur, $this->byday) || in_array($occur_zero, $this->byday) || in_array($occur_neg, $this->byday)) &&
- in_array($week, $this->byweekno) &&
- (in_array($day, $this->bymonthday) || in_array(-$day_from_end_of_month, $this->bymonthday)) &&
- (in_array($year_day, $this->byyearday) || in_array($year_day_neg, $this->byyearday)))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
-
- // return the next valid DateTime object which matches the pattern and follows the rules
- public function next()
- {
- // check the counter is set
- if($this->count !== 0)
- {
- if($this->counter >= $this->count)
- {
- return false;
- }
- }
-
- // create initial set of suggested dates
- if(count($this->suggestions) === 0)
- {
- $this->create_suggestions();
- }
-
- // loop through the suggested dates
- while(count($this->suggestions) > 0)
- {
- // get the first one on the array
- $try_date = array_shift($this->suggestions);
-
- // make sure the date doesn't exceed the max date
- if($try_date > $this->end_date)
- {
- return false;
- }
-
- // make sure it falls within the allowed days
- if($this->valid_date($try_date) === true)
- {
- $this->counter++;
- return $try_date;
- }
- else
- {
- // we might be out of suggested days, so load some more
- if(count($this->suggestions) === 0)
- {
- $this->create_suggestions();
- }
- }
- }
- }
-}
diff --git a/apps/admin_audit/appinfo/app.php b/apps/admin_audit/appinfo/app.php
new file mode 100644
index 00000000000..e52f633cf14
--- /dev/null
+++ b/apps/admin_audit/appinfo/app.php
@@ -0,0 +1,18 @@
+<?php
+
+OC::$CLASSPATH['OC_Admin_Audit_Hooks_Handlers'] = 'apps/admin_audit/lib/hooks_handlers.php';
+
+OCP\Util::connectHook('OCP\User', 'pre_login', 'OC_Admin_Audit_Hooks_Handlers', 'pre_login');
+OCP\Util::connectHook('OCP\User', 'post_login', 'OC_Admin_Audit_Hooks_Handlers', 'post_login');
+OCP\Util::connectHook('OCP\User', 'logout', 'OC_Admin_Audit_Hooks_Handlers', 'logout');
+
+OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_rename, 'OC_Admin_Audit_Hooks_Handlers', 'rename');
+OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_create, 'OC_Admin_Audit_Hooks_Handlers', 'create');
+OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_copy, 'OC_Admin_Audit_Hooks_Handlers', 'copy');
+OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_write, 'OC_Admin_Audit_Hooks_Handlers', 'write');
+OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_read, 'OC_Admin_Audit_Hooks_Handlers', 'read');
+OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_delete, 'OC_Admin_Audit_Hooks_Handlers', 'delete');
+
+OCP\Util::connectHook('OC_Share', 'public', 'OC_Admin_Audit_Hooks_Handlers', 'share_public');
+OCP\Util::connectHook('OC_Share', 'public-download', 'OC_Admin_Audit_Hooks_Handlers', 'share_public_download');
+OCP\Util::connectHook('OC_Share', 'user', 'OC_Admin_Audit_Hooks_Handlers', 'share_user');
diff --git a/apps/admin_audit/appinfo/info.xml b/apps/admin_audit/appinfo/info.xml
new file mode 100644
index 00000000000..4fa013162f3
--- /dev/null
+++ b/apps/admin_audit/appinfo/info.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<info>
+ <id>admin_audit</id>
+ <name>Log audit info</name>
+ <version>0.1</version>
+ <licence>AGPL</licence>
+ <author>Bart Visscher</author>
+ <require>4</require>
+ <description>Audit user actions in Owncloud</description>
+ <shipped>true</shipped>
+</info>
diff --git a/apps/admin_audit/lib/hooks_handlers.php b/apps/admin_audit/lib/hooks_handlers.php
new file mode 100644
index 00000000000..c5aec97d939
--- /dev/null
+++ b/apps/admin_audit/lib/hooks_handlers.php
@@ -0,0 +1,72 @@
+<?php
+
+class OC_Admin_Audit_Hooks_Handlers {
+ static public function pre_login($params) {
+ $path = $params['uid'];
+ self::log('Trying login '.$user);
+ }
+ static public function post_login($params) {
+ $path = $params['uid'];
+ self::log('Login '.$user);
+ }
+ static public function logout($params) {
+ $user = OCP\User::getUser();
+ self::log('Logout '.$user);
+ }
+
+ static public function rename($params) {
+ $oldpath = $params[OC_Filesystem::signal_param_oldpath];
+ $newpath = $params[OC_Filesystem::signal_param_newpath];
+ $user = OCP\User::getUser();
+ self::log('Rename "'.$oldpath.'" to "'.$newpath.'" by '.$user);
+ }
+ static public function create($params) {
+ $path = $params[OC_Filesystem::signal_param_path];
+ $user = OCP\User::getUser();
+ self::log('Create "'.$path.'" by '.$user);
+ }
+ static public function copy($params) {
+ $oldpath = $params[OC_Filesystem::signal_param_oldpath];
+ $newpath = $params[OC_Filesystem::signal_param_newpath];
+ $user = OCP\User::getUser();
+ self::log('Copy "'.$oldpath.'" to "'.$newpath.'" by '.$user);
+ }
+ static public function write($params) {
+ $path = $params[OC_Filesystem::signal_param_path];
+ $user = OCP\User::getUser();
+ self::log('Write "'.$path.'" by '.$user);
+ }
+ static public function read($params) {
+ $path = $params[OC_Filesystem::signal_param_path];
+ $user = OCP\User::getUser();
+ self::log('Read "'.$path.'" by '.$user);
+ }
+ static public function delete($params) {
+ $path = $params[OC_Filesystem::signal_param_path];
+ $user = OCP\User::getUser();
+ self::log('Delete "'.$path.'" by '.$user);
+ }
+ static public function share_public($params) {
+ $path = $params['source'];
+ $token = $params['token'];
+ $user = OCP\User::getUser();
+ self::log('Shared "'.$path.'" with public, token="'.$token.'" by '.$user);
+ }
+ static public function share_public_download($params) {
+ $path = $params['source'];
+ $token = $params['token'];
+ $user = $_SERVER['REMOTE_ADDR'];
+ self::log('Download of shared "'.$path.'" token="'.$token.'" by '.$user);
+ }
+ static public function share_user($params) {
+ $path = $params['source'];
+ $permissions = $params['permissions'];
+ $with = $params['with'];
+ $user = OCP\User::getUser();
+ $rw = $permissions & OC_Share::WRITE ? 'w' : 'o';
+ self::log('Shared "'.$path.'" (r'.$rw.') with user "'.$with.'" by '.$user);
+ }
+ static protected function log($msg) {
+ OCP\Util::writeLog('admin_audit', $msg, OCP\Util::INFO);
+ }
+}
diff --git a/apps/admin_dependencies_chk/appinfo/app.php b/apps/admin_dependencies_chk/appinfo/app.php
index 72d368a085e..62b26342d23 100644
--- a/apps/admin_dependencies_chk/appinfo/app.php
+++ b/apps/admin_dependencies_chk/appinfo/app.php
@@ -1,9 +1,4 @@
<?php
$l=OC_L10N::get('admin_dependencies_chk');
-OCP\App::register( array(
- 'order' => 14,
- 'id' => 'admin_dependencies_chk',
- 'name' => 'Owncloud Install Info' ));
-
OCP\App::registerAdmin('admin_dependencies_chk','settings');
diff --git a/apps/admin_dependencies_chk/l10n/.gitkeep b/apps/admin_dependencies_chk/l10n/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/apps/admin_dependencies_chk/l10n/.gitkeep
diff --git a/apps/admin_dependencies_chk/l10n/ca.php b/apps/admin_dependencies_chk/l10n/ca.php
new file mode 100644
index 00000000000..08f4ec80781
--- /dev/null
+++ b/apps/admin_dependencies_chk/l10n/ca.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"The php-json module is needed by the many applications for inter communications" => "El mòdul php-json és necessari per moltes aplicacions per comunicacions internes",
+"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "El mòdul php-curl és necessari per mostrar el títol de la pàgina quan s'afegeixen adreces d'interès",
+"The php-gd module is needed to create thumbnails of your images" => "El mòdul php-gd és necessari per generar miniatures d'imatges",
+"The php-ldap module is needed connect to your ldap server" => "El mòdul php-ldap és necessari per connectar amb el servidor ldap",
+"The php-zip module is needed download multiple files at once" => "El mòdul php-zip és necessari per baixar múltiples fitxers de cop",
+"The php-mb_multibyte module is needed to manage correctly the encoding." => "El mòdul php-mb_multibyte és necessari per gestionar correctament la codificació.",
+"The php-ctype module is needed validate data." => "El mòdul php-ctype és necessari per validar dades.",
+"The php-xml module is needed to share files with webdav." => "El mòdul php-xml és necessari per compatir els fitxers amb webdav.",
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "La directiva allow_url_fopen de php.ini hauria d'establir-se en 1 per accedir a la base de coneixements dels servidors OCS",
+"The php-pdo module is needed to store owncloud data into a database." => "El mòdul php-pdo és necessari per desar les dades d'ownCloud en una base de dades.",
+"Dependencies status" => "Estat de dependències",
+"Used by :" => "Usat per:"
+);
diff --git a/apps/admin_dependencies_chk/l10n/cs_CZ.php b/apps/admin_dependencies_chk/l10n/cs_CZ.php
new file mode 100644
index 00000000000..f750f13aefc
--- /dev/null
+++ b/apps/admin_dependencies_chk/l10n/cs_CZ.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"The php-json module is needed by the many applications for inter communications" => "Modul php-json je třeba pro vzájemnou komunikaci mnoha aplikací",
+"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "Modul php-curl je třeba pro zobrazení titulu strany v okamžiku přidání záložky",
+"The php-gd module is needed to create thumbnails of your images" => "Modul php-gd je třeba pro tvorbu náhledů Vašich obrázků",
+"The php-ldap module is needed connect to your ldap server" => "Modul php-ldap je třeba pro připojení na Váš ldap server",
+"The php-zip module is needed download multiple files at once" => "Modul php-zip je třeba pro souběžné stahování souborů",
+"The php-mb_multibyte module is needed to manage correctly the encoding." => "Modul php-mb_multibyte je třeba pro správnou funkci kódování.",
+"The php-ctype module is needed validate data." => "Modul php-ctype je třeba k ověřování dat.",
+"The php-xml module is needed to share files with webdav." => "Modul php-xml je třeba ke sdílení souborů prostřednictvím WebDAV.",
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "Příkaz allow_url_fopen ve Vašem php.ini souboru by měl být nastaven na 1 kvůli získávání informací z OCS serverů",
+"The php-pdo module is needed to store owncloud data into a database." => "Modul php-pdo je třeba pro ukládání dat ownCloud do databáze",
+"Dependencies status" => "Status závislostí",
+"Used by :" => "Používáno:"
+);
diff --git a/apps/admin_dependencies_chk/l10n/de.php b/apps/admin_dependencies_chk/l10n/de.php
new file mode 100644
index 00000000000..7877e7d679b
--- /dev/null
+++ b/apps/admin_dependencies_chk/l10n/de.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"The php-json module is needed by the many applications for inter communications" => "Das Modul php-json wird von vielen Anwendungen zur internen Kommunikation benötigt.",
+"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "Das Modul php-curl wird benötigt, um den Titel der Seite für die Lesezeichen hinzuzufügen.",
+"The php-gd module is needed to create thumbnails of your images" => "Das Modul php-gd wird für die Erzeugung der Vorschaubilder benötigt.",
+"The php-ldap module is needed connect to your ldap server" => "Das Modul php-ldap wird für die Verbindung mit dem LDAP-Server benötigt.",
+"The php-zip module is needed download multiple files at once" => "Das Modul php-zip wird für den gleichzeitigen Download mehrerer Dateien benötigt.",
+"The php-mb_multibyte module is needed to manage correctly the encoding." => "Das Modul php_mb_multibyte wird benötigt, um das Encoding richtig zu handhaben.",
+"The php-ctype module is needed validate data." => "Das Modul php-ctype wird benötigt, um Daten zu prüfen.",
+"The php-xml module is needed to share files with webdav." => "Das Modul php-xml wird benötigt, um Dateien über WebDAV zu teilen.",
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "Die Richtlinie allow_url_fopen in Ihrer php.ini sollte auf 1 gesetzt werden, um die Wissensbasis vom OCS-Server abrufen.",
+"The php-pdo module is needed to store owncloud data into a database." => "Das Modul php-pdo wird benötigt, um Daten in der Datenbank zu speichern.",
+"Dependencies status" => "Status der Abhängigkeiten",
+"Used by :" => "Benutzt von:"
+);
diff --git a/apps/admin_dependencies_chk/l10n/el.php b/apps/admin_dependencies_chk/l10n/el.php
new file mode 100644
index 00000000000..9dd455b670e
--- /dev/null
+++ b/apps/admin_dependencies_chk/l10n/el.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Dependencies status" => "Κατάσταση εξαÏτήσεων",
+"Used by :" => "ΧÏησιμοποιήθηκε από:"
+);
diff --git a/apps/admin_dependencies_chk/l10n/eo.php b/apps/admin_dependencies_chk/l10n/eo.php
new file mode 100644
index 00000000000..65896831f7b
--- /dev/null
+++ b/apps/admin_dependencies_chk/l10n/eo.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"The php-json module is needed by the many applications for inter communications" => "La modulo php-json necesas por komuniko inter la multaj aplikaĵoj",
+"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "La modulo php-curl necesas por venigi la paÄotitolon dum aldono de legosigno",
+"The php-gd module is needed to create thumbnails of your images" => "La modulo php-gd necesas por krei bildetojn.",
+"The php-ldap module is needed connect to your ldap server" => "La modulo php-ldap necesas por konekti al via LDAP-servilo.",
+"The php-zip module is needed download multiple files at once" => "La modulo php-zip necesas por elÅuti plurajn dosierojn per unu fojo.",
+"The php-mb_multibyte module is needed to manage correctly the encoding." => "La modulo php-mb_multibyte necesas por Äuste administri la kodprezenton.",
+"The php-ctype module is needed validate data." => "La modulo php-ctype necesas por validkontroli datumojn.",
+"The php-xml module is needed to share files with webdav." => "La modulo php-xml necesas por kunhavigi dosierojn per WebDAV.",
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "La ordono allow_url_fopen de via php.ini devus valori 1 por ricevi scibazon el OCS-serviloj",
+"The php-pdo module is needed to store owncloud data into a database." => "La modulo php-pdo necesas por konservi datumojn de ownCloud en datumbazo.",
+"Dependencies status" => "Stato de dependoj",
+"Used by :" => "Uzata de:"
+);
diff --git a/apps/admin_dependencies_chk/l10n/es.php b/apps/admin_dependencies_chk/l10n/es.php
new file mode 100644
index 00000000000..cbf13951ac1
--- /dev/null
+++ b/apps/admin_dependencies_chk/l10n/es.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Dependencies status" => "Estado de las dependencias",
+"Used by :" => "Usado por:"
+);
diff --git a/apps/admin_dependencies_chk/l10n/et_EE.php b/apps/admin_dependencies_chk/l10n/et_EE.php
new file mode 100644
index 00000000000..529c8e78d1a
--- /dev/null
+++ b/apps/admin_dependencies_chk/l10n/et_EE.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"The php-json module is needed by the many applications for inter communications" => "php-json moodul on vajalik paljude rakenduse poolt omvahelise suhtlemise jaoks",
+"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "php-curl moodul on vajalik lehe pealkirja tõmbamiseks järjehoidja lisamisel",
+"The php-gd module is needed to create thumbnails of your images" => "php-gd moodul on vajalik sinu piltidest pisipiltide loomiseks",
+"The php-ldap module is needed connect to your ldap server" => "php-ldap moodul on vajalik sinu ldap serveriga ühendumiseks",
+"The php-zip module is needed download multiple files at once" => "php-zip moodul on vajalik mitme faili korraga alla laadimiseks",
+"The php-mb_multibyte module is needed to manage correctly the encoding." => "php-mb_multibyte moodul on vajalik kodeerimise korrektseks haldamiseks.",
+"The php-ctype module is needed validate data." => "php-ctype moodul on vajalik andmete kontrollimiseks.",
+"The php-xml module is needed to share files with webdav." => "php-xml moodul on vajalik failide jagamiseks webdav-iga.",
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "Sinu php.ini failis oleva direktiivi allow_url_fopen väärtuseks peaks määrama 1, et saaks tõmmata teadmistebaasi OCS-i serveritest",
+"The php-pdo module is needed to store owncloud data into a database." => "php-pdo moodul on vajalik owncloudi andmete salvestamiseks andmebaasi.",
+"Dependencies status" => "Sõltuvuse staatus",
+"Used by :" => "Kasutab :"
+);
diff --git a/apps/admin_dependencies_chk/l10n/fi_FI.php b/apps/admin_dependencies_chk/l10n/fi_FI.php
new file mode 100644
index 00000000000..85e33cfe8c5
--- /dev/null
+++ b/apps/admin_dependencies_chk/l10n/fi_FI.php
@@ -0,0 +1,9 @@
+<?php $TRANSLATIONS = array(
+"The php-gd module is needed to create thumbnails of your images" => "php-gd-moduuli vaaditaan, jotta kuvista on mahdollista luoda esikatselukuvia",
+"The php-ldap module is needed connect to your ldap server" => "php-ldap-moduuli vaaditaan, jotta yhteys ldap-palvelimeen on mahdollista",
+"The php-zip module is needed download multiple files at once" => "php-zip-moduuli vaaditaan, jotta useiden tiedostojen samanaikainen lataus on mahdollista",
+"The php-xml module is needed to share files with webdav." => "php-xml-moduuli vaaditaan, jotta tiedostojen jako webdavia käyttäen on mahdollista",
+"The php-pdo module is needed to store owncloud data into a database." => "php-pdo-moduuli tarvitaan, jotta ownCloud-tietojen tallennus tietokantaan on mahdollista",
+"Dependencies status" => "Riippuvuuksien tila",
+"Used by :" => "Käyttökohde:"
+);
diff --git a/apps/admin_dependencies_chk/l10n/fr.php b/apps/admin_dependencies_chk/l10n/fr.php
new file mode 100644
index 00000000000..1b195b78bb4
--- /dev/null
+++ b/apps/admin_dependencies_chk/l10n/fr.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"The php-json module is needed by the many applications for inter communications" => "Le module php-json est requis pour l'inter-communication de nombreux modules.",
+"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "Le module php-curl est requis afin de rapatrier le titre des pages lorsque vous ajoutez un marque-pages.",
+"The php-gd module is needed to create thumbnails of your images" => "Le module php-gd est requis afin de permettre la création d'aperçus pour vos images.",
+"The php-ldap module is needed connect to your ldap server" => "Le module php-ldap est requis afin de permettre la connexion à votre serveur ldap.",
+"The php-zip module is needed download multiple files at once" => "Le module php-zip est requis pour le téléchargement simultané de plusieurs fichiers.",
+"The php-mb_multibyte module is needed to manage correctly the encoding." => "Le module php-mb_multibyte est requis pour une gestion correcte des encodages.",
+"The php-ctype module is needed validate data." => "Le module php-ctype est requis pour la validation des données.",
+"The php-xml module is needed to share files with webdav." => "Le module php-xml est requis pour le partage de fichiers via webdav.",
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "La directive allow_url_fopen de votre fichier php.ini doit être à la valeur 1 afin de permettre le rapatriement de la base de connaissance depuis les serveurs OCS.",
+"The php-pdo module is needed to store owncloud data into a database." => "le module php-pdo est requis pour le stockage des données ownCloud en base de données.",
+"Dependencies status" => "Statut des dépendances",
+"Used by :" => "Utilisé par :"
+);
diff --git a/apps/admin_dependencies_chk/l10n/it.php b/apps/admin_dependencies_chk/l10n/it.php
new file mode 100644
index 00000000000..f51286966e1
--- /dev/null
+++ b/apps/admin_dependencies_chk/l10n/it.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"The php-json module is needed by the many applications for inter communications" => "Il modulo php-json è richiesto per l'intercomunicazione di diverse applicazioni",
+"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "Il modulo php-curl è richiesto per scaricare il titolo della pagina quando si aggiunge un segnalibro",
+"The php-gd module is needed to create thumbnails of your images" => "Il modulo php-gd è richiesto per creare miniature delle tue immagini",
+"The php-ldap module is needed connect to your ldap server" => "Il modulo php-ldap è richiesto per collegarsi a un server ldap",
+"The php-zip module is needed download multiple files at once" => "Il modulo php-zip è richiesto per scaricare diversi file contemporaneamente",
+"The php-mb_multibyte module is needed to manage correctly the encoding." => "Il modulo php-mb_multibyte è richiesto per gestire correttamente la codifica.",
+"The php-ctype module is needed validate data." => "Il modulo php-ctype è richiesto per la validazione dei dati.",
+"The php-xml module is needed to share files with webdav." => "Il modulo php-xml è richiesto per condividere i file con webdav.",
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "La direttiva allow_url_fopen del tuo php.ini deve essere impostata a 1 per recuperare la base di conoscenza dai server di OCS",
+"The php-pdo module is needed to store owncloud data into a database." => "Il modulo php-pdo è richiesto per archiviare i dati di ownCloud in un database.",
+"Dependencies status" => "Stato delle dipendenze",
+"Used by :" => "Usato da:"
+);
diff --git a/apps/admin_dependencies_chk/l10n/ja_JP.php b/apps/admin_dependencies_chk/l10n/ja_JP.php
new file mode 100644
index 00000000000..0770b92db15
--- /dev/null
+++ b/apps/admin_dependencies_chk/l10n/ja_JP.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"The php-json module is needed by the many applications for inter communications" => "php-jsonモジュールã¯ã‚¢ãƒ—リケーション間ã®å†…部通信ã«å¿…è¦ã§ã™",
+"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "php-curlモジュールã¯ãƒ–ックマーク追加時ã®ãƒšãƒ¼ã‚¸ã‚¿ã‚¤ãƒˆãƒ«å–å¾—ã«å¿…è¦ã§ã™",
+"The php-gd module is needed to create thumbnails of your images" => "php-gdモジュールã¯ã‚µãƒ ãƒã‚¤ãƒ«ç”»åƒã®ç”Ÿæˆã«å¿…è¦ã§ã™",
+"The php-ldap module is needed connect to your ldap server" => "php-ldapモジュールã¯LDAPサーãƒã¸ã®æŽ¥ç¶šã«å¿…è¦ã§ã™",
+"The php-zip module is needed download multiple files at once" => "php-zipモジュールã¯è¤‡æ•°ãƒ•ã‚¡ã‚¤ãƒ«ã®åŒæ™‚ダウンロードã«å¿…è¦ã§ã™",
+"The php-mb_multibyte module is needed to manage correctly the encoding." => "php-mb_multibyteモジュールã¯ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã‚’æ­£ã—ã扱ã†ãŸã‚ã«å¿…è¦ã§ã™",
+"The php-ctype module is needed validate data." => "php-ctypeモジュールã¯ãƒ‡ãƒ¼ã‚¿ã®ãƒãƒªãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ã«å¿…è¦ã§ã™",
+"The php-xml module is needed to share files with webdav." => "php-xmlモジュールã¯WebDAVã§ã®ãƒ•ã‚¡ã‚¤ãƒ«å…±æœ‰ã«å¿…è¦ã§ã™",
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "php.iniã®allow_url_fopenã¯OCSサーãƒã‹ã‚‰çŸ¥è­˜ãƒ™ãƒ¼ã‚¹ã‚’å–å¾—ã™ã‚‹ãŸã‚ã«1ã«è¨­å®šã—ãªãã¦ã¯ãªã‚Šã¾ã›ã‚“",
+"The php-pdo module is needed to store owncloud data into a database." => "php-pdoモジュールã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ownCloudã®ãƒ‡ãƒ¼ã‚¿ã‚’æ ¼ç´ã™ã‚‹ãŸã‚ã«å¿…è¦ã§ã™",
+"Dependencies status" => "ä¾å­˜é–¢ä¿‚ã®çŠ¶æ³",
+"Used by :" => "利用先 :"
+);
diff --git a/apps/admin_dependencies_chk/l10n/lt_LT.php b/apps/admin_dependencies_chk/l10n/lt_LT.php
new file mode 100644
index 00000000000..4fed2ab93d5
--- /dev/null
+++ b/apps/admin_dependencies_chk/l10n/lt_LT.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"The php-json module is needed by the many applications for inter communications" => "Php-json modulis yra reikalingas duomenų keitimuisi tarp programų",
+"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "Php-curl modulis automatiškai nuskaito tinklapio pavadinimą kuomet išsaugoma žymelė.",
+"The php-gd module is needed to create thumbnails of your images" => "Php-gd modulis yra naudojamas paveikslėlių miniatiūroms kurti.",
+"The php-ldap module is needed connect to your ldap server" => "Php-ldap modulis yra reikalingas prisijungimui prie jūsų ldap serverio",
+"The php-zip module is needed download multiple files at once" => "Php-zip modulis yra reikalingas kelių failų atsiuntimui iš karto.",
+"The php-mb_multibyte module is needed to manage correctly the encoding." => "Php-mb_multibyte modulis yra naudojamas apdoroti įvairius teksto kodavimo formatus.",
+"The php-ctype module is needed validate data." => "Php-ctype modulis yra reikalingas duomenų tikrinimui.",
+"The php-xml module is needed to share files with webdav." => "Php-xml modulis yra reikalingas failų dalinimuisi naudojant webdav.",
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "allow_url_fopen direktyva turėtų būti nustatyta į \"1\" jei norite automatiškai gauti žinių bazės informaciją iš OCS serverių.",
+"The php-pdo module is needed to store owncloud data into a database." => "Php-pdo modulis yra reikalingas duomenų saugojimui į owncloud duomenų bazę.",
+"Dependencies status" => "PriklausomybÄ—s",
+"Used by :" => "Naudojama:"
+);
diff --git a/apps/admin_dependencies_chk/l10n/pl.php b/apps/admin_dependencies_chk/l10n/pl.php
new file mode 100644
index 00000000000..e40d23cb7e1
--- /dev/null
+++ b/apps/admin_dependencies_chk/l10n/pl.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"The php-json module is needed by the many applications for inter communications" => "Moduł php-json jest wymagane przez wiele aplikacji do wewnętrznej łączności",
+"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "Modude php-curl jest wymagany do pobrania tytułu strony podczas dodawania zakładki",
+"The php-gd module is needed to create thumbnails of your images" => "Moduł php-gd jest wymagany do tworzenia miniatury obrazów",
+"The php-ldap module is needed connect to your ldap server" => "Moduł php-ldap jest wymagany aby połączyć się z serwerem ldap",
+"The php-zip module is needed download multiple files at once" => "Moduł php-zip jest wymagany aby pobrać wiele plików na raz",
+"The php-mb_multibyte module is needed to manage correctly the encoding." => "Moduł php-mb_multibyte jest wymagany do poprawnego zarządzania kodowaniem.",
+"The php-ctype module is needed validate data." => "Moduł php-ctype jest wymagany do sprawdzania poprawności danych.",
+"The php-xml module is needed to share files with webdav." => "Moduł php-xml jest wymagany do udostępniania plików przy użyciu protokołu webdav.",
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "Dyrektywy allow_url_fopen użytkownika php.ini powinna być ustawiona na 1 do pobierania bazy wiedzy z serwerów OCS",
+"The php-pdo module is needed to store owncloud data into a database." => "Moduł php-pdo jest wymagany do przechowywania danych owncloud w bazie danych.",
+"Dependencies status" => "Stan zależności",
+"Used by :" => "Używane przez:"
+);
diff --git a/apps/admin_dependencies_chk/l10n/sl.php b/apps/admin_dependencies_chk/l10n/sl.php
new file mode 100644
index 00000000000..0d36aa379ce
--- /dev/null
+++ b/apps/admin_dependencies_chk/l10n/sl.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"The php-json module is needed by the many applications for inter communications" => "Modul php-json je potreben za medsebojno komunikacijo veliko aplikacij.",
+"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "Modul php-curl je potreben za pridobivanje naslova strani pri dodajanju zaznamkov.",
+"The php-gd module is needed to create thumbnails of your images" => "Modul php-gd je potreben za ustvarjanje sliÄic za predogled.",
+"The php-ldap module is needed connect to your ldap server" => "Modul php-ldap je potreben za povezavo z vašim ldap strežnikom.",
+"The php-zip module is needed download multiple files at once" => "Modul php-zip je potreben za prenaÅ¡anje veÄih datotek hkrati.",
+"The php-mb_multibyte module is needed to manage correctly the encoding." => "Modul php-mb_multibyte je potreben za pravilno upravljanje kodiranja.",
+"The php-ctype module is needed validate data." => "Modul php-ctype je potreben za preverjanje veljavnosti podatkov.",
+"The php-xml module is needed to share files with webdav." => "Modul php-xml je potreben za izmenjavo datotek preko protokola WebDAV.",
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "Direktiva allow_url_fopen v vaÅ¡i php.ini datoteki mora biti nastavljena na 1, Äe želite omogoÄiti dostop do zbirke znanja na strežnikih OCS.",
+"The php-pdo module is needed to store owncloud data into a database." => "Modul php-pdo je potreben za shranjevanje ownCloud podatkov v podatkovno zbirko.",
+"Dependencies status" => "Stanje odvisnosti",
+"Used by :" => "Uporablja:"
+);
diff --git a/apps/admin_dependencies_chk/l10n/sv.php b/apps/admin_dependencies_chk/l10n/sv.php
new file mode 100644
index 00000000000..07868f3c03c
--- /dev/null
+++ b/apps/admin_dependencies_chk/l10n/sv.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"The php-json module is needed by the many applications for inter communications" => "Modulen php-json behövs av många applikationer som interagerar.",
+"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "Modulen php-curl behövs för att hämta sidans titel när du lägger till bokmärken.",
+"The php-gd module is needed to create thumbnails of your images" => "Modulen php-gd behövs för att skapa miniatyrer av dina bilder.",
+"The php-ldap module is needed connect to your ldap server" => "Modulen php-ldap behövs för att ansluta mot din ldapserver.",
+"The php-zip module is needed download multiple files at once" => "Modulen php-zip behövs för att kunna ladda ner flera filer på en gång.",
+"The php-mb_multibyte module is needed to manage correctly the encoding." => "Modulen php-mb_multibyte behövs för att hantera korrekt teckenkodning.",
+"The php-ctype module is needed validate data." => "Modulen php-ctype behövs för att validera data.",
+"The php-xml module is needed to share files with webdav." => "Modulen php-xml behövs för att kunna dela filer med webdav.",
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "Direktivet allow_url_fopen i php.ini bör sättas till 1 för att kunna hämta kunskapsbasen från OCS-servrar.",
+"The php-pdo module is needed to store owncloud data into a database." => "Modulen php-pdo behövs för att kunna lagra ownCloud data i en databas.",
+"Dependencies status" => "Beroenden status",
+"Used by :" => "Används av:"
+);
diff --git a/apps/admin_dependencies_chk/l10n/th_TH.php b/apps/admin_dependencies_chk/l10n/th_TH.php
new file mode 100644
index 00000000000..01d5c36366d
--- /dev/null
+++ b/apps/admin_dependencies_chk/l10n/th_TH.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"The php-json module is needed by the many applications for inter communications" => "โมดูล php-json จำเป็นต้องใช้สำหรับà¹à¸­à¸žà¸žà¸¥à¸´à¹€à¸„ชั่นหลายๆตัวเพื่อà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸ªà¸²à¸à¸¥",
+"The php-curl modude is needed to fetch the page title when adding a bookmarks" => "โมดูล php-curl จำเป็นต้องใช้สำหรับดึงข้อมูลชื่อหัวเว็บเมื่อเพิ่มเข้าไปยังรายà¸à¸²à¸£à¹‚ปรด",
+"The php-gd module is needed to create thumbnails of your images" => "โมดูล php-gd จำเป็นต้องใช้สำหรับสร้างรูปภาพขนาดย่อของรูปภาพของคุณ",
+"The php-ldap module is needed connect to your ldap server" => "โมดูล php-ldap จำเป็นต้องใช้สำหรับà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸à¸±à¸šà¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸­à¸£à¹Œ ldap ของคุณ",
+"The php-zip module is needed download multiple files at once" => "โมดูล php-zip จำเป็นต้องใช้สำหรับดาวน์โหลดไฟล์พร้อมà¸à¸±à¸™à¸«à¸¥à¸²à¸¢à¹†à¹„ฟล์ในครั้งเดียว",
+"The php-mb_multibyte module is needed to manage correctly the encoding." => "โมดูล php-mb_multibyte จำเป็นต้องใช้สำหรับà¸à¸²à¸£à¸ˆà¸±à¸”à¸à¸²à¸£à¸à¸²à¸£à¹à¸›à¸¥à¸‡à¸£à¸«à¸±à¸ªà¹„ฟล์อย่างถูà¸à¸•à¹‰à¸­à¸‡",
+"The php-ctype module is needed validate data." => "โมดูล php-ctype จำเป็นต้องใช้สำหรับตรวจสอบความถูà¸à¸•à¹‰à¸­à¸‡à¸‚องข้อมูล",
+"The php-xml module is needed to share files with webdav." => "โมดูล php-xml จำเป็นต้องใช้สำหรับà¹à¸Šà¸£à¹Œà¹„ฟล์ด้วย webdav",
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve knowledge base from OCS servers" => "คำสั่ง allow_url_fopen ที่อยู่ในไฟล์ php.ini ของคุณ ควรà¸à¸³à¸«à¸™à¸”เป็น 1 เพื่อดึงข้อมูลของà¸à¸²à¸™à¸„วามรู้ต่างๆจาà¸à¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸­à¸£à¹Œà¸‚อง OCS",
+"The php-pdo module is needed to store owncloud data into a database." => "โมดูล php-pdo จำเป็นต้องใช้สำหรับจัดเà¸à¹‡à¸šà¸‚้อมูลใน owncloud เข้าไปไว้ยังà¸à¸²à¸™à¸‚้อมูล",
+"Dependencies status" => "สถานะà¸à¸²à¸£à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡",
+"Used by :" => "ใช้งานโดย:"
+);
diff --git a/apps/admin_migrate/l10n/.gitkeep b/apps/admin_migrate/l10n/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/apps/admin_migrate/l10n/.gitkeep
diff --git a/apps/admin_migrate/l10n/ca.php b/apps/admin_migrate/l10n/ca.php
new file mode 100644
index 00000000000..8743b397601
--- /dev/null
+++ b/apps/admin_migrate/l10n/ca.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Export this ownCloud instance" => "Exporta aquesta instància de ownCloud",
+"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Això crearà un fitxer comprimit amb les dades d'aquesta instància ownCloud.\n Escolliu el tipus d'exportació:",
+"Export" => "Exporta"
+);
diff --git a/apps/admin_migrate/l10n/cs_CZ.php b/apps/admin_migrate/l10n/cs_CZ.php
new file mode 100644
index 00000000000..0dc1a61d5d8
--- /dev/null
+++ b/apps/admin_migrate/l10n/cs_CZ.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Export this ownCloud instance" => "Export této instance ownCloud",
+"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Bude vytvořen komprimovaný soubor obsahující data této instance ownCloud.⎠Zvolte typ exportu:",
+"Export" => "Export"
+);
diff --git a/apps/admin_migrate/l10n/da.php b/apps/admin_migrate/l10n/da.php
new file mode 100644
index 00000000000..a33635cdc14
--- /dev/null
+++ b/apps/admin_migrate/l10n/da.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Export this ownCloud instance" => "Eksporter ownCloud instans",
+"Export" => "Eksporter"
+);
diff --git a/apps/admin_migrate/l10n/de.php b/apps/admin_migrate/l10n/de.php
new file mode 100644
index 00000000000..d42179b75ad
--- /dev/null
+++ b/apps/admin_migrate/l10n/de.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Export this ownCloud instance" => "Diese ownCloud-Instanz exportieren.",
+"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Dies wird eine komprimierte Datei erzeugen, welche die Daten dieser ownCloud-Instanz enthält.\n Bitte wählen Sie den Exporttyp:",
+"Export" => "Exportieren"
+);
diff --git a/apps/admin_migrate/l10n/el.php b/apps/admin_migrate/l10n/el.php
new file mode 100644
index 00000000000..95034c46a4c
--- /dev/null
+++ b/apps/admin_migrate/l10n/el.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Αυτό θα δημιουÏγήσει ένα συμπιεσμένο αÏχείο που θα πεÏιέχει τα δεδομένα από αυτό το ownCloud.\n ΠαÏακαλώ επιλέξτε τον Ï„Ïπο εξαγωγής:",
+"Export" => "Εξαγωγή"
+);
diff --git a/apps/admin_migrate/l10n/eo.php b/apps/admin_migrate/l10n/eo.php
new file mode 100644
index 00000000000..a37be76425b
--- /dev/null
+++ b/apps/admin_migrate/l10n/eo.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Export this ownCloud instance" => "Malenporti ĉi tiun aperon de ownCloud",
+"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Ĉi tio kreos densigitan dosieron, kiu enhavos la datumojn de ĉi tiu apero de ownCloud.\nBonvolu elekti la tipon de malenportado:",
+"Export" => "Malenporti"
+);
diff --git a/apps/admin_migrate/l10n/es.php b/apps/admin_migrate/l10n/es.php
new file mode 100644
index 00000000000..cb6699b1d94
--- /dev/null
+++ b/apps/admin_migrate/l10n/es.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Export this ownCloud instance" => "Exportar esta instancia de ownCloud",
+"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Se creará un archivo comprimido que contendrá los datos de esta instancia de owncloud.\n Por favor elegir el tipo de exportación:",
+"Export" => "Exportar"
+);
diff --git a/apps/admin_migrate/l10n/et_EE.php b/apps/admin_migrate/l10n/et_EE.php
new file mode 100644
index 00000000000..ee92f9fe217
--- /dev/null
+++ b/apps/admin_migrate/l10n/et_EE.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Export this ownCloud instance" => "Ekspordi see ownCloudi paigaldus",
+"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "See loob pakitud faili, milles on sinu owncloudi paigalduse andmed.\n Palun vali eksporditava faili tüüp:",
+"Export" => "Ekspordi"
+);
diff --git a/apps/admin_migrate/l10n/fi_FI.php b/apps/admin_migrate/l10n/fi_FI.php
new file mode 100644
index 00000000000..2484eab7d33
--- /dev/null
+++ b/apps/admin_migrate/l10n/fi_FI.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Export this ownCloud instance" => "Vie tämä ownCloud-istanssi",
+"Export" => "Vie"
+);
diff --git a/apps/admin_migrate/l10n/fr.php b/apps/admin_migrate/l10n/fr.php
new file mode 100644
index 00000000000..0cf0a444b0e
--- /dev/null
+++ b/apps/admin_migrate/l10n/fr.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Export this ownCloud instance" => "Exporter cette instance ownCloud",
+"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Ceci va créer une archive compressée contenant les données de cette instance ownCloud.\n Veuillez choisir le type d'export :",
+"Export" => "Exporter"
+);
diff --git a/apps/admin_migrate/l10n/gl.php b/apps/admin_migrate/l10n/gl.php
new file mode 100644
index 00000000000..9d18e134938
--- /dev/null
+++ b/apps/admin_migrate/l10n/gl.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Export this ownCloud instance" => "Exporta esta instancia de ownCloud",
+"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Esto creará un ficheiro comprimido que contén os datos de esta instancia de ownCloud.\nPor favor escolla o modo de exportación:",
+"Export" => "Exportar"
+);
diff --git a/apps/admin_migrate/l10n/it.php b/apps/admin_migrate/l10n/it.php
new file mode 100644
index 00000000000..94ba191ba6e
--- /dev/null
+++ b/apps/admin_migrate/l10n/it.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Export this ownCloud instance" => "Esporta questa istanza di ownCloud",
+"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Questa operazione creerà un file compresso che contiene i dati dell'istanza di ownCloud. Scegli il tipo di esportazione:",
+"Export" => "Esporta"
+);
diff --git a/apps/admin_migrate/l10n/ja_JP.php b/apps/admin_migrate/l10n/ja_JP.php
new file mode 100644
index 00000000000..f8e5944a6a4
--- /dev/null
+++ b/apps/admin_migrate/l10n/ja_JP.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Export this ownCloud instance" => "ownCloudをエクスãƒãƒ¼ãƒˆ",
+"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "ã“ã®ownCloudã®ãƒ‡ãƒ¼ã‚¿ã‚’å«ã‚€åœ§ç¸®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã—ã¾ã™ã€‚\nエクスãƒãƒ¼ãƒˆã®ç¨®é¡žã‚’é¸æŠžã—ã¦ãã ã•ã„:",
+"Export" => "エクスãƒãƒ¼ãƒˆ"
+);
diff --git a/apps/admin_migrate/l10n/lt_LT.php b/apps/admin_migrate/l10n/lt_LT.php
new file mode 100644
index 00000000000..f78263da75f
--- /dev/null
+++ b/apps/admin_migrate/l10n/lt_LT.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Export this ownCloud instance" => "Eksportuoti Å¡iÄ… ownCloud instaliacijÄ…",
+"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Bus sukurtas archyvas su visais owncloud duomenimis ir failais.\n Pasirinkite eksportavimo tipÄ…:",
+"Export" => "Eksportuoti"
+);
diff --git a/apps/admin_migrate/l10n/nb_NO.php b/apps/admin_migrate/l10n/nb_NO.php
new file mode 100644
index 00000000000..31f4c030bd3
--- /dev/null
+++ b/apps/admin_migrate/l10n/nb_NO.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Export this ownCloud instance" => "Eksporter denne ownCloud forekomsten",
+"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Dette vil opprette en komprimert fil som inneholder dataene fra denne ownCloud forekomsten.⎠Vennligst velg eksporttype:",
+"Export" => "Eksport"
+);
diff --git a/apps/admin_migrate/l10n/pl.php b/apps/admin_migrate/l10n/pl.php
new file mode 100644
index 00000000000..292601daa2b
--- /dev/null
+++ b/apps/admin_migrate/l10n/pl.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Export this ownCloud instance" => "Eksportuj instancjÄ™ ownCloud",
+"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Spowoduje to utworzenie pliku skompresowanego, który zawiera dane tej instancji ownCloud.⎠proszę wybrać typ eksportu:",
+"Export" => "Eksport"
+);
diff --git a/apps/admin_migrate/l10n/sl.php b/apps/admin_migrate/l10n/sl.php
new file mode 100644
index 00000000000..b8d1118bfe2
--- /dev/null
+++ b/apps/admin_migrate/l10n/sl.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Export this ownCloud instance" => "Izvozi to ownCloud namestitev",
+"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Ustvarjena bo stisnjena datoteka s podatki te ownCloud namestitve.\n Prosimo, Äe izberete vrsto izvoza:",
+"Export" => "Izvozi"
+);
diff --git a/apps/admin_migrate/l10n/sv.php b/apps/admin_migrate/l10n/sv.php
new file mode 100644
index 00000000000..57866e897e6
--- /dev/null
+++ b/apps/admin_migrate/l10n/sv.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Export this ownCloud instance" => "Exportera denna instans av ownCloud",
+"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "Detta kommer att skapa en komprimerad fil som innehåller all data från denna instans av ownCloud.\n Välj exporttyp:",
+"Export" => "Exportera"
+);
diff --git a/apps/admin_migrate/l10n/th_TH.php b/apps/admin_migrate/l10n/th_TH.php
new file mode 100644
index 00000000000..9dfaca15b5e
--- /dev/null
+++ b/apps/admin_migrate/l10n/th_TH.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Export this ownCloud instance" => "ส่งออà¸à¸‚้อมูลค่าสมมุติของ ownCloud นี้",
+"This will create a compressed file that contains the data of this owncloud instance.\n Please choose the export type:" => "ส่วนนี้จะเป็นà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹„ฟล์บีบอัดที่บรรจุข้อมูลค่าสมมุติของ ownCloud.\n à¸à¸£à¸¸à¸“าเลือà¸à¸Šà¸™à¸´à¸”ของà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸­à¸­à¸à¸‚้อมูล:",
+"Export" => "ส่งออà¸"
+);
diff --git a/apps/bookmarks/ajax/addBookmark.php b/apps/bookmarks/ajax/addBookmark.php
index b4d0f33d721..baf3a288c17 100644
--- a/apps/bookmarks/ajax/addBookmark.php
+++ b/apps/bookmarks/ajax/addBookmark.php
@@ -28,9 +28,10 @@ $RUNTIME_NOSETUPFS=true;
// Check if we are a user
OCP\JSON::checkLoggedIn();
-OCP\JSON::checkAppEnabled('bookmarks');
OCP\JSON::callCheck();
-require_once(OC::$APPSROOT . '/apps/bookmarks/bookmarksHelper.php');
+OCP\JSON::checkAppEnabled('bookmarks');
+
+require_once(OC_App::getAppPath('bookmarks').'/bookmarksHelper.php');
$id = addBookmark($_POST['url'], $_POST['title'], $_POST['tags']);
-OCP\JSON::success(array('data' => $id)); \ No newline at end of file
+OCP\JSON::success(array('data' => $id));
diff --git a/apps/bookmarks/ajax/delBookmark.php b/apps/bookmarks/ajax/delBookmark.php
index 140da2a37d1..26437ea0c8c 100644
--- a/apps/bookmarks/ajax/delBookmark.php
+++ b/apps/bookmarks/ajax/delBookmark.php
@@ -21,13 +21,10 @@
*
*/
-//no apps or filesystem
-$RUNTIME_NOSETUPFS=true;
-
-
-
// Check if we are a user
OCP\JSON::checkLoggedIn();
+OCP\JSON::callCheck();
+
OCP\JSON::checkAppEnabled('bookmarks');
OCP\JSON::callCheck();
diff --git a/apps/bookmarks/ajax/editBookmark.php b/apps/bookmarks/ajax/editBookmark.php
index 8c1b19cf0c6..617021e412b 100644
--- a/apps/bookmarks/ajax/editBookmark.php
+++ b/apps/bookmarks/ajax/editBookmark.php
@@ -21,16 +21,12 @@
*
*/
-//no apps or filesystem
-$RUNTIME_NOSETUPFS=true;
-
-
-
// Check if we are a user
OCP\JSON::checkLoggedIn();
-OCP\JSON::checkAppEnabled('bookmarks');
OCP\JSON::callCheck();
+OCP\JSON::checkAppEnabled('bookmarks');
+
$CONFIG_DBTYPE = OCP\Config::getSystemValue( "dbtype", "sqlite" );
if( $CONFIG_DBTYPE == 'sqlite' or $CONFIG_DBTYPE == 'sqlite3' ){
$_ut = "strftime('%s','now')";
diff --git a/apps/bookmarks/ajax/recordClick.php b/apps/bookmarks/ajax/recordClick.php
index 332d58262ee..785056dc11c 100644
--- a/apps/bookmarks/ajax/recordClick.php
+++ b/apps/bookmarks/ajax/recordClick.php
@@ -21,11 +21,6 @@
*
*/
-//no apps or filesystem
-$RUNTIME_NOSETUPFS=true;
-
-
-
// Check if we are a user
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('bookmarks');
diff --git a/apps/bookmarks/ajax/updateList.php b/apps/bookmarks/ajax/updateList.php
index 4de2475d067..cf9a2cf9183 100644
--- a/apps/bookmarks/ajax/updateList.php
+++ b/apps/bookmarks/ajax/updateList.php
@@ -22,11 +22,6 @@
*
*/
-//no apps or filesystem
-$RUNTIME_NOSETUPFS=true;
-
-
-
// Check if we are a user
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('bookmarks');
diff --git a/apps/bookmarks/appinfo/app.php b/apps/bookmarks/appinfo/app.php
index 8a8f443891c..f4bca9df700 100644
--- a/apps/bookmarks/appinfo/app.php
+++ b/apps/bookmarks/appinfo/app.php
@@ -10,8 +10,6 @@
OC::$CLASSPATH['OC_Bookmarks_Bookmarks'] = 'apps/bookmarks/lib/bookmarks.php';
OC::$CLASSPATH['OC_Search_Provider_Bookmarks'] = 'apps/bookmarks/lib/search.php';
-OCP\App::register( array( 'order' => 70, 'id' => 'bookmark', 'name' => 'Bookmarks' ));
-
$l = new OC_l10n('bookmarks');
OCP\App::addNavigationEntry( array( 'id' => 'bookmarks_index', 'order' => 70, 'href' => OCP\Util::linkTo( 'bookmarks', 'index.php' ), 'icon' => OCP\Util::imagePath( 'bookmarks', 'bookmarks.png' ), 'name' => $l->t('Bookmarks')));
diff --git a/apps/bookmarks/bookmarksHelper.php b/apps/bookmarks/bookmarksHelper.php
index cb0ca06c728..988042fc0e5 100644
--- a/apps/bookmarks/bookmarksHelper.php
+++ b/apps/bookmarks/bookmarksHelper.php
@@ -90,7 +90,8 @@ function addBookmark($url, $title, $tags='') {
if(empty($title)) {
$metadata = getURLMetadata($url);
- $title = $metadata['title'];
+ if(isset($metadata['title'])) // Check for problems fetching the title
+ $title = $metadata['title'];
}
if(empty($title)) {
diff --git a/apps/bookmarks/img/bookmarks.png b/apps/bookmarks/img/bookmarks.png
index b92e4f50a42..3e8eed2380f 100644
--- a/apps/bookmarks/img/bookmarks.png
+++ b/apps/bookmarks/img/bookmarks.png
Binary files differ
diff --git a/apps/bookmarks/l10n/bg_BG.php b/apps/bookmarks/l10n/bg_BG.php
new file mode 100644
index 00000000000..04d731b1074
--- /dev/null
+++ b/apps/bookmarks/l10n/bg_BG.php
@@ -0,0 +1,12 @@
+<?php $TRANSLATIONS = array(
+"Bookmarks" => "Отметки",
+"unnamed" => "неозаглавено",
+"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Завлачете това в лентата Ñ Ð¾Ñ‚Ð¼ÐµÑ‚ÐºÐ¸ на браузъра Ñи и го натиÑкайте, когато иÑкате да отметнете бързо нÑÐºÐ¾Ñ Ñтраница:",
+"Read later" => "ОтмÑтане",
+"Address" => "ÐдреÑ",
+"Title" => "Заглавие",
+"Tags" => "Етикети",
+"Save bookmark" => "Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° отметката",
+"You have no bookmarks" => "ÐÑмате отметки",
+"Bookmarklet <br />" => "Бутон за отметки <br />"
+);
diff --git a/apps/bookmarks/l10n/ca.php b/apps/bookmarks/l10n/ca.php
new file mode 100644
index 00000000000..cf90d9a8874
--- /dev/null
+++ b/apps/bookmarks/l10n/ca.php
@@ -0,0 +1,12 @@
+<?php $TRANSLATIONS = array(
+"Bookmarks" => "Adreces d'interès",
+"unnamed" => "sense nom",
+"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Arrossegueu-ho al navegador i feu-hi un clic quan volgueu marcar ràpidament una adreça d'interès:",
+"Read later" => "Llegeix més tard",
+"Address" => "Adreça",
+"Title" => "Títol",
+"Tags" => "Etiquetes",
+"Save bookmark" => "Desa l'adreça d'interès",
+"You have no bookmarks" => "No teniu adreces d'interès",
+"Bookmarklet <br />" => "Bookmarklet <br />"
+);
diff --git a/apps/bookmarks/l10n/cs_CZ.php b/apps/bookmarks/l10n/cs_CZ.php
new file mode 100644
index 00000000000..2251969a26c
--- /dev/null
+++ b/apps/bookmarks/l10n/cs_CZ.php
@@ -0,0 +1,12 @@
+<?php $TRANSLATIONS = array(
+"Bookmarks" => "Záložky",
+"unnamed" => "nepojmenovaný",
+"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "PÅ™etáhnÄ›te do VaÅ¡eho prohlížeÄe a klinÄ›te, pokud si pÅ™ejete rychle uložit stranu do záložek:",
+"Read later" => "PÅ™eÄíst pozdÄ›ji",
+"Address" => "Adresa",
+"Title" => "Název",
+"Tags" => "Tagy",
+"Save bookmark" => "Uložit záložku",
+"You have no bookmarks" => "Nemáte žádné záložky",
+"Bookmarklet <br />" => "Záložky <br />"
+);
diff --git a/apps/bookmarks/l10n/de.php b/apps/bookmarks/l10n/de.php
new file mode 100644
index 00000000000..14a54f1ccee
--- /dev/null
+++ b/apps/bookmarks/l10n/de.php
@@ -0,0 +1,12 @@
+<?php $TRANSLATIONS = array(
+"Bookmarks" => "Lesezeichen",
+"unnamed" => "unbenannt",
+"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Ziehen Sie dies zu Ihren Browser-Lesezeichen und klicken Sie darauf, wenn Sie eine Website schnell den Lesezeichen hinzufügen wollen.",
+"Read later" => "Später lesen",
+"Address" => "Adresse",
+"Title" => "Titel",
+"Tags" => "Tags",
+"Save bookmark" => "Lesezeichen speichern",
+"You have no bookmarks" => "Sie haben keine Lesezeichen",
+"Bookmarklet <br />" => "Bookmarklet <br />"
+);
diff --git a/apps/bookmarks/l10n/el.php b/apps/bookmarks/l10n/el.php
new file mode 100644
index 00000000000..f282a1bbf85
--- /dev/null
+++ b/apps/bookmarks/l10n/el.php
@@ -0,0 +1,12 @@
+<?php $TRANSLATIONS = array(
+"Bookmarks" => "Σελιδοδείκτες",
+"unnamed" => "ανώνυμο",
+"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "ΣÏÏετε αυτό στους σελιδοδείκτες του πεÏιηγητή σας και κάντε κλικ επάνω του, όταν θέλετε να Ï€Ïοσθέσετε σÏντομα μια ιστοσελίδα ως σελιδοδείκτη:",
+"Read later" => "Ανάγνωση αÏγότεÏα",
+"Address" => "ΔιεÏθυνση",
+"Title" => "Τίτλος",
+"Tags" => "Ετικέτες",
+"Save bookmark" => "Αποθήκευση σελιδοδείκτη",
+"You have no bookmarks" => "Δεν έχετε σελιδοδείκτες",
+"Bookmarklet <br />" => "ΕφαÏμογίδιο Σελιδοδεικτών <br />"
+);
diff --git a/apps/bookmarks/l10n/eo.php b/apps/bookmarks/l10n/eo.php
new file mode 100644
index 00000000000..808cda8a041
--- /dev/null
+++ b/apps/bookmarks/l10n/eo.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"Bookmarks" => "Legosignoj",
+"unnamed" => "nenomita",
+"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Åœovu tion ĉi al la legosignoj de via TTT-legilo kaj klaku Äin, se vi volas rapide legosignigi TTT-paÄon:",
+"Read later" => "Legi poste",
+"Address" => "Adreso",
+"Title" => "Titolo",
+"Tags" => "Etikedoj",
+"Save bookmark" => "Konservi legosignon",
+"You have no bookmarks" => "Vi havas neniun legosignon"
+);
diff --git a/apps/bookmarks/l10n/es.php b/apps/bookmarks/l10n/es.php
new file mode 100644
index 00000000000..071b0dda707
--- /dev/null
+++ b/apps/bookmarks/l10n/es.php
@@ -0,0 +1,12 @@
+<?php $TRANSLATIONS = array(
+"Bookmarks" => "Marcadores",
+"unnamed" => "sin nombre",
+"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Arrastra desde aquí a los marcadores de tu navegador, y haz clic cuando quieras marcar una página web rápidamente:",
+"Read later" => "Leer después",
+"Address" => "Dirección",
+"Title" => "Título",
+"Tags" => "Etiquetas",
+"Save bookmark" => "Guardar marcador",
+"You have no bookmarks" => "No tienes marcadores",
+"Bookmarklet <br />" => "Bookmarklet <br />"
+);
diff --git a/apps/bookmarks/l10n/et_EE.php b/apps/bookmarks/l10n/et_EE.php
new file mode 100644
index 00000000000..da9e4d92a6f
--- /dev/null
+++ b/apps/bookmarks/l10n/et_EE.php
@@ -0,0 +1,10 @@
+<?php $TRANSLATIONS = array(
+"Bookmarks" => "Järjehoidjad",
+"unnamed" => "nimetu",
+"Read later" => "Loe hiljem",
+"Address" => "Aadress",
+"Title" => "Pealkiri",
+"Tags" => "Sildid",
+"Save bookmark" => "Salvesta järjehoidja",
+"You have no bookmarks" => "Sul pole järjehoidjaid"
+);
diff --git a/apps/bookmarks/l10n/fa.php b/apps/bookmarks/l10n/fa.php
new file mode 100644
index 00000000000..b46ce911d41
--- /dev/null
+++ b/apps/bookmarks/l10n/fa.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Bookmarks" => "نشانک‌ها",
+"unnamed" => "بدون‌نام",
+"Address" => "آدرس",
+"Title" => "عنوان",
+"Save bookmark" => "ذخیره نشانک",
+"You have no bookmarks" => "شما هیچ نشانکی ندارید"
+);
diff --git a/apps/bookmarks/l10n/fi_FI.php b/apps/bookmarks/l10n/fi_FI.php
new file mode 100644
index 00000000000..c814747411b
--- /dev/null
+++ b/apps/bookmarks/l10n/fi_FI.php
@@ -0,0 +1,12 @@
+<?php $TRANSLATIONS = array(
+"Bookmarks" => "Kirjanmerkit",
+"unnamed" => "nimetön",
+"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Vedä tämä selaimesi kirjanmerkkipalkkiin ja napsauta sitä, kun haluat lisätä kirjanmerkin nopeasti:",
+"Read later" => "Lue myöhemmin",
+"Address" => "Osoite",
+"Title" => "Otsikko",
+"Tags" => "Tunnisteet",
+"Save bookmark" => "Tallenna kirjanmerkki",
+"You have no bookmarks" => "Sinulla ei ole kirjanmerkkejä",
+"Bookmarklet <br />" => "Kirjanmerkitsin <br />"
+);
diff --git a/apps/bookmarks/l10n/fr.php b/apps/bookmarks/l10n/fr.php
new file mode 100644
index 00000000000..508c82369fb
--- /dev/null
+++ b/apps/bookmarks/l10n/fr.php
@@ -0,0 +1,12 @@
+<?php $TRANSLATIONS = array(
+"Bookmarks" => "Favoris",
+"unnamed" => "sans titre",
+"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Glissez ceci dans les favoris de votre navigateur, et cliquer dessus lorsque vous souhaitez ajouter la page en cours à vos marques-pages :",
+"Read later" => "Lire plus tard",
+"Address" => "Adresse",
+"Title" => "Titre",
+"Tags" => "Étiquettes",
+"Save bookmark" => "Sauvegarder le favori",
+"You have no bookmarks" => "Vous n'avez aucun favori",
+"Bookmarklet <br />" => "Gestionnaire de favoris <br />"
+);
diff --git a/apps/bookmarks/l10n/it.php b/apps/bookmarks/l10n/it.php
new file mode 100644
index 00000000000..862d75bde45
--- /dev/null
+++ b/apps/bookmarks/l10n/it.php
@@ -0,0 +1,12 @@
+<?php $TRANSLATIONS = array(
+"Bookmarks" => "Segnalibri",
+"unnamed" => "senza nome",
+"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Quando vuoi creare rapidamente un segnalibro, trascinalo sui segnalibri del browser e fai clic su di esso:",
+"Read later" => "Leggi dopo",
+"Address" => "Indirizzo",
+"Title" => "Titolo",
+"Tags" => "Tag",
+"Save bookmark" => "Salva segnalibro",
+"You have no bookmarks" => "Non hai segnalibri",
+"Bookmarklet <br />" => "Bookmarklet <br />"
+);
diff --git a/apps/bookmarks/l10n/lt_LT.php b/apps/bookmarks/l10n/lt_LT.php
new file mode 100644
index 00000000000..58faddc2331
--- /dev/null
+++ b/apps/bookmarks/l10n/lt_LT.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"unnamed" => "be pavadinimo"
+);
diff --git a/apps/bookmarks/l10n/nb_NO.php b/apps/bookmarks/l10n/nb_NO.php
new file mode 100644
index 00000000000..12e63887d24
--- /dev/null
+++ b/apps/bookmarks/l10n/nb_NO.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"Bookmarks" => "Bokmerker",
+"unnamed" => "uten navn",
+"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Dra denne over din nettlesers bokmerker og klikk den, hvis du ønsker å hurtig legge til bokmerke for en nettside",
+"Read later" => "Les senere",
+"Address" => "Adresse",
+"Title" => "Tittel",
+"Tags" => "Etikett",
+"Save bookmark" => "Lagre bokmerke",
+"You have no bookmarks" => "Du har ingen bokmerker"
+);
diff --git a/apps/bookmarks/l10n/sl.php b/apps/bookmarks/l10n/sl.php
new file mode 100644
index 00000000000..32a41629082
--- /dev/null
+++ b/apps/bookmarks/l10n/sl.php
@@ -0,0 +1,12 @@
+<?php $TRANSLATIONS = array(
+"Bookmarks" => "Zaznamki",
+"unnamed" => "neimenovano",
+"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Povlecite to povezavo med zaznamke v vašem brskalniku in jo, ko želite ustvariti zaznamek trenutne strani, preprosto kliknite:",
+"Read later" => "Preberi kasneje",
+"Address" => "Naslov",
+"Title" => "Ime",
+"Tags" => "Oznake",
+"Save bookmark" => "Shrani zaznamek",
+"You have no bookmarks" => "Nimate zaznamkov",
+"Bookmarklet <br />" => "Bookmarklet <br />"
+);
diff --git a/apps/bookmarks/l10n/sv.php b/apps/bookmarks/l10n/sv.php
new file mode 100644
index 00000000000..689bd452f12
--- /dev/null
+++ b/apps/bookmarks/l10n/sv.php
@@ -0,0 +1,12 @@
+<?php $TRANSLATIONS = array(
+"Bookmarks" => "Bokmärken",
+"unnamed" => "namnlös",
+"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "Dra till din webbläsares bokmärken och klicka på det när du vill bokmärka en webbsida snabbt:",
+"Read later" => "Läs senare",
+"Address" => "Adress",
+"Title" => "Titel",
+"Tags" => "Taggar",
+"Save bookmark" => "Spara bokmärke",
+"You have no bookmarks" => "Du har inga bokmärken",
+"Bookmarklet <br />" => "Skriptbokmärke <br />"
+);
diff --git a/apps/bookmarks/l10n/th_TH.php b/apps/bookmarks/l10n/th_TH.php
new file mode 100644
index 00000000000..64a148efabc
--- /dev/null
+++ b/apps/bookmarks/l10n/th_TH.php
@@ -0,0 +1,12 @@
+<?php $TRANSLATIONS = array(
+"Bookmarks" => "รายà¸à¸²à¸£à¹‚ปรด",
+"unnamed" => "ยังไม่มีชื่อ",
+"Drag this to your browser bookmarks and click it, when you want to bookmark a webpage quickly:" => "ลาà¸à¸ªà¸´à¹ˆà¸‡à¸™à¸µà¹‰à¹„ปไว้ที่รายà¸à¸²à¸£à¹‚ปรดในโปรà¹à¸à¸£à¸¡à¸šà¸£à¸²à¸§à¹€à¸‹à¸­à¸£à¹Œà¸‚องคุณ à¹à¸¥à¹‰à¸§à¸„ลิà¸à¸—ี่นั่น, เมื่อคุณต้องà¸à¸²à¸£à¹€à¸à¹‡à¸šà¸«à¸™à¹‰à¸²à¹€à¸§à¹‡à¸šà¹€à¸žà¸ˆà¹€à¸‚้าไปไว้ในรายà¸à¸²à¸£à¹‚ปรดอย่างรวดเร็ว",
+"Read later" => "อ่านภายหลัง",
+"Address" => "ที่อยู่",
+"Title" => "ชื่อ",
+"Tags" => "ป้ายà¸à¸³à¸à¸±à¸š",
+"Save bookmark" => "บันทึà¸à¸£à¸²à¸¢à¸à¸²à¸£à¹‚ปรด",
+"You have no bookmarks" => "คุณยังไม่มีรายà¸à¸²à¸£à¹‚ปรด",
+"Bookmarklet <br />" => "Bookmarklet <br />"
+);
diff --git a/apps/bookmarks/lib/bookmarks.php b/apps/bookmarks/lib/bookmarks.php
index d569bf528a1..e1e13388902 100644
--- a/apps/bookmarks/lib/bookmarks.php
+++ b/apps/bookmarks/lib/bookmarks.php
@@ -145,4 +145,3 @@ class OC_Bookmarks_Bookmarks{
return true;
}
}
-?>
diff --git a/apps/bookmarks/templates/addBm.php b/apps/bookmarks/templates/addBm.php
index dbe673f53a8..357e0a18f25 100644
--- a/apps/bookmarks/templates/addBm.php
+++ b/apps/bookmarks/templates/addBm.php
@@ -3,9 +3,9 @@
<head>
<meta charset="utf-8">
<title>Read later - ownCloud</title>
- <link rel="stylesheet" href="css/readlater.css">
</head>
<body>
<div class="message"><h1>Saved!</h1></div>
+ <a href="javascript:self.close()" >Close the window</a>
</body>
</html> \ No newline at end of file
diff --git a/apps/bookmarks/templates/list.php b/apps/bookmarks/templates/list.php
index fdd2b19f79a..4b84b438900 100644
--- a/apps/bookmarks/templates/list.php
+++ b/apps/bookmarks/templates/list.php
@@ -7,7 +7,7 @@
* See the COPYING-README file.
*/
?>
-<input type="hidden" id="bookmarkFilterTag" value="<?php if(isset($_GET['tag'])) echo htmlentities($_GET['tag'],ENT_COMPAT,'utf-8'); ?>" />
+<input type="hidden" id="bookmarkFilterTag" value="<?php if(isset($_GET['tag'])) echo OCP\Util::sanitizeHTML($_GET['tag']); ?>" />
<div id="controls">
<input type="hidden" id="bookmark_add_id" value="0" />
<input type="text" id="bookmark_add_url" placeholder="<?php echo $l->t('Address'); ?>" class="bookmarks_input" />
@@ -20,7 +20,7 @@
<div id="firstrun" style="display: none;">
<?php
echo $l->t('You have no bookmarks');
- require_once(OC::$APPSROOT . '/apps/bookmarks/templates/bookmarklet.php');
+ require_once(OC_App::getAppPath('bookmarks') .'/templates/bookmarklet.php');
createBookmarklet();
?>
</div>
diff --git a/apps/calendar/ajax/cache/rescan.php b/apps/calendar/ajax/cache/rescan.php
new file mode 100644
index 00000000000..3417f1ae4b4
--- /dev/null
+++ b/apps/calendar/ajax/cache/rescan.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Copyright (c) 2012 Georg Ehrke <georg@ownCloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+OCP\JSON::checkLoggedIn();
+OCP\JSON::checkAppEnabled('calendar');
+$calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser());
+foreach($calendars as $calendar){
+ OC_Calendar_Repeat::cleancalendar($calendar['id']);
+ OC_Calendar_Repeat::generatecalendar($calendar['id']);
+}
+OCP\JSON::success(); \ No newline at end of file
diff --git a/apps/calendar/ajax/cache/status.php b/apps/calendar/ajax/cache/status.php
new file mode 100644
index 00000000000..d2806d47895
--- /dev/null
+++ b/apps/calendar/ajax/cache/status.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Copyright (c) 2012 Georg Ehrke <georg@ownCloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+OCP\JSON::checkLoggedIn();
+OCP\JSON::checkAppEnabled('calendar');
+$calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser());
+$allcached = true;
+foreach($calendars as $calendar){
+ if(!OC_Calendar_Repeat::is_calendar_cached($calendar['id'])){
+ $allcached = false;
+ }
+}
+$l = new OC_L10N('calendar');
+if(!$allcached){
+ OCP\JSON::error(array('message'=>'Not all calendars are completely cached', 'l10n'=>$l->t('Not all calendars are completely cached')));
+}else{
+ OCP\JSON::success(array('message'=>'Everything seems to be completely cached', 'l10n'=>$l->t('Everything seems to be completely cached')));
+} \ No newline at end of file
diff --git a/apps/calendar/ajax/calendar/activation.php b/apps/calendar/ajax/calendar/activation.php
index e31908beb14..f4aadc5b017 100644
--- a/apps/calendar/ajax/calendar/activation.php
+++ b/apps/calendar/ajax/calendar/activation.php
@@ -9,6 +9,8 @@
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('calendar');
+OCP\JSON::callCheck();
+
$calendarid = $_POST['calendarid'];
$calendar = OC_Calendar_App::getCalendar($calendarid, true);
if(!$calendar){
diff --git a/apps/calendar/ajax/calendar/edit.form.php b/apps/calendar/ajax/calendar/edit.form.php
index ae056a524bd..3916c527637 100644
--- a/apps/calendar/ajax/calendar/edit.form.php
+++ b/apps/calendar/ajax/calendar/edit.form.php
@@ -11,9 +11,9 @@ OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('calendar');
$calendarcolor_options = OC_Calendar_Calendar::getCalendarColorOptions();
-$calendar = OC_Calendar_App::getCalendar($_GET['calendarid']);
+$calendar = OC_Calendar_App::getCalendar($_POST['calendarid']);
$tmpl = new OCP\Template("calendar", "part.editcalendar");
$tmpl->assign('new', false);
$tmpl->assign('calendarcolor_options', $calendarcolor_options);
$tmpl->assign('calendar', $calendar);
-$tmpl->printPage();
+$tmpl->printPage(); \ No newline at end of file
diff --git a/apps/calendar/ajax/calendar/new.php b/apps/calendar/ajax/calendar/new.php
index 34b056abe8f..67d12822378 100644
--- a/apps/calendar/ajax/calendar/new.php
+++ b/apps/calendar/ajax/calendar/new.php
@@ -6,8 +6,6 @@
* See the COPYING-README file.
*/
-
-
// Check if we are a user
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('calendar');
@@ -32,7 +30,13 @@ OC_Calendar_Calendar::setCalendarActive($calendarid, 1);
$calendar = OC_Calendar_Calendar::find($calendarid);
$tmpl = new OCP\Template('calendar', 'part.choosecalendar.rowfields');
$tmpl->assign('calendar', $calendar);
+if(OC_Calendar_Share::allUsersSharedwith($calendarid, OC_Calendar_Share::CALENDAR) == array()){
+ $shared = false;
+}else{
+ $shared = true;
+}
+$tmpl->assign('shared', $shared);
OCP\JSON::success(array(
'page' => $tmpl->fetchPage(),
'eventSource' => OC_Calendar_Calendar::getEventSourceInfo($calendar),
-)); \ No newline at end of file
+));
diff --git a/apps/calendar/ajax/calendar/overview.php b/apps/calendar/ajax/calendar/overview.php
index 9d43364ffbf..1d8e49ea5f2 100644
--- a/apps/calendar/ajax/calendar/overview.php
+++ b/apps/calendar/ajax/calendar/overview.php
@@ -4,9 +4,7 @@
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
- */
-
-
+ */
$l10n = OC_L10N::get('calendar');
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('calendar');
diff --git a/apps/calendar/ajax/calendar/update.php b/apps/calendar/ajax/calendar/update.php
index 740094775f5..c09b1008c9c 100644
--- a/apps/calendar/ajax/calendar/update.php
+++ b/apps/calendar/ajax/calendar/update.php
@@ -37,7 +37,13 @@ OC_Calendar_Calendar::setCalendarActive($calendarid, $_POST['active']);
$calendar = OC_Calendar_App::getCalendar($calendarid);
$tmpl = new OCP\Template('calendar', 'part.choosecalendar.rowfields');
$tmpl->assign('calendar', $calendar);
+if(OC_Calendar_Share::allUsersSharedwith($calendarid, OC_Calendar_Share::CALENDAR) == array()){
+ $shared = false;
+}else{
+ $shared = true;
+}
+$tmpl->assign('shared', $shared);
OCP\JSON::success(array(
'page' => $tmpl->fetchPage(),
'eventSource' => OC_Calendar_Calendar::getEventSourceInfo($calendar),
-)); \ No newline at end of file
+));
diff --git a/apps/calendar/ajax/categories/rescan.php b/apps/calendar/ajax/categories/rescan.php
index f0060cb23b2..08c32865b6f 100644
--- a/apps/calendar/ajax/categories/rescan.php
+++ b/apps/calendar/ajax/categories/rescan.php
@@ -9,6 +9,7 @@
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('calendar');
+OCP\JSON::callCheck();
foreach ($_POST as $key=>$element) {
debug('_POST: '.$key.'=>'.print_r($element, true));
diff --git a/apps/calendar/ajax/changeview.php b/apps/calendar/ajax/changeview.php
index 951f603ce85..819025543a5 100644
--- a/apps/calendar/ajax/changeview.php
+++ b/apps/calendar/ajax/changeview.php
@@ -7,15 +7,15 @@
*/
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('calendar');
-$view = $_GET['v'];
+$view = $_POST['v'];
switch($view){
case 'agendaWeek':
case 'month';
case 'list':
break;
default:
- OCP\JSON::error(array('message'=>'unexspected parameter: ' . $view));
+ OCP\JSON::error(array('message'=>'unexpected parameter: ' . $view));
exit;
}
OCP\Config::setUserValue(OCP\USER::getUser(), 'calendar', 'currentview', $view);
-OCP\JSON::success();
+OCP\JSON::success(); \ No newline at end of file
diff --git a/apps/calendar/ajax/event/edit.form.php b/apps/calendar/ajax/event/edit.form.php
index e5cf573c718..27512481538 100644
--- a/apps/calendar/ajax/event/edit.form.php
+++ b/apps/calendar/ajax/event/edit.form.php
@@ -13,7 +13,7 @@ if(!OCP\User::isLoggedIn()) {
}
OCP\JSON::checkAppEnabled('calendar');
-$id = $_GET['id'];
+$id = $_POST['id'];
$data = OC_Calendar_App::getEventObject($id, true, true);
if(!$data){
diff --git a/apps/calendar/ajax/event/new.form.php b/apps/calendar/ajax/event/new.form.php
index 0b19e7e92f9..db04cdf2d49 100644
--- a/apps/calendar/ajax/event/new.form.php
+++ b/apps/calendar/ajax/event/new.form.php
@@ -27,7 +27,7 @@ if (!$end){
}
$start = new DateTime('@'.$start);
$end = new DateTime('@'.$end);
-$timezone = OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'timezone', date_default_timezone_get());
+$timezone = OC_Calendar_App::getTimezone();
$start->setTimezone(new DateTimeZone($timezone));
$end->setTimezone(new DateTimeZone($timezone));
diff --git a/apps/calendar/ajax/event/resize.php b/apps/calendar/ajax/event/resize.php
index 56b83205e85..15b687b55da 100644
--- a/apps/calendar/ajax/event/resize.php
+++ b/apps/calendar/ajax/event/resize.php
@@ -7,6 +7,7 @@
*/
OCP\JSON::checkLoggedIn();
+OCP\JSON::callCheck();
$id = $_POST['id'];
diff --git a/apps/calendar/ajax/events.php b/apps/calendar/ajax/events.php
index e00e0cfeb1e..ae55cbc02db 100644
--- a/apps/calendar/ajax/events.php
+++ b/apps/calendar/ajax/events.php
@@ -5,25 +5,20 @@
* later.
* See the COPYING-README file.
*/
-
-
-require_once('when/When.php');
-
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('calendar');
session_write_close();
// Look for the calendar id
-$calendar_id = OC_Calendar_App::getCalendar($_GET['calendar_id'], false, false);
-if($calendar_id !== false){
- if(! is_numeric($calendar_id['userid']) && $calendar_id['userid'] != OCP\User::getUser()){
- OCP\JSON::error();
- exit;
+$calendar_id = null;
+if (strval(intval($_GET['calendar_id'])) == strval($_GET['calendar_id'])) { // integer for sure.
+ $id = intval($_GET['calendar_id']);
+ $calendarrow = OC_Calendar_App::getCalendar($id, true, false); // Let's at least security check otherwise we might as well use OC_Calendar_Calendar::find()
+ if($calendarrow !== false && is_int($calendar_id['userid']) && $id == $calendar_id['userid']) {
+ $calendar_id = $id;
}
}
-else {
- $calendar_id = $_GET['calendar_id'];
-}
+$calendar_id = (is_null($calendar_id)?strip_tags($_GET['calendar_id']):$calendar_id);
$start = (version_compare(PHP_VERSION, '5.3.0', '>='))?DateTime::createFromFormat('U', $_GET['start']):new DateTime('@' . $_GET['start']);
$end = (version_compare(PHP_VERSION, '5.3.0', '>='))?DateTime::createFromFormat('U', $_GET['end']):new DateTime('@' . $_GET['end']);
diff --git a/apps/calendar/ajax/import/calendarcheck.php b/apps/calendar/ajax/import/calendarcheck.php
new file mode 100644
index 00000000000..a91bab70573
--- /dev/null
+++ b/apps/calendar/ajax/import/calendarcheck.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Copyright (c) 2012 Georg Ehrke <ownclouddev at georgswebsite dot de>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+OCP\JSON::checkLoggedIn();
+OCP\App::checkAppEnabled('calendar');
+$calname = strip_tags($_POST['calname']);
+$calendars = OC_Calendar_Calendar::allCalendars(OCP\User::getUser());
+foreach($calendars as $calendar){
+ if($calendar['displayname'] == $calname){
+ OCP\JSON::success(array('message'=>'exists'));
+ exit;
+ }
+}
+OCP\JSON::error(); \ No newline at end of file
diff --git a/apps/calendar/ajax/import/dialog.php b/apps/calendar/ajax/import/dialog.php
index b99c32278c4..18fe226172c 100644
--- a/apps/calendar/ajax/import/dialog.php
+++ b/apps/calendar/ajax/import/dialog.php
@@ -5,8 +5,6 @@
* later.
* See the COPYING-README file.
*/
-
-
OCP\JSON::checkLoggedIn();
OCP\App::checkAppEnabled('calendar');
$tmpl = new OCP\Template('calendar', 'part.import');
diff --git a/apps/calendar/ajax/import/dropimport.php b/apps/calendar/ajax/import/dropimport.php
new file mode 100644
index 00000000000..f46e7314098
--- /dev/null
+++ b/apps/calendar/ajax/import/dropimport.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Copyright (c) 2012 Georg Ehrke <ownclouddev@georgswebsite.de>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+$data = $_POST['data'];
+$data = explode(',', $data);
+$data = end($data);
+$data = base64_decode($data);
+OCP\JSON::checkLoggedIn();
+OCP\App::checkAppEnabled('calendar');
+$import = new OC_Calendar_Import($data);
+$import->setUserID(OCP\User::getUser());
+$import->setTimeZone(OC_Calendar_App::$tz);
+$import->disableProgressCache();
+if(!$import->isValid()){
+ OCP\JSON::error();
+ exit;
+}
+$newcalendarname = strip_tags($import->createCalendarName());
+$newid = OC_Calendar_Calendar::addCalendar(OCP\User::getUser(),$newcalendarname,'VEVENT,VTODO,VJOURNAL',null,0,$import->createCalendarColor());
+$import->setCalendarID($newid);
+$import->import();
+$count = $import->getCount();
+if($count == 0){
+ OC_Calendar_Calendar::deleteCalendar($newid);
+ OCP\JSON::error(array('message'=>OC_Calendar_App::$l10n->t('The file contained either no events or all events are already saved in your calendar.')));
+}else{
+ OCP\JSON::success(array('message'=>$count . ' ' . OC_Calendar_App::$l10n->t('events has been saved in the new calendar') . ' ' . $newcalendarname, 'eventSource'=>OC_Calendar_Calendar::getEventSourceInfo(OC_Calendar_Calendar::find($newid))));
+} \ No newline at end of file
diff --git a/apps/calendar/ajax/import/import.php b/apps/calendar/ajax/import/import.php
index c0cd1403763..b1dfc464d00 100644
--- a/apps/calendar/ajax/import/import.php
+++ b/apps/calendar/ajax/import/import.php
@@ -5,45 +5,77 @@
* later.
* See the COPYING-README file.
*/
-//check for calendar rights or create new one
-ob_start();
OCP\JSON::checkLoggedIn();
-OCP\JSON::callCheck();
OCP\App::checkAppEnabled('calendar');
-$nl="\r\n";
-$comps = array('VEVENT'=>true, 'VTODO'=>true, 'VJOURNAL'=>true);
-$progressfile = 'import_tmp/' . md5(session_id()) . '.txt';
-if(is_writable('import_tmp/')){
- $progressfopen = fopen($progressfile, 'w');
- fwrite($progressfopen, '10');
- fclose($progressfopen);
+OCP\JSON::callCheck();
+session_write_close();
+if (isset($_POST['progresskey']) && isset($_POST['getprogress'])) {
+ echo OCP\JSON::success(array('percent'=>OC_Cache::get($_POST['progresskey'])));
+ exit;
}
$file = OC_Filesystem::file_get_contents($_POST['path'] . '/' . $_POST['file']);
+if(!$file){
+ OCP\JSON::error(array('error'=>'404'));
+}
+$import = new OC_Calendar_Import($file);
+$import->setUserID(OCP\User::getUser());
+$import->setTimeZone(OC_Calendar_App::$tz);
+$import->enableProgressCache();
+$import->setProgresskey($_POST['progresskey']);
+if(!$import->isValid()){
+ OCP\JSON::error(array('error'=>'notvalid'));
+ exit;
+}
+$newcal = false;
if($_POST['method'] == 'new'){
- $id = OC_Calendar_Calendar::addCalendar(OCP\USER::getUser(), $_POST['calname']);
- OC_Calendar_Calendar::setCalendarActive($id, 1);
+ $calendars = OC_Calendar_Calendar::allCalendars(OCP\User::getUser());
+ foreach($calendars as $calendar){
+ if($calendar['displayname'] == $_POST['calname']){
+ $id = $calendar['id'];
+ $newcal = false;
+ break;
+ }
+ $newcal = true;
+ }
+ if($newcal){
+ $id = OC_Calendar_Calendar::addCalendar(OCP\USER::getUser(), strip_tags($_POST['calname']),'VEVENT,VTODO,VJOURNAL',null,0,strip_tags($_POST['calcolor']));
+ OC_Calendar_Calendar::setCalendarActive($id, 1);
+ }
}else{
$calendar = OC_Calendar_App::getCalendar($_POST['id']);
if($calendar['userid'] != OCP\USER::getUser()){
- OCP\JSON::error();
+ OCP\JSON::error(array('error'=>'missingcalendarrights'));
exit();
}
$id = $_POST['id'];
}
-if(is_writable('import_tmp/')){
- $progressfopen = fopen($progressfile, 'w');
- fwrite($progressfopen, '20');
- fclose($progressfopen);
+$import->setCalendarID($id);
+try{
+ $import->import();
+}catch (Exception $e) {
+ OCP\JSON::error(array('message'=>OC_Calendar_App::$l10n->t('Import failed'), 'debug'=>$e->getMessage()));
+ //write some log
}
+$count = $import->getCount();
+if($count == 0){
+ if($newcal){
+ OC_Calendar_Calendar::deleteCalendar($id);
+ }
+ OCP\JSON::error(array('message'=>OC_Calendar_App::$l10n->t('The file contained either no events or all events are already saved in your calendar.')));
+}else{
+ if($newcal){
+ OCP\JSON::success(array('message'=>$count . ' ' . OC_Calendar_App::$l10n->t('events has been saved in the new calendar') . ' ' . strip_tags($_POST['calname'])));
+ }else{
+ OCP\JSON::success(array('message'=>$count . ' ' . OC_Calendar_App::$l10n->t('events has been saved in your calendar')));
+ }
+}
+/* //////////////////////////// Attention: following code is quite painfull !!! ///////////////////////
+writeProgress('20');
// normalize the newlines
$file = str_replace(array("\r","\n\n"), array("\n","\n"), $file);
$lines = explode("\n", $file);
unset($file);
-if(is_writable('import_tmp/')){
- $progressfopen = fopen($progressfile, 'w');
- fwrite($progressfopen, '30');
- fclose($progressfopen);
-}
+writeProgress('30');
// analyze the file, group components by uid, and keep refs to originating calendar object
// $cals is array calendar objects, keys are 1st line# $cal, ie array( $cal => $caldata )
// $caldata is array( 'first' => 1st component line#, 'last' => last comp line#, 'end' => end line# )
@@ -87,13 +119,8 @@ foreach($lines as $line) {
$i++;
}
// import the calendar
-if(is_writable('import_tmp/')){
- $progressfopen = fopen($progressfile, 'w');
- fwrite($progressfopen, '60');
- fclose($progressfopen);
-}
+writeProgress('60');
foreach($uids as $uid) {
-
$prefix=$suffix=$content=array();
foreach($uid as $begin=>$details) {
@@ -118,13 +145,7 @@ foreach($uids as $uid) {
}
}
// finished import
-if(is_writable('import_tmp/')){
- $progressfopen = fopen($progressfile, 'w');
- fwrite($progressfopen, '100');
- fclose($progressfopen);
-}
+writeProgress('100');
sleep(3);
-if(is_writable('import_tmp/')){
- unlink($progressfile);
-}
-OCP\JSON::success(); \ No newline at end of file
+OC_Cache::remove($progresskey);
+OCP\JSON::success();*/
diff --git a/apps/calendar/ajax/settings/guesstimezone.php b/apps/calendar/ajax/settings/guesstimezone.php
index 11c74631d44..6b6b8bef9c1 100644
--- a/apps/calendar/ajax/settings/guesstimezone.php
+++ b/apps/calendar/ajax/settings/guesstimezone.php
@@ -12,8 +12,8 @@ OCP\JSON::checkAppEnabled('calendar');
$l = OC_L10N::get('calendar');
-$lat = $_GET['lat'];
-$lng = $_GET['long'];
+$lat = $_POST['lat'];
+$lng = $_POST['lng'];
$timezone = OC_Geo::timezone($lat, $lng);
@@ -23,4 +23,4 @@ if($timezone == OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'timez
}
OCP\Config::setUserValue(OCP\USER::getUser(), 'calendar', 'timezone', $timezone);
$message = array('message'=> $l->t('New Timezone:') . $timezone);
-OCP\JSON::success($message);
+OCP\JSON::success($message); \ No newline at end of file
diff --git a/apps/calendar/ajax/settings/setfirstday.php b/apps/calendar/ajax/settings/setfirstday.php
index 97c24882939..73cf0c19b78 100644
--- a/apps/calendar/ajax/settings/setfirstday.php
+++ b/apps/calendar/ajax/settings/setfirstday.php
@@ -8,7 +8,6 @@
OCP\JSON::checkLoggedIn();
OCP\JSON::callCheck();
-
if(isset($_POST["firstday"])){
OCP\Config::setUserValue(OCP\USER::getUser(), 'calendar', 'firstday', $_POST["firstday"]);
OCP\JSON::success();
diff --git a/apps/calendar/ajax/settings/settimeformat.php b/apps/calendar/ajax/settings/settimeformat.php
index d09679b9270..6136857e2fe 100644
--- a/apps/calendar/ajax/settings/settimeformat.php
+++ b/apps/calendar/ajax/settings/settimeformat.php
@@ -8,7 +8,6 @@
OCP\JSON::checkLoggedIn();
OCP\JSON::callCheck();
-
if(isset($_POST["timeformat"])){
OCP\Config::setUserValue(OCP\USER::getUser(), 'calendar', 'timeformat', $_POST["timeformat"]);
OCP\JSON::success();
diff --git a/apps/calendar/ajax/settings/settimezone.php b/apps/calendar/ajax/settings/settimezone.php
index 6d029a6643a..06db66d578e 100644
--- a/apps/calendar/ajax/settings/settimezone.php
+++ b/apps/calendar/ajax/settings/settimezone.php
@@ -14,6 +14,7 @@ $l=OC_L10N::get('calendar');
// Check if we are a user
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('calendar');
+OCP\JSON::callCheck();
// Get data
if( isset( $_POST['timezone'] ) ){
diff --git a/apps/calendar/ajax/share/activation.php b/apps/calendar/ajax/share/activation.php
index 7d6b8fcb16e..bce8693577b 100644
--- a/apps/calendar/ajax/share/activation.php
+++ b/apps/calendar/ajax/share/activation.php
@@ -5,7 +5,7 @@
* later.
* See the COPYING-README file.
*/
-$id = strip_tags($_GET['id']);
-$activation = strip_tags($_GET['activation']);
+$id = strip_tags($_POST['id']);
+$activation = strip_tags($_POST['activation']);
OC_Calendar_Share::set_active(OCP\USER::getUser(), $id, $activation);
OCP\JSON::success();
diff --git a/apps/calendar/ajax/share/changepermission.php b/apps/calendar/ajax/share/changepermission.php
index f3c628e8477..5aff7666f79 100644
--- a/apps/calendar/ajax/share/changepermission.php
+++ b/apps/calendar/ajax/share/changepermission.php
@@ -5,11 +5,12 @@
* later.
* See the COPYING-README file.
*/
- OCP\JSON::callCheck();
-$id = strip_tags($_GET['id']);
-$idtype = strip_tags($_GET['idtype']);
-$permission = (int) strip_tags($_GET['permission']);
+OCP\JSON::callCheck();
+
+$id = strip_tags($_POST['id']);
+$idtype = strip_tags($_POST['idtype']);
+$permission = (int) strip_tags($_POST['permission']);
switch($idtype){
case 'calendar':
case 'event':
@@ -26,8 +27,8 @@ if($idtype == 'event' && !OC_Calendar_App::getEventObject($id)){
OCP\JSON::error(array('message'=>'permission denied'));
exit;
}
-$sharewith = $_GET['sharewith'];
-$sharetype = strip_tags($_GET['sharetype']);
+$sharewith = $_POST['sharewith'];
+$sharetype = strip_tags($_POST['sharetype']);
switch($sharetype){
case 'user':
case 'group':
diff --git a/apps/calendar/ajax/share/dropdown.php b/apps/calendar/ajax/share/dropdown.php
index a3b0faca4bf..86cf4ac090e 100644
--- a/apps/calendar/ajax/share/dropdown.php
+++ b/apps/calendar/ajax/share/dropdown.php
@@ -7,7 +7,7 @@
*/
$user = OCP\USER::getUser();
-$calid = $_GET['calid'];
+$calid = $_POST['calid'];
$calendar = OC_Calendar_Calendar::find($calid);
if($calendar['userid'] != $user){
OCP\JSON::error();
diff --git a/apps/calendar/ajax/share/share.php b/apps/calendar/ajax/share/share.php
index babb8ce3f13..77e1ab9d657 100644
--- a/apps/calendar/ajax/share/share.php
+++ b/apps/calendar/ajax/share/share.php
@@ -5,10 +5,11 @@
* later.
* See the COPYING-README file.
*/
- OCP\JSON::callCheck();
+
+OCP\JSON::callCheck();
-$id = strip_tags($_GET['id']);
-$idtype = strip_tags($_GET['idtype']);
+$id = strip_tags($_POST['id']);
+$idtype = strip_tags($_POST['idtype']);
switch($idtype){
case 'calendar':
case 'event':
@@ -25,8 +26,8 @@ if($idtype == 'event' && !OC_Calendar_App::getEventObject($id)){
OCP\JSON::error(array('message'=>'permission denied'));
exit;
}
-$sharewith = $_GET['sharewith'];
-$sharetype = strip_tags($_GET['sharetype']);
+$sharewith = $_POST['sharewith'];
+$sharetype = strip_tags($_POST['sharetype']);
switch($sharetype){
case 'user':
case 'group':
diff --git a/apps/calendar/ajax/share/unshare.php b/apps/calendar/ajax/share/unshare.php
index 09264070dde..c7c06113189 100644
--- a/apps/calendar/ajax/share/unshare.php
+++ b/apps/calendar/ajax/share/unshare.php
@@ -5,10 +5,11 @@
* later.
* See the COPYING-README file.
*/
- OCP\JSON::callCheck();
-$id = strip_tags($_GET['id']);
-$idtype = strip_tags($_GET['idtype']);
+OCP\JSON::callCheck();
+
+$id = strip_tags($_POST['id']);
+$idtype = strip_tags($_POST['idtype']);
switch($idtype){
case 'calendar':
case 'event':
@@ -25,8 +26,8 @@ if($idtype == 'event' && !OC_Calendar_App::getEventObject($id)){
OCP\JSON::error(array('message'=>'permission denied'));
exit;
}
-$sharewith = $_GET['sharewith'];
-$sharetype = strip_tags($_GET['sharetype']);
+$sharewith = $_POST['sharewith'];
+$sharetype = strip_tags($_POST['sharetype']);
switch($sharetype){
case 'user':
case 'group':
diff --git a/apps/calendar/appinfo/app.php b/apps/calendar/appinfo/app.php
index 69b556af314..00787055787 100644
--- a/apps/calendar/appinfo/app.php
+++ b/apps/calendar/appinfo/app.php
@@ -4,29 +4,41 @@ OC::$CLASSPATH['OC_Calendar_App'] = 'apps/calendar/lib/app.php';
OC::$CLASSPATH['OC_Calendar_Calendar'] = 'apps/calendar/lib/calendar.php';
OC::$CLASSPATH['OC_Calendar_Object'] = 'apps/calendar/lib/object.php';
OC::$CLASSPATH['OC_Calendar_Hooks'] = 'apps/calendar/lib/hooks.php';
-OC::$CLASSPATH['OC_Connector_Sabre_CalDAV'] = 'apps/calendar/lib/connector_sabre.php';
+OC::$CLASSPATH['OC_Connector_Sabre_CalDAV'] = 'apps/calendar/lib/sabre/backend.php';
+OC::$CLASSPATH['OC_Connector_Sabre_CalDAV_CalendarRoot'] = 'apps/calendar/lib/sabre/calendarroot.php';
+OC::$CLASSPATH['OC_Connector_Sabre_CalDAV_UserCalendars'] = 'apps/calendar/lib/sabre/usercalendars.php';
+OC::$CLASSPATH['OC_Connector_Sabre_CalDAV_Calendar'] = 'apps/calendar/lib/sabre/calendar.php';
+OC::$CLASSPATH['OC_Connector_Sabre_CalDAV_CalendarObject'] = 'apps/calendar/lib/sabre/object.php';
+OC::$CLASSPATH['OC_Calendar_Repeat'] = 'apps/calendar/lib/repeat.php';
OC::$CLASSPATH['OC_Calendar_Share'] = 'apps/calendar/lib/share.php';
OC::$CLASSPATH['OC_Search_Provider_Calendar'] = 'apps/calendar/lib/search.php';
-
+OC::$CLASSPATH['OC_Calendar_Export'] = 'apps/calendar/lib/export.php';
+OC::$CLASSPATH['OC_Calendar_Import'] = 'apps/calendar/lib/import.php';
+OC::$CLASSPATH['OC_Share_Backend_Calendar'] = 'apps/calendar/lib/share/calendar.php';
+OC::$CLASSPATH['OC_Share_Backend_Event'] = 'apps/calendar/lib/share/event.php';
//General Hooks
OCP\Util::connectHook('OC_User', 'post_createUser', 'OC_Calendar_Hooks', 'createUser');
OCP\Util::connectHook('OC_User', 'post_deleteUser', 'OC_Calendar_Hooks', 'deleteUser');
+//Repeating Events Hooks
+OCP\Util::connectHook('OC_Calendar', 'addEvent', 'OC_Calendar_Repeat', 'generate');
+OCP\Util::connectHook('OC_Calendar', 'editEvent', 'OC_Calendar_Repeat', 'update');
+OCP\Util::connectHook('OC_Calendar', 'deleteEvent', 'OC_Calendar_Repeat', 'clean');
+OCP\Util::connectHook('OC_Calendar', 'moveEvent', 'OC_Calendar_Repeat', 'update');
+OCP\Util::connectHook('OC_Calendar', 'deleteCalendar', 'OC_Calendar_Repeat', 'cleanCalendar');
//Sharing Hooks
OCP\Util::connectHook('OC_Calendar', 'deleteEvent', 'OC_Calendar_Share', 'post_eventdelete');
OCP\Util::connectHook('OC_Calendar', 'deleteCalendar', 'OC_Calendar_Share', 'post_caldelete');
-
OCP\Util::addscript('calendar','loader');
OCP\Util::addscript("3rdparty", "chosen/chosen.jquery.min");
OCP\Util::addStyle("3rdparty", "chosen/chosen");
-OCP\App::register( array(
- 'order' => 10,
- 'id' => 'calendar',
- 'name' => 'Calendar' ));
+OCP\Util::addStyle('3rdparty/miniColors', 'jquery.miniColors');
+OCP\Util::addscript('3rdparty/miniColors', 'jquery.miniColors.min');
OCP\App::addNavigationEntry( array(
'id' => 'calendar_index',
'order' => 10,
'href' => OCP\Util::linkTo( 'calendar', 'index.php' ),
'icon' => OCP\Util::imagePath( 'calendar', 'icon.svg' ),
'name' => $l->t('Calendar')));
-OCP\App::registerPersonal('calendar', 'settings');
OC_Search::registerProvider('OC_Search_Provider_Calendar');
+OCP\Share::registerBackend('calendar', 'OC_Share_Backend_Calendar');
+OCP\Share::registerBackend('event', 'OC_Share_Backend_Event');
diff --git a/apps/calendar/appinfo/database.xml b/apps/calendar/appinfo/database.xml
index f60319ad432..16e10010d5a 100644
--- a/apps/calendar/appinfo/database.xml
+++ b/apps/calendar/appinfo/database.xml
@@ -290,4 +290,56 @@
</table>
+ <table>
+
+ <name>*dbprefix*calendar_repeat</name>
+
+ <declaration>
+
+ <field>
+ <name>id</name>
+ <type>integer</type>
+ <default>0</default>
+ <notnull>true</notnull>
+ <autoincrement>1</autoincrement>
+ <unsigned>true</unsigned>
+ <length>4</length>
+ </field>
+
+ <field>
+ <name>eventid</name>
+ <type>integer</type>
+ <default>0</default>
+ <notnull>true</notnull>
+ <unsigned>true</unsigned>
+ <length>4</length>
+ </field>
+
+ <field>
+ <name>calid</name>
+ <type>integer</type>
+ <default>0</default>
+ <notnull>true</notnull>
+ <unsigned>true</unsigned>
+ <length>4</length>
+ </field>
+
+ <field>
+ <name>startdate</name>
+ <type>timestamp</type>
+ <default>0000-00-00 00:00:00</default>
+ <notnull>false</notnull>
+ </field>
+
+ <field>
+ <name>enddate</name>
+ <type>timestamp</type>
+ <default>0000-00-00 00:00:00</default>
+ <notnull>false</notnull>
+ </field>
+
+ </declaration>
+
+ </table>
+
</database>
diff --git a/apps/calendar/appinfo/remote.php b/apps/calendar/appinfo/remote.php
index d500ec1080a..f499d909666 100644
--- a/apps/calendar/appinfo/remote.php
+++ b/apps/calendar/appinfo/remote.php
@@ -7,8 +7,8 @@
*/
OCP\App::checkAppEnabled('calendar');
-if(substr($_SERVER["REQUEST_URI"],0,strlen(OC::$APPSWEBROOT . '/apps/calendar/caldav.php')) == OC::$APPSWEBROOT . '/apps/calendar/caldav.php'){
- $baseuri = OC::$APPSWEBROOT . '/apps/calendar/caldav.php';
+if(substr($_SERVER["REQUEST_URI"],0,strlen(OC_App::getAppWebPath('calendar').'/caldav.php')) == OC_App::getAppWebPath('calendar'). '/caldav.php'){
+ $baseuri = OC_App::getAppWebPath('calendar').'/caldav.php';
}
// only need authentication apps
@@ -21,18 +21,17 @@ $principalBackend = new OC_Connector_Sabre_Principal();
$caldavBackend = new OC_Connector_Sabre_CalDAV();
// Root nodes
-$Sabre_CalDAV_Principal_Collection = new Sabre_CalDAV_Principal_Collection($principalBackend);
+$Sabre_CalDAV_Principal_Collection = new Sabre_CalDAV_Principal_Collection($principalBackend);
$Sabre_CalDAV_Principal_Collection->disableListing = true; // Disable listening
-$Sabre_CalDAV_CalendarRootNode = new Sabre_CalDAV_CalendarRootNode($principalBackend, $caldavBackend);
-$Sabre_CalDAV_CalendarRootNode->disableListing = true; // Disable listening
+$calendarRoot = new OC_Connector_Sabre_CalDAV_CalendarRoot($principalBackend, $caldavBackend);
+$calendarRoot->disableListing = true; // Disable listening
-$nodes = array(
- $Sabre_CalDAV_Principal_Collection,
- $Sabre_CalDAV_CalendarRootNode,
+$nodes = array(
+ $Sabre_CalDAV_Principal_Collection,
+ $calendarRoot,
);
-
// Fire up server
$server = new Sabre_DAV_Server($nodes);
$server->setBaseUri($baseuri);
@@ -41,6 +40,7 @@ $server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend,'ownCloud'));
$server->addPlugin(new Sabre_CalDAV_Plugin());
$server->addPlugin(new Sabre_DAVACL_Plugin());
$server->addPlugin(new Sabre_DAV_Browser_Plugin(false)); // Show something in the Browser, but no upload
+$server->addPlugin(new Sabre_CalDAV_ICSExportPlugin());
// And off we go!
$server->exec();
diff --git a/apps/calendar/appinfo/update.php b/apps/calendar/appinfo/update.php
index 3b5998d9987..0e11c998841 100644
--- a/apps/calendar/appinfo/update.php
+++ b/apps/calendar/appinfo/update.php
@@ -15,3 +15,10 @@ if (version_compare($installedVersion, '0.2.1', '<')) {
$r = $stmt->execute(array($color,$id));
}
}
+if (version_compare($installedVersion, '0.5', '<')) {
+ $calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser());
+ foreach($calendars as $calendar){
+ OC_Calendar_Repeat::cleanCalendar($calendar['id']);
+ OC_Calendar_Repeat::generateCalendar($calendar['id']);
+ }
+} \ No newline at end of file
diff --git a/apps/calendar/appinfo/version b/apps/calendar/appinfo/version
index 267577d47e4..cb0c939a936 100644
--- a/apps/calendar/appinfo/version
+++ b/apps/calendar/appinfo/version
@@ -1 +1 @@
-0.4.1
+0.5.2
diff --git a/apps/calendar/calendar.php b/apps/calendar/calendar.php
new file mode 100644
index 00000000000..2c0bee9d233
--- /dev/null
+++ b/apps/calendar/calendar.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Copyright (c) 2012 Georg Ehrke <ownClouddev at georgswebsite.de>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+$l10n = OC_L10N::get('calendar');
+OCP\JSON::checkLoggedIn();
+OCP\JSON::checkAppEnabled('calendar');
+$tmpl = new OCP\Template('calendar', 'part.choosecalendar');
+$tmpl->printpage(); \ No newline at end of file
diff --git a/apps/calendar/css/import.css b/apps/calendar/css/import.css
new file mode 100644
index 00000000000..fd82006072c
--- /dev/null
+++ b/apps/calendar/css/import.css
@@ -0,0 +1,14 @@
+/**
+ * Copyright (c) 2012 Georg Ehrke <ownclouddev at georgswebsite dot de>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+#calendar_import_newcalform, #calendar_import_mergewarning, #calendar_import_process, #calendar_import_done{display:none;}
+#calendar_import_process_message, #calendar_import_status, #calendar_import_form_message, #calendar_import_mergewarning{text-align:center;}
+#calendar_import_form_message{font-weight: bold;}
+#calendar_import_newcalendar{width:415px;float:right;}
+#calendar_import_mergewarning{clear: both;}
+#calendar_import_defaultcolors{clear:both;margin: 0 auto;text-align: center;}
+.calendar_import_warning{border-color: #fc3333;}
+.calendar-colorpicker-color{display:inline-block;width:20px;height:5px;margin: 0 auto;cursor:pointer;border:2px solid transparent;margin-top: 5px;} \ No newline at end of file
diff --git a/apps/calendar/css/style.css b/apps/calendar/css/style.css
index 373a4565638..64a779b9a9f 100644
--- a/apps/calendar/css/style.css
+++ b/apps/calendar/css/style.css
@@ -19,7 +19,7 @@
#loading { display: none;margin: 0;padding:0;margin-top:5px;}
-#calendar_holder {position: relative;bottom: 0; right: 0; left: 0; top: 3em;}
+#fullcalendar {position: relative;bottom: 0; right: 0; left: 0; top: 3em;}
.fc-content{padding:2px 4px;}
#listview {margin: 0; padding: 10px; background: #EEEEEE;}
#listview #more_before, #listview #more_after {border: 1px solid #1a1a1a; width:25em;padding: 3px;text-align: center;}
@@ -40,8 +40,6 @@
.thisday{background: #FFFABC;}
.event {position:relative;}
.event.colored {border-bottom: 1px solid white;}
-.popup {display: none; position: absolute; z-index: 1000; background: #eeeeee; color: #000000; border: 1px solid #1a1a1a; font-size: 90%;}
-.event_popup {width: 280px; height: 40px; padding: 10px;}
input[type="button"].active {color: #6193CF}
#fromtime, #totime {
@@ -133,3 +131,12 @@ padding:0 8px 2px;
line-height:1.2;
margin-bottom:4px;
}
+
+#choosecalendar a.settings{
+ margin-top: 25px;
+ margin-right: 10px;
+}
+
+#fullcalendar{
+ overflow: scroll;
+} \ No newline at end of file
diff --git a/apps/calendar/export.php b/apps/calendar/export.php
index 5780d191a57..1374c49cc0d 100644
--- a/apps/calendar/export.php
+++ b/apps/calendar/export.php
@@ -5,35 +5,26 @@
* later.
* See the COPYING-README file.
*/
-
-
OCP\User::checkLoggedIn();
OCP\App::checkAppEnabled('calendar');
$cal = isset($_GET['calid']) ? $_GET['calid'] : NULL;
$event = isset($_GET['eventid']) ? $_GET['eventid'] : NULL;
-$nl = "\r\n";
if(isset($cal)){
$calendar = OC_Calendar_App::getCalendar($cal, true);
if(!$calendar){
header('HTTP/1.0 404 Not Found');
exit;
}
- $calobjects = OC_Calendar_Object::all($cal);
header('Content-Type: text/Calendar');
- header('Content-Disposition: inline; filename=' . $calendar['displayname'] . '.ics');
- foreach($calobjects as $calobject){
- echo $calobject['calendardata'] . $nl;
- }
+ header('Content-Disposition: inline; filename=' . str_replace(' ', '-', $calendar['displayname']) . '.ics');
+ echo OC_Calendar_Export::export($cal, OC_Calendar_Export::CALENDAR);
}elseif(isset($event)){
$data = OC_Calendar_App::getEventObject($_GET['eventid'], true);
if(!$data){
header('HTTP/1.0 404 Not Found');
exit;
}
- $calendarid = $data['calendarid'];
- $calendar = OC_Calendar_App::getCalendar($calendarid);
header('Content-Type: text/Calendar');
- header('Content-Disposition: inline; filename=' . $data['summary'] . '.ics');
- echo $data['calendardata'];
-}
-?>
+ header('Content-Disposition: inline; filename=' . str_replace(' ', '-', $data['summary']) . '.ics');
+ echo OC_Calendar_Export::export($event, OC_Calendar_Export::EVENT);
+} \ No newline at end of file
diff --git a/apps/calendar/img/icon.png b/apps/calendar/img/icon.png
index eb9e07cbb10..267efd997f3 100644
--- a/apps/calendar/img/icon.png
+++ b/apps/calendar/img/icon.png
Binary files differ
diff --git a/apps/calendar/import_tmp/Info b/apps/calendar/import_tmp/Info
deleted file mode 100644
index abafbce435c..00000000000
--- a/apps/calendar/import_tmp/Info
+++ /dev/null
@@ -1,2 +0,0 @@
-This folder contains static files with the percentage of the import.
-Requires write permission
diff --git a/apps/calendar/index.php b/apps/calendar/index.php
index cf03a7a3cd3..a8ad4ab3356 100644
--- a/apps/calendar/index.php
+++ b/apps/calendar/index.php
@@ -5,25 +5,34 @@
* later.
* See the COPYING-README file.
*/
-
-
OCP\User::checkLoggedIn();
OCP\App::checkAppEnabled('calendar');
// Create default calendar ...
-$calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser(), 1);
+$calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser(), false);
if( count($calendars) == 0){
OC_Calendar_Calendar::addCalendar(OCP\USER::getUser(),'Default calendar');
- $calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser(), 1);
+ $calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser(), true);
}
$eventSources = array();
foreach($calendars as $calendar){
- $eventSources[] = OC_Calendar_Calendar::getEventSourceInfo($calendar);
+ if($calendar['active'] == 1) {
+ $eventSources[] = OC_Calendar_Calendar::getEventSourceInfo($calendar);
+ }
}
-$eventSources[] = array('url' => '?app=calendar&getfile=ajax/events.php?calendar_id=shared_rw', 'backgroundColor' => '#1D2D44', 'borderColor' => '#888', 'textColor' => 'white', 'editable'=>'true');
-$eventSources[] = array('url' => '?app=calendar&getfile=ajax/events.php?calendar_id=shared_r', 'backgroundColor' => '#1D2D44', 'borderColor' => '#888', 'textColor' => 'white', 'editable' => 'false');
+$events_baseURL = OCP\Util::linkTo('calendar', 'ajax/events.php');
+$eventSources[] = array('url' => $events_baseURL.'?calendar_id=shared_rw',
+ 'backgroundColor' => '#1D2D44',
+ 'borderColor' => '#888',
+ 'textColor' => 'white',
+ 'editable'=>'true');
+$eventSources[] = array('url' => $events_baseURL.'?calendar_id=shared_r',
+ 'backgroundColor' => '#1D2D44',
+ 'borderColor' => '#888',
+ 'textColor' => 'white',
+ 'editable' => 'false');
OCP\Util::emitHook('OC_Calendar', 'getSources', array('sources' => &$eventSources));
$categories = OC_Calendar_App::getCategoryOptions();
@@ -54,9 +63,9 @@ OCP\Util::addscript('contacts','jquery.multi-autocomplete');
OCP\Util::addscript('','oc-vcategories');
OCP\App::setActiveNavigationEntry('calendar_index');
$tmpl = new OCP\Template('calendar', 'calendar', 'user');
-$tmpl->assign('eventSources', $eventSources);
+$tmpl->assign('eventSources', $eventSources,false);
$tmpl->assign('categories', $categories);
if(array_key_exists('showevent', $_GET)){
- $tmpl->assign('showevent', $_GET['showevent']);
+ $tmpl->assign('showevent', $_GET['showevent'], false);
}
$tmpl->printPage();
diff --git a/apps/calendar/js/calendar.js b/apps/calendar/js/calendar.js
index efdff52998c..23846c89b84 100644
--- a/apps/calendar/js/calendar.js
+++ b/apps/calendar/js/calendar.js
@@ -18,7 +18,7 @@ Calendar={
startEventDialog:function(){
Calendar.UI.loading(false);
$('.tipsy').remove();
- $('#calendar_holder').fullCalendar('unselect');
+ $('#fullcalendar').fullCalendar('unselect');
Calendar.UI.lockTime();
$( "#from" ).datepicker({
dateFormat : 'dd-mm-yy'
@@ -78,7 +78,7 @@ Calendar={
$('#event').dialog('destroy').remove();
}else{
Calendar.UI.loading(true);
- $('#dialog_holder').load(OC.filePath('calendar', 'ajax/event', 'edit.form.php') + '?id=' + id, Calendar.UI.startEventDialog);
+ $('#dialog_holder').load(OC.filePath('calendar', 'ajax/event', 'edit.form.php'), {id: id}, Calendar.UI.startEventDialog);
}
},
submitDeleteEventForm:function(url){
@@ -88,7 +88,7 @@ Calendar={
$.post(url, post, function(data){
Calendar.UI.loading(false);
if(data.status == 'success'){
- $('#calendar_holder').fullCalendar('removeEvents', $('#event_form input[name=id]').val());
+ $('#fullcalendar').fullCalendar('removeEvents', $('#event_form input[name=id]').val());
$('#event').dialog('destroy').remove();
} else {
$('#errorbox').html(t('calendar', 'Deletion failed'));
@@ -133,7 +133,7 @@ Calendar={
} else
if(data.status == 'success'){
$('#event').dialog('destroy').remove();
- $('#calendar_holder').fullCalendar('refetchEvents');
+ $('#fullcalendar').fullCalendar('refetchEvents');
}
},"json");
},
@@ -148,7 +148,7 @@ Calendar={
console.log("Event moved successfully");
}else{
revertFunc();
- $('#calendar_holder').fullCalendar('refetchEvents');
+ $('#fullcalendar').fullCalendar('refetchEvents');
}
});
},
@@ -163,7 +163,7 @@ Calendar={
console.log("Event resized successfully");
}else{
revertFunc();
- $('#calendar_holder').fullCalendar('refetchEvents');
+ $('#fullcalendar').fullCalendar('refetchEvents');
}
});
},
@@ -207,8 +207,7 @@ Calendar={
}
},
showCalDAVUrl:function(username, calname){
- $('#caldav_url').val(totalurl + '/' + username + '/' + calname);
- $('#caldav_url').val(encodeURI($('#caldav_url').val()));
+ $('#caldav_url').val(totalurl + '/' + username + '/' + decodeURIComponent(calname));
$('#caldav_url').show();
$("#caldav_url_close").show();
},
@@ -240,11 +239,11 @@ Calendar={
doc_height = $(document).height(),
win_height = $(window).height();
if(direction == 'down' && win_height == (doc_height - scroll)){
- $('#calendar_holder').fullCalendar('next');
+ $('#fullcalendar').fullCalendar('next');
$(document).scrollTop(0);
event.preventDefault();
}else if (direction == 'top' && scroll == 0) {
- $('#calendar_holder').fullCalendar('prev');
+ $('#fullcalendar').fullCalendar('prev');
$(document).scrollTop(win_height);
event.preventDefault();
}
@@ -399,9 +398,9 @@ Calendar={
if (data.status == 'success'){
checkbox.checked = data.active == 1;
if (data.active == 1){
- $('#calendar_holder').fullCalendar('addEventSource', data.eventSource);
+ $('#fullcalendar').fullCalendar('addEventSource', data.eventSource);
}else{
- $('#calendar_holder').fullCalendar('removeEventSource', data.eventSource.url);
+ $('#fullcalendar').fullCalendar('removeEventSource', data.eventSource.url);
}
}
});
@@ -414,7 +413,7 @@ Calendar={
},
edit:function(object, calendarid){
var tr = $(document.createElement('tr'))
- .load(OC.filePath('calendar', 'ajax/calendar', 'edit.form.php') + "?calendarid="+calendarid,
+ .load(OC.filePath('calendar', 'ajax/calendar', 'edit.form.php'), {calendarid: calendarid},
function(){Calendar.UI.Calendar.colorPicker(this)});
$(object).closest('tr').after(tr).hide();
},
@@ -427,9 +426,10 @@ Calendar={
function(data) {
if (data.status == 'success'){
var url = 'ajax/events.php?calendar_id='+calid;
- $('#calendar_holder').fullCalendar('removeEventSource', url);
+ $('#fullcalendar').fullCalendar('removeEventSource', url);
$('#choosecalendar_dialog').dialog('destroy').remove();
Calendar.UI.Calendar.overview();
+ $('#fullcalendar').fullCalendar('refetchEvents');
}
});
}
@@ -456,8 +456,8 @@ Calendar={
function(data){
if(data.status == 'success'){
$(button).closest('tr').prev().html(data.page).show().next().remove();
- $('#calendar_holder').fullCalendar('removeEventSource', data.eventSource.url);
- $('#calendar_holder').fullCalendar('addEventSource', data.eventSource);
+ $('#fullcalendar').fullCalendar('removeEventSource', data.eventSource.url);
+ $('#fullcalendar').fullCalendar('addEventSource', data.eventSource);
if (calendarid == 'new'){
$('#choosecalendar_dialog > table:first').append('<tr><td colspan="6"><a href="#" onclick="Calendar.UI.Calendar.newCalendar(this);"><input type="button" value="' + newcalendar + '"></a></td></tr>');
}
@@ -503,14 +503,14 @@ Calendar={
currentid: 'false',
idtype: '',
activation:function(object,owner,id){
- $.getJSON(OC.filePath('calendar', 'ajax/share', 'activation.php'),{id:id, idtype:'calendar', activation:object.checked?1:0});
- $('#calendar_holder').fullCalendar('refetchEvents');
+ $.post(OC.filePath('calendar', 'ajax/share', 'activation.php'),{id:id, idtype:'calendar', activation:object.checked?1:0});
+ $('#fullcalendar').fullCalendar('refetchEvents');
},
dropdown:function(userid, calid){
$('.calendar_share_dropdown').remove();
var element = document.getElementById(userid+'_'+calid);
$('<div class="calendar_share_dropdown"></div>').appendTo(element);
- $.get(OC.filePath('calendar', 'ajax/share', 'dropdown.php') + '?calid=' + calid, function(data){
+ $.post(OC.filePath('calendar', 'ajax/share', 'dropdown.php'), {calid: calid}, function(data){
$('.calendar_share_dropdown').html(data);
$('.calendar_share_dropdown').show('blind');
$('#share_user').chosen();
@@ -520,7 +520,7 @@ Calendar={
Calendar.UI.Share.idtype = 'calendar';
},
share:function(id, idtype, sharewith, sharetype){
- $.getJSON(OC.filePath('calendar', 'ajax/share', 'share.php'),{id:id, idtype:idtype, sharewith:sharewith, sharetype:sharetype}, function(data){
+ $.post(OC.filePath('calendar', 'ajax/share', 'share.php'),{id:id, idtype:idtype, sharewith:sharewith, sharetype:sharetype}, function(data){
if(sharetype == 'public'){
$('#public_token').val(parent.location.protocol+'//'+location.host+OC.linkTo('', 'public.php')+'?service=calendar&t='+data.message);
$('#public_token').css('display', 'block');
@@ -528,7 +528,7 @@ Calendar={
});
},
unshare:function(id, idtype, sharewith, sharetype){
- $.getJSON(OC.filePath('calendar', 'ajax/share', 'unshare.php'),{id:id, idtype:idtype, sharewith:sharewith, sharetype:sharetype}, function(){
+ $.post(OC.filePath('calendar', 'ajax/share', 'unshare.php'),{id:id, idtype:idtype, sharewith:sharewith, sharetype:sharetype}, function(){
if(sharetype == 'public'){
$('#public_token').val('');
$('#public_token').css('display', 'none');
@@ -536,7 +536,7 @@ Calendar={
});
},
changepermission:function(id, idtype, sharewith, sharetype, permission){
- $.getJSON(OC.filePath('calendar', 'ajax/share', 'changepermission.php'),{id:id, idtype:idtype, sharewith: sharewith, sharetype:sharetype, permission: (permission?1:0)});
+ $.post(OC.filePath('calendar', 'ajax/share', 'changepermission.php'),{id:id, idtype:idtype, sharewith: sharewith, sharetype:sharetype, permission: (permission?1:0)});
},
init:function(){
$('.calendar_share_dropdown').live('mouseleave', function(){
@@ -547,7 +547,7 @@ Calendar={
$('#share_user').live('change', function(){
if($('#sharewithuser_' + $('#share_user option:selected').text()).length == 0){
Calendar.UI.Share.share(Calendar.UI.Share.currentid, Calendar.UI.Share.idtype, $('#share_user option:selected').text(), 'user');
- var newitem = '<li id="sharewithuser_' + $('#share_user option:selected').text() +'"><input type="checkbox" width="12px" style="visibility:hidden;" title="' + $('#share_user option:selected').text() + '">' + $('#share_user option:selected').text() + '<img src="' + oc_webroot + '/core/img/actions/delete.svg" class="svg action" style="display:none;float:right;"></li>';
+ var newitem = '<li id="sharewithuser_' + $('#share_user option:selected').text() +'"><input type="checkbox" width="12px" style="visibility:hidden;" title="' + $('#share_user option:selected').text() + '">' + $('#share_user option:selected').text() + '<img src="' + OC.imagePath('core', 'actions/delete.svg') + '" class="svg action" style="display:none;float:right;"></li>';
$('#sharewithuser_list').append(newitem);
$('#sharewithuser_' + $('#share_user option:selected').text() + ' > img').click(function(){
$('#share_user option[value="' + $(this).parent().text() + '"]').removeAttr('disabled');
@@ -562,7 +562,7 @@ Calendar={
$('#share_group').live('change', function(){
if($('#sharewithgroup_' + $('#share_group option:selected').text()).length == 0){
Calendar.UI.Share.share(Calendar.UI.Share.currentid, Calendar.UI.Share.idtype, $('#share_group option:selected').text(), 'group');
- var newitem = '<li id="sharewithgroup_' + $('#share_group option:selected').text() +'"><input type="checkbox" width="12px" style="visibility:hidden;" title="' + $('#share_group option:selected').text() + '">' + $('#share_group option:selected').text() + '<img src="' + oc_webroot + '/core/img/actions/delete.svg" class="svg action" style="display:none;float:right;"></li>';
+ var newitem = '<li id="sharewithgroup_' + $('#share_group option:selected').text() +'"><input type="checkbox" width="12px" style="visibility:hidden;" title="' + $('#share_group option:selected').text() + '">' + $('#share_group option:selected').text() + '<img src="' + OC.imagePath('core', 'actions/delete.svg') + '" class="svg action" style="display:none;float:right;"></li>';
$('#sharewithgroup_list').append(newitem);
$('#sharewithgroup_' + $('#share_group option:selected').text() + ' > img').click(function(){
$('#share_group option[value="' + $(this).parent().text() + '"]').removeAttr('disabled');
@@ -605,8 +605,53 @@ Calendar={
});
/*var permissions = (this.checked) ? 1 : 0;*/
}
+ },
+ Drop:{
+ init:function(){
+ if (typeof window.FileReader === 'undefined') {
+ console.log('The drop-import feature is not supported in your browser :(');
+ return false;
+ }
+ droparea = document.getElementById('fullcalendar');
+ droparea.ondrop = function(e){
+ e.preventDefault();
+ Calendar.UI.Drop.drop(e);
+ }
+ console.log('Drop initialized successfully');
+ },
+ drop:function(e){
+ var files = e.dataTransfer.files;
+ for(var i = 0;i < files.length;i++){
+ var file = files[i];
+ reader = new FileReader();
+ reader.onload = function(event){
+ Calendar.UI.Drop.import(event.target.result);
+ $('#fullcalendar').fullCalendar('refetchEvents');
+ }
+ reader.readAsDataURL(file);
+ }
+ },
+ import:function(data){
+ $.post(OC.filePath('calendar', 'ajax/import', 'dropimport.php'), {'data':data},function(result) {
+ if(result.status == 'success'){
+ $('#fullcalendar').fullCalendar('addEventSource', result.eventSource);
+ $('#notification').html(result.message);
+ $('#notification').slideDown();
+ window.setTimeout(function(){$('#notification').slideUp();}, 5000);
+ return true;
+ }else{
+ $('#notification').html(result.message);
+ $('#notification').slideDown();
+ window.setTimeout(function(){$('#notification').slideUp();}, 5000);
+ }
+ });
+ }
}
- }
+ },
+ Settings:{
+ //
+ },
+
}
$.fullCalendar.views.list = ListView;
function ListView(element, calendar) {
@@ -774,7 +819,7 @@ function ListView(element, calendar) {
}
$(document).ready(function(){
Calendar.UI.initScroll();
- $('#calendar_holder').fullCalendar({
+ $('#fullcalendar').fullCalendar({
header: false,
firstDay: firstDay,
editable: true,
@@ -803,17 +848,17 @@ $(document).ready(function(){
dayNamesShort: dayNamesShort,
allDayText: allDayText,
viewDisplay: function(view) {
- $('#datecontrol_date').html(view.title);
+ $('#datecontrol_date').val($('<p>').html(view.title).text());
if (view.name != defaultView) {
- $.get(OC.filePath('calendar', 'ajax', 'changeview.php') + "?v="+view.name);
+ $.post(OC.filePath('calendar', 'ajax', 'changeview.php'), {v:view.name});
defaultView = view.name;
}
Calendar.UI.setViewActive(view.name);
if (view.name == 'agendaWeek') {
- $('#calendar_holder').fullCalendar('option', 'aspectRatio', 0.1);
+ $('#fullcalendar').fullCalendar('option', 'aspectRatio', 0.1);
}
else {
- $('#calendar_holder').fullCalendar('option', 'aspectRatio', 1.35);
+ $('#fullcalendar').fullCalendar('option', 'aspectRatio', 1.35);
}
},
columnFormat: {
@@ -842,26 +887,49 @@ $(document).ready(function(){
loading: Calendar.UI.loading,
eventSources: eventSources
});
+ $('#datecontrol_date').datepicker({
+ changeMonth: true,
+ changeYear: true,
+ showButtonPanel: true,
+ beforeShow: function(input, inst) {
+ var calendar_holder = $('#fullcalendar');
+ var date = calendar_holder.fullCalendar('getDate');
+ inst.input.datepicker('setDate', date);
+ inst.input.val(calendar_holder.fullCalendar('getView').title);
+ return inst;
+ },
+ onSelect: function(value, inst) {
+ var date = inst.input.datepicker('getDate');
+ $('#fullcalendar').fullCalendar('gotoDate', date);
+ }
+ });
fillWindow($('#content'));
OCCategories.changed = Calendar.UI.categoriesChanged;
OCCategories.app = 'calendar';
$('#oneweekview_radio').click(function(){
- $('#calendar_holder').fullCalendar('changeView', 'agendaWeek');
+ $('#fullcalendar').fullCalendar('changeView', 'agendaWeek');
});
$('#onemonthview_radio').click(function(){
- $('#calendar_holder').fullCalendar('changeView', 'month');
+ $('#fullcalendar').fullCalendar('changeView', 'month');
});
$('#listview_radio').click(function(){
- $('#calendar_holder').fullCalendar('changeView', 'list');
+ $('#fullcalendar').fullCalendar('changeView', 'list');
});
$('#today_input').click(function(){
- $('#calendar_holder').fullCalendar('today');
+ $('#fullcalendar').fullCalendar('today');
});
$('#datecontrol_left').click(function(){
- $('#calendar_holder').fullCalendar('prev');
+ $('#fullcalendar').fullCalendar('prev');
});
$('#datecontrol_right').click(function(){
- $('#calendar_holder').fullCalendar('next');
+ $('#fullcalendar').fullCalendar('next');
});
Calendar.UI.Share.init();
+ Calendar.UI.Drop.init();
+ $('#choosecalendar .generalsettings').on('click keydown', function() {
+ OC.appSettings({appid:'calendar', loadJS:true, cache:false});
+ });
+ $('#choosecalendar .calendarsettings').on('click keydown', function() {
+ OC.appSettings({appid:'calendar', loadJS:true, cache:false, scriptName:'calendar.php'});
+ });
});
diff --git a/apps/calendar/js/geo.js b/apps/calendar/js/geo.js
index 092d8547469..99290d940e3 100644
--- a/apps/calendar/js/geo.js
+++ b/apps/calendar/js/geo.js
@@ -6,7 +6,7 @@
*/
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
- $.getJSON(OC.filePath('calendar', 'ajax/settings', 'guesstimezone.php') + '?lat=' + position.coords.latitude + '&long=' + position.coords.longitude,
+ $.post(OC.filePath('calendar', 'ajax/settings', 'guesstimezone.php'), {lat: position.coords.latitude, lng: position.coords.longitude},
function(data){
if (data.status == 'success' && typeof(data.message) != 'undefined'){
$('#notification').html(data.message);
diff --git a/apps/calendar/js/loader.js b/apps/calendar/js/loader.js
index 60d92f448ee..253abafc427 100644
--- a/apps/calendar/js/loader.js
+++ b/apps/calendar/js/loader.js
@@ -5,77 +5,175 @@
* See the COPYING-README file.
*/
Calendar_Import={
- importdialog: function(filename){
- var path = $('#dir').val();
- $('body').append('<div id="calendar_import"></div>');
- $('#calendar_import').load(OC.filePath('calendar', 'ajax/import', 'dialog.php'), {filename:filename, path:path}, function(){Calendar_Import.initdialog(filename);});
+ Store:{
+ file: '',
+ path: '',
+ id: 0,
+ method: '',
+ calname: '',
+ calcolor: '',
+ progresskey: '',
+ percentage: 0
},
- initdialog: function(filename){
- $('#calendar_import_dialog').dialog({
- width : 500,
- close : function() {
- $(this).dialog('destroy').remove();
- $('#calendar_import').remove();
+ Dialog:{
+ open: function(filename){
+ OC.addStyle('calendar', 'import');
+ Calendar_Import.Store.file = filename;
+ Calendar_Import.Store.path = $('#dir').val();
+ $('body').append('<div id="calendar_import"></div>');
+ $('#calendar_import').load(OC.filePath('calendar', 'ajax/import', 'dialog.php'), {filename:Calendar_Import.Store.file, path:Calendar_Import.Store.path},function(){
+ Calendar_Import.Dialog.init();
+ });
+ },
+ close: function(){
+ Calendar_Import.reset();
+ $(this).dialog('destroy').remove();
+ $('#calendar_import_dialog').remove();
+ },
+ init: function(){
+ //init dialog
+ $('#calendar_import_dialog').dialog({
+ width : 500,
+ resizable: false,
+ close : function() {
+ Calendar_Import.Dialog.close();
+ }
+ });
+ //init buttons
+ $('#calendar_import_done').click(function(){
+ Calendar_Import.Dialog.close();
+ });
+ $('#calendar_import_submit').click(function(){
+ Calendar_Import.Core.process();
+ });
+ $('#calendar_import_mergewarning').click(function(){
+ $('#calendar_import_newcalendar').attr('value', $('#calendar_import_availablename').val());
+ Calendar_Import.Dialog.mergewarning($('#calendar_import_newcalendar').val());
+ });
+ $('#calendar_import_calendar').change(function(){
+ if($('#calendar_import_calendar option:selected').val() == 'newcal'){
+ $('#calendar_import_newcalform').slideDown('slow');
+ Calendar_Import.Dialog.mergewarning($('#calendar_import_newcalendar').val());
+ }else{
+ $('#calendar_import_newcalform').slideUp('slow');
+ $('#calendar_import_mergewarning').slideUp('slow');
+ }
+ });
+ $('#calendar_import_newcalendar').keyup(function(){
+ Calendar_Import.Dialog.mergewarning($.trim($('#calendar_import_newcalendar').val()));
+ });
+ $('#calendar_import_newcalendar_color').miniColors({
+ letterCase: 'uppercase'
+ });
+ $('.calendar-colorpicker-color').click(function(){
+ var str = $(this).attr('rel');
+ str = str.substr(1);
+ $('#calendar_import_newcalendar_color').attr('value', str);
+ $(".color-picker").miniColors('value', '#' + str);
+ });
+ //init progressbar
+ $('#calendar_import_progressbar').progressbar({value: Calendar_Import.Store.percentage});
+ Calendar_Import.Store.progresskey = $('#calendar_import_progresskey').val();
+ },
+ mergewarning: function(newcalname){
+ $.post(OC.filePath('calendar', 'ajax/import', 'calendarcheck.php'), {calname: newcalname}, function(data){
+ if(data.message == 'exists'){
+ $('#calendar_import_mergewarning').slideDown('slow');
+ }else{
+ $('#calendar_import_mergewarning').slideUp('slow');
+ }
+ });
+ },
+ update: function(){
+ if(Calendar_Import.Store.percentage == 100){
+ return false;
}
- });
- $('#import_done_button').click(function(){
- $('#calendar_import_dialog').dialog('destroy').remove();
- $('#calendar_import').remove();
- });
- $('#progressbar').progressbar({value: 0});
- $('#startimport').click(function(){
- var filename = $('#filename').val();
- var path = $('#path').val();
- var calid = $('#calendar option:selected').val();
- if($('#calendar option:selected').val() == 'newcal'){
- var method = 'new';
- var calname = $('#newcalendar').val();
- var calname = $.trim(calname);
- if(calname == ''){
- $('#newcalendar').css('background-color', '#FF2626');
- $('#newcalendar').focus(function(){
- $('#newcalendar').css('background-color', '#F8F8F8');
- });
- return false;
+ $.post(OC.filePath('calendar', 'ajax/import', 'import.php'), {progresskey: Calendar_Import.Store.progresskey, getprogress: true}, function(data){
+ if(data.status == 'success'){
+ if(data.percent == null){
+ return false;
+ }
+ Calendar_Import.Store.percentage = parseInt(data.percent);
+ $('#calendar_import_progressbar').progressbar('option', 'value', parseInt(data.percent));
+ if(data.percent < 100 ){
+ window.setTimeout('Calendar_Import.Dialog.update()', 250);
+ }else{
+ $('#calendar_import_done').css('display', 'block');
+ }
+ }else{
+ $('#calendar_import_progressbar').progressbar('option', 'value', 100);
+ $('#calendar_import_progressbar > div').css('background-color', '#FF2626');
+ $('#calendar_import_status').html(data.message);
}
- }else{
- var method = 'old';
+ });
+ return 0;
+ },
+ warning: function(selector){
+ $(selector).addClass('calendar_import_warning');
+ $(selector).focus(function(){
+ $(selector).removeClass('calendar_import_warning');
+ });
+ }
+ },
+ Core:{
+ process: function(){
+ var validation = Calendar_Import.Core.prepare();
+ if(validation){
+ $('#calendar_import_form').css('display', 'none');
+ $('#calendar_import_process').css('display', 'block');
+ $('#calendar_import_newcalendar').attr('readonly', 'readonly');
+ $('#calendar_import_calendar').attr('disabled', 'disabled');
+ Calendar_Import.Core.send();
+ window.setTimeout('Calendar_Import.Dialog.update()', 250);
}
- $('#newcalendar').attr('readonly', 'readonly');
- $('#calendar').attr('disabled', 'disabled');
- var progressfile = $('#progressfile').val();
- $.post(OC.filePath('calendar', 'ajax/import', 'import.php'), {method: String (method), calname: String (calname), path: String (path), file: String (filename), id: String (calid)}, function(data){
+ },
+ send: function(){
+ $.post(OC.filePath('calendar', 'ajax/import', 'import.php'),
+ {progresskey: Calendar_Import.Store.progresskey, method: String (Calendar_Import.Store.method), calname: String (Calendar_Import.Store.calname), path: String (Calendar_Import.Store.path), file: String (Calendar_Import.Store.file), id: String (Calendar_Import.Store.id), calcolor: String (Calendar_Import.Store.calcolor)}, function(data){
if(data.status == 'success'){
- $('#progressbar').progressbar('option', 'value', 100);
- $('#import_done').css('display', 'block');
+ $('#calendar_import_progressbar').progressbar('option', 'value', 100);
+ Calendar_Import.Store.percentage = 100;
+ $('#calendar_import_done').css('display', 'block');
+ $('#calendar_import_status').html(data.message);
+ }else{
+ $('#calendar_import_progressbar').progressbar('option', 'value', 100);
+ $('#calendar_import_progressbar > div').css('background-color', '#FF2626');
+ $('#calendar_import_status').html(data.message);
}
});
- $('#form_container').css('display', 'none');
- $('#progressbar_container').css('display', 'block');
- window.setTimeout('Calendar_Import.getimportstatus(\'' + progressfile + '\')', 500);
- });
- $('#calendar').change(function(){
- if($('#calendar option:selected').val() == 'newcal'){
- $('#newcalform').slideDown('slow');
+ },
+ prepare: function(){
+ Calendar_Import.Store.id = $('#calendar_import_calendar option:selected').val();
+ if($('#calendar_import_calendar option:selected').val() == 'newcal'){
+ Calendar_Import.Store.method = 'new';
+ Calendar_Import.Store.calname = $.trim($('#calendar_import_newcalendar').val());
+ if(Calendar_Import.Store.calname == ''){
+ Calendar_Import.Dialog.warning('#calendar_import_newcalendar');
+ return false;
+ }
+ Calendar_Import.Store.calcolor = $.trim($('#calendar_import_newcalendar_color').val());
+ if(Calendar_Import.Store.calcolor == ''){
+ Calendar_Import.Store.calcolor = $('.calendar-colorpicker-color:first').attr('rel');
+ }
}else{
- $('#newcalform').slideUp('slow');
+ Calendar_Import.Store.method = 'old';
}
- });
+ return true;
+ }
},
- getimportstatus: function(progressfile){
- $.get(OC.filePath('calendar', 'import_tmp', progressfile), function(percent){
- $('#progressbar').progressbar('option', 'value', parseInt(percent));
- if(percent < 100){
- window.setTimeout('Calendar_Import.getimportstatus(\'' + progressfile + '\')', 500);
- }else{
- $('#import_done').css('display', 'block');
- }
- });
+ reset: function(){
+ Calendar_Import.Store.file = '';
+ Calendar_Import.Store.path = '';
+ Calendar_Import.Store.id = 0;
+ Calendar_Import.Store.method = '';
+ Calendar_Import.Store.calname = '';
+ Calendar_Import.Store.progresskey = '';
+ Calendar_Import.Store.percentage = 0;
}
}
$(document).ready(function(){
if(typeof FileActions !== 'undefined'){
- FileActions.register('text/calendar','importcal', '', Calendar_Import.importdialog);
- FileActions.setDefault('text/calendar','importcal');
+ FileActions.register('text/calendar','importCalendar', FileActions.PERMISSION_READ, '', Calendar_Import.Dialog.open);
+ FileActions.setDefault('text/calendar','importCalendar');
};
});
diff --git a/apps/calendar/js/settings.js b/apps/calendar/js/settings.js
index c768a47a797..20753a7b8fe 100644
--- a/apps/calendar/js/settings.js
+++ b/apps/calendar/js/settings.js
@@ -1,11 +1,7 @@
$(document).ready(function(){
$('#timezone').change( function(){
- OC.msg.startSaving('#calendar .msg')
- // Serialize the data
var post = $( '#timezone' ).serialize();
- $.post( OC.filePath('calendar', 'ajax/settings', 'settimezone.php'), post, function(data){
- //OC.msg.finishedSaving('#calendar .msg', data);
- });
+ $.post( OC.filePath('calendar', 'ajax/settings', 'settimezone.php'), post, function(data){return;});
return false;
});
$('#timezone').chosen();
@@ -34,6 +30,7 @@ $(document).ready(function(){
$.getJSON(OC.filePath('calendar', 'ajax/settings', 'timeformat.php'), function(jsondata, status) {
$('#' + jsondata.timeformat).attr('selected',true);
$('#timeformat').chosen();
+ $('#timeformat_chzn').css('width', '100px');
});
$.getJSON(OC.filePath('calendar', 'ajax/settings', 'gettimezonedetection.php'), function(jsondata, status){
if(jsondata.detection == 'true'){
@@ -43,5 +40,27 @@ $(document).ready(function(){
$.getJSON(OC.filePath('calendar', 'ajax/settings', 'getfirstday.php'), function(jsondata, status) {
$('#' + jsondata.firstday).attr('selected',true);
$('#firstday').chosen();
+ $('#firstday_chzn').css('width', '100px');
+ });
+ $('#cleancalendarcache').click(function(){
+ $.getJSON(OC.filePath('calendar', 'ajax/cache', 'rescan.php'), function(){
+ calendarcachecheck();
+ });
});
+ calendarcachecheck();
+
});
+function calendarcachecheck(){
+ $.getJSON(OC.filePath('calendar', 'ajax/cache', 'status.php'), function(jsondata, status) {
+ $('#cleancalendarcache').attr('title', jsondata.l10n.text);
+ if(jsondata.status == 'success'){
+ $('#cleancalendarcache').css('background', '#F8F8F8');
+ $('#cleancalendarcache').css('color', '#333');
+ $('#cleancalendarcache').css('text-shadow', '#fff 0 1px 0');
+ }else{
+ $('#cleancalendarcache').css('background', '#DC143C');
+ $('#cleancalendarcache').css('color', '#FFFFFF');
+ $('#cleancalendarcache').css('text-shadow', '0px 0px 0px #fff, 0px 0px #fff');
+ }
+ });
+} \ No newline at end of file
diff --git a/apps/calendar/l10n/ar.php b/apps/calendar/l10n/ar.php
index 679f1102853..1ca5e0ead5d 100644
--- a/apps/calendar/l10n/ar.php
+++ b/apps/calendar/l10n/ar.php
@@ -1,9 +1,19 @@
<?php $TRANSLATIONS = array(
+"Not all calendars are completely cached" => "ليس جميع الجداول الزمنيه محÙوضه مؤقة",
+"Everything seems to be completely cached" => "كل شيء محÙوض مؤقة",
+"No calendars found." => "لم يتم العثور على جدول الزمني",
+"No events found." => "لم يتم العثور على احداث",
"Wrong calendar" => "جدول زمني خاطئ",
"New Timezone:" => "التوقيت الجديد",
"Timezone changed" => "تم تغيير المنطقة الزمنية",
"Invalid request" => "طلب غير Ù…Ùهوم",
"Calendar" => "الجدول الزمني",
+"ddd" => "ddd",
+"ddd M/d" => "ddd M/d",
+"dddd M/d" => "ddd M/d",
+"MMMM yyyy" => "ddd M/d",
+"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy",
"Birthday" => "عيد ميلاد",
"Business" => "عمل",
"Call" => "إتصال",
@@ -19,6 +29,9 @@
"Projects" => "مشاريع",
"Questions" => "اسئلة",
"Work" => "العمل",
+"by" => "من قبل",
+"unnamed" => "غير مسمى",
+"New Calendar" => "جدول زمني جديد",
"Does not repeat" => "لا يعاد",
"Daily" => "يومي",
"Weekly" => "أسبوعي",
@@ -63,8 +76,19 @@
"by day and month" => "حسب اليوم و الشهر",
"Date" => "تاريخ",
"Cal." => "تقويم",
+"Sun." => "أحد",
+"Mon." => "أثن.",
+"Tue." => "ثلا.",
+"Wed." => "أرب.",
+"Thu." => "خمي.",
+"Fri." => "جمع.",
+"Sat." => "سبت",
+"Jan." => "Ùƒ2",
+"Feb." => "شبا.",
+"Mar." => "آذا.",
+"Apr." => "نيس.",
+"May." => "أيا.",
"All day" => "كل النهار",
-"New Calendar" => "جدول زمني جديد",
"Missing fields" => "خانات خالية من المعلومات",
"Title" => "عنوان",
"From Date" => "من تاريخ",
@@ -77,13 +101,15 @@
"Month" => "شهر",
"List" => "قائمة",
"Today" => "اليوم",
-"Calendars" => "الجداول الزمنية",
-"There was a fail, while parsing the file." => "لم يتم قراءة المل٠بنجاح.",
-"Choose active calendars" => "إختر الجدول الزمني الرئيسي",
+"Your calendars" => "جداولك الزمنيه",
"CalDav Link" => "وصلة CalDav",
+"Shared calendars" => "جداول زمنيه مشتركه",
+"No shared calendars" => "لا يوجد جداول زمنيه مشتركه",
+"Share Calendar" => "شارك الجدول الزمني",
"Download" => "تحميل",
"Edit" => "تعديل",
"Delete" => "حذÙ",
+"shared with you by" => "مشاركه من قبل",
"New calendar" => "جدول زمني جديد",
"Edit calendar" => "عادل الجدول الزمني",
"Displayname" => "الاسم المرئي",
@@ -94,8 +120,15 @@
"Cancel" => "إلغاء",
"Edit an event" => "عادل حدث",
"Export" => "تصدير المعلومات",
+"Eventinfo" => "تÙاصيل الحدث",
+"Repeating" => "يعاد",
+"Alarm" => "تنبيه",
+"Attendees" => "الحضور",
+"Share" => "شارك",
"Title of the Event" => "عنوان الحدث",
"Category" => "Ùئة",
+"Separate categories with commas" => "اÙصل الÙئات بالÙواصل",
+"Edit categories" => "عدل الÙئات",
"All Day Event" => "حدث ÙÙŠ يوم كامل",
"From" => "من",
"To" => "إلى",
@@ -116,20 +149,23 @@
"Interval" => "المده الÙاصله",
"End" => "نهايه",
"occurrences" => "الاحداث",
-"Import a calendar file" => "أدخل مل٠التقويم",
-"Please choose the calendar" => "الرجاء إختر الجدول الزمني",
"create a new calendar" => "انشاء جدول زمني جديد",
+"Import a calendar file" => "أدخل مل٠التقويم",
"Name of new calendar" => "أسم الجدول الزمني الجديد",
"Import" => "إدخال",
-"Importing calendar" => "يتم ادخال الجدول الزمني",
-"Calendar imported successfully" => "تم ادخال الجدول الزمني بنجاح",
"Close Dialog" => "أغلق الحوار",
"Create a new event" => "إضاÙØ© حدث جديد",
-"Select category" => "اختر الÙئة",
+"View an event" => "شاهد الحدث",
+"No categories selected" => "لم يتم اختيار الÙئات",
+"of" => "من",
+"at" => "ÙÙŠ",
"Timezone" => "المنطقة الزمنية",
-"Check always for changes of the timezone" => "راقب دائما تغير التقويم الزمني",
-"Timeformat" => "شكل الوقت",
"24h" => "24 ساعة",
"12h" => "12 ساعة",
-"Calendar CalDAV syncing address:" => "عنوان لتحديث ال CalDAV الجدول الزمني"
+"Users" => "المستخدمين",
+"select users" => "اختر المستخدمين",
+"Editable" => "يمكن تعديله",
+"Groups" => "مجموعات",
+"select groups" => "اختر المجموعات",
+"make public" => "حدث عام"
);
diff --git a/apps/calendar/l10n/bg_BG.php b/apps/calendar/l10n/bg_BG.php
index e4f73d24a9a..fc353ebef95 100644
--- a/apps/calendar/l10n/bg_BG.php
+++ b/apps/calendar/l10n/bg_BG.php
@@ -1,7 +1,23 @@
<?php $TRANSLATIONS = array(
+"No calendars found." => "Ðе Ñа открити календари.",
+"No events found." => "Ðе Ñа открити ÑъбитиÑ.",
+"Import failed" => "Грешка при внаÑÑне",
+"New Timezone:" => "Ðов чаÑови поÑÑ:",
"Timezone changed" => "ЧаÑовата зона е Ñменена",
"Invalid request" => "Ðевалидна заÑвка",
"Calendar" => "Календар",
+"Birthday" => "Роджен ден",
+"Clients" => "Клиенти",
+"Holidays" => "Празници",
+"Ideas" => "Идеи",
+"Journey" => "Пътуване",
+"Meeting" => "Среща",
+"Other" => "Друго",
+"Personal" => "Лично",
+"Projects" => "Проекти",
+"Questions" => "ВъпроÑи",
+"Work" => "Работа",
+"New Calendar" => "Ðов календар",
"Does not repeat" => "Ðе Ñе повтарÑ",
"Daily" => "Дневно",
"Weekly" => "Седмично",
@@ -9,32 +25,60 @@
"Bi-Weekly" => "ДвуÑедмично",
"Monthly" => "МеÑечно",
"Yearly" => "Годишно",
+"never" => "никога",
+"Monday" => "Понеделник",
+"Tuesday" => "Вторник",
+"Wednesday" => "СрÑда",
+"Thursday" => "Четвъртък",
+"Friday" => "Петък",
+"Saturday" => "Събота",
+"Sunday" => "ÐеделÑ",
"All day" => "Ð’Ñички дни",
+"Missing fields" => "ЛипÑват полета",
"Title" => "Заглавие",
"Week" => "Седмица",
"Month" => "МеÑец",
+"List" => "СпиÑък",
"Today" => "ДнеÑ",
-"Calendars" => "Календари",
-"There was a fail, while parsing the file." => "Възникна проблем Ñ Ñ€Ð°Ð·Ð»Ð¸Ñтването на файла.",
-"Choose active calendars" => "Изберете активен календар",
+"Your calendars" => "Вашите календари",
+"Shared calendars" => "Споделени календари",
+"No shared calendars" => "ÐÑма Ñподелени календари",
+"Share Calendar" => "СподелÑне на календар",
"Download" => "ИзтеглÑне",
"Edit" => "ПромÑна",
+"Delete" => "Изтриване",
+"New calendar" => "Ðов календар",
"Edit calendar" => "Промени календар",
"Displayname" => "Екранно име",
"Active" => "Ðктивен",
"Calendar color" => "ЦвÑÑ‚ на календара",
+"Save" => "ЗапиÑ",
"Submit" => "Продължи",
+"Cancel" => "Отказ",
"Edit an event" => "ПромÑна на Ñъбитие",
+"Export" => "ИзнаÑÑне",
+"Share" => "СподелÑне",
"Title of the Event" => "Ðаименование",
"Category" => "КатегориÑ",
+"Separate categories with commas" => "Отделете категориите ÑÑŠÑ Ð·Ð°Ð¿ÐµÑ‚Ð°Ð¸",
+"Edit categories" => "Редактиране на категориите",
"All Day Event" => "Целодневно Ñъбитие",
"From" => "От",
"To" => "До",
+"Advanced options" => "Разширени наÑтройки",
"Location" => "ЛокациÑ",
"Location of the Event" => "ЛокациÑ",
"Description" => "ОпиÑание",
"Description of the Event" => "ОпиÑание",
"Repeat" => "Повтори",
+"create a new calendar" => "Ñъздаване на нов календар",
+"Please choose a calendar" => "Изберете календар",
+"Name of new calendar" => "Име на Ð½Ð¾Ð²Ð¸Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€",
+"Import" => "ВнаÑÑне",
+"Close Dialog" => "ЗатварÑне на прозореца",
"Create a new event" => "Ðово Ñъбитие",
-"Timezone" => "ЧаÑова зона"
+"View an event" => "Преглед на Ñъбитие",
+"No categories selected" => "ÐÑма избрани категории",
+"Timezone" => "ЧаÑова зона",
+"Groups" => "Групи"
);
diff --git a/apps/calendar/l10n/ca.php b/apps/calendar/l10n/ca.php
index afb1c799d93..9e267604e62 100644
--- a/apps/calendar/l10n/ca.php
+++ b/apps/calendar/l10n/ca.php
@@ -1,12 +1,23 @@
<?php $TRANSLATIONS = array(
+"Not all calendars are completely cached" => "No tots els calendaris estan en memòria",
+"Everything seems to be completely cached" => "Sembla que tot està en memòria",
"No calendars found." => "No s'han trobat calendaris.",
"No events found." => "No s'han trobat events.",
"Wrong calendar" => "Calendari erroni",
+"The file contained either no events or all events are already saved in your calendar." => "El fitxer no contenia esdeveniments o aquests ja estaven desats en el vostre caledari",
+"events has been saved in the new calendar" => "els esdeveniments s'han desat en el calendari nou",
+"Import failed" => "Ha fallat la importació",
+"events has been saved in your calendar" => "els esdveniments s'han desat en el calendari",
"New Timezone:" => "Nova zona horària:",
"Timezone changed" => "La zona horària ha canviat",
"Invalid request" => "Sol.licitud no vàlida",
"Calendar" => "Calendari",
-"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"ddd" => "ddd",
+"ddd M/d" => "ddd d/M",
+"dddd M/d" => "dddd d/M",
+"MMMM yyyy" => "MMMM yyyy",
+"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "d [MMM ][yyyy ]{'&#8212;' d MMM yyyy}",
+"dddd, MMM d, yyyy" => "dddd, d MMM, yyyy",
"Birthday" => "Aniversari",
"Business" => "Feina",
"Call" => "Trucada",
@@ -22,7 +33,9 @@
"Projects" => "Projectes",
"Questions" => "Preguntes",
"Work" => "Feina",
+"by" => "per",
"unnamed" => "sense nom",
+"New Calendar" => "Calendari nou",
"Does not repeat" => "No es repeteix",
"Daily" => "Diari",
"Weekly" => "Mensual",
@@ -67,8 +80,26 @@
"by day and month" => "per dia del mes",
"Date" => "Data",
"Cal." => "Cal.",
+"Sun." => "Dg.",
+"Mon." => "Dl.",
+"Tue." => "Dm.",
+"Wed." => "Dc.",
+"Thu." => "Dj.",
+"Fri." => "Dv.",
+"Sat." => "Ds.",
+"Jan." => "Gen.",
+"Feb." => "Febr.",
+"Mar." => "Març",
+"Apr." => "Abr.",
+"May." => "Maig",
+"Jun." => "Juny",
+"Jul." => "Jul.",
+"Aug." => "Ag.",
+"Sep." => "Set.",
+"Oct." => "Oct.",
+"Nov." => "Nov.",
+"Dec." => "Des.",
"All day" => "Tot el dia",
-"New Calendar" => "Calendari nou",
"Missing fields" => "Els camps que falten",
"Title" => "Títol",
"From Date" => "Des de la data",
@@ -81,9 +112,7 @@
"Month" => "Mes",
"List" => "Llista",
"Today" => "Avui",
-"Calendars" => "Calendaris",
-"There was a fail, while parsing the file." => "S'ha produït un error en analitzar el fitxer.",
-"Choose active calendars" => "Seleccioneu calendaris actius",
+"Settings" => "Configuració",
"Your calendars" => "Els vostres calendaris",
"CalDav Link" => "Enllaç CalDav",
"Shared calendars" => "Calendaris compartits",
@@ -132,27 +161,34 @@
"Interval" => "Interval",
"End" => "Final",
"occurrences" => "aparicions",
-"Import a calendar file" => "Importa un fitxer de calendari",
-"Please choose the calendar" => "Escolliu el calendari",
"create a new calendar" => "crea un nou calendari",
+"Import a calendar file" => "Importa un fitxer de calendari",
+"Please choose a calendar" => "Escolliu un calendari",
"Name of new calendar" => "Nom del nou calendari",
+"Take an available name!" => "Escolliu un nom disponible!",
+"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Ja hi ha un calendari amb aquest nom. Si continueu, els calendaris es combinaran.",
"Import" => "Importa",
-"Importing calendar" => "S'està important el calendari",
-"Calendar imported successfully" => "El calendari s'ha importat amb èxit",
"Close Dialog" => "Tanca el diàleg",
"Create a new event" => "Crea un nou esdeveniment",
"View an event" => "Mostra un event",
"No categories selected" => "No hi ha categories seleccionades",
-"Select category" => "Seleccioneu categoria",
"of" => "de",
"at" => "a",
+"General" => "General",
"Timezone" => "Zona horària",
-"Check always for changes of the timezone" => "Comprova sempre en els canvis de zona horària",
-"Timeformat" => "Format de temps",
+"Update timezone automatically" => "Actualitza la zona horària automàticament",
+"Time format" => "Format horari",
"24h" => "24h",
"12h" => "12h",
-"First day of the week" => "Primer dia de la setmana",
-"Calendar CalDAV syncing address:" => "Adreça de sincronització del calendari CalDAV:",
+"Start week on" => "Comença la setmana en ",
+"Cache" => "Memòria de cau",
+"Clear cache for repeating events" => "Neteja la memòria de cau pels esdeveniments amb repetició",
+"URLs" => "URLs",
+"Calendar CalDAV syncing addresses" => "Adreça de sincronització del calendari CalDAV",
+"more info" => "més informació",
+"Primary address (Kontact et al)" => "Adreça primària (Kontact et al)",
+"iOS/OS X" => "IOS/OS X",
+"Read only iCalendar link(s)" => "Enllaç(os) iCalendar només de lectura",
"Users" => "Usuaris",
"select users" => "seleccioneu usuaris",
"Editable" => "Editable",
diff --git a/apps/calendar/l10n/cs_CZ.php b/apps/calendar/l10n/cs_CZ.php
index 05d286d82c1..ab76cc49d1e 100644
--- a/apps/calendar/l10n/cs_CZ.php
+++ b/apps/calendar/l10n/cs_CZ.php
@@ -1,12 +1,23 @@
<?php $TRANSLATIONS = array(
+"Not all calendars are completely cached" => "V paměti nejsou uloženy kompletně všechny kalendáře",
+"Everything seems to be completely cached" => "Zdá se, že vše je kompletně uloženo v paměti",
"No calendars found." => "Žádné kalendáře nenalezeny.",
"No events found." => "Žádné události nenalezeny.",
"Wrong calendar" => "Nesprávný kalendář",
+"The file contained either no events or all events are already saved in your calendar." => "Soubor, obsahující všechny záznamy nebo je prázdný, je již uložen ve Vašem kalendáři.",
+"events has been saved in the new calendar" => "Záznam byl uložen v novém kalendáři",
+"Import failed" => "Import selhal",
+"events has been saved in your calendar" => "záznamů bylo uloženo ve Vašem kalendáři",
"New Timezone:" => "Nová Äasová zóna:",
"Timezone changed" => "Časová zóna byla změněna",
"Invalid request" => "Chybný požadavek",
"Calendar" => "Kalendář",
+"ddd" => "ddd",
+"ddd M/d" => "ddd M/d",
+"dddd M/d" => "dddd M/d",
+"MMMM yyyy" => "MMMM rrrr",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "d. MMM[ yyyy]{ '&#8212;' d.[ MMM] yyyy}",
+"dddd, MMM d, yyyy" => "dddd, MMM d, rrrr",
"Birthday" => "Narozeniny",
"Business" => "Obchodní",
"Call" => "Hovor",
@@ -22,7 +33,9 @@
"Projects" => "Projekty",
"Questions" => "Dotazy",
"Work" => "Pracovní",
+"by" => "od",
"unnamed" => "nepojmenováno",
+"New Calendar" => "Nový kalendář",
"Does not repeat" => "Neopakuje se",
"Daily" => "DennÄ›",
"Weekly" => "Týdně",
@@ -67,8 +80,26 @@
"by day and month" => "podle dne a měsíce",
"Date" => "Datum",
"Cal." => "Kal.",
+"Sun." => "Ne",
+"Mon." => "Po",
+"Tue." => "Út",
+"Wed." => "St",
+"Thu." => "ÄŒt",
+"Fri." => "Pá",
+"Sat." => "So",
+"Jan." => "Ne",
+"Feb." => "únor",
+"Mar." => "březen",
+"Apr." => "duben",
+"May." => "květen",
+"Jun." => "Äerven",
+"Jul." => "Äervenec",
+"Aug." => "srpen",
+"Sep." => "září",
+"Oct." => "říjen",
+"Nov." => "listopad",
+"Dec." => "prosinec",
"All day" => "Celý den",
-"New Calendar" => "Nový kalendář",
"Missing fields" => "Chybějící pole",
"Title" => "Název",
"From Date" => "Od data",
@@ -81,9 +112,7 @@
"Month" => "měsíc",
"List" => "Seznam",
"Today" => "dnes",
-"Calendars" => "Kalendáře",
-"There was a fail, while parsing the file." => "Chyba při převodu souboru",
-"Choose active calendars" => "Vybrat aktivní kalendář",
+"Settings" => "Nastavení",
"Your calendars" => "Vaše kalendáře",
"CalDav Link" => "CalDav odkaz",
"Shared calendars" => "Sdílené kalendáře",
@@ -132,27 +161,34 @@
"Interval" => "Interval",
"End" => "Konec",
"occurrences" => "výskyty",
-"Import a calendar file" => "Importovat soubor kalendáře",
-"Please choose the calendar" => "Zvolte prosím kalendář",
"create a new calendar" => "vytvořit nový kalendář",
+"Import a calendar file" => "Importovat soubor kalendáře",
+"Please choose a calendar" => "Vyberte prosím kalendář",
"Name of new calendar" => "Název nového kalendáře",
+"Take an available name!" => "Použijte volné jméno!",
+"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Kalendář s trímto názvem již existuje. Pokud název použijete, stejnojmenné kalendáře budou slouÄeny.",
"Import" => "Import",
-"Importing calendar" => "Kalendář se importuje",
-"Calendar imported successfully" => "Kalendář byl úspěšně importován",
"Close Dialog" => "Zavřít dialog",
"Create a new event" => "Vytvořit novou událost",
"View an event" => "Zobrazit událost",
"No categories selected" => "Žádné kategorie nevybrány",
-"Select category" => "Vyberte kategorii",
"of" => "z",
"at" => "v",
+"General" => "Hlavní",
"Timezone" => "Časové pásmo",
-"Check always for changes of the timezone" => "Vždy kontrolavat, zda nedoÅ¡lo ke zmÄ›nÄ› Äasového pásma",
-"Timeformat" => "Formát Äasu",
+"Update timezone automatically" => "Obnovit auronaricky Äasovou zónu.",
+"Time format" => "Formát Äasu",
"24h" => "24h",
"12h" => "12h",
-"First day of the week" => "Týden zaÄína v",
-"Calendar CalDAV syncing address:" => "Adresa pro synchronizaci kalendáře pomocí CalDAV:",
+"Start week on" => "Týden zaÄína v",
+"Cache" => "Paměť",
+"Clear cache for repeating events" => "Vymazat paměť pro opakuijísí se záznamy",
+"URLs" => "URLs",
+"Calendar CalDAV syncing addresses" => "Kalendář CalDAV synchronizuje adresy",
+"more info" => "podrobnosti",
+"Primary address (Kontact et al)" => "Primární adresa (veřejná)",
+"iOS/OS X" => "iOS/OS X",
+"Read only iCalendar link(s)" => "Odkaz(y) kalendáře pouze pro Ätení",
"Users" => "Uživatelé",
"select users" => "vybrat uživatele",
"Editable" => "Upravovatelné",
diff --git a/apps/calendar/l10n/da.php b/apps/calendar/l10n/da.php
index 36551a2a93a..a193d5e1568 100644
--- a/apps/calendar/l10n/da.php
+++ b/apps/calendar/l10n/da.php
@@ -1,12 +1,22 @@
<?php $TRANSLATIONS = array(
+"Not all calendars are completely cached" => "Ikke alle kalendere er fuldstændig cached",
"No calendars found." => "Der blev ikke fundet nogen kalendere.",
"No events found." => "Der blev ikke fundet nogen begivenheder.",
"Wrong calendar" => "Forkert kalender",
+"The file contained either no events or all events are already saved in your calendar." => "Filen indeholdt enten ingen begivenheder eller alle begivenheder er allerede gemt i din kalender.",
+"events has been saved in the new calendar" => "begivenheder er gemt i den nye kalender",
+"Import failed" => "import mislykkedes",
+"events has been saved in your calendar" => "begivenheder er gemt i din kalender",
"New Timezone:" => "Ny tidszone:",
"Timezone changed" => "Tidszone ændret",
"Invalid request" => "Ugyldig forespørgsel",
"Calendar" => "Kalender",
+"ddd" => "ddd",
+"ddd M/d" => "ddd M/d",
+"dddd M/d" => "dddd M/d",
+"MMMM yyyy" => "MMMM åååå",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ åååå]{ '&#8212;'[ MMM] d åååå}",
+"dddd, MMM d, yyyy" => "dddd, MMM d, åååå",
"Birthday" => "Fødselsdag",
"Business" => "Forretning",
"Call" => "Ring",
@@ -22,7 +32,9 @@
"Projects" => "Projekter",
"Questions" => "Spørgsmål",
"Work" => "Arbejde",
+"by" => "af",
"unnamed" => "unavngivet",
+"New Calendar" => "Ny Kalender",
"Does not repeat" => "Gentages ikke",
"Daily" => "Daglig",
"Weekly" => "Ugentlig",
@@ -67,8 +79,26 @@
"by day and month" => "efter dag og måned",
"Date" => "Dato",
"Cal." => "Kal.",
+"Sun." => "Søn.",
+"Mon." => "Man.",
+"Tue." => "Tir.",
+"Wed." => "Ons.",
+"Thu." => "Tor.",
+"Fri." => "Fre.",
+"Sat." => "Lør.",
+"Jan." => "Jan.",
+"Feb." => "Feb.",
+"Mar." => "Mar.",
+"Apr." => "Apr.",
+"May." => "Maj",
+"Jun." => "Jun.",
+"Jul." => "Jul.",
+"Aug." => "Aug.",
+"Sep." => "Sep.",
+"Oct." => "Okt.",
+"Nov." => "Nov.",
+"Dec." => "Dec.",
"All day" => "Hele dagen",
-"New Calendar" => "Ny Kalender",
"Missing fields" => "Manglende felter",
"Title" => "Titel",
"From Date" => "Fra dato",
@@ -81,9 +111,7 @@
"Month" => "MÃ¥ned",
"List" => "Liste",
"Today" => "I dag",
-"Calendars" => "Kalendere",
-"There was a fail, while parsing the file." => "Der opstod en fejl under gennemlæsning af filen.",
-"Choose active calendars" => "Vælg aktive kalendere",
+"Settings" => "Indstillinger",
"Your calendars" => "Dine kalendere",
"CalDav Link" => "CalDav-link",
"Shared calendars" => "Delte kalendere",
@@ -132,10 +160,11 @@
"Interval" => "Interval",
"End" => "Afslutning",
"occurrences" => "forekomster",
-"Import a calendar file" => "Importer en kalenderfil",
-"Please choose the calendar" => "Vælg venligst kalender",
"create a new calendar" => "opret en ny kalender",
+"Import a calendar file" => "Importer en kalenderfil",
+"Please choose a calendar" => "Vælg en kalender",
"Name of new calendar" => "Navn på ny kalender",
+"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "En kalender med dette navn findes allerede. Hvis du fortsætter alligevel, vil disse kalendere blive sammenlagt.",
"Import" => "Importer",
"Importing calendar" => "Importerer kalender",
"Calendar imported successfully" => "Kalender importeret korrekt",
@@ -143,16 +172,15 @@
"Create a new event" => "Opret en ny begivenhed",
"View an event" => "Vis en begivenhed",
"No categories selected" => "Ingen categorier valgt",
-"Select category" => "Vælg kategori",
"of" => "fra",
"at" => "kl.",
+"General" => "Generel",
"Timezone" => "Tidszone",
-"Check always for changes of the timezone" => "Check altid efter ændringer i tidszone",
-"Timeformat" => "Tidsformat",
+"Update timezone automatically" => "Opdater tidszone automatisk",
"24h" => "24T",
"12h" => "12T",
-"First day of the week" => "Ugens første dag",
-"Calendar CalDAV syncing address:" => "Synkroniseringsadresse til CalDAV:",
+"more info" => "flere oplysninger",
+"iOS/OS X" => "iOS/OS X",
"Users" => "Brugere",
"select users" => "Vælg brugere",
"Editable" => "Redigerbar",
diff --git a/apps/calendar/l10n/de.php b/apps/calendar/l10n/de.php
index f12a18baad0..d91753ff74a 100644
--- a/apps/calendar/l10n/de.php
+++ b/apps/calendar/l10n/de.php
@@ -1,12 +1,23 @@
<?php $TRANSLATIONS = array(
-"No calendars found." => "Keine Kalender gefunden",
-"No events found." => "Keine Termine gefunden",
+"Not all calendars are completely cached" => "Noch sind nicht alle Kalender zwischengespeichert.",
+"Everything seems to be completely cached" => "Es sieht so aus, als wäre alles vollständig zwischengespeichert.",
+"No calendars found." => "Keine Kalender gefunden.",
+"No events found." => "Keine Termine gefunden.",
"Wrong calendar" => "Falscher Kalender",
+"The file contained either no events or all events are already saved in your calendar." => "Entweder enthielt die Datei keine Termine oder alle Termine waren bereits im Kalender gespeichert.",
+"events has been saved in the new calendar" => "Der Termin wurde im neuen Kalender gespeichert.",
+"Import failed" => "Import fehlgeschlagen",
+"events has been saved in your calendar" => "Der Termin wurde im Kalender gespeichert.",
"New Timezone:" => "Neue Zeitzone:",
"Timezone changed" => "Zeitzone geändert",
"Invalid request" => "Fehlerhafte Anfrage",
"Calendar" => "Kalender",
-"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "ddd d MMMM[ yyyy]{ -[ddd d] MMMM yyyy}",
+"ddd" => "ddd",
+"ddd M/d" => "ddd d.M",
+"dddd M/d" => "dddd d.M",
+"MMMM yyyy" => "MMMM yyyy",
+"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"dddd, MMM d, yyyy" => "dddd, d. MMM yyyy",
"Birthday" => "Geburtstag",
"Business" => "Geschäftlich",
"Call" => "Anruf",
@@ -22,7 +33,9 @@
"Projects" => "Projekte",
"Questions" => "Fragen",
"Work" => "Arbeit",
+"by" => "von",
"unnamed" => "unbenannt",
+"New Calendar" => "Neuer Kalender",
"Does not repeat" => "einmalig",
"Daily" => "täglich",
"Weekly" => "wöchentlich",
@@ -67,8 +80,26 @@
"by day and month" => "nach Tag und Monat",
"Date" => "Datum",
"Cal." => "Kal.",
+"Sun." => "So",
+"Mon." => "Mo",
+"Tue." => "Di",
+"Wed." => "Mi",
+"Thu." => "Do",
+"Fri." => "Fr",
+"Sat." => "Sa",
+"Jan." => "Jan.",
+"Feb." => "Feb.",
+"Mar." => "Mär.",
+"Apr." => "Apr.",
+"May." => "Mai",
+"Jun." => "Jun.",
+"Jul." => "Jul.",
+"Aug." => "Aug.",
+"Sep." => "Sep.",
+"Oct." => "Okt.",
+"Nov." => "Nov.",
+"Dec." => "Dez.",
"All day" => "Ganztags",
-"New Calendar" => "Neuer Kalender",
"Missing fields" => "fehlende Felder",
"Title" => "Titel",
"From Date" => "Startdatum",
@@ -81,12 +112,10 @@
"Month" => "Monat",
"List" => "Liste",
"Today" => "Heute",
-"Calendars" => "Kalender",
-"There was a fail, while parsing the file." => "Fehler beim Einlesen der Datei.",
-"Choose active calendars" => "Aktive Kalender wählen",
+"Settings" => "Einstellungen",
"Your calendars" => "Deine Kalender",
"CalDav Link" => "CalDAV-Link",
-"Shared calendars" => "geteilte Kalender",
+"Shared calendars" => "Geteilte Kalender",
"No shared calendars" => "Keine geteilten Kalender",
"Share Calendar" => "Kalender teilen",
"Download" => "Herunterladen",
@@ -132,10 +161,12 @@
"Interval" => "Intervall",
"End" => "Ende",
"occurrences" => "Termine",
-"Import a calendar file" => "Kalenderdatei Importieren",
-"Please choose the calendar" => "Bitte wählen Sie den Kalender.",
"create a new calendar" => "Neuen Kalender anlegen",
+"Import a calendar file" => "Kalenderdatei importieren",
+"Please choose a calendar" => "Wählen Sie bitte einen Kalender.",
"Name of new calendar" => "Kalendername",
+"Take an available name!" => "Wählen Sie einen verfügbaren Namen.",
+"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Ein Kalender mit diesem Namen existiert bereits. Sollten Sie fortfahren, werden die beiden Kalender zusammengeführt.",
"Import" => "Importieren",
"Importing calendar" => "Kalender wird importiert.",
"Calendar imported successfully" => "Kalender erfolgreich importiert",
@@ -146,15 +177,23 @@
"Select category" => "Kategorie auswählen",
"of" => "von",
"at" => "um",
+"General" => "Allgemein",
"Timezone" => "Zeitzone",
-"Check always for changes of the timezone" => "immer die Zeitzone überprüfen",
-"Timeformat" => "Zeitformat",
-"24h" => "24h",
-"12h" => "12h",
-"First day of the week" => "erster Wochentag",
-"Calendar CalDAV syncing address:" => "Kalender CalDAV Synchronisationsadresse:",
-"Users" => "Nutzer",
-"select users" => "Nutzer auswählen",
+"Update timezone automatically" => "Zeitzone automatisch aktualisieren",
+"Time format" => "Zeitformat",
+"24h" => "24 Stunden",
+"12h" => "12 Stunden",
+"Start week on" => "Erster Wochentag",
+"Cache" => "Zwischenspeicher",
+"Clear cache for repeating events" => "Lösche den Zwischenspeicher für wiederholende Veranstaltungen",
+"URLs" => "URLs",
+"Calendar CalDAV syncing addresses" => "CalDAV-Kalender gleicht Adressen ab",
+"more info" => "weitere Informationen",
+"Primary address (Kontact et al)" => "Primäre Adresse (Kontakt u.a.)",
+"iOS/OS X" => "iOS/OS X",
+"Read only iCalendar link(s)" => "Nur lesende(r) iCalender-Link(s)",
+"Users" => "Benutzer",
+"select users" => "Benutzer auswählen",
"Editable" => "editierbar",
"Groups" => "Gruppen",
"select groups" => "Gruppen auswählen",
diff --git a/apps/calendar/l10n/el.php b/apps/calendar/l10n/el.php
index 0b289fbcf68..ad07d7b5855 100644
--- a/apps/calendar/l10n/el.php
+++ b/apps/calendar/l10n/el.php
@@ -1,17 +1,28 @@
<?php $TRANSLATIONS = array(
+"Not all calendars are completely cached" => "Δεν έχει δημιουÏγηθεί λανθάνουσα μνήμη για όλα τα ημεÏολόγια",
+"Everything seems to be completely cached" => "Όλα έχουν αποθηκευτεί στη cache",
"No calendars found." => "Δε βÏέθηκαν ημεÏολόγια.",
"No events found." => "Δε βÏέθηκαν γεγονότα.",
"Wrong calendar" => "Λάθος ημεÏολόγιο",
+"The file contained either no events or all events are already saved in your calendar." => "Το αÏχείο που πεÏιέχει είτε κανένα γεγονός είτε όλα τα γεγονότα έχουν ήδη αποθηκευτεί στο ημεÏολόγιό σας.",
+"events has been saved in the new calendar" => "τα συμβάντα αποθηκεÏτηκαν σε ένα νέο ημεÏολόγιο",
+"Import failed" => "Η εισαγωγή απέτυχε",
+"events has been saved in your calendar" => "το συμβάν αποθηκεÏτηκε στο ημεÏολογιό σου",
"New Timezone:" => "Îέα ζώνη ÏŽÏας:",
"Timezone changed" => "Η ζώνη ÏŽÏας άλλαξε",
"Invalid request" => "Μη έγκυÏο αίτημα",
"Calendar" => "ΗμεÏολόγιο",
+"ddd" => "ddd",
+"ddd M/d" => "ddd M/d",
+"dddd M/d" => "dddd M/d",
+"MMMM yyyy" => "MMMM yyyy",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy",
"Birthday" => "Γενέθλια",
"Business" => "ΕπιχείÏηση",
"Call" => "Κλήση",
"Clients" => "Πελάτες",
-"Deliverer" => "ΠαÏαδώσας",
+"Deliverer" => "ΠÏομηθευτής",
"Holidays" => "Διακοπές",
"Ideas" => "Ιδέες",
"Journey" => "Ταξίδι",
@@ -22,7 +33,9 @@
"Projects" => "ΈÏγα",
"Questions" => "ΕÏωτήσεις",
"Work" => "ΕÏγασία",
+"by" => "από",
"unnamed" => "ανώνυμο",
+"New Calendar" => "Îέα ΗμεÏολόγιο",
"Does not repeat" => "Μη επαναλαμβανόμενο",
"Daily" => "ΚαθημεÏινά",
"Weekly" => "Εβδομαδιαία",
@@ -67,8 +80,26 @@
"by day and month" => "κατά ημέÏα και μήνα",
"Date" => "ΗμεÏομηνία",
"Cal." => "ΗμεÏ.",
+"Sun." => "ΚυÏ.",
+"Mon." => "Δευ.",
+"Tue." => "ΤÏί.",
+"Wed." => "Τετ.",
+"Thu." => "Πέμ.",
+"Fri." => "ΠαÏ.",
+"Sat." => "Σάβ.",
+"Jan." => "Ιαν.",
+"Feb." => "Φεβ.",
+"Mar." => "ΜάÏ.",
+"Apr." => "ΑπÏ.",
+"May." => "ΜαÎ.",
+"Jun." => "ΙοÏν.",
+"Jul." => "ΙοÏλ.",
+"Aug." => "ΑÏγ.",
+"Sep." => "Σεπ.",
+"Oct." => "Οκτ.",
+"Nov." => "Îοέ.",
+"Dec." => "Δεκ.",
"All day" => "ΟλοήμεÏο",
-"New Calendar" => "Îέα ΗμεÏολόγιο",
"Missing fields" => "Πεδία που λείπουν",
"Title" => "Τίτλος",
"From Date" => "Από ΗμεÏομηνία",
@@ -81,9 +112,6 @@
"Month" => "Μήνας",
"List" => "Λίστα",
"Today" => "ΣήμεÏα",
-"Calendars" => "ΗμεÏολόγια",
-"There was a fail, while parsing the file." => "ΥπήÏξε μια αποτυχία, κατά την σάÏωση του αÏχείου.",
-"Choose active calendars" => "Επιλέξτε τα ενεÏγά ημεÏολόγια",
"Your calendars" => "Τα ημεÏολόγια σου",
"CalDav Link" => "ΣÏνδεση CalDAV",
"Shared calendars" => "ΚοινόχÏηστα ημεÏολόγια",
@@ -132,27 +160,29 @@
"Interval" => "Διάστημα",
"End" => "Τέλος",
"occurrences" => "πεÏιστατικά",
-"Import a calendar file" => "Εισαγωγή αÏχείου ημεÏολογίου",
-"Please choose the calendar" => "ΠαÏακαλώ επιλέξτε το ημεÏολόγιο",
"create a new calendar" => "δημιουÏγία νέου ημεÏολογίου",
+"Import a calendar file" => "Εισαγωγή αÏχείου ημεÏολογίου",
+"Please choose a calendar" => "ΠαÏακαλώ επέλεξε ένα ημεÏολόγιο",
"Name of new calendar" => "Όνομα νέου ημεÏολογίου",
+"Take an available name!" => "Επέλεξε ένα διαθέσιμο όνομα!",
+"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Ένα ημεÏολόγιο με αυτό το όνομα υπάÏχει ήδη. Εάν θέλετε να συνεχίσετε, αυτά τα 2 ημεÏολόγια θα συγχωνευθοÏν.",
"Import" => "Εισαγωγή",
-"Importing calendar" => "Εισαγωγή ημεÏολογίου",
-"Calendar imported successfully" => "Το ημεÏολόγιο εισήχθει επιτυχώς",
"Close Dialog" => "Κλείσιμο Διαλόγου",
"Create a new event" => "ΔημιουÏγήστε ένα νέο συμβάν",
"View an event" => "Εμφάνισε ένα γεγονός",
"No categories selected" => "Δεν επελέγησαν κατηγοÏίες",
-"Select category" => "Επιλέξτε κατηγοÏία",
"of" => "του",
"at" => "στο",
"Timezone" => "Ζώνη ÏŽÏας",
-"Check always for changes of the timezone" => "Έλεγχος πάντα για τις αλλαγές της ζώνης ÏŽÏας",
-"Timeformat" => "ΜοÏφή ÏŽÏας",
"24h" => "24ω",
"12h" => "12ω",
-"First day of the week" => "ΠÏώτη μέÏα της εβδομάδας",
-"Calendar CalDAV syncing address:" => "ΔιεÏθυνση για το συγχÏÎ¿Î½Î¹ÏƒÎ¼Î¿Ï Ï„Î¿Ï… ημεÏολογίου CalDAV:",
+"Cache" => "Cache",
+"Clear cache for repeating events" => "ΕκκαθάÏιση λανθάνουσας μνήμης για επανάληψη γεγονότων",
+"Calendar CalDAV syncing addresses" => "ΔιευθÏνσεις συγχÏÎ¿Î½Î¹ÏƒÎ¼Î¿Ï Î·Î¼ÎµÏολογίου CalDAV",
+"more info" => "πεÏισσότεÏες πλÏοφοÏίες",
+"Primary address (Kontact et al)" => "ΚÏÏια ΔιεÏθυνση(Επαφή και άλλα)",
+"iOS/OS X" => "iOS/OS X",
+"Read only iCalendar link(s)" => " iCalendar link(s) μόνο για ανάγνωση",
"Users" => "ΧÏήστες",
"select users" => "επέλεξε χÏήστες",
"Editable" => "ΕπεξεÏγάσιμο",
diff --git a/apps/calendar/l10n/eo.php b/apps/calendar/l10n/eo.php
index b1127d59ca9..be3db9bfaeb 100644
--- a/apps/calendar/l10n/eo.php
+++ b/apps/calendar/l10n/eo.php
@@ -1,12 +1,23 @@
<?php $TRANSLATIONS = array(
+"Not all calendars are completely cached" => "Ne ĉiuj kalendaroj estas tute kaÅmemorigitaj",
+"Everything seems to be completely cached" => "Ĉio Åajnas tute kaÅmemorigita",
"No calendars found." => "Neniu kalendaro troviÄis.",
"No events found." => "Neniu okazaĵo troviÄis.",
"Wrong calendar" => "MalÄusta kalendaro",
-"New Timezone:" => "Nova horzono:",
+"The file contained either no events or all events are already saved in your calendar." => "Aŭ la dosiero enhavas neniun okazaĵon aŭ ĉiuj okazaĵoj jam estas konservitaj en via kalendaro.",
+"events has been saved in the new calendar" => "okazaĵoj estas konservitaj en la nova kalendaro",
+"Import failed" => "Enporto malsukcesis",
+"events has been saved in your calendar" => "okazaĵoj estas konservitaj en via kalendaro",
+"New Timezone:" => "Nova horozono:",
"Timezone changed" => "La horozono estas ÅanÄita",
"Invalid request" => "Nevalida peto",
"Calendar" => "Kalendaro",
+"ddd" => "ddd",
+"ddd M/d" => "ddd d/M",
+"dddd M/d" => "dddd d/M",
+"MMMM yyyy" => "MMMM yyyy",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "d MMM[ yyyy]{ '&#8212;'d[ MMM] yyyy}",
+"dddd, MMM d, yyyy" => "dddd, d-a de MMM yyyy",
"Birthday" => "NaskiÄotago",
"Business" => "Negoco",
"Call" => "Voko",
@@ -22,7 +33,9 @@
"Projects" => "Projektoj",
"Questions" => "Demandoj",
"Work" => "Laboro",
+"by" => "de",
"unnamed" => "nenomita",
+"New Calendar" => "Nova kalendaro",
"Does not repeat" => "Ĉi tio ne ripetiÄas",
"Daily" => "Tage",
"Weekly" => "Semajne",
@@ -67,8 +80,26 @@
"by day and month" => "laÅ­ tago kaj monato",
"Date" => "Dato",
"Cal." => "Kal.",
+"Sun." => "dim.",
+"Mon." => "lun.",
+"Tue." => "mar.",
+"Wed." => "mer.",
+"Thu." => "ĵaŭ.",
+"Fri." => "ven.",
+"Sat." => "sab.",
+"Jan." => "Jan.",
+"Feb." => "Feb.",
+"Mar." => "Mar.",
+"Apr." => "Apr.",
+"May." => "Maj.",
+"Jun." => "Jun.",
+"Jul." => "Jul.",
+"Aug." => "AÅ­g.",
+"Sep." => "Sep.",
+"Oct." => "Okt.",
+"Nov." => "Nov.",
+"Dec." => "Dec.",
"All day" => "La tuta tago",
-"New Calendar" => "Nova kalendaro",
"Missing fields" => "Mankas iuj kampoj",
"Title" => "Titolo",
"From Date" => "ekde la dato",
@@ -81,9 +112,7 @@
"Month" => "Monato",
"List" => "Listo",
"Today" => "HodiaÅ­",
-"Calendars" => "Kalendaroj",
-"There was a fail, while parsing the file." => "Malsukceso okazis dum analizo de la dosiero.",
-"Choose active calendars" => "Elektu aktivajn kalendarojn",
+"Settings" => "Agordo",
"Your calendars" => "Viaj kalendaroj",
"CalDav Link" => "CalDav-a ligilo",
"Shared calendars" => "Kunhavigitaj kalendaroj",
@@ -132,27 +161,34 @@
"Interval" => "Intervalo",
"End" => "Fino",
"occurrences" => "aperoj",
-"Import a calendar file" => "Enporti kalendarodosieron",
-"Please choose the calendar" => "Bonvolu elekti kalendaron",
"create a new calendar" => "Krei novan kalendaron",
+"Import a calendar file" => "Enporti kalendarodosieron",
+"Please choose a calendar" => "Bonvolu elekti kalendaron",
"Name of new calendar" => "Nomo de la nova kalendaro",
+"Take an available name!" => "Prenu haveblan nomon!",
+"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Kalendaro kun ĉi tiu nomo jam ekzastas. Se vi malgraÅ­e daÅ­ros, ĉi tiuj kalendaroj kunfandiÄos.",
"Import" => "Enporti",
-"Importing calendar" => "Kalendaro estas enportata",
-"Calendar imported successfully" => "La kalendaro enportiÄis sukcese",
"Close Dialog" => "Fermi la dialogon",
"Create a new event" => "Krei okazaĵon",
"View an event" => "Vidi okazaĵon",
"No categories selected" => "Neniu kategorio elektita",
-"Select category" => "Elekti kategorion",
"of" => "de",
"at" => "ĉe",
+"General" => "Äœenerala",
"Timezone" => "Horozono",
-"Check always for changes of the timezone" => "Ĉiam kontroli ĉu la horzono ÅanÄiÄis",
-"Timeformat" => "Tempoformo",
+"Update timezone automatically" => "AÅ­tomate Äisdatigi la horozonon",
+"Time format" => "Horoformo",
"24h" => "24h",
"12h" => "12h",
-"First day of the week" => "Unua tago de la semajno",
-"Calendar CalDAV syncing address:" => "Adreso de kalendarosinkronigo per CalDAV:",
+"Start week on" => "Komenci semajnon je",
+"Cache" => "KaÅmemoro",
+"Clear cache for repeating events" => "ForviÅi kaÅmemoron por ripeto de okazaĵoj",
+"URLs" => "URL-oj",
+"Calendar CalDAV syncing addresses" => "sinkronigaj adresoj por CalDAV-kalendaroj",
+"more info" => "pli da informo",
+"Primary address (Kontact et al)" => "Ĉefa adreso (Kontact kaj aliaj)",
+"iOS/OS X" => "iOS/OS X",
+"Read only iCalendar link(s)" => "Nurlegebla(j) iCalendar-ligilo(j)",
"Users" => "Uzantoj",
"select users" => "elekti uzantojn",
"Editable" => "Redaktebla",
diff --git a/apps/calendar/l10n/es.php b/apps/calendar/l10n/es.php
index 4cd9e3202bf..3ebcd2e9430 100644
--- a/apps/calendar/l10n/es.php
+++ b/apps/calendar/l10n/es.php
@@ -1,12 +1,23 @@
<?php $TRANSLATIONS = array(
+"Not all calendars are completely cached" => "Aún no se han guardado en caché todos los calendarios",
+"Everything seems to be completely cached" => "Parece que se ha guardado todo en caché",
"No calendars found." => "No se encontraron calendarios.",
"No events found." => "No se encontraron eventos.",
"Wrong calendar" => "Calendario incorrecto",
+"The file contained either no events or all events are already saved in your calendar." => "El archivo no contiene eventos o ya existen en tu calendario.",
+"events has been saved in the new calendar" => "Los eventos han sido guardados en el nuevo calendario",
+"Import failed" => "Fallo en la importación",
+"events has been saved in your calendar" => "eventos se han guardado en tu calendario",
"New Timezone:" => "Nueva zona horaria:",
"Timezone changed" => "Zona horaria cambiada",
"Invalid request" => "Petición no válida",
"Calendar" => "Calendario",
+"ddd" => "ddd",
+"ddd M/d" => "ddd M/d",
+"dddd M/d" => "dddd M/d",
+"MMMM yyyy" => "MMMM yyyy",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy",
"Birthday" => "Cumpleaños",
"Business" => "Negocios",
"Call" => "Llamada",
@@ -22,7 +33,9 @@
"Projects" => "Proyectos",
"Questions" => "Preguntas",
"Work" => "Trabajo",
+"by" => "por",
"unnamed" => "Sin nombre",
+"New Calendar" => "Nuevo calendario",
"Does not repeat" => "No se repite",
"Daily" => "Diariamente",
"Weekly" => "Semanalmente",
@@ -67,8 +80,26 @@
"by day and month" => "por día y mes",
"Date" => "Fecha",
"Cal." => "Cal.",
+"Sun." => "Dom.",
+"Mon." => "Lun.",
+"Tue." => "Mar.",
+"Wed." => "Mier.",
+"Thu." => "Jue.",
+"Fri." => "Vie.",
+"Sat." => "Sab.",
+"Jan." => "Ene.",
+"Feb." => "Feb.",
+"Mar." => "Mar.",
+"Apr." => "Abr.",
+"May." => "May.",
+"Jun." => "Jun.",
+"Jul." => "Jul.",
+"Aug." => "Ago.",
+"Sep." => "Sep.",
+"Oct." => "Oct.",
+"Nov." => "Nov.",
+"Dec." => "Dic.",
"All day" => "Todo el día",
-"New Calendar" => "Nuevo calendario",
"Missing fields" => "Los campos que faltan",
"Title" => "Título",
"From Date" => "Desde la fecha",
@@ -81,9 +112,6 @@
"Month" => "Mes",
"List" => "Lista",
"Today" => "Hoy",
-"Calendars" => "Calendarios",
-"There was a fail, while parsing the file." => "Se ha producido un fallo al analizar el archivo.",
-"Choose active calendars" => "Elige los calendarios activos",
"Your calendars" => "Tus calendarios",
"CalDav Link" => "Enlace a CalDav",
"Shared calendars" => "Calendarios compartidos",
@@ -132,27 +160,29 @@
"Interval" => "Intervalo",
"End" => "Fin",
"occurrences" => "ocurrencias",
-"Import a calendar file" => "Importar un archivo de calendario",
-"Please choose the calendar" => "Por favor elige el calendario",
"create a new calendar" => "Crear un nuevo calendario",
+"Import a calendar file" => "Importar un archivo de calendario",
+"Please choose a calendar" => "Por favor, escoge un calendario",
"Name of new calendar" => "Nombre del nuevo calendario",
+"Take an available name!" => "¡Elige un nombre disponible!",
+"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Ya existe un calendario con este nombre. Si continúas, se combinarán los calendarios.",
"Import" => "Importar",
-"Importing calendar" => "Importando calendario",
-"Calendar imported successfully" => "Calendario importado exitosamente",
"Close Dialog" => "Cerrar diálogo",
"Create a new event" => "Crear un nuevo evento",
"View an event" => "Ver un evento",
"No categories selected" => "Ninguna categoría seleccionada",
-"Select category" => "Seleccionar categoría",
"of" => "de",
"at" => "a las",
"Timezone" => "Zona horaria",
-"Check always for changes of the timezone" => "Comprobar siempre por cambios en la zona horaria",
-"Timeformat" => "Formato de hora",
"24h" => "24h",
"12h" => "12h",
-"First day of the week" => "Primer día de la semana",
-"Calendar CalDAV syncing address:" => "Dirección de sincronización de calendario CalDAV:",
+"Cache" => "Caché",
+"Clear cache for repeating events" => "Limpiar caché de eventos recurrentes",
+"Calendar CalDAV syncing addresses" => "Direcciones de sincronización de calendario CalDAV:",
+"more info" => "Más información",
+"Primary address (Kontact et al)" => "Dirección principal (Kontact y otros)",
+"iOS/OS X" => "iOS/OS X",
+"Read only iCalendar link(s)" => "Enlace(s) iCalendar de sólo lectura",
"Users" => "Usuarios",
"select users" => "seleccionar usuarios",
"Editable" => "Editable",
diff --git a/apps/calendar/l10n/et_EE.php b/apps/calendar/l10n/et_EE.php
index 931ca56f5fd..59f494f8ab9 100644
--- a/apps/calendar/l10n/et_EE.php
+++ b/apps/calendar/l10n/et_EE.php
@@ -6,7 +6,12 @@
"Timezone changed" => "Ajavöönd on muudetud",
"Invalid request" => "Vigane päring",
"Calendar" => "Kalender",
+"ddd" => "ddd",
+"ddd M/d" => "ddd M/d",
+"dddd M/d" => "dddd M/d",
+"MMMM yyyy" => "MMMM yyyy",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy",
"Birthday" => "Sünnipäev",
"Business" => "Äri",
"Call" => "Helista",
@@ -23,6 +28,7 @@
"Questions" => "Küsimused",
"Work" => "Töö",
"unnamed" => "nimetu",
+"New Calendar" => "Uus kalender",
"Does not repeat" => "Ei kordu",
"Daily" => "Iga päev",
"Weekly" => "Iga nädal",
@@ -68,7 +74,6 @@
"Date" => "Kuupäev",
"Cal." => "Kal.",
"All day" => "Kogu päev",
-"New Calendar" => "Uus kalender",
"Missing fields" => "Puuduvad väljad",
"Title" => "Pealkiri",
"From Date" => "Alates kuupäevast",
@@ -81,9 +86,6 @@
"Month" => "Kuu",
"List" => "Nimekiri",
"Today" => "Täna",
-"Calendars" => "Kalendrid",
-"There was a fail, while parsing the file." => "Faili parsimisel tekkis viga.",
-"Choose active calendars" => "Vali aktiivsed kalendrid",
"Your calendars" => "Sinu kalendrid",
"CalDav Link" => "CalDav Link",
"Shared calendars" => "Jagatud kalendrid",
@@ -132,27 +134,19 @@
"Interval" => "Intervall",
"End" => "Lõpp",
"occurrences" => "toimumiskordi",
-"Import a calendar file" => "Impordi kalendrifail",
-"Please choose the calendar" => "Palun vali kalender",
"create a new calendar" => "loo uus kalender",
+"Import a calendar file" => "Impordi kalendrifail",
"Name of new calendar" => "Uue kalendri nimi",
"Import" => "Impordi",
-"Importing calendar" => "Kalendri importimine",
-"Calendar imported successfully" => "Kalender on imporditud",
"Close Dialog" => "Sulge dialoogiaken",
"Create a new event" => "Loo sündmus",
"View an event" => "Vaata üritust",
"No categories selected" => "Ãœhtegi kategooriat pole valitud",
-"Select category" => "Salvesta kategooria",
"of" => "/",
"at" => "kell",
"Timezone" => "Ajavöönd",
-"Check always for changes of the timezone" => "Kontrolli alati muudatusi ajavööndis",
-"Timeformat" => "Aja vorming",
"24h" => "24h",
"12h" => "12h",
-"First day of the week" => "Nädala esimene päev",
-"Calendar CalDAV syncing address:" => "Kalendri CalDAV sünkroniseerimise aadress:",
"Users" => "Kasutajad",
"select users" => "valitud kasutajad",
"Editable" => "Muudetav",
diff --git a/apps/calendar/l10n/eu.php b/apps/calendar/l10n/eu.php
index 9e1300032f8..5ebce09c58b 100644
--- a/apps/calendar/l10n/eu.php
+++ b/apps/calendar/l10n/eu.php
@@ -1,11 +1,18 @@
<?php $TRANSLATIONS = array(
+"Not all calendars are completely cached" => "Egutegi guztiak ez daude guztiz cacheatuta",
+"Everything seems to be completely cached" => "Dena guztiz cacheatuta dagoela dirudi",
"No calendars found." => "Ez da egutegirik aurkitu.",
"No events found." => "Ez da gertaerarik aurkitu.",
"Wrong calendar" => "Egutegi okerra",
+"The file contained either no events or all events are already saved in your calendar." => "Fitxategiak ez zuen gertaerarik edo gertaera guztiak dagoeneko egutegian gordeta zeuden.",
+"events has been saved in the new calendar" => "gertaerak egutegi berrian gorde dira",
+"Import failed" => "Inportazioak huts egin du",
+"events has been saved in your calendar" => "gertaerak zure egutegian gorde dira",
"New Timezone:" => "Ordu-zonalde berria",
"Timezone changed" => "Ordu-zonaldea aldatuta",
"Invalid request" => "Baliogabeko eskaera",
"Calendar" => "Egutegia",
+"MMMM yyyy" => "yyyy MMMM",
"Birthday" => "Jaioteguna",
"Business" => "Negozioa",
"Call" => "Deia",
@@ -22,6 +29,7 @@
"Questions" => "Galderak",
"Work" => "Lana",
"unnamed" => "izengabea",
+"New Calendar" => "Egutegi berria",
"Does not repeat" => "Ez da errepikatzen",
"Daily" => "Egunero",
"Weekly" => "Astero",
@@ -66,8 +74,26 @@
"by day and month" => "eguna eta hilabetearen arabera",
"Date" => "Data",
"Cal." => "Eg.",
+"Sun." => "ig.",
+"Mon." => "al.",
+"Tue." => "ar.",
+"Wed." => "az.",
+"Thu." => "og.",
+"Fri." => "ol.",
+"Sat." => "lr.",
+"Jan." => "urt.",
+"Feb." => "ots.",
+"Mar." => "mar.",
+"Apr." => "api.",
+"May." => "mai.",
+"Jun." => "eka.",
+"Jul." => "uzt.",
+"Aug." => "abu.",
+"Sep." => "ira.",
+"Oct." => "urr.",
+"Nov." => "aza.",
+"Dec." => "abe.",
"All day" => "Egun guztia",
-"New Calendar" => "Egutegi berria",
"Missing fields" => "Eremuak faltan",
"Title" => "Izenburua",
"From Date" => "Hasierako Data",
@@ -80,9 +106,6 @@
"Month" => "Hilabetea",
"List" => "Zerrenda",
"Today" => "Gaur",
-"Calendars" => "Egutegiak",
-"There was a fail, while parsing the file." => "Huts bat egon da, fitxategia aztertzen zen bitartea.",
-"Choose active calendars" => "Aukeratu egutegi aktiboak",
"Your calendars" => "Zure egutegiak",
"CalDav Link" => "CalDav lotura",
"Shared calendars" => "Elkarbanatutako egutegiak",
@@ -131,25 +154,26 @@
"Interval" => "Tartea",
"End" => "Amaiera",
"occurrences" => "errepikapenak",
-"Import a calendar file" => "Inportatu egutegi fitxategi bat",
-"Please choose the calendar" => "Mesedez aukeratu egutegia",
"create a new calendar" => "sortu egutegi berria",
+"Import a calendar file" => "Inportatu egutegi fitxategi bat",
+"Please choose a calendar" => "Mesedez aukeratu egutegi bat.",
"Name of new calendar" => "Egutegi berriaren izena",
+"Take an available name!" => "Hartu eskuragarri dagoen izen bat!",
+"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Izen hau duen egutegi bat dagoeneko existitzen da. Hala ere jarraitzen baduzu, egutegi hauek elkartuko dira.",
"Import" => "Importatu",
-"Importing calendar" => "Egutegia inportatzen",
-"Calendar imported successfully" => "Egutegia ongi inportatu da",
"Close Dialog" => "Itxi lehioa",
"Create a new event" => "Sortu gertaera berria",
"View an event" => "Ikusi gertaera bat",
"No categories selected" => "Ez da kategoriarik hautatu",
-"Select category" => "Aukeratu kategoria",
"Timezone" => "Ordu-zonaldea",
-"Check always for changes of the timezone" => "Egiaztatu beti ordu-zonalde aldaketen bila",
-"Timeformat" => "Ordu formatua",
"24h" => "24h",
"12h" => "12h",
-"First day of the week" => "Asteko lehenego eguna",
-"Calendar CalDAV syncing address:" => "Egutegiaren CalDAV sinkronizazio helbidea",
+"Cache" => "Cache",
+"Clear cache for repeating events" => "Ezabatu gertaera errepikakorren cachea",
+"Calendar CalDAV syncing addresses" => "Egutegiaren CalDAV sinkronizazio helbideak",
+"more info" => "informazio gehiago",
+"Primary address (Kontact et al)" => "Helbide nagusia",
+"iOS/OS X" => "iOS/OS X",
"Users" => "Erabiltzaileak",
"select users" => "hautatutako erabiltzaileak",
"Editable" => "Editagarria",
diff --git a/apps/calendar/l10n/fa.php b/apps/calendar/l10n/fa.php
index cd2bb9c2e5a..9235460834b 100644
--- a/apps/calendar/l10n/fa.php
+++ b/apps/calendar/l10n/fa.php
@@ -6,7 +6,12 @@
"Timezone changed" => "زمان محلی تغییر یاÙت",
"Invalid request" => "درخواست نامعتبر",
"Calendar" => "تقویم",
+"ddd" => "ddd",
+"ddd M/d" => "ddd M/d",
+"dddd M/d" => "dddd M/d",
+"MMMM yyyy" => "MMMM yyyy",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "DDD m[ yyyy]{ '&#8212;'[ DDD] m yyyy}",
+"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy",
"Birthday" => "روزتولد",
"Business" => "تجارت",
"Call" => "تماس گرÙتن",
@@ -23,6 +28,7 @@
"Questions" => "سوالات",
"Work" => "کار",
"unnamed" => "نام گذاری نشده",
+"New Calendar" => "تقویم جدید",
"Does not repeat" => "تکرار نکنید",
"Daily" => "روزانه",
"Weekly" => "Ù‡Ùتهگی",
@@ -68,7 +74,6 @@
"Date" => "تاریخ",
"Cal." => "تقویم.",
"All day" => "هرروز",
-"New Calendar" => "تقویم جدید",
"Missing fields" => "Ùیلد های Ú¯Ù… شده",
"Title" => "عنوان",
"From Date" => "از تاریخ",
@@ -81,9 +86,6 @@
"Month" => "ماه",
"List" => "Ùهرست",
"Today" => "امروز",
-"Calendars" => "تقویم ها",
-"There was a fail, while parsing the file." => "ناتوان در تجزیه پرونده",
-"Choose active calendars" => "تقویم Ùعال را انتخاب کنید",
"Your calendars" => "تقویم های شما",
"CalDav Link" => "CalDav Link",
"Shared calendars" => "تقویمهای به اشترک گذاری شده",
@@ -132,27 +134,19 @@
"Interval" => "Ùاصله",
"End" => "پایان",
"occurrences" => "ظهور",
-"Import a calendar file" => "یک پرونده حاوی تقویم وارد کنید",
-"Please choose the calendar" => "لطÙا تقویم را انتخاب کنید",
"create a new calendar" => "یک تقویم جدید ایجاد کنید",
+"Import a calendar file" => "یک پرونده حاوی تقویم وارد کنید",
"Name of new calendar" => "نام تقویم جدید",
"Import" => "ورودی دادن",
-"Importing calendar" => "درحال اÙزودن تقویم",
-"Calendar imported successfully" => "اÙزودن تقویم موÙقیت آمیز بود",
"Close Dialog" => "بستن دیالوگ",
"Create a new event" => "یک رویداد ایجاد کنید",
"View an event" => "دیدن یک رویداد",
"No categories selected" => "هیچ گروهی انتخاب نشده",
-"Select category" => "انتخاب گروه",
"of" => "از",
"at" => "در",
"Timezone" => "زمان محلی",
-"Check always for changes of the timezone" => "همیشه بررسی کنید برای تغییر زمان محلی",
-"Timeformat" => "نوع زمان",
"24h" => "24 ساعت",
"12h" => "12 ساعت",
-"First day of the week" => "یکمین روز Ù‡Ùته",
-"Calendar CalDAV syncing address:" => "Calendar CalDAV syncing address :",
"Users" => "کاربرها",
"select users" => "انتخاب شناسه ها",
"Editable" => "قابل ویرایش",
diff --git a/apps/calendar/l10n/fi_FI.php b/apps/calendar/l10n/fi_FI.php
index 4de94b7b7b7..c4c9df3588a 100644
--- a/apps/calendar/l10n/fi_FI.php
+++ b/apps/calendar/l10n/fi_FI.php
@@ -2,6 +2,9 @@
"No calendars found." => "Kalentereita ei löytynyt",
"No events found." => "Tapahtumia ei löytynyt.",
"Wrong calendar" => "Väärä kalenteri",
+"The file contained either no events or all events are already saved in your calendar." => "Tiedosto ei joko sisältänyt tapahtumia tai vaihtoehtoisesti kaikki tapahtumat on jo tallennettu kalenteriisi.",
+"Import failed" => "Tuonti epäonnistui",
+"events has been saved in your calendar" => "tapahtumaa on tallennettu kalenteriisi",
"New Timezone:" => "Uusi aikavyöhyke:",
"Timezone changed" => "Aikavyöhyke vaihdettu",
"Invalid request" => "Virheellinen pyyntö",
@@ -21,6 +24,7 @@
"Questions" => "Kysymykset",
"Work" => "Työ",
"unnamed" => "nimetön",
+"New Calendar" => "Uusi kalenteri",
"Does not repeat" => "Ei toistoa",
"Daily" => "Päivittäin",
"Weekly" => "Viikottain",
@@ -55,8 +59,26 @@
"November" => "Marraskuu",
"December" => "Joulukuu",
"Date" => "Päivämäärä",
+"Sun." => "Su",
+"Mon." => "Ma",
+"Tue." => "Ti",
+"Wed." => "Ke",
+"Thu." => "To",
+"Fri." => "Pe",
+"Sat." => "La",
+"Jan." => "Tammi",
+"Feb." => "Helmi",
+"Mar." => "Maalis",
+"Apr." => "Huhti",
+"May." => "Touko",
+"Jun." => "Kesä",
+"Jul." => "Heinä",
+"Aug." => "Elo",
+"Sep." => "Syys",
+"Oct." => "Loka",
+"Nov." => "Marras",
+"Dec." => "Joulu",
"All day" => "Koko päivä",
-"New Calendar" => "Uusi kalenteri",
"Missing fields" => "Puuttuvat kentät",
"Title" => "Otsikko",
"The event ends before it starts" => "Tapahtuma päättyy ennen alkamistaan",
@@ -65,9 +87,7 @@
"Month" => "Kuukausi",
"List" => "Lista",
"Today" => "Tänään",
-"Calendars" => "Kalenterit",
-"There was a fail, while parsing the file." => "Tiedostoa jäsennettäessä tapahtui virhe.",
-"Choose active calendars" => "Valitse aktiiviset kalenterit",
+"Settings" => "Asetukset",
"Your calendars" => "Omat kalenterisi",
"CalDav Link" => "CalDav-linkki",
"Shared calendars" => "Jaetut kalenterit",
@@ -110,25 +130,26 @@
"Select months" => "Valitse kuukaudet",
"Select weeks" => "Valitse viikot",
"Interval" => "Intervalli",
-"Import a calendar file" => "Tuo kalenteritiedosto",
-"Please choose the calendar" => "Valitse kalenteri",
"create a new calendar" => "luo uusi kalenteri",
+"Import a calendar file" => "Tuo kalenteritiedosto",
+"Please choose a calendar" => "Valitse kalenteri",
"Name of new calendar" => "Uuden kalenterin nimi",
+"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Samalla nimellä on jo olemassa kalenteri. Jos jatkat kaikesta huolimatta, kalenterit yhdistetään.",
"Import" => "Tuo",
-"Importing calendar" => "Tuodaan kalenteria",
-"Calendar imported successfully" => "Kalenteri tuotu onnistuneesti",
"Close Dialog" => "Sulje ikkuna",
"Create a new event" => "Luo uusi tapahtuma",
"View an event" => "Avaa tapahtuma",
"No categories selected" => "Luokkia ei ole valittu",
-"Select category" => "Valitse luokka",
+"General" => "Yleiset",
"Timezone" => "Aikavyöhyke",
-"Check always for changes of the timezone" => "Tarkista aina aikavyöhykkeen muutokset",
-"Timeformat" => "Ajan esitysmuoto",
+"Update timezone automatically" => "Päivitä aikavyöhykkeet automaattisesti",
+"Time format" => "Ajan näyttömuoto",
"24h" => "24 tuntia",
"12h" => "12 tuntia",
-"First day of the week" => "Viikon ensimmäinen päivä",
-"Calendar CalDAV syncing address:" => "Kalenterin CalDAV-synkronointiosoite:",
+"Start week on" => "Viikon alkamispäivä",
+"Calendar CalDAV syncing addresses" => "Kalenterin CalDAV-synkronointiosoitteet",
+"Primary address (Kontact et al)" => "Ensisijainen osoite (Kontact ja muut vastaavat)",
+"iOS/OS X" => "iOS/OS X",
"Users" => "Käyttäjät",
"select users" => "valitse käyttäjät",
"Editable" => "Muoktattava",
diff --git a/apps/calendar/l10n/fr.php b/apps/calendar/l10n/fr.php
index 506453af428..90ba903b876 100644
--- a/apps/calendar/l10n/fr.php
+++ b/apps/calendar/l10n/fr.php
@@ -1,12 +1,23 @@
<?php $TRANSLATIONS = array(
+"Not all calendars are completely cached" => "Tous les calendriers ne sont pas mis en cache",
+"Everything seems to be completely cached" => "Tout semble être en cache",
"No calendars found." => "Aucun calendrier n'a été trouvé.",
"No events found." => "Aucun événement n'a été trouvé.",
"Wrong calendar" => "Mauvais calendrier",
+"The file contained either no events or all events are already saved in your calendar." => "Soit le fichier ne contient aucun événement soit tous les événements sont déjà enregistrés dans votre calendrier.",
+"events has been saved in the new calendar" => "Les événements ont été enregistrés dans le nouveau calendrier",
+"Import failed" => "Échec de l'import",
+"events has been saved in your calendar" => "Les événements ont été enregistrés dans votre calendrier",
"New Timezone:" => "Nouveau fuseau horaire :",
"Timezone changed" => "Fuseau horaire modifié",
"Invalid request" => "Requête invalide",
"Calendar" => "Calendrier",
+"ddd" => "ddd",
+"ddd M/d" => "ddd d/M",
+"dddd M/d" => "dddd d/M",
+"MMMM yyyy" => "MMMM yyyy",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"dddd, MMM d, yyyy" => "dddd, d MMM, yyyy",
"Birthday" => "Anniversaire",
"Business" => "Professionnel",
"Call" => "Appel",
@@ -22,7 +33,9 @@
"Projects" => "Projets",
"Questions" => "Questions",
"Work" => "Travail",
+"by" => "par",
"unnamed" => "sans-nom",
+"New Calendar" => "Nouveau Calendrier",
"Does not repeat" => "Pas de répétition",
"Daily" => "Tous les jours",
"Weekly" => "Hebdomadaire",
@@ -67,8 +80,26 @@
"by day and month" => "par jour et mois",
"Date" => "Date",
"Cal." => "Cal.",
+"Sun." => "Dim.",
+"Mon." => "Lun.",
+"Tue." => "Mar.",
+"Wed." => "Mer.",
+"Thu." => "Jeu",
+"Fri." => "Ven.",
+"Sat." => "Sam.",
+"Jan." => "Jan.",
+"Feb." => "Fév.",
+"Mar." => "Mars",
+"Apr." => "Avr.",
+"May." => "Mai",
+"Jun." => "Juin",
+"Jul." => "Juil.",
+"Aug." => "Août",
+"Sep." => "Sep.",
+"Oct." => "Oct.",
+"Nov." => "Nov.",
+"Dec." => "Déc.",
"All day" => "Journée entière",
-"New Calendar" => "Nouveau Calendrier",
"Missing fields" => "Champs manquants",
"Title" => "Titre",
"From Date" => "De la date",
@@ -81,9 +112,6 @@
"Month" => "Mois",
"List" => "Liste",
"Today" => "Aujourd'hui",
-"Calendars" => "Calendriers",
-"There was a fail, while parsing the file." => "Une erreur est survenue pendant la lecture du fichier.",
-"Choose active calendars" => "Choix des calendriers actifs",
"Your calendars" => "Vos calendriers",
"CalDav Link" => "Lien CalDav",
"Shared calendars" => "Calendriers partagés",
@@ -132,27 +160,29 @@
"Interval" => "Intervalle",
"End" => "Fin",
"occurrences" => "occurrences",
-"Import a calendar file" => "Importer un fichier de calendriers",
-"Please choose the calendar" => "Choisissez le calendrier svp",
"create a new calendar" => "Créer un nouveau calendrier",
+"Import a calendar file" => "Importer un fichier de calendriers",
+"Please choose a calendar" => "Veuillez sélectionner un calendrier",
"Name of new calendar" => "Nom pour le nouveau calendrier",
+"Take an available name!" => "Choisissez un nom disponible !",
+"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Un calendrier de ce nom existe déjà. Si vous choisissez de continuer les calendriers seront fusionnés.",
"Import" => "Importer",
-"Importing calendar" => "Import du calendrier",
-"Calendar imported successfully" => "Calendrier importé avec succès",
"Close Dialog" => "Fermer la fenêtre",
"Create a new event" => "Créer un nouvel événement",
"View an event" => "Voir un événement",
"No categories selected" => "Aucune catégorie sélectionnée",
-"Select category" => "Sélectionner une catégorie",
"of" => "de",
"at" => "à",
"Timezone" => "Fuseau horaire",
-"Check always for changes of the timezone" => "Toujours vérifier d'éventuels changements de fuseau horaire",
-"Timeformat" => "Format de l'heure",
"24h" => "24h",
"12h" => "12h",
-"First day of the week" => "Premier jour de la semaine",
-"Calendar CalDAV syncing address:" => "Adresse de synchronisation du calendrier CalDAV :",
+"Cache" => "Cache",
+"Clear cache for repeating events" => "Nettoyer le cache des événements répétitifs",
+"Calendar CalDAV syncing addresses" => "Adresses de synchronisation des calendriers CalDAV",
+"more info" => "plus d'infos",
+"Primary address (Kontact et al)" => "Adresses principales (Kontact et assimilés)",
+"iOS/OS X" => "iOS/OS X",
+"Read only iCalendar link(s)" => "lien(s) iCalendar en lecture seule",
"Users" => "Utilisateurs",
"select users" => "sélectionner les utilisateurs",
"Editable" => "Modifiable",
diff --git a/apps/calendar/l10n/gl.php b/apps/calendar/l10n/gl.php
index 3178b1819ec..00a28cc70f4 100644
--- a/apps/calendar/l10n/gl.php
+++ b/apps/calendar/l10n/gl.php
@@ -6,7 +6,12 @@
"Timezone changed" => "Fuso horario trocado",
"Invalid request" => "Petición non válida",
"Calendar" => "Calendario",
+"ddd" => "ddd",
+"ddd M/d" => "ddd M/d",
+"dddd M/d" => "dddd M/d",
+"MMMM yyyy" => "MMMM yyyy",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "d MMM[ yyyy]{ '&#8212;'d [ MMM] yyyy}",
+"dddd, MMM d, yyyy" => "dddd, MMM d,yyyy",
"Birthday" => "Aniversario",
"Business" => "Traballo",
"Call" => "Chamada",
@@ -23,6 +28,7 @@
"Questions" => "Preguntas",
"Work" => "Traballo",
"unnamed" => "sen nome",
+"New Calendar" => "Novo calendario",
"Does not repeat" => "Non se repite",
"Daily" => "A diario",
"Weekly" => "Semanalmente",
@@ -68,7 +74,6 @@
"Date" => "Data",
"Cal." => "Cal.",
"All day" => "Todo o dia",
-"New Calendar" => "Novo calendario",
"Missing fields" => "Faltan campos",
"Title" => "Título",
"From Date" => "Desde a data",
@@ -132,6 +137,7 @@
"Interval" => "Intervalo",
"End" => "Fin",
"occurrences" => "acontecementos",
+"create a new calendar" => "crear un novo calendario",
"Import a calendar file" => "Importar un ficheiro de calendario",
"Please choose the calendar" => "Por favor, seleccione o calendario",
"create a new calendar" => "crear un novo calendario",
@@ -143,7 +149,6 @@
"Create a new event" => "Crear un novo evento",
"View an event" => "Ver un evento",
"No categories selected" => "Non seleccionou as categorías",
-"Select category" => "Seleccionar categoría",
"of" => "de",
"at" => "a",
"Timezone" => "Fuso horario",
@@ -151,8 +156,6 @@
"Timeformat" => "Formato de hora",
"24h" => "24h",
"12h" => "12h",
-"First day of the week" => "Primeiro día da semana",
-"Calendar CalDAV syncing address:" => "Enderezo de sincronización do calendario CalDAV:",
"Users" => "Usuarios",
"select users" => "escoller usuarios",
"Editable" => "Editable",
diff --git a/apps/calendar/l10n/he.php b/apps/calendar/l10n/he.php
index c161d3be2ef..d5c0b2b2e53 100644
--- a/apps/calendar/l10n/he.php
+++ b/apps/calendar/l10n/he.php
@@ -6,7 +6,12 @@
"Timezone changed" => "×זור זמן השתנה",
"Invalid request" => "בקשה ×œ× ×—×•×§×™×ª",
"Calendar" => "ח שנה",
+"ddd" => "ddd",
+"ddd M/d" => "ddd M/d",
+"dddd M/d" => "dddd M/d",
+"MMMM yyyy" => "MMMM yyyy",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "d MMM [ yyyy]{ '&#8212;'d[ MMM] yyyy}",
+"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy",
"Birthday" => "×™×•× ×”×•×œ×“×ª",
"Business" => "עסקי×",
"Call" => "שיחה",
@@ -23,6 +28,7 @@
"Questions" => "ש×לות",
"Work" => "עבודה",
"unnamed" => "×œ×œ× ×©×",
+"New Calendar" => "לוח שנה חדש",
"Does not repeat" => "×œ×œ× ×—×–×¨×”",
"Daily" => "יומי",
"Weekly" => "שבועי",
@@ -68,7 +74,6 @@
"Date" => "ת×ריך",
"Cal." => "לוח שנה",
"All day" => "היו×",
-"New Calendar" => "לוח שנה חדש",
"Missing fields" => "שדות חסרי×",
"Title" => "כותרת",
"From Date" => "מת×ריך",
@@ -81,9 +86,6 @@
"Month" => "חודש",
"List" => "רשימה",
"Today" => "היו×",
-"Calendars" => "לוחות שנה",
-"There was a fail, while parsing the file." => "×ירעה שגי××” בעת פענוח הקובץ.",
-"Choose active calendars" => "בחר לוחות שנה פעילי×",
"Your calendars" => "לוחות השנה שלך",
"CalDav Link" => "קישור CalDav",
"Shared calendars" => "לוחות שנה מושתפי×",
@@ -132,27 +134,19 @@
"Interval" => "משך",
"End" => "סיו×",
"occurrences" => "מופעי×",
-"Import a calendar file" => "×™×‘×•× ×§×•×‘×¥ לוח שנה",
-"Please choose the calendar" => "× × ×œ×‘×—×•×¨ ×ת לוח השנה",
"create a new calendar" => "יצירת לוח שנה חדש",
+"Import a calendar file" => "×™×‘×•× ×§×•×‘×¥ לוח שנה",
"Name of new calendar" => "×©× ×œ×•×— השנה החדש",
"Import" => "יבו×",
-"Importing calendar" => "היומן מייוב×",
-"Calendar imported successfully" => "היומן ×™×™×•×‘× ×‘×”×¦×œ×—×”",
"Close Dialog" => "סגירת הדו־שיח",
"Create a new event" => "יצירת ×ירוע חדש",
"View an event" => "צפייה ב×ירוע",
"No categories selected" => "×œ× × ×‘×—×¨×• קטגוריות",
-"Select category" => "בחר קטגוריה",
"of" => "מתוך",
"at" => "בשנה",
"Timezone" => "×זור זמן",
-"Check always for changes of the timezone" => "יש לבדוק תמיד ×× ×™×© ×”×‘×“×œ×™× ×‘×זורי הזמן",
-"Timeformat" => "מבנה הת×ריך",
"24h" => "24 שעות",
"12h" => "12 שעות",
-"First day of the week" => "×”×™×•× ×”×¨×שון בשבוע",
-"Calendar CalDAV syncing address:" => "כתובת הסנכרון ללוח שנה מסוג CalDAV:",
"Users" => "משתמשי×",
"select users" => "× × ×œ×‘×—×•×¨ במשתמשי×",
"Editable" => "ניתן לעריכה",
diff --git a/apps/calendar/l10n/hr.php b/apps/calendar/l10n/hr.php
index 551bb4abbcb..07512b96051 100644
--- a/apps/calendar/l10n/hr.php
+++ b/apps/calendar/l10n/hr.php
@@ -23,6 +23,7 @@
"Questions" => "Pitanja",
"Work" => "Posao",
"unnamed" => "bezimeno",
+"New Calendar" => "Novi kalendar",
"Does not repeat" => "Ne ponavlja se",
"Daily" => "Dnevno",
"Weekly" => "Tjedno",
@@ -67,7 +68,6 @@
"Date" => "datum",
"Cal." => "Kal.",
"All day" => "Cijeli dan",
-"New Calendar" => "Novi kalendar",
"Missing fields" => "Nedostaju polja",
"Title" => "Naslov",
"From Date" => "Datum od",
@@ -80,9 +80,6 @@
"Month" => "Mjesec",
"List" => "Lista",
"Today" => "Danas",
-"Calendars" => "Kalendari",
-"There was a fail, while parsing the file." => "PogreÅ¡ka pri Äitanju datoteke.",
-"Choose active calendars" => "Odabir aktivnih kalendara",
"Your calendars" => "Vaši kalendari",
"CalDav Link" => "CalDav poveznica",
"Shared calendars" => "Podijeljeni kalendari",
@@ -128,27 +125,20 @@
"Interval" => "Interval",
"End" => "Kraj",
"occurrences" => "pojave",
-"Import a calendar file" => "Uvozite datoteku kalendara",
-"Please choose the calendar" => "Odaberi kalendar",
"create a new calendar" => "stvori novi kalendar",
+"Import a calendar file" => "Uvozite datoteku kalendara",
"Name of new calendar" => "Ime novog kalendara",
"Import" => "Uvoz",
-"Importing calendar" => "Uvoz kalendara",
-"Calendar imported successfully" => "Kalendar je uspješno uvezen",
"Close Dialog" => "Zatvori dijalog",
"Create a new event" => "Unesi novi događaj",
"View an event" => "Vidjeti događaj",
"No categories selected" => "Nema odabranih kategorija",
-"Select category" => "Odabir kategorije",
"of" => "od",
"at" => "na",
"Timezone" => "Vremenska zona",
-"Check always for changes of the timezone" => "Provjerite uvijek za promjene vremenske zone",
"Timeformat" => "Format vremena",
"24h" => "24h",
"12h" => "12h",
-"First day of the week" => "Prvi dan tjedna",
-"Calendar CalDAV syncing address:" => "Adresa za CalDAV sinkronizaciju kalendara:",
"Users" => "Korisnici",
"select users" => "odaberi korisnike",
"Editable" => "Može se uređivati",
diff --git a/apps/calendar/l10n/hu_HU.php b/apps/calendar/l10n/hu_HU.php
index d97887aac7a..3ef4b9675be 100644
--- a/apps/calendar/l10n/hu_HU.php
+++ b/apps/calendar/l10n/hu_HU.php
@@ -6,7 +6,12 @@
"Timezone changed" => "Időzóna megváltozott",
"Invalid request" => "Érvénytelen kérés",
"Calendar" => "Naptár",
+"ddd" => "nnn",
+"ddd M/d" => "nnn H/n",
+"dddd M/d" => "nnnn H/n",
+"MMMM yyyy" => "HHHH éééé",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"dddd, MMM d, yyyy" => "nnnn, HHH n, éééé",
"Birthday" => "Születésap",
"Business" => "Ãœzlet",
"Call" => "Hívás",
@@ -23,6 +28,7 @@
"Questions" => "Kérdések",
"Work" => "Munka",
"unnamed" => "névtelen",
+"New Calendar" => "Új naptár",
"Does not repeat" => "Nem ismétlődik",
"Daily" => "Napi",
"Weekly" => "Heti",
@@ -68,7 +74,6 @@
"Date" => "Dátum",
"Cal." => "Naptár",
"All day" => "Egész nap",
-"New Calendar" => "Új naptár",
"Missing fields" => "Hiányzó mezők",
"Title" => "Cím",
"From Date" => "Napjától",
@@ -81,9 +86,6 @@
"Month" => "Hónap",
"List" => "Lista",
"Today" => "Ma",
-"Calendars" => "Naptárak",
-"There was a fail, while parsing the file." => "Probléma volt a fájl elemzése közben.",
-"Choose active calendars" => "Aktív naptár kiválasztása",
"Your calendars" => "Naptárjaid",
"CalDav Link" => "CalDAV link",
"Shared calendars" => "Megosztott naptárak",
@@ -132,27 +134,19 @@
"Interval" => "Időköz",
"End" => "Vége",
"occurrences" => "előfordulások",
-"Import a calendar file" => "Naptár-fájl importálása",
-"Please choose the calendar" => "Válassz naptárat",
"create a new calendar" => "új naptár létrehozása",
+"Import a calendar file" => "Naptár-fájl importálása",
"Name of new calendar" => "Új naptár neve",
"Import" => "Importálás",
-"Importing calendar" => "Naptár importálása",
-"Calendar imported successfully" => "Naptár sikeresen importálva",
"Close Dialog" => "Párbeszédablak bezárása",
"Create a new event" => "Új esemény létrehozása",
"View an event" => "Esemény megtekintése",
"No categories selected" => "Nincs kiválasztott kategória",
-"Select category" => "Kategória kiválasztása",
"of" => ", tulaj ",
"at" => ", ",
"Timezone" => "Időzóna",
-"Check always for changes of the timezone" => "Mindig ellenőrizze az időzóna-változásokat",
-"Timeformat" => "Időformátum",
"24h" => "24h",
"12h" => "12h",
-"First day of the week" => "A hét első napja",
-"Calendar CalDAV syncing address:" => "Naptár CalDAV szinkronizálási cím:",
"Users" => "Felhasználók",
"select users" => "válassz felhasználókat",
"Editable" => "Szerkeszthető",
diff --git a/apps/calendar/l10n/ia.php b/apps/calendar/l10n/ia.php
index a346e4de5b7..84c36536b95 100644
--- a/apps/calendar/l10n/ia.php
+++ b/apps/calendar/l10n/ia.php
@@ -16,6 +16,7 @@
"Questions" => "Demandas",
"Work" => "Travalio",
"unnamed" => "sin nomine",
+"New Calendar" => "Nove calendario",
"Does not repeat" => "Non repite",
"Daily" => "Quotidian",
"Weekly" => "Septimanal",
@@ -51,7 +52,6 @@
"by day and month" => "per dia e mense",
"Date" => "Data",
"All day" => "Omne die",
-"New Calendar" => "Nove calendario",
"Missing fields" => "Campos incomplete",
"Title" => "Titulo",
"From Date" => "Data de initio",
@@ -62,8 +62,6 @@
"Month" => "Mense",
"List" => "Lista",
"Today" => "Hodie",
-"Calendars" => "Calendarios",
-"Choose active calendars" => "Selectionar calendarios active",
"Your calendars" => "Tu calendarios",
"Download" => "Discarga",
"Edit" => "Modificar",
@@ -96,20 +94,17 @@
"Select weeks" => "Seliger septimanas",
"Interval" => "Intervallo",
"End" => "Fin",
-"Import a calendar file" => "Importar un file de calendario",
-"Please choose the calendar" => "Selige el calendario",
"create a new calendar" => "crear un nove calendario",
+"Import a calendar file" => "Importar un file de calendario",
"Name of new calendar" => "Nomine del calendario",
"Import" => "Importar",
"Close Dialog" => "Clauder dialogo",
"Create a new event" => "Crear un nove evento",
"View an event" => "Vide un evento",
"No categories selected" => "Nulle categorias seligite",
-"Select category" => "Selectionar categoria",
"of" => "de",
"at" => "in",
"Timezone" => "Fuso horari",
-"First day of the week" => "Prime die del septimana",
"Users" => "Usatores",
"Groups" => "Gruppos"
);
diff --git a/apps/calendar/l10n/id.php b/apps/calendar/l10n/id.php
index ac0734abba4..865c2118fac 100644
--- a/apps/calendar/l10n/id.php
+++ b/apps/calendar/l10n/id.php
@@ -14,9 +14,6 @@
"Week" => "Minggu",
"Month" => "Bulan",
"Today" => "Hari ini",
-"Calendars" => "Kalender",
-"There was a fail, while parsing the file." => "Terjadi kesalahan, saat mengurai berkas.",
-"Choose active calendars" => "Pilih kalender aktif",
"Download" => "Unduh",
"Edit" => "Sunting",
"Edit calendar" => "Sunting kalender",
diff --git a/apps/calendar/l10n/it.php b/apps/calendar/l10n/it.php
index cdb2d99c82e..04e10b582bf 100644
--- a/apps/calendar/l10n/it.php
+++ b/apps/calendar/l10n/it.php
@@ -1,12 +1,23 @@
<?php $TRANSLATIONS = array(
+"Not all calendars are completely cached" => "Non tutti i calendari sono mantenuti completamente in cache",
+"Everything seems to be completely cached" => "Tutto sembra essere mantenuto completamente in cache",
"No calendars found." => "Nessun calendario trovato.",
"No events found." => "Nessun evento trovato.",
"Wrong calendar" => "Calendario sbagliato",
+"The file contained either no events or all events are already saved in your calendar." => "Il file non conteneva alcun evento o tutti gli eventi erano già salvati nel tuo calendario.",
+"events has been saved in the new calendar" => "gli eventi sono stati salvati nel nuovo calendario",
+"Import failed" => "Importazione non riuscita",
+"events has been saved in your calendar" => "gli eventi sono stati salvati nel tuo calendario",
"New Timezone:" => "Nuovo fuso orario:",
"Timezone changed" => "Fuso orario cambiato",
"Invalid request" => "Richiesta non valida",
"Calendar" => "Calendario",
+"ddd" => "ddd",
+"ddd M/d" => "ddd d/M",
+"dddd M/d" => "dddd d/M",
+"MMMM yyyy" => "MMMM yyyy",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"dddd, MMM d, yyyy" => "dddd, d MMM yyyy",
"Birthday" => "Compleanno",
"Business" => "Azienda",
"Call" => "Chiama",
@@ -22,7 +33,9 @@
"Projects" => "Progetti",
"Questions" => "Domande",
"Work" => "Lavoro",
+"by" => "da",
"unnamed" => "senza nome",
+"New Calendar" => "Nuovo calendario",
"Does not repeat" => "Non ripetere",
"Daily" => "Giornaliero",
"Weekly" => "Settimanale",
@@ -67,8 +80,26 @@
"by day and month" => "per giorno e mese",
"Date" => "Data",
"Cal." => "Cal.",
+"Sun." => "Dom.",
+"Mon." => "Lun.",
+"Tue." => "Mar.",
+"Wed." => "Mer.",
+"Thu." => "Gio.",
+"Fri." => "Ven.",
+"Sat." => "Sab.",
+"Jan." => "Gen.",
+"Feb." => "Feb.",
+"Mar." => "Mar.",
+"Apr." => "Apr.",
+"May." => "Mag.",
+"Jun." => "Giu.",
+"Jul." => "Lug.",
+"Aug." => "Ago.",
+"Sep." => "Set.",
+"Oct." => "Ott.",
+"Nov." => "Nov.",
+"Dec." => "Dic.",
"All day" => "Tutti il giorno",
-"New Calendar" => "Nuovo calendario",
"Missing fields" => "Campi mancanti",
"Title" => "Titolo",
"From Date" => "Dal giorno",
@@ -81,9 +112,7 @@
"Month" => "Mese",
"List" => "Elenco",
"Today" => "Oggi",
-"Calendars" => "Calendari",
-"There was a fail, while parsing the file." => "Si è verificato un errore durante l'analisi del file.",
-"Choose active calendars" => "Scegli i calendari attivi",
+"Settings" => "Impostazioni",
"Your calendars" => "I tuoi calendari",
"CalDav Link" => "Collegamento CalDav",
"Shared calendars" => "Calendari condivisi",
@@ -110,7 +139,7 @@
"Share" => "Condividi",
"Title of the Event" => "Titolo dell'evento",
"Category" => "Categoria",
-"Separate categories with commas" => "Categorie separate con virgole",
+"Separate categories with commas" => "Categorie separate da virgole",
"Edit categories" => "Modifica le categorie",
"All Day Event" => "Evento che occupa tutta la giornata",
"From" => "Da",
@@ -132,27 +161,34 @@
"Interval" => "Intervallo",
"End" => "Fine",
"occurrences" => "occorrenze",
-"Import a calendar file" => "Importa un file di calendario",
-"Please choose the calendar" => "Scegli il calendario",
"create a new calendar" => "Crea un nuovo calendario",
+"Import a calendar file" => "Importa un file di calendario",
+"Please choose a calendar" => "Scegli un calendario",
"Name of new calendar" => "Nome del nuovo calendario",
+"Take an available name!" => "Usa un nome disponibile!",
+"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Un calendario con questo nome esiste già. Se continui, i due calendari saranno uniti.",
"Import" => "Importa",
-"Importing calendar" => "Importazione del calendario in corso",
-"Calendar imported successfully" => "Calendario importato correttamente",
"Close Dialog" => "Chiudi la finestra di dialogo",
"Create a new event" => "Crea un nuovo evento",
"View an event" => "Visualizza un evento",
"No categories selected" => "Nessuna categoria selezionata",
-"Select category" => "Seleziona una categoria",
"of" => "di",
"at" => "alle",
+"General" => "Generale",
"Timezone" => "Fuso orario",
-"Check always for changes of the timezone" => "Controlla sempre i cambiamenti di fuso orario",
-"Timeformat" => "Formato orario",
+"Update timezone automatically" => "Aggiorna automaticamente il fuso orario",
+"Time format" => "Formato orario",
"24h" => "24h",
"12h" => "12h",
-"First day of the week" => "Primo giorno della settimana",
-"Calendar CalDAV syncing address:" => "Indirizzo sincronizzazione calendario CalDAV:",
+"Start week on" => "La settimana inizia il",
+"Cache" => "Cache",
+"Clear cache for repeating events" => "Cancella gli eventi che si ripetono dalla cache",
+"URLs" => "URL",
+"Calendar CalDAV syncing addresses" => "Indirizzi di sincronizzazione calendari CalDAV",
+"more info" => "ulteriori informazioni",
+"Primary address (Kontact et al)" => "Indirizzo principale (Kontact e altri)",
+"iOS/OS X" => "iOS/OS X",
+"Read only iCalendar link(s)" => "Collegamento(i) iCalendar sola lettura",
"Users" => "Utenti",
"select users" => "seleziona utenti",
"Editable" => "Modificabile",
diff --git a/apps/calendar/l10n/ja_JP.php b/apps/calendar/l10n/ja_JP.php
index c533a9bd1a7..e59f186a0b2 100644
--- a/apps/calendar/l10n/ja_JP.php
+++ b/apps/calendar/l10n/ja_JP.php
@@ -1,12 +1,23 @@
<?php $TRANSLATIONS = array(
+"Not all calendars are completely cached" => "ã™ã¹ã¦ã®ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã¯å®Œå…¨ã«ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã•ã‚Œã¦ã„ã¾ã›ã‚“",
+"Everything seems to be completely cached" => "ã™ã¹ã¦å®Œå…¨ã«ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã•ã‚Œã¦ã„ã‚‹ã¨æ€ã‚ã‚Œã¾ã™",
"No calendars found." => "カレンダーãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚",
"No events found." => "イベントãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚",
"Wrong calendar" => "誤ã£ãŸã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã§ã™",
+"The file contained either no events or all events are already saved in your calendar." => "イベントã®ç„¡ã„ã‚‚ã—ãã¯ã™ã¹ã¦ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’å«ã‚€ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ—¢ã«ã‚ãªãŸã®ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã«ä¿å­˜ã•ã‚Œã¦ã„ã¾ã™ã€‚",
+"events has been saved in the new calendar" => "イベントã¯æ–°ã—ã„カレンダーã«ä¿å­˜ã•ã‚Œã¾ã—ãŸ",
+"Import failed" => "インãƒãƒ¼ãƒˆã«å¤±æ•—",
+"events has been saved in your calendar" => "イベントã¯ã‚ãªãŸã®ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã«ä¿å­˜ã•ã‚Œã¾ã—ãŸ",
"New Timezone:" => "æ–°ã—ã„タイムゾーン:",
"Timezone changed" => "タイムゾーンãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ",
"Invalid request" => "無効ãªãƒªã‚¯ã‚¨ã‚¹ãƒˆã§ã™",
"Calendar" => "カレンダー",
-"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"ddd" => "dddd",
+"ddd M/d" => "M月d日 (dddd)",
+"dddd M/d" => "M月d日 (dddd)",
+"MMMM yyyy" => "yyyy年M月",
+"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "yyyy年M月d日{ '~' [yyyy年][M月]d日}",
+"dddd, MMM d, yyyy" => "yyyy年M月d日 (dddd)",
"Birthday" => "誕生日",
"Business" => "ビジãƒã‚¹",
"Call" => "電話をã‹ã‘ã‚‹",
@@ -22,6 +33,9 @@
"Projects" => "プロジェクト",
"Questions" => "質å•äº‹é …",
"Work" => "週ã®å§‹ã¾ã‚Š",
+"by" => "ã«ã‚ˆã‚‹",
+"unnamed" => "ç„¡å",
+"New Calendar" => "æ–°ã—ãカレンダーを作æˆ",
"Does not repeat" => "ç¹°ã‚Šè¿”ã•ãªã„",
"Daily" => "毎日",
"Weekly" => "毎週",
@@ -34,13 +48,13 @@
"by date" => "日付ã§æŒ‡å®š",
"by monthday" => "æ—¥ã«ã¡ã§æŒ‡å®š",
"by weekday" => "曜日ã§æŒ‡å®š",
-"Monday" => "月曜",
-"Tuesday" => "ç«æ›œ",
-"Wednesday" => "水曜",
-"Thursday" => "木曜",
-"Friday" => "金曜",
-"Saturday" => "土曜",
-"Sunday" => "日曜",
+"Monday" => "月",
+"Tuesday" => "ç«",
+"Wednesday" => "æ°´",
+"Thursday" => "木",
+"Friday" => "金",
+"Saturday" => "土",
+"Sunday" => "æ—¥",
"events week of month" => "予定ã®ã‚る週を指定",
"first" => "1週目",
"second" => "2週目",
@@ -48,26 +62,45 @@
"fourth" => "4週目",
"fifth" => "5週目",
"last" => "最終週",
-"January" => "1月",
-"February" => "2月",
-"March" => "3月",
-"April" => "4月",
-"May" => "5月",
-"June" => "6月",
-"July" => "7月",
-"August" => "8月",
-"September" => "9月",
-"October" => "1ï¼æœˆ",
-"November" => "11月",
-"December" => "12月",
+"January" => "1月",
+"February" => "2月",
+"March" => "3月",
+"April" => "4月",
+"May" => "5月",
+"June" => "6月",
+"July" => "7月",
+"August" => "8月",
+"September" => "9月",
+"October" => "10月",
+"November" => "11月",
+"December" => "12月",
"by events date" => "日付ã§æŒ‡å®š",
"by yearday(s)" => "日番å·ã§æŒ‡å®š",
"by weeknumber(s)" => "週番å·ã§æŒ‡å®š",
"by day and month" => "月ã¨æ—¥ã§æŒ‡å®š",
"Date" => "日付",
"Cal." => "カレンダー",
+"Sun." => "æ—¥",
+"Mon." => "月",
+"Tue." => "ç«",
+"Wed." => "æ°´",
+"Thu." => "木",
+"Fri." => "金",
+"Sat." => "土",
+"Jan." => "1月",
+"Feb." => "2月",
+"Mar." => "3月",
+"Apr." => "4月",
+"May." => "5月",
+"Jun." => "6月",
+"Jul." => "7月",
+"Aug." => "8月",
+"Sep." => "9月",
+"Oct." => "10月",
+"Nov." => "11月",
+"Dec." => "12月",
"All day" => "終日",
-"New Calendar" => "æ–°ã—ãカレンダーを作æˆ",
+"New Calendar" => "æ–°ã—ãカレンダーを作æˆã™ã‚‹",
"Missing fields" => "é …ç›®ãŒã‚ã‚Šã¾ã›ã‚“",
"Title" => "タイトル",
"From Date" => "開始日",
@@ -78,11 +111,9 @@
"There was a database fail" => "データベースã®ã‚¨ãƒ©ãƒ¼ãŒã‚ã‚Šã¾ã—ãŸ",
"Week" => "週",
"Month" => "月",
-"List" => "リスト",
+"List" => "予定リスト",
"Today" => "今日",
-"Calendars" => "カレンダー",
-"There was a fail, while parsing the file." => "ファイルã®æ§‹æ–‡è§£æžã«å¤±æ•—ã—ã¾ã—ãŸã€‚",
-"Choose active calendars" => "アクティブãªã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã‚’é¸æŠž",
+"Settings" => "設定",
"Your calendars" => "ã‚ãªãŸã®ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼",
"CalDav Link" => "CalDavã¸ã®ãƒªãƒ³ã‚¯",
"Shared calendars" => "共有カレンダー",
@@ -91,6 +122,7 @@
"Download" => "ダウンロード",
"Edit" => "編集",
"Delete" => "削除",
+"shared with you by" => "共有者",
"New calendar" => "æ–°ã—ã„カレンダー",
"Edit calendar" => "カレンダーを編集",
"Displayname" => "表示å",
@@ -130,27 +162,34 @@
"Interval" => "é–“éš”",
"End" => "ç¹°ã‚Šè¿”ã™æœŸé–“",
"occurrences" => "回繰り返ã™",
-"Import a calendar file" => "カレンダーファイルをインãƒãƒ¼ãƒˆ",
-"Please choose the calendar" => "カレンダーをé¸æŠžã—ã¦ãã ã•ã„",
"create a new calendar" => "æ–°è¦ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã®ä½œæˆ",
+"Import a calendar file" => "カレンダーファイルをインãƒãƒ¼ãƒˆ",
+"Please choose a calendar" => "カレンダーをé¸æŠžã—ã¦ãã ã•ã„",
"Name of new calendar" => "æ–°è¦ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã®å称",
+"Take an available name!" => "利用å¯èƒ½ãªåå‰ã‚’指定ã—ã¦ãã ã•ã„ï¼",
+"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "ã“ã®ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼åã¯ã™ã§ã«ä½¿ã‚ã‚Œã¦ã„ã¾ã™ã€‚ã‚‚ã—続行ã™ã‚‹å ´åˆã¯ã€ã“れらã®ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã¯ãƒžãƒ¼ã‚¸ã•ã‚Œã¾ã™ã€‚",
"Import" => "インãƒãƒ¼ãƒˆ",
-"Importing calendar" => "カレンダーをå–ã‚Šè¾¼ã¿ä¸­",
-"Calendar imported successfully" => "カレンダーã®å–ã‚Šè¾¼ã¿ã«æˆåŠŸã—ã¾ã—ãŸ",
"Close Dialog" => "ダイアログを閉ã˜ã‚‹",
"Create a new event" => "æ–°ã—ã„イベントを作æˆ",
"View an event" => "イベントを閲覧",
"No categories selected" => "カテゴリãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“",
-"Select category" => "カテゴリーをé¸æŠžã—ã¦ãã ã•ã„",
"of" => "of",
"at" => "at",
+"General" => "一般",
"Timezone" => "タイムゾーン",
-"Check always for changes of the timezone" => "タイムゾーンã®å¤‰æ›´ã‚’常ã«ç¢ºèª",
-"Timeformat" => "時刻ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆ",
+"Update timezone automatically" => "自動的ã«ã‚¿ã‚¤ãƒ ã‚¾ãƒ¼ãƒ³ã‚’æ›´æ–°",
+"Time format" => "時刻ã®è¡¨ç¤ºå½¢å¼",
"24h" => "24h",
"12h" => "12h",
-"First day of the week" => "週ã®å§‹ã¾ã‚Š",
-"Calendar CalDAV syncing address:" => "CalDAVカレンダーã®åŒæœŸã‚¢ãƒ‰ãƒ¬ã‚¹:",
+"Start week on" => "1週間ã®åˆã‚ã®æ›œæ—¥",
+"Cache" => "キャッシュ",
+"Clear cache for repeating events" => "ç¹°ã‚Šè¿”ã—イベントã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’クリア",
+"URLs" => "URL",
+"Calendar CalDAV syncing addresses" => "CalDAVカレンダーã®åŒæœŸç”¨ã‚¢ãƒ‰ãƒ¬ã‚¹",
+"more info" => "ã•ã‚‰ã«",
+"Primary address (Kontact et al)" => "プライマリアドレス(コンタクト等)",
+"iOS/OS X" => "iOS/OS X",
+"Read only iCalendar link(s)" => "読ã¿å–り専用ã®iCalendarリンク",
"Users" => "ユーザ",
"select users" => "ユーザをé¸æŠž",
"Editable" => "編集å¯èƒ½",
diff --git a/apps/calendar/l10n/ko.php b/apps/calendar/l10n/ko.php
index 181bfa4378f..77e421d4aab 100644
--- a/apps/calendar/l10n/ko.php
+++ b/apps/calendar/l10n/ko.php
@@ -6,6 +6,12 @@
"Timezone changed" => "시간대 변경ë¨",
"Invalid request" => "ìž˜ëª»ëœ ìš”ì²­",
"Calendar" => "달력",
+"ddd" => "ddd",
+"ddd M/d" => "ddd M/d",
+"dddd M/d" => "dddd M/d",
+"MMMM yyyy" => "MMMM yyyy",
+"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy",
"Birthday" => "ìƒì¼",
"Business" => "사업",
"Call" => "통화",
@@ -22,6 +28,7 @@
"Questions" => "질문",
"Work" => "ìž‘ì—…",
"unnamed" => "ìµëª…ì˜",
+"New Calendar" => "새로운 달력",
"Does not repeat" => "반복 ì—†ìŒ",
"Daily" => "매ì¼",
"Weekly" => "매주",
@@ -67,7 +74,6 @@
"Date" => "날짜",
"Cal." => "달력",
"All day" => "매ì¼",
-"New Calendar" => "새로운 달력",
"Missing fields" => "ê¸°ìž…ëž€ì´ ë¹„ì–´ìžˆìŠµë‹ˆë‹¤",
"Title" => "제목",
"From Date" => "시작날짜",
@@ -80,9 +86,6 @@
"Month" => "달",
"List" => "목ë¡",
"Today" => "오늘",
-"Calendars" => "달력",
-"There was a fail, while parsing the file." => "파ì¼ì„ 처리하는 중 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤.",
-"Choose active calendars" => "활성 달력 ì„ íƒ",
"Your calendars" => "내 달력",
"CalDav Link" => "CalDav ë§í¬",
"Shared calendars" => "공유 달력",
@@ -131,27 +134,19 @@
"Interval" => "간격",
"End" => "ë",
"occurrences" => "번 ì´í›„",
-"Import a calendar file" => "달력 íŒŒì¼ ê°€ì ¸ì˜¤ê¸°",
-"Please choose the calendar" => "ë‹¬ë ¥ì„ ì„ íƒí•´ 주세요",
"create a new calendar" => "새 달력 만들기",
+"Import a calendar file" => "달력 íŒŒì¼ ê°€ì ¸ì˜¤ê¸°",
"Name of new calendar" => "새 달력 ì´ë¦„",
"Import" => "ìž…ë ¥",
-"Importing calendar" => "달력 입력",
-"Calendar imported successfully" => "달력 ìž…ë ¥ì„ ì„±ê³µì ìœ¼ë¡œ 마쳤습니다.",
"Close Dialog" => "대화 마침",
"Create a new event" => "새 ì´ë²¤íŠ¸ 만들기",
"View an event" => "ì¼ì • 보기",
"No categories selected" => "ì„ íƒëœ 카테고리 ì—†ìŒ",
-"Select category" => "ì„ íƒ ì¹´í…Œê³ ë¦¬",
"of" => "ì˜",
"at" => "ì—ì„œ",
"Timezone" => "시간대",
-"Check always for changes of the timezone" => "í•­ìƒ ì‹œê°„ëŒ€ 변경 확ì¸í•˜ê¸°",
-"Timeformat" => "시간 í˜•ì‹ ì„¤ì •",
"24h" => "24시간",
"12h" => "12시간",
-"First day of the week" => "ê·¸ ì£¼ì˜ ì²«ì§¸ë‚ ",
-"Calendar CalDAV syncing address:" => "달력 CalDav ë™ê¸°í™” 주소",
"Users" => "사용ìž",
"select users" => "ì‚¬ìš©ìž ì„ íƒ",
"Editable" => "편집 가능",
diff --git a/apps/calendar/l10n/lb.php b/apps/calendar/l10n/lb.php
index b40f652cc50..6e96b5df18d 100644
--- a/apps/calendar/l10n/lb.php
+++ b/apps/calendar/l10n/lb.php
@@ -22,6 +22,7 @@
"Projects" => "Projeten",
"Questions" => "Froen",
"Work" => "Aarbecht",
+"New Calendar" => "Neien Kalenner",
"Does not repeat" => "Widderhëlt sech net",
"Daily" => "Deeglech",
"Weekly" => "All Woch",
@@ -62,7 +63,6 @@
"Date" => "Datum",
"Cal." => "Cal.",
"All day" => "All Dag",
-"New Calendar" => "Neien Kalenner",
"Missing fields" => "Felder déi feelen",
"Title" => "Titel",
"From Date" => "Vun Datum",
@@ -75,9 +75,6 @@
"Month" => "Mount",
"List" => "Lescht",
"Today" => "Haut",
-"Calendars" => "Kalenneren",
-"There was a fail, while parsing the file." => "Feeler beim lueden vum Fichier.",
-"Choose active calendars" => "Wiel aktiv Kalenneren aus",
"Your calendars" => "Deng Kalenneren",
"CalDav Link" => "CalDav Link",
"Shared calendars" => "Gedeelte Kalenneren",
diff --git a/apps/calendar/l10n/lt_LT.php b/apps/calendar/l10n/lt_LT.php
index d7e15fb438f..408718071e2 100644
--- a/apps/calendar/l10n/lt_LT.php
+++ b/apps/calendar/l10n/lt_LT.php
@@ -23,6 +23,7 @@
"Questions" => "Klausimai",
"Work" => "Darbas",
"unnamed" => "be pavadinimo",
+"New Calendar" => "Naujas kalendorius",
"Does not repeat" => "Nekartoti",
"Daily" => "Kasdien",
"Weekly" => "KiekvienÄ… savaitÄ™",
@@ -56,7 +57,6 @@
"Date" => "Data",
"Cal." => "Kal.",
"All day" => "Visa diena",
-"New Calendar" => "Naujas kalendorius",
"Missing fields" => "Trūkstami laukai",
"Title" => "Pavadinimas",
"From Date" => "Nuo datos",
@@ -69,9 +69,6 @@
"Month" => "MÄ—nuo",
"List" => "Sąrašas",
"Today" => "Å iandien",
-"Calendars" => "Kalendoriai",
-"There was a fail, while parsing the file." => "Apdorojant failą įvyko klaida.",
-"Choose active calendars" => "Pasirinkite naudojamus kalendorius",
"Your calendars" => "Jūsų kalendoriai",
"CalDav Link" => "CalDav adresas",
"Shared calendars" => "Bendri kalendoriai",
@@ -92,6 +89,7 @@
"Export" => "Eksportuoti",
"Eventinfo" => "Informacija",
"Repeating" => "Pasikartojantis",
+"Alarm" => "Priminimas",
"Attendees" => "Dalyviai",
"Share" => "Dalintis",
"Title of the Event" => "Įvykio pavadinimas",
@@ -113,6 +111,7 @@
"Select weeks" => "Pasirinkite savaites",
"Interval" => "Intervalas",
"End" => "Pabaiga",
+"create a new calendar" => "sukurti naują kalendorių",
"Import a calendar file" => "Importuoti kalendoriaus failÄ…",
"Please choose the calendar" => "Pasirinkite kalendorių",
"create a new calendar" => "sukurti naują kalendorių",
@@ -124,13 +123,11 @@
"Create a new event" => "Sukurti naują įvykį",
"View an event" => "Peržiūrėti įvykį",
"No categories selected" => "Nepasirinktos jokios katagorijos",
-"Select category" => "Pasirinkite kategorijÄ…",
"Timezone" => "Laiko juosta",
"Check always for changes of the timezone" => "Visada tikrinti laiko zonos pasikeitimus",
"Timeformat" => "Laiko formatas",
"24h" => "24val",
"12h" => "12val",
-"Calendar CalDAV syncing address:" => "CalDAV kalendoriaus synchronizavimo adresas:",
"Users" => "Vartotojai",
"select users" => "pasirinkti vartotojus",
"Editable" => "Redaguojamas",
diff --git a/apps/calendar/l10n/mk.php b/apps/calendar/l10n/mk.php
index 41df376dfa6..1a03101fe51 100644
--- a/apps/calendar/l10n/mk.php
+++ b/apps/calendar/l10n/mk.php
@@ -6,7 +6,12 @@
"Timezone changed" => "ВременÑката зона е променета",
"Invalid request" => "Ðеправилно барање",
"Calendar" => "Календар",
+"ddd" => "ддд",
+"ddd M/d" => "ддд М/д",
+"dddd M/d" => "дддд М/д",
+"MMMM yyyy" => "ММММ гггг",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"dddd, MMM d, yyyy" => "дддд, МММ д, гггг",
"Birthday" => "Роденден",
"Business" => "Деловно",
"Call" => "Повикај",
@@ -23,6 +28,7 @@
"Questions" => "Прашања",
"Work" => "Работа",
"unnamed" => "неименувано",
+"New Calendar" => "Ðов календар",
"Does not repeat" => "Ðе Ñе повторува",
"Daily" => "Дневно",
"Weekly" => "Седмично",
@@ -68,7 +74,6 @@
"Date" => "Датум",
"Cal." => "Кал.",
"All day" => "Цел ден",
-"New Calendar" => "Ðов календар",
"Missing fields" => "Полиња кои недоÑтаÑуваат",
"Title" => "ÐаÑлов",
"From Date" => "Од датум",
@@ -81,9 +86,6 @@
"Month" => "МеÑец",
"List" => "ЛиÑта",
"Today" => "ДенеÑка",
-"Calendars" => "Календари",
-"There was a fail, while parsing the file." => "Имаше проблем при парÑирање на датотеката.",
-"Choose active calendars" => "Избери активни календари",
"Your calendars" => "Ваши календари",
"CalDav Link" => "Ð’Ñ€Ñка за CalDav",
"Shared calendars" => "Споделени календари",
@@ -132,27 +134,19 @@
"Interval" => "интервал",
"End" => "Крај",
"occurrences" => "повторувања",
-"Import a calendar file" => "ВнеÑи календар од датотека ",
-"Please choose the calendar" => "Ве молам изберете го календарот",
"create a new calendar" => "Ñоздади нов календар",
+"Import a calendar file" => "ВнеÑи календар од датотека ",
"Name of new calendar" => "Име на новиот календар",
"Import" => "Увези",
-"Importing calendar" => "Увезување на календар",
-"Calendar imported successfully" => "Календарот беше уÑпешно увезен",
"Close Dialog" => "Затвори дијалог",
"Create a new event" => "Создади нов наÑтан",
"View an event" => "Погледај наÑтан",
"No categories selected" => "Ðема избрано категории",
-"Select category" => "Избери категорија",
"of" => "од",
"at" => "на",
"Timezone" => "ВременÑка зона",
-"Check always for changes of the timezone" => "Секогаш провери за промени на временÑката зона",
-"Timeformat" => "Формат на времето",
"24h" => "24ч",
"12h" => "12ч",
-"First day of the week" => "Прв ден од Ñедмицата",
-"Calendar CalDAV syncing address:" => "CalDAV календар адреÑата за Ñинхронизација:",
"Users" => "КориÑници",
"select users" => "избери кориÑници",
"Editable" => "Изменливо",
diff --git a/apps/calendar/l10n/ms_MY.php b/apps/calendar/l10n/ms_MY.php
index 2cb3ac41c30..4be91a40194 100644
--- a/apps/calendar/l10n/ms_MY.php
+++ b/apps/calendar/l10n/ms_MY.php
@@ -1,9 +1,17 @@
<?php $TRANSLATIONS = array(
+"No calendars found." => "Tiada kalendar dijumpai.",
+"No events found." => "Tiada agenda dijumpai.",
"Wrong calendar" => "Silap kalendar",
"New Timezone:" => "Timezone Baru",
"Timezone changed" => "Zon waktu diubah",
"Invalid request" => "Permintaan tidak sah",
"Calendar" => "Kalendar",
+"ddd" => "ddd",
+"ddd M/d" => "dd M/d",
+"dddd M/d" => "dddd M/d",
+"MMMM yyyy" => "MMMM yyyy",
+"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"dddd, MMM d, yyyy" => "dddd, MMM d, yyy",
"Birthday" => "Hari lahir",
"Business" => "Perniagaan",
"Call" => "Panggilan",
@@ -19,6 +27,8 @@
"Projects" => "Projek",
"Questions" => "Soalan",
"Work" => "Kerja",
+"unnamed" => "tiada nama",
+"New Calendar" => "Kalendar baru",
"Does not repeat" => "Tidak berulang",
"Daily" => "Harian",
"Weekly" => "Mingguan",
@@ -64,7 +74,6 @@
"Date" => "Tarikh",
"Cal." => "Kalendar",
"All day" => "Sepanjang hari",
-"New Calendar" => "Kalendar baru",
"Missing fields" => "Ruangan tertinggal",
"Title" => "Tajuk",
"From Date" => "Dari tarikh",
@@ -77,13 +86,15 @@
"Month" => "Bulan",
"List" => "Senarai",
"Today" => "Hari ini",
-"Calendars" => "Kalendar",
-"There was a fail, while parsing the file." => "Berlaku kegagalan ketika penguraian fail. ",
-"Choose active calendars" => "Pilih kalendar yang aktif",
+"Your calendars" => "Kalendar anda",
"CalDav Link" => "Pautan CalDav",
+"Shared calendars" => "Kalendar Kongsian",
+"No shared calendars" => "Tiada kalendar kongsian",
+"Share Calendar" => "Kongsi Kalendar",
"Download" => "Muat turun",
"Edit" => "Edit",
"Delete" => "Hapus",
+"shared with you by" => "dikongsi dengan kamu oleh",
"New calendar" => "Kalendar baru",
"Edit calendar" => "Edit kalendar",
"Displayname" => "Paparan nama",
@@ -94,8 +105,15 @@
"Cancel" => "Batal",
"Edit an event" => "Edit agenda",
"Export" => "Export",
+"Eventinfo" => "Maklumat agenda",
+"Repeating" => "Pengulangan",
+"Alarm" => "Penggera",
+"Attendees" => "Jemputan",
+"Share" => "Berkongsi",
"Title of the Event" => "Tajuk agenda",
"Category" => "kategori",
+"Separate categories with commas" => "Asingkan kategori dengan koma",
+"Edit categories" => "Sunting Kategori",
"All Day Event" => "Agenda di sepanjang hari ",
"From" => "Dari",
"To" => "ke",
@@ -116,20 +134,23 @@
"Interval" => "Tempoh",
"End" => "Tamat",
"occurrences" => "Peristiwa",
-"Import a calendar file" => "Import fail kalendar",
-"Please choose the calendar" => "Sila pilih kalendar",
"create a new calendar" => "Cipta kalendar baru",
+"Import a calendar file" => "Import fail kalendar",
"Name of new calendar" => "Nama kalendar baru",
"Import" => "Import",
-"Importing calendar" => "Import kalendar",
-"Calendar imported successfully" => "Kalendar berjaya diimport",
"Close Dialog" => "Tutup dialog",
"Create a new event" => "Buat agenda baru",
-"Select category" => "Pilih kategori",
+"View an event" => "Papar peristiwa",
+"No categories selected" => "Tiada kategori dipilih",
+"of" => "dari",
+"at" => "di",
"Timezone" => "Zon waktu",
-"Check always for changes of the timezone" => "Sentiasa mengemaskini perubahan zon masa",
-"Timeformat" => "Timeformat",
"24h" => "24h",
"12h" => "12h",
-"Calendar CalDAV syncing address:" => "Kelendar CalDAV mengemaskini alamat:"
+"Users" => "Pengguna",
+"select users" => "Pilih pengguna",
+"Editable" => "Boleh disunting",
+"Groups" => "Kumpulan-kumpulan",
+"select groups" => "pilih kumpulan-kumpulan",
+"make public" => "jadikan tontonan awam"
);
diff --git a/apps/calendar/l10n/nb_NO.php b/apps/calendar/l10n/nb_NO.php
index 95ba5a9dba2..8f736869de1 100644
--- a/apps/calendar/l10n/nb_NO.php
+++ b/apps/calendar/l10n/nb_NO.php
@@ -8,6 +8,7 @@
"Calendar" => "Kalender",
"Birthday" => "Bursdag",
"Business" => "Forretninger",
+"Call" => "Ring",
"Clients" => "Kunder",
"Holidays" => "Ferie",
"Ideas" => "Ideér",
@@ -20,6 +21,7 @@
"Questions" => "Spørsmål",
"Work" => "Arbeid",
"unnamed" => "uten navn",
+"New Calendar" => "Ny kalender",
"Does not repeat" => "Gjentas ikke",
"Daily" => "Daglig",
"Weekly" => "Ukentlig",
@@ -129,6 +131,7 @@
"Interval" => "Intervall",
"End" => "Slutt",
"occurrences" => "forekomster",
+"create a new calendar" => "Lag en ny kalender",
"Import a calendar file" => "Importer en kalenderfil",
"Please choose the calendar" => "Vennligst velg kalenderen",
"create a new calendar" => "Lag en ny kalender",
@@ -147,7 +150,7 @@
"24h" => "24 t",
"12h" => "12 t",
"First day of the week" => "Ukens første dag",
-"Calendar CalDAV syncing address:" => "Synkroniseringsadresse fo kalender CalDAV:",
+"Calendar CalDAV syncing address:" => "Kalender CalDAV synkroniseringsadresse",
"Users" => "Brukere",
"select users" => "valgte brukere",
"Editable" => "Redigerbar",
diff --git a/apps/calendar/l10n/nl.php b/apps/calendar/l10n/nl.php
index d141a1cc08c..834c0ad9054 100644
--- a/apps/calendar/l10n/nl.php
+++ b/apps/calendar/l10n/nl.php
@@ -6,7 +6,12 @@
"Timezone changed" => "Tijdzone is veranderd",
"Invalid request" => "Ongeldige aanvraag",
"Calendar" => "Kalender",
-"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "d MMM[ yyyy]{ '&#8212;' d[ MMM] yyyy}",
+"ddd" => "ddd",
+"ddd M/d" => "ddd d.M",
+"dddd M/d" => "dddd d.M",
+"MMMM yyyy" => "MMMM yyyy",
+"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "d[ MMM][ yyyy]{ '&#8212;' d MMM yyyy}",
+"dddd, MMM d, yyyy" => "dddd, d. MMM yyyy",
"Birthday" => "Verjaardag",
"Business" => "Zakelijk",
"Call" => "Bellen",
@@ -23,6 +28,7 @@
"Questions" => "Vragen",
"Work" => "Werk",
"unnamed" => "onbekend",
+"New Calendar" => "Nieuwe Kalender",
"Does not repeat" => "Wordt niet herhaald",
"Daily" => "Dagelijks",
"Weekly" => "Wekelijks",
@@ -68,7 +74,6 @@
"Date" => "Datum",
"Cal." => "Cal.",
"All day" => "Hele dag",
-"New Calendar" => "Nieuwe Kalender",
"Missing fields" => "missende velden",
"Title" => "Titel",
"From Date" => "Begindatum",
@@ -81,9 +86,6 @@
"Month" => "Maand",
"List" => "Lijst",
"Today" => "Vandaag",
-"Calendars" => "Kalenders",
-"There was a fail, while parsing the file." => "Er is een fout opgetreden bij het verwerken van het bestand.",
-"Choose active calendars" => "Kies actieve kalenders",
"Your calendars" => "Je kalenders",
"CalDav Link" => "CalDav Link",
"Shared calendars" => "Gedeelde kalenders",
@@ -132,27 +134,19 @@
"Interval" => "Interval",
"End" => "Einde",
"occurrences" => "gebeurtenissen",
-"Import a calendar file" => "Importeer een agenda bestand",
-"Please choose the calendar" => "Kies de kalender",
"create a new calendar" => "Maak een nieuw agenda",
+"Import a calendar file" => "Importeer een agenda bestand",
"Name of new calendar" => "Naam van de nieuwe agenda",
"Import" => "Importeer",
-"Importing calendar" => "Importeer agenda",
-"Calendar imported successfully" => "Agenda succesvol geïmporteerd",
"Close Dialog" => "Sluit venster",
"Create a new event" => "Maak een nieuwe afspraak",
"View an event" => "Bekijk een gebeurtenis",
"No categories selected" => "Geen categorieën geselecteerd",
-"Select category" => "Kies een categorie",
"of" => "van",
"at" => "op",
"Timezone" => "Tijdzone",
-"Check always for changes of the timezone" => "Controleer altijd op aanpassingen van de tijdszone",
-"Timeformat" => "Tijdformaat",
"24h" => "24uur",
"12h" => "12uur",
-"First day of the week" => "Eerste dag van de week",
-"Calendar CalDAV syncing address:" => "CalDAV kalender synchronisatie adres:",
"Users" => "Gebruikers",
"select users" => "kies gebruikers",
"Editable" => "Te wijzigen",
diff --git a/apps/calendar/l10n/nn_NO.php b/apps/calendar/l10n/nn_NO.php
index 79119e8100b..3330cc562bc 100644
--- a/apps/calendar/l10n/nn_NO.php
+++ b/apps/calendar/l10n/nn_NO.php
@@ -19,6 +19,7 @@
"Projects" => "Prosjekt",
"Questions" => "Spørsmål",
"Work" => "Arbeid",
+"New Calendar" => "Ny kalender",
"Does not repeat" => "Ikkje gjenta",
"Daily" => "Kvar dag",
"Weekly" => "Kvar veke",
@@ -64,7 +65,6 @@
"Date" => "Dato",
"Cal." => "Kal.",
"All day" => "Heile dagen",
-"New Calendar" => "Ny kalender",
"Missing fields" => "Manglande felt",
"Title" => "Tittel",
"From Date" => "Frå dato",
@@ -77,9 +77,6 @@
"Month" => "MÃ¥nad",
"List" => "Liste",
"Today" => "I dag",
-"Calendars" => "Kalendarar",
-"There was a fail, while parsing the file." => "Feil ved tolking av fila.",
-"Choose active calendars" => "Vel aktive kalendarar",
"CalDav Link" => "CalDav-lenkje",
"Download" => "Last ned",
"Edit" => "Endra",
@@ -116,20 +113,13 @@
"Interval" => "Intervall",
"End" => "Ende",
"occurrences" => "førekomstar",
-"Import a calendar file" => "Importer ei kalenderfil",
-"Please choose the calendar" => "Venlegast vel kalenderen",
"create a new calendar" => "Lag ny kalender",
+"Import a calendar file" => "Importer ei kalenderfil",
"Name of new calendar" => "Namn for ny kalender",
"Import" => "Importer",
-"Importing calendar" => "Importerar kalender",
-"Calendar imported successfully" => "Kalender importert utan feil",
"Close Dialog" => "Steng dialog",
"Create a new event" => "Opprett ei ny hending",
-"Select category" => "Vel kategori",
"Timezone" => "Tidssone",
-"Check always for changes of the timezone" => "Sjekk alltid for endringar i tidssona",
-"Timeformat" => "Tidsformat",
"24h" => "24t",
-"12h" => "12t",
-"Calendar CalDAV syncing address:" => "Kalender CalDAV synkroniseringsadresse:"
+"12h" => "12t"
);
diff --git a/apps/calendar/l10n/pl.php b/apps/calendar/l10n/pl.php
index e582cdbb9b3..0174bef6fc2 100644
--- a/apps/calendar/l10n/pl.php
+++ b/apps/calendar/l10n/pl.php
@@ -2,11 +2,18 @@
"No calendars found." => "Brak kalendarzy",
"No events found." => "Brak wydzarzeń",
"Wrong calendar" => "Nieprawidłowy kalendarz",
+"Import failed" => "Import nieudany",
+"events has been saved in your calendar" => "zdarzenie zostało zapisane w twoim kalendarzu",
"New Timezone:" => "Nowa strefa czasowa:",
"Timezone changed" => "Zmieniono strefÄ™ czasowÄ…",
"Invalid request" => "Nieprawidłowe żądanie",
"Calendar" => "Kalendarz",
+"ddd" => "ddd",
+"ddd M/d" => "ddd M/d",
+"dddd M/d" => "dddd M/d",
+"MMMM yyyy" => "MMMM rrrr",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"dddd, MMM d, yyyy" => "dddd, MMM d, rrrr",
"Birthday" => "Urodziny",
"Business" => "Interesy",
"Call" => "Rozmowy",
@@ -22,7 +29,9 @@
"Projects" => "Projekty",
"Questions" => "Pytania",
"Work" => "Zawodowe",
+"by" => "przez",
"unnamed" => "nienazwany",
+"New Calendar" => "Nowy kalendarz",
"Does not repeat" => "Brak",
"Daily" => "Codziennie",
"Weekly" => "Tygodniowo",
@@ -67,8 +76,26 @@
"by day and month" => "przez dzień i miesiąc",
"Date" => "Data",
"Cal." => "Kal.",
+"Sun." => "N.",
+"Mon." => "Pn.",
+"Tue." => "Wt.",
+"Wed." => "Åšr.",
+"Thu." => "Cz.",
+"Fri." => "Pt.",
+"Sat." => "S.",
+"Jan." => "Sty.",
+"Feb." => "Lut.",
+"Mar." => "Mar.",
+"Apr." => "Kwi.",
+"May." => "Maj.",
+"Jun." => "Cze.",
+"Jul." => "Lip.",
+"Aug." => "Sie.",
+"Sep." => "Wrz.",
+"Oct." => "Paź.",
+"Nov." => "Lis.",
+"Dec." => "Gru.",
"All day" => "Cały dzień",
-"New Calendar" => "Nowy kalendarz",
"Missing fields" => "BrakujÄ…ce pola",
"Title" => "Nazwa",
"From Date" => "Od daty",
@@ -81,9 +108,6 @@
"Month" => "MiesiÄ…c",
"List" => "Lista",
"Today" => "Dzisiaj",
-"Calendars" => "Kalendarze",
-"There was a fail, while parsing the file." => "Nie udało się przetworzyć pliku.",
-"Choose active calendars" => "Wybór aktywnych kalendarzy",
"Your calendars" => "Twoje kalendarze",
"CalDav Link" => "Wyświetla odnośnik CalDAV",
"Shared calendars" => "Współdzielone kalendarze",
@@ -132,9 +156,9 @@
"Interval" => "Interwał",
"End" => "Koniec",
"occurrences" => "wystÄ…pienia",
-"Import a calendar file" => "Zaimportuj plik kalendarza",
-"Please choose the calendar" => "Proszę wybrać kalendarz",
"create a new calendar" => "stwórz nowy kalendarz",
+"Import a calendar file" => "Zaimportuj plik kalendarza",
+"Please choose a calendar" => "ProszÄ™ wybierz kalendarz",
"Name of new calendar" => "Nazwa kalendarza",
"Import" => "Import",
"Importing calendar" => "Importuje kalendarz",
@@ -143,7 +167,6 @@
"Create a new event" => "Tworzenie nowego wydarzenia",
"View an event" => "Zobacz wydarzenie",
"No categories selected" => "nie zaznaczono kategorii",
-"Select category" => "Wybierz kategoriÄ™",
"of" => "z",
"at" => "w",
"Timezone" => "Strefa czasowa",
@@ -151,8 +174,9 @@
"Timeformat" => "Format czasu",
"24h" => "24h",
"12h" => "12h",
-"First day of the week" => "Pierwszy dzień tygodnia",
-"Calendar CalDAV syncing address:" => "Adres synchronizacji kalendarza CalDAV:",
+"more info" => "więcej informacji",
+"iOS/OS X" => "iOS/OS X",
+"Read only iCalendar link(s)" => "Odczytać tylko linki iCalendar",
"Users" => "Użytkownicy",
"select users" => "wybierz użytkowników",
"Editable" => "Edytowalne",
diff --git a/apps/calendar/l10n/pt_BR.php b/apps/calendar/l10n/pt_BR.php
index 95317eea0f7..b636c19bfe7 100644
--- a/apps/calendar/l10n/pt_BR.php
+++ b/apps/calendar/l10n/pt_BR.php
@@ -6,7 +6,12 @@
"Timezone changed" => "Fuso horário alterado",
"Invalid request" => "Pedido inválido",
"Calendar" => "Calendário",
+"ddd" => "ddd",
+"ddd M/d" => "ddd M/d",
+"dddd M/d" => "dddd M/d",
+"MMMM yyyy" => "MMMM yyyy",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy",
"Birthday" => "Aniversário",
"Business" => "Negócio",
"Call" => "Chamada",
@@ -23,6 +28,7 @@
"Questions" => "Perguntas",
"Work" => "Trabalho",
"unnamed" => "sem nome",
+"New Calendar" => "Novo Calendário",
"Does not repeat" => "Não repetir",
"Daily" => "Diariamente",
"Weekly" => "Semanal",
@@ -68,7 +74,6 @@
"Date" => "Data",
"Cal." => "Cal.",
"All day" => "Todo o dia",
-"New Calendar" => "Novo Calendário",
"Missing fields" => "Campos incompletos",
"Title" => "Título",
"From Date" => "Desde a Data",
@@ -81,9 +86,6 @@
"Month" => "Mês",
"List" => "Lista",
"Today" => "Hoje",
-"Calendars" => "Calendários",
-"There was a fail, while parsing the file." => "Houve uma falha, ao analisar o arquivo.",
-"Choose active calendars" => "Escolha calendários ativos",
"Your calendars" => "Meus Calendários",
"CalDav Link" => "Link para CalDav",
"Shared calendars" => "Calendários Compartilhados",
@@ -132,27 +134,19 @@
"Interval" => "Intervalo",
"End" => "Final",
"occurrences" => "ocorrências",
-"Import a calendar file" => "Importar um arquivo de calendário",
-"Please choose the calendar" => "Por favor, escolha o calendário",
"create a new calendar" => "criar um novo calendário",
+"Import a calendar file" => "Importar um arquivo de calendário",
"Name of new calendar" => "Nome do novo calendário",
"Import" => "Importar",
-"Importing calendar" => "Importar calendário",
-"Calendar imported successfully" => "Calendário importado com sucesso",
"Close Dialog" => "Fechar caixa de diálogo",
"Create a new event" => "Criar um novo evento",
"View an event" => "Visualizar evento",
"No categories selected" => "Nenhuma categoria selecionada",
-"Select category" => "Selecionar categoria",
"of" => "de",
"at" => "para",
"Timezone" => "Fuso horário",
-"Check always for changes of the timezone" => "Verificar sempre mudanças no fuso horário",
-"Timeformat" => "Formato da Hora",
"24h" => "24h",
"12h" => "12h",
-"First day of the week" => "Primeiro dia da semana",
-"Calendar CalDAV syncing address:" => "Sincronização de endereço do calendário CalDAV :",
"Users" => "Usuários",
"select users" => "Selecione usuários",
"Editable" => "Editável",
diff --git a/apps/calendar/l10n/pt_PT.php b/apps/calendar/l10n/pt_PT.php
index 33f85569cca..81bab52e593 100644
--- a/apps/calendar/l10n/pt_PT.php
+++ b/apps/calendar/l10n/pt_PT.php
@@ -1,12 +1,23 @@
<?php $TRANSLATIONS = array(
+"Not all calendars are completely cached" => "Nem todos os calendários estão completamente pré-carregados",
+"Everything seems to be completely cached" => "Parece que tudo está completamente pré-carregado",
"No calendars found." => "Nenhum calendário encontrado.",
"No events found." => "Nenhum evento encontrado.",
"Wrong calendar" => "Calendário errado",
+"The file contained either no events or all events are already saved in your calendar." => "O ficheiro não continha nenhuns eventos ou então todos os eventos já estavam carregados no seu calendário",
+"events has been saved in the new calendar" => "Os eventos foram guardados no novo calendário",
+"Import failed" => "Falha na importação",
+"events has been saved in your calendar" => "Os eventos foram guardados no seu calendário",
"New Timezone:" => "Nova zona horária",
"Timezone changed" => "Zona horária alterada",
"Invalid request" => "Pedido inválido",
"Calendar" => "Calendário",
+"ddd" => "ddd",
+"ddd M/d" => "ddd M/d",
+"dddd M/d" => "dddd M/d",
+"MMMM yyyy" => "MMMM aaaa",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"dddd, MMM d, yyyy" => "dddd, MMM d, aaaa",
"Birthday" => "Dia de anos",
"Business" => "Negócio",
"Call" => "Telefonar",
@@ -22,7 +33,9 @@
"Projects" => "Projetos",
"Questions" => "Perguntas",
"Work" => "Trabalho",
+"by" => "por",
"unnamed" => "não definido",
+"New Calendar" => "Novo calendário",
"Does not repeat" => "Não repete",
"Daily" => "Diário",
"Weekly" => "Semanal",
@@ -67,8 +80,26 @@
"by day and month" => "por dia e mês",
"Date" => "Data",
"Cal." => "Cal.",
+"Sun." => "Dom.",
+"Mon." => "Seg.",
+"Tue." => "ter.",
+"Wed." => "Qua.",
+"Thu." => "Qui.",
+"Fri." => "Sex.",
+"Sat." => "Sáb.",
+"Jan." => "Jan.",
+"Feb." => "Fev,",
+"Mar." => "Mar.",
+"Apr." => "Abr.",
+"May." => "Mai.",
+"Jun." => "Jun.",
+"Jul." => "Jul.",
+"Aug." => "Ago.",
+"Sep." => "Set.",
+"Oct." => "Out.",
+"Nov." => "Nov.",
+"Dec." => "Dez.",
"All day" => "Todo o dia",
-"New Calendar" => "Novo calendário",
"Missing fields" => "Falta campos",
"Title" => "Título",
"From Date" => "Da data",
@@ -81,9 +112,7 @@
"Month" => "Mês",
"List" => "Lista",
"Today" => "Hoje",
-"Calendars" => "Calendários",
-"There was a fail, while parsing the file." => "Houve uma falha durante a análise do ficheiro",
-"Choose active calendars" => "Escolhe calendários ativos",
+"Settings" => "Configurações",
"Your calendars" => "Os seus calendários",
"CalDav Link" => "Endereço CalDav",
"Shared calendars" => "Calendários partilhados",
@@ -132,10 +161,12 @@
"Interval" => "Intervalo",
"End" => "Fim",
"occurrences" => "ocorrências",
-"Import a calendar file" => "Importar um ficheiro de calendário",
-"Please choose the calendar" => "Por favor escolhe o calendário",
"create a new calendar" => "criar novo calendário",
+"Import a calendar file" => "Importar um ficheiro de calendário",
+"Please choose a calendar" => "Escolha um calendário por favor",
"Name of new calendar" => "Nome do novo calendário",
+"Take an available name!" => "Escolha um nome disponível!",
+"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Já existe um Calendário com esse nome. Se mesmo assim continuar, esses calendários serão fundidos.",
"Import" => "Importar",
"Importing calendar" => "A importar calendário",
"Calendar imported successfully" => "Calendário importado com sucesso",
@@ -143,16 +174,23 @@
"Create a new event" => "Criar novo evento",
"View an event" => "Ver um evento",
"No categories selected" => "Nenhuma categoria seleccionada",
-"Select category" => "Selecionar categoria",
"of" => "de",
"at" => "em",
+"General" => "Geral",
"Timezone" => "Zona horária",
-"Check always for changes of the timezone" => "Verificar sempre por alterações na zona horária",
-"Timeformat" => "Formato da hora",
+"Update timezone automatically" => "Actualizar automaticamente o fuso horário",
+"Time format" => "Formato da hora",
"24h" => "24h",
"12h" => "12h",
-"First day of the week" => "Primeiro dia da semana",
-"Calendar CalDAV syncing address:" => "Endereço de sincronização CalDav do calendário",
+"Start week on" => "Começar semana em",
+"Cache" => "Memória de pré-carregamento",
+"Clear cache for repeating events" => "Limpar a memória de pré carregamento para eventos recorrentes",
+"URLs" => "Endereço(s) web",
+"Calendar CalDAV syncing addresses" => "Endereços de sincronização de calendários CalDAV",
+"more info" => "mais informação",
+"Primary address (Kontact et al)" => "Endereço principal (contactos et al.)",
+"iOS/OS X" => "iOS/OS X",
+"Read only iCalendar link(s)" => "Ligaç(ão/ões) só de leitura do iCalendar",
"Users" => "Utilizadores",
"select users" => "Selecione utilizadores",
"Editable" => "Editavel",
diff --git a/apps/calendar/l10n/ro.php b/apps/calendar/l10n/ro.php
index 550afcd102f..696322dd730 100644
--- a/apps/calendar/l10n/ro.php
+++ b/apps/calendar/l10n/ro.php
@@ -23,6 +23,7 @@
"Questions" => "Întrebări",
"Work" => "Servici",
"unnamed" => "fără nume",
+"New Calendar" => "Calendar nou",
"Does not repeat" => "Nerepetabil",
"Daily" => "Zilnic",
"Weekly" => "Săptămânal",
@@ -68,7 +69,6 @@
"Date" => "Data",
"Cal." => "Cal.",
"All day" => "Toată ziua",
-"New Calendar" => "Calendar nou",
"Missing fields" => "Câmpuri lipsă",
"Title" => "Titlu",
"From Date" => "Începând cu",
@@ -81,9 +81,6 @@
"Month" => "Luna",
"List" => "Listă",
"Today" => "Astăzi",
-"Calendars" => "Calendare",
-"There was a fail, while parsing the file." => "A fost întâmpinată o eroare în procesarea fișierului",
-"Choose active calendars" => "Alege calendarele active",
"Your calendars" => "Calendarele tale",
"CalDav Link" => "Legătură CalDav",
"Shared calendars" => "Calendare partajate",
@@ -132,6 +129,7 @@
"Interval" => "Interval",
"End" => "Sfârșit",
"occurrences" => "repetiții",
+"create a new calendar" => "crează un calendar nou",
"Import a calendar file" => "Importă un calendar",
"Please choose the calendar" => "Alegeți calendarul",
"create a new calendar" => "crează un calendar nou",
@@ -143,7 +141,6 @@
"Create a new event" => "Crează un eveniment nou",
"View an event" => "Vizualizează un eveniment",
"No categories selected" => "Nici o categorie selectată",
-"Select category" => "Selecteză categoria",
"of" => "din",
"at" => "la",
"Timezone" => "Fus orar",
@@ -151,8 +148,6 @@
"Timeformat" => "Forma de afișare a orei",
"24h" => "24h",
"12h" => "12h",
-"First day of the week" => "Prima zi a săptămînii",
-"Calendar CalDAV syncing address:" => "Adresa pentru sincronizarea calendarului CalDAV",
"Users" => "Utilizatori",
"select users" => "utilizatori selectați",
"Editable" => "Editabil",
diff --git a/apps/calendar/l10n/ru.php b/apps/calendar/l10n/ru.php
index af40b06b9ff..fbf5ec5ff74 100644
--- a/apps/calendar/l10n/ru.php
+++ b/apps/calendar/l10n/ru.php
@@ -1,11 +1,23 @@
<?php $TRANSLATIONS = array(
+"Not all calendars are completely cached" => "Ðе вÑе календари полноÑтью кешированы",
+"Everything seems to be completely cached" => "Ð’Ñе, вроде бы, закешировано",
"No calendars found." => "Календари не найдены.",
"No events found." => "Ð¡Ð¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð½Ðµ найдены.",
"Wrong calendar" => "Ðеверный календарь",
+"The file contained either no events or all events are already saved in your calendar." => "Файл либо не Ñобержит Ñобытий, либо вÑе ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ ÑƒÐ¶Ðµ еÑÑ‚ÑŒ в календаре",
+"events has been saved in the new calendar" => "ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð±Ñ‹Ð»Ð¸ Ñохранены в новый календарь",
+"Import failed" => "Ошибка импорта",
+"events has been saved in your calendar" => "ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð±Ñ‹Ð»Ð¸ Ñохранены в вашем календаре",
"New Timezone:" => "Ðовый чаÑовой поÑÑ:",
"Timezone changed" => "ЧаÑовой поÑÑ Ð¸Ð·Ð¼ÐµÐ½Ñ‘Ð½",
"Invalid request" => "Ðеверный запроÑ",
"Calendar" => "Календарь",
+"ddd" => "ддд",
+"ddd M/d" => "ддд М/д",
+"dddd M/d" => "дддд М/д",
+"MMMM yyyy" => "ММММ гггг",
+"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"dddd, MMM d, yyyy" => "дддд, МММ д, гггг",
"Birthday" => "День рождениÑ",
"Business" => "БизнеÑ",
"Call" => "Звонить",
@@ -21,7 +33,9 @@
"Projects" => "Проекты",
"Questions" => "ВопроÑÑ‹",
"Work" => "Работа",
+"by" => "до ÑвиданиÑ",
"unnamed" => "без имени",
+"New Calendar" => "Ðовый Календарь",
"Does not repeat" => "Ðе повторÑетÑÑ",
"Daily" => "Ежедневно",
"Weekly" => "Еженедельно",
@@ -66,8 +80,26 @@
"by day and month" => "по дню и меÑÑцу",
"Date" => "Дата",
"Cal." => "Кал.",
+"Sun." => "Ð’Ñ.",
+"Mon." => "Пн.",
+"Tue." => "Ð’Ñ‚.",
+"Wed." => "Ср.",
+"Thu." => "Чт.",
+"Fri." => "Пт.",
+"Sat." => "Сб.",
+"Jan." => "Янв.",
+"Feb." => "Фев.",
+"Mar." => "Мар.",
+"Apr." => "Ðпр.",
+"May." => "Май.",
+"Jun." => "Июн.",
+"Jul." => "Июл.",
+"Aug." => "Ðвг.",
+"Sep." => "Сен.",
+"Oct." => "Окт.",
+"Nov." => "ÐоÑ.",
+"Dec." => "Дек.",
"All day" => "ВеÑÑŒ день",
-"New Calendar" => "Ðовый Календарь",
"Missing fields" => "Ðезаполненные полÑ",
"Title" => "Ðазвание",
"From Date" => "Дата начала",
@@ -80,9 +112,7 @@
"Month" => "МеÑÑц",
"List" => "СпиÑок",
"Today" => "СегоднÑ",
-"Calendars" => "Календари",
-"There was a fail, while parsing the file." => "Ðе удалоÑÑŒ обработать файл.",
-"Choose active calendars" => "Выберите активные календари",
+"Settings" => "Параметры",
"Your calendars" => "Ваши календари",
"CalDav Link" => "СÑылка Ð´Ð»Ñ CalDav",
"Shared calendars" => "Общие календари",
@@ -131,10 +161,12 @@
"Interval" => "Интервал",
"End" => "Окончание",
"occurrences" => "повторений",
-"Import a calendar file" => "Импортировать календарь из файла",
-"Please choose the calendar" => "ПожалуйÑта, выберите календарь",
"create a new calendar" => "Создать новый календарь",
+"Import a calendar file" => "Импортировать календарь из файла",
+"Please choose a calendar" => "ПожалуйÑта, выберите календарь",
"Name of new calendar" => "Ðазвание нового календарÑ",
+"Take an available name!" => "Возьмите разрешенное имÑ!",
+"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Календарь Ñ Ñ‚Ð°ÐºÐ¸Ð¼ именем уже ÑущеÑтвует. ЕÑли вы продолжите, одноименный календарь будет удален.",
"Import" => "Импортировать",
"Importing calendar" => "ИмпортируетÑÑ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€ÑŒ",
"Calendar imported successfully" => "Календарь уÑпешно импортирован",
@@ -142,14 +174,23 @@
"Create a new event" => "Создать новое Ñобытие",
"View an event" => "Показать Ñобытие",
"No categories selected" => "Категории не выбраны",
-"Select category" => "Выбрать категорию",
+"of" => "из",
+"at" => "на",
+"General" => "ОÑновные",
"Timezone" => "ЧаÑовой поÑÑ",
-"Check always for changes of the timezone" => "Ð’Ñегда проверÑйте изменение чаÑового поÑÑа",
-"Timeformat" => "Формат времени",
+"Update timezone automatically" => "ÐвтоматичеÑкое обновление временной зоны",
+"Time format" => "Формат времени",
"24h" => "24ч",
"12h" => "12ч",
-"First day of the week" => "Первый день недели",
-"Calendar CalDAV syncing address:" => "ÐÐ´Ñ€ÐµÑ Ñинхронизации ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ CalDAV:",
+"Start week on" => "Ðачало недели",
+"Cache" => "КÑш",
+"Clear cache for repeating events" => "ОчиÑтить кÑш повторÑющихÑÑ Ñобытий",
+"URLs" => "URLs",
+"Calendar CalDAV syncing addresses" => "ÐÐ´Ñ€ÐµÑ Ñинхронизации CalDAV",
+"more info" => "подробнее",
+"Primary address (Kontact et al)" => "ОÑновной Ð°Ð´Ñ€ÐµÑ (Контакта)",
+"iOS/OS X" => "iOS/OS X",
+"Read only iCalendar link(s)" => "Читать только ÑÑылки iCalendar",
"Users" => "Пользователи",
"select users" => "выбрать пользователей",
"Editable" => "Редактируемо",
diff --git a/apps/calendar/l10n/sk_SK.php b/apps/calendar/l10n/sk_SK.php
index e182a9d3ea4..65400c496d7 100644
--- a/apps/calendar/l10n/sk_SK.php
+++ b/apps/calendar/l10n/sk_SK.php
@@ -6,7 +6,12 @@
"Timezone changed" => "Časové pásmo zmenené",
"Invalid request" => "Neplatná požiadavka",
"Calendar" => "Kalendár",
+"ddd" => "ddd",
+"ddd M/d" => "ddd M/d",
+"dddd M/d" => "dddd M/d",
+"MMMM yyyy" => "MMMM rrrr",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "d. MMM[ yyyy]{ '&#8212;' d.[ MMM] yyyy}",
+"dddd, MMM d, yyyy" => "dddd, MMM d, rrrr",
"Birthday" => "Narodeniny",
"Business" => "Podnikanie",
"Call" => "Hovor",
@@ -23,6 +28,7 @@
"Questions" => "Otázky",
"Work" => "Práca",
"unnamed" => "nepomenovaný",
+"New Calendar" => "Nový kalendár",
"Does not repeat" => "Neopakovať",
"Daily" => "Denne",
"Weekly" => "Týždenne",
@@ -68,7 +74,6 @@
"Date" => "Dátum",
"Cal." => "Kal.",
"All day" => "Celý deň",
-"New Calendar" => "Nový kalendár",
"Missing fields" => "Nevyplnené položky",
"Title" => "Nadpis",
"From Date" => "Od dátumu",
@@ -81,9 +86,6 @@
"Month" => "Mesiac",
"List" => "Zoznam",
"Today" => "Dnes",
-"Calendars" => "Kalendáre",
-"There was a fail, while parsing the file." => "Nastala chyba poÄas parsovania súboru.",
-"Choose active calendars" => "Zvoľte aktívne kalendáre",
"Your calendars" => "Vaše kalendáre",
"CalDav Link" => "CalDav odkaz",
"Shared calendars" => "Zdielané kalendáre",
@@ -132,27 +134,19 @@
"Interval" => "Interval",
"End" => "Koniec",
"occurrences" => "výskyty",
-"Import a calendar file" => "Importovať súbor kalendára",
-"Please choose the calendar" => "Prosím zvoľte kalendár",
"create a new calendar" => "vytvoriť nový kalendár",
+"Import a calendar file" => "Importovať súbor kalendára",
"Name of new calendar" => "Meno nového kalendára",
"Import" => "Importovať",
-"Importing calendar" => "Importujem kalendár",
-"Calendar imported successfully" => "Kalendár úspešne importovaný",
"Close Dialog" => "Zatvoriť dialóg",
"Create a new event" => "Vytvoriť udalosť",
"View an event" => "Zobraziť udalosť",
"No categories selected" => "Žiadne vybraté kategórie",
-"Select category" => "Vybrať kategóriu",
"of" => "z",
"at" => "v",
"Timezone" => "Časová zóna",
-"Check always for changes of the timezone" => "Vždy kontroluj zmeny Äasového pásma",
-"Timeformat" => "Formát Äasu",
"24h" => "24h",
"12h" => "12h",
-"First day of the week" => "Prvý deň v týždni",
-"Calendar CalDAV syncing address:" => "SynchronizaÄná adresa kalendára CalDAV: ",
"Users" => "Používatelia",
"select users" => "vybrať používateľov",
"Editable" => "Upravovateľné",
diff --git a/apps/calendar/l10n/sl.php b/apps/calendar/l10n/sl.php
index 3bf03ede127..585132314bb 100644
--- a/apps/calendar/l10n/sl.php
+++ b/apps/calendar/l10n/sl.php
@@ -1,12 +1,23 @@
<?php $TRANSLATIONS = array(
+"Not all calendars are completely cached" => "Vsi koledarji niso povsem predpomnjeni",
+"Everything seems to be completely cached" => "Izgleda, da je vse v predpomnilniku",
"No calendars found." => "Ni bilo najdenih koledarjev.",
"No events found." => "Ni bilo najdenih dogodkov.",
"Wrong calendar" => "NapaÄen koledar",
+"The file contained either no events or all events are already saved in your calendar." => "Datoteka ni vsebovala dogodkov ali pa so vsi dogodki že shranjeni v koledarju.",
+"events has been saved in the new calendar" => "dogodki so bili shranjeni v nov koledar",
+"Import failed" => "Uvoz je spodletel",
+"events has been saved in your calendar" => "dogodki so bili shranjeni v vaš koledar",
"New Timezone:" => "Nov Äasovni pas:",
"Timezone changed" => "ÄŒasovni pas je bil spremenjen",
"Invalid request" => "Neveljaven zahtevek",
"Calendar" => "Koledar",
+"ddd" => "ddd",
+"ddd M/d" => "ddd M/d",
+"dddd M/d" => "dddd M/d",
+"MMMM yyyy" => "MMMM yyyy",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy",
"Birthday" => "Rojstni dan",
"Business" => "Poslovno",
"Call" => "PokliÄi",
@@ -22,7 +33,9 @@
"Projects" => "Projekt",
"Questions" => "Vprašanja",
"Work" => "Delo",
+"by" => "od",
"unnamed" => "neimenovan",
+"New Calendar" => "Nov koledar",
"Does not repeat" => "Se ne ponavlja",
"Daily" => "Dnevno",
"Weekly" => "Tedensko",
@@ -67,8 +80,26 @@
"by day and month" => "po dnevu in mesecu",
"Date" => "Datum",
"Cal." => "Kol.",
+"Sun." => "ned.",
+"Mon." => "pon.",
+"Tue." => "tor.",
+"Wed." => "sre.",
+"Thu." => "Äet.",
+"Fri." => "pet.",
+"Sat." => "sob.",
+"Jan." => "jan.",
+"Feb." => "feb.",
+"Mar." => "mar.",
+"Apr." => "apr.",
+"May." => "maj",
+"Jun." => "jun.",
+"Jul." => "jul.",
+"Aug." => "avg.",
+"Sep." => "sep.",
+"Oct." => "okt.",
+"Nov." => "nov.",
+"Dec." => "dec.",
"All day" => "Cel dan",
-"New Calendar" => "Nov koledar",
"Missing fields" => "MankajoÄa polja",
"Title" => "Naslov",
"From Date" => "od Datum",
@@ -81,9 +112,7 @@
"Month" => "Mesec",
"List" => "Seznam",
"Today" => "Danes",
-"Calendars" => "Koledarji",
-"There was a fail, while parsing the file." => "Pri razÄlenjevanju datoteke je priÅ¡lo do napake.",
-"Choose active calendars" => "Izberite aktivne koledarje",
+"Settings" => "Nastavitve",
"Your calendars" => "Vaši koledarji",
"CalDav Link" => "CalDav povezava",
"Shared calendars" => "Koledarji v souporabi",
@@ -132,27 +161,34 @@
"Interval" => "ÄŒasovni razmik",
"End" => "Konec",
"occurrences" => "ponovitev",
-"Import a calendar file" => "Uvozi datoteko koledarja",
-"Please choose the calendar" => "Izberi koledar",
"create a new calendar" => "Ustvari nov koledar",
+"Import a calendar file" => "Uvozi datoteko koledarja",
+"Please choose a calendar" => "Prosimo, Äe izberete koledar",
"Name of new calendar" => "Ime novega koledarja",
+"Take an available name!" => "Izberite prosto ime!",
+"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Koledar s tem imenom že obstaja. Če nadaljujete, bosta koledarja združena.",
"Import" => "Uvozi",
-"Importing calendar" => "Uvažam koledar",
-"Calendar imported successfully" => "Koledar je bil uspešno uvožen",
"Close Dialog" => "Zapri dialog",
"Create a new event" => "Ustvari nov dogodek",
"View an event" => "Poglej dogodek",
"No categories selected" => "Nobena kategorija ni izbrana",
-"Select category" => "Izberi kategorijo",
"of" => "od",
"at" => "pri",
+"General" => "Splošno",
"Timezone" => "ÄŒasovni pas",
-"Check always for changes of the timezone" => "Vedno preveri za spremembe Äasovnega pasu",
-"Timeformat" => "Zapis Äasa",
+"Update timezone automatically" => "Samodejno posodobi Äasovni pas",
+"Time format" => "Oblika zapisa Äasa",
"24h" => "24ur",
"12h" => "12ur",
-"First day of the week" => "Prvi dan v tednu",
-"Calendar CalDAV syncing address:" => "CalDAV sinhronizacijski naslov koledarja:",
+"Start week on" => "ZaÄni teden z",
+"Cache" => "Predpomnilnik",
+"Clear cache for repeating events" => "PoÄisti predpomnilnik za ponavljajoÄe dogodke",
+"URLs" => "URLji",
+"Calendar CalDAV syncing addresses" => "CalDAV naslov za usklajevanje koledarjev",
+"more info" => "dodatne informacije",
+"Primary address (Kontact et al)" => "Glavni naslov (Kontakt et al)",
+"iOS/OS X" => "iOS/OS X",
+"Read only iCalendar link(s)" => "iCalendar povezava/e samo za branje",
"Users" => "Uporabniki",
"select users" => "izberite uporabnike",
"Editable" => "Možno urejanje",
diff --git a/apps/calendar/l10n/sr.php b/apps/calendar/l10n/sr.php
index 5798c66e0ab..4ec60e20cbe 100644
--- a/apps/calendar/l10n/sr.php
+++ b/apps/calendar/l10n/sr.php
@@ -18,6 +18,7 @@
"Projects" => "Пројекти",
"Questions" => "Питања",
"Work" => "ПоÑао",
+"New Calendar" => "Ðови календар",
"Does not repeat" => "Ðе понавља Ñе",
"Daily" => "дневно",
"Weekly" => "недељно",
@@ -26,15 +27,11 @@
"Monthly" => "меÑечно",
"Yearly" => "годишње",
"All day" => "Цео дан",
-"New Calendar" => "Ðови календар",
"Title" => "ÐаÑлов",
"Week" => "Ðедеља",
"Month" => "МеÑец",
"List" => "СпиÑак",
"Today" => "ДанаÑ",
-"Calendars" => "Календари",
-"There was a fail, while parsing the file." => "дошло је до грешке при раÑчлањивању фајла.",
-"Choose active calendars" => "Изаберите активне календаре",
"CalDav Link" => "КалДав веза",
"Download" => "Преузми",
"Edit" => "Уреди",
@@ -59,6 +56,5 @@
"Description of the Event" => "ÐžÐ¿Ð¸Ñ Ð´Ð¾Ð³Ð°Ñ’Ð°Ñ˜Ð°",
"Repeat" => "Понављај",
"Create a new event" => "Ðаправи нови догађај",
-"Select category" => "Изаберите категорију",
"Timezone" => "ВременÑка зона"
);
diff --git a/apps/calendar/l10n/sr@latin.php b/apps/calendar/l10n/sr@latin.php
index c261f903f76..4ceabcbae59 100644
--- a/apps/calendar/l10n/sr@latin.php
+++ b/apps/calendar/l10n/sr@latin.php
@@ -18,6 +18,7 @@
"Projects" => "Projekti",
"Questions" => "Pitanja",
"Work" => "Posao",
+"New Calendar" => "Novi kalendar",
"Does not repeat" => "Ne ponavlja se",
"Daily" => "dnevno",
"Weekly" => "nedeljno",
@@ -26,15 +27,11 @@
"Monthly" => "meseÄno",
"Yearly" => "godišnje",
"All day" => "Ceo dan",
-"New Calendar" => "Novi kalendar",
"Title" => "Naslov",
"Week" => "Nedelja",
"Month" => "Mesec",
"List" => "Spisak",
"Today" => "Danas",
-"Calendars" => "Kalendari",
-"There was a fail, while parsing the file." => "doÅ¡lo je do greÅ¡ke pri rasÄlanjivanju fajla.",
-"Choose active calendars" => "Izaberite aktivne kalendare",
"CalDav Link" => "KalDav veza",
"Download" => "Preuzmi",
"Edit" => "Uredi",
@@ -59,6 +56,5 @@
"Description of the Event" => "Opis događaja",
"Repeat" => "Ponavljaj",
"Create a new event" => "Napravi novi događaj",
-"Select category" => "Izaberite kategoriju",
"Timezone" => "Vremenska zona"
);
diff --git a/apps/calendar/l10n/sv.php b/apps/calendar/l10n/sv.php
index 59f8c6e6b5d..4cea9073a26 100644
--- a/apps/calendar/l10n/sv.php
+++ b/apps/calendar/l10n/sv.php
@@ -1,12 +1,23 @@
<?php $TRANSLATIONS = array(
+"Not all calendars are completely cached" => "Alla kalendrar är inte fullständigt sparade i cache",
+"Everything seems to be completely cached" => "Allt verkar vara fullständigt sparat i cache",
"No calendars found." => "Inga kalendrar funna",
"No events found." => "Inga händelser funna.",
"Wrong calendar" => "Fel kalender",
+"The file contained either no events or all events are already saved in your calendar." => "Filen innehöll inga händelser eller så är alla händelser redan sparade i kalendern.",
+"events has been saved in the new calendar" => "händelser har sparats i den nya kalendern",
+"Import failed" => "Misslyckad import",
+"events has been saved in your calendar" => "händelse har sparats i din kalender",
"New Timezone:" => "Ny tidszon:",
"Timezone changed" => "Tidszon ändrad",
"Invalid request" => "Ogiltig begäran",
"Calendar" => "Kalender",
+"ddd" => "ddd",
+"ddd M/d" => "ddd M/d",
+"dddd M/d" => "dddd M/d",
+"MMMM yyyy" => "MMMM åååå",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"dddd, MMM d, yyyy" => "ddd, MMM d, åååå",
"Birthday" => "Födelsedag",
"Business" => "Företag",
"Call" => "Ringa",
@@ -22,7 +33,9 @@
"Projects" => "Projekt",
"Questions" => "Frågor",
"Work" => "Arbetet",
+"by" => "av",
"unnamed" => "Namn saknas",
+"New Calendar" => "Ny kalender",
"Does not repeat" => "Upprepas inte",
"Daily" => "Dagligen",
"Weekly" => "Varje vecka",
@@ -67,8 +80,26 @@
"by day and month" => "efter dag och månad",
"Date" => "Datum",
"Cal." => "Kal.",
+"Sun." => "Sön.",
+"Mon." => "MÃ¥n.",
+"Tue." => "Tis.",
+"Wed." => "Ons.",
+"Thu." => "Tor.",
+"Fri." => "Fre.",
+"Sat." => "Lör.",
+"Jan." => "Jan.",
+"Feb." => "Feb.",
+"Mar." => "Mar.",
+"Apr." => "Apr.",
+"May." => "Maj.",
+"Jun." => "Jun.",
+"Jul." => "Jul.",
+"Aug." => "Aug.",
+"Sep." => "Sep.",
+"Oct." => "Okt.",
+"Nov." => "Nov.",
+"Dec." => "Dec.",
"All day" => "Hela dagen",
-"New Calendar" => "Ny kalender",
"Missing fields" => "Saknade fält",
"Title" => "Rubrik",
"From Date" => "Från datum",
@@ -81,9 +112,6 @@
"Month" => "MÃ¥nad",
"List" => "Lista",
"Today" => "Idag",
-"Calendars" => "Kalendrar",
-"There was a fail, while parsing the file." => "Det blev ett fel medan filen analyserades.",
-"Choose active calendars" => "Välj aktiva kalendrar",
"Your calendars" => "Dina kalendrar",
"CalDav Link" => "CalDAV-länk",
"Shared calendars" => "Delade kalendrar",
@@ -132,10 +160,12 @@
"Interval" => "Hur ofta",
"End" => "Slut",
"occurrences" => "Händelser",
-"Import a calendar file" => "Importera en kalenderfil",
-"Please choose the calendar" => "Välj kalender",
"create a new calendar" => "skapa en ny kalender",
+"Import a calendar file" => "Importera en kalenderfil",
+"Please choose a calendar" => "Välj en kalender",
"Name of new calendar" => "Namn på ny kalender",
+"Take an available name!" => "Ta ett ledigt namn!",
+"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "En kalender med detta namn finns redan. Om du fortsätter ändå så kommer dessa kalendrar att slås samman.",
"Import" => "Importera",
"Importing calendar" => "Importerar kalender",
"Calendar imported successfully" => "Kalender importerades utan problem",
@@ -143,7 +173,6 @@
"Create a new event" => "Skapa en ny händelse",
"View an event" => "Visa en händelse",
"No categories selected" => "Inga kategorier valda",
-"Select category" => "Välj kategori",
"of" => "av",
"at" => "på",
"Timezone" => "Tidszon",
@@ -151,8 +180,13 @@
"Timeformat" => "Tidsformat",
"24h" => "24h",
"12h" => "12h",
-"First day of the week" => "Första dagen av veckan",
-"Calendar CalDAV syncing address:" => "Synkroniseringsadress för CalDAV kalender:",
+"Cache" => "Cache",
+"Clear cache for repeating events" => "Töm cache för upprepade händelser",
+"Calendar CalDAV syncing addresses" => "Kalender CalDAV synkroniserar adresser",
+"more info" => "mer info",
+"Primary address (Kontact et al)" => "Primary address (Kontact et al)",
+"iOS/OS X" => "iOS/OS X",
+"Read only iCalendar link(s)" => "Read only iCalendar link(s)",
"Users" => "Användare",
"select users" => "välj användare",
"Editable" => "Redigerbar",
diff --git a/apps/calendar/l10n/th_TH.php b/apps/calendar/l10n/th_TH.php
index 8aaa7ae756a..0b92a623d40 100644
--- a/apps/calendar/l10n/th_TH.php
+++ b/apps/calendar/l10n/th_TH.php
@@ -1,12 +1,23 @@
<?php $TRANSLATIONS = array(
+"Not all calendars are completely cached" => "ไม่ใช่ปà¸à¸´à¸—ินทั้งหมดที่จะถูà¸à¸ˆà¸±à¸”เà¸à¹‡à¸šà¸‚้อมูลไว้ในหน่วยความจำà¹à¸„ชอย่างสมบูรณ์",
+"Everything seems to be completely cached" => "ทุà¸à¸ªà¸´à¹ˆà¸‡à¸—ุà¸à¸­à¸¢à¹ˆà¸²à¸‡à¹„ด้ถูà¸à¹€à¸à¹‡à¸šà¹€à¸‚้าไปไว้ในหน่วยความจำà¹à¸„ชอย่างสมบูรณ์à¹à¸¥à¹‰à¸§",
"No calendars found." => "ไม่พบปà¸à¸´à¸—ินที่ต้องà¸à¸²à¸£",
"No events found." => "ไม่พบà¸à¸´à¸ˆà¸à¸£à¸£à¸¡à¸—ี่ต้องà¸à¸²à¸£",
"Wrong calendar" => "ปà¸à¸´à¸—ินไม่ถูà¸à¸•à¹‰à¸­à¸‡",
+"The file contained either no events or all events are already saved in your calendar." => "ไฟล์ดังà¸à¸¥à¹ˆà¸²à¸§à¸šà¸£à¸£à¸ˆà¸¸à¸‚้อมูลà¸à¸´à¸ˆà¸à¸£à¸£à¸¡à¸—ี่มีอยู่à¹à¸¥à¹‰à¸§à¹ƒà¸™à¸›à¸à¸´à¸—ินของคุณ",
+"events has been saved in the new calendar" => "à¸à¸´à¸ˆà¸à¸£à¸£à¸¡à¹„ด้ถูà¸à¸šà¸±à¸™à¸—ึà¸à¹„ปไว้ในปà¸à¸´à¸—ินที่สร้างขึ้นใหม่à¹à¸¥à¹‰à¸§",
+"Import failed" => "à¸à¸²à¸£à¸™à¸³à¹€à¸‚้าข้อมูลล้มเหลว",
+"events has been saved in your calendar" => "à¸à¸´à¸ˆà¸à¸£à¸£à¸¡à¹„ด้ถูà¸à¸šà¸±à¸™à¸—ึà¸à¹€à¸‚้าไปไว้ในปà¸à¸´à¸—ินของคุณà¹à¸¥à¹‰à¸§",
"New Timezone:" => "สร้างโซนเวลาใหม่:",
"Timezone changed" => "โซนเวลาถูà¸à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸¥à¹‰à¸§",
"Invalid request" => "คำร้องขอไม่ถูà¸à¸•à¹‰à¸­à¸‡",
"Calendar" => "ปà¸à¸´à¸—ิน",
+"ddd" => "ddd",
+"ddd M/d" => "ddd M/d",
+"dddd M/d" => "dddd M/d",
+"MMMM yyyy" => "MMMM yyyy",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy",
"Birthday" => "วันเà¸à¸´à¸”",
"Business" => "ธุรà¸à¸´à¸ˆ",
"Call" => "โทรติดต่อ",
@@ -22,7 +33,9 @@
"Projects" => "โครงà¸à¸²à¸£",
"Questions" => "คำถาม",
"Work" => "งาน",
+"by" => "โดย",
"unnamed" => "ไม่มีชื่อ",
+"New Calendar" => "สร้างปà¸à¸´à¸—ินใหม่",
"Does not repeat" => "ไม่ต้องทำซ้ำ",
"Daily" => "รายวัน",
"Weekly" => "รายสัปดาห์",
@@ -67,8 +80,26 @@
"by day and month" => "ตามวันà¹à¸¥à¸°à¹€à¸”ือน",
"Date" => "วันที่",
"Cal." => "คำนวณ",
+"Sun." => "อา.",
+"Mon." => "จ.",
+"Tue." => "อ.",
+"Wed." => "พ.",
+"Thu." => "พฤ.",
+"Fri." => "ศ.",
+"Sat." => "ส.",
+"Jan." => "ม.ค.",
+"Feb." => "à¸.พ.",
+"Mar." => "มี.ค.",
+"Apr." => "เม.ย.",
+"May." => "พ.ค.",
+"Jun." => "มิ.ย.",
+"Jul." => "à¸.ค.",
+"Aug." => "ส.ค.",
+"Sep." => "à¸.ย.",
+"Oct." => "ต.ค.",
+"Nov." => "พ.ย.",
+"Dec." => "ธ.ค.",
"All day" => "ทั้งวัน",
-"New Calendar" => "สร้างปà¸à¸´à¸—ินใหม่",
"Missing fields" => "ช่องฟิลด์เà¸à¸´à¸”à¸à¸²à¸£à¸ªà¸¹à¸à¸«à¸²à¸¢",
"Title" => "ชื่อà¸à¸´à¸ˆà¸à¸£à¸£à¸¡",
"From Date" => "จาà¸à¸§à¸±à¸™à¸—ี่",
@@ -81,9 +112,7 @@
"Month" => "เดือน",
"List" => "รายà¸à¸²à¸£",
"Today" => "วันนี้",
-"Calendars" => "ปà¸à¸´à¸—ิน",
-"There was a fail, while parsing the file." => "เà¸à¸´à¸”ความล้มเหลวในà¸à¸²à¸£à¹à¸¢à¸à¹„ฟล์",
-"Choose active calendars" => "เลือà¸à¸›à¸à¸´à¸—ินที่ต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™",
+"Settings" => "ตั้งค่า",
"Your calendars" => "ปà¸à¸´à¸—ินของคุณ",
"CalDav Link" => "ลิงค์ CalDav",
"Shared calendars" => "ปà¸à¸´à¸—ินที่เปิดà¹à¸Šà¸£à¹Œ",
@@ -132,27 +161,34 @@
"Interval" => "ช่วงเวลา",
"End" => "สิ้นสุด",
"occurrences" => "จำนวนที่ปราà¸à¸",
-"Import a calendar file" => "นำเข้าไฟล์ปà¸à¸´à¸—ิน",
-"Please choose the calendar" => "à¸à¸£à¸“าเลือà¸à¸›à¸à¸´à¸—ิน",
"create a new calendar" => "สร้างปà¸à¸´à¸—ินใหม่",
+"Import a calendar file" => "นำเข้าไฟล์ปà¸à¸´à¸—ิน",
+"Please choose a calendar" => "à¸à¸£à¸¸à¸“าเลือà¸à¸›à¸à¸´à¸—ิน",
"Name of new calendar" => "ชื่อของปà¸à¸´à¸—ิน",
+"Take an available name!" => "เลือà¸à¸Šà¸·à¹ˆà¸­à¸—ี่ต้องà¸à¸²à¸£",
+"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "ปà¸à¸´à¸—ินชื่อดังà¸à¸¥à¹ˆà¸²à¸§à¸–ูà¸à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹„ปà¹à¸¥à¹‰à¸§ หาà¸à¸„ุณยังดำเนินà¸à¸²à¸£à¸•à¹ˆà¸­à¹„ป ปà¸à¸´à¸—ินดังà¸à¸¥à¹ˆà¸²à¸§à¸™à¸µà¹‰à¸ˆà¸°à¸–ูà¸à¸œà¸ªà¸²à¸™à¸‚้อมูลเข้าด้วยà¸à¸±à¸™",
"Import" => "นำเข้าข้อมูล",
-"Importing calendar" => "นำเข้าข้อมูลปà¸à¸´à¸—ิน",
-"Calendar imported successfully" => "ปà¸à¸´à¸—ินถูà¸à¸™à¸³à¹€à¸‚้าข้อมูลเรียบร้อยà¹à¸¥à¹‰à¸§",
"Close Dialog" => "ปิดà¸à¸¥à¹ˆà¸­à¸‡à¸‚้อความโต้ตอบ",
"Create a new event" => "สร้างà¸à¸´à¸ˆà¸à¸£à¸£à¸¡à¹ƒà¸«à¸¡à¹ˆ",
"View an event" => "ดูà¸à¸´à¸ˆà¸à¸£à¸£à¸¡",
"No categories selected" => "ยังไม่ได้เลือà¸à¸«à¸¡à¸§à¸”หมู่",
-"Select category" => "เลือà¸à¸«à¸¡à¸§à¸”หมู่",
"of" => "ของ",
"at" => "ที่",
+"General" => "ทั่วไป",
"Timezone" => "โซนเวลา",
-"Check always for changes of the timezone" => "ตรวจสอบà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¹‚ซนเวลาอยู่เสมอ",
-"Timeformat" => "รูปà¹à¸šà¸šà¸à¸²à¸£à¹à¸ªà¸”งเวลา",
+"Update timezone automatically" => "อัพเดทโซนเวลาอัตโนมัติ",
+"Time format" => "รูปà¹à¸šà¸šà¹€à¸§à¸¥à¸²",
"24h" => "24 ช.ม.",
"12h" => "12 ช.ม.",
-"First day of the week" => "วันà¹à¸£à¸à¸‚องสัปดาห์",
-"Calendar CalDAV syncing address:" => "ที่อยู่ในà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸‚้อมูลà¸à¸±à¸šà¸›à¸à¸´à¸—ิน CalDav:",
+"Start week on" => "เริ่มต้นสัปดาห์ด้วย",
+"Cache" => "หน่วยความจำà¹à¸„ช",
+"Clear cache for repeating events" => "ล้างข้อมูลในหน่วยความจำà¹à¸„ชสำหรับà¸à¸´à¸ˆà¸à¸£à¸£à¸¡à¸—ี่ซ้ำซ้อน",
+"URLs" => "URLs",
+"Calendar CalDAV syncing addresses" => "ที่อยู่ที่ใช้สำหรับเชื่อมข้อมูลปà¸à¸´à¸—ิน CalDAV",
+"more info" => "ข้อมูลเพิ่มเติม",
+"Primary address (Kontact et al)" => "ที่อยู่หลัภ(Kontact et al)",
+"iOS/OS X" => "iOS/OS X",
+"Read only iCalendar link(s)" => "อ่านเฉพาะลิงà¸à¹Œ iCalendar เท่านั้น",
"Users" => "ผู้ใช้งาน",
"select users" => "เลือà¸à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™",
"Editable" => "สามารถà¹à¸à¹‰à¹„ขได้",
diff --git a/apps/calendar/l10n/tr.php b/apps/calendar/l10n/tr.php
index a72e4c39f6d..b9256eb619e 100644
--- a/apps/calendar/l10n/tr.php
+++ b/apps/calendar/l10n/tr.php
@@ -1,12 +1,23 @@
<?php $TRANSLATIONS = array(
+"Not all calendars are completely cached" => "Bütün takvimler tamamen ön belleğe alınmadı",
+"Everything seems to be completely cached" => "Bütün herşey tamamen ön belleğe alınmış görünüyor",
"No calendars found." => "Takvim yok.",
"No events found." => "Etkinlik yok.",
"Wrong calendar" => "Yanlış takvim",
+"The file contained either no events or all events are already saved in your calendar." => "Dosya ya hiçbir etkinlik içermiyor veya bütün etkinlikler takviminizde zaten saklı.",
+"events has been saved in the new calendar" => "Etkinlikler yeni takvimde saklandı",
+"Import failed" => "İçeri aktarma başarısız oldu.",
+"events has been saved in your calendar" => "Etkinlikler takviminizde saklandı",
"New Timezone:" => "Yeni Zamandilimi:",
"Timezone changed" => "Zaman dilimi deÄŸiÅŸtirildi",
"Invalid request" => "Geçersiz istek",
"Calendar" => "Takvim",
+"ddd" => "ddd",
+"ddd M/d" => "ddd M/d",
+"dddd M/d" => "dddd M/d",
+"MMMM yyyy" => "MMMM yyyy",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "AAA g[ yyyy]{ '&#8212;'[ AAA] g yyyy}",
+"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy",
"Birthday" => "Doğum günü",
"Business" => "Ä°ÅŸ",
"Call" => "Arama",
@@ -22,7 +33,9 @@
"Projects" => "Projeler",
"Questions" => "Sorular",
"Work" => "Ä°ÅŸ",
+"by" => "hazırlayan",
"unnamed" => "isimsiz",
+"New Calendar" => "Yeni Takvim",
"Does not repeat" => "Tekrar etmiyor",
"Daily" => "Günlük",
"Weekly" => "Haftalı",
@@ -67,8 +80,26 @@
"by day and month" => "gün ve aya göre",
"Date" => "Tarih",
"Cal." => "Takv.",
+"Sun." => "Paz.",
+"Mon." => "Pzt.",
+"Tue." => "Sal.",
+"Wed." => "Çar.",
+"Thu." => "Per.",
+"Fri." => "Cum.",
+"Sat." => "Cmt.",
+"Jan." => "Oca.",
+"Feb." => "Åžbt.",
+"Mar." => "Mar.",
+"Apr." => "Nis",
+"May." => "May.",
+"Jun." => "Haz.",
+"Jul." => "Tem.",
+"Aug." => "Agu.",
+"Sep." => "Eyl.",
+"Oct." => "Eki.",
+"Nov." => "Kas.",
+"Dec." => "Ara.",
"All day" => "Tüm gün",
-"New Calendar" => "Yeni Takvim",
"Missing fields" => "Eksik alanlar",
"Title" => "Başlık",
"From Date" => "Bu Tarihten",
@@ -81,9 +112,6 @@
"Month" => "Ay",
"List" => "Liste",
"Today" => "Bugün",
-"Calendars" => "Takvimler",
-"There was a fail, while parsing the file." => "Dosya okunurken başarısızlık oldu.",
-"Choose active calendars" => "Aktif takvimleri seçin",
"Your calendars" => "Takvimleriniz",
"CalDav Link" => "CalDav Bağlantısı",
"Shared calendars" => "Paylaşılan",
@@ -132,27 +160,29 @@
"Interval" => "Aralık",
"End" => "Son",
"occurrences" => "olaylar",
-"Import a calendar file" => "Takvim dosyasını içeri aktar",
-"Please choose the calendar" => "Lütfen takvimi seçin",
"create a new calendar" => "Yeni bir takvim oluÅŸtur",
+"Import a calendar file" => "Takvim dosyasını içeri aktar",
+"Please choose a calendar" => "Lütfen takvim seçiniz",
"Name of new calendar" => "Yeni takvimin adı",
+"Take an available name!" => "Müsait ismi al !",
+"A Calendar with this name already exists. If you continue anyhow, these calendars will be merged." => "Bu isimde bir takvim zaten mevcut. Yine de devam ederseniz bu takvimler birleÅŸtirilecektir.",
"Import" => "İçe Al",
-"Importing calendar" => "Takvim içe aktarılıyor",
-"Calendar imported successfully" => "Takvim başarıyla içe aktarıldı",
"Close Dialog" => "Diyalogu kapat",
"Create a new event" => "Yeni olay oluÅŸtur",
"View an event" => "Bir olay görüntüle",
"No categories selected" => "Kategori seçilmedi",
-"Select category" => "Kategori seçin",
"of" => "nın",
"at" => "üzerinde",
"Timezone" => "Zaman dilimi",
-"Check always for changes of the timezone" => "Sürekli zaman dilimi değişikliklerini kontrol et",
-"Timeformat" => "Saat biçimi",
"24h" => "24s",
"12h" => "12s",
-"First day of the week" => "Haftanın ilk günü",
-"Calendar CalDAV syncing address:" => "CalDAV Takvim eÅŸzamanlama adresi:",
+"Cache" => "Önbellek",
+"Clear cache for repeating events" => "Tekrar eden etkinlikler için ön belleği temizle.",
+"Calendar CalDAV syncing addresses" => "CalDAV takvimi adresleri senkronize ediyor.",
+"more info" => "daha fazla bilgi",
+"Primary address (Kontact et al)" => "Öncelikli adres",
+"iOS/OS X" => "iOS/OS X",
+"Read only iCalendar link(s)" => "Sadece okunabilir iCalendar link(ler)i",
"Users" => "Kullanıcılar",
"select users" => "kullanıcıları seç",
"Editable" => "Düzenlenebilir",
diff --git a/apps/calendar/l10n/uk.php b/apps/calendar/l10n/uk.php
index 892896742da..2911307e588 100644
--- a/apps/calendar/l10n/uk.php
+++ b/apps/calendar/l10n/uk.php
@@ -16,6 +16,7 @@
"Projects" => "Проекти",
"Questions" => "ЗапитаннÑ",
"Work" => "Робота",
+"New Calendar" => "новий Календар",
"Does not repeat" => "Ðе повторювати",
"Daily" => "Щоденно",
"Weekly" => "ЩотижнÑ",
@@ -52,21 +53,29 @@
"Date" => "Дата",
"Cal." => "Кал.",
"All day" => "УвеÑÑŒ день",
-"New Calendar" => "новий Календар",
+"Missing fields" => "Пропущені полÑ",
"Title" => "Ðазва",
+"From Date" => "Від Дати",
+"From Time" => "З ЧаÑу",
+"To Date" => "До ЧаÑу",
+"To Time" => "По Дату",
+"The event ends before it starts" => "ÐŸÐ¾Ð´Ñ–Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐ°Ñ”Ñ‚ÑŒÑÑ Ð´Ð¾ Ñ—Ñ— початку",
+"There was a database fail" => "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° бази даних",
"Week" => "Тиждень",
"Month" => "МіÑÑць",
"List" => "СпиÑок",
"Today" => "Сьогодні",
-"Calendars" => "Календарі",
-"There was a fail, while parsing the file." => "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° при обробці файлу",
-"Choose active calendars" => "Вибрати активні календарі",
+"Your calendars" => "Ваші календарі",
"Download" => "Завантажити",
"Edit" => "Редагувати",
+"Delete" => "Видалити",
"New calendar" => "Ðовий календар",
"Edit calendar" => "Редагувати календар",
"Active" => "Ðктивний",
"Calendar color" => "Колір календарÑ",
+"Save" => "Зберегти",
+"Cancel" => "Відмінити",
+"Export" => "ЕкÑпорт",
"Title of the Event" => "Ðазва події",
"Category" => "КатегоріÑ",
"From" => "З",
@@ -76,14 +85,14 @@
"Description" => "ОпиÑ",
"Description of the Event" => "ÐžÐ¿Ð¸Ñ Ð¿Ð¾Ð´Ñ–Ñ—",
"Repeat" => "Повторювати",
-"Import a calendar file" => "Імпортувати файл календарÑ",
"create a new calendar" => "Ñтворити новий календар",
+"Import a calendar file" => "Імпортувати файл календарÑ",
"Name of new calendar" => "Ðазва нового календарÑ",
-"Calendar imported successfully" => "Календар уÑпішно імпортовано",
+"Import" => "Імпорт",
"Create a new event" => "Створити нову подію",
"Timezone" => "ЧаÑовий поÑÑ",
-"Timeformat" => "Формат чаÑу",
"24h" => "24г",
"12h" => "12г",
-"Calendar CalDAV syncing address:" => "ÐдреÑа Ñинхронізації ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ CalDAV:"
+"Users" => "КориÑтувачі",
+"Groups" => "Групи"
);
diff --git a/apps/calendar/l10n/vi.php b/apps/calendar/l10n/vi.php
new file mode 100644
index 00000000000..3594a095eba
--- /dev/null
+++ b/apps/calendar/l10n/vi.php
@@ -0,0 +1,131 @@
+<?php $TRANSLATIONS = array(
+"No calendars found." => "Không tìm thấy lịch.",
+"No events found." => "Không tìm thấy sự kiện nào",
+"Wrong calendar" => "Sai lịch",
+"New Timezone:" => "Múi giỠmới :",
+"Timezone changed" => "Thay đổi múi giá»",
+"Invalid request" => "Yêu cầu không hợp lệ",
+"Calendar" => "Lịch",
+"ddd" => "ddd",
+"ddd M/d" => "ddd M/d",
+"dddd M/d" => "dddd M/d",
+"MMMM yyyy" => "MMMM yyyy",
+"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+"dddd, MMM d, yyyy" => "dddd, MMM d, yyyy",
+"Birthday" => "Ngày sinh nhật",
+"Business" => "Công việc",
+"Call" => "Số điện thoại",
+"Clients" => "Máy trạm",
+"Holidays" => "Ngày lễ",
+"Ideas" => "à tưởng",
+"Jubilee" => "Lễ kỷ niệm",
+"Meeting" => "Hội nghị",
+"Other" => "Khác",
+"Personal" => "Cá nhân",
+"Projects" => "Dự án",
+"Questions" => "Câu há»i",
+"Work" => "Công việc",
+"New Calendar" => "Lịch mới",
+"Does not repeat" => "Không lặp lại",
+"Daily" => "Hàng ngày",
+"Weekly" => "Hàng tuần",
+"Every Weekday" => "Mỗi ngày trong tuần",
+"Bi-Weekly" => "Hai tuần một lần",
+"Monthly" => "Hàng tháng",
+"Yearly" => "Hàng năm",
+"never" => "không thay đổi",
+"by occurrences" => "bởi xuất hiện",
+"by date" => "bởi ngày",
+"by monthday" => "bởi ngày trong tháng",
+"by weekday" => "bởi ngày trong tuần",
+"Monday" => "Thứ 2",
+"Tuesday" => "Thứ 3",
+"Wednesday" => "Thứ 4",
+"Thursday" => "Thứ 5",
+"Friday" => "Thứ ",
+"Saturday" => "Thứ 7",
+"Sunday" => "Chủ nhật",
+"events week of month" => "sự kiện trong tuần của tháng",
+"first" => "đầu tiên",
+"second" => "Thứ hai",
+"third" => "Thứ ba",
+"fourth" => "Thứ tư",
+"fifth" => "Thứ năm",
+"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",
+"by events date" => "Theo ngày tháng sự kiện",
+"by weeknumber(s)" => "số tuần",
+"by day and month" => "ngày, tháng",
+"Date" => "Ngày",
+"Cal." => "Cal.",
+"All day" => "Tất cả các ngày",
+"Title" => "Tiêu Ä‘á»",
+"From Date" => "Từ ngày",
+"From Time" => "Từ thá»i gian",
+"To Date" => "Tới ngày",
+"To Time" => "Tá»›i thá»i gian",
+"The event ends before it starts" => "Sự kiện này kết thúc trước khi nó bắt đầu",
+"Week" => "Tuần",
+"Month" => "Tháng",
+"List" => "Danh sách",
+"Today" => "Hôm nay",
+"Your calendars" => "Lịch của bạn",
+"CalDav Link" => "Liên kết CalDav ",
+"Shared calendars" => "Chia sẻ lịch",
+"No shared calendars" => "Không chia sẻ lcihj",
+"Share Calendar" => "Chia sẻ lịch",
+"Download" => "Tải vá»",
+"Edit" => "Chỉnh sửa",
+"Delete" => "Xóa",
+"shared with you by" => "Chia sẻ bởi",
+"New calendar" => "Lịch mới",
+"Edit calendar" => "sửa Lịch",
+"Displayname" => "Hiển thị tên",
+"Active" => "Kích hoạt",
+"Calendar color" => "Màu lịch",
+"Save" => "LÆ°u",
+"Submit" => "Submit",
+"Cancel" => "Hủy",
+"Edit an event" => "Sửa sự kiện",
+"Share" => "Chia sẻ",
+"Title of the Event" => "Tên sự kiện",
+"Category" => "Danh mục",
+"All Day Event" => "Sự kiện trong ngày",
+"From" => "Từ",
+"To" => "Tá»›i",
+"Advanced options" => "Tùy chá»n nâng cao",
+"Location" => "NÆ¡i",
+"Location of the Event" => "Nơi tổ chức sự kiện",
+"Description" => "Mô tả",
+"Description of the Event" => "Mô tả sự kiện",
+"Repeat" => "Lặp lại",
+"Advanced" => "Nâng cao",
+"Select weekdays" => "Chá»n ngày trong tuần",
+"Select days" => "Chá»n ngày",
+"and the events day of year." => "và sự kiện của ngày trong năm",
+"and the events day of month." => "và sự kiện của một ngày trong năm",
+"Select months" => "Chá»n tháng",
+"Select weeks" => "Chá»n tuần",
+"and the events week of year." => "và sự kiện của tuần trong năm.",
+"create a new calendar" => "Tạo lịch mới",
+"Name of new calendar" => "Tên lịch mới",
+"Close Dialog" => "Äóng há»™p thoại",
+"Create a new event" => "Tạo một sự kiện mới",
+"View an event" => "Xem một sự kiện",
+"No categories selected" => "Không danh sách nào được chá»n",
+"of" => "của",
+"at" => "tại",
+"Timezone" => "Múi giá»",
+"24h" => "24h",
+"12h" => "12h"
+);
diff --git a/apps/calendar/l10n/zh_CN.GB2312.php b/apps/calendar/l10n/zh_CN.GB2312.php
new file mode 100644
index 00000000000..38f039e6611
--- /dev/null
+++ b/apps/calendar/l10n/zh_CN.GB2312.php
@@ -0,0 +1,121 @@
+<?php $TRANSLATIONS = array(
+"Wrong calendar" => "错误的日历",
+"New Timezone:" => "新时区",
+"Timezone changed" => "时区改å˜äº†",
+"Invalid request" => "éžæ³•è¯·æ±‚",
+"Calendar" => "日历",
+"Birthday" => "生日",
+"Business" => "商务",
+"Call" => "呼å«",
+"Clients" => "客户端",
+"Deliverer" => "交付者",
+"Holidays" => "å‡æœŸ",
+"Ideas" => "çµæ„Ÿ",
+"Journey" => "旅行",
+"Jubilee" => "五å年纪念",
+"Meeting" => "会é¢",
+"Other" => "其它",
+"Personal" => "个人的",
+"Projects" => "项目",
+"Questions" => "问题",
+"Work" => "工作",
+"New Calendar" => "新的日历",
+"Does not repeat" => "ä¸è¦é‡å¤",
+"Daily" => "æ¯å¤©",
+"Weekly" => "æ¯æ˜ŸæœŸ",
+"Every Weekday" => "æ¯ä¸ªå‘¨æœ«",
+"Bi-Weekly" => "æ¯ä¸¤å‘¨",
+"Monthly" => "æ¯ä¸ªæœˆ",
+"Yearly" => "æ¯å¹´",
+"never" => "从ä¸",
+"by occurrences" => "æ ¹æ®å‘生时",
+"by date" => "æ ¹æ®æ—¥æœŸ",
+"by monthday" => "æ ¹æ®æœˆå¤©",
+"by weekday" => "æ ¹æ®æ˜ŸæœŸ",
+"Monday" => "星期一",
+"Tuesday" => "星期二",
+"Wednesday" => "星期三",
+"Thursday" => "星期四",
+"Friday" => "星期五",
+"Saturday" => "星期六",
+"Sunday" => "星期天",
+"events week of month" => "时间æ¯æœˆå‘生的周数",
+"first" => "首先",
+"second" => "其次",
+"third" => "第三",
+"fourth" => "第四",
+"fifth" => "第五",
+"last" => "最åŽ",
+"January" => "一月",
+"February" => "二月",
+"March" => "三月",
+"April" => "四月",
+"May" => "五月",
+"June" => "六月",
+"July" => "七月",
+"August" => "八月",
+"September" => "ä¹æœˆ",
+"October" => "å月",
+"November" => "å一月",
+"December" => "å二月",
+"by events date" => "æ ¹æ®æ—¶é—´æ—¥æœŸ",
+"by yearday(s)" => "æ ¹æ®å¹´æ•°",
+"by weeknumber(s)" => "æ ¹æ®å‘¨æ•°",
+"by day and month" => "æ ¹æ®å¤©å’Œæœˆ",
+"Date" => "日期",
+"Cal." => "Cal.",
+"All day" => "整天",
+"Missing fields" => "丢失的输入框",
+"Title" => "标题",
+"From Date" => "从日期",
+"From Time" => "从时间",
+"To Date" => "到日期",
+"To Time" => "到时间",
+"The event ends before it starts" => "在它开始å‰éœ€è¦ç»“æŸçš„事件",
+"There was a database fail" => "å‘生了一个数æ®åº“失败",
+"Week" => "星期",
+"Month" => "月",
+"List" => "列表",
+"Today" => "今天",
+"CalDav Link" => "CalDav 链接",
+"Download" => "下载",
+"Edit" => "编辑",
+"Delete" => "删除",
+"New calendar" => "新的日历",
+"Edit calendar" => "编辑日历",
+"Displayname" => "显示å称",
+"Active" => "活动",
+"Calendar color" => "日历颜色",
+"Save" => "ä¿å­˜",
+"Submit" => "æ交",
+"Cancel" => " å–消",
+"Edit an event" => "编辑一个事件",
+"Export" => "导出",
+"Title of the Event" => "事件的标题",
+"Category" => "分类",
+"All Day Event" => "æ¯å¤©çš„事件",
+"From" => "从",
+"To" => "到",
+"Advanced options" => "进阶选项",
+"Location" => "地点",
+"Location of the Event" => "事件的地点",
+"Description" => "解释",
+"Description of the Event" => "事件æè¿°",
+"Repeat" => "é‡å¤",
+"Advanced" => "进阶",
+"Select weekdays" => "选择星期",
+"Select days" => "选择日",
+"and the events day of year." => "选择æ¯å¹´æ—¶é—´å‘生天数",
+"and the events day of month." => "选择æ¯ä¸ªæœˆäº‹ä»¶å‘生的天",
+"Select months" => "选择月份",
+"Select weeks" => "选择星期",
+"and the events week of year." => "æ¯å¹´æ—¶é—´å‘生的星期",
+"Interval" => "é—´éš”",
+"End" => "结æŸ",
+"occurrences" => "å‘生",
+"Import" => "导入",
+"Create a new event" => "新建一个时间",
+"Timezone" => "时区",
+"24h" => "24å°æ—¶",
+"12h" => "12å°æ—¶"
+);
diff --git a/apps/calendar/l10n/zh_CN.php b/apps/calendar/l10n/zh_CN.php
index bb7e0a28724..add84588d35 100644
--- a/apps/calendar/l10n/zh_CN.php
+++ b/apps/calendar/l10n/zh_CN.php
@@ -6,6 +6,7 @@
"Timezone changed" => "时区已修改",
"Invalid request" => "éžæ³•è¯·æ±‚",
"Calendar" => "日历",
+"ddd" => "ddd",
"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}" => "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
"Birthday" => "生日",
"Business" => "商务",
@@ -23,6 +24,7 @@
"Questions" => "问题",
"Work" => "工作",
"unnamed" => "未命å",
+"New Calendar" => "新日历",
"Does not repeat" => "ä¸é‡å¤",
"Daily" => "æ¯å¤©",
"Weekly" => "æ¯å‘¨",
@@ -68,7 +70,6 @@
"Date" => "日期",
"Cal." => "日历",
"All day" => "全天",
-"New Calendar" => "新日历",
"Missing fields" => "缺少字段",
"Title" => "标题",
"From Date" => "从",
@@ -132,6 +133,7 @@
"Interval" => "é—´éš”",
"End" => "结æŸ",
"occurrences" => "次",
+"create a new calendar" => "创建新日历",
"Import a calendar file" => "导入日历文件",
"Please choose the calendar" => "请选择日历",
"create a new calendar" => "创建新日历",
@@ -143,7 +145,6 @@
"Create a new event" => "创建新事件",
"View an event" => "查看事件",
"No categories selected" => "无选中分类",
-"Select category" => "选择分类",
"of" => "在",
"at" => "在",
"Timezone" => "时区",
diff --git a/apps/calendar/l10n/zh_TW.php b/apps/calendar/l10n/zh_TW.php
index 746594462c4..48897b8ca06 100644
--- a/apps/calendar/l10n/zh_TW.php
+++ b/apps/calendar/l10n/zh_TW.php
@@ -23,6 +23,7 @@
"Questions" => "å•é¡Œ",
"Work" => "工作",
"unnamed" => "ç„¡å稱的",
+"New Calendar" => "新日曆",
"Does not repeat" => "ä¸é‡è¦†",
"Daily" => "æ¯æ—¥",
"Weekly" => "æ¯é€±",
@@ -68,7 +69,6 @@
"Date" => "日期",
"Cal." => "行事曆",
"All day" => "整天",
-"New Calendar" => "新日曆",
"Missing fields" => "éºå¤±æ¬„ä½",
"Title" => "標題",
"From Date" => "自日期",
@@ -81,9 +81,6 @@
"Month" => "月",
"List" => "清單",
"Today" => "今日",
-"Calendars" => "日曆",
-"There was a fail, while parsing the file." => "解æžæª”案時失敗。",
-"Choose active calendars" => "é¸æ“‡ä¸€å€‹ä½œç”¨ä¸­çš„日曆",
"Your calendars" => "你的行事曆",
"CalDav Link" => "CalDav è¯çµ",
"Shared calendars" => "分享的行事曆",
@@ -132,6 +129,7 @@
"Interval" => "é–“éš”",
"End" => "çµæŸ",
"occurrences" => "事件",
+"create a new calendar" => "建立新日曆",
"Import a calendar file" => "匯入日曆檔案",
"Please choose the calendar" => "è«‹é¸æ“‡æ—¥æ›†",
"create a new calendar" => "建立新日曆",
@@ -143,7 +141,6 @@
"Create a new event" => "建立一個新事件",
"View an event" => "觀看一個活動",
"No categories selected" => "沒有é¸æ“‡åˆ†é¡ž",
-"Select category" => "é¸æ“‡åˆ†é¡ž",
"of" => "æ–¼",
"at" => "æ–¼",
"Timezone" => "時å€",
@@ -151,7 +148,6 @@
"Timeformat" => "日期格å¼",
"24h" => "24å°æ™‚制",
"12h" => "12å°æ™‚制",
-"First day of the week" => "æ¯é€±çš„第一天",
"Calendar CalDAV syncing address:" => "CalDAV 的日曆åŒæ­¥åœ°å€ï¼š",
"Users" => "使用者",
"select users" => "é¸æ“‡ä½¿ç”¨è€…",
diff --git a/apps/calendar/lib/app.php b/apps/calendar/lib/app.php
index 6c55bd19884..8bdb54f4867 100644
--- a/apps/calendar/lib/app.php
+++ b/apps/calendar/lib/app.php
@@ -9,26 +9,26 @@
* This class manages our app actions
*/
OC_Calendar_App::$l10n = new OC_L10N('calendar');
-OC_Calendar_App::$tz = OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'timezone', date_default_timezone_get());
+OC_Calendar_App::$tz = OC_Calendar_App::getTimezone();
class OC_Calendar_App{
const CALENDAR = 'calendar';
const EVENT = 'event';
- /*
+ /**
* @brief language object for calendar app
*/
public static $l10n;
- /*
+ /**
* @brief categories of the user
*/
protected static $categories = null;
- /*
+ /**
* @brief timezone of the user
*/
public static $tz;
- /*
+ /**
* @brief returns informations about a calendar
* @param int $id - id of the calendar
* @param bool $security - check access rights or not
@@ -50,13 +50,10 @@ class OC_Calendar_App{
return false;
}
}
- if($calendar === false){
- return false;
- }
- return OC_Calendar_Calendar::find($id);
+ return $calendar;
}
- /*
+ /**
* @brief returns informations about an event
* @param int $id - id of the event
* @param bool $security - check access rights or not
@@ -82,7 +79,7 @@ class OC_Calendar_App{
return $event;
}
- /*
+ /**
* @brief returns the parsed calendar data
* @param int $id - id of the event
* @param bool $security - check access rights or not
@@ -100,7 +97,7 @@ class OC_Calendar_App{
return $vobject;
}
- /*
+ /**
* @brief checks if an event was edited and dies if it was
* @param (object) $vevent - vevent object of the event
* @param (int) $lastmodified - time of last modification as unix timestamp
@@ -115,12 +112,11 @@ class OC_Calendar_App{
return true;
}
- /*
+ /**
* @brief returns the default categories of ownCloud
* @return (array) $categories
*/
- protected static function getDefaultCategories()
- {
+ protected static function getDefaultCategories(){
return array(
self::$l10n->t('Birthday'),
self::$l10n->t('Business'),
@@ -140,7 +136,7 @@ class OC_Calendar_App{
);
}
- /*
+ /**
* @brief returns the vcategories object of the user
* @return (object) $vcategories
*/
@@ -151,12 +147,11 @@ class OC_Calendar_App{
return self::$categories;
}
- /*
+ /**
* @brief returns the categories of the vcategories object
* @return (array) $categories
*/
- public static function getCategoryOptions()
- {
+ public static function getCategoryOptions(){
$categories = self::getVCategories()->categories();
return $categories;
}
@@ -199,17 +194,24 @@ class OC_Calendar_App{
} else
if (isset($calendar->VTODO)) {
$object = $calendar->VTODO;
+ } else
+ if (isset($calendar->VJOURNAL)) {
+ $object = $calendar->VJOURNAL;
}
if ($object) {
self::getVCategories()->loadFromVObject($object, true);
}
}
-
+
+ /**
+ * @brief returns the options for the repeat rule of an repeating event
+ * @return array - valid inputs for the repeat rule of an repeating event
+ */
public static function getRepeatOptions(){
return OC_Calendar_Object::getRepeatOptions(self::$l10n);
}
- /*
+ /**
* @brief returns the options for the end of an repeating event
* @return array - valid inputs for the end of an repeating events
*/
@@ -217,7 +219,7 @@ class OC_Calendar_App{
return OC_Calendar_Object::getEndOptions(self::$l10n);
}
- /*
+ /**
* @brief returns the options for an monthly repeating event
* @return array - valid inputs for monthly repeating events
*/
@@ -225,7 +227,7 @@ class OC_Calendar_App{
return OC_Calendar_Object::getMonthOptions(self::$l10n);
}
- /*
+ /**
* @brief returns the options for an weekly repeating event
* @return array - valid inputs for weekly repeating events
*/
@@ -233,7 +235,7 @@ class OC_Calendar_App{
return OC_Calendar_Object::getWeeklyOptions(self::$l10n);
}
- /*
+ /**
* @brief returns the options for an yearly repeating event
* @return array - valid inputs for yearly repeating events
*/
@@ -241,7 +243,7 @@ class OC_Calendar_App{
return OC_Calendar_Object::getYearOptions(self::$l10n);
}
- /*
+ /**
* @brief returns the options for an yearly repeating event which occurs on specific days of the year
* @return array - valid inputs for yearly repeating events
*/
@@ -249,7 +251,7 @@ class OC_Calendar_App{
return OC_Calendar_Object::getByYearDayOptions();
}
- /*
+ /**
* @brief returns the options for an yearly repeating event which occurs on specific month of the year
* @return array - valid inputs for yearly repeating events
*/
@@ -257,7 +259,7 @@ class OC_Calendar_App{
return OC_Calendar_Object::getByMonthOptions(self::$l10n);
}
- /*
+ /**
* @brief returns the options for an yearly repeating event which occurs on specific week numbers of the year
* @return array - valid inputs for yearly repeating events
*/
@@ -265,7 +267,7 @@ class OC_Calendar_App{
return OC_Calendar_Object::getByWeekNoOptions();
}
- /*
+ /**
* @brief returns the options for an yearly or monthly repeating event which occurs on specific days of the month
* @return array - valid inputs for yearly or monthly repeating events
*/
@@ -273,15 +275,25 @@ class OC_Calendar_App{
return OC_Calendar_Object::getByMonthDayOptions();
}
- /*
+ /**
* @brief returns the options for an monthly repeating event which occurs on specific weeks of the month
* @return array - valid inputs for monthly repeating events
*/
public static function getWeekofMonth(){
return OC_Calendar_Object::getWeekofMonth(self::$l10n);
}
-
- /*
+
+ /**
+ * @return (string) $timezone as set by user or the default timezone
+ */
+ public static function getTimezone() {
+ return OCP\Config::getUserValue(OCP\User::getUser(),
+ 'calendar',
+ 'timezone',
+ date_default_timezone_get());
+ }
+
+ /**
* @brief checks the access for a calendar / an event
* @param (int) $id - id of the calendar / event
* @param (string) $type - type of the id (calendar/event)
@@ -322,7 +334,7 @@ class OC_Calendar_App{
}
}
- /*
+ /**
* @brief analyses the parameter for calendar parameter and returns the objects
* @param (string) $calendarid - calendarid
* @param (int) $start - unixtimestamp of start
@@ -362,97 +374,62 @@ class OC_Calendar_App{
return $events;
}
- /*
+ /**
* @brief generates the output for an event which will be readable for our js
* @param (mixed) $event - event object / array
- * @param (int) $start - unixtimestamp of start
- * @param (int) $end - unixtimestamp of end
+ * @param (int) $start - DateTime object of start
+ * @param (int) $end - DateTime object of end
* @return (array) $output - readable output
*/
public static function generateEventOutput($event, $start, $end){
- $output = array();
-
- if(isset($event['calendardata'])){
- $object = OC_VObject::parse($event['calendardata']);
- $vevent = $object->VEVENT;
- }else{
- $vevent = $event['vevent'];
+ if(!isset($event['calendardata']) && !isset($event['vevent'])){
+ return false;
}
-
+ if(!isset($event['calendardata']) && isset($event['vevent'])){
+ $event['calendardata'] = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:ownCloud's Internal iCal System\n" . $event['vevent']->serialize() . "END:VCALENDAR";
+ }
+ $object = OC_VObject::parse($event['calendardata']);
+ $vevent = $object->VEVENT;
+ $return = array();
+ $id = $event['id'];
+ $allday = ($vevent->DTSTART->getDateType() == Sabre_VObject_Element_DateTime::DATE)?true:false;
$last_modified = @$vevent->__get('LAST-MODIFIED');
$lastmodified = ($last_modified)?$last_modified->getDateTime()->format('U'):0;
-
- $output = array('id'=>(int)$event['id'],
+ $staticoutput = array('id'=>(int)$event['id'],
'title' => ($event['summary']!=NULL || $event['summary'] != '')?$event['summary']: self::$l10n->t('unnamed'),
'description' => isset($vevent->DESCRIPTION)?$vevent->DESCRIPTION->value:'',
- 'lastmodified'=>$lastmodified);
-
- $dtstart = $vevent->DTSTART;
- $start_dt = $dtstart->getDateTime();
- $dtend = OC_Calendar_Object::getDTEndFromVEvent($vevent);
- $end_dt = $dtend->getDateTime();
-
- if ($dtstart->getDateType() == Sabre_VObject_Element_DateTime::DATE){
- $output['allDay'] = true;
- }else{
- $output['allDay'] = false;
- $start_dt->setTimezone(new DateTimeZone(self::$tz));
- $end_dt->setTimezone(new DateTimeZone(self::$tz));
- }
-
- // Handle exceptions to recurring events
- $exceptionDateObjects = $vevent->select('EXDATE');
- $exceptionDateMap = Array();
- foreach ($exceptionDateObjects as $exceptionObject) {
- foreach($exceptionObject->getDateTimes() as $datetime) {
- $ts = $datetime->getTimestamp();
- $exceptionDateMap[idate('Y',$ts)][idate('m', $ts)][idate('d', $ts)] = true;
- }
- }
-
- $return = array();
- if($event['repeating'] == 1){
- $duration = (double) $end_dt->format('U') - (double) $start_dt->format('U');
- $r = new When();
- $r->recur($start_dt)->rrule((string) $vevent->RRULE);
- /*$r = new iCal_Repeat_Generator(array('RECUR' => $start_dt,
- * 'RRULE' => (string)$vevent->RRULE
- * 'RDATE' => (string)$vevent->RDATE
- * 'EXRULE' => (string)$vevent->EXRULE
- * 'EXDATE' => (string)$vevent->EXDATE));*/
- while($result = $r->next()){
- if($result < $start){
- continue;
- }
- if($result > $end){
- break;
- }
- // Check for exceptions to recurring events
- $ts = $result->getTimestamp();
- if (isset($exceptionDateMap[idate('Y',$ts)][idate('m', $ts)][idate('d', $ts)])) {
- continue;
- }
- unset($ts);
-
- if($output['allDay'] == true){
- $output['start'] = $result->format('Y-m-d');
- $output['end'] = date('Y-m-d', $result->format('U') + --$duration);
+ 'lastmodified'=>$lastmodified,
+ 'allDay'=>$allday);
+ if(OC_Calendar_Object::isrepeating($id) && OC_Calendar_Repeat::is_cached_inperiod($event['id'], $start, $end)){
+ $cachedinperiod = OC_Calendar_Repeat::get_inperiod($id, $start, $end);
+ foreach($cachedinperiod as $cachedevent){
+ $dynamicoutput = array();
+ if($allday){
+ $start_dt = new DateTime($cachedevent['startdate'], new DateTimeZone('UTC'));
+ $end_dt = new DateTime($cachedevent['enddate'], new DateTimeZone('UTC'));
+ $dynamicoutput['start'] = $start_dt->format('Y-m-d');
+ $dynamicoutput['end'] = $end_dt->format('Y-m-d');
}else{
- $output['start'] = $result->format('Y-m-d H:i:s');
- $output['end'] = date('Y-m-d H:i:s', $result->format('U') + $result->format('Z') + $duration);
+ $start_dt = new DateTime($cachedevent['startdate'], new DateTimeZone('UTC'));
+ $end_dt = new DateTime($cachedevent['enddate'], new DateTimeZone('UTC'));
+ $start_dt->setTimezone(new DateTimeZone(self::$tz));
+ $end_dt->setTimezone(new DateTimeZone(self::$tz));
+ $dynamicoutput['start'] = $start_dt->format('Y-m-d H:i:s');
+ $dynamicoutput['end'] = $end_dt->format('Y-m-d H:i:s');
}
- $return[] = $output;
+ $return[] = array_merge($staticoutput, $dynamicoutput);
}
}else{
- if($output['allDay'] == true){
- $output['start'] = $start_dt->format('Y-m-d');
- $end_dt->modify('-1 sec');
- $output['end'] = $end_dt->format('Y-m-d');
- }else{
- $output['start'] = $start_dt->format('Y-m-d H:i:s');
- $output['end'] = $end_dt->format('Y-m-d H:i:s');
+ if(OC_Calendar_Object::isrepeating($id) || $event['repeating'] == 1){
+ $object->expand($start, $end);
+ }
+ foreach($object->getComponents() as $singleevent){
+ if(!($singleevent instanceof Sabre_VObject_Component_VEvent)){
+ continue;
+ }
+ $dynamicoutput = OC_Calendar_Object::generateStartEndDate($singleevent->DTSTART, OC_Calendar_Object::getDTEndFromVEvent($singleevent), $allday, self::$tz);
+ $return[] = array_merge($staticoutput, $dynamicoutput);
}
- $return[] = $output;
}
return $return;
}
diff --git a/apps/calendar/lib/calendar.php b/apps/calendar/lib/calendar.php
index 09cbee204dc..f8f5aab3636 100644
--- a/apps/calendar/lib/calendar.php
+++ b/apps/calendar/lib/calendar.php
@@ -5,24 +5,11 @@
* later.
* See the COPYING-README file.
*/
-/*
+/**
*
* The following SQL statement is just a help for developers and will not be
* executed!
*
- * CREATE TABLE calendar_objects (
- * id INTEGER UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
- * calendarid INTEGER UNSIGNED NOT NULL,
- * objecttype VARCHAR(40) NOT NULL,
- * startdate DATETIME,
- * enddate DATETIME,
- * repeating INT(1),
- * summary VARCHAR(255),
- * calendardata TEXT,
- * uri VARCHAR(100),
- * lastmodified INT(11)
- * );
- *
* CREATE TABLE calendar_calendars (
* id INTEGER UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
* userid VARCHAR(255),
@@ -35,6 +22,7 @@
* timezone TEXT,
* components VARCHAR(20)
* );
+ *
*/
/**
@@ -44,10 +32,10 @@ class OC_Calendar_Calendar{
/**
* @brief Returns the list of calendars for a specific user.
* @param string $uid User ID
- * @param boolean $active Only return calendars with this $active state, default(=null) is don't care
+ * @param boolean $active Only return calendars with this $active state, default(=false) is don't care
* @return array
*/
- public static function allCalendars($uid, $active=null){
+ public static function allCalendars($uid, $active=false){
$values = array($uid);
$active_where = '';
if (!is_null($active) && $active){
@@ -109,7 +97,10 @@ class OC_Calendar_Calendar{
$stmt = OCP\DB::prepare( 'INSERT INTO `*PREFIX*calendar_calendars` (`userid`,`displayname`,`uri`,`ctag`,`calendarorder`,`calendarcolor`,`timezone`,`components`) VALUES(?,?,?,?,?,?,?,?)' );
$result = $stmt->execute(array($userid,$name,$uri,1,$order,$color,$timezone,$components));
- return OCP\DB::insertid('*PREFIX*calendar_calendars');
+ $insertid = OCP\DB::insertid('*PREFIX*calendar_calendars');
+ OCP\Util::emitHook('OC_Calendar', 'addCalendar', $insertid);
+
+ return $insertid;
}
/**
@@ -129,7 +120,10 @@ class OC_Calendar_Calendar{
$stmt = OCP\DB::prepare( 'INSERT INTO `*PREFIX*calendar_calendars` (`userid`,`displayname`,`uri`,`ctag`,`calendarorder`,`calendarcolor`,`timezone`,`components`) VALUES(?,?,?,?,?,?,?,?)' );
$result = $stmt->execute(array($userid,$name,$uri,1,$order,$color,$timezone,$components));
- return OCP\DB::insertid('*PREFIX*calendar_calendars');
+ $insertid = OCP\DB::insertid('*PREFIX*calendar_calendars');
+ OCP\Util::emitHook('OC_Calendar', 'addCalendar', $insertid);
+
+ return $insertid;
}
/**
@@ -158,6 +152,7 @@ class OC_Calendar_Calendar{
$stmt = OCP\DB::prepare( 'UPDATE `*PREFIX*calendar_calendars` SET `displayname`=?,`calendarorder`=?,`calendarcolor`=?,`timezone`=?,`components`=?,`ctag`=`ctag`+1 WHERE `id`=?' );
$result = $stmt->execute(array($name,$order,$color,$timezone,$components,$id));
+ OCP\Util::emitHook('OC_Calendar', 'editCalendar', $id);
return true;
}
@@ -198,9 +193,27 @@ class OC_Calendar_Calendar{
$stmt = OCP\DB::prepare( 'DELETE FROM `*PREFIX*calendar_objects` WHERE `calendarid` = ?' );
$stmt->execute(array($id));
+ OCP\Util::emitHook('OC_Calendar', 'deleteCalendar', $id);
+ if(count(self::allCalendars(OCP\USER::getUser())) == 0) {
+ self::addCalendar(OCP\USER::getUser(),'Default calendar');
+ }
+
return true;
}
-
+
+ /**
+ * @brief merges two calendars
+ * @param integer $id1
+ * @param integer $id2
+ * @return boolean
+ */
+ public static function mergeCalendar($id1, $id2){
+ $stmt = OCP\DB::prepare('UPDATE `*PREFIX*calendar_objects` SET `calendarid` = ? WHERE `calendarid` = ?');
+ $stmt->execute(array($id1, $id2));
+ self::touchCalendar($id1);
+ self::deleteCalendar($id2);
+ }
+
/**
* @brief Creates a URI for Calendar
* @param string $name name of the calendar
@@ -226,6 +239,11 @@ class OC_Calendar_Calendar{
list($prefix,$userid) = Sabre_DAV_URLUtil::splitPath($principaluri);
return $userid;
}
+
+ /**
+ * @brief returns the possible color for calendars
+ * @return array
+ */
public static function getCalendarColorOptions(){
return array(
'#ff0000', // "Red"
@@ -239,13 +257,52 @@ class OC_Calendar_Calendar{
);
}
+ /**
+ * @brief generates the Event Source Info for our JS
+ * @param array $calendar calendar data
+ * @return array
+ */
public static function getEventSourceInfo($calendar){
return array(
'url' => OCP\Util::linkTo('calendar', 'ajax/events.php').'?calendar_id='.$calendar['id'],
'backgroundColor' => $calendar['calendarcolor'],
'borderColor' => '#888',
- 'textColor' => 'black',
+ 'textColor' => self::generateTextColor($calendar['calendarcolor']),
'cache' => true,
);
}
+
+ /*
+ * @brief checks if a calendar name is available for a user
+ * @param string $calendarname
+ * @param string $userid
+ * @return boolean
+ */
+ public static function isCalendarNameavailable($calendarname, $userid){
+ $calendars = self::allCalendars($userid);
+ foreach($calendars as $calendar){
+ if($calendar['displayname'] == $calendarname){
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /*
+ * @brief generates the text color for the calendar
+ * @param string $calendarcolor rgb calendar color code in hex format (with or without the leading #)
+ * (this function doesn't pay attention on the alpha value of rgba color codes)
+ * @return boolean
+ */
+ public static function generateTextColor($calendarcolor){
+ if(substr_count($calendarcolor, '#') == 1){
+ $calendarcolor = substr($calendarcolor,1);
+ }
+ $red = hexdec(substr($calendarcolor,0,2));
+ $green = hexdec(substr($calendarcolor,2,2));
+ $blue = hexdec(substr($calendarcolor,2,2));
+ //recommendation by W3C
+ $computation = ((($red * 299) + ($green * 587) + ($blue * 114)) / 1000);
+ return ($computation > 130)?'#000000':'#FAFAFA';
+ }
}
diff --git a/apps/calendar/lib/export.php b/apps/calendar/lib/export.php
new file mode 100644
index 00000000000..8f26891f366
--- /dev/null
+++ b/apps/calendar/lib/export.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Copyright (c) 2012 Georg Ehrke <ownclouddev@georgswebsite.de>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+/**
+ * This class does export and converts all times to UTC
+ */
+class OC_Calendar_Export{
+ /**
+ * @brief Use one of these constants as second parameter if you call OC_Calendar_Export::export()
+ */
+ const CALENDAR = 'calendar';
+ const EVENT = 'event';
+
+ /**
+ * @brief export a calendar or an event
+ * @param integer $id id of calendar / event
+ * @param string $type use OC_Calendar_Export constants
+ * @return string
+ */
+ public static function export($id, $type){
+ if($type == self::EVENT){
+ $return = self::event($id);
+ }else{
+ $return = self::calendar($id);
+ }
+ return self::fixLineBreaks($return);
+ }
+
+ /**
+ * @brief exports a calendar and convert all times to UTC
+ * @param integer $id id of the calendar
+ * @return string
+ */
+ private static function calendar($id){
+ $events = OC_Calendar_Object::all($id);
+ $calendar = OC_Calendar_Calendar::find($id);
+ $return = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:ownCloud Calendar " . OCP\App::getAppVersion('calendar') . "\nX-WR-CALNAME:" . $calendar['displayname'] . "\n";
+ foreach($events as $event){
+ $return .= self::generateEvent($event);
+ }
+ $return .= "END:VCALENDAR";
+ return $return;
+ }
+
+ /**
+ * @brief exports an event and convert all times to UTC
+ * @param integer $id id of the event
+ * @return string
+ */
+ private static function event($id){
+ $event = OC_Calendar_Object::find($id);
+ $return = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:ownCloud Calendar " . OCP\App::getAppVersion('calendar') . "\nX-WR-CALNAME:" . $event['summary'] . "\n";
+ $return .= self::generateEvent($event);
+ $return .= "END:VCALENDAR";
+ return $return;
+ }
+
+ /**
+ * @brief generates the VEVENT with UTC dates
+ * @param array $event
+ * @return string
+ */
+ private static function generateEvent($event){
+ $object = OC_VObject::parse($event['calendardata']);
+ $dtstart = $object->VEVENT->DTSTART;
+ $start_dt = $dtstart->getDateTime();
+ $dtend = OC_Calendar_Object::getDTEndFromVEvent($object->VEVENT);
+ $end_dt = $dtend->getDateTime();
+ if($dtstart->getDateType() !== Sabre_VObject_Element_DateTime::DATE){
+ $start_dt->setTimezone(new DateTimeZone('UTC'));
+ $end_dt->setTimezone(new DateTimeZone('UTC'));
+ $object->VEVENT->setDateTime('DTSTART', $start_dt, Sabre_VObject_Property_DateTime::UTC);
+ $object->VEVENT->setDateTime('DTEND', $end_dt, Sabre_VObject_Property_DateTime::UTC);
+ }
+ return $object->VEVENT->serialize();
+ }
+
+ /**
+ * @brief fixes new line breaks
+ * (fixes problems with Apple iCal)
+ * @param string $string to fix
+ * @return string
+ */
+ private static function fixLineBreaks($string){
+ $string = str_replace("\r\n", "\n", $string);
+ $string = str_replace("\r", "\n", $string);
+ $string = str_replace("\n", "\r\n", $string);
+ return $string;
+ }
+}
diff --git a/apps/calendar/lib/import.php b/apps/calendar/lib/import.php
new file mode 100644
index 00000000000..368f8406e71
--- /dev/null
+++ b/apps/calendar/lib/import.php
@@ -0,0 +1,336 @@
+<?php
+/**
+ * Copyright (c) 2012 Georg Ehrke <ownclouddev@georgswebsite.de>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+/*
+ * This class does import and converts all times to the users current timezone
+ */
+class OC_Calendar_Import{
+ /*
+ * @brief counts the absolute number of parsed elements
+ */
+ private $abscount;
+
+ /*
+ * @brief var saves if the percentage should be saved with OC_Cache
+ */
+ private $cacheprogress;
+
+ /*
+ * @brief Sabre_VObject_Component_VCalendar object - for documentation see http://code.google.com/p/sabredav/wiki/Sabre_VObject_Component_VCalendar
+ */
+ private $calobject;
+
+ /*
+ * @brief var counts the number of imported elements
+ */
+ private $count;
+
+ /*
+ * @brief var to check if errors happend while initialization
+ */
+ private $error;
+
+ /*
+ * @brief var saves the ical string that was submitted with the __construct function
+ */
+ private $ical;
+
+ /*
+ * @brief calendar id for import
+ */
+ private $id;
+
+ /*
+ * @brief var saves the percentage of the import's progress
+ */
+ private $progress;
+
+ /*
+ * @brief var saves the key for the percentage of the import's progress
+ */
+ private $progresskey;
+
+ /*
+ * @brief var saves the timezone the events shell converted to
+ */
+ private $tz;
+
+ /*
+ * @brief var saves the userid
+ */
+ private $userid;
+
+ /*
+ * public methods
+ */
+
+ /*
+ * @brief does general initialization for import object
+ * @param string $calendar content of ical file
+ * @param string $tz timezone of the user
+ * @return boolean
+ */
+ public function __construct($ical){
+ $this->error = null;
+ $this->ical = $ical;
+ $this->abscount = 0;
+ $this->count = 0;
+ try{
+ $this->calobject = OC_VObject::parse($this->ical);
+ }catch(Exception $e){
+ //MISSING: write some log
+ $this->error = true;
+ return false;
+ }
+ return true;
+ }
+
+ /*
+ * @brief imports a calendar
+ * @return boolean
+ */
+ public function import(){
+ if(!$this->isValid()){
+ return false;
+ }
+ $numofcomponents = count($this->calobject->getComponents());
+ foreach($this->calobject->getComponents() as $object){
+ if(!($object instanceof Sabre_VObject_Component_VEvent) && !($object instanceof Sabre_VObject_Component_VJournal) && !($object instanceof Sabre_VObject_Component_VTodo)){
+ continue;
+ }
+ $dtend = OC_Calendar_Object::getDTEndFromVEvent($object);
+ $object->DTSTART->getDateTime()->setTimezone(new DateTimeZone($this->tz));
+ $object->DTEND->setDateTime($dtend->getDateTime(), $object->DTSTART->getDateType());
+ $object->DTEND->getDateTime()->setTimezone(new DateTimeZone($this->tz));
+ $vcalendar = $this->createVCalendar($object->serialize());
+ $insertid = OC_Calendar_Object::add($this->id, $vcalendar);
+ $this->abscount++;
+ if($this->isDuplicate($insertid)){
+ OC_Calendar_Object::delete($insertid);
+ }else{
+ $this->count++;
+ }
+ $this->updateProgress(intval(($this->abscount / $numofcomponents)*100));
+ }
+ OC_Cache::remove($this->progresskey);
+ return true;
+ }
+
+ /*
+ * @brief sets the timezone
+ * @return boolean
+ */
+ public function setTimeZone($tz){
+ $this->tz = $tz;
+ return true;
+ }
+
+ /*
+ * @brief sets the progresskey
+ * @return boolean
+ */
+ public function setProgresskey($progresskey){
+ $this->progresskey = $progresskey;
+ return true;
+ }
+
+ /*
+ * @brief checks if something went wrong while initialization
+ * @return boolean
+ */
+ public function isValid(){
+ if(is_null($this->error)){
+ return true;
+ }
+ return false;
+ }
+
+ /*
+ * @brief returns the percentage of progress
+ * @return integer
+ */
+ public function getProgress(){
+ return $this->progress;
+ }
+
+ /*
+ * @brief enables the cache for the percentage of progress
+ * @return boolean
+ */
+ public function enableProgressCache(){
+ $this->cacheprogress = true;
+ return true;
+ }
+
+ /*
+ * @brief disables the cache for the percentage of progress
+ * @return boolean
+ */
+ public function disableProgressCache(){
+ $this->cacheprogress = false;
+ return false;
+ }
+
+ /*
+ * @brief generates a new calendar name
+ * @return string
+ */
+ public function createCalendarName(){
+ $calendars = OC_Calendar_Calendar::allCalendars($this->userid);
+ $calendarname = $guessedcalendarname = !is_null($this->guessCalendarName())?($this->guessCalendarName()):(OC_Calendar_App::$l10n->t('New Calendar'));
+ $i = 1;
+ while(!OC_Calendar_Calendar::isCalendarNameavailable($calendarname, $this->userid)){
+ $calendarname = $guessedcalendarname . ' (' . $i . ')';
+ $i++;
+ }
+ return $calendarname;
+ }
+
+ /*
+ * @brief generates a new calendar color
+ * @return string
+ */
+ public function createCalendarColor(){
+ if(is_null($this->guessCalendarColor())){
+ return '#9fc6e7';
+ }
+ return $this->guessCalendarColor();
+ }
+
+ /*
+ * @brief sets the id for the calendar
+ * @param integer $id of the calendar
+ * @return boolean
+ */
+ public function setCalendarID($id){
+ $this->id = $id;
+ return true;
+ }
+
+ /*
+ * @brief sets the userid to import the calendar
+ * @param string $id of the user
+ * @return boolean
+ */
+ public function setUserID($userid){
+ $this->userid = $userid;
+ return true;
+ }
+
+ /*
+ * @brief returns the private
+ * @param string $id of the user
+ * @return boolean
+ */
+ public function getCount(){
+ return $this->count;
+ }
+
+ /*
+ * private methods
+ */
+
+ /*
+ * @brief generates an unique ID
+ * @return string
+ */
+ //private function createUID(){
+ // return substr(md5(rand().time()),0,10);
+ //}
+
+ /*
+ * @brief checks is the UID is already in use for another event
+ * @param string $uid uid to check
+ * @return boolean
+ */
+ //private function isUIDAvailable($uid){
+ //
+ //}
+
+ /*
+ * @brief generates a proper VCalendar string
+ * @param string $vobject
+ * @return string
+ */
+ private function createVCalendar($vobject){
+ if(is_object($vobject)){
+ $vobject = @$vobject->serialize();
+ }
+ $vcalendar = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:ownCloud Calendar " . OCP\App::getAppVersion('calendar') . "\n";
+ $vcalendar .= $vobject;
+ $vcalendar .= "END:VCALENDAR";
+ return $vcalendar;
+ }
+
+ /*
+ * @brief checks if an event already exists in the user's calendars
+ * @param integer $insertid id of the new object
+ * @return boolean
+ */
+ private function isDuplicate($insertid){
+ $newobject = OC_Calendar_Object::find($insertid);
+ $stmt = OCP\DB::prepare('SELECT COUNT(*) as count FROM *PREFIX*calendar_objects
+ INNER JOIN *PREFIX*calendar_calendars ON calendarid=*PREFIX*calendar_calendars.id
+ WHERE objecttype=? AND startdate=? AND enddate=? AND repeating=? AND summary=? AND calendardata=? AND userid = ?');
+ $result = $stmt->execute(array($newobject['objecttype'],$newobject['startdate'],$newobject['enddate'],$newobject['repeating'],$newobject['summary'],$newobject['calendardata'], $this->userid));
+ $result = $result->fetchRow();
+ if($result['count'] >= 2){
+ return true;
+ }
+ return false;
+ }
+
+ /*
+ * @brief updates the progress var
+ * @param integer $percentage
+ * @return boolean
+ */
+ private function updateProgress($percentage){
+ $this->progress = $percentage;
+ if($this->cacheprogress){
+ OC_Cache::set($this->progresskey, $this->progress, 300);
+ }
+ return true;
+ }
+
+ /*
+ * public methods for (pre)rendering of X-... Attributes
+ */
+
+ /*
+ * @brief guesses the calendar color
+ * @return mixed - string or boolean
+ */
+ public function guessCalendarColor(){
+ if(!is_null($this->calobject->__get('X-APPLE-CALENDAR-COLOR'))){
+ return $this->calobject->__get('X-APPLE-CALENDAR-COLOR');
+ }
+ return null;
+ }
+
+ /*
+ * @brief guesses the calendar description
+ * @return mixed - string or boolean
+ */
+ public function guessCalendarDescription(){
+ if(!is_null($this->calobject->__get('X-WR-CALDESC'))){
+ return $this->calobject->__get('X-WR-CALDESC');
+ }
+ return null;
+ }
+
+ /*
+ * @brief guesses the calendar name
+ * @return mixed - string or boolean
+ */
+ public function guessCalendarName(){
+ if(!is_null($this->calobject->__get('X-WR-CALNAME'))){
+ return $this->calobject->__get('X-WR-CALNAME');
+ }
+ return null;
+ }
+}
diff --git a/apps/calendar/lib/object.php b/apps/calendar/lib/object.php
index df866bd3c5f..8020d7c2e53 100644
--- a/apps/calendar/lib/object.php
+++ b/apps/calendar/lib/object.php
@@ -1,10 +1,31 @@
<?php
/**
* Copyright (c) 2011 Jakob Sack <mail@jakobsack.de>
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * Copyright (c) 2012 Georg Ehrke <ownclouddev at georgswebsite dot de>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
+ /**
+ *
+ * The following SQL statement is just a help for developers and will not be
+ * executed!
+ *
+ * CREATE TABLE calendar_objects (
+ * id INTEGER UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ * calendarid INTEGER UNSIGNED NOT NULL,
+ * objecttype VARCHAR(40) NOT NULL,
+ * startdate DATETIME,
+ * enddate DATETIME,
+ * repeating INT(1),
+ * summary VARCHAR(255),
+ * calendardata TEXT,
+ * uri VARCHAR(100),
+ * lastmodified INT(11)
+ * );
+ *
+ */
/**
* This class manages our calendar objects
@@ -108,7 +129,7 @@ class OC_Calendar_Object{
$object_id = OCP\DB::insertid('*PREFIX*calendar_objects');
OC_Calendar_Calendar::touchCalendar($id);
-
+ OCP\Util::emitHook('OC_Calendar', 'addEvent', $object_id);
return $object_id;
}
@@ -128,7 +149,7 @@ class OC_Calendar_Object{
$object_id = OCP\DB::insertid('*PREFIX*calendar_objects');
OC_Calendar_Calendar::touchCalendar($id);
-
+ OCP\Util::emitHook('OC_Calendar', 'addEvent', $object_id);
return $object_id;
}
@@ -149,6 +170,7 @@ class OC_Calendar_Object{
$stmt->execute(array($type,$startdate,$enddate,$repeating,$summary,$data,time(),$id));
OC_Calendar_Calendar::touchCalendar($oldobject['calendarid']);
+ OCP\Util::emitHook('OC_Calendar', 'editEvent', $id);
return true;
}
@@ -170,6 +192,7 @@ class OC_Calendar_Object{
$stmt->execute(array($type,$startdate,$enddate,$repeating,$summary,$data,time(),$oldobject['id']));
OC_Calendar_Calendar::touchCalendar($oldobject['calendarid']);
+ OCP\Util::emitHook('OC_Calendar', 'editEvent', $oldobject['id']);
return true;
}
@@ -184,6 +207,7 @@ class OC_Calendar_Object{
$stmt = OCP\DB::prepare( 'DELETE FROM `*PREFIX*calendar_objects` WHERE `id` = ?' );
$stmt->execute(array($id));
OC_Calendar_Calendar::touchCalendar($oldobject['calendarid']);
+ OCP\Util::emitHook('OC_Calendar', 'deleteEvent', $id);
return true;
}
@@ -195,9 +219,11 @@ class OC_Calendar_Object{
* @return boolean
*/
public static function deleteFromDAVData($cid,$uri){
+ $oldobject = self::findWhereDAVDataIs($cid, $uri);
$stmt = OCP\DB::prepare( 'DELETE FROM `*PREFIX*calendar_objects` WHERE `calendarid`= ? AND `uri`=?' );
$stmt->execute(array($cid,$uri));
OC_Calendar_Calendar::touchCalendar($cid);
+ OCP\Util::emitHook('OC_Calendar', 'deleteEvent', $oldobject['id']);
return true;
}
@@ -207,6 +233,7 @@ class OC_Calendar_Object{
$stmt->execute(array($calendarid,$id));
OC_Calendar_Calendar::touchCalendar($id);
+ OCP\Util::emitHook('OC_Calendar', 'moveEvent', $id);
return true;
}
@@ -302,12 +329,16 @@ class OC_Calendar_Object{
* This function creates a date string that can be used by MDB2.
* Furthermore it converts the time to UTC.
*/
- protected static function getUTCforMDB($datetime){
+ public static function getUTCforMDB($datetime){
return date('Y-m-d H:i', $datetime->format('U') - $datetime->getOffset());
}
-
- public static function getDTEndFromVEvent($vevent)
- {
+
+ /**
+ * @brief returns the DTEND of an $vevent object
+ * @param object $vevent vevent object
+ * @return object
+ */
+ public static function getDTEndFromVEvent($vevent){
if ($vevent->DTEND) {
$dtend = $vevent->DTEND;
}else{
@@ -331,9 +362,12 @@ class OC_Calendar_Object{
}
return $dtend;
}
-
- public static function getRepeatOptions($l10n)
- {
+
+ /**
+ * @brief returns the options for the repeat rule of an repeating event
+ * @return array - valid inputs for the repeat rule of an repeating event
+ */
+ public static function getRepeatOptions($l10n){
return array(
'doesnotrepeat' => $l10n->t('Does not repeat'),
'daily' => $l10n->t('Daily'),
@@ -344,26 +378,35 @@ class OC_Calendar_Object{
'yearly' => $l10n->t('Yearly')
);
}
-
- public static function getEndOptions($l10n)
- {
+
+ /**
+ * @brief returns the options for the end of an repeating event
+ * @return array - valid inputs for the end of an repeating events
+ */
+ public static function getEndOptions($l10n){
return array(
'never' => $l10n->t('never'),
'count' => $l10n->t('by occurrences'),
'date' => $l10n->t('by date')
);
}
-
- public static function getMonthOptions($l10n)
- {
+
+ /**
+ * @brief returns the options for an monthly repeating event
+ * @return array - valid inputs for monthly repeating events
+ */
+ public static function getMonthOptions($l10n){
return array(
'monthday' => $l10n->t('by monthday'),
'weekday' => $l10n->t('by weekday')
);
}
-
- public static function getWeeklyOptions($l10n)
- {
+
+ /**
+ * @brief returns the options for an weekly repeating event
+ * @return array - valid inputs for weekly repeating events
+ */
+ public static function getWeeklyOptions($l10n){
return array(
'MO' => $l10n->t('Monday'),
'TU' => $l10n->t('Tuesday'),
@@ -374,9 +417,12 @@ class OC_Calendar_Object{
'SU' => $l10n->t('Sunday')
);
}
-
- public static function getWeekofMonth($l10n)
- {
+
+ /**
+ * @brief returns the options for an monthly repeating event which occurs on specific weeks of the month
+ * @return array - valid inputs for monthly repeating events
+ */
+ public static function getWeekofMonth($l10n){
return array(
'auto' => $l10n->t('events week of month'),
'1' => $l10n->t('first'),
@@ -387,7 +433,11 @@ class OC_Calendar_Object{
'-1' => $l10n->t('last')
);
}
-
+
+ /**
+ * @brief returns the options for an yearly repeating event which occurs on specific days of the year
+ * @return array - valid inputs for yearly repeating events
+ */
public static function getByYearDayOptions(){
$return = array();
foreach(range(1,366) as $num){
@@ -395,7 +445,11 @@ class OC_Calendar_Object{
}
return $return;
}
-
+
+ /**
+ * @brief returns the options for an yearly or monthly repeating event which occurs on specific days of the month
+ * @return array - valid inputs for yearly or monthly repeating events
+ */
public static function getByMonthDayOptions(){
$return = array();
foreach(range(1,31) as $num){
@@ -403,7 +457,11 @@ class OC_Calendar_Object{
}
return $return;
}
-
+
+ /**
+ * @brief returns the options for an yearly repeating event which occurs on specific month of the year
+ * @return array - valid inputs for yearly repeating events
+ */
public static function getByMonthOptions($l10n){
return array(
'1' => $l10n->t('January'),
@@ -420,7 +478,11 @@ class OC_Calendar_Object{
'12' => $l10n->t('December')
);
}
-
+
+ /**
+ * @brief returns the options for an yearly repeating event
+ * @return array - valid inputs for yearly repeating events
+ */
public static function getYearOptions($l10n){
return array(
'bydate' => $l10n->t('by events date'),
@@ -429,13 +491,21 @@ class OC_Calendar_Object{
'bydaymonth' => $l10n->t('by day and month')
);
}
-
+
+ /**
+ * @brief returns the options for an yearly repeating event which occurs on specific week numbers of the year
+ * @return array - valid inputs for yearly repeating events
+ */
public static function getByWeekNoOptions(){
return range(1, 52);
}
-
- public static function validateRequest($request)
- {
+
+ /**
+ * @brief validates a request
+ * @param array $request
+ * @return mixed (array / boolean)
+ */
+ public static function validateRequest($request){
$errnum = 0;
$errarr = array('title'=>'false', 'cal'=>'false', 'from'=>'false', 'fromtime'=>'false', 'to'=>'false', 'totime'=>'false', 'endbeforestart'=>'false');
if($request['title'] == ''){
@@ -582,17 +652,24 @@ class OC_Calendar_Object{
}
return false;
}
-
- protected static function checkTime($time)
- {
+
+ /**
+ * @brief validates time
+ * @param string $time
+ * @return boolean
+ */
+ protected static function checkTime($time){
list($hours, $minutes) = explode(':', $time);
return empty($time)
|| $hours < 0 || $hours > 24
|| $minutes < 0 || $minutes > 60;
}
-
- public static function createVCalendarFromRequest($request)
- {
+
+ /**
+ * @brief creates an VCalendar Object from the request data
+ * @param array $request
+ * @return object created $vcalendar
+ */ public static function createVCalendarFromRequest($request){
$vcalendar = new OC_VObject('VCALENDAR');
$vcalendar->add('PRODID', 'ownCloud Calendar');
$vcalendar->add('VERSION', '2.0');
@@ -605,9 +682,14 @@ class OC_Calendar_Object{
$vevent->setUID();
return self::updateVCalendarFromRequest($request, $vcalendar);
}
-
- public static function updateVCalendarFromRequest($request, $vcalendar)
- {
+
+ /**
+ * @brief updates an VCalendar Object from the request data
+ * @param array $request
+ * @param object $vcalendar
+ * @return object updated $vcalendar
+ */
+ public static function updateVCalendarFromRequest($request, $vcalendar){
$title = $request["title"];
$location = $request["location"];
$categories = $request["categories"];
@@ -774,7 +856,7 @@ class OC_Calendar_Object{
$vevent->setDateTime('DTSTART', $start, Sabre_VObject_Property_DateTime::DATE);
$vevent->setDateTime('DTEND', $end, Sabre_VObject_Property_DateTime::DATE);
}else{
- $timezone = OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'timezone', date_default_timezone_get());
+ $timezone = OC_Calendar_App::getTimezone();
$timezone = new DateTimeZone($timezone);
$start = new DateTime($from.' '.$fromtime, $timezone);
$end = new DateTime($to.' '.$totime, $timezone);
@@ -793,15 +875,63 @@ class OC_Calendar_Object{
return $vcalendar;
}
-
+
+ /**
+ * @brief returns the owner of an object
+ * @param integer $id
+ * @return string
+ */
public static function getowner($id){
$event = self::find($id);
$cal = OC_Calendar_Calendar::find($event['calendarid']);
return $cal['userid'];
}
+ /**
+ * @brief returns the calendarid of an object
+ * @param integer $id
+ * @return integer
+ */
public static function getCalendarid($id){
$event = self::find($id);
return $event['calendarid'];
}
+
+ /**
+ * @brief checks if an object is repeating
+ * @param integer $id
+ * @return boolean
+ */
+ public static function isrepeating($id){
+ $event = self::find($id);
+ return ($event['repeating'] == 1)?true:false;
+ }
+
+ /**
+ * @brief converts the start_dt and end_dt to a new timezone
+ * @param object $dtstart
+ * @param object $dtend
+ * @param boolean $allday
+ * @param string $tz
+ * @return array
+ */
+ public static function generateStartEndDate($dtstart, $dtend, $allday, $tz){
+ $start_dt = $dtstart->getDateTime();
+ $end_dt = $dtend->getDateTime();
+ $return = array();
+ if($allday){
+ $return['start'] = $start_dt->format('Y-m-d');
+ $end_dt->modify('-1 minute');
+ while($start_dt >= $end_dt){
+ $end_dt->modify('+1 day');
+ }
+ $return['end'] = $end_dt->format('Y-m-d');
+ }else{
+ $start_dt->setTimezone(new DateTimeZone($tz));
+ $end_dt->setTimezone(new DateTimeZone($tz));
+ $return['start'] = $start_dt->format('Y-m-d H:i:s');
+ $return['end'] = $end_dt->format('Y-m-d H:i:s');
+ }
+ return $return;
+ }
}
diff --git a/apps/calendar/lib/repeat.php b/apps/calendar/lib/repeat.php
new file mode 100644
index 00000000000..b9fbee8fe0a
--- /dev/null
+++ b/apps/calendar/lib/repeat.php
@@ -0,0 +1,204 @@
+<?php
+/**
+ * Copyright (c) 2012 Georg Ehrke <ownclouddev@georgswebsite.de>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+/**
+ * This class manages the caching of repeating events
+ * Events will be cached for the current year ± 5 years
+ */
+class OC_Calendar_Repeat{
+ /**
+ * @brief returns the cache of an event
+ * @param (int) $id - id of the event
+ * @return (array)
+ */
+ public static function get($id){
+ $stmt = OCP\DB::prepare('SELECT * FROM *PREFIX*calendar_repeat WHERE eventid = ?');
+ $result = $stmt->execute(array($id));
+ $return = array();
+ while($row = $result->fetchRow()){
+ $return[] = $row;
+ }
+ return $return;
+ }
+ /**
+ * @brief returns the cache of an event in a specific peroid
+ * @param (int) $id - id of the event
+ * @param (DateTime) $from - start for period in UTC
+ * @param (DateTime) $until - end for period in UTC
+ * @return (array)
+ */
+ public static function get_inperiod($id, $from, $until){
+ $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*calendar_repeat WHERE eventid = ?'
+ .' AND ((startdate >= ? AND startdate <= ?)'
+ .' OR (enddate >= ? AND enddate <= ?))');
+ $result = $stmt->execute(array($id,
+ OC_Calendar_Object::getUTCforMDB($from), OC_Calendar_Object::getUTCforMDB($until),
+ OC_Calendar_Object::getUTCforMDB($from), OC_Calendar_Object::getUTCforMDB($until)));
+ $return = array();
+ while($row = $result->fetchRow()){
+ $return[] = $row;
+ }
+ return $return;
+ }
+ /**
+ * @brief returns the cache of all repeating events of a calendar
+ * @param (int) $id - id of the calendar
+ * @return (array)
+ */
+ public static function getCalendar($id){
+ $stmt = OCP\DB::prepare('SELECT * FROM *PREFIX*calendar_repeat WHERE calid = ?');
+ $result = $stmt->execute(array($id));
+ $return = array();
+ while($row = $result->fetchRow()){
+ $return[] = $row;
+ }
+ return $return;
+ }
+ /**
+ * @brief returns the cache of all repeating events of a calendar in a specific period
+ * @param (int) $id - id of the event
+ * @param (string) $from - start for period in UTC
+ * @param (string) $until - end for period in UTC
+ * @return (array)
+ */
+ public static function getCalendar_inperiod($id, $from, $until){
+ $stmt = OCP\DB::prepare( 'SELECT * FROM *PREFIX*calendar_repeat WHERE calid = ?'
+ .' AND ((startdate >= ? AND startdate <= ?)'
+ .' OR (enddate >= ? AND enddate <= ?))');
+ $result = $stmt->execute(array($id,
+ $from, $until,
+ $from, $until));
+ $return = array();
+ while($row = $result->fetchRow()){
+ $return[] = $row;
+ }
+ return $return;
+ }
+ /**
+ * @brief generates the cache the first time
+ * @param (int) id - id of the event
+ * @return (bool)
+ */
+ public static function generate($id){
+ $event = OC_Calendar_Object::find($id);
+ if($event['repeating'] == 0){
+ return false;
+ }
+ $object = OC_VObject::parse($event['calendardata']);
+ $start = new DateTime('01-01-' . date('Y') . ' 00:00:00', new DateTimeZone('UTC'));
+ $start->modify('-5 years');
+ $end = new DateTime('31-12-' . date('Y') . ' 23:59:59', new DateTimeZone('UTC'));
+ $end->modify('+5 years');
+ $object->expand($start, $end);
+ foreach($object->getComponents() as $vevent){
+ if(!($vevent instanceof Sabre_VObject_Component_VEvent)){
+ continue;
+ }
+ $startenddate = OC_Calendar_Object::generateStartEndDate($vevent->DTSTART, OC_Calendar_Object::getDTEndFromVEvent($vevent), ($vevent->DTSTART->getDateType() == Sabre_VObject_Element_DateTime::DATE)?true:false, 'UTC');
+ $stmt = OCP\DB::prepare('INSERT INTO *PREFIX*calendar_repeat (eventid,calid,startdate,enddate) VALUES(?,?,?,?)');
+ $stmt->execute(array($id,OC_Calendar_Object::getCalendarid($id),$startenddate['start'],$startenddate['end']));
+ }
+ return true;
+ }
+ /**
+ * @brief generates the cache the first time for all repeating event of an calendar
+ * @param (int) id - id of the calendar
+ * @return (bool)
+ */
+ public static function generateCalendar($id){
+ $allobjects = OC_Calendar_Object::all($id);
+ foreach($allobjects as $event){
+ self::generate($event['id']);
+ }
+ return true;
+ }
+ /**
+ * @brief updates an event that is already cached
+ * @param (int) id - id of the event
+ * @return (bool)
+ */
+ public static function update($id){
+ self::clean($id);
+ self::generate($id);
+ return true;
+ }
+ /**
+ * @brief updates all repating events of a calendar that are already cached
+ * @param (int) id - id of the calendar
+ * @return (bool)
+ */
+ public static function updateCalendar($id){
+ self::cleanCalendar($id);
+ self::generateCalendar($id);
+ return true;
+ }
+ /**
+ * @brief checks if an event is already cached
+ * @param (int) id - id of the event
+ * @return (bool)
+ */
+ public static function is_cached($id){
+ if(count(self::get($id)) != 0){
+ return true;
+ }else{
+ return false;
+ }
+ }
+ /**
+ * @brief checks if an event is already cached in a specific period
+ * @param (int) id - id of the event
+ * @param (DateTime) $from - start for period in UTC
+ * @param (DateTime) $until - end for period in UTC
+ * @return (bool)
+ */
+ public static function is_cached_inperiod($id, $start, $end){
+ if(count(self::get_inperiod($id, $start, $end)) != 0){
+ return true;
+ }else{
+ return false;
+ }
+
+ }
+ /**
+ * @brief checks if a whole calendar is already cached
+ * @param (int) id - id of the calendar
+ * @return (bool)
+ */
+ public static function is_calendar_cached($id){
+ $cachedevents = count(self::getCalendar($id));
+ $repeatingevents = 0;
+ $allevents = OC_Calendar_Object::all($id);
+ foreach($allevents as $event){
+ if($event['repeating'] === 1){
+ $repeatingevents++;
+ }
+ }
+ if($cachedevents < $repeatingevents){
+ return false;
+ }else{
+ return true;
+ }
+ }
+ /**
+ * @brief removes the cache of an event
+ * @param (int) id - id of the event
+ * @return (bool)
+ */
+ public static function clean($id){
+ $stmt = OCP\DB::prepare('DELETE FROM *PREFIX*calendar_repeat WHERE eventid = ?');
+ $stmt->execute(array($id));
+ }
+ /**
+ * @brief removes the cache of all events of a calendar
+ * @param (int) id - id of the calendar
+ * @return (bool)
+ */
+ public static function cleanCalendar($id){
+ $stmt = OCP\DB::prepare('DELETE FROM *PREFIX*calendar_repeat WHERE calid = ?');
+ $stmt->execute(array($id));
+ }
+} \ No newline at end of file
diff --git a/apps/calendar/lib/connector_sabre.php b/apps/calendar/lib/sabre/backend.php
index 8eea06da7e2..ac3b26ceb33 100644
--- a/apps/calendar/lib/connector_sabre.php
+++ b/apps/calendar/lib/sabre/backend.php
@@ -212,6 +212,10 @@ class OC_Connector_Sabre_CalDAV extends Sabre_CalDAV_Backend_Abstract {
* @return void
*/
public function deleteCalendar($calendarId) {
+ if(preg_match( '=iCal/[1-4]?.*Mac OS X/10.[1-6](.[0-9])?=', $_SERVER['HTTP_USER_AGENT'] )){
+ throw new Sabre_DAV_Exception_Forbidden("Action is not possible with OSX 10.6.x", 403);
+ }
+
OC_Calendar_Calendar::deleteCalendar($calendarId);
}
diff --git a/apps/calendar/lib/sabre/calendar.php b/apps/calendar/lib/sabre/calendar.php
new file mode 100644
index 00000000000..179be1b2813
--- /dev/null
+++ b/apps/calendar/lib/sabre/calendar.php
@@ -0,0 +1,127 @@
+<?php
+/**
+ * ownCloud - OC_Connector_Sabre_Sabre_CalDAV_Calendar
+ *
+ * @author Thomas Tanghus
+ * @copyright 2012 Thomas Tanghus (thomas@tanghus.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/>.
+ *
+ */
+
+/**
+ * This class overrides Sabre_CalDAV_Calendar::getACL() to return read/write
+ * permissions based on user and shared state and it overrides
+ * Sabre_CalDAV_Calendar::getChild() and Sabre_CalDAV_Calendar::getChildren()
+ * to instantiate OC_Connector_Sabre_CalDAV_CalendarObjects.
+*/
+class OC_Connector_Sabre_CalDAV_Calendar extends Sabre_CalDAV_Calendar {
+
+ /**
+ * Returns a list of ACE's for this node.
+ *
+ * Each ACE has the following properties:
+ * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are
+ * currently the only supported privileges
+ * * 'principal', a url to the principal who owns the node
+ * * 'protected' (optional), indicating that this ACE is not allowed to
+ * be updated.
+ *
+ * @return array
+ */
+ public function getACL() {
+
+ $readprincipal = $this->getOwner();
+ $writeprincipal = $this->getOwner();
+ $uid = OC_Calendar_Calendar::extractUserID($this->getOwner());
+
+ if($uid != OCP\USER::getUser()) {
+ $sharedCalendar = OCP\Share::getItemSharedWithBySource('calendar', $this->$calendarInfo['id']);
+ if ($sharedCalendar && ($sharedCalendar['permissions'] & OCP\Share::PERMISSION_READ)) {
+ $readprincipal = 'principals/' . OCP\USER::getUser();
+ }
+ if ($sharedCalendar && ($sharedCalendar['permissions'] & OCP\Share::PERMISSION_UPDATE)) {
+ $writeprincipal = 'principals/' . OCP\USER::getUser();
+ }
+ }
+
+ return array(
+ array(
+ 'privilege' => '{DAV:}read',
+ 'principal' => $readprincipal,
+ 'protected' => true,
+ ),
+ array(
+ 'privilege' => '{DAV:}write',
+ 'principal' => $writeprincipal,
+ 'protected' => true,
+ ),
+ array(
+ 'privilege' => '{DAV:}read',
+ 'principal' => $readprincipal . '/calendar-proxy-write',
+ 'protected' => true,
+ ),
+ array(
+ 'privilege' => '{DAV:}write',
+ 'principal' => $writeprincipal . '/calendar-proxy-write',
+ 'protected' => true,
+ ),
+ array(
+ 'privilege' => '{DAV:}read',
+ 'principal' => $readprincipal . '/calendar-proxy-read',
+ 'protected' => true,
+ ),
+ array(
+ 'privilege' => '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}read-free-busy',
+ 'principal' => '{DAV:}authenticated',
+ 'protected' => true,
+ ),
+
+ );
+
+ }
+
+ /**
+ * Returns a calendar object
+ *
+ * The contained calendar objects are for example Events or Todo's.
+ *
+ * @param string $name
+ * @return Sabre_DAV_ICalendarObject
+ */
+ public function getChild($name) {
+
+ $obj = $this->caldavBackend->getCalendarObject($this->calendarInfo['id'],$name);
+ if (!$obj) throw new Sabre_DAV_Exception_NotFound('Calendar object not found');
+ return new OC_Connector_Sabre_CalDAV_CalendarObject($this->caldavBackend,$this->calendarInfo,$obj);
+
+ }
+
+ /**
+ * Returns the full list of calendar objects
+ *
+ * @return array
+ */
+ public function getChildren() {
+
+ $objs = $this->caldavBackend->getCalendarObjects($this->calendarInfo['id']);
+ $children = array();
+ foreach($objs as $obj) {
+ $children[] = new OC_Connector_Sabre_CalDAV_CalendarObject($this->caldavBackend,$this->calendarInfo,$obj);
+ }
+ return $children;
+
+ }
+
+} \ No newline at end of file
diff --git a/apps/calendar/lib/sabre/calendarroot.php b/apps/calendar/lib/sabre/calendarroot.php
new file mode 100644
index 00000000000..e09731c95b7
--- /dev/null
+++ b/apps/calendar/lib/sabre/calendarroot.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * ownCloud - OC_Connector_Sabre_CalDAV_CalendarRoot
+ *
+ * @author Thomas Tanghus
+ * @copyright 2012 Thomas Tanghus (thomas@tanghus.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/>.
+ *
+ */
+
+/**
+ * This class overrides Sabre_CalDAV_CalendarRootNode::getChildForPrincipal()
+ * to instantiate OC_Connector_Sabre_CalDAV_UserCalendars.
+*/
+class OC_Connector_Sabre_CalDAV_CalendarRoot extends Sabre_CalDAV_CalendarRootNode {
+
+ /**
+ * This method returns a node for a principal.
+ *
+ * The passed array contains principal information, and is guaranteed to
+ * at least contain a uri item. Other properties may or may not be
+ * supplied by the authentication backend.
+ *
+ * @param array $principal
+ * @return Sabre_DAV_INode
+ */
+ public function getChildForPrincipal(array $principal) {
+
+ return new OC_Connector_Sabre_CalDAV_UserCalendars($this->principalBackend, $this->caldavBackend, $principal['uri']);
+
+ }
+
+} \ No newline at end of file
diff --git a/apps/calendar/lib/sabre/object.php b/apps/calendar/lib/sabre/object.php
new file mode 100644
index 00000000000..25954e6ee55
--- /dev/null
+++ b/apps/calendar/lib/sabre/object.php
@@ -0,0 +1,87 @@
+<?php
+/**
+ * ownCloud - OC_Connector_Sabre_CalDAV_CalendarObject
+ *
+ * @author Thomas Tanghus
+ * @copyright 2012 Thomas Tanghus (thomas@tanghus.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/>.
+ *
+ */
+
+/**
+ * This class overrides Sabre_CalDAV_CalendarObject::getACL()
+ * to return read/write permissions based on user and shared state.
+*/
+class OC_Connector_Sabre_CalDAV_CalendarObject extends Sabre_CalDAV_CalendarObject {
+
+ /**
+ * Returns a list of ACE's for this node.
+ *
+ * Each ACE has the following properties:
+ * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are
+ * currently the only supported privileges
+ * * 'principal', a url to the principal who owns the node
+ * * 'protected' (optional), indicating that this ACE is not allowed to
+ * be updated.
+ *
+ * @return array
+ */
+ public function getACL() {
+
+ $readprincipal = $this->getOwner();
+ $writeprincipal = $this->getOwner();
+ $uid = OC_Calendar_Calendar::extractUserID($this->getOwner());
+
+ if($uid != OCP\USER::getUser()) {
+ $sharedAddressbook = OCP\Share::getItemSharedWithBySource('calendar', $this->$calendarInfo['id']);
+ if ($sharedAddressbook && ($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_READ)) {
+ $readprincipal = 'principals/' . OCP\USER::getUser();
+ }
+ if ($sharedAddressbook && ($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_UPDATE)) {
+ $writeprincipal = 'principals/' . OCP\USER::getUser();
+ }
+ }
+
+ return array(
+ array(
+ 'privilege' => '{DAV:}read',
+ 'principal' => $readprincipal,
+ 'protected' => true,
+ ),
+ array(
+ 'privilege' => '{DAV:}write',
+ 'principal' => $writeprincipal,
+ 'protected' => true,
+ ),
+ array(
+ 'privilege' => '{DAV:}read',
+ 'principal' => $readprincipal . '/calendar-proxy-write',
+ 'protected' => true,
+ ),
+ array(
+ 'privilege' => '{DAV:}write',
+ 'principal' => $writeprincipal . '/calendar-proxy-write',
+ 'protected' => true,
+ ),
+ array(
+ 'privilege' => '{DAV:}read',
+ 'principal' => $readprincipal . '/calendar-proxy-read',
+ 'protected' => true,
+ ),
+ );
+
+ }
+
+} \ No newline at end of file
diff --git a/apps/calendar/lib/sabre/usercalendars.php b/apps/calendar/lib/sabre/usercalendars.php
new file mode 100644
index 00000000000..919f6b27e18
--- /dev/null
+++ b/apps/calendar/lib/sabre/usercalendars.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * ownCloud - OC_Connector_Sabre_CalDAV_UserCalendars
+ *
+ * @author Thomas Tanghus
+ * @copyright 2012 Thomas Tanghus (thomas@tanghus.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/>.
+ *
+ */
+
+/**
+ * This class overrides Sabre_CalDAV_UserCalendars::getChildren()
+ * to instantiate OC_Connector_Sabre_CalDAV_Calendars.
+*/
+class OC_Connector_Sabre_CalDAV_UserCalendars extends Sabre_CalDAV_UserCalendars {
+
+ /**
+ * Returns a list of calendars
+ *
+ * @return array
+ */
+ public function getChildren() {
+
+ $calendars = $this->caldavBackend->getCalendarsForUser($this->principalInfo['uri']);
+ $objs = array();
+ foreach($calendars as $calendar) {
+ $objs[] = new OC_Connector_Sabre_CalDAV_Calendar($this->principalBackend, $this->caldavBackend, $calendar);
+ }
+ $objs[] = new Sabre_CalDAV_Schedule_Outbox($this->principalInfo['uri']);
+ return $objs;
+
+ }
+
+} \ No newline at end of file
diff --git a/apps/calendar/lib/search.php b/apps/calendar/lib/search.php
index 8b8b0e0c7ee..551489672b9 100644
--- a/apps/calendar/lib/search.php
+++ b/apps/calendar/lib/search.php
@@ -1,7 +1,7 @@
<?php
class OC_Search_Provider_Calendar extends OC_Search_Provider{
function search($query){
- $calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser(), 1);
+ $calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser(), true);
if(count($calendars)==0 || !OCP\App::isEnabled('calendar')){
//return false;
}
@@ -12,7 +12,7 @@ class OC_Search_Provider_Calendar extends OC_Search_Provider{
}else{
$searchquery[] = $query;
}
- $user_timezone = OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'timezone', date_default_timezone_get());
+ $user_timezone = OC_Calendar_App::getTimezone();
$l = new OC_l10n('calendar');
foreach($calendars as $calendar){
$objects = OC_Calendar_Object::all($calendar['id']);
diff --git a/apps/calendar/lib/share.php b/apps/calendar/lib/share.php
index aba27221653..23892157fef 100644
--- a/apps/calendar/lib/share.php
+++ b/apps/calendar/lib/share.php
@@ -5,39 +5,36 @@
* later.
* See the COPYING-README file.
*/
-/*
+/**
* This class manages shared calendars
*/
class OC_Calendar_Share{
const CALENDAR = 'calendar';
const EVENT = 'event';
- /*
+ /**
* @brief: returns informations about all calendar or events which users are sharing with the user - userid
- * @param: (string) $userid - id of the user
- * @param: (string) $type - use const self::CALENDAR or self::EVENT
- * @return: (array) $return - information about calendars
+ * @param: string $userid - id of the user
+ * @param: string $type - use const self::CALENDAR or self::EVENT
+ * @return: array $return - information about calendars
*/
public static function allSharedwithuser($userid, $type, $active=null, $permission=null){
- $group_where = self::group_sql(OC_Group::getUserGroups($userid));
- $permission_where = self::permission_sql($permission);
- if($type == self::CALENDAR){
- $active_where = self::active_sql($active);
- }else{
- $active_where = '';
- }
- $stmt = OCP\DB::prepare("SELECT * FROM `*PREFIX*calendar_share_" . $type . "` WHERE ((`share` = ? AND `sharetype` = 'user') " . $group_where . ") AND `owner` <> ? " . $permission_where . " " . $active_where);
- $result = $stmt->execute(array($userid, $userid));
- $return = array();
- while( $row = $result->fetchRow()){
- $return[] = $row;
+ $format = OC_Share_Backend_Calendar::FORMAT_CALENDAR;
+ if ($type == self::EVENT) {
+ $format = OC_Share_Backend_Event::FORMAT_EVENT;
}
+ $return = OCP\Share::getItemsSharedWith($type,
+ $format,
+ array(
+ 'active' => $active,
+ 'permissions' => $permission,
+ ));
return $return;
}
- /*
+ /**
* @brief: returns all users a calendar / event is shared with
- * @param: (int) id - id of the calendar / event
- * @param: (string) $type - use const self::CALENDAR or self::EVENT
- * @return: (array) $users - information about users a calendar / event is shared with
+ * @param: integer id - id of the calendar / event
+ * @param: string $type - use const self::CALENDAR or self::EVENT
+ * @return: array $users - information about users a calendar / event is shared with
*/
public static function allUsersSharedwith($id, $type){
$stmt = OCP\DB::prepare('SELECT * FROM `*PREFIX*calendar_share_' . $type . '` WHERE `' . $type . 'id` = ? ORDER BY `share`');
@@ -48,13 +45,13 @@ class OC_Calendar_Share{
}
return $users;
}
- /*
+ /**
* @brief: shares a calendar / event
- * @param: (string) $owner - userid of the owner
- * @param: (string) $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
- * @param: (string) $sharetype - type of sharing (can be: user/group/public)
- * @param: (string) $id - id of the calendar / event
- * @param: (string) $type - use const self::CALENDAR or self::EVENT
+ * @param: string $owner - userid of the owner
+ * @param: string $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
+ * @param: string $sharetype - type of sharing (can be: user/group/public)
+ * @param: string $id - id of the calendar / event
+ * @param: string $type - use const self::CALENDAR or self::EVENT
* @return (mixed) - token (if $sharetype == public) / bool (if $sharetype != public)
*/
public static function share($owner, $share, $sharetype, $id, $type){
@@ -80,14 +77,14 @@ class OC_Calendar_Share{
return true;
}
}
- /*
+ /**
* @brief: stops sharing a calendar / event
- * @param: (string) $owner - userid of the owner
- * @param: (string) $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
- * @param: (string) $sharetype - type of sharing (can be: user/group/public)
- * @param: (string) $id - id of the calendar / event
- * @param: (string) $type - use const self::CALENDAR or self::EVENT
- * @return (bool)
+ * @param: string $owner - userid of the owner
+ * @param: string $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
+ * @param: string $sharetype - type of sharing (can be: user/group/public)
+ * @param: string $id - id of the calendar / event
+ * @param: string $type - use const self::CALENDAR or self::EVENT
+ * @return boolean
*/
public static function unshare($owner, $share, $sharetype, $id, $type){
$stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*calendar_share_' . $type . '` WHERE `owner` = ? ' . (($sharetype != 'public')?'AND `share` = ?':'') . ' AND `sharetype` = ? AND `' . $type . 'id` = ?');
@@ -98,14 +95,14 @@ class OC_Calendar_Share{
}
return true;
}
- /*
+ /**
* @brief: changes the permission for a calendar / event
- * @param: (string) $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
- * @param: (string) $sharetype - type of sharing (can be: user/group/public)
- * @param: (string) $id - id of the calendar / event
- * @param: (int) $permission - permission of user the calendar / event is shared with (if $sharetype == public then $permission = 0)
- * @param: (string) $type - use const self::CALENDAR or self::EVENT
- * @return (bool)
+ * @param: string $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
+ * @param: string $sharetype - type of sharing (can be: user/group/public)
+ * @param: string $id - id of the calendar / event
+ * @param: integer $permission - permission of user the calendar / event is shared with (if $sharetype == public then $permission = 0)
+ * @param: string $type - use const self::CALENDAR or self::EVENT
+ * @return boolean
*/
public static function changepermission($share, $sharetype, $id, $permission, $type){
if($sharetype == 'public' && $permission == 1){
@@ -115,9 +112,9 @@ class OC_Calendar_Share{
$stmt->execute(array($permission, $share, $sharetype, $id));
return true;
}
- /*
+ /**
* @brief: generates a token for public calendars / events
- * @return: (string) $token
+ * @return: string $token
*/
private static function generate_token($id, $type){
$uniqid = uniqid();
@@ -138,14 +135,14 @@ class OC_Calendar_Share{
$token = md5($string);
return substr($token, rand(0,16), 15);
}
- /*
+ /**
* @brief: checks if it is already shared
- * @param: (string) $owner - userid of the owner
- * @param: (string) $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
- * @param: (string) $sharetype - type of sharing (can be: user/group/public)
- * @param: (string) $id - id of the calendar / event
- * @param: (string) $type - use const self::CALENDAR or self::EVENT
- * @return (bool)
+ * @param: string $owner - userid of the owner
+ * @param: string $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
+ * @param: string $sharetype - type of sharing (can be: user/group/public)
+ * @param: string $id - id of the calendar / event
+ * @param: string $type - use const self::CALENDAR or self::EVENT
+ * @return boolean
*/
public static function is_already_shared($owner, $share, $sharetype, $id, $type){
$stmt = OCP\DB::prepare('SELECT * FROM `*PREFIX*calendar_share_' . $type . '` WHERE `owner` = ? AND `share` = ? AND `sharetype` = ? AND `' . $type . 'id` = ?');
@@ -181,12 +178,12 @@ class OC_Calendar_Share{
}
return $active_where;
}
- /*
+ /**
* @brief: checks the permission for editing an event
- * @param: (string) $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
- * @param: (string) $id - id of the calendar / event
- * @param: (string) $type - use const self::CALENDAR or self::EVENT
- * @return (bool)
+ * @param: string $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
+ * @param: string $id - id of the calendar / event
+ * @param: string $type - use const self::CALENDAR or self::EVENT
+ * @return boolean
*/
public static function is_editing_allowed($share, $id, $type){
$group_where = self::group_sql(OC_Group::getUserGroups($share));
@@ -202,16 +199,16 @@ class OC_Calendar_Share{
}
return false;
}
- /*
+ /**
* @brief: checks the access of
- * @param: (string) $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
- * @param: (string) $id - id of the calendar / event
- * @param: (string) $type - use const self::CALENDAR or self::EVENT
- * @return (bool)
+ * @param: string $share - userid (if $sharetype == user) / groupid (if $sharetype == group) / token (if $sharetype == public)
+ * @param: string $id - id of the calendar / event
+ * @param: string $type - use const self::CALENDAR or self::EVENT
+ * @return boolean
*/
public static function check_access($share, $id, $type){
$group_where = self::group_sql(OC_Group::getUserGroups($share));
- $stmt = OCP\DB::prepare('SELECT * FROM `*PREFIX*calendar_share`_' . $type . '` WHERE (`' . $type . 'id` = ? AND (`share` = ? AND `sharetype` = \'user\') ' . $group_where . ')');
+ $stmt = OCP\DB::prepare('SELECT * FROM `*PREFIX*calendar_share_' . $type . '` WHERE (`' . $type . 'id` = ? AND (`share` = ? AND `sharetype` = \'user\') ' . $group_where . ')');
$result = $stmt->execute(array($id,$share));
$rows = $result->numRows();
if($rows > 0){
@@ -223,9 +220,9 @@ class OC_Calendar_Share{
return false;
}
}
- /*
+ /**
* @brief: returns the calendardata of an event or a calendar
- * @param: (string) $token - token which should be searched
+ * @param: string $token - token which should be searched
* @return: mixed - bool if false, array with type and id if true
*/
public static function getElementByToken($token){
@@ -248,19 +245,19 @@ class OC_Calendar_Share{
return $return;
}
- /*
+ /**
* @brief sets the active status of the calendar
- * @param (string) $
+ * @param string
*/
public static function set_active($share, $id, $active){
$stmt = OCP\DB::prepare("UPDATE `*PREFIX*calendar_share_calendar` SET `active` = ? WHERE `share` = ? AND `sharetype` = 'user' AND `calendarid` = ?");
$stmt->execute(array($active, $share, $id));
}
- /*
- * @brief delete all shared calendars / events after a user was deleted
- * @param (string) $userid
- * @return (bool)
+ /**
+ * @brief deletes all shared calendars / events after a user was deleted
+ * @param string $userid
+ * @return boolean
*/
public static function post_userdelete($userid){
$stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*calendar_share_calendar` WHERE `owner` = ?');
@@ -273,4 +270,26 @@ class OC_Calendar_Share{
$stmt->execute(array($userid));
return true;
}
+
+ /**
+ * @brief deletes all shared events of a calendar
+ * @param integer $calid
+ * @return boolean
+ */
+ public static function post_caldelete($calid){
+ $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*calendar_share_calendar` WHERE `calendarid` = ?');
+ $stmt->execute(array($calid));
+ return true;
+ }
+
+ /**
+ * @brief deletes all shares of an event
+ * @param integer $eventid
+ * @return boolean
+ */
+ public static function post_eventdelete($eventid){
+ $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*calendar_share_event` WHERE `eventid` = ?');
+ $stmt->execute(array($eventid));
+ return true;
+ }
} \ No newline at end of file
diff --git a/apps/calendar/lib/share/calendar.php b/apps/calendar/lib/share/calendar.php
new file mode 100644
index 00000000000..7f498292419
--- /dev/null
+++ b/apps/calendar/lib/share/calendar.php
@@ -0,0 +1,111 @@
+<?php
+/**
+* ownCloud
+*
+* @author Michael Gapczynski
+* @copyright 2012 Michael Gapczynski mtgap@owncloud.com
+* Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+*
+* 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_Share_Backend_Calendar implements OCP\Share_Backend_Collection {
+ const FORMAT_CALENDAR = 1;
+
+ /**
+ * @brief Get the source of the item to be stored in the database
+ * @param string Item
+ * @param string Owner of the item
+ * @return mixed|array|false Source
+ *
+ * Return an array if the item is file dependent, the array needs two keys: 'item' and 'file'
+ * Return false if the item does not exist for the user
+ *
+ * The formatItems() function will translate the source returned back into the item
+ */
+ public function isValidSource($itemSource, $uidOwner) {
+ $calendar = OC_Calendar_App::getCalendar( $itemSource );
+ if ($calendar || $calendar['userid'] != $uidOwner) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * @brief Get a unique name of the item for the specified user
+ * @param string Item
+ * @param string|false User the item is being shared with
+ * @param array|null List of similar item names already existing as shared items
+ * @return string Target name
+ *
+ * This function needs to verify that the user does not already have an item with this name.
+ * If it does generate a new name e.g. name_#
+ */
+ public function generateTarget($itemSource, $shareWith, $exclude = null) {
+ $calendar = OC_Calendar_App::getCalendar( $itemSource );
+ $user_calendars = array();
+ foreach(OC_Contacts_Addressbook::all($uid) as $user_calendar) {
+ $user_calendars[] = $user_calendar['displayname'];
+ }
+ $name = $calendar['userid']."'s ".$calendar['displayname'];
+ $suffix = '';
+ while (in_array($name.$suffix, $user_calendars)) {
+ $suffix++;
+ }
+
+ return $name.$suffix;
+ }
+
+ /**
+ * @brief Converts the shared item sources back into the item in the specified format
+ * @param array Shared items
+ * @param int Format
+ * @return ?
+ *
+ * The items array is a 3-dimensional array with the item_source as the first key and the share id as the second key to an array with the share info.
+ * The key/value pairs included in the share info depend on the function originally called:
+ * If called by getItem(s)Shared: id, item_type, item, item_source, share_type, share_with, permissions, stime, file_source
+ * If called by getItem(s)SharedWith: id, item_type, item, item_source, item_target, share_type, share_with, permissions, stime, file_source, file_target
+ * This function allows the backend to control the output of shared items with custom formats.
+ * It is only called through calls to the public getItem(s)Shared(With) functions.
+ */
+ public function formatItems($items, $format, $parameters = null) {
+ $calendars = array();
+ if ($format == self::FORMAT_CALENDAR) {
+ foreach ($items as $item) {
+ $calendar = OC_Calendar_App::getCalendar($item['item_source'], false);
+ // TODO: really check $parameters['permissions'] == 'rw'/'r'
+ if ($parameters['permissions'] == 'rw') {
+ continue; // TODO
+ }
+ $calendar['displaynamename'] = $item['item_target'];
+ $calendar['calendarid'] = $calendar['id'];
+ $calendar['owner'] = $calendar['userid'];
+ $calendars[] = $calendar;
+ }
+ }
+ return $calendars;
+ }
+
+ public function getChildren($itemSource) {
+ $query = OCP\DB::prepare('SELECT id FROM *PREFIX*calendar_objects WHERE calendarid = ?');
+ $result = $query->execute(array($itemSource));
+ $sources = array();
+ while ($object = $result->fetchRow()) {
+ $sources[] = $object['id'];
+ }
+ return $sources;
+ }
+
+} \ No newline at end of file
diff --git a/apps/calendar/lib/share/event.php b/apps/calendar/lib/share/event.php
new file mode 100644
index 00000000000..5bb72ee6c98
--- /dev/null
+++ b/apps/calendar/lib/share/event.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class OC_Share_Backend_Event implements OCP\Share_Backend {
+
+ const FORMAT_EVENT = 0;
+
+ private static $event;
+
+ public function isValidSource($itemSource, $uidOwner) {
+ self::$event = OC_Calendar_Object::find($itemSource);
+ if (self::$event) {
+ return true;
+ }
+ return false;
+ }
+
+ public function generateTarget($itemSource, $shareWith, $exclude = null) {
+ // TODO Get default calendar and check for conflicts
+ return self::$event['summary'];
+ }
+
+ public function formatItems($items, $format, $parameters = null) {
+ $events = array();
+ if ($format == self::FORMAT_EVENT) {
+ foreach ($items as $item) {
+ $event = OC_Calendar_Object::find($item['item_source']);
+ $event['summary'] = $item['item_target'];
+ $events[] = $event;
+ }
+ }
+ return $events;
+ }
+
+}
diff --git a/apps/calendar/lib/share_backend.php b/apps/calendar/lib/share_backend.php
new file mode 100644
index 00000000000..f937c0d1c34
--- /dev/null
+++ b/apps/calendar/lib/share_backend.php
@@ -0,0 +1,44 @@
+<?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/>.
+*/
+
+class OC_Share_Backend_Calendar extends OCP\Share_Backend {
+
+ public function getSource($item, $uid) {
+ $query = OCP\DB::prepare('SELECT id FROM *PREFIX*calendar_calendars WHERE userid = ? AND displayname = ? LIMIT 1');
+ return $query->execute(array($uid, $item))->fetchAll();
+ }
+
+ public function generateTarget($item, $uid) {
+
+ }
+
+ public function getItems($sources) {
+
+ }
+
+}
+
+class OC_Share_Backend_Event extends OCP\Share_Backend {
+
+}
+
+
+?> \ No newline at end of file
diff --git a/apps/calendar/settings.php b/apps/calendar/settings.php
index a18b1ca9f42..f563518046d 100644
--- a/apps/calendar/settings.php
+++ b/apps/calendar/settings.php
@@ -10,7 +10,8 @@ $tmpl = new OCP\Template( 'calendar', 'settings');
$timezone=OCP\Config::getUserValue(OCP\USER::getUser(),'calendar','timezone','');
$tmpl->assign('timezone',$timezone);
$tmpl->assign('timezones',DateTimeZone::listIdentifiers());
+$tmpl->assign('calendars', OC_Calendar_Calendar::allCalendars(OCP\USER::getUser()), false);
OCP\Util::addscript('calendar','settings');
-return $tmpl->fetchPage();
+$tmpl->printPage(); \ No newline at end of file
diff --git a/apps/calendar/share.php b/apps/calendar/share.php
index 68c7d0ffae2..bffcf0b4709 100644
--- a/apps/calendar/share.php
+++ b/apps/calendar/share.php
@@ -1,22 +1,31 @@
<?php
+/**
+ * Copyright (c) 2012 Georg Ehrke <ownclouddev at georgswebsite dot de>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
$token = strip_tags($_GET['t']);
$shared = OC_Calendar_Share::getElementByToken($token);
-$nl = "\n\r";
if($shared['type'] == OC_Calendar_Share::CALENDAR){
$calendar = OC_Calendar_App::getCalendar($shared['id'], false);
- $calobjects = OC_Calendar_Object::all($shared['id']);
- header('Content-Type: text/Calendar');
- header('Content-Disposition: inline; filename=' . $calendar['displayname'] . '.ics');
- foreach($calobjects as $calobject){
- echo $calobject['calendardata'] . $nl;
+ if(!$calendar){
+ header('HTTP/1.0 404 Not Found');
+ exit;
}
+ header('Content-Type: text/Calendar');
+ header('Content-Disposition: inline; filename=' . str_replace(' ', '-', $calendar['displayname']) . '.ics');
+ echo OC_Calendar_Export::export($shared['id'], OC_Calendar_Export::CALENDAR);
}elseif($shared['type'] == OC_Calendar_Share::EVENT){
$data = OC_Calendar_App::getEventObject($shared['id'], false);
- $calendarid = $data['calendarid'];
- $calendar = OC_Calendar_App::getCalendar($calendarid);
+ if(!$data){
+ header('HTTP/1.0 404 Not Found');
+ exit;
+ }
header('Content-Type: text/Calendar');
- header('Content-Disposition: inline; filename=' . $data['summary'] . '.ics');
- echo $data['calendardata'];
+ header('Content-Disposition: inline; filename=' . str_replace(' ', '-', $data['summary']) . '.ics');
+ echo OC_Calendar_Export::export($shared['id'], OC_Calendar_Export::EVENT);
}else{
- header('Error 404: Not Found');
-} \ No newline at end of file
+ header('HTTP/1.0 404 Not Found');
+ exit;
+}
diff --git a/apps/calendar/templates/calendar.php b/apps/calendar/templates/calendar.php
index 832194f0fe1..15891aafd9e 100644
--- a/apps/calendar/templates/calendar.php
+++ b/apps/calendar/templates/calendar.php
@@ -2,10 +2,10 @@
var defaultView = '<?php echo OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'currentview', 'month') ?>';
var eventSources = <?php echo json_encode($_['eventSources']) ?>;
var categories = <?php echo json_encode($_['categories']); ?>;
- var dayNames = <?php echo json_encode($l->tA(array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'))) ?>;
- var dayNamesShort = <?php echo json_encode($l->tA(array('Sun.', 'Mon.', 'Tue.', 'Wed.', 'Thu.', 'Fri.', 'Sat.'))) ?>;
- var monthNames = <?php echo json_encode($l->tA(array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'))) ?>;
- var monthNamesShort = <?php echo json_encode($l->tA(array('Jan.', 'Feb.', 'Mar.', 'Apr.', 'May.', 'Jun.', 'Jul.', 'Aug.', 'Sep.', 'Oct.', 'Nov.', 'Dec.'))) ?>;
+ var dayNames = new Array("<?php echo $l -> t("Sunday");?>", "<?php echo $l -> t("Monday");?>", "<?php echo $l -> t("Tuesday");?>", "<?php echo $l -> t("Wednesday");?>", "<?php echo $l -> t("Thursday");?>", "<?php echo $l -> t("Friday");?>", "<?php echo $l -> t("Saturday");?>");
+ var dayNamesShort = new Array("<?php echo $l -> t("Sun.");?>", "<?php echo $l -> t("Mon.");?>", "<?php echo $l -> t("Tue.");?>", "<?php echo $l -> t("Wed.");?>", "<?php echo $l -> t("Thu.");?>", "<?php echo $l -> t("Fri.");?>", "<?php echo $l -> t("Sat.");?>");
+ var monthNames = new Array("<?php echo $l -> t("January");?>", "<?php echo $l -> t("February");?>", "<?php echo $l -> t("March");?>", "<?php echo $l -> t("April");?>", "<?php echo $l -> t("May");?>", "<?php echo $l -> t("June");?>", "<?php echo $l -> t("July");?>", "<?php echo $l -> t("August");?>", "<?php echo $l -> t("September");?>", "<?php echo $l -> t("October");?>", "<?php echo $l -> t("November");?>", "<?php echo $l -> t("December");?>");
+ var monthNamesShort = new Array("<?php echo $l -> t("Jan.");?>", "<?php echo $l -> t("Feb.");?>", "<?php echo $l -> t("Mar.");?>", "<?php echo $l -> t("Apr.");?>", "<?php echo $l -> t("May.");?>", "<?php echo $l -> t("Jun.");?>", "<?php echo $l -> t("Jul.");?>", "<?php echo $l -> t("Aug.");?>", "<?php echo $l -> t("Sep.");?>", "<?php echo $l -> t("Oct.");?>", "<?php echo $l -> t("Nov.");?>", "<?php echo $l -> t("Dec.");?>");
var agendatime = '<?php echo ((int) OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'timeformat', '24') == 24 ? 'HH:mm' : 'hh:mm tt'); ?>{ - <?php echo ((int) OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'timeformat', '24') == 24 ? 'HH:mm' : 'hh:mm tt'); ?>}';
var defaulttime = '<?php echo ((int) OCP\Config::getUserValue(OCP\USER::getUser(), 'calendar', 'timeformat', '24') == 24 ? 'HH:mm' : 'hh:mm tt'); ?>';
var allDayText = '<?php echo addslashes($l->t('All day')) ?>';
@@ -33,37 +33,25 @@
?>
});
</script>
- <div id="controls">
- <div>
- <form>
- <div id="view">
- <input type="button" value="<?php echo $l->t('Week');?>" id="oneweekview_radio"/>
- <input type="button" value="<?php echo $l->t('Month');?>" id="onemonthview_radio"/>
- <input type="button" value="<?php echo $l->t('List');?>" id="listview_radio"/>&nbsp;&nbsp;
- <img id="loading" src="<?php echo OCP\Util::imagePath('core', 'loading.gif'); ?>" />
- </div>
- </form>
- <form>
- <div id="choosecalendar">
- <input type="button" id="today_input" value="<?php echo $l->t("Today");?>"/>
- <input type="button" id="choosecalendar_input" value="<?php echo $l->t("Calendars");?>" onclick="Calendar.UI.Calendar.overview();" />
- </div>
- </form>
- <form>
- <div id="datecontrol">
- <input type="button" value="&nbsp;&lt;&nbsp;" id="datecontrol_left"/>
- <span class="button" id="datecontrol_date"></span>
- <input type="button" value="&nbsp;&gt;&nbsp;" id="datecontrol_right"/>
- </div>
- </form>
- </div>
- </div>
<div id="notification" style="display:none;"></div>
- <div id="calendar_holder">
+ <div id="controls">
+ <form id="view">
+ <input type="button" value="<?php echo $l->t('Week');?>" id="oneweekview_radio"/>
+ <input type="button" value="<?php echo $l->t('Month');?>" id="onemonthview_radio"/>
+ <input type="button" value="<?php echo $l->t('List');?>" id="listview_radio"/>&nbsp;&nbsp;
+ <img id="loading" src="<?php echo OCP\Util::imagePath('core', 'loading.gif'); ?>" />
+ </form>
+ <form id="choosecalendar">
+ <!--<input type="button" id="today_input" value="<?php echo $l->t("Today");?>"/>-->
+ <a class="settings calendarsettings" title="<?php echo $l->t('Settings'); ?>"><img class="svg" src="<?php echo OCP\Util::imagePath('calendar', 'icon.svg'); ?>" alt="<?php echo $l->t('Settings'); ?>" /></a>
+ <a class="settings generalsettings" title="<?php echo $l->t('Settings'); ?>"><img class="svg" src="<?php echo OCP\Util::imagePath('core', 'actions/settings.svg'); ?>" alt="<?php echo $l->t('Settings'); ?>" /></a>
+ </form>
+ <form id="datecontrol">
+ <input type="button" value="&nbsp;&lt;&nbsp;" id="datecontrol_left"/>
+ <input type="button" value="" id="datecontrol_date"/>
+ <input type="button" value="&nbsp;&gt;&nbsp;" id="datecontrol_right"/>
+ </form>
</div>
- <!-- Dialogs -->
+ <div id="fullcalendar"></div>
<div id="dialog_holder"></div>
- <div id="parsingfail_dialog" title="Parsing Fail">
- <?php echo $l->t("There was a fail, while parsing the file."); ?>
- </div>
- <!-- End of Dialogs -->
+ <div id="appsettings" class="popup topright hidden"></div> \ No newline at end of file
diff --git a/apps/calendar/templates/part.choosecalendar.php b/apps/calendar/templates/part.choosecalendar.php
index 8d621cc3630..ad2f9e753f2 100644
--- a/apps/calendar/templates/part.choosecalendar.php
+++ b/apps/calendar/templates/part.choosecalendar.php
@@ -1,51 +1,52 @@
-<div id="choosecalendar_dialog" title="<?php echo $l->t("Choose active calendars"); ?>">
-<p><b><?php echo $l->t('Your calendars'); ?>:</b></p>
-<table width="100%" style="border: 0;">
-<?php
-$option_calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser());
-for($i = 0; $i < count($option_calendars); $i++){
- echo "<tr>";
- $tmpl = new OCP\Template('calendar', 'part.choosecalendar.rowfields');
- $tmpl->assign('calendar', $option_calendars[$i]);
- if(OC_Calendar_Share::allUsersSharedwith($option_calendars[$i]['id'], OC_Calendar_Share::CALENDAR) == array()){
- $shared = false;
- }else{
- $shared = true;
+<form id="calendar">
+ <p><b><?php echo $l->t('Your calendars'); ?>:</b></p>
+ <table width="100%" style="border: 0;">
+ <?php
+ $option_calendars = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser());
+ for($i = 0; $i < count($option_calendars); $i++){
+ echo "<tr>";
+ $tmpl = new OCP\Template('calendar', 'part.choosecalendar.rowfields');
+ $tmpl->assign('calendar', $option_calendars[$i]);
+ if(OC_Calendar_Share::allUsersSharedwith($option_calendars[$i]['id'], OC_Calendar_Share::CALENDAR) == array()){
+ $shared = false;
+ }else{
+ $shared = true;
+ }
+ $tmpl->assign('shared', $shared);
+ $tmpl->printpage();
+ echo "</tr>";
}
- $tmpl->assign('shared', $shared);
- $tmpl->printpage();
- echo "</tr>";
-}
-?>
-<tr>
- <td colspan="6">
- <a href="#" onclick="Calendar.UI.Calendar.newCalendar(this);"><input type="button" value="<?php echo $l->t('New Calendar') ?>"></a>
- </td>
-</tr>
-<tr>
- <td colspan="6">
- <p style="margin: 0 auto;width: 90%;"><input style="display:none;width: 90%;float: left;" type="text" id="caldav_url" onmouseover="$('#caldav_url').select();" title="<?php echo $l->t("CalDav Link"); ?>"><img id="caldav_url_close" style="height: 20px;vertical-align: middle;display: none;" src="<?php echo OCP\Util::imagePath('core', 'actions/delete.svg') ?>" alt="close" onclick="$('#caldav_url').hide();$('#caldav_url_close').hide();"/></p>
- </td>
-</tr>
-</table><br>
-<p><b><?php echo $l->t('Shared calendars'); ?>: </b></p>
-<table width="100%" style="border: 0;">
-<?php
-$share = OC_Calendar_Share::allSharedwithuser(OCP\USER::getUser(), OC_Calendar_Share::CALENDAR);
-$count = count($share);
-for($i = 0; $i < $count; $i++){
- $share[$i]['calendar'] = OC_Calendar_App::getCalendar($share[$i]['calendarid'], false, false);
- echo '<tr>';
- $tmpl = new OCP\Template('calendar', 'part.choosecalendar.rowfields.shared');
- $tmpl->assign('share', $share[$i]);
- $tmpl->printpage();
- echo '</tr>';
-}
-?>
-</table>
-<?php
-if($count == 0){
- echo '<p style="text-align:center;"><b>' . $l->t('No shared calendars') . '</b></p>';
-}
-?>
-</div> \ No newline at end of file
+ ?>
+ <tr>
+ <td colspan="6">
+ <a href="#" onclick="Calendar.UI.Calendar.newCalendar(this);"><input type="button" value="<?php echo $l->t('New Calendar') ?>"></a>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="6">
+ <p style="margin: 0 auto;width: 90%;"><input style="display:none;width: 90%;float: left;" type="text" id="caldav_url" onmouseover="$('#caldav_url').select();" title="<?php echo $l->t("CalDav Link"); ?>"><img id="caldav_url_close" style="height: 20px;vertical-align: middle;display: none;" src="<?php echo OCP\Util::imagePath('core', 'actions/delete.svg') ?>" alt="close" onclick="$('#caldav_url').hide();$('#caldav_url_close').hide();"/></p>
+ </td>
+ </tr>
+ </table><br>
+ <p><b><?php echo $l->t('Shared calendars'); ?>: </b></p>
+ <table width="100%" style="border: 0;">
+ <?php
+ $share = OC_Calendar_Share::allSharedwithuser(OCP\USER::getUser(), OC_Calendar_Share::CALENDAR);
+ $count = count($share);
+ for($i = 0; $i < $count; $i++){
+ $share[$i]['calendar'] = OC_Calendar_App::getCalendar($share[$i]['calendarid'], false, false);
+ echo '<tr>';
+ $tmpl = new OCP\Template('calendar', 'part.choosecalendar.rowfields.shared');
+ $tmpl->assign('share', $share[$i]);
+ $tmpl->printpage();
+ echo '</tr>';
+ }
+ ?>
+ </table>
+ <?php
+ if($count == 0){
+ echo '<p style="text-align:center;"><b>' . $l->t('No shared calendars') . '</b></p>';
+ }
+ ?>
+ </fieldset>
+</form> \ No newline at end of file
diff --git a/apps/calendar/templates/part.choosecalendar.rowfields.php b/apps/calendar/templates/part.choosecalendar.rowfields.php
index 268c3356011..64aaa797197 100644
--- a/apps/calendar/templates/part.choosecalendar.rowfields.php
+++ b/apps/calendar/templates/part.choosecalendar.rowfields.php
@@ -1,8 +1,21 @@
-<?php
-echo '<td width="20px"><input id="active_' . $_['calendar']['id'] . '" type="checkbox" onClick="Calendar.UI.Calendar.activation(this,' . $_['calendar']['id'] . ')"' . ($_['calendar']['active'] ? ' checked="checked"' : '') . '></td>';
-echo '<td id="' . OCP\USER::getUser() . '_' . $_['calendar']['id'] . '"><label for="active_' . $_['calendar']['id'] . '">' . htmlspecialchars($_['calendar']['displayname']) . '</label></td>';
-echo '<td width="20px"><a href="#" onclick="Calendar.UI.Share.dropdown(\'' . OCP\USER::getUser() . '\', \'' . $_['calendar']['id'] . '\');" title="' . $l->t("Share Calendar") . '" class="action"><img class="svg action" src="' . ((!$_['shared']) ? OCP\Util::imagePath('core', 'actions/share.svg') : OCP\Util::imagePath('core', 'actions/shared.svg')) . '"></a></td>';
-echo '<td width="20px"><a href="#" onclick="Calendar.UI.showCalDAVUrl(\'' . OCP\USER::getUser() . '\', \'' . htmlentities($_['calendar']['uri']) . '\');" title="' . $l->t("CalDav Link") . '" class="action"><img class="svg action" src="'.OCP\Util::imagePath('core', 'actions/public.svg').'"></a></td>';
-echo '<td width="20px"><a href="?app=calendar&getfile=export.php?calid=' . $_['calendar']['id'] . '" title="' . $l->t('Download') . '" class="action"><img class="svg action" src="'.OCP\Util::imagePath('core', 'actions/download.svg').'"></a></td>';
-echo '<td width="20px"><a href="#" title="' . $l->t('Edit') . '" class="action" onclick="Calendar.UI.Calendar.edit(this, ' . $_['calendar']['id'] . ');"><img class="svg action" src="'.OCP\Util::imagePath('core', 'actions/rename.svg').'"></a></td>';
-echo '<td width="20px"><a href="#" onclick="Calendar.UI.Calendar.deleteCalendar(\'' . $_['calendar']['id'] . '\');" title="' . $l->t('Delete') . '" class="action"><img class="svg action" src="'.OCP\Util::imagePath('core', 'actions/delete.svg').'"></a></td>';
+<td width="20px">
+ <input type="checkbox" id="active_<?php echo $_['calendar']['id'] ?>" onclick="Calendar.UI.Calendar.activation(this,<?php echo $_['calendar']['id'] ?>)"<?php echo $_['calendar']['active'] ? ' checked="checked"' : '' ?>>
+</td>
+<td id="<?php echo OCP\USER::getUser() ?>_<?php echo $_['calendar']['id'] ?>">
+ <label for="active_<?php echo $_['calendar']['id'] ?>"><?php echo $_['calendar']['displayname'] ?></label>
+</td>
+<td width="20px">
+ <a href="#" class="share" data-item-type="calendar" data-item="<?php echo $_['calendar']['id']; ?>" title="<?php echo $l->t('Share Calendar') ?>" class="action"><img class="svg action" src="<?php echo (!$_['shared']) ? OCP\Util::imagePath('core', 'actions/share.svg') : OCP\Util::imagePath('core', 'actions/shared.svg') ?>"></a>
+</td>
+<td width="20px">
+ <a href="#" onclick="Calendar.UI.showCalDAVUrl('<?php echo OCP\USER::getUser() ?>', '<?php echo rawurlencode(html_entity_decode($_['calendar']['uri'], ENT_QUOTES, 'UTF-8')) ?>');" title="<?php echo $l->t('CalDav Link') ?>" class="action"><img class="svg action" src="<?php echo OCP\Util::imagePath('core', 'actions/public.svg') ?>"></a>
+</td>
+<td width="20px">
+ <a href="<?php echo OCP\Util::linkTo('calendar', 'export.php') . '?calid=' . $_['calendar']['id'] ?>" title="<?php echo $l->t('Download') ?>" class="action"><img class="svg action" src="<?php echo OCP\Util::imagePath('core', 'actions/download.svg') ?>"></a>
+</td>
+<td width="20px">
+ <a href="#" onclick="Calendar.UI.Calendar.edit(this, <?php echo $_['calendar']['id'] ?>);" title="<?php echo $l->t('Edit') ?>" class="action"><img class="svg action" src="<?php echo OCP\Util::imagePath('core', 'actions/rename.svg') ?>"></a>
+</td>
+<td width="20px">
+ <a href="#" onclick="Calendar.UI.Calendar.deleteCalendar(<?php echo $_['calendar']['id'] ?>);" title="<?php echo $l->t('Delete') ?>" class="action"><img class="svg action" src="<?php echo OCP\Util::imagePath('core', 'actions/delete.svg') ?>"></a>
+</td>
diff --git a/apps/calendar/templates/part.editevent.php b/apps/calendar/templates/part.editevent.php
index 102366f8f08..ea91192cc66 100644
--- a/apps/calendar/templates/part.editevent.php
+++ b/apps/calendar/templates/part.editevent.php
@@ -5,9 +5,9 @@
<?php echo $this->inc("part.eventform"); ?>
<div style="width: 100%;text-align: center;color: #FF1D1D;" id="errorbox"></div>
<span id="actions">
- <input type="button" class="submit" style="float: left;" value="<?php echo $l->t("Submit");?>" onclick="Calendar.UI.validateEventForm('?app=calendar&getfile=ajax/event/edit.php');">
- <input type="button" class="submit" style="float: left;" name="delete" value="<?php echo $l->t("Delete");?>" onclick="Calendar.UI.submitDeleteEventForm('?app=calendar&getfile=ajax/event/delete.php');">
- <input type="button" class="submit" style="float: right;" name="export" value="<?php echo $l->t("Export");?>" onclick="window.location='?app=calendar&getfile=export.php?eventid=<?php echo $_['eventid'] ?>';">
+ <input type="button" class="submit" style="float: left;" value="<?php echo $l->t("Submit");?>" onclick="Calendar.UI.validateEventForm('<?php echo OCP\Util::linkTo('calendar', 'ajax/event/edit.php') ?>');">
+ <input type="button" class="submit" style="float: left;" name="delete" value="<?php echo $l->t("Delete");?>" onclick="Calendar.UI.submitDeleteEventForm('<?php echo OCP\Util::linkTo('calendar', 'ajax/event/delete.php') ?>');">
+ <input type="button" class="submit" style="float: right;" name="export" value="<?php echo $l->t("Export");?>" onclick="window.location='<?php echo OCP\Util::linkTo('calendar', 'export.php') ?>?eventid=<?php echo $_['eventid'] ?>';">
</span>
</form>
</div>
diff --git a/apps/calendar/templates/part.eventform.php b/apps/calendar/templates/part.eventform.php
index 2d86ce4d318..95eecf26223 100644
--- a/apps/calendar/templates/part.eventform.php
+++ b/apps/calendar/templates/part.eventform.php
@@ -18,7 +18,7 @@ echo 'Calendar.UI.Share.idtype = "event";' . "\n" . 'Calendar.UI.Share.currentid
<tr>
<th width="75px"><?php echo $l->t("Title");?>:</th>
<td>
- <input type="text" style="width:350px;" size="100" placeholder="<?php echo $l->t("Title of the Event");?>" value="<?php echo isset($_['title']) ? htmlspecialchars($_['title']) : '' ?>" maxlength="100" name="title"/>
+ <input type="text" style="width:350px;" size="100" placeholder="<?php echo $l->t("Title of the Event");?>" value="<?php echo isset($_['title']) ? $_['title'] : '' ?>" maxlength="100" name="title"/>
</td>
</tr>
</table>
@@ -26,7 +26,7 @@ echo 'Calendar.UI.Share.idtype = "event";' . "\n" . 'Calendar.UI.Share.currentid
<tr>
<th width="75px"><?php echo $l->t("Category");?>:</th>
<td>
- <input id="category" name="categories" type="text" placeholder="<?php echo $l->t('Separate categories with commas'); ?>" value="<?php echo isset($_['categories']) ? htmlspecialchars($_['categories']) : '' ?>">
+ <input id="category" name="categories" type="text" placeholder="<?php echo $l->t('Separate categories with commas'); ?>" value="<?php echo isset($_['categories']) ? $_['categories'] : '' ?>">
<a class="action edit" onclick="$(this).tipsy('hide');OCCategories.edit();" title="<?php echo $l->t('Edit categories'); ?>"><img alt="<?php echo $l->t('Edit categories'); ?>" src="<?php echo OCP\image_path('core','actions/rename.svg')?>" class="svg action" style="width: 16px; height: 16px;"></a>
</td>
<?php if(count($_['calendar_options']) > 1) { ?>
@@ -80,7 +80,7 @@ echo 'Calendar.UI.Share.idtype = "event";' . "\n" . 'Calendar.UI.Share.currentid
<tr>
<th width="85px"><?php echo $l->t("Location");?>:</th>
<td>
- <input type="text" style="width:350px;" size="100" placeholder="<?php echo $l->t("Location of the Event");?>" value="<?php echo isset($_['location']) ? htmlspecialchars($_['location']) : '' ?>" maxlength="100" name="location" />
+ <input type="text" style="width:350px;" size="100" placeholder="<?php echo $l->t("Location of the Event");?>" value="<?php echo isset($_['location']) ? $_['location'] : '' ?>" maxlength="100" name="location" />
</td>
</tr>
</table>
@@ -88,7 +88,7 @@ echo 'Calendar.UI.Share.idtype = "event";' . "\n" . 'Calendar.UI.Share.currentid
<tr>
<th width="85px" style="vertical-align: top;"><?php echo $l->t("Description");?>:</th>
<td>
- <textarea style="width:350px;height: 150px;" placeholder="<?php echo $l->t("Description of the Event");?>" name="description"><?php echo isset($_['description']) ? htmlspecialchars($_['description']) : '' ?></textarea>
+ <textarea style="width:350px;height: 150px;" placeholder="<?php echo $l->t("Description of the Event");?>" name="description"><?php echo isset($_['description']) ? $_['description'] : '' ?></textarea>
</td>
</tr>
</table>
diff --git a/apps/calendar/templates/part.import.php b/apps/calendar/templates/part.import.php
index 3850ddde565..2ce3cc34239 100644
--- a/apps/calendar/templates/part.import.php
+++ b/apps/calendar/templates/part.import.php
@@ -1,30 +1,58 @@
-<div id="calendar_import_dialog" title="<?php echo $l->t("Import a calendar file"); ?>">
-<div id="form_container">
-<input type="hidden" id="filename" value="<?php echo $_['filename'];?>">
-<input type="hidden" id="path" value="<?php echo $_['path'];?>">
-<input type="hidden" id="progressfile" value="<?php echo md5(session_id()) . '.txt';?>">
-<p style="text-align:center;"><b><?php echo $l->t('Please choose the calendar'); ?></b></p>
-<select style="width:100%;" id="calendar" name="calendar">
<?php
+//Prerendering for iCalendar file
+$file = OC_Filesystem::file_get_contents($_['path'] . '/' . $_['filename']);
+if(!$file){
+ OCP\JSON::error(array('error'=>'404'));
+}
+$import = new OC_Calendar_Import($file);
+$import->setUserID(OCP\User::getUser());
+$newcalendarname = strip_tags($import->createCalendarName());
+$guessedcalendarname = strip_tags($import->guessCalendarName());
+$calendarcolor = strip_tags($import->createCalendarColor());
+//loading calendars for select box
$calendar_options = OC_Calendar_Calendar::allCalendars(OCP\USER::getUser());
$calendar_options[] = array('id'=>'newcal', 'displayname'=>$l->t('create a new calendar'));
-for($i = 0;$i<count($calendar_options);$i++){
- $calendar_options[$i]['displayname'] = htmlspecialchars($calendar_options[$i]['displayname']);
-}
-echo OCP\html_select_options($calendar_options, $calendar_options[0]['id'], array('value'=>'id', 'label'=>'displayname'));
+$defaultcolors = OC_Calendar_Calendar::getCalendarColorOptions();
?>
-</select>
-<div id="newcalform" style="display: none;">
- <input type="text" style="width: 97%;" placeholder="<?php echo $l->t('Name of new calendar'); ?>" id="newcalendar" name="newcalendar">
-</div>
-<input type="button" value="<?php echo $l->t("Import");?>!" id="startimport">
-</div>
-<div id="progressbar_container" style="display: none">
-<p style="text-align:center;"><b><?php echo $l->t('Importing calendar'); ?></b></p>
-<div id="progressbar"></div>
-<div id="import_done" style="display: none;">
-<p style="text-align:center;"><b><?php echo $l->t('Calendar imported successfully'); ?></b></p>
-<input type="button" value="<?php echo $l->t('Close Dialog'); ?>" id="import_done_button">
+<div id="calendar_import_dialog" title="<?php echo $l->t("Import a calendar file");?>">
+<div id="calendar_import_form">
+ <form>
+ <input type="hidden" id="calendar_import_filename" value="<?php echo $_['filename'];?>">
+ <input type="hidden" id="calendar_import_path" value="<?php echo $_['path'];?>">
+ <input type="hidden" id="calendar_import_progresskey" value="<?php echo rand() ?>">
+ <input type="hidden" id="calendar_import_availablename" value="<?php echo $newcalendarname ?>">
+ <div id="calendar_import_form_message"><?php echo $l->t('Please choose a calendar'); ?></div>
+ <select style="width:100%;" id="calendar_import_calendar" name="calendar_import_calendar">
+ <?php
+ for($i = 0;$i<count($calendar_options);$i++){
+ $calendar_options[$i]['displayname'] = $calendar_options[$i]['displayname'];
+ }
+ echo OCP\html_select_options($calendar_options, $calendar_options[0]['id'], array('value'=>'id', 'label'=>'displayname'));
+ ?>
+ </select>
+ <br><br>
+ <div id="calendar_import_newcalform">
+ <input id="calendar_import_newcalendar_color" class="color-picker" type="hidden" size="6" value="<?php echo substr($calendarcolor,1); ?>">
+ <input id="calendar_import_newcalendar" class="" type="text" placeholder="<?php echo $l->t('Name of new calendar'); ?>" value="<?php echo $guessedcalendarname ?>"><br>
+ <div id="calendar_import_defaultcolors">
+ <?php
+ foreach($defaultcolors as $color){
+ echo '<span class="calendar-colorpicker-color" rel="' . $color . '" style="background-color: ' . $color . ';"></span>';
+ }
+ ?>
+ </div>
+ <!--<input id="calendar_import_generatename" type="button" class="button" value="<?php echo $l->t('Take an available name!'); ?>"><br>-->
+ <div id="calendar_import_mergewarning" class="hint"><?php echo $l->t('A Calendar with this name already exists. If you continue anyhow, these calendars will be merged.'); ?></div>
+ </div>
+ <input id="calendar_import_submit" type="button" class="button" value="&raquo; <?php echo $l->t('Import'); ?> &raquo;" id="startimport">
+ <form>
</div>
+<div id="calendar_import_process">
+ <div id="calendar_import_process_message"></div>
+ <div id="calendar_import_progressbar"></div>
+ <br>
+ <div id="calendar_import_status" class="hint"></div>
+ <br>
+ <input id="calendar_import_done" type="button" value="<?php echo $l->t('Close Dialog'); ?>">
</div>
</div> \ No newline at end of file
diff --git a/apps/calendar/templates/part.newevent.php b/apps/calendar/templates/part.newevent.php
index f4bb867b180..a4f48aecbc6 100644
--- a/apps/calendar/templates/part.newevent.php
+++ b/apps/calendar/templates/part.newevent.php
@@ -3,7 +3,7 @@
<?php echo $this->inc("part.eventform"); ?>
<div style="width: 100%;text-align: center;color: #FF1D1D;" id="errorbox"></div>
<span id="actions">
- <input type="button" class="submit" style="float: left;" value="<?php echo $l->t("Submit");?>" onclick="Calendar.UI.validateEventForm('?app=calendar&getfile=ajax/event/new.php');">
+ <input type="button" class="submit" style="float: left;" value="<?php echo $l->t("Submit");?>" onclick="Calendar.UI.validateEventForm('<?php echo OCP\Util::linkTo('calendar', 'ajax/event/new.php') ?>');">
</span>
</form>
</div>
diff --git a/apps/calendar/templates/part.showevent.php b/apps/calendar/templates/part.showevent.php
index a4c862ad417..59684d831e5 100644
--- a/apps/calendar/templates/part.showevent.php
+++ b/apps/calendar/templates/part.showevent.php
@@ -10,7 +10,7 @@
<tr>
<th width="75px"><?php echo $l->t("Title");?>:</th>
<td>
- <?php echo isset($_['title']) ? htmlspecialchars($_['title']) : '' ?>
+ <?php echo isset($_['title']) ? $_['title'] : '' ?>
</td>
</tr>
</table>
@@ -76,7 +76,7 @@
<tr>
<th width="85px"><?php echo $l->t("Location");?>:</th>
<td>
- <?php echo isset($_['location']) ? htmlspecialchars($_['location']) : '' ?>
+ <?php echo isset($_['location']) ? $_['location'] : '' ?>
</td>
</tr>
</table>
@@ -84,7 +84,7 @@
<tr>
<th width="85px" style="vertical-align: top;"><?php echo $l->t("Description");?>:</th>
<td>
- <?php echo isset($_['description']) ? htmlspecialchars($_['description']) : '' ?></textarea>
+ <?php echo isset($_['description']) ? $_['description'] : '' ?></textarea>
</tr>
</table>
</div>
diff --git a/apps/calendar/templates/settings.php b/apps/calendar/templates/settings.php
index feb06655120..56a6a42ee0e 100644
--- a/apps/calendar/templates/settings.php
+++ b/apps/calendar/templates/settings.php
@@ -1,17 +1,22 @@
<?php
/**
* Copyright (c) 2011 Bart Visscher <bartv@thisnet.nl>
- * Copyright (c) 2011 Georg Ehrke <ownclouddev at georgswebsite dot de>
+ * Copyright (c) 2012 Georg Ehrke <ownclouddev at georgswebsite dot de>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
?>
-<form id="calendar">
- <fieldset class="personalblock">
- <legend><?php echo $l->t('Calendar'); ?></legend>
- <table class="nostyle">
- <tr><td><label for="timezone" class="bold"><?php echo $l->t('Timezone');?></label></td><td><select style="display: none;" id="timezone" name="timezone">
+<h2 id="title_general"><?php echo $l->t('General'); ?></h2>
+<div id="general">
+ <table class="nostyle">
+ <tr>
+ <td>
+ <label for="timezone" class="bold"><?php echo $l->t('Timezone');?></label>
+ &nbsp;&nbsp;
+ </td>
+ <td>
+ <select style="display: none;" id="timezone" name="timezone">
<?php
$continent = '';
foreach($_['timezones'] as $timezone):
@@ -27,31 +32,70 @@
$city=strtr($ex[1], '_', ' ');
$continent=$ex[0];
echo '<option value="'.$timezone.'"'.($_['timezone'] == $timezone?' selected="selected"':'').'>'.$city.'</option>';
+ var_dump($_['timezone']);
endforeach;?>
- </select><input type="checkbox" name="timezonedetection" id="timezonedetection"><label for="timezonedetection"><?php echo $l->t('Check always for changes of the timezone'); ?></label></td></tr>
-
- <tr><td><label for="timeformat" class="bold"><?php echo $l->t('Timeformat');?></label></td><td>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ &nbsp;&nbsp;
+ </td>
+ <td>
+ <input type="checkbox" name="timezonedetection" id="timezonedetection">
+ &nbsp;
+ <label for="timezonedetection"><?php echo $l->t('Update timezone automatically'); ?></label>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <label for="timeformat" class="bold"><?php echo $l->t('Time format');?></label>
+ &nbsp;&nbsp;
+ </td>
+ <td>
<select style="display: none; width: 60px;" id="timeformat" title="<?php echo "timeformat"; ?>" name="timeformat">
<option value="24" id="24h"><?php echo $l->t("24h"); ?></option>
<option value="ampm" id="ampm"><?php echo $l->t("12h"); ?></option>
</select>
- </td></tr>
-
- <tr><td><label for="firstday" class="bold"><?php echo $l->t('First day of the week');?></label></td><td>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <label for="firstday" class="bold"><?php echo $l->t('Start week on');?></label>
+ &nbsp;&nbsp;
+ </td>
+ <td>
<select style="display: none;" id="firstday" title="<?php echo "First day"; ?>" name="firstday">
<option value="mo" id="mo"><?php echo $l->t("Monday"); ?></option>
<option value="su" id="su"><?php echo $l->t("Sunday"); ?></option>
</select>
- </td></tr>
-
- </table>
-
+ </td>
+ </tr>
+ <tr class="advancedsettings">
+ <td>
+ <label for="" class="bold"><?php echo $l->t('Cache');?></label>
+ &nbsp;&nbsp;
+ </td>
+ <td>
+ <input id="cleancalendarcache" type="button" class="button" value="<?php echo $l->t('Clear cache for repeating events');?>">
+ </td>
+ </tr>
+ </table>
+</div>
+<h2 id="title_urls"><?php echo $l->t('URLs'); ?></h2>
+<div id="urls">
<?php echo $l->t('Calendar CalDAV syncing addresses'); ?> (<a href="http://owncloud.org/synchronisation/" target="_blank"><?php echo $l->t('more info'); ?></a>)
<dl>
<dt><?php echo $l->t('Primary address (Kontact et al)'); ?></dt>
<dd><code><?php echo OCP\Util::linkToRemote('caldav'); ?></code></dd>
<dt><?php echo $l->t('iOS/OS X'); ?></dt>
<dd><code><?php echo OCP\Util::linkToRemote('caldav'); ?>principals/<?php echo OCP\USER::getUser(); ?></code>/</dd>
+ <dt><?php echo $l->t('Read only iCalendar link(s)'); ?></dt>
+ <dd>
+ <?php foreach($_['calendars'] as $calendar) { ?>
+ <a href="<?php echo OCP\Util::linkToRemote('caldav').'calendars/'.OCP\USER::getUser().'/'.rawurlencode($calendar['uri']) ?>?export"><?php echo $calendar['displayname'] ?></a><br />
+ <?php } ?>
+ </dd>
</dl>
- </fieldset>
-</form>
+ </div>
+</div> \ No newline at end of file
diff --git a/apps/calendar/templates/share.dropdown.php b/apps/calendar/templates/share.dropdown.php
index 07b4c4bced5..391ae83765b 100644
--- a/apps/calendar/templates/share.dropdown.php
+++ b/apps/calendar/templates/share.dropdown.php
@@ -33,7 +33,7 @@ echo OCP\html_select_options($allusers, array());
</select><br>
<ul id="sharewithuser_list">
<?php foreach($users as $user): ?>
- <li id="sharewithuser_<?php echo $user['share']; ?>"><input type="checkbox" width="12px" <?php echo ($user['permissions']?'checked="checked"':'')?> style="visibility:hidden;" title="<?php echo $l->t('Editable'); ?>"><?php echo $user['share']; ?><img src="<?php echo OC::$WEBROOT; ?>/core/img/actions/delete.svg" class="svg action" style="display:none;float:right;"></li>
+ <li id="sharewithuser_<?php echo $user['share']; ?>"><input type="checkbox" width="12px" <?php echo ($user['permissions']?'checked="checked"':'')?> style="visibility:hidden;" title="<?php echo $l->t('Editable'); ?>"><?php echo $user['share']; ?><img src="<?php echo OCP\Util::imagePath('core', 'actions/delete.svg'); ?>" class="svg action" style="display:none;float:right;"></li>
<script>
$('#sharewithuser_<?php echo $user['share']; ?> > img').click(function(){
$('#share_user option[value="<?php echo $user['share']; ?>"]').removeAttr('disabled');
@@ -59,7 +59,7 @@ echo OCP\html_select_options($allgroups, array());
</select><br>
<ul id="sharewithgroup_list">
<?php foreach($groups as $group): ?>
- <li id="sharewithgroup_<?php echo $group['share']; ?>"><input type="checkbox" width="12px" <?php echo ($group['permissions']?'checked="checked"':'')?> style="visibility:hidden;" title="<?php echo $l->t('Editable'); ?>"><?php echo $group['share']; ?><img src="<?php echo OC::$WEBROOT; ?>/core/img/actions/delete.svg" class="svg action" style="display:none;float:right;"></li>
+ <li id="sharewithgroup_<?php echo $group['share']; ?>"><input type="checkbox" width="12px" <?php echo ($group['permissions']?'checked="checked"':'')?> style="visibility:hidden;" title="<?php echo $l->t('Editable'); ?>"><?php echo $group['share']; ?><img src="<?php echo OCP\Util::imagePath('core', 'actions/delete.svg'); ?>" class="svg action" style="display:none;float:right;"></li>
<script>
$('#sharewithgroup_<?php echo $group['share']; ?> > img').click(function(){
$('#share_group option[value="<?php echo $group['share']; ?>"]').removeAttr('disabled');
diff --git a/apps/contacts/ajax/activation.php b/apps/contacts/ajax/activation.php
deleted file mode 100644
index 74cb738ab8f..00000000000
--- a/apps/contacts/ajax/activation.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * Copyright (c) 2011 Thomas Tanghus <thomas@tanghus.net>
- * Copyright (c) 2011 Bart Visscher <bartv@thisnet.nl>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-
-OCP\JSON::checkLoggedIn();
-OCP\JSON::checkAppEnabled('contacts');
-OCP\JSON::callCheck();
-
-$bookid = $_POST['bookid'];
-$book = OC_Contacts_App::getAddressbook($bookid);// is owner access check
-
-if(!OC_Contacts_Addressbook::setActive($bookid, $_POST['active'])) {
- OCP\Util::writeLog('contacts','ajax/activation.php: Error activating addressbook: '.$bookid, OCP\Util::ERROR);
- OCP\JSON::error(array('data' => array('message' => OC_Contacts_App::$l10n->t('Error (de)activating addressbook.'))));
- exit();
-}
-
-OCP\JSON::success(array(
- 'active' => OC_Contacts_Addressbook::isActive($bookid),
- 'bookid' => $bookid,
- 'book' => $book,
-));
diff --git a/apps/contacts/ajax/addbook.php b/apps/contacts/ajax/addbook.php
deleted file mode 100644
index 70f47cc8123..00000000000
--- a/apps/contacts/ajax/addbook.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-/**
- * Copyright (c) 2011 Bart Visscher <bartv@thisnet.nl>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-
-OCP\JSON::checkLoggedIn();
-OCP\JSON::checkAppEnabled('contacts');
-$book = array(
- 'id' => 'new',
- 'displayname' => '',
-);
-$tmpl = new OCP\Template('contacts', 'part.editaddressbook');
-$tmpl->assign('new', true);
-$tmpl->assign('addressbook', $book);
-$tmpl->printPage();
-?>
diff --git a/apps/contacts/ajax/addressbook/activate.php b/apps/contacts/ajax/addressbook/activate.php
new file mode 100644
index 00000000000..a8dec21dac7
--- /dev/null
+++ b/apps/contacts/ajax/addressbook/activate.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Copyright (c) 2011 Thomas Tanghus <thomas@tanghus.net>
+ * Copyright (c) 2011 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+
+OCP\JSON::checkLoggedIn();
+OCP\JSON::checkAppEnabled('contacts');
+OCP\JSON::callCheck();
+
+$id = $_POST['id'];
+$book = OC_Contacts_App::getAddressbook($id);// is owner access check
+
+if(!OC_Contacts_Addressbook::setActive($id, $_POST['active'])) {
+ OCP\Util::writeLog('contacts',
+ 'ajax/activation.php: Error activating addressbook: '. $id,
+ OCP\Util::ERROR);
+ OCP\JSON::error(array(
+ 'data' => array(
+ 'message' => OC_Contacts_App::$l10n->t('Error (de)activating addressbook.'))));
+ exit();
+}
+
+OCP\JSON::success(array(
+ 'active' => OC_Contacts_Addressbook::isActive($id),
+ 'id' => $id,
+ 'addressbook' => $book,
+));
diff --git a/apps/contacts/ajax/addressbook/add.php b/apps/contacts/ajax/addressbook/add.php
new file mode 100644
index 00000000000..65077743ed5
--- /dev/null
+++ b/apps/contacts/ajax/addressbook/add.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Copyright (c) 2011-2012 Thomas Tanghus <thomas@tanghus.net>
+ * Copyright (c) 2011 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+
+// Check if we are a user
+OCP\JSON::checkLoggedIn();
+OCP\JSON::checkAppEnabled('contacts');
+OCP\JSON::callCheck();
+require_once __DIR__.'/../loghandler.php';
+
+debug('name: '.$_POST['name']);
+
+$userid = OCP\USER::getUser();
+$name = isset($_POST['name'])?trim(strip_tags($_POST['name'])):null;
+$description = isset($_POST['description'])
+ ? trim(strip_tags($_POST['description']))
+ : null;
+
+if(is_null($name)) {
+ bailOut('Cannot add addressbook with an empty name.');
+}
+$bookid = OC_Contacts_Addressbook::add($userid, $name, $description);
+if(!$bookid) {
+ bailOut('Error adding addressbook: '.$name);
+}
+
+if(!OC_Contacts_Addressbook::setActive($bookid, 1)) {
+ bailOut('Error activating addressbook.');
+}
+$addressbook = OC_Contacts_App::getAddressbook($bookid);
+OCP\JSON::success(array('data' => array('addressbook' => $addressbook)));
diff --git a/apps/contacts/ajax/deletebook.php b/apps/contacts/ajax/addressbook/delete.php
index 4520374a23b..f59c605f4e4 100644
--- a/apps/contacts/ajax/deletebook.php
+++ b/apps/contacts/ajax/addressbook/delete.php
@@ -20,16 +20,16 @@
*
*/
-// Init owncloud
-
-
// Check if we are a user
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
OCP\JSON::callCheck();
+require_once __DIR__.'/../loghandler.php';
-//$id = $_GET['id'];
$id = $_POST['id'];
+if(!$id) {
+ bailOut(OC_Contacts_App::$l10n->t('id is not set.'));
+}
OC_Contacts_App::getAddressbook( $id ); // is owner access check
OC_Contacts_Addressbook::delete($id);
diff --git a/apps/contacts/ajax/addressbook/update.php b/apps/contacts/ajax/addressbook/update.php
new file mode 100644
index 00000000000..0fc66c3a3bf
--- /dev/null
+++ b/apps/contacts/ajax/addressbook/update.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Copyright (c) 2011-2012 Thomas Tanghus <thomas@tanghus.net>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+
+
+// Check if we are a user
+OCP\JSON::checkLoggedIn();
+OCP\JSON::checkAppEnabled('contacts');
+require_once __DIR__.'/../loghandler.php';
+
+$id = $_POST['id'];
+$name = trim(strip_tags($_POST['name']));
+$description = trim(strip_tags($_POST['description']));
+if(!$id) {
+ bailOut(OC_Contacts_App::$l10n->t('id is not set.'));
+}
+
+if(!$name) {
+ bailOut(OC_Contacts_App::$l10n->t('Cannot update addressbook with an empty name.'));
+}
+
+if(!OC_Contacts_Addressbook::edit($id, $name, $description)) {
+ bailOut(OC_Contacts_App::$l10n->t('Error updating addressbook.'));
+}
+
+if(!OC_Contacts_Addressbook::setActive($id, $_POST['active'])) {
+ bailOut(OC_Contacts_App::$l10n->t('Error (de)activating addressbook.'));
+}
+
+OC_Contacts_App::getAddressbook($id); // is owner access check
+$addressbook = OC_Contacts_App::getAddressbook($id);
+OCP\JSON::success(array(
+ 'addressbook' => $addressbook,
+));
diff --git a/apps/contacts/ajax/categories/categoriesfor.php b/apps/contacts/ajax/categories/categoriesfor.php
index 846af300de8..8391b14b545 100644
--- a/apps/contacts/ajax/categories/categoriesfor.php
+++ b/apps/contacts/ajax/categories/categoriesfor.php
@@ -12,17 +12,23 @@ OCP\JSON::checkAppEnabled('contacts');
$id = isset($_GET['id'])?$_GET['id']:null;
if(is_null($id)) {
- OCP\JSON::error(array('data' => array('message' => OC_Contacts_App::$l10n->t('No ID provided'))));
+ OCP\JSON::error(array(
+ 'data' => array(
+ 'message' => OC_Contacts_App::$l10n->t('No ID provided'))));
exit();
}
$vcard = OC_Contacts_App::getContactVCard( $id );
foreach($vcard->children as $property){
- //OCP\Util::writeLog('contacts','ajax/categories/checksumfor.php: '.$property->name, OCP\Util::DEBUG);
if($property->name == 'CATEGORIES') {
$checksum = md5($property->serialize());
- OCP\JSON::success(array('data' => array('value'=>$property->value, 'checksum'=>$checksum)));
+ OCP\JSON::success(array(
+ 'data' => array(
+ 'value' => $property->value,
+ 'checksum' => $checksum,
+ )));
exit();
}
}
-OCP\JSON::error(array('data' => array('message' => OC_Contacts_App::$l10n->t('Error setting checksum.'))));
-?>
+OCP\JSON::error(array(
+ 'data' => array(
+ 'message' => OC_Contacts_App::$l10n->t('Error setting checksum.'))));
diff --git a/apps/contacts/ajax/categories/delete.php b/apps/contacts/ajax/categories/delete.php
index bee2dbe3f6b..bc9f3e14e87 100644
--- a/apps/contacts/ajax/categories/delete.php
+++ b/apps/contacts/ajax/categories/delete.php
@@ -9,19 +9,9 @@
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
+OCP\JSON::callCheck();
-foreach ($_POST as $key=>$element) {
- debug('_POST: '.$key.'=>'.print_r($element, true));
-}
-
-function bailOut($msg) {
- OCP\JSON::error(array('data' => array('message' => $msg)));
- OCP\Util::writeLog('contacts','ajax/categories/delete.php: '.$msg, OCP\Util::DEBUG);
- exit();
-}
-function debug($msg) {
- OCP\Util::writeLog('contacts','ajax/categories/delete.php: '.$msg, OCP\Util::DEBUG);
-}
+require_once __DIR__.'/../loghandler.php';
$categories = isset($_POST['categories'])?$_POST['categories']:null;
@@ -56,5 +46,3 @@ $catman->delete($categories, $cards);
debug('After delete: '.print_r($catman->categories(), true));
OC_Contacts_VCard::updateDataByID($cards);
OCP\JSON::success(array('data' => array('categories'=>$catman->categories())));
-
-?>
diff --git a/apps/contacts/ajax/categories/list.php b/apps/contacts/ajax/categories/list.php
index 3ae7635390c..f234116ba8c 100644
--- a/apps/contacts/ajax/categories/list.php
+++ b/apps/contacts/ajax/categories/list.php
@@ -13,5 +13,3 @@ OCP\JSON::checkAppEnabled('contacts');
$categories = OC_Contacts_App::getCategories();
OCP\JSON::success(array('data' => array('categories'=>$categories)));
-
-?>
diff --git a/apps/contacts/ajax/categories/rescan.php b/apps/contacts/ajax/categories/rescan.php
index 84a67dec0b1..a06e7803955 100644
--- a/apps/contacts/ajax/categories/rescan.php
+++ b/apps/contacts/ajax/categories/rescan.php
@@ -9,36 +9,9 @@
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
+OCP\JSON::callCheck();
-foreach ($_POST as $key=>$element) {
- debug('_POST: '.$key.'=>'.print_r($element, true));
-}
-
-function bailOut($msg) {
- OCP\JSON::error(array('data' => array('message' => $msg)));
- OCP\Util::writeLog('contacts','ajax/categories/rescan.php: '.$msg, OCP\Util::DEBUG);
- exit();
-}
-function debug($msg) {
- OCP\Util::writeLog('contacts','ajax/categories/rescan.php: '.$msg, OCP\Util::DEBUG);
-}
-
-$addressbooks = OC_Contacts_Addressbook::all(OCP\USER::getUser());
-if(count($addressbooks) == 0) {
- bailOut(OC_Contacts_App::$l10n->t('No address books found.'));
-}
-$addressbookids = array();
-foreach($addressbooks as $addressbook) {
- $addressbookids[] = $addressbook['id'];
-}
-$contacts = OC_Contacts_VCard::all($addressbookids);
-if(count($contacts) == 0) {
- bailOut(OC_Contacts_App::$l10n->t('No contacts found.'));
-}
-
-OC_Contacts_App::scanCategories($contacts);
+OC_Contacts_App::scanCategories();
$categories = OC_Contacts_App::getCategories();
OCP\JSON::success(array('data' => array('categories'=>$categories)));
-
-?>
diff --git a/apps/contacts/ajax/chooseaddressbook.php b/apps/contacts/ajax/chooseaddressbook.php
deleted file mode 100644
index 9088a4e9d7d..00000000000
--- a/apps/contacts/ajax/chooseaddressbook.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Copyright (c) 2011 Thomas Tanghus <thomas@tanghus.net>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-
-OCP\JSON::checkLoggedIn();
-OCP\JSON::checkAppEnabled('contacts');
-
-$output = new OCP\Template("contacts", "part.chooseaddressbook");
-$output -> printpage();
diff --git a/apps/contacts/ajax/addcontact.php b/apps/contacts/ajax/contact/add.php
index d15ad8c6216..c7cec7d9461 100644
--- a/apps/contacts/ajax/addcontact.php
+++ b/apps/contacts/ajax/contact/add.php
@@ -20,14 +20,6 @@
*
*/
-// Init owncloud
-
-function bailOut($msg) {
- OCP\JSON::error(array('data' => array('message' => $msg)));
- OCP\Util::writeLog('contacts','ajax/addcontact.php: '.$msg, OCP\Util::DEBUG);
- exit();
-}
-
// Check if we are a user
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
@@ -45,14 +37,26 @@ $n = trim($_POST['n']);
$vcard = new OC_VObject('VCARD');
$vcard->setUID();
-$vcard->setString('FN',$fn);
-$vcard->setString('N',$n);
+$vcard->setString('FN', $fn);
+$vcard->setString('N', $n);
-$id = OC_Contacts_VCard::add($aid,$vcard, null, $isnew);
+$id = OC_Contacts_VCard::add($aid, $vcard, null, $isnew);
if(!$id) {
- OCP\JSON::error(array('data' => array('message' => OC_Contacts_App::$l10n->t('There was an error adding the contact.'))));
- OCP\Util::writeLog('contacts','ajax/addcontact.php: Recieved non-positive ID on adding card: '.$id, OCP\Util::ERROR);
+ OCP\JSON::error(array(
+ 'data' => array(
+ 'message' => OC_Contacts_App::$l10n->t('There was an error adding the contact.'))));
+ OCP\Util::writeLog('contacts', 'ajax/addcontact.php: Recieved non-positive ID on adding card: '.$id, OCP\Util::ERROR);
exit();
}
-OCP\JSON::success(array('data' => array( 'id' => $id )));
+$lastmodified = OC_Contacts_App::lastModified($vcard);
+if(!$lastmodified) {
+ $lastmodified = new DateTime();
+}
+OCP\JSON::success(array(
+ 'data' => array(
+ 'id' => $id,
+ 'aid' => $aid,
+ 'lastmodified' => $lastmodified->format('U')
+ )
+));
diff --git a/apps/contacts/ajax/addproperty.php b/apps/contacts/ajax/contact/addproperty.php
index be9e849be72..2b80ebd58bf 100644
--- a/apps/contacts/ajax/addproperty.php
+++ b/apps/contacts/ajax/contact/addproperty.php
@@ -20,19 +20,12 @@
*
*/
-// Init owncloud
-
-
// Check if we are a user
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
OCP\JSON::callCheck();
-function bailOut($msg) {
- OCP\JSON::error(array('data' => array('message' => $msg)));
- OCP\Util::writeLog('contacts','ajax/addproperty.php: '.$msg, OCP\Util::DEBUG);
- exit();
-}
+require_once __DIR__.'/../loghandler.php';
$id = isset($_POST['id'])?$_POST['id']:null;
$name = isset($_POST['name'])?$_POST['name']:null;
@@ -40,22 +33,27 @@ $value = isset($_POST['value'])?$_POST['value']:null;
$parameters = isset($_POST['parameters'])?$_POST['parameters']:array();
$vcard = OC_Contacts_App::getContactVCard($id);
+$l10n = OC_Contacts_App::$l10n;
if(!$name) {
- bailOut(OC_Contacts_App::$l10n->t('element name is not set.'));
+ bailOut($l10n->t('element name is not set.'));
}
if(!$id) {
- bailOut(OC_Contacts_App::$l10n->t('id is not set.'));
+ bailOut($l10n->t('id is not set.'));
}
if(!$vcard) {
- bailOut(OC_Contacts_App::$l10n->t('Could not parse contact: ').$id);
+ bailOut($l10n->t('Could not parse contact: ').$id);
}
-if(!is_array($value)){
+if(!is_array($value)) {
$value = trim($value);
- if(!$value && in_array($name, array('TEL', 'EMAIL', 'ORG', 'BDAY', 'URL', 'NICKNAME', 'NOTE'))) {
- bailOut(OC_Contacts_App::$l10n->t('Cannot add empty property.'));
+ if(!$value
+ && in_array(
+ $name,
+ array('TEL', 'EMAIL', 'ORG', 'BDAY', 'URL', 'NICKNAME', 'NOTE'))
+ ) {
+ bailOut($l10n->t('Cannot add empty property.'));
}
} elseif($name === 'ADR') { // only add if non-empty elements.
$empty = true;
@@ -66,7 +64,7 @@ if(!is_array($value)){
}
}
if($empty) {
- bailOut(OC_Contacts_App::$l10n->t('At least one of the address fields has to be filled out.'));
+ bailOut($l10n->t('At least one of the address fields has to be filled out.'));
}
}
@@ -75,12 +73,14 @@ $current = $vcard->select($name);
foreach($current as $item) {
$tmpvalue = (is_array($value)?implode(';', $value):$value);
if($tmpvalue == $item->value) {
- bailOut(OC_Contacts_App::$l10n->t('Trying to add duplicate property: '.$name.': '.$tmpvalue));
+ bailOut($l10n->t('Trying to add duplicate property: '.$name.': '.$tmpvalue));
}
}
if(is_array($value)) {
- ksort($value); // NOTE: Important, otherwise the compound value will be set in the order the fields appear in the form!
+ // NOTE: Important, otherwise the compound value will
+ // be set in the order the fields appear in the form!
+ ksort($value);
$value = array_map('strip_tags', $value);
} else {
$value = strip_tags($value);
@@ -108,7 +108,17 @@ switch($name) {
$value = strtolower($value);
break;
case 'TEL':
- case 'ADR': // should I delete the property if empty or throw an error?
+ case 'ADR':
+ break;
+ case 'IMPP':
+ if(is_null($parameters) || !isset($parameters['X-SERVICE-TYPE'])) {
+ bailOut(OC_Contacts_App::$l10n->t('Missing IM parameter.'));
+ }
+ $impp = OC_Contacts_App::getIMOptions($parameters['X-SERVICE-TYPE']);
+ if(is_null($impp)) {
+ bailOut(OC_Contacts_App::$l10n->t('Unknown IM: '.$parameters['X-SERVICE-TYPE']));
+ }
+ $value = $impp['protocol'] . ':' . $value;
break;
}
@@ -123,24 +133,36 @@ switch($name) {
$line = count($vcard->children) - 1;
-// Apparently Sabre_VObject_Parameter doesn't do well with multiple values or I don't know how to do it. Tanghus.
+// Apparently Sabre_VObject_Parameter doesn't do well with
+// multiple values or I don't know how to do it. Tanghus.
foreach ($parameters as $key=>$element) {
- if(is_array($element) && strtoupper($key) == 'TYPE') {
+ if(is_array($element) /*&& strtoupper($key) == 'TYPE'*/) {
// NOTE: Maybe this doesn't only apply for TYPE?
// And it probably shouldn't be done here anyways :-/
- foreach($element as $e){
- if($e != '' && !is_null($e)){
- $vcard->children[$line]->parameters[] = new Sabre_VObject_Parameter($key,$e);
+ foreach($element as $e) {
+ if($e != '' && !is_null($e)) {
+ if(trim($e)) {
+ $vcard->children[$line]->parameters[] = new Sabre_VObject_Parameter($key, $e);
+ }
}
}
} else {
- $vcard->children[$line]->parameters[] = new Sabre_VObject_Parameter($key,$element);
+ if(trim($element)) {
+ $vcard->children[$line]->parameters[] = new Sabre_VObject_Parameter($key, $element);
+ }
}
}
$checksum = md5($vcard->children[$line]->serialize());
-if(!OC_Contacts_VCard::edit($id,$vcard)) {
- bailOut(OC_Contacts_App::$l10n->t('Error adding contact property: '.$name));
+try {
+ OC_Contacts_VCard::edit($id, $vcard);
+} catch(Exception $e) {
+ bailOut($e->getMessage());
}
-OCP\JSON::success(array('data' => array( 'checksum' => $checksum )));
+OCP\JSON::success(array(
+ 'data' => array(
+ 'checksum' => $checksum,
+ 'lastmodified' => OC_Contacts_App::lastModified($vcard)->format('U'))
+ )
+);
diff --git a/apps/contacts/ajax/deletecard.php b/apps/contacts/ajax/contact/delete.php
index f998185be41..e73f34f898d 100644
--- a/apps/contacts/ajax/deletecard.php
+++ b/apps/contacts/ajax/contact/delete.php
@@ -4,6 +4,7 @@
*
* @author Jakob Sack
* @copyright 2011 Jakob Sack mail@jakobsack.de
+ * @copyright 2012 Thomas Tanghus (thomas@tanghus.net)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -19,25 +20,25 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
-function bailOut($msg) {
- OCP\JSON::error(array('data' => array('message' => $msg)));
- OCP\Util::writeLog('contacts','ajax/saveproperty.php: '.$msg, OCP\Util::DEBUG);
- exit();
-}
-
-// Init owncloud
-
-
// Check if we are a user
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
OCP\JSON::callCheck();
+require_once __DIR__.'/../loghandler.php';
+
$id = isset($_POST['id'])?$_POST['id']:null;
if(!$id) {
bailOut(OC_Contacts_App::$l10n->t('id is not set.'));
}
-$card = OC_Contacts_App::getContactObject( $id );
-OC_Contacts_VCard::delete($id);
+try {
+ OC_Contacts_VCard::delete($id);
+} catch(Exception $e) {
+ $msg = $e->getMessage();
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '.$msg,
+ OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts', __METHOD__.', id'.$id, OCP\Util::DEBUG);
+ bailOut($msg);
+}
OCP\JSON::success(array('data' => array( 'id' => $id )));
diff --git a/apps/contacts/ajax/deleteproperty.php b/apps/contacts/ajax/contact/deleteproperty.php
index 95fd43e0d95..b76b6e55ede 100644
--- a/apps/contacts/ajax/deleteproperty.php
+++ b/apps/contacts/ajax/contact/deleteproperty.php
@@ -20,30 +20,35 @@
*
*/
-// Init owncloud
-
-
// Check if we are a user
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
OCP\JSON::callCheck();
+require_once __DIR__.'/../loghandler.php';
+
$id = $_POST['id'];
$checksum = $_POST['checksum'];
+$l10n = OC_Contacts_App::$l10n;
$vcard = OC_Contacts_App::getContactVCard( $id );
$line = OC_Contacts_App::getPropertyLineByChecksum($vcard, $checksum);
-if(is_null($line)){
- OCP\JSON::error(array('data' => array( 'message' => OC_Contacts_App::$l10n->t('Information about vCard is incorrect. Please reload the page.'))));
+if(is_null($line)) {
+ bailOut($l10n->t('Information about vCard is incorrect. Please reload the page.'));
exit();
}
unset($vcard->children[$line]);
-if(!OC_Contacts_VCard::edit($id,$vcard)) {
- OCP\JSON::error(array('data' => array('message' => OC_Contacts_App::$l10n->t('Error deleting contact property.'))));
- OCP\Util::writeLog('contacts','ajax/deleteproperty.php: Error deleting contact property', OCP\Util::ERROR);
- exit();
+try {
+ OC_Contacts_VCard::edit($id, $vcard);
+} catch(Exception $e) {
+ bailOut($e->getMessage());
}
-OCP\JSON::success(array('data' => array( 'id' => $id )));
+OCP\JSON::success(array(
+ 'data' => array(
+ 'id' => $id,
+ 'lastmodified' => OC_Contacts_App::lastModified($vcard)->format('U'),
+ )
+));
diff --git a/apps/contacts/ajax/contactdetails.php b/apps/contacts/ajax/contact/details.php
index 657dc5d586c..5bf337e645e 100644
--- a/apps/contacts/ajax/contactdetails.php
+++ b/apps/contacts/ajax/contact/details.php
@@ -20,13 +20,7 @@
*
*/
-// Init owncloud
-
-function bailOut($msg) {
- OCP\JSON::error(array('data' => array('message' => $msg)));
- OCP\Util::writeLog('contacts','ajax/contactdetails.php: '.$msg, OCP\Util::DEBUG);
- exit();
-}
+require_once __DIR__.'/../loghandler.php';
// Check if we are a user
OCP\JSON::checkLoggedIn();
@@ -36,24 +30,13 @@ $id = isset($_GET['id'])?$_GET['id']:null;
if(is_null($id)) {
bailOut(OC_Contacts_App::$l10n->t('Missing ID'));
}
-$vcard = OC_Contacts_App::getContactVCard( $id );
+$card = OC_Contacts_VCard::find($id);
+$vcard = OC_VObject::parse($card['carddata']);
if(is_null($vcard)) {
bailOut(OC_Contacts_App::$l10n->t('Error parsing VCard for ID: "'.$id.'"'));
}
$details = OC_Contacts_VCard::structureContact($vcard);
-// Some Google exported files have no FN field.
-/*if(!isset($details['FN'])) {
- $fn = '';
- if(isset($details['N'])) {
- $details['FN'] = array(implode(' ', $details['N'][0]['value']));
- } elseif(isset($details['EMAIL'])) {
- $details['FN'] = array('value' => $details['EMAIL'][0]['value']);
- } else {
- $details['FN'] = array('value' => OC_Contacts_App::$l10n->t('Unknown'));
- }
-}*/
-
// Make up for not supporting the 'N' field in earlier version.
if(!isset($details['N'])) {
$details['N'] = array();
@@ -67,6 +50,13 @@ if(isset($details['PHOTO'])) {
} else {
$details['PHOTO'] = false;
}
+$lastmodified = OC_Contacts_App::lastModified($vcard);
+if(!$lastmodified) {
+ $lastmodified = new DateTime();
+}
$details['id'] = $id;
+$details['displayname'] = $card['fullname'];
+$details['addressbookid'] = $card['addressbookid'];
+$details['lastmodified'] = $lastmodified->format('U');
OC_Contacts_App::setLastModifiedHeader($vcard);
OCP\JSON::success(array('data' => $details));
diff --git a/apps/contacts/ajax/contact/list.php b/apps/contacts/ajax/contact/list.php
new file mode 100644
index 00000000000..4e2509d8d5a
--- /dev/null
+++ b/apps/contacts/ajax/contact/list.php
@@ -0,0 +1,97 @@
+<?php
+/**
+ * Copyright (c) 2011 Thomas Tanghus <thomas@tanghus.net>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+function cmp($a, $b)
+{
+ if ($a['displayname'] == $b['displayname']) {
+ return 0;
+ }
+ return ($a['displayname'] < $b['displayname']) ? -1 : 1;
+}
+
+OCP\JSON::checkLoggedIn();
+OCP\JSON::checkAppEnabled('contacts');
+
+$start = isset($_GET['startat'])?$_GET['startat']:0;
+$aid = isset($_GET['aid'])?$_GET['aid']:null;
+
+if(is_null($aid)) {
+ // Called initially to get the active addressbooks.
+ $active_addressbooks = OC_Contacts_Addressbook::active(OCP\USER::getUser());
+} else {
+ // called each time more contacts has to be shown.
+ $active_addressbooks = array(OC_Contacts_Addressbook::find($aid));
+}
+
+
+session_write_close();
+
+// create the addressbook associate array
+$contacts_addressbook = array();
+$ids = array();
+foreach($active_addressbooks as $addressbook) {
+ $ids[] = $addressbook['id'];
+ if(!isset($contacts_addressbook[$addressbook['id']])) {
+ $contacts_addressbook[$addressbook['id']]
+ = array('contacts' => array('type' => 'book',));
+ $contacts_addressbook[$addressbook['id']]['displayname']
+ = $addressbook['displayname'];
+ $contacts_addressbook[$addressbook['id']]['permissions']
+ = isset($addressbook['permissions'])
+ ? $addressbook['permissions']
+ : '0';
+ }
+}
+
+$contacts_alphabet = array();
+
+// get next 50 for each addressbook.
+foreach($ids as $id) {
+ if($id) {
+ $contacts_alphabet = array_merge(
+ $contacts_alphabet,
+ OC_Contacts_VCard::all($id, $start, 50)
+ );
+ }
+}
+// Our new array for the contacts sorted by addressbook
+if($contacts_alphabet) {
+ foreach($contacts_alphabet as $contact) {
+ // This should never execute.
+ if(!isset($contacts_addressbook[$contact['addressbookid']])) {
+ $contacts_addressbook[$contact['addressbookid']] = array(
+ 'contacts' => array('type' => 'book',)
+ );
+ }
+ $display = trim($contact['fullname']);
+ if(!$display) {
+ $vcard = OC_Contacts_App::getContactVCard($contact['id']);
+ if(!is_null($vcard)) {
+ $struct = OC_Contacts_VCard::structureContact($vcard);
+ $display = isset($struct['EMAIL'][0])
+ ? $struct['EMAIL'][0]['value']
+ : '[UNKNOWN]';
+ }
+ }
+ $contacts_addressbook[$contact['addressbookid']]['contacts'][] = array(
+ 'type' => 'contact',
+ 'id' => $contact['id'],
+ 'addressbookid' => $contact['addressbookid'],
+ 'displayname' => htmlspecialchars($display),
+ 'permissions' =>
+ isset($contacts_addressbook[$contact['addressbookid']]['permissions'])
+ ? $contacts_addressbook[$contact['addressbookid']]['permissions']
+ : '0',
+ );
+ }
+}
+unset($contacts_alphabet);
+uasort($contacts_addressbook, 'cmp');
+
+OCP\JSON::success(array('data' => array('entries' => $contacts_addressbook)));
+
diff --git a/apps/contacts/ajax/contact/move.php b/apps/contacts/ajax/contact/move.php
new file mode 100644
index 00000000000..053343c47ed
--- /dev/null
+++ b/apps/contacts/ajax/contact/move.php
@@ -0,0 +1,29 @@
+<?php
+/**
+* @author Victor Dubiniuk
+* Copyright (c) 2012 Victor Dubiniuk <victor.dubiniuk@gmail.com>
+* Copyright (c) 2012 Thomas Tanghus <thomas@tanghus.net>
+* This file is licensed under the Affero General Public License version 3 or
+* later.
+* See the COPYING-README file.
+*/
+
+OCP\JSON::checkLoggedIn();
+OCP\JSON::checkAppEnabled('contacts');
+OCP\JSON::callCheck();
+
+$id = intval($_POST['id']);
+$aid = intval($_POST['aid']);
+$isaddressbook = isset($_POST['isaddressbook']) ? true: false;
+
+// Ownership checking
+OC_Contacts_App::getAddressbook($aid);
+try {
+ OC_Contacts_VCard::moveToAddressBook($aid, $id, $isaddressbook);
+} catch (Exception $e) {
+ $msg = $e->getMessage();
+ OCP\Util::writeLog('contacts', 'Error moving contacts "'.implode(',', $id).'" to addressbook "'.$aid.'"'.$msg, OCP\Util::ERROR);
+ OC_JSON::error(array('data' => array('message' => $msg,)));
+}
+
+OC_JSON::success(array('data' => array('ids' => $id,))); \ No newline at end of file
diff --git a/apps/contacts/ajax/saveproperty.php b/apps/contacts/ajax/contact/saveproperty.php
index a27b5489ce6..7ae183538b6 100644
--- a/apps/contacts/ajax/saveproperty.php
+++ b/apps/contacts/ajax/contact/saveproperty.php
@@ -20,37 +20,17 @@
*
*/
-// Init owncloud
-
+require_once __DIR__.'/../loghandler.php';
// Check if we are a user
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
OCP\JSON::callCheck();
-
-function bailOut($msg) {
- OCP\JSON::error(array('data' => array('message' => $msg)));
- OCP\Util::writeLog('contacts','ajax/saveproperty.php: '.$msg, OCP\Util::DEBUG);
- exit();
-}
-function debug($msg) {
- OCP\Util::writeLog('contacts','ajax/saveproperty.php: '.$msg, OCP\Util::DEBUG);
-}
-// foreach ($_POST as $key=>$element) {
-// debug('_POST: '.$key.'=>'.print_r($element, true));
-// }
-
$id = isset($_POST['id'])?$_POST['id']:null;
$name = isset($_POST['name'])?$_POST['name']:null;
$value = isset($_POST['value'])?$_POST['value']:null;
$parameters = isset($_POST['parameters'])?$_POST['parameters']:null;
$checksum = isset($_POST['checksum'])?$_POST['checksum']:null;
-// if(!is_null($parameters)) {
-// debug('parameters: '.count($parameters));
-// foreach($parameters as $key=>$val ) {
-// debug('parameter: '.$key.'=>'.implode('/',$val));
-// }
-// }
if(!$name) {
bailOut(OC_Contacts_App::$l10n->t('element name is not set.'));
@@ -61,9 +41,11 @@ if(!$id) {
if(!$checksum) {
bailOut(OC_Contacts_App::$l10n->t('checksum is not set.'));
}
-if(is_array($value)){
+if(is_array($value)) {
$value = array_map('strip_tags', $value);
- ksort($value); // NOTE: Important, otherwise the compound value will be set in the order the fields appear in the form!
+ // NOTE: Important, otherwise the compound value will be
+ // set in the order the fields appear in the form!
+ ksort($value);
//if($name == 'CATEGORIES') {
// $value = OC_Contacts_VCard::escapeDelimiters($value, ',');
//} else {
@@ -76,19 +58,22 @@ if(is_array($value)){
$vcard = OC_Contacts_App::getContactVCard( $id );
$line = OC_Contacts_App::getPropertyLineByChecksum($vcard, $checksum);
if(is_null($line)) {
- bailOut(OC_Contacts_App::$l10n->t('Information about vCard is incorrect. Please reload the page: ').$checksum);
+ bailOut(OC_Contacts_App::$l10n->t(
+ 'Information about vCard is incorrect. Please reload the page: ').$checksum
+ );
}
$element = $vcard->children[$line]->name;
if($element != $name) {
- bailOut(OC_Contacts_App::$l10n->t('Something went FUBAR. ').$name.' != '.$element);
+ bailOut(OC_Contacts_App::$l10n->t(
+ 'Something went FUBAR. ').$name.' != '.$element
+ );
}
/* preprocessing value */
switch($element) {
case 'BDAY':
$date = New DateTime($value);
- //$vcard->setDateTime('BDAY', $date, Sabre_VObject_Element_DateTime::DATE);
$value = $date->format('Y-m-d');
break;
case 'FN':
@@ -103,6 +88,16 @@ switch($element) {
case 'EMAIL':
$value = strtolower($value);
break;
+ case 'IMPP':
+ if(is_null($parameters) || !isset($parameters['X-SERVICE-TYPE'])) {
+ bailOut(OC_Contacts_App::$l10n->t('Missing IM parameter.'));
+ }
+ $impp = OC_Contacts_App::getIMOptions($parameters['X-SERVICE-TYPE']);
+ if(is_null($impp)) {
+ bailOut(OC_Contacts_App::$l10n->t('Unknown IM: '.$parameters['X-SERVICE-TYPE']));
+ }
+ $value = $impp['protocol'] . ':' . $value;
+ break;
}
if(!$value) {
@@ -112,28 +107,23 @@ if(!$value) {
/* setting value */
switch($element) {
case 'BDAY':
- // I don't use setDateTime() because that formats it as YYYYMMDD instead of YYYY-MM-DD
- // which is what the RFC recommends.
+ // I don't use setDateTime() because that formats it as YYYYMMDD instead
+ // of YYYY-MM-DD which is what the RFC recommends.
$vcard->children[$line]->setValue($value);
$vcard->children[$line]->parameters = array();
- $vcard->children[$line]->add(new Sabre_VObject_Parameter('VALUE', 'DATE'));
+ $vcard->children[$line]->add(
+ new Sabre_VObject_Parameter('VALUE', 'DATE')
+ );
debug('Setting value:'.$name.' '.$vcard->children[$line]);
break;
- case 'FN':
- case 'N':
- case 'ORG':
- case 'NOTE':
- case 'NICKNAME':
- debug('Setting string:'.$name.' '.$value);
- $vcard->setString($name, $value);
- break;
case 'CATEGORIES':
debug('Setting string:'.$name.' '.$value);
$vcard->children[$line]->setValue($value);
break;
case 'EMAIL':
case 'TEL':
- case 'ADR': // should I delete the property if empty or throw an error?
+ case 'ADR':
+ case 'IMPP':
debug('Setting element: (EMAIL/TEL/ADR)'.$element);
$vcard->children[$line]->setValue($value);
$vcard->children[$line]->parameters = array();
@@ -141,22 +131,46 @@ if(!$value) {
debug('Setting parameters: '.$parameters);
foreach($parameters as $key => $parameter) {
debug('Adding parameter: '.$key);
- foreach($parameter as $val) {
- debug('Adding parameter: '.$key.'=>'.$val);
- $vcard->children[$line]->add(new Sabre_VObject_Parameter($key, strtoupper(strip_tags($val))));
+ if(is_array($parameter)) {
+ foreach($parameter as $val) {
+ if(trim($val)) {
+ debug('Adding parameter: '.$key.'=>'.$val);
+ $vcard->children[$line]->add(new Sabre_VObject_Parameter(
+ $key,
+ strtoupper(strip_tags($val)))
+ );
+ }
+ }
+ } else {
+ if(trim($parameter)) {
+ $vcard->children[$line]->add(new Sabre_VObject_Parameter(
+ $key,
+ strtoupper(strip_tags($parameter)))
+ );
+ }
}
}
}
break;
+ default:
+ debug('Setting string:'.$name.' '.$value);
+ $vcard->setString($name, $value);
+ break;
}
// Do checksum and be happy
$checksum = md5($vcard->children[$line]->serialize());
}
//debug('New checksum: '.$checksum);
-if(!OC_Contacts_VCard::edit($id,$vcard)) {
- bailOut(OC_Contacts_App::$l10n->t('Error updating contact property.'));
- exit();
+try {
+ OC_Contacts_VCard::edit($id, $vcard);
+} catch(Exception $e) {
+ bailOut($e->getMessage());
}
-OCP\JSON::success(array('data' => array( 'line' => $line, 'checksum' => $checksum, 'oldchecksum' => $_POST['checksum'] )));
+OCP\JSON::success(array('data' => array(
+ 'line' => $line,
+ 'checksum' => $checksum,
+ 'oldchecksum' => $_POST['checksum'],
+ 'lastmodified' => OC_Contacts_App::lastModified($vcard)->format('U'),
+)));
diff --git a/apps/contacts/ajax/contacts.php b/apps/contacts/ajax/contacts.php
deleted file mode 100644
index 45c54f90bce..00000000000
--- a/apps/contacts/ajax/contacts.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Copyright (c) 2011 Thomas Tanghus <thomas@tanghus.net>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-
-OCP\JSON::checkLoggedIn();
-OCP\JSON::checkAppEnabled('contacts');
-
-$ids = OC_Contacts_Addressbook::activeIds(OCP\USER::getUser());
-$allcontacts = OC_Contacts_VCard::all($ids);
-$contacts = array();
-foreach($allcontacts as $contact) { // try to conserve some memory
- $contacts[] = array('id' => $contact['id'], 'addressbookid' => $contact['addressbookid'], 'fullname' => $contact['fullname']);
-}
-unset($allcontacts);
-$addressbooks = OC_Contacts_Addressbook::active(OCP\USER::getUser());
-
-$tmpl = new OCP\Template("contacts", "part.contacts");
-$tmpl->assign('contacts', $contacts);
-$page = $tmpl->fetchPage();
-
-OCP\JSON::success(array('data' => array( 'page' => $page )));
-?>
diff --git a/apps/contacts/ajax/createaddressbook.php b/apps/contacts/ajax/createaddressbook.php
deleted file mode 100644
index 616766bb1a0..00000000000
--- a/apps/contacts/ajax/createaddressbook.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-/**
- * Copyright (c) 2011-2012 Thomas Tanghus <thomas@tanghus.net>
- * Copyright (c) 2011 Bart Visscher <bartv@thisnet.nl>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-
-// Check if we are a user
-OCP\JSON::checkLoggedIn();
-OCP\JSON::checkAppEnabled('contacts');
-OCP\JSON::callCheck();
-
-$userid = OCP\USER::getUser();
-$name = trim(strip_tags($_POST['name']));
-if(!$name) {
- OCP\JSON::error(array('data' => array('message' => OC_Contacts_App::$l10n->t('Cannot add addressbook with an empty name.'))));
- OCP\Util::writeLog('contacts','ajax/createaddressbook.php: Cannot add addressbook with an empty name: '.strip_tags($_POST['name']), OCP\Util::ERROR);
- exit();
-}
-$bookid = OC_Contacts_Addressbook::add($userid, $name, null);
-if(!$bookid) {
- OCP\JSON::error(array('data' => array('message' => OC_Contacts_App::$l10n->t('Error adding addressbook.'))));
- OCP\Util::writeLog('contacts','ajax/createaddressbook.php: Error adding addressbook: '.$_POST['name'], OCP\Util::ERROR);
- exit();
-}
-
-if(!OC_Contacts_Addressbook::setActive($bookid, 1)) {
- OCP\JSON::error(array('data' => array('message' => OC_Contacts_App::$l10n->t('Error activating addressbook.'))));
- OCP\Util::writeLog('contacts','ajax/createaddressbook.php: Error activating addressbook: '.$bookid, OCP\Util::ERROR);
- //exit();
-}
-$addressbook = OC_Contacts_App::getAddressbook($bookid);
-$tmpl = new OCP\Template('contacts', 'part.chooseaddressbook.rowfields');
-$tmpl->assign('addressbook', $addressbook);
-OCP\JSON::success(array(
- 'page' => $tmpl->fetchPage(),
- 'addressbook' => $addressbook,
-));
diff --git a/apps/contacts/ajax/cropphoto.php b/apps/contacts/ajax/cropphoto.php
index 7006c6fc1ff..eb9f1fcdb5d 100644
--- a/apps/contacts/ajax/cropphoto.php
+++ b/apps/contacts/ajax/cropphoto.php
@@ -20,19 +20,15 @@
*
*/
-// Init owncloud
-
-
// Check if we are a user
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
-$tmp_path = strip_tags($_GET['tmp_path']);
-$requesttoken = strip_tags($_GET['requesttoken']);
+$tmpkey = $_GET['tmpkey'];
+$requesttoken = $_GET['requesttoken'];
$id = $_GET['id'];
-OCP\Util::writeLog('contacts','ajax/cropphoto.php: tmp_path: '.$tmp_path.', exists: '.file_exists($tmp_path), OCP\Util::DEBUG);
$tmpl = new OCP\Template("contacts", "part.cropphoto");
-$tmpl->assign('tmp_path', $tmp_path);
+$tmpl->assign('tmpkey', $tmpkey);
$tmpl->assign('id', $id);
$tmpl->assign('requesttoken', $requesttoken);
$page = $tmpl->fetchPage();
diff --git a/apps/contacts/ajax/currentphoto.php b/apps/contacts/ajax/currentphoto.php
index d0654b17d64..96080e661ef 100644
--- a/apps/contacts/ajax/currentphoto.php
+++ b/apps/contacts/ajax/currentphoto.php
@@ -19,43 +19,30 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
-// Init owncloud
-//require_once('../../../lib/base.php');
-// Check if we are a user
// Firefox and Konqueror tries to download application/json for me. --Arthur
OCP\JSON::setContentTypeHeader('text/plain');
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
-function bailOut($msg) {
- OCP\JSON::error(array('data' => array('message' => $msg)));
- OCP\Util::writeLog('contacts','ajax/currentphoto.php: '.$msg, OCP\Util::ERROR);
- exit();
-}
-function debug($msg) {
- OCP\Util::writeLog('contacts','ajax/currentphoto.php: '.$msg, OCP\Util::DEBUG);
-}
+require_once 'loghandler.php';
if (!isset($_GET['id'])) {
bailOut(OC_Contacts_App::$l10n->t('No contact ID was submitted.'));
}
-$tmpfname = tempnam(get_temp_dir(), "occOrig");
$contact = OC_Contacts_App::getContactVCard($_GET['id']);
-$image = new OC_Image();
-if(!$image) {
- bailOut(OC_Contacts_App::$l10n->t('Error loading image.'));
-}
// invalid vcard
if( is_null($contact)) {
bailOut(OC_Contacts_App::$l10n->t('Error reading contact photo.'));
} else {
+ $image = new OC_Image();
if(!$image->loadFromBase64($contact->getAsString('PHOTO'))) {
$image->loadFromBase64($contact->getAsString('LOGO'));
}
if($image->valid()) {
- if($image->save($tmpfname)) {
- OCP\JSON::success(array('data' => array('id'=>$_GET['id'], 'tmp'=>$tmpfname)));
+ $tmpkey = 'contact-photo-'.$contact->getAsString('UID');
+ if(OC_Cache::set($tmpkey, $image->data(), 600)) {
+ OCP\JSON::success(array('data' => array('id'=>$_GET['id'], 'tmp'=>$tmpkey)));
exit();
} else {
bailOut(OC_Contacts_App::$l10n->t('Error saving temporary file.'));
@@ -64,5 +51,3 @@ if( is_null($contact)) {
bailOut(OC_Contacts_App::$l10n->t('The loading photo is not valid.'));
}
}
-
-?>
diff --git a/apps/contacts/ajax/editaddress.php b/apps/contacts/ajax/editaddress.php
index 9fb35a0b5f7..b5e4b72ed57 100644
--- a/apps/contacts/ajax/editaddress.php
+++ b/apps/contacts/ajax/editaddress.php
@@ -20,12 +20,22 @@ if($checksum) {
$line = OC_Contacts_App::getPropertyLineByChecksum($vcard, $checksum);
$element = $vcard->children[$line];
$adr = OC_Contacts_VCard::structureProperty($element);
- $tmpl->assign('adr',$adr);
+ $types = array();
+ if(isset($adr['parameters']['TYPE'])) {
+ if(is_array($adr['parameters']['TYPE'])) {
+ $types = array_map('htmlspecialchars', $adr['parameters']['TYPE']);
+ $types = array_map('strtoupper', $types);
+ } else {
+ $types = array(strtoupper(htmlspecialchars($adr['parameters']['TYPE'])));
+ }
+ }
+ $tmpl->assign('types', $types, false);
+ $adr = array_map('htmlspecialchars', $adr['value']);
+ $tmpl->assign('adr', $adr, false);
}
-$tmpl->assign('id',$id);
-$tmpl->assign('adr_types',$adr_types);
+$tmpl->assign('id', $id);
+$tmpl->assign('adr_types', $adr_types);
-$tmpl->printpage();
-
-?>
+$page = $tmpl->fetchPage();
+OCP\JSON::success(array('data' => array('page'=>$page, 'checksum'=>$checksum)));
diff --git a/apps/contacts/ajax/editaddressbook.php b/apps/contacts/ajax/editaddressbook.php
deleted file mode 100644
index 7a9b757ae0d..00000000000
--- a/apps/contacts/ajax/editaddressbook.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Copyright (c) 2011 Bart Visscher <bartv@thisnet.nl>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-
-OCP\JSON::checkLoggedIn();
-OCP\JSON::checkAppEnabled('contacts');
-$addressbook = OC_Contacts_App::getAddressbook($_GET['bookid']);
-$tmpl = new OCP\Template("contacts", "part.editaddressbook");
-$tmpl->assign('new', false);
-$tmpl->assign('addressbook', $addressbook);
-$tmpl->printPage();
-?>
diff --git a/apps/contacts/ajax/editname.php b/apps/contacts/ajax/editname.php
index dc64eeb5101..eb55634011d 100644
--- a/apps/contacts/ajax/editname.php
+++ b/apps/contacts/ajax/editname.php
@@ -9,19 +9,12 @@
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
-function bailOut($msg) {
- OCP\JSON::error(array('data' => array('message' => $msg)));
- OCP\Util::writeLog('contacts','ajax/editname.php: '.$msg, OCP\Util::DEBUG);
- exit();
-}
-function debug($msg) {
- OCP\Util::writeLog('contacts','ajax/editname.php: '.$msg, OCP\Util::DEBUG);
-}
+require_once 'loghandler.php';
$tmpl = new OCP\Template("contacts", "part.edit_name_dialog");
$id = isset($_GET['id'])?$_GET['id']:'';
-debug('id: '.$id);
+
if($id) {
$vcard = OC_Contacts_App::getContactVCard($id);
$name = array('', '', '', '', '');
@@ -31,13 +24,11 @@ if($id) {
$name = OC_Contacts_VCard::structureProperty($property);
}
}
- $tmpl->assign('name',$name);
- $tmpl->assign('id',$id);
+ $name = array_map('htmlspecialchars', $name['value']);
+ $tmpl->assign('name', $name, false);
+ $tmpl->assign('id', $id, false);
} else {
bailOut(OC_Contacts_App::$l10n->t('Contact ID is missing.'));
- //$addressbooks = OC_Contacts_Addressbook::active(OCP\USER::getUser());
- //$tmpl->assign('addressbooks', $addressbooks);
}
-$tmpl->printpage();
-
-?>
+$page = $tmpl->fetchPage();
+OCP\JSON::success(array('data' => array('page'=>$page)));
diff --git a/apps/contacts/ajax/importaddressbook.php b/apps/contacts/ajax/importaddressbook.php
deleted file mode 100644
index 3c01e24a185..00000000000
--- a/apps/contacts/ajax/importaddressbook.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-/**
- * Copyright (c) 2012 Georg Ehrke <ownclouddev at georgswebsite dot de>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-OCP\JSON::checkLoggedIn();
-OCP\App::checkAppEnabled('contacts');
-$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('/');
-$freeSpace=max($freeSpace,0);
-$maxUploadFilesize = min($maxUploadFilesize ,$freeSpace);
-
-$tmpl = new OCP\Template('contacts', 'part.importaddressbook');
-$tmpl->assign('uploadMaxFilesize', $maxUploadFilesize);
-$tmpl->assign('requesttoken', $_SERVER['HTTP_REQUESTTOKEN']);
-$tmpl->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize));
-$tmpl->printpage();
-?>
diff --git a/apps/contacts/ajax/importdialog.php b/apps/contacts/ajax/importdialog.php
index 5f8805a6106..691522538fb 100644
--- a/apps/contacts/ajax/importdialog.php
+++ b/apps/contacts/ajax/importdialog.php
@@ -13,4 +13,3 @@ $tmpl = new OCP\Template('contacts', 'part.import');
$tmpl->assign('path', $_POST['path']);
$tmpl->assign('filename', $_POST['filename']);
$tmpl->printpage();
-?>
diff --git a/apps/contacts/ajax/loadcard.php b/apps/contacts/ajax/loadcard.php
index 09b6bbe0cf9..82501ffd2ff 100644
--- a/apps/contacts/ajax/loadcard.php
+++ b/apps/contacts/ajax/loadcard.php
@@ -20,20 +20,6 @@
*
*/
-// Init owncloud
-
-function bailOut($msg) {
- OCP\JSON::error(array('data' => array('message' => $msg)));
- OCP\Util::writeLog('contacts','ajax/loadcard.php: '.$msg, OCP\Util::DEBUG);
- exit();
-}
-function debug($msg) {
- OCP\Util::writeLog('contacts','ajax/loadcard.php: '.$msg, OCP\Util::DEBUG);
-}
-// foreach ($_POST as $key=>$element) {
-// debug('_POST: '.$key.'=>'.$element);
-// }
-
// Check if we are a user
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
@@ -41,22 +27,32 @@ OCP\JSON::checkAppEnabled('contacts');
$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);
+$requesttoken = $_GET['requesttoken'];
$freeSpace=OC_Filesystem::free_space('/');
-$freeSpace=max($freeSpace,0);
-$maxUploadFilesize = min($maxUploadFilesize ,$freeSpace);
+$freeSpace=max($freeSpace, 0);
+$maxUploadFilesize = min($maxUploadFilesize, $freeSpace);
$adr_types = OC_Contacts_App::getTypesOfProperty('ADR');
$phone_types = OC_Contacts_App::getTypesOfProperty('TEL');
$email_types = OC_Contacts_App::getTypesOfProperty('EMAIL');
+$impp_types = OC_Contacts_App::getTypesOfProperty('IMPP');
+$ims = OC_Contacts_App::getIMOptions();
+$im_protocols = array();
+foreach($ims as $name => $values) {
+ $im_protocols[$name] = $values['displayname'];
+}
-$tmpl = new OCP\Template('contacts','part.contact');
+$tmpl = new OCP\Template('contacts', 'part.contact');
$tmpl->assign('uploadMaxFilesize', $maxUploadFilesize);
$tmpl->assign('requesttoken', $_SERVER['HTTP_REQUESTTOKEN']);
$tmpl->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize));
-$tmpl->assign('adr_types',$adr_types);
-$tmpl->assign('phone_types',$phone_types);
-$tmpl->assign('email_types',$email_types);
-$tmpl->assign('id','');
+$tmpl->assign('adr_types', $adr_types);
+$tmpl->assign('phone_types', $phone_types);
+$tmpl->assign('email_types', $email_types);
+$tmpl->assign('impp_types', $impp_types, false);
+$tmpl->assign('im_protocols', $im_protocols, false);
+$tmpl->assign('requesttoken', $requesttoken);
+$tmpl->assign('id', '');
$page = $tmpl->fetchPage();
OCP\JSON::success(array('data' => array( 'page' => $page )));
diff --git a/apps/contacts/ajax/loadintro.php b/apps/contacts/ajax/loadintro.php
index 6e8fcc4b049..1da08950ca0 100644
--- a/apps/contacts/ajax/loadintro.php
+++ b/apps/contacts/ajax/loadintro.php
@@ -25,7 +25,7 @@ OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
-$tmpl = new OCP\Template('contacts','part.no_contacts');
+$tmpl = new OCP\Template('contacts', 'part.no_contacts');
$page = $tmpl->fetchPage();
OCP\JSON::success(array('data' => array( 'page' => $page )));
diff --git a/apps/contacts/ajax/loadphoto.php b/apps/contacts/ajax/loadphoto.php
deleted file mode 100644
index ef429e82891..00000000000
--- a/apps/contacts/ajax/loadphoto.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-/**
- * ownCloud - Addressbook
- *
- * @author Thomas Tanghus
- * @copyright 2012 Thomas Tanghus <thomas@tanghus.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/>.
- *
- */
-// Init owncloud
-
-// Check if we are a user
-OCP\JSON::checkLoggedIn();
-OCP\JSON::checkAppEnabled('contacts');
-
-// foreach ($_POST as $key=>$element) {
-// OCP\Util::writeLog('contacts','ajax/savecrop.php: '.$key.'=>'.$element, OCP\Util::DEBUG);
-// }
-
-function bailOut($msg) {
- OCP\JSON::error(array('data' => array('message' => $msg)));
- OCP\Util::writeLog('contacts','ajax/loadphoto.php: '.$msg, OCP\Util::DEBUG);
- exit();
-}
-
-$image = null;
-
-$id = isset($_GET['id']) ? $_GET['id'] : '';
-$refresh = isset($_GET['refresh']) ? true : false;
-
-if($id == '') {
- bailOut(OC_Contacts_App::$l10n->t('Missing contact id.'));
-}
-
-$checksum = '';
-$vcard = OC_Contacts_App::getContactVCard( $id );
-foreach($vcard->children as $property){
- if($property->name == 'PHOTO') {
- $checksum = md5($property->serialize());
- break;
- }
-}
-
-$tmpl = new OCP\Template("contacts", "part.contactphoto");
-$tmpl->assign('id', $id);
-if($refresh) {
- $tmpl->assign('refresh', 1);
-}
-$page = $tmpl->fetchPage();
-OCP\JSON::success(array('data' => array('page'=>$page, 'checksum'=>$checksum)));
-?>
diff --git a/apps/contacts/ajax/loghandler.php b/apps/contacts/ajax/loghandler.php
new file mode 100644
index 00000000000..be4b98c1112
--- /dev/null
+++ b/apps/contacts/ajax/loghandler.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * ownCloud - Addressbook
+ *
+ * @author Thomas Tanghus
+ * @copyright 2012 Thomas Tanghus <thomas@tanghus.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/>.
+ *
+ */
+
+function bailOut($msg, $tracelevel=1, $debuglevel=OCP\Util::ERROR)
+{
+ OCP\JSON::error(array('data' => array('message' => $msg)));
+ debug($msg, $tracelevel, $debuglevel);
+ exit();
+}
+
+function debug($msg, $tracelevel=0, $debuglevel=OCP\Util::DEBUG)
+{
+ if(PHP_VERSION >= "5.4") {
+ $call = debug_backtrace(false, $tracelevel+1);
+ } else {
+ $call = debug_backtrace(false);
+ }
+ error_log('trace: '.print_r($call, true));
+ $call = $call[$tracelevel];
+ if($debuglevel !== false) {
+ OCP\Util::writeLog('contacts',
+ $call['file'].'. Line: '.$call['line'].': '.$msg,
+ $debuglevel);
+ }
+}
diff --git a/apps/contacts/ajax/oc_photo.php b/apps/contacts/ajax/oc_photo.php
index 903d2aedfbe..fe37b530f82 100644
--- a/apps/contacts/ajax/oc_photo.php
+++ b/apps/contacts/ajax/oc_photo.php
@@ -20,19 +20,9 @@
*
*/
// Check if we are a user
-// Firefox and Konqueror tries to download application/json for me. --Arthur
-OCP\JSON::setContentTypeHeader('text/plain');
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
-OCP\JSON::callCheck();
-function bailOut($msg) {
- OCP\JSON::error(array('data' => array('message' => $msg)));
- OCP\Util::writeLog('contacts','ajax/oc_photo.php: '.$msg, OCP\Util::ERROR);
- exit();
-}
-function debug($msg) {
- OCP\Util::writeLog('contacts','ajax/oc_photo.php: '.$msg, OCP\Util::DEBUG);
-}
+require_once 'loghandler.php';
if(!isset($_GET['id'])) {
bailOut(OC_Contacts_App::$l10n->t('No contact ID was submitted.'));
@@ -43,31 +33,30 @@ if(!isset($_GET['path'])) {
}
$localpath = OC_Filesystem::getLocalFile($_GET['path']);
-$tmpfname = tempnam(get_temp_dir(), "occOrig");
+$tmpkey = 'contact-photo-'.$_GET['id'];
if(!file_exists($localpath)) {
bailOut(OC_Contacts_App::$l10n->t('File doesn\'t exist:').$localpath);
}
-file_put_contents($tmpfname, file_get_contents($localpath));
$image = new OC_Image();
if(!$image) {
bailOut(OC_Contacts_App::$l10n->t('Error loading image.'));
}
-if(!$image->loadFromFile($tmpfname)) {
+if(!$image->loadFromFile($localpath)) {
bailOut(OC_Contacts_App::$l10n->t('Error loading image.'));
}
if($image->width() > 400 || $image->height() > 400) {
$image->resize(400); // Prettier resizing than with browser and saves bandwidth.
}
if(!$image->fixOrientation()) { // No fatal error so we don't bail out.
- debug('Couldn\'t save correct image orientation: '.$tmpfname);
+ OCP\Util::writeLog('contacts',
+ 'ajax/oc_photo.php: Couldn\'t save correct image orientation: '.$localpath,
+ OCP\Util::DEBUG);
}
-if($image->save($tmpfname)) {
- OCP\JSON::success(array('data' => array('id'=>$_GET['id'], 'tmp'=>$tmpfname)));
+if(OC_Cache::set($tmpkey, $image->data(), 600)) {
+ OCP\JSON::success(array('data' => array('id'=>$_GET['id'], 'tmp'=>$tmpkey)));
exit();
} else {
- bailOut('Couldn\'t save temporary image: '.$tmpfname);
+ bailOut('Couldn\'t save temporary image: '.$tmpkey);
}
-
-?>
diff --git a/apps/contacts/ajax/savecrop.php b/apps/contacts/ajax/savecrop.php
index a5517c5d843..2483d0f7128 100644
--- a/apps/contacts/ajax/savecrop.php
+++ b/apps/contacts/ajax/savecrop.php
@@ -18,23 +18,16 @@
* 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: Translatable strings.
- * Remember to delete tmp file at some point.
*/
-
-function bailOut($msg) {
- OCP\JSON::error(array('data' => array('message' => $msg)));
- OCP\Util::writeLog('contacts','ajax/savecrop.php: '.$msg, OCP\Util::DEBUG);
- exit();
-}
-
// Check if we are a user
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
OCP\JSON::callCheck();
// Firefox and Konqueror tries to download application/json for me. --Arthur
-OCP\JSON::setContentTypeHeader('text/plain');
+OCP\JSON::setContentTypeHeader('text/plain; charset=utf-8');
+
+require_once 'loghandler.php';
$image = null;
@@ -44,88 +37,85 @@ $y1 = (isset($_POST['y1']) && $_POST['y1']) ? $_POST['y1'] : 0;
//$y2 = isset($_POST['y2']) ? $_POST['y2'] : -1;
$w = (isset($_POST['w']) && $_POST['w']) ? $_POST['w'] : -1;
$h = (isset($_POST['h']) && $_POST['h']) ? $_POST['h'] : -1;
-$tmp_path = isset($_POST['tmp_path']) ? $_POST['tmp_path'] : '';
+$tmpkey = isset($_POST['tmpkey']) ? $_POST['tmpkey'] : '';
$id = isset($_POST['id']) ? $_POST['id'] : '';
-if($tmp_path == '') {
- bailOut('Missing path to temporary file.');
+if($tmpkey == '') {
+ bailOut('Missing key to temporary file.');
}
if($id == '') {
bailOut('Missing contact id.');
}
-OCP\Util::writeLog('contacts','savecrop.php: files: '.$tmp_path.' exists: '.file_exists($tmp_path), OCP\Util::DEBUG);
+OCP\Util::writeLog('contacts', 'savecrop.php: key: '.$tmpkey, OCP\Util::DEBUG);
-if(file_exists($tmp_path)) {
+$data = OC_Cache::get($tmpkey);
+if($data) {
$image = new OC_Image();
- if($image->loadFromFile($tmp_path)) {
+ if($image->loadFromdata($data)) {
$w = ($w != -1 ? $w : $image->width());
$h = ($h != -1 ? $h : $image->height());
- OCP\Util::writeLog('contacts','savecrop.php, x: '.$x1.' y: '.$y1.' w: '.$w.' h: '.$h, OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts',
+ 'savecrop.php, x: '.$x1.' y: '.$y1.' w: '.$w.' h: '.$h,
+ OCP\Util::DEBUG);
if($image->crop($x1, $y1, $w, $h)) {
- if(($image->width() <= 200 && $image->height() <= 200) || $image->resize(200)) {
- $tmpfname = tempnam(get_temp_dir(), "occCropped"); // create a new file because of caching issues.
- if($image->save($tmpfname)) {
- unlink($tmp_path);
- $card = OC_Contacts_App::getContactVCard($id);
- if(!$card) {
- unlink($tmpfname);
- bailOut('Error getting contact object.');
- }
- if($card->__isset('PHOTO')) {
- OCP\Util::writeLog('contacts','savecrop.php: PHOTO property exists.', OCP\Util::DEBUG);
- $property = $card->__get('PHOTO');
- if(!$property) {
- unlink($tmpfname);
- bailOut('Error getting PHOTO property.');
- }
- $property->setValue($image->__toString());
- $property->parameters[] = new Sabre_VObject_Parameter('ENCODING', 'b');
- $property->parameters[] = new Sabre_VObject_Parameter('TYPE', $image->mimeType());
- $card->__set('PHOTO', $property);
- } else {
- OCP\Util::writeLog('contacts','savecrop.php: files: Adding PHOTO property.', OCP\Util::DEBUG);
- $card->addProperty('PHOTO', $image->__toString(), array('ENCODING' => 'b', 'TYPE' => $image->mimeType()));
- }
- $now = new DateTime;
- $card->setString('REV', $now->format(DateTime::W3C));
- if(!OC_Contacts_VCard::edit($id,$card)) {
- bailOut('Error saving contact.');
+ if(($image->width() <= 200 && $image->height() <= 200)
+ || $image->resize(200)) {
+ $vcard = OC_Contacts_App::getContactVCard($id);
+ if(!$vcard) {
+ OC_Cache::remove($tmpkey);
+ bailOut(OC_Contacts_App::$l10n
+ ->t('Error getting contact object.'));
+ }
+ if($vcard->__isset('PHOTO')) {
+ OCP\Util::writeLog('contacts',
+ 'savecrop.php: PHOTO property exists.',
+ OCP\Util::DEBUG);
+ $property = $vcard->__get('PHOTO');
+ if(!$property) {
+ OC_Cache::remove($tmpkey);
+ bailOut(OC_Contacts_App::$l10n
+ ->t('Error getting PHOTO property.'));
}
- unlink($tmpfname);
- //$result=array( "status" => "success", 'mime'=>$image->mimeType(), 'tmp'=>$tmp_path);
- $tmpl = new OCP\Template("contacts", "part.contactphoto");
- $tmpl->assign('tmp_path', $tmpfname);
- $tmpl->assign('mime', $image->mimeType());
- $tmpl->assign('id', $id);
- $tmpl->assign('refresh', true);
- $tmpl->assign('width', $image->width());
- $tmpl->assign('height', $image->height());
- $page = $tmpl->fetchPage();
- OCP\JSON::success(array('data' => array('page'=>$page, 'tmp'=>$tmpfname)));
- exit();
+ $property->setValue($image->__toString());
+ $property->parameters[]
+ = new Sabre_VObject_Parameter('ENCODING', 'b');
+ $property->parameters[]
+ = new Sabre_VObject_Parameter('TYPE', $image->mimeType());
+ $vcard->__set('PHOTO', $property);
} else {
- if(file_exists($tmpfname)) {
- unlink($tmpfname);
- }
- bailOut('Error saving temporary image');
+ OCP\Util::writeLog('contacts',
+ 'savecrop.php: files: Adding PHOTO property.',
+ OCP\Util::DEBUG);
+ $vcard->addProperty('PHOTO',
+ $image->__toString(), array('ENCODING' => 'b',
+ 'TYPE' => $image->mimeType()));
+ }
+ $now = new DateTime;
+ $vcard->setString('REV', $now->format(DateTime::W3C));
+ if(!OC_Contacts_VCard::edit($id, $vcard)) {
+ bailOut(OC_Contacts_App::$l10n->t('Error saving contact.'));
}
+ OCP\JSON::success(array(
+ 'data' => array(
+ 'id' => $id,
+ 'width' => $image->width(),
+ 'height' => $image->height(),
+ 'lastmodified' => OC_Contacts_App::lastModified($vcard)->format('U')
+ )
+ ));
} else {
- bailOut('Error resizing image');
+ bailOut(OC_Contacts_App::$l10n->t('Error resizing image'));
}
} else {
- bailOut('Error cropping image');
+ bailOut(OC_Contacts_App::$l10n->t('Error cropping image'));
}
} else {
- bailOut('Error creating temporary image');
+ bailOut(OC_Contacts_App::$l10n->t('Error creating temporary image'));
}
} else {
- bailOut('Error finding image: '.$tmp_path);
-}
-
-if($tmp_path != '' && file_exists($tmp_path)) {
- unlink($tmp_path);
+ bailOut(OC_Contacts_App::$l10n->t('Error finding image: ').$tmpkey);
}
-?>
+OC_Cache::remove($tmpkey);
diff --git a/apps/contacts/ajax/updateaddressbook.php b/apps/contacts/ajax/updateaddressbook.php
deleted file mode 100644
index 68fe8f81211..00000000000
--- a/apps/contacts/ajax/updateaddressbook.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * Copyright (c) 2011-2012 Thomas Tanghus <thomas@tanghus.net>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-
-
-// Check if we are a user
-OCP\JSON::checkLoggedIn();
-OCP\JSON::checkAppEnabled('contacts');
-OCP\JSON::callCheck();
-
-$bookid = $_POST['id'];
-OC_Contacts_App::getAddressbook($bookid); // is owner access check
-
-$name = trim(strip_tags($_POST['name']));
-if(!$name) {
- OCP\JSON::error(array('data' => array('message' => OC_Contacts_App::$l10n->t('Cannot update addressbook with an empty name.'))));
- OCP\Util::writeLog('contacts','ajax/updateaddressbook.php: Cannot update addressbook with an empty name: '.strip_tags($_POST['name']), OCP\Util::ERROR);
- exit();
-}
-
-if(!OC_Contacts_Addressbook::edit($bookid, $name, null)) {
- OCP\JSON::error(array('data' => array('message' => $l->t('Error updating addressbook.'))));
- OCP\Util::writeLog('contacts','ajax/updateaddressbook.php: Error adding addressbook: ', OCP\Util::ERROR);
- //exit();
-}
-
-if(!OC_Contacts_Addressbook::setActive($bookid, $_POST['active'])) {
- OCP\JSON::error(array('data' => array('message' => $l->t('Error (de)activating addressbook.'))));
- OCP\Util::writeLog('contacts','ajax/updateaddressbook.php: Error (de)activating addressbook: '.$bookid, OCP\Util::ERROR);
- //exit();
-}
-
-$addressbook = OC_Contacts_App::getAddressbook($bookid);
-$tmpl = new OCP\Template('contacts', 'part.chooseaddressbook.rowfields');
-$tmpl->assign('addressbook', $addressbook);
-OCP\JSON::success(array(
- 'page' => $tmpl->fetchPage(),
- 'addressbook' => $addressbook,
-));
diff --git a/apps/contacts/ajax/uploadimport.php b/apps/contacts/ajax/uploadimport.php
index 4c3f5eadf08..87032b731a5 100644
--- a/apps/contacts/ajax/uploadimport.php
+++ b/apps/contacts/ajax/uploadimport.php
@@ -24,56 +24,57 @@
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
OCP\JSON::callCheck();
-function bailOut($msg) {
- OCP\JSON::error(array('data' => array('message' => $msg)));
- OCP\Util::writeLog('contacts','ajax/uploadimport.php: '.$msg, OCP\Util::ERROR);
- exit();
-}
+require_once 'loghandler.php';
+
+$l10n = OC_Contacts_App::$l10n;
$view = OCP\Files::getStorage('contacts');
+if(!$view->file_exists('imports')) {
+ $view->mkdir('imports');
+}
$tmpfile = md5(rand());
// If it is a Drag'n'Drop transfer it's handled here.
$fn = (isset($_SERVER['HTTP_X_FILE_NAME']) ? $_SERVER['HTTP_X_FILE_NAME'] : false);
if($fn) {
- if($view->file_put_contents('/'.$tmpfile, file_get_contents('php://input'))) {
- OCP\JSON::success(array('data' => array('path'=>'', 'file'=>$tmpfile)));
+ if($view->file_put_contents('/imports/'.$fn, file_get_contents('php://input'))) {
+ OCP\JSON::success(array('data' => array('file'=>$tmpfile, 'name'=>$fn)));
exit();
} else {
- bailOut(OC_Contacts_App::$l10n->t('Error uploading contacts to storage.'));
+ bailOut($l10n->t('Error uploading contacts to storage.'));
}
}
// File input transfers are handled here
if (!isset($_FILES['importfile'])) {
- OCP\Util::writeLog('contacts','ajax/uploadphoto.php: No file was uploaded. Unknown error.', OCP\Util::DEBUG);
- OCP\JSON::error(array('data' => array( 'message' => 'No file was uploaded. Unknown error' )));
+ OCP\Util::writeLog('contacts',
+ 'ajax/uploadphoto.php: No file was uploaded. Unknown error.',
+ OCP\Util::DEBUG);
+ OCP\JSON::error(array('
+ data' => array(
+ 'message' => 'No file was uploaded. Unknown error' )));
exit();
}
$error = $_FILES['importfile']['error'];
if($error !== UPLOAD_ERR_OK) {
$errors = array(
- 0=>OC_Contacts_App::$l10n->t("There is no error, the file uploaded with success"),
- 1=>OC_Contacts_App::$l10n->t("The uploaded file exceeds the upload_max_filesize directive in php.ini").ini_get('upload_max_filesize'),
- 2=>OC_Contacts_App::$l10n->t("The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form"),
- 3=>OC_Contacts_App::$l10n->t("The uploaded file was only partially uploaded"),
- 4=>OC_Contacts_App::$l10n->t("No file was uploaded"),
- 6=>OC_Contacts_App::$l10n->t("Missing a temporary folder")
+ 0=>$l10n->t("There is no error, the file uploaded with success"),
+ 1=>$l10n->t("The uploaded file exceeds the upload_max_filesize directive in php.ini").ini_get('upload_max_filesize'),
+ 2=>$l10n->t("The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form"),
+ 3=>$l10n->t("The uploaded file was only partially uploaded"),
+ 4=>$l10n->t("No file was uploaded"),
+ 6=>$l10n->t("Missing a temporary folder")
);
bailOut($errors[$error]);
}
$file=$_FILES['importfile'];
-$tmpfname = tempnam(get_temp_dir(), "occOrig");
if(file_exists($file['tmp_name'])) {
- if($view->file_put_contents('/'.$tmpfile, file_get_contents($file['tmp_name']))) {
- OCP\JSON::success(array('data' => array('path'=>'', 'file'=>$tmpfile)));
+ if($view->file_put_contents('/imports/'.$file['name'], file_get_contents($file['tmp_name']))) {
+ OCP\JSON::success(array('data' => array('file'=>$file['name'], 'name'=>$file['name'])));
} else {
- bailOut(OC_Contacts_App::$l10n->t('Error uploading contacts to storage.'));
+ bailOut($l10n->t('Error uploading contacts to storage.'));
}
} else {
bailOut('Temporary file: \''.$file['tmp_name'].'\' has gone AWOL?');
}
-
-
-?>
diff --git a/apps/contacts/ajax/uploadphoto.php b/apps/contacts/ajax/uploadphoto.php
index 52e25e4a335..34830b291d2 100644
--- a/apps/contacts/ajax/uploadphoto.php
+++ b/apps/contacts/ajax/uploadphoto.php
@@ -19,96 +19,98 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
-function bailOut($msg) {
- OCP\JSON::error(array('data' => array('message' => $msg)));
- OCP\Util::writeLog('contacts','ajax/uploadphoto.php: '.$msg, OCP\Util::DEBUG);
- exit();
-}
-function debug($msg) {
- OCP\Util::writeLog('contacts','ajax/uploadphoto.php: '.$msg, OCP\Util::DEBUG);
-}
-OCP\JSON::setContentTypeHeader('text/plain');
+
+// Check if we are a user
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('contacts');
OCP\JSON::callCheck();
+// Firefox and Konqueror tries to download application/json for me. --Arthur
+OCP\JSON::setContentTypeHeader('text/plain; charset=utf-8');
+require_once 'loghandler.php';
+$l10n = OC_Contacts_App::$l10n;
// If it is a Drag'n'Drop transfer it's handled here.
$fn = (isset($_SERVER['HTTP_X_FILE_NAME']) ? $_SERVER['HTTP_X_FILE_NAME'] : false);
if ($fn) {
- // AJAX call
if (!isset($_GET['id'])) {
- OCP\Util::writeLog('contacts','ajax/uploadphoto.php: No contact ID was submitted.', OCP\Util::DEBUG);
- OCP\JSON::error(array('data' => array( 'message' => 'No contact ID was submitted.' )));
- exit();
+ bailOut($l10n->t('No contact ID was submitted.'));
}
$id = $_GET['id'];
- $tmpfname = tempnam(get_temp_dir(), 'occOrig');
- file_put_contents($tmpfname, file_get_contents('php://input'));
+ $tmpkey = 'contact-photo-'.md5($fn);
+ $data = file_get_contents('php://input');
$image = new OC_Image();
- if($image->loadFromFile($tmpfname)) {
+ sleep(1); // Apparently it needs time to load the data.
+ if($image->loadFromData($data)) {
if($image->width() > 400 || $image->height() > 400) {
$image->resize(400); // Prettier resizing than with browser and saves bandwidth.
}
if(!$image->fixOrientation()) { // No fatal error so we don't bail out.
- debug('Couldn\'t save correct image orientation: '.$tmpfname);
+ debug('Couldn\'t save correct image orientation: '.$tmpkey);
}
- if($image->save($tmpfname)) {
- OCP\JSON::success(array('data' => array('mime'=>$_SERVER['CONTENT_TYPE'], 'name'=>$fn, 'id'=>$id, 'tmp'=>$tmpfname)));
+ if(OC_Cache::set($tmpkey, $image->data(), 600)) {
+ OCP\JSON::success(array(
+ 'data' => array(
+ 'mime'=>$_SERVER['CONTENT_TYPE'],
+ 'name'=>$fn,
+ 'id'=>$id,
+ 'tmp'=>$tmpkey)));
exit();
} else {
- bailOut('Couldn\'t save temporary image: '.$tmpfname);
+ bailOut($l10n->t('Couldn\'t save temporary image: ').$tmpkey);
}
} else {
- bailOut('Couldn\'t load temporary image: '.$file['tmp_name']);
+ bailOut($l10n->t('Couldn\'t load temporary image: ').$tmpkey);
}
}
-
+// Uploads from file dialog are handled here.
if (!isset($_POST['id'])) {
- OCP\Util::writeLog('contacts','ajax/uploadphoto.php: No contact ID was submitted.', OCP\Util::DEBUG);
- OCP\JSON::error(array('data' => array( 'message' => 'No contact ID was submitted.' )));
- exit();
+ bailOut($l10n->t('No contact ID was submitted.'));
}
if (!isset($_FILES['imagefile'])) {
- OCP\Util::writeLog('contacts','ajax/uploadphoto.php: No file was uploaded. Unknown error.', OCP\Util::DEBUG);
- OCP\JSON::error(array('data' => array( 'message' => 'No file was uploaded. Unknown error' )));
- exit();
+ bailOut($l10n->t('No file was uploaded. Unknown error'));
}
+
$error = $_FILES['imagefile']['error'];
if($error !== UPLOAD_ERR_OK) {
$errors = array(
- 0=>OC_Contacts_App::$l10n->t("There is no error, the file uploaded with success"),
- 1=>OC_Contacts_App::$l10n->t("The uploaded file exceeds the upload_max_filesize directive in php.ini").ini_get('upload_max_filesize'),
- 2=>OC_Contacts_App::$l10n->t("The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form"),
- 3=>OC_Contacts_App::$l10n->t("The uploaded file was only partially uploaded"),
- 4=>OC_Contacts_App::$l10n->t("No file was uploaded"),
- 6=>OC_Contacts_App::$l10n->t("Missing a temporary folder")
+ 0=>$l10n->t("There is no error, the file uploaded with success"),
+ 1=>$l10n->t("The uploaded file exceeds the upload_max_filesize directive in php.ini").ini_get('upload_max_filesize'),
+ 2=>$l10n->t("The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form"),
+ 3=>$l10n->t("The uploaded file was only partially uploaded"),
+ 4=>$l10n->t("No file was uploaded"),
+ 6=>$l10n->t("Missing a temporary folder")
);
bailOut($errors[$error]);
}
$file=$_FILES['imagefile'];
-$tmpfname = tempnam(get_temp_dir(), "occOrig");
if(file_exists($file['tmp_name'])) {
+ $tmpkey = 'contact-photo-'.md5(basename($file['tmp_name']));
$image = new OC_Image();
if($image->loadFromFile($file['tmp_name'])) {
if($image->width() > 400 || $image->height() > 400) {
$image->resize(400); // Prettier resizing than with browser and saves bandwidth.
}
if(!$image->fixOrientation()) { // No fatal error so we don't bail out.
- debug('Couldn\'t save correct image orientation: '.$tmpfname);
+ debug('Couldn\'t save correct image orientation: '.$tmpkey);
}
- if($image->save($tmpfname)) {
- OCP\JSON::success(array('data' => array('mime'=>$file['type'],'size'=>$file['size'],'name'=>$file['name'], 'id'=>$_POST['id'], 'tmp'=>$tmpfname)));
+ if(OC_Cache::set($tmpkey, $image->data(), 600)) {
+ OCP\JSON::success(array(
+ 'data' => array(
+ 'mime'=>$file['type'],
+ 'size'=>$file['size'],
+ 'name'=>$file['name'],
+ 'id'=>$_POST['id'],
+ 'tmp'=>$tmpkey,
+ )));
exit();
} else {
- bailOut('Couldn\'t save temporary image: '.$tmpfname);
+ bailOut($l10n->t('Couldn\'t save temporary image: ').$tmpkey);
}
} else {
- bailOut('Couldn\'t load temporary image: '.$file['tmp_name']);
+ bailOut($l10n->t('Couldn\'t load temporary image: ').$file['tmp_name']);
}
} else {
bailOut('Temporary file: \''.$file['tmp_name'].'\' has gone AWOL?');
}
-
-?>
diff --git a/apps/contacts/appinfo/app.php b/apps/contacts/appinfo/app.php
index a298857d605..102c04705a4 100644
--- a/apps/contacts/appinfo/app.php
+++ b/apps/contacts/appinfo/app.php
@@ -3,18 +3,20 @@ OC::$CLASSPATH['OC_Contacts_App'] = 'apps/contacts/lib/app.php';
OC::$CLASSPATH['OC_Contacts_Addressbook'] = 'apps/contacts/lib/addressbook.php';
OC::$CLASSPATH['OC_Contacts_VCard'] = 'apps/contacts/lib/vcard.php';
OC::$CLASSPATH['OC_Contacts_Hooks'] = 'apps/contacts/lib/hooks.php';
-OC::$CLASSPATH['OC_Connector_Sabre_CardDAV'] = 'apps/contacts/lib/connector_sabre.php';
+OC::$CLASSPATH['OC_Share_Backend_Contact'] = 'apps/contacts/lib/share/contact.php';
+OC::$CLASSPATH['OC_Share_Backend_Addressbook'] = 'apps/contacts/lib/share/addressbook.php';
+OC::$CLASSPATH['OC_Connector_Sabre_CardDAV'] = 'apps/contacts/lib/sabre/backend.php';
+OC::$CLASSPATH['OC_Connector_Sabre_CardDAV_AddressBookRoot'] = 'apps/contacts/lib/sabre/addressbookroot.php';
+OC::$CLASSPATH['OC_Connector_Sabre_CardDAV_UserAddressBooks'] = 'apps/contacts/lib/sabre/useraddressbooks.php';
+OC::$CLASSPATH['OC_Connector_Sabre_CardDAV_AddressBook'] = 'apps/contacts/lib/sabre/addressbook.php';
+OC::$CLASSPATH['OC_Connector_Sabre_CardDAV_Card'] = 'apps/contacts/lib/sabre/card.php';
+OC::$CLASSPATH['OC_Connector_Sabre_CardDAV_VCFExportPlugin'] = 'apps/contacts/lib/sabre/vcfexportplugin.php';
OC::$CLASSPATH['OC_Search_Provider_Contacts'] = 'apps/contacts/lib/search.php';
OCP\Util::connectHook('OC_User', 'post_createUser', 'OC_Contacts_Hooks', 'createUser');
OCP\Util::connectHook('OC_User', 'post_deleteUser', 'OC_Contacts_Hooks', 'deleteUser');
OCP\Util::connectHook('OC_Calendar', 'getEvents', 'OC_Contacts_Hooks', 'getBirthdayEvents');
OCP\Util::connectHook('OC_Calendar', 'getSources', 'OC_Contacts_Hooks', 'getCalenderSources');
-OCP\App::register( array(
- 'order' => 10,
- 'id' => 'contacts',
- 'name' => 'Contacts' ));
-
OCP\App::addNavigationEntry( array(
'id' => 'contacts_index',
'order' => 10,
@@ -22,7 +24,8 @@ OCP\App::addNavigationEntry( array(
'icon' => OCP\Util::imagePath( 'settings', 'users.svg' ),
'name' => OC_L10N::get('contacts')->t('Contacts') ));
-
-OCP\App::registerPersonal('contacts','settings');
OCP\Util::addscript('contacts', 'loader');
OC_Search::registerProvider('OC_Search_Provider_Contacts');
+OCP\Share::registerBackend('contact', 'OC_Share_Backend_Contact');
+OCP\Share::registerBackend('addressbook', 'OC_Share_Backend_Addressbook', 'contact');
+
diff --git a/apps/contacts/appinfo/database.xml b/apps/contacts/appinfo/database.xml
index f83a04b8f47..1e2e097e49b 100644
--- a/apps/contacts/appinfo/database.xml
+++ b/apps/contacts/appinfo/database.xml
@@ -44,7 +44,7 @@
<type>text</type>
<default></default>
<notnull>false</notnull>
- <length>100</length>
+ <length>200</length>
</field>
<field>
@@ -62,6 +62,14 @@
<length>4</length>
</field>
+ <field>
+ <name>active</name>
+ <type>integer</type>
+ <default>1</default>
+ <notnull>true</notnull>
+ <length>4</length>
+ </field>
+
</declaration>
</table>
@@ -110,7 +118,7 @@
<type>text</type>
<default></default>
<notnull>false</notnull>
- <length>100</length>
+ <length>200</length>
</field>
<field>
diff --git a/apps/contacts/appinfo/migrate.php b/apps/contacts/appinfo/migrate.php
index f43126e5c25..2559b4ea456 100644
--- a/apps/contacts/appinfo/migrate.php
+++ b/apps/contacts/appinfo/migrate.php
@@ -2,7 +2,7 @@
class OC_Migration_Provider_Contacts extends OC_Migration_Provider{
// Create the xml for the user supplied
- function export( ){
+ function export( ) {
$options = array(
'table'=>'contacts_addressbooks',
'matchcol'=>'userid',
@@ -21,38 +21,40 @@ class OC_Migration_Provider_Contacts extends OC_Migration_Provider{
$ids2 = $this->content->copyRows( $options );
// If both returned some ids then they worked
- if( is_array( $ids ) && is_array( $ids2 ) )
- {
- return true;
+ if(is_array($ids) && is_array($ids2)) {
+ return true;
} else {
return false;
}
}
- // Import function for bookmarks
- function import( ){
- switch( $this->appinfo->version ){
+ // Import function for contacts
+ function import( ) {
+ switch( $this->appinfo->version ) {
default:
// All versions of the app have had the same db structure, so all can use the same import function
$query = $this->content->prepare( "SELECT * FROM contacts_addressbooks WHERE userid LIKE ?" );
$results = $query->execute( array( $this->olduid ) );
$idmap = array();
- while( $row = $results->fetchRow() ){
- // Import each bookmark, saving its id into the map
- $query = OCP\DB::prepare( "INSERT INTO `*PREFIX*contacts_addressbooks` (`userid`, `displayname`, `uri`, `description`, `ctag`) VALUES (?, ?, ?, ?, ?)" );
- $query->execute( array( $this->uid, $row['displayname'], $row['uri'], $row['description'], $row['ctag'] ) );
+ while( $row = $results->fetchRow() ) {
+ // Import each addressbook
+ $addressbookquery = OCP\DB::prepare( "INSERT INTO *PREFIX*contacts_addressbooks (`userid`, `displayname`, `uri`, `description`, `ctag`) VALUES (?, ?, ?, ?, ?)" );
+ $addressbookquery->execute( array( $this->uid, $row['displayname'], $row['uri'], $row['description'], $row['ctag'] ) );
// Map the id
- $idmap[$row['id']] = OCP\DB::insertid();
+ $idmap[$row['id']] = OCP\DB::insertid('*PREFIX*contacts_addressbooks');
+ // Make the addressbook active
+ OC_Contacts_Addressbook::setActive($idmap[$row['id']], true);
}
// Now tags
- foreach($idmap as $oldid => $newid){
+ foreach($idmap as $oldid => $newid) {
+
$query = $this->content->prepare( "SELECT * FROM contacts_cards WHERE addressbookid LIKE ?" );
$results = $query->execute( array( $oldid ) );
while( $row = $results->fetchRow() ){
- // Import the tags for this bookmark, using the new bookmark id
- $query = OCP\DB::prepare( "INSERT INTO `*PREFIX*contacts_cards` (`addressbookid`, `fullname`, `carddata`, `uri`, `lastmodified`) VALUES (?, ?, ?, ?, ?)" );
- $query->execute( array( $newid, $row['fullname'], $row['carddata'], $row['uri'], $row['lastmodified'] ) );
+ // Import the contacts
+ $contactquery = OCP\DB::prepare( "INSERT INTO *PREFIX*contacts_cards (`addressbookid`, `fullname`, `carddata`, `uri`, `lastmodified`) VALUES (?, ?, ?, ?, ?)" );
+ $contactquery->execute( array( $newid, $row['fullname'], $row['carddata'], $row['uri'], $row['lastmodified'] ) );
}
}
// All done!
diff --git a/apps/contacts/appinfo/remote.php b/apps/contacts/appinfo/remote.php
index 2810358e7f2..d8677d7f731 100644
--- a/apps/contacts/appinfo/remote.php
+++ b/apps/contacts/appinfo/remote.php
@@ -22,8 +22,8 @@
OCP\App::checkAppEnabled('contacts');
-if(substr($_SERVER["REQUEST_URI"],0,strlen(OC::$APPSWEBROOT . '/apps/contacts/carddav.php')) == OC::$APPSWEBROOT . '/apps/contacts/carddav.php'){
- $baseuri = OC::$APPSWEBROOT . '/apps/contacts/carddav.php';
+if(substr($_SERVER["REQUEST_URI"], 0, strlen(OC_App::getAppWebPath('contacts').'/carddav.php')) == OC_App::getAppWebPath('contacts').'/carddav.php') {
+ $baseuri = OC_App::getAppWebPath('contacts').'/carddav.php';
}
// only need authentication apps
@@ -36,25 +36,26 @@ $principalBackend = new OC_Connector_Sabre_Principal();
$carddavBackend = new OC_Connector_Sabre_CardDAV();
// Root nodes
-$Sabre_CalDAV_Principal_Collection = new Sabre_CalDAV_Principal_Collection($principalBackend);
-$Sabre_CalDAV_Principal_Collection->disableListing = true; // Disable listening
+$principalCollection = new Sabre_CalDAV_Principal_Collection($principalBackend);
+$principalCollection->disableListing = true; // Disable listening
-$Sabre_CardDAV_AddressBookRoot = new Sabre_CardDAV_AddressBookRoot($principalBackend, $carddavBackend);
-$Sabre_CardDAV_AddressBookRoot->disableListing = true; // Disable listening
+$addressBookRoot = new OC_Connector_Sabre_CardDAV_AddressBookRoot($principalBackend, $carddavBackend);
+$addressBookRoot->disableListing = true; // Disable listening
-$nodes = array(
- $Sabre_CalDAV_Principal_Collection,
- $Sabre_CardDAV_AddressBookRoot,
+$nodes = array(
+ $principalCollection,
+ $addressBookRoot,
);
// Fire up server
$server = new Sabre_DAV_Server($nodes);
$server->setBaseUri($baseuri);
// Add plugins
-$server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend,'ownCloud'));
+$server->addPlugin(new Sabre_DAV_Auth_Plugin($authBackend, 'ownCloud'));
$server->addPlugin(new Sabre_CardDAV_Plugin());
$server->addPlugin(new Sabre_DAVACL_Plugin());
$server->addPlugin(new Sabre_DAV_Browser_Plugin(false)); // Show something in the Browser, but no upload
+$server->addPlugin(new OC_Connector_Sabre_CardDAV_VCFExportPlugin());
// And off we go!
$server->exec();
diff --git a/apps/contacts/appinfo/update.php b/apps/contacts/appinfo/update.php
new file mode 100644
index 00000000000..21e736bb446
--- /dev/null
+++ b/apps/contacts/appinfo/update.php
@@ -0,0 +1,25 @@
+<?php
+
+$installedVersion=OCP\Config::getAppValue('contacts', 'installed_version');
+if (version_compare($installedVersion, '0.2.3', '<')) {
+ // First set all address books in-active.
+ $stmt = OCP\DB::prepare( 'UPDATE *PREFIX*contacts_addressbooks SET active=0' );
+ $result = $stmt->execute(array());
+
+ // Then get all the active address books.
+ $stmt = OCP\DB::prepare( 'SELECT userid,configvalue FROM *PREFIX*preferences WHERE appid=\'contacts\' AND configkey=\'openaddressbooks\'' );
+ $result = $stmt->execute(array());
+
+ // Prepare statement for updating the new 'active' field.
+ $stmt = OCP\DB::prepare( 'UPDATE *PREFIX*contacts_addressbooks SET active=? WHERE id=? AND userid=?' );
+ while( $row = $result->fetchRow()) {
+ $ids = explode(';', $row['configvalue']);
+ foreach($ids as $id) {
+ $r = $stmt->execute(array(1, $id, $row['userid']));
+ }
+ }
+
+ // Remove the old preferences.
+ $stmt = OCP\DB::prepare( 'DELETE FROM *PREFIX*preferences WHERE appid=\'contacts\' AND configkey=\'openaddressbooks\'' );
+ $result = $stmt->execute(array());
+}
diff --git a/apps/contacts/appinfo/version b/apps/contacts/appinfo/version
index 2f4536184bc..72f9fa82020 100644
--- a/apps/contacts/appinfo/version
+++ b/apps/contacts/appinfo/version
@@ -1 +1 @@
-0.2 \ No newline at end of file
+0.2.4 \ No newline at end of file
diff --git a/apps/contacts/carddav.php b/apps/contacts/carddav.php
index e0579e625d7..264eb30836b 100644
--- a/apps/contacts/carddav.php
+++ b/apps/contacts/carddav.php
@@ -1,6 +1,6 @@
<?php
-if(!file_exists('../../lib/base.php')){
+if(!file_exists('../../lib/base.php')) {
die('Please update the path to /lib/base.php in carddav.php or make use of /remote.php/carddav/');
}
-require_once('../../lib/base.php');
-require_once('appinfo/remote.php'); \ No newline at end of file
+require_once '../../lib/base.php';
+require_once 'appinfo/remote.php'; \ No newline at end of file
diff --git a/apps/contacts/css/contacts.css b/apps/contacts/css/contacts.css
index 6163c60630f..bc1a57756ae 100644
--- a/apps/contacts/css/contacts.css
+++ b/apps/contacts/css/contacts.css
@@ -2,36 +2,46 @@
font-weight: bold;
}*/
#leftcontent { top: 3.5em !important; padding: 0; margin: 0; }
+#leftcontent a { padding: 0 0 0 25px; }
#rightcontent { top: 3.5em !important; padding-top: 5px; }
-#contacts { background: #fff; width: 20em; left: 12.5em; top: 3.7em; bottom:3em; position: fixed; overflow: auto; padding: 0; margin: 0; }
-#contacts a { height: 23px; display: block; margin: 0 0 0 0; padding: 0 0 0 25px; }
+#leftcontent h3 { cursor: pointer; -moz-transition: background 300ms ease 0s; background: none no-repeat scroll 1em center #eee; border-bottom: 1px solid #ddd; border-top: 1px solid #fff; display: block; max-width: 100%; padding: 0.5em 0.8em; color: #666; text-shadow: 0 1px 0 #f8f8f8; font-size: 1.2em; }
+#leftcontent h3:hover,#leftcontent h3:active,#leftcontent h3.active { background-color: #DBDBDB; border-bottom: 1px solid #CCCCCC; border-top: 1px solid #D4D4D4; color: #333333; font-weight: bold; }
+#contacts { position: fixed; background: #fff; max-width: 100%; width: 20em; left: 12.5em; top: 3.7em; bottom: 3em; overflow: auto; padding: 0; margin: 0; }
+.contacts a { height: 23px; display: block; left: 12.5em; margin: 0 0 0 0; padding: 0 0 0 25px; }
+.contacts li.ui-draggable { height: 23px; }
+.ui-draggable-dragging { width: 17em; cursor: move; }
+.ui-state-hover { border: 1px solid dashed; }
#bottomcontrols { padding: 0; bottom:0px; height:2.8em; width: 20em; margin:0; background:#eee; border-top:1px solid #ccc; position:fixed; -moz-box-shadow: 0 -3px 3px -3px #000; -webkit-box-shadow: 0 -3px 3px -3px #000; box-shadow: 0 -3px 3px -3px #000;}
-#contacts_newcontact { float: left; margin: 0.2em 0 0 1em; }
-#chooseaddressbook { float: right; margin: 0.2em 1em 0 0; }
-#actionbar { position: relative; clear: both; height: 30px;}
+#bottomcontrols img { margin-top: 0.35em; }
+#uploadprogressbar { display: none; padding: 0; bottom: 3em; height:2em; width: 20em; margin:0; background:#eee; border:1px solid #ccc; position:fixed; }
+#contacts_newcontact, #bottomcontrols .settings { float: left; margin: 0.2em 0 0 1em; border: 0 none; border-radius: 0; -moz-box-shadow: none; box-shadow: none; outline: 0 none; }
+#bottomcontrols .settings { float: right; margin: 0.2em 1em 0 0; }
+#actionbar { clear: both; height: 30px;}
#contacts_deletecard {position:relative; float:left; background:url('%webroot%/core/img/actions/delete.svg') no-repeat center; }
#contacts_downloadcard {position:relative; float:left; background:url('%webroot%/core/img/actions/download.svg') no-repeat center; }
#contacts_propertymenu { clear: left; float:left; max-width: 15em; margin: 2em; }
#contacts_propertymenu_button { position:relative;top:0;left:0; margin: 0; }
-#contacts_propertymenu_dropdown { background-color: #fff; position:relative; right:0; overflow:hidden; text-overflow:ellipsis; /*border: thin solid #1d2d44;*/ -moz-box-shadow:0 0 10px #000; -webkit-box-shadow:0 0 10px #000; box-shadow:0 0 10px #000; -moz-border-radius:0.5em; -webkit-border-radius:0.5em; border-radius:0.5em; -moz-border-radius:0.5em; -webkit-border-radius:0.5em; border-radius:0.5em; }
+#contacts_propertymenu_dropdown { background-color: #fff; position:relative; right:0; overflow:hidden; text-overflow:ellipsis; border: thin solid #1d2d44; box-shadow: 0 3px 5px #bbb; /* -moz-box-shadow:0 0 10px #000; -webkit-box-shadow:0 0 10px #000; box-shadow:0 0 10px #000; -moz-border-radius:0.5em; -webkit-border-radius:0.5em; border-radius:0.5em; -moz-border-radius:0.5em; -webkit-border-radius:0.5em;*/ border-radius: 3px; }
#contacts_propertymenu li { display: block; font-weight: bold; height: 20px; }
#contacts_propertymenu li a { padding: 3px; display: block }
#contacts_propertymenu li:hover { background-color: #1d2d44; }
#contacts_propertymenu li a:hover { color: #fff }
-#card { width: auto;/*max-width: 70em; border: thin solid lightgray; display: block;*/ }
+#card { width: auto; font-size: 10px; /*max-width: 70em; border: thin solid lightgray; display: block;*/ }
#firstrun { width: 100%; position: absolute; top: 5em; left: 0; text-align: center; font-weight:bold; font-size:1.5em; color:#777; }
#firstrun #selections { font-size:0.8em; margin: 2em auto auto auto; clear: both; }
-#card input[type="text"].contacts_property,input[type="email"].contacts_property { width: 14em; float: left; font-weight: bold; }
+#card input[type="text"].contacts_property,input[type="email"].contacts_property,input[type="url"].contacts_property { width: 14em; float: left; font-weight: bold; }
.categories { float: left; width: 16em; }
-#card input[type="text"],input[type="email"],input[type="tel"],input[type="date"], select, textarea { background-color: #fefefe; border: 0 !important; -webkit-appearance:none !important; -moz-appearance:none !important; -webkit-box-sizing:none !important; -moz-box-sizing:none !important; box-sizing:none !important; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; float: left; }
-#card input[type="text"]:hover, input[type="text"]:focus, input[type="text"]:active,input[type="email"]:hover,input[type="tel"]:hover,input[type="date"]:hover,input[type="date"],input[type="date"]:hover,input[type="date"]:active,input[type="date"]:active,input[type="date"]:active,input[type="email"]:active,input[type="tel"]:active, select:hover, select:focus, select:active, textarea:focus, textarea:hover { border: 0 !important; -webkit-appearance:textfield; -moz-appearance:textfield; -webkit-box-sizing:content-box; -moz-box-sizing:content-box; box-sizing:content-box; background:#fff; color:#333; border:1px solid #ddd; -moz-box-shadow:0 1px 1px #ddd, 0 2px 0 #bbb inset; -webkit-box-shadow:0 1px 1px #ddd, 0 1px 0 #bbb inset; box-shadow:0 1px 1px #ddd, 0 1px 0 #bbb inset; -moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em; outline:none; float: left; }
-textarea { width: 80%; min-height: 5em; min-width: 30em; margin: 0 !important; padding: 0 !important; outline: 0 !important;}
-dl.form { width: 100%; float: left; clear: right; margin: 0; padding: 0; }
+#card input[type="checkbox"].contacts_property, #card input[type="text"], #card input[type="email"], #card input[type="url"], #card input[type="tel"], #card input[type="date"], #card select, #card textarea { background-color: #fefefe; border: 0 !important; -moz-appearance:none !important; -webkit-box-sizing:none !important; -moz-box-sizing:none !important; box-sizing:none !important; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; float: left; }
+#card input[type="text"]:hover, #card input[type="text"]:focus, #card input[type="text"]:active, input[type="email"]:hover, #card input[type="url"]:hover, #card input[type="tel"]:hover, #card input[type="date"]:hover, #card input[type="date"], #card input[type="date"]:hover, #card input[type="date"]:active, #card input[type="date"]:active, #card input[type="date"]:active, #card input[type="email"]:active, #card input[type="url"]:active, #card input[type="tel"]:active, #card textarea:focus, #card textarea:hover { border: 0 !important; -webkit-appearance:textfield; -moz-appearance:textfield; -webkit-box-sizing:content-box; -moz-box-sizing:content-box; box-sizing:content-box; background:#fff; color:#333; border:1px solid #ddd; -moz-box-shadow:0 1px 1px #ddd, 0 2px 0 #bbb inset; -webkit-box-shadow:0 1px 1px #ddd, 0 1px 0 #bbb inset; box-shadow:0 1px 1px #ddd, 0 1px 0 #bbb inset; -moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em; outline:none; float: left; }
+#card textarea { width: 80%; min-height: 5em; min-width: 30em; margin: 0 !important; padding: 0 !important; outline: 0 !important;}
+dl.form { width: 100%; float: left; clear: right; margin: 0; padding: 0; cursor: normal; }
.form dt { display: table-cell; clear: left; float: left; width: 7em; margin: 0; padding: 0.8em 0.5em 0 0; text-align:right; text-overflow:ellipsis; o-text-overflow: ellipsis; vertical-align: text-bottom; color: #bbb;/* white-space: pre-wrap; white-space: -moz-pre-wrap !important; white-space: -pre-wrap; white-space: -o-pre-wrap;*/ }
.form dd { display: table-cell; clear: right; float: left; margin: 0; padding: 0px; white-space: nowrap; vertical-align: text-bottom; }
-#address.form dt { min-width: 5em; }
-#address.form dl { min-width: 10em; }
+label:hover, dt:hover { color: #333; }
+/*::-webkit-input-placeholder { color: #bbb; }
+:-moz-placeholder { color: #bbb; }
+:-ms-input-placeholder { color: #bbb; }*/
.droptarget { margin: 0.5em; padding: 0.5em; border: thin solid #ccc; -moz-border-radius:.3em; -webkit-border-radius:.3em; border-radius:.3em; }
.droppable { margin: 0.5em; padding: 0.5em; border: thin dashed #333; -moz-border-radius:.3em; -webkit-border-radius:.3em; border-radius:.3em; }
.loading { background: url('%webroot%/core/img/loading.gif') no-repeat center !important; /*cursor: progress; */ cursor: wait; }
@@ -40,11 +50,12 @@ dl.form { width: 100%; float: left; clear: right; margin: 0; padding: 0; }
.float { float: left; }
.svg { border: inherit; background: inherit; }
.listactions { height: 1em; width:60px; float: left; clear: right; }
-.add,.edit,.delete,.mail, .globe, .upload, .download, .cloud { cursor: pointer; width: 20px; height: 20px; margin: 0; float: left; position:relative; opacity: 0.1; }
+.add,.edit,.delete,.mail, .globe, .upload, .download, .cloud, .share { cursor: pointer; width: 20px; height: 20px; margin: 0; float: left; position:relative; opacity: 0.1; }
.add:hover,.edit:hover,.delete:hover,.mail:hover, .globe:hover, .upload:hover, .download:hover .cloud:hover { opacity: 1.0 }
.add { background:url('%webroot%/core/img/actions/add.svg') no-repeat center; clear: both; }
.delete { background:url('%webroot%/core/img/actions/delete.svg') no-repeat center; }
.edit { background:url('%webroot%/core/img/actions/rename.svg') no-repeat center; }
+.share { background:url('%webroot%/core/img/actions/share.svg') no-repeat center; }
.mail { background:url('%webroot%/core/img/actions/mail.svg') no-repeat center; }
.upload { background:url('%webroot%/core/img/actions/upload.svg') no-repeat center; }
.download { background:url('%webroot%/core/img/actions/download.svg') no-repeat center; }
@@ -60,13 +71,15 @@ dl.form { width: 100%; float: left; clear: right; margin: 0; padding: 0; }
#fn { float: left !important; width: 18em !important; }
#name { /*position: absolute; top: 0px; left: 0px;*/ min-width: 25em; height: 2em; clear: right; display: block; }
#identityprops { /*position: absolute; top: 2.5em; left: 0px;*/ }
-/*#contact_photo { max-width: 250px; }*/
-#contact_identity { min-width: 30em; }
-.contactsection { position: relative; float: left; /*max-width: 40em;*/ padding: 0.5em; height: auto: border: thin solid lightgray;/* -webkit-border-radius: 0.5em; -moz-border-radius: 0.5em; border-radius: 0.5em; background-color: #f8f8f8;*/ }
+#contact_photo { float: left; margin: 1em; }
+#contact_identity { min-width: 30em; padding: 0.5em;}
+.contactsection { position: relative; float: left; width: 35em; padding: 0.5em; height: auto; }
#cropbox { margin: auto; }
-#contacts_details_photo { border-radius: 0.5em; border: thin solid #bbb; margin: 0.3em; background: url('%webroot%/core/img/loading.gif') no-repeat center center; -moz-box-shadow: 0 1px 3px #777; -webkit-box-shadow: 0 1px 3px #777; box-shadow: 0 1px 3px #777; }
-#contacts_details_photo:hover { background: #fff; cursor: default; }
+#contacts_details_photo_wrapper { width: 150px; }
+#contacts_details_photo_wrapper.wait { opacity: 0.6; filter:alpha(opacity=0.6); z-index:1000; background: url('%webroot%/core/img/loading.gif') no-repeat center center; cursor: wait; }
+.contacts_details_photo { border-radius: 0.5em; border: thin solid #bbb; margin: 0.3em; background: url('%webroot%/core/img/loading.gif') no-repeat center center; -moz-box-shadow: 0 1px 3px #777; -webkit-box-shadow: 0 1px 3px #777; box-shadow: 0 1px 3px #777; opacity: 1; }
+.contacts_details_photo:hover { background: #fff; cursor: default; }
#phototools { position:absolute; margin: 5px 0 0 10px; width:auto; height:22px; padding:0px; background-color:#fff; list-style-type:none; border-radius: 0.5em; -moz-box-shadow: 0 1px 3px #777; -webkit-box-shadow: 0 1px 3px #777; box-shadow: 0 1px 3px #777; }
#phototools li { display: inline; }
#phototools li a { float:left; cursor:pointer; width:22px; height:22px; opacity: 0.6; }
@@ -76,10 +89,17 @@ dl.form { width: 100%; float: left; clear: right; margin: 0; padding: 0; }
#addressdisplay { padding: 0.5em; }
dl.addresscard { background-color: #fff; float: left; width: auto; margin: 0 0.3em 0.3em 0.3em; padding: 0; border: 0; }
dl.addresscard dd {}
-dl.addresscard dt { padding: 0.3em; /*border-bottom: thin solid lightgray;*/ font-weight: bold; clear: both; color: #bbb;}
+dl.addresscard dt { padding: 0.3em; font-weight: bold; clear: both; color: #aaa; }
dl.addresscard dt:hover { color:#777; }
dl.addresscard dd > ul { margin: 0.3em; padding: 0.3em; }
dl.addresscard .action { float: right; }
+#address dt { width: 30%; white-space:nowrap; }
+#address dd { width: 66%; }
+#address input { width: 12em; padding: 0.6em 0.5em 0.4em; }
+#address input:-moz-placeholder { color: #aaa; }
+#address input::-webkit-input-placeholder { color: #aaa; }
+#address input:-ms-input-placeholder { color: #aaa; }
+#address input:placeholder { color: #aaa; }
#adr_type {} /* Select */
#adr_pobox {}
#adr_extended {}
@@ -92,17 +112,44 @@ dl.addresscard .action { float: right; }
#file_upload_form { width: 0; height: 0; }
#file_upload_target, #import_upload_target, #crop_target { display:none; }
#file_upload_start, #import_upload_start { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0; z-index:1001; width:0; height:0;}
-#import_upload_start { width: 16px; height: 16px; margin: 0 0 0 0; }
+#import_upload_start { width: 20px; height: 20px; margin: 0 0 -24px 0; padding: 0;}
input[type="checkbox"] { width: 20px; height: 20px; vertical-align: bottom; }
.big { font-weight:bold; font-size:1.2em; }
.huge { font-weight:bold; font-size:1.5em; }
.propertycontainer dd { float: left; width: 25em; }
-.propertylist { clear: none; max-width: 28em; }
-.propertylist li.propertycontainer { white-space: nowrap; min-width: 35em; /*max-width: 30em;*/ display: block; clear: right; }
-.propertycontainer[data-element="EMAIL"] > input[type="email"] { min-width: 19em !important; float: left; }
-.propertycontainer[data-element="TEL"] > input[type="text"] { width: 10em !important; float: left; }
-.propertylist li > input[type="checkbox"],input[type="radio"] { float: left; clear: left; width: 20px; height: 20px; vertical-align: middle; }
+/*.propertylist { clear: none; max-width: 33em; }*/
+.propertylist li.propertycontainer { white-space: nowrap; min-width: 35em; display: block; clear: both; }
+.propertycontainer[data-element="EMAIL"] > input[type="email"],.propertycontainer[data-element="TEL"] > input[type="text"] { min-width: 12em !important; float: left; }
+.propertylist li > input[type="checkbox"],input[type="radio"] { float: left; clear: left; width: 16px; height: 16px; vertical-align: middle; padding: 0; }
.propertylist li > select { float: left; max-width: 8em; }
-.typelist[type="button"] { float: left; max-width: 10em; border: 0; background-color: #fff; color: #bbb} /* for multiselect */
+.propertylist li > .select_wrapper { float: left; overflow: hidden; color: #bbb; font-size: 0.8em; }
+.propertylist li > .select_wrapper select { float: left; overflow: hidden; color: #bbb; }
+.propertylist li > .select_wrapper select option { color: #777; }
+.propertylist li > .select_wrapper select:hover,.propertylist li > select:focus,.propertylist li > select:active { color: #777; }
+.propertylist li > .select_wrapper select.impp { margin-left: -23px; direction: rtl; }
+.propertylist li > .select_wrapper select.types { margin-right: -23px; }
+.propertylist li > input[type="checkbox"].impp { clear: none; }
+.propertylist li > label.xab { display: block; color: #bbb; float:left; clear: both; padding: 0.5em 0 0 2.5em; }
+.propertylist li > label.xab:hover { color: #777; }
+.typelist[type="button"] { float: left; max-width: 8em; border: 0; background-color: #fff; color: #bbb; box-shadow: none; } /* for multiselect */
.typelist[type="button"]:hover { color: #777; } /* for multiselect */
.addresslist { clear: both; font-weight: bold; }
+#ninjahelp { position: absolute; bottom: 0; left: 0; right: 0; padding: 1em; margin: 1em; opacity: 0.9; }
+#ninjahelp .close { position: absolute; top: 5px; right: 5px; height: 20px; width: 20px; }
+#ninjahelp h2, .help-section h3 { width: 100%; font-weight: bold; text-align: center; }
+#ninjahelp h2 { font-size: 1.4em; }
+.help-section { width: 45%; min-width: 35em; float: left; }
+.help-section h3 { font-size: 1.2em; }
+.help-section dl { width: 100%; float: left; clear: right; margin: 0; padding: 0; cursor: normal; }
+.help-section dt { display: table-cell; clear: left; float: left; width: 35%; margin: 0; padding: 0.2em; text-align: right; text-overflow: ellipsis; vertical-align: text-bottom; font-weight: bold: }
+.help-section dd { display: table-cell; clear: right; float: left; margin: 0; padding: 0.2em; white-space: nowrap; vertical-align: text-bottom; }
+.contacts-settings dl { width: 100%; }
+.addressbooks-settings table { width: 100%; }
+.addressbooks-settings .actions { width: 100%; white-space: nowrap; }
+.addressbooks-settings .actions * { float: left; }
+.addressbooks-settings .actions input.name { width: 5em; }
+.addressbooks-settings .actions input.name { width: 7em; }
+.addressbooks-settings a.action { opacity: 0.2; }
+.addressbooks-settings a.action:hover { opacity: 1; }
+.addressbooks-settings td.active, .addressbooks-settings td.action { width: 20px; }
+
diff --git a/apps/contacts/css/jquery.Jcrop.css b/apps/contacts/css/jquery.Jcrop.css
index c9b24a5ebe9..a9ba4746e07 100644
--- a/apps/contacts/css/jquery.Jcrop.css
+++ b/apps/contacts/css/jquery.Jcrop.css
@@ -14,7 +14,7 @@
}
.jcrop-vline, .jcrop-hline {
- background: white url('%webroot%/apps/contacts/img/Jcrop.gif') top left repeat;
+ background: white url('%appswebroot%/contacts/img/Jcrop.gif') top left repeat;
font-size: 0px;
position: absolute;
}
diff --git a/apps/contacts/export.php b/apps/contacts/export.php
index 4e4ade2f2ba..161ca8047ac 100644
--- a/apps/contacts/export.php
+++ b/apps/contacts/export.php
@@ -9,22 +9,30 @@
OCP\User::checkLoggedIn();
OCP\App::checkAppEnabled('contacts');
-$bookid = isset($_GET['bookid']) ? $_GET['bookid'] : NULL;
-$contactid = isset($_GET['contactid']) ? $_GET['contactid'] : NULL;
+$bookid = isset($_GET['bookid']) ? $_GET['bookid'] : null;
+$contactid = isset($_GET['contactid']) ? $_GET['contactid'] : null;
$nl = "\n";
-if(isset($bookid)){
+if(isset($bookid)) {
$addressbook = OC_Contacts_App::getAddressbook($bookid);
- $cardobjects = OC_Contacts_VCard::all($bookid);
+ //$cardobjects = OC_Contacts_VCard::all($bookid);
header('Content-Type: text/directory');
- header('Content-Disposition: inline; filename=' . str_replace(' ', '_', $addressbook['displayname']) . '.vcf');
+ header('Content-Disposition: inline; filename='
+ . str_replace(' ', '_', $addressbook['displayname']) . '.vcf');
- foreach($cardobjects as $card) {
- echo $card['carddata'] . $nl;
+ $start = 0;
+ $batchsize = OCP\Config::getUserValue(OCP\User::getUser(),
+ 'contacts',
+ 'export_batch_size', 20);
+ while($cardobjects = OC_Contacts_VCard::all($bookid, $start, $batchsize)){
+ foreach($cardobjects as $card) {
+ echo $card['carddata'] . $nl;
+ }
+ $start += $batchsize;
}
-}elseif(isset($contactid)){
+}elseif(isset($contactid)) {
$data = OC_Contacts_App::getContactObject($contactid);
- header('Content-Type: text/directory');
- header('Content-Disposition: inline; filename=' . str_replace(' ', '_', $data['fullname']) . '.vcf');
+ header('Content-Type: text/vcard');
+ header('Content-Disposition: inline; filename='
+ . str_replace(' ', '_', $data['fullname']) . '.vcf');
echo $data['carddata'];
}
-?>
diff --git a/apps/contacts/img/contact-new.png b/apps/contacts/img/contact-new.png
index 087ad9ab2d3..a91f2e620fa 100644
--- a/apps/contacts/img/contact-new.png
+++ b/apps/contacts/img/contact-new.png
Binary files differ
diff --git a/apps/contacts/img/person.png b/apps/contacts/img/person.png
index 17e79196540..e88bb5653af 100644
--- a/apps/contacts/img/person.png
+++ b/apps/contacts/img/person.png
Binary files differ
diff --git a/apps/contacts/img/person_large.png b/apps/contacts/img/person_large.png
index 4edba0c5489..8293df61829 100644
--- a/apps/contacts/img/person_large.png
+++ b/apps/contacts/img/person_large.png
Binary files differ
diff --git a/apps/contacts/import.php b/apps/contacts/import.php
index 85d4cebeb02..1986d79f6d6 100644
--- a/apps/contacts/import.php
+++ b/apps/contacts/import.php
@@ -12,131 +12,139 @@ OCP\JSON::checkLoggedIn();
OCP\App::checkAppEnabled('contacts');
session_write_close();
-$cr = "\r";
$nl = "\n";
-$progressfile = 'import_tmp/' . md5(session_id()) . '.txt';
+
+global $progresskey;
+$progresskey = 'contacts.import-' . (isset($_GET['progresskey'])?$_GET['progresskey']:'');
+
+if (isset($_GET['progress']) && $_GET['progress']) {
+ echo OC_Cache::get($progresskey);
+ die;
+}
function writeProgress($pct) {
- if(is_writable('import_tmp/')){
- $progressfopen = fopen($progressfile, 'w');
- fwrite($progressfopen, $pct);
- fclose($progressfopen);
- }
+ global $progresskey;
+ OC_Cache::set($progresskey, $pct, 300);
}
writeProgress('10');
$view = $file = null;
if(isset($_POST['fstype']) && $_POST['fstype'] == 'OC_FilesystemView') {
$view = OCP\Files::getStorage('contacts');
- $file = $view->file_get_contents('/' . $_POST['file']);
+ $file = $view->file_get_contents('/imports/' . $_POST['file']);
} else {
$file = OC_Filesystem::file_get_contents($_POST['path'] . '/' . $_POST['file']);
}
if(!$file) {
- OCP\JSON::error(array('message' => 'Import file was empty.'));
+ OCP\JSON::error(array('data' => array('message' => 'Import file was empty.')));
exit();
}
-if(isset($_POST['method']) && $_POST['method'] == 'new'){
- $id = OC_Contacts_Addressbook::add(OCP\USER::getUser(), $_POST['addressbookname']);
+if(isset($_POST['method']) && $_POST['method'] == 'new') {
+ $id = OC_Contacts_Addressbook::add(OCP\USER::getUser(),
+ $_POST['addressbookname']);
if(!$id) {
- OCP\JSON::error(array('message' => 'Error creating address book.'));
+ OCP\JSON::error(
+ array(
+ 'data' => array('message' => 'Error creating address book.')
+ )
+ );
exit();
}
OC_Contacts_Addressbook::setActive($id, 1);
}else{
$id = $_POST['id'];
if(!$id) {
- OCP\JSON::error(array('message' => 'Error getting the ID of the address book.'));
+ OCP\JSON::error(
+ array(
+ 'data' => array(
+ 'message' => 'Error getting the ID of the address book.',
+ 'file'=>$_POST['file']
+ )
+ )
+ );
exit();
}
OC_Contacts_App::getAddressbook($id); // is owner access check
}
//analyse the contacts file
-writeProgress('20');
-$searchfor = array('VCARD');
-$parts = $searchfor;
-$filearr = explode($nl, $file);
-if(count($filearr) == 1) { // Mac eol
- $filearr = explode($cr, $file);
-}
+writeProgress('40');
+$file = str_replace(array("\r","\n\n"), array("\n","\n"), $file);
+$lines = explode($nl, $file);
$inelement = false;
$parts = array();
-$i = 0;
-foreach($filearr as $line){
- foreach($searchfor as $search){
- if(substr_count($line, $search) == 1){
- list($attr, $val) = explode(':', $line);
- if($attr == 'BEGIN'){
- $parts[]['begin'] = $i;
- $inelement = true;
- }
- if($attr == 'END'){
- $parts[count($parts) - 1]['end'] = $i;
- $inelement = false;
- }
- }
- }
- $i++;
-}
-//import the contacts
-writeProgress('40');
-$start = '';
-for ($i = 0; $i < $parts[0]['begin']; $i++) {
- if($i == 0){
- $start = $filearr[0];
- }else{
- $start .= $nl . $filearr[$i];
- }
-}
-$end = '';
-for($i = $parts[count($parts) - 1]['end'] + 1;$i <= count($filearr) - 1; $i++){
- if($i == $parts[count($parts) - 1]['end'] + 1){
- $end = $filearr[$parts[count($parts) - 1]['end'] + 1];
- }else{
- $end .= $nl . $filearr[$i];
+$card = array();
+foreach($lines as $line){
+ if(strtoupper(trim($line)) == 'BEGIN:VCARD') {
+ $inelement = true;
+ } elseif (strtoupper(trim($line)) == 'END:VCARD') {
+ $card[] = $line;
+ $parts[] = implode($nl, $card);
+ $card = array();
+ $inelement = false;
}
-}
-writeProgress('50');
-$importready = array();
-foreach($parts as $part){
- for($i = $part['begin']; $i <= $part['end'];$i++){
- if($i == $part['begin']){
- $content = $filearr[$i];
- }else{
- $content .= $nl . $filearr[$i];
- }
+ if ($inelement === true && trim($line) != '') {
+ $card[] = $line;
}
- $importready[] = $start . $nl . $content . $nl . $end;
}
+//import the contacts
writeProgress('70');
-if(count($parts) == 1){
- $importready = array($file);
-}
$imported = 0;
$failed = 0;
-if(!count($importready) > 0) {
- OCP\JSON::error(array('data' => (array('message' => 'No contacts to import in .'.$_POST['file'].' Please check if the file is corrupted.'))));
+if(!count($parts) > 0) {
+ OCP\JSON::error(
+ array(
+ 'data' => array(
+ 'message' => 'No contacts to import in '
+ . $_POST['file'].'. Please check if the file is corrupted.',
+ 'file'=>$_POST['file']
+ )
+ )
+ );
+ if(isset($_POST['fstype']) && $_POST['fstype'] == 'OC_FilesystemView') {
+ if(!$view->unlink('/imports/' . $_POST['file'])) {
+ OCP\Util::writeLog('contacts',
+ 'Import: Error unlinking OC_FilesystemView ' . '/' . $_POST['file'],
+ OCP\Util::ERROR);
+ }
+ }
exit();
}
-foreach($importready as $import){
- $card = OC_VObject::parse($import);
+foreach($parts as $part){
+ $card = OC_VObject::parse($part);
if (!$card) {
$failed += 1;
- OCP\Util::writeLog('contacts','Import: skipping card. Error parsing VCard: '.$import, OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts',
+ 'Import: skipping card. Error parsing VCard: ' . $part,
+ OCP\Util::ERROR);
continue; // Ditch cards that can't be parsed by Sabre.
}
- $imported += 1;
- OC_Contacts_VCard::add($id, $card);
+ try {
+ OC_Contacts_VCard::add($id, $card);
+ $imported += 1;
+ } catch (Exception $e) {
+ OCP\Util::writeLog('contacts',
+ 'Error importing vcard: ' . $e->getMessage() . $nl . $card,
+ OCP\Util::ERROR);
+ $failed += 1;
+ }
}
//done the import
writeProgress('100');
sleep(3);
-if(is_writable('import_tmp/')){
- unlink($progressfile);
-}
+OC_Cache::remove($progresskey);
if(isset($_POST['fstype']) && $_POST['fstype'] == 'OC_FilesystemView') {
- if(!$view->unlink('/' . $_POST['file'])) {
- OCP\Util::writeLog('contacts','Import: Error unlinking OC_FilesystemView ' . '/' . $_POST['file'], OCP\Util::ERROR);
+ if(!$view->unlink('/imports/' . $_POST['file'])) {
+ OCP\Util::writeLog('contacts',
+ 'Import: Error unlinking OC_FilesystemView ' . '/' . $_POST['file'],
+ OCP\Util::ERROR);
}
}
-OCP\JSON::success(array('data' => array('imported'=>$imported, 'failed'=>$failed)));
+OCP\JSON::success(
+ array(
+ 'data' => array(
+ 'imported'=>$imported,
+ 'failed'=>$failed,
+ 'file'=>$_POST['file'],
+ )
+ )
+);
diff --git a/apps/contacts/import_tmp/Info b/apps/contacts/import_tmp/Info
deleted file mode 100644
index abafbce435c..00000000000
--- a/apps/contacts/import_tmp/Info
+++ /dev/null
@@ -1,2 +0,0 @@
-This folder contains static files with the percentage of the import.
-Requires write permission
diff --git a/apps/contacts/index.php b/apps/contacts/index.php
index 994539e9fce..f16d6f5641f 100644
--- a/apps/contacts/index.php
+++ b/apps/contacts/index.php
@@ -14,31 +14,28 @@ OCP\App::checkAppEnabled('contacts');
// Get active address books. This creates a default one if none exists.
$ids = OC_Contacts_Addressbook::activeIds(OCP\USER::getUser());
-$allcontacts = OC_Contacts_VCard::all($ids);
-$contacts = array();
-foreach($allcontacts as $contact) { // try to conserve some memory
- $contacts[] = array('id' => $contact['id'], 'addressbookid' => $contact['addressbookid'], 'fullname' => $contact['fullname']);
+$has_contacts = (count(OC_Contacts_VCard::all($ids, 0, 1)) > 0
+ ? true
+ : false); // just to check if there are any contacts.
+if($has_contacts === false) {
+ OCP\Util::writeLog('contacts',
+ 'index.html: No contacts found.',
+ OCP\Util::DEBUG);
}
-unset($allcontacts);
-$addressbooks = OC_Contacts_Addressbook::active(OCP\USER::getUser());
// Load the files we need
-OCP\App::setActiveNavigationEntry( 'contacts_index' );
+OCP\App::setActiveNavigationEntry('contacts_index');
// Load a specific user?
$id = isset( $_GET['id'] ) ? $_GET['id'] : null;
-$details = array();
-
-if(is_null($id) && count($contacts) > 0) {
- $id = $contacts[0]['id'];
-}
-if(!is_null($id)) {
- $vcard = OC_Contacts_App::getContactVCard($id);
- $details = OC_Contacts_VCard::structureContact($vcard);
-}
-$property_types = OC_Contacts_App::getAddPropertyOptions();
+$impp_types = OC_Contacts_App::getTypesOfProperty('IMPP');
$phone_types = OC_Contacts_App::getTypesOfProperty('TEL');
$email_types = OC_Contacts_App::getTypesOfProperty('EMAIL');
+$ims = OC_Contacts_App::getIMOptions();
+$im_protocols = array();
+foreach($ims as $name => $values) {
+ $im_protocols[$name] = $values['displayname'];
+}
$categories = OC_Contacts_App::getCategories();
$upload_max_filesize = OCP\Util::computerFileSize(ini_get('upload_max_filesize'));
@@ -46,33 +43,32 @@ $post_max_size = OCP\Util::computerFileSize(ini_get('post_max_size'));
$maxUploadFilesize = min($upload_max_filesize, $post_max_size);
$freeSpace=OC_Filesystem::free_space('/');
-$freeSpace=max($freeSpace,0);
-$maxUploadFilesize = min($maxUploadFilesize ,$freeSpace);
+$freeSpace=max($freeSpace, 0);
+$maxUploadFilesize = min($maxUploadFilesize, $freeSpace);
-OCP\Util::addscript('','jquery.multiselect');
-OCP\Util::addscript('','oc-vcategories');
-OCP\Util::addscript('contacts','contacts');
-OCP\Util::addscript('contacts','expanding');
-OCP\Util::addscript('contacts','jquery.combobox');
-OCP\Util::addscript('contacts','jquery.inview');
-OCP\Util::addscript('contacts','jquery.Jcrop');
-OCP\Util::addscript('contacts','jquery.multi-autocomplete');
-OCP\Util::addStyle('','jquery.multiselect');
-OCP\Util::addStyle('contacts','jquery.combobox');
-OCP\Util::addStyle('contacts','jquery.Jcrop');
-OCP\Util::addStyle('contacts','contacts');
+OCP\Util::addscript('', 'jquery.multiselect');
+OCP\Util::addscript('', 'oc-vcategories');
+OCP\Util::addscript('contacts', 'contacts');
+OCP\Util::addscript('contacts', 'expanding');
+OCP\Util::addscript('contacts', 'jquery.combobox');
+OCP\Util::addscript('files', 'jquery.fileupload');
+OCP\Util::addscript('contacts', 'jquery.inview');
+OCP\Util::addscript('contacts', 'jquery.Jcrop');
+OCP\Util::addscript('contacts', 'jquery.multi-autocomplete');
+OCP\Util::addStyle('', 'jquery.multiselect');
+OCP\Util::addStyle('contacts', 'jquery.combobox');
+OCP\Util::addStyle('contacts', 'jquery.Jcrop');
+OCP\Util::addStyle('contacts', 'contacts');
$tmpl = new OCP\Template( "contacts", "index", "user" );
-$tmpl->assign('uploadMaxFilesize', $maxUploadFilesize);
-$tmpl->assign('uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize));
-$tmpl->assign('property_types', $property_types);
-$tmpl->assign('phone_types', $phone_types);
-$tmpl->assign('email_types', $email_types);
-$tmpl->assign('categories', $categories);
-$tmpl->assign('addressbooks', $addressbooks);
-$tmpl->assign('contacts', $contacts);
-$tmpl->assign('details', $details );
-$tmpl->assign('id',$id);
+$tmpl->assign('uploadMaxFilesize', $maxUploadFilesize, false);
+$tmpl->assign('uploadMaxHumanFilesize',
+ OCP\Util::humanFileSize($maxUploadFilesize), false);
+$tmpl->assign('phone_types', $phone_types, false);
+$tmpl->assign('email_types', $email_types, false);
+$tmpl->assign('impp_types', $impp_types, false);
+$tmpl->assign('categories', $categories, false);
+$tmpl->assign('im_protocols', $im_protocols, false);
+$tmpl->assign('has_contacts', $has_contacts, false);
+$tmpl->assign('id', $id, false);
$tmpl->printPage();
-
-?>
diff --git a/apps/contacts/js/contacts.js b/apps/contacts/js/contacts.js
index 7f260ea54d9..09cf26bf7fe 100644
--- a/apps/contacts/js/contacts.js
+++ b/apps/contacts/js/contacts.js
@@ -10,1588 +10,1998 @@ String.prototype.strip_tags = function(){
return stripped;
};
-Contacts={
- UI:{
- notification:function(msg, ndata) {
- $('#notification').text(msg);
- if(data) {
- $('#notification').data(ndata[0],ndata[1]);
- }
- $('#notification').fadeIn();
- setTimeout($('#notification').fadeOut(), 10000);
- },
- notImplemented:function() {
- OC.dialogs.alert(t('contacts', 'Sorry, this functionality has not been implemented yet'), t('contacts', 'Not implemented'));
- },
- searchOSM:function(obj) {
- var adr = Contacts.UI.propertyContainerFor(obj).find('.adr').val();
- if(adr == undefined) {
- OC.dialogs.alert(t('contacts', 'Couldn\'t get a valid address.'), t('contacts', 'Error'));
- return;
- }
- // FIXME: I suck at regexp. /Tanghus
- var adrarr = adr.split(';');
- var adrstr = '';
- if(adrarr[2].trim() != '') {
- adrstr = adrstr + adrarr[2].trim() + ',';
- }
- if(adrarr[3].trim() != '') {
- adrstr = adrstr + adrarr[3].trim() + ',';
+OC.Contacts={
+ /**
+ * Arguments:
+ * message: The text message to show.
+ * timeout: The timeout in seconds before the notification disappears. Default 10.
+ * timeouthandler: A function to run on timeout.
+ * clickhandler: A function to run on click. If a timeouthandler is given it will be cancelled.
+ * data: An object that will be passed as argument to the timeouthandler and clickhandler functions.
+ * cancel: If set cancel all ongoing timer events and hide the notification.
+ */
+ notify:function(params) {
+ var self = this;
+ if(!self.notifier) {
+ self.notifier = $('#notification');
+ }
+ if(params.cancel) {
+ self.notifier.off('click');
+ for(var id in self.notifier.data()) {
+ if($.isNumeric(id)) {
+ clearTimeout(parseInt(id));
+ }
}
- if(adrarr[4].trim() != '') {
- adrstr = adrstr + adrarr[4].trim() + ',';
+ self.notifier.text('').fadeOut().removeData();
+ return;
+ }
+ self.notifier.text(params.message);
+ self.notifier.fadeIn();
+ self.notifier.on('click', function() { $(this).fadeOut();});
+ var timer = setTimeout(function() {
+ if(!self || !self.notifier) {
+ var self = OC.Contacts;
+ self.notifier = $('#notification');
}
- if(adrarr[5].trim() != '') {
- adrstr = adrstr + adrarr[5].trim() + ',';
+ self.notifier.fadeOut();
+ if(params.timeouthandler && $.isFunction(params.timeouthandler)) {
+ params.timeouthandler(self.notifier.data(dataid));
+ self.notifier.off('click');
+ self.notifier.removeData(dataid);
}
- if(adrarr[6].trim() != '') {
- adrstr = adrstr + adrarr[6].trim();
+ }, params.timeout && $.isNumeric(params.timeout) ? parseInt(params.timeout)*1000 : 10000);
+ var dataid = timer.toString();
+ if(params.data) {
+ self.notifier.data(dataid, params.data);
+ }
+ if(params.clickhandler && $.isFunction(params.clickhandler)) {
+ self.notifier.on('click', function() {
+ if(!self || !self.notifier) {
+ var self = OC.Contacts;
+ self.notifier = $(this);
+ }
+ clearTimeout(timer);
+ self.notifier.off('click');
+ params.clickhandler(self.notifier.data(dataid));
+ self.notifier.removeData(dataid);
+ });
+ }
+ },
+ notImplemented:function() {
+ OC.dialogs.alert(t('contacts', 'Sorry, this functionality has not been implemented yet'), t('contacts', 'Not implemented'));
+ },
+ searchOSM:function(obj) {
+ var adr = OC.Contacts.propertyContainerFor(obj).find('.adr').val();
+ if(adr == undefined) {
+ OC.dialogs.alert(t('contacts', 'Couldn\'t get a valid address.'), t('contacts', 'Error'));
+ return;
+ }
+ // FIXME: I suck at regexp. /Tanghus
+ var adrarr = adr.split(';');
+ var adrstr = '';
+ if(adrarr[2].trim() != '') {
+ adrstr = adrstr + adrarr[2].trim() + ',';
+ }
+ if(adrarr[3].trim() != '') {
+ adrstr = adrstr + adrarr[3].trim() + ',';
+ }
+ if(adrarr[4].trim() != '') {
+ adrstr = adrstr + adrarr[4].trim() + ',';
+ }
+ if(adrarr[5].trim() != '') {
+ adrstr = adrstr + adrarr[5].trim() + ',';
+ }
+ if(adrarr[6].trim() != '') {
+ adrstr = adrstr + adrarr[6].trim();
+ }
+ adrstr = encodeURIComponent(adrstr);
+ var uri = 'http://open.mapquestapi.com/nominatim/v1/search.php?q=' + adrstr + '&limit=10&addressdetails=1&polygon=1&zoom=';
+ var newWindow = window.open(uri,'_blank');
+ newWindow.focus();
+ },
+ mailTo:function(obj) {
+ var adr = OC.Contacts.propertyContainerFor($(obj)).find('input[type="email"]').val().trim();
+ if(adr == '') {
+ OC.dialogs.alert(t('contacts', 'Please enter an email address.'), t('contacts', 'Error'));
+ return;
+ }
+ window.location.href='mailto:' + adr;
+ },
+ propertyContainerFor:function(obj) {
+ return $(obj).parents('.propertycontainer').first();
+ },
+ checksumFor:function(obj) {
+ return $(obj).parents('.propertycontainer').first().data('checksum');
+ },
+ propertyTypeFor:function(obj) {
+ return $(obj).parents('.propertycontainer').first().data('element');
+ },
+ loading:function(obj, state) {
+ if(state) {
+ $(obj).addClass('loading');
+ } else {
+ $(obj).removeClass('loading');
+ }
+ },
+ showCardDAVUrl:function(username, bookname){
+ $('#carddav_url').val(totalurl + '/' + username + '/' + decodeURIComponent(bookname));
+ $('#carddav_url').show();
+ $('#carddav_url_close').show();
+ },
+ loadListHandlers:function() {
+ $('.propertylist li a.delete').unbind('click');
+ $('.propertylist li a.delete').unbind('keydown');
+ var deleteItem = function(obj) {
+ obj.tipsy('hide');
+ OC.Contacts.Card.deleteProperty(obj, 'list');
+ }
+ $('.propertylist li a.delete, .addresscard .delete').click(function() { deleteItem($(this)) });
+ $('.propertylist li a.delete, .addresscard .delete').keydown(function() { deleteItem($(this)) });
+ $('.propertylist li a.mail').click(function() { OC.Contacts.mailTo(this) });
+ $('.propertylist li a.mail').keydown(function() { OC.Contacts.mailTo(this) });
+ $('.addresscard .globe').click(function() { $(this).tipsy('hide');OC.Contacts.searchOSM(this); });
+ $('.addresscard .globe').keydown(function() { $(this).tipsy('hide');OC.Contacts.searchOSM(this); });
+ $('.addresscard .edit').click(function() { $(this).tipsy('hide');OC.Contacts.Card.editAddress(this, false); });
+ $('.addresscard .edit').keydown(function() { $(this).tipsy('hide');OC.Contacts.Card.editAddress(this, false); });
+ $('.addresscard,.propertylist li,.propertycontainer').hover(
+ function () {
+ $(this).find('.globe,.mail,.delete,.edit').animate({ opacity: 1.0 }, 200, function() {});
+ },
+ function () {
+ $(this).find('.globe,.mail,.delete,.edit').animate({ opacity: 0.1 }, 200, function() {});
}
- adrstr = encodeURIComponent(adrstr);
- var uri = 'http://open.mapquestapi.com/nominatim/v1/search.php?q=' + adrstr + '&limit=10&addressdetails=1&polygon=1&zoom=';
- var newWindow = window.open(uri,'_blank');
+ );
+ },
+ loadHandlers:function() {
+ var deleteItem = function(obj) {
+ obj.tipsy('hide');
+ OC.Contacts.Card.deleteProperty(obj, 'single');
+ }
+ var goToUrl = function(obj) {
+ var url = OC.Contacts.propertyContainerFor(obj).find('#url').val();
+ if(url != '') {
+ var newWindow = window.open(url,'_blank');
newWindow.focus();
- },
- mailTo:function(obj) {
- var adr = Contacts.UI.propertyContainerFor($(obj)).find('input[type="email"]').val().trim();
- if(adr == '') {
- OC.dialogs.alert(t('contacts', 'Please enter an email address.'), t('contacts', 'Error'));
- return;
}
- window.location.href='mailto:' + adr;
- },
- propertyContainerFor:function(obj) {
- return $(obj).parents('.propertycontainer').first();
- },
- checksumFor:function(obj) {
- return $(obj).parents('.propertycontainer').first().data('checksum');
- },
- propertyTypeFor:function(obj) {
- return $(obj).parents('.propertycontainer').first().data('element');
- },
- loading:function(obj, state) {
- if(state) {
- $(obj).addClass('loading');
- } else {
- $(obj).removeClass('loading');
+ }
+
+ $('#identityprops a.delete').click( function() { deleteItem($(this)) });
+ $('#identityprops a.delete').keydown( function() { deleteItem($(this)) });
+ $('#categories_value a.edit').click( function() { $(this).tipsy('hide');OCCategories.edit(); } );
+ $('#categories_value a.edit').keydown( function() { $(this).tipsy('hide');OCCategories.edit(); } );
+ $('#url_value a.globe').click( function() { $(this).tipsy('hide');goToUrl($(this)); } );
+ $('#url_value a.globe').keydown( function() { $(this).tipsy('hide');goToUrl($(this)); } );
+ $('#fn_select').combobox({
+ 'id': 'fn',
+ 'name': 'value',
+ 'classes': ['contacts_property', 'nonempty', 'huge', 'tip', 'float'],
+ 'attributes': {'placeholder': t('contacts', 'Enter name')},
+ 'title': t('contacts', 'Format custom, Short name, Full name, Reverse or Reverse with comma')});
+ $('#bday').datepicker({
+ dateFormat : 'dd-mm-yy'
+ });
+ // Style phone types
+ $('#phonelist').find('select.contacts_property').multiselect({
+ noneSelectedText: t('contacts', 'Select type'),
+ header: false,
+ selectedList: 4,
+ classes: 'typelist'
+ });
+ $('#edit_name').click(function(){OC.Contacts.Card.editName()});
+ $('#edit_name').keydown(function(){OC.Contacts.Card.editName()});
+
+ $('#phototools li a').click(function() {
+ $(this).tipsy('hide');
+ });
+ $('#contacts_details_photo_wrapper').hover(
+ function () {
+ $('#phototools').slideDown(200);
+ },
+ function () {
+ $('#phototools').slideUp(200);
}
- },
- showCardDAVUrl:function(username, bookname){
- $('#carddav_url').val(totalurl + '/' + username + '/' + bookname);
- $('#carddav_url').show();
- $('#carddav_url_close').show();
- },
- loadListHandlers:function() {
- $('.propertylist li a.delete').unbind('click');
- $('.propertylist li a.delete').unbind('keydown');
- var deleteItem = function(obj) {
- obj.tipsy('hide');
- Contacts.UI.Card.deleteProperty(obj, 'list');
- }
- $('.propertylist li a.delete, .addresscard .delete').click(function() { deleteItem($(this)) });
- $('.propertylist li a.delete, .addresscard .delete').keydown(function() { deleteItem($(this)) });
- $('.propertylist li a.mail').click(function() { Contacts.UI.mailTo(this) });
- $('.propertylist li a.mail').keydown(function() { Contacts.UI.mailTo(this) });
- $('.addresscard .globe').click(function() { $(this).tipsy('hide');Contacts.UI.searchOSM(this); });
- $('.addresscard .globe').keydown(function() { $(this).tipsy('hide');Contacts.UI.searchOSM(this); });
- $('.addresscard .edit').click(function() { $(this).tipsy('hide');Contacts.UI.Card.editAddress(this, false); });
- $('.addresscard .edit').keydown(function() { $(this).tipsy('hide');Contacts.UI.Card.editAddress(this, false); });
- $('.addresscard,.propertylist li,.propertycontainer').hover(
- function () {
- $(this).find('.globe,.mail,.delete,.edit').animate({ opacity: 1.0 }, 200, function() {});
- },
- function () {
- $(this).find('.globe,.mail,.delete,.edit').animate({ opacity: 0.1 }, 200, function() {});
- }
- );
- },
- loadHandlers:function() {
- var deleteItem = function(obj) {
- obj.tipsy('hide');
- Contacts.UI.Card.deleteProperty(obj, 'single');
- }
- $('#identityprops a.delete').click( function() { deleteItem($(this)) });
- $('#identityprops a.delete').keydown( function() { deleteItem($(this)) });
- $('#categories_value a.edit').click( function() { $(this).tipsy('hide');OCCategories.edit(); } );
- $('#categories_value a.edit').keydown( function() { $(this).tipsy('hide');OCCategories.edit(); } );
- $('#fn_select').combobox({
- 'id': 'fn',
- 'name': 'value',
- 'classes': ['contacts_property', 'nonempty', 'huge', 'tip', 'float'],
- 'attributes': {'placeholder': t('contacts', 'Enter name')},
- 'title': t('contacts', 'Format custom, Short name, Full name, Reverse or Reverse with comma')});
- $('#bday').datepicker({
- dateFormat : 'dd-mm-yy'
- });
- // Style phone types
- $('#phonelist').find('select.contacts_property').multiselect({
- noneSelectedText: t('contacts', 'Select type'),
- header: false,
- selectedList: 4,
- classes: 'typelist'
- });
- $('#edit_name').click(function(){Contacts.UI.Card.editName()});
- $('#edit_name').keydown(function(){Contacts.UI.Card.editName()});
-
- /* Initialize the photo edit dialog */
- $('#edit_photo_dialog').dialog({ autoOpen: false, modal: true, height: 'auto', width: 'auto' });
- $('#edit_photo_dialog' ).dialog( 'option', 'buttons', [
- {
- text: "Ok",
- click: function() {
- Contacts.UI.Card.savePhoto(this);
- $(this).dialog('close');
- }
- },
- {
- text: "Cancel",
- click: function() { $(this).dialog('close'); }
- }
- ] );
-
- /*$('#fn').blur(function(){
- if($('#fn').val() == '') {
- OC.dialogs.alert(t('contacts','The name field cannot be empty. Please enter a name for this contact.'), t('contacts','Name is empty'), function() { $('#fn').focus(); });
- $('#fn').focus();
- return false;
- }
- });*/
-
- // Name has changed. Update it and reorder.
- $('#fn').change(function(){
- var name = $('#fn').val().strip_tags();
- var item = $('#contacts [data-id="'+Contacts.UI.Card.id+'"]');
- $(item).find('a').html(name);
- Contacts.UI.Card.fn = name;
- var added = false;
- $('#contacts li').each(function(){
- if ($(this).text().toLowerCase() > name.toLowerCase()) {
- $(this).before(item).fadeIn('fast');
- added = true;
- return false;
- }
- });
- if(!added) {
- $('#leftcontent ul').append(item);
+ );
+ $('#phototools').hover(
+ function () {
+ $(this).removeClass('transparent');
+ },
+ function () {
+ $(this).addClass('transparent');
+ }
+ );
+ $('#phototools .upload').click(function() {
+ $('#file_upload_start').trigger('click');
+ });
+ $('#phototools .cloud').click(function() {
+ OC.dialogs.filepicker(t('contacts', 'Select photo'), OC.Contacts.Card.cloudPhotoSelected, false, 'image', true);
+ });
+ /* Initialize the photo edit dialog */
+ $('#edit_photo_dialog').dialog({
+ autoOpen: false, modal: true, height: 'auto', width: 'auto'
+ });
+ $('#edit_photo_dialog' ).dialog( 'option', 'buttons', [
+ {
+ text: "Ok",
+ click: function() {
+ OC.Contacts.Card.savePhoto(this);
+ $(this).dialog('close');
}
- Contacts.UI.Contacts.scrollTo(Contacts.UI.Card.id);
- });
+ },
+ {
+ text: "Cancel",
+ click: function() { $(this).dialog('close'); }
+ }
+ ] );
- $('#contacts_deletecard').click( function() { Contacts.UI.Card.doDelete();return false;} );
- $('#contacts_deletecard').keydown( function(event) {
- if(event.which == 13) {
- Contacts.UI.Card.doDelete();
- }
- return false;
- });
+ // Name has changed. Update it and reorder.
+ $('#fn').change(function(){
+ var name = $('#fn').val().strip_tags();
+ var item = $('.contacts li[data-id="'+OC.Contacts.Card.id+'"]').detach();
+ $(item).find('a').html(name);
+ OC.Contacts.Card.fn = name;
+ OC.Contacts.Contacts.insertContact({contact:item});
+ OC.Contacts.Contacts.scrollTo(OC.Contacts.Card.id);
+ });
- $('#contacts_downloadcard').click( function() { Contacts.UI.Card.doExport();return false;} );
- $('#contacts_downloadcard').keydown( function(event) {
- if(event.which == 13) {
- Contacts.UI.Card.doExport();
- }
- return false;
- });
+ $('#contacts_deletecard').click( function() { OC.Contacts.Card.delayedDelete();return false;} );
+ $('#contacts_deletecard').keydown( function(event) {
+ if(event.which == 13 || event.which == 32) {
+ OC.Contacts.Card.delayedDelete();
+ }
+ return false;
+ });
- // Profile picture upload handling
- // New profile picture selected
- $('#file_upload_start').change(function(){
- Contacts.UI.Card.uploadPhoto(this.files);
- });
- $('#contacts_details_photo_wrapper').bind('dragover',function(event){
- $(event.target).addClass('droppable');
- event.stopPropagation();
- event.preventDefault();
- });
- $('#contacts_details_photo_wrapper').bind('dragleave',function(event){
- $(event.target).removeClass('droppable');
- //event.stopPropagation();
- //event.preventDefault();
- });
- $('#contacts_details_photo_wrapper').bind('drop',function(event){
- event.stopPropagation();
- event.preventDefault();
- $(event.target).removeClass('droppable');
- $.fileUpload(event.originalEvent.dataTransfer.files);
- });
+ $('#contacts_downloadcard').click( function() { OC.Contacts.Card.doExport();return false;} );
+ $('#contacts_downloadcard').keydown( function(event) {
+ if(event.which == 13 || event.which == 32) {
+ OC.Contacts.Card.doExport();
+ }
+ return false;
+ });
- $('#categories').multiple_autocomplete({source: categories});
- $('#contacts_deletecard').tipsy({gravity: 'ne'});
- $('#contacts_downloadcard').tipsy({gravity: 'ne'});
- $('#contacts_propertymenu_button').tipsy();
- $('#contacts_newcontact, #chooseaddressbook').tipsy({gravity: 'sw'});
- },
- Card:{
- id:'',
- fn:'',
- fullname:'',
- shortname:'',
- famname:'',
- givname:'',
- addname:'',
- honpre:'',
- honsuf:'',
- data:undefined,
- update:function(id) {
- var newid;
- if(!id) {
- newid = $('#contacts li:first-child').data('id');
- } else {
- newid = id;
- }
- var localLoadContact = function(id) {
- if($('#contacts li').length > 0) {
- $('#leftcontent li[data-id="'+newid+'"]').addClass('active');
- $.getJSON(OC.filePath('contacts', 'ajax', 'contactdetails.php'),{'id':newid},function(jsondata){
- if(jsondata.status == 'success'){
- Contacts.UI.Card.loadContact(jsondata.data);
- } else {
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
+ // Profile picture upload handling
+ // New profile picture selected
+ $('#file_upload_start').change(function(){
+ OC.Contacts.Card.uploadPhoto(this.files);
+ });
+ $('#contacts_details_photo_wrapper').bind('dragover',function(event){
+ $(event.target).addClass('droppable');
+ event.stopPropagation();
+ event.preventDefault();
+ });
+ $('#contacts_details_photo_wrapper').bind('dragleave',function(event){
+ $(event.target).removeClass('droppable');
+ });
+ $('#contacts_details_photo_wrapper').bind('drop',function(event){
+ event.stopPropagation();
+ event.preventDefault();
+ $(event.target).removeClass('droppable');
+ $.fileUpload(event.originalEvent.dataTransfer.files);
+ });
+
+ $('#categories').multiple_autocomplete({source: categories});
+ $('#contacts_deletecard').tipsy({gravity: 'ne'});
+ $('#contacts_downloadcard').tipsy({gravity: 'ne'});
+ $('#contacts_propertymenu_button').tipsy();
+ $('#contacts_newcontact, #contacts_import, #bottomcontrols .settings').tipsy({gravity: 'sw'});
+
+ $('body').click(function(e){
+ if(!$(e.target).is('#contacts_propertymenu_button')) {
+ $('#contacts_propertymenu_dropdown').hide();
+ }
+ });
+ function propertyMenu(){
+ var menu = $('#contacts_propertymenu_dropdown');
+ if(menu.is(':hidden')) {
+ menu.show();
+ menu.find('li').first().focus();
+ } else {
+ menu.hide();
+ }
+ }
+ $('#contacts_propertymenu_button').click(propertyMenu);
+ $('#contacts_propertymenu_button').keydown(propertyMenu);
+ function propertyMenuItem(){
+ var type = $(this).data('type');
+ OC.Contacts.Card.addProperty(type);
+ $('#contacts_propertymenu_dropdown').hide();
+ }
+ $('#contacts_propertymenu_dropdown a').click(propertyMenuItem);
+ $('#contacts_propertymenu_dropdown a').keydown(propertyMenuItem);
+ },
+ Card:{
+ update:function(params) { // params {cid:int, aid:int}
+ if(!params) { params = {}; }
+ $('#contacts li,#contacts h3').removeClass('active');
+ console.log('Card, cid: ' + params.cid + ' aid: ' + params.aid);
+ var newid, bookid, firstitem;
+ if(!parseInt(params.cid) && !parseInt(params.aid)) {
+ firstitem = $('#contacts ul').find('li:first-child');
+ if(firstitem.length > 0) {
+ if(firstitem.length > 1) {
+ firstitem = firstitem.first();
}
+ newid = parseInt(firstitem.data('id'));
+ bookid = parseInt(firstitem.data('bookid'));
+ }
+ } else if(!parseInt(params.cid) && parseInt(params.aid)) {
+ bookid = parseInt(params.aid);
+ newid = parseInt($('#contacts').find('li[data-bookid="'+bookid+'"]').first().data('id'));
+ } else if(parseInt(params.cid) && !parseInt(params.aid)) {
+ newid = parseInt(params.cid);
+ var listitem = OC.Contacts.Contacts.getContact(newid); //$('#contacts li[data-id="'+newid+'"]');
+ console.log('Is contact in list? ' + listitem.length);
+ if(listitem.length) {
+ //bookid = parseInt($('#contacts li[data-id="'+newid+'"]').data('bookid'));
+ bookid = parseInt(OC.Contacts.Contacts.getContact(newid).data('bookid'));
+ } else { // contact isn't in list yet.
+ bookid = 'unknown';
}
-
- // Make sure proper DOM is loaded.
- if(!$('#card')[0]) {
- $.getJSON(OC.filePath('contacts', 'ajax', 'loadcard.php'),{},function(jsondata){
- if(jsondata.status == 'success'){
- $('#rightcontent').html(jsondata.data.page).ready(function() {
- Contacts.UI.loadHandlers();
- localLoadContact(newid);
- });
- } else {
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- }
- else if($('#contacts li').length == 0) {
- // load intro page
- $.getJSON(OC.filePath('contacts', 'ajax', 'loadintro.php'),{},function(jsondata){
+ } else {
+ newid = parseInt(params.cid);
+ bookid = parseInt(params.aid);
+ }
+ if(!bookid || !newid) {
+ bookid = parseInt($('#contacts h3').first().data('id'));
+ newid = parseInt($('#contacts').find('li[data-bookid="'+bookid+'"]').first().data('id'));
+ }
+ console.log('newid: ' + newid + ' bookid: ' +bookid);
+ var localLoadContact = function(newid, bookid) {
+ if($('.contacts li').length > 0) {
+ $.getJSON(OC.filePath('contacts', 'ajax', 'contact/details.php'),{'id':newid},function(jsondata){
if(jsondata.status == 'success'){
- id = '';
- $('#rightcontent').data('id','');
- $('#rightcontent').html(jsondata.data.page);
+ if(bookid == 'unknown') {
+ bookid = jsondata.data.addressbookid;
+ var contact = OC.Contacts.Contacts.insertContact({
+ contactlist:$('#contacts ul[data-id="'+bookid+'"]'),
+ data:jsondata.data
+ });
+ }
+ $('#contacts li[data-id="'+newid+'"],#contacts h3[data-id="'+bookid+'"]').addClass('active');
+ $('#contacts ul[data-id="'+bookid+'"]').slideDown(300);
+ OC.Contacts.Card.loadContact(jsondata.data, bookid);
+ OC.Contacts.Contacts.scrollTo(newid);
} else {
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
}
});
}
- else {
- localLoadContact();
- }
- },
- doExport:function() {
- document.location.href = OC.linkTo('contacts', 'export.php') + '?contactid=' + this.id;
- },
- doImport:function(){
- Contacts.UI.notImplemented();
- },
- editNew:function(){ // add a new contact
- this.id = ''; this.bookid = '', this.fn = ''; this.fullname = ''; this.givname = ''; this.famname = ''; this.addname = ''; this.honpre = ''; this.honsuf = '';
- self = this;
- $.getJSON(OC.filePath('contacts', 'ajax', 'selectaddressbook.php'),{},function(jsondata) {
- if(jsondata.status == 'success') {
- if(jsondata.data.type == 'dialog') {
- // Load dialog to select addressbook.
- if($('#selectaddressbook_dialog').dialog('isOpen') == true) {
- $('#selectaddressbook_dialog').dialog('moveToTop');
- } else {
- $('#dialog_holder').html(jsondata.data.page).ready(function($) {
- $('#selectaddressbook_dialog').dialog({
- modal: true, height: 'auto', width: 'auto',
- buttons: {
- 'Ok':function() {
- Contacts.UI.Card.add(';;;;;', '',$('#selectaddressbook_dialog').find('input:checked').val(), true);
- $(this).dialog('close');
- },
- 'Cancel':function() { $(this).dialog('close'); }
- },
- close: function(event, ui) {
- $(this).dialog('destroy').remove();
- }
- });
- });
- }
- } else {
- Contacts.UI.Card.bookid = jsondata.data.id;
- Contacts.UI.Card.add(';;;;;', '',jsondata.data.id, true);
- }
+ }
+
+ // Make sure proper DOM is loaded.
+ if(!$('#card').length && newid) {
+ console.log('Loading card DOM');
+ $.getJSON(OC.filePath('contacts', 'ajax', 'loadcard.php'),{requesttoken:requesttoken},function(jsondata){
+ if(jsondata.status == 'success'){
+ $('#rightcontent').html(jsondata.data.page).ready(function() {
+ OC.Contacts.loadHandlers();
+ localLoadContact(newid, bookid);
+ });
} else {
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
}
});
- return false;
- },
- add:function(n, fn, aid, isnew){ // add a new contact
- var localAddcontact = function(n, fn, aid, isnew) {
- $.post(OC.filePath('contacts', 'ajax', 'addcontact.php'), { n: n, fn: fn, aid: aid, isnew: isnew },
- function(jsondata) {
- if (jsondata.status == 'success'){
- $('#rightcontent').data('id',jsondata.data.id);
- var id = jsondata.data.id;
- $.getJSON(OC.filePath('contacts', 'ajax', 'contactdetails.php'),{'id':id},function(jsondata){
- if(jsondata.status == 'success'){
- Contacts.UI.Card.loadContact(jsondata.data);
- $('#leftcontent .active').removeClass('active');
- var item = $('<li role="button" data-id="'+jsondata.data.id+'" data-book-id="'+aid+'" class="active"><a href="index.php?id='+jsondata.data.id+'" style="background: url('+OC.filePath('contacts', '', 'thumbnail.php')+'?id='+jsondata.data.id+') no-repeat scroll 0% 0% transparent;">'+Contacts.UI.Card.fn+'</a></li>');
- var added = false;
- $('#leftcontent ul li').each(function(){
- if ($(this).text().toLowerCase() > Contacts.UI.Card.fn.toLowerCase()) {
- $(this).before(item).fadeIn('fast');
- added = true;
- return false;
- }
- });
- if(!added) {
- $('#leftcontent ul').append(item);
- }
- if(isnew) { // add some default properties
- Contacts.UI.Card.addProperty('EMAIL');
- Contacts.UI.Card.addProperty('TEL');
- $('#fn').focus();
- }
- }
- else{
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- $('#contact_identity').show();
- $('#actionbar').show();
- }
- else{
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- }
-
- var card = $('#card')[0];
- if(!card) {
- $.getJSON(OC.filePath('contacts', 'ajax', 'loadcard.php'),{},function(jsondata){
- if(jsondata.status == 'success'){
- $('#rightcontent').html(jsondata.data.page).ready(function() {
- Contacts.UI.loadHandlers();
- localAddcontact(n, fn, aid, isnew);
- });
- } else{
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- } else {
- localAddcontact(n, fn, aid, isnew);
- }
- },
- doDelete:function() {
- $('#contacts_deletecard').tipsy('hide');
- OC.dialogs.confirm(t('contacts', 'Are you sure you want to delete this contact?'), t('contacts', 'Warning'), function(answer) {
- if(answer == true) {
- $.post(OC.filePath('contacts', 'ajax', 'deletecard.php'),{'id':Contacts.UI.Card.id},function(jsondata){
+ } else if(!newid) {
+ console.log('Loading intro');
+ // load intro page
+ $.getJSON(OC.filePath('contacts', 'ajax', 'loadintro.php'),{},function(jsondata){
+ if(jsondata.status == 'success'){
+ id = '';
+ $('#rightcontent').data('id','');
+ $('#rightcontent').html(jsondata.data.page);
+ } else {
+ OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
+ }
+ });
+ }
+ else {
+ localLoadContact(newid, bookid);
+ }
+ },
+ setEnabled:function(enabled) {
+ console.log('setEnabled', enabled);
+ $('.contacts_property,.action').each(function () {
+ $(this).prop('disabled', !enabled);
+ OC.Contacts.Card.enabled = enabled;
+ });
+ },
+ doExport:function() {
+ document.location.href = OC.linkTo('contacts', 'export.php') + '?contactid=' + this.id;
+ },
+ editNew:function(){ // add a new contact
+ var book = $('#contacts h3.active');
+ var permissions = parseInt(book.data('permissions'));
+ if(permissions == 0
+ || permissions & OC.Share.PERMISSION_UPDATE
+ || permissions & OC.Share.PERMISSION_DELETE) {
+ with(this) {
+ delete id; delete fn; delete fullname; delete givname; delete famname;
+ delete addname; delete honpre; delete honsuf;
+ }
+ this.bookid = book.data('id');
+ OC.Contacts.Card.add(';;;;;', '', '', true);
+ } else {
+ OC.dialogs.alert(t('contacts', 'You do not have permission to add contacts to ')
+ + book.text() + '. ' + t('contacts', 'Please select one of your own address books.'), t('contacts', 'Permission error'));
+ }
+ return false;
+ },
+ add:function(n, fn, aid, isnew){ // add a new contact
+ console.log('Adding ' + fn);
+ aid = aid?aid:$('#contacts h3.active').first().data('id');
+ var localAddcontact = function(n, fn, aid, isnew) {
+ $.post(OC.filePath('contacts', 'ajax', 'contact/add.php'), { n: n, fn: fn, aid: aid, isnew: isnew },
+ function(jsondata) {
+ if (jsondata.status == 'success'){
+ $('#rightcontent').data('id',jsondata.data.id);
+ var id = jsondata.data.id;
+ var aid = jsondata.data.aid;
+ $.getJSON(OC.filePath('contacts', 'ajax', 'contact/details.php'),{'id':id},function(jsondata){
if(jsondata.status == 'success'){
- var newid = '';
- var curlistitem = $('#leftcontent [data-id="'+jsondata.data.id+'"]');
- var newlistitem = curlistitem.prev();
- if(newlistitem == undefined) {
- newlistitem = curlistitem.next();
- }
- curlistitem.remove();
- if(newlistitem != undefined) {
- newid = newlistitem.data('id');
- }
- $('#rightcontent').data('id',newid);
- this.id = this.fn = this.fullname = this.shortname = this.famname = this.givname = this.addname = this.honpre = this.honsuf = '';
- this.data = undefined;
-
- if($('#contacts li').length > 0) { // Load first in list.
- Contacts.UI.Card.update(newid);
- } else {
- // load intro page
- $.getJSON(OC.filePath('contacts', 'ajax', 'loadintro.php'),{},function(jsondata){
- if(jsondata.status == 'success'){
- id = '';
- $('#rightcontent').data('id','');
- $('#rightcontent').html(jsondata.data.page);
- }
- else{
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
+ OC.Contacts.Card.loadContact(jsondata.data, aid);
+ var item = OC.Contacts.Contacts.insertContact({data:jsondata.data});
+ if(isnew) { // add some default properties
+ OC.Contacts.Card.addProperty('EMAIL');
+ OC.Contacts.Card.addProperty('TEL');
+ $('#fn').focus();
}
}
else{
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
}
});
+ $('#contact_identity').show();
+ $('#actionbar').show();
+ }
+ else{
+ OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
}
});
- return false;
- },
- loadContact:function(jsondata){
- this.data = jsondata;
- this.id = this.data.id;
- $('#rightcontent').data('id',this.id);
- this.populateNameFields();
- this.loadPhoto();
- this.loadMails();
- this.loadPhones();
- this.loadAddresses();
- this.loadSingleProperties();
- Contacts.UI.loadListHandlers();
- if(this.data.NOTE) {
- $('#note').data('checksum', this.data.NOTE[0]['checksum']);
- var note = $('#note').find('textarea');
- var txt = this.data.NOTE[0]['value'];
- var nheight = txt.split('\n').length > 4 ? txt.split('\n').length+2 : 5;
- note.css('min-height', nheight+'em');
- note.attr('rows', nheight);
- note.val(txt);
- $('#note').show();
- note.expandingTextarea();
- $('#contacts_propertymenu_dropdown a[data-type="NOTE"]').parent().hide();
- } else {
- $('#note').data('checksum', '');
- $('#note').find('textarea').val('');
- $('#note').hide();
- $('#contacts_propertymenu_dropdown a[data-type="NOTE"]').parent().show();
- }
- },
- loadSingleProperties:function() {
- var props = ['BDAY', 'NICKNAME', 'ORG', 'CATEGORIES'];
- // Clear all elements
- $('#ident .propertycontainer').each(function(){
- if(props.indexOf($(this).data('element')) > -1) {
- $(this).data('checksum', '');
- $(this).find('input').val('');
- $(this).hide();
- $(this).prev().hide();
+ }
+
+ if(!$('#card').length) {
+ console.log('Loading card DOM');
+ $.getJSON(OC.filePath('contacts', 'ajax', 'loadcard.php'),{'requesttoken': requesttoken},function(jsondata){
+ if(jsondata.status == 'success'){
+ $('#rightcontent').html(jsondata.data.page).ready(function() {
+ OC.Contacts.loadHandlers();
+ localAddcontact(n, fn, aid, isnew);
+ });
+ } else{
+ OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
}
});
- for(var prop in props) {
- if(this.data[props[prop]] != undefined) {
- $('#contacts_propertymenu_dropdown a[data-type="'+props[prop]+'"]').parent().hide();
- var property = this.data[props[prop]][0];
- var value = property['value'], checksum = property['checksum'];
- switch(props[prop]) {
- case 'BDAY':
- var val = $.datepicker.parseDate('yy-mm-dd', value.substring(0, 10));
- value = $.datepicker.formatDate('dd-mm-yy', val);
- $('#contact_identity').find('#bday').val(value);
- $('#contact_identity').find('#bday_value').data('checksum', checksum);
- $('#contact_identity').find('#bday_label').show();
- $('#contact_identity').find('#bday_value').show();
- break;
- case 'NICKNAME':
- $('#contact_identity').find('#nickname').val(value);
- $('#contact_identity').find('#nickname_value').data('checksum', checksum);
- $('#contact_identity').find('#nickname_label').show();
- $('#contact_identity').find('#nickname_value').show();
- break;
- case 'ORG':
- $('#contact_identity').find('#org').val(value);
- $('#contact_identity').find('#org_value').data('checksum', checksum);
- $('#contact_identity').find('#org_label').show();
- $('#contact_identity').find('#org_value').show();
- break;
- case 'CATEGORIES':
- $('#contact_identity').find('#categories').val(value);
- $('#contact_identity').find('#categories_value').data('checksum', checksum);
- $('#contact_identity').find('#categories_label').show();
- $('#contact_identity').find('#categories_value').show();
- break;
- }
+ } else {
+ localAddcontact(n, fn, aid, isnew);
+ }
+ },
+ delayedDelete:function() {
+ $('#contacts_deletecard').tipsy('hide');
+ var newid = '', bookid;
+ var curlistitem = OC.Contacts.Contacts.getContact(this.id);
+ curlistitem.removeClass('active');
+ var newlistitem = curlistitem.prev('li');
+ if(!newlistitem) {
+ newlistitem = curlistitem.next('li');
+ }
+ curlistitem.detach();
+ if($(newlistitem).is('li')) {
+ newid = newlistitem.data('id');
+ bookid = newlistitem.data('bookid');
+ }
+ $('#rightcontent').data('id', newid);
+
+ OC.Contacts.Contacts.deletionQueue.push(parseInt(this.id));
+ if(!window.onbeforeunload) {
+ window.onbeforeunload = OC.Contacts.Contacts.warnNotDeleted;
+ }
+
+ with(this) {
+ delete id; delete fn; delete fullname; delete shortname; delete famname;
+ delete givname; delete addname; delete honpre; delete honsuf; delete data;
+ }
+
+ if($('.contacts li').length > 0) {
+ OC.Contacts.Card.update({cid:newid, aid:bookid});
+ } else {
+ // load intro page
+ $.getJSON(OC.filePath('contacts', 'ajax', 'loadintro.php'),{},function(jsondata){
+ if(jsondata.status == 'success'){
+ id = '';
+ $('#rightcontent').html(jsondata.data.page).removeData('id');
} else {
- $('#contacts_propertymenu_dropdown a[data-type="'+props[prop]+'"]').parent().show();
- }
- }
- },
- populateNameFields:function() {
- var props = ['FN', 'N'];
- // Clear all elements
- $('#ident .propertycontainer').each(function(){
- if(props.indexOf($(this).data('element')) > -1) {
- $(this).data('checksum', '');
- $(this).find('input').val('');
+ OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
}
});
- this.fn = ''; this.fullname = ''; this.givname = ''; this.famname = ''; this.addname = ''; this.honpre = ''; this.honsuf = '';
- var narray = undefined;
- if(this.data.FN) {
- this.fn = this.data.FN[0]['value'];
- }
- else {
- this.fn = '';
+ }
+ OC.Contacts.notify({
+ data:curlistitem,
+ message:t('contacts','Click to undo deletion of "') + curlistitem.find('a').text() + '"',
+ //timeout:5,
+ timeouthandler:function(contact) {
+ console.log('timeout');
+ OC.Contacts.Card.doDelete(contact.data('id'), true, function(res) {
+ if(!res) {
+ OC.Contacts.Contacts.insertContact({contact:contact});
+ } else {
+ delete contact;
+ }
+ });
+ },
+ clickhandler:function(contact) {
+ OC.Contacts.Contacts.insertContact({contact:contact});
+ OC.Contacts.notify({message:t('contacts', 'Cancelled deletion of: "') + curlistitem.find('a').text() + '"'});
+ window.onbeforeunload = null;
}
- if(this.data.N == undefined) {
- narray = [this.fn,'','','','']; // Checking for non-existing 'N' property :-P
- } else {
- narray = this.data.N[0]['value'];
+ });
+ },
+ doDelete:function(id, removeFromQueue, cb) {
+ var updateQueue = function(id, remove) {
+ if(removeFromQueue) {
+ OC.Contacts.Contacts.deletionQueue.splice(OC.Contacts.Contacts.deletionQueue.indexOf(parseInt(id)), 1);
}
- this.famname = narray[0] || '';
- this.givname = narray[1] || '';
- this.addname = narray[2] || '';
- this.honpre = narray[3] || '';
- this.honsuf = narray[4] || '';
- if(this.honpre.length > 0) {
- this.fullname += this.honpre + ' ';
+ if(OC.Contacts.Contacts.deletionQueue.length == 0) {
+ window.onbeforeunload = null;
}
- if(this.givname.length > 0) {
- this.fullname += ' ' + this.givname;
+ }
+
+ if(OC.Contacts.Contacts.deletionQueue.indexOf(parseInt(id)) == -1 && removeFromQueue) {
+ console.log('returning');
+ updateQueue(id, removeFromQueue);
+ if(typeof cb == 'function') {
+ cb(true);
}
- if(this.addname.length > 0) {
- this.fullname += ' ' + this.addname;
+ return;
+ }
+ $.post(OC.filePath('contacts', 'ajax', 'contact/delete.php'), {'id':id},function(jsondata) {
+ if(jsondata.status == 'error'){
+ OC.Contacts.notify({message:jsondata.data.message});
+ if(typeof cb == 'function') {
+ cb(false);
+ }
}
- if(this.famname.length > 0) {
- this.fullname += ' ' + this.famname;
+ updateQueue(id, removeFromQueue);
+ });
+ if(typeof cb == 'function') {
+ cb(true);
+ }
+ },
+ loadContact:function(jsondata, bookid){
+ this.data = jsondata;
+ this.id = this.data.id;
+ this.bookid = bookid;
+ $('#rightcontent').data('id',this.id);
+ this.populateNameFields();
+ this.loadPhoto();
+ this.loadMails();
+ this.loadPhones();
+ this.loadIMs();
+ this.loadAddresses();
+ this.loadSingleProperties();
+ OC.Contacts.loadListHandlers();
+ var note = $('#note');
+ if(this.data.NOTE) {
+ note.data('checksum', this.data.NOTE[0]['checksum']);
+ var textarea = note.find('textarea');
+ var txt = this.data.NOTE[0]['value'];
+ var nheight = txt.split('\n').length > 4 ? txt.split('\n').length+2 : 5;
+ textarea.css('min-height', nheight+'em');
+ textarea.attr('rows', nheight);
+ textarea.val(txt);
+ $('#contact_note').show();
+ textarea.expandingTextarea();
+ $('#contacts_propertymenu_dropdown a[data-type="NOTE"]').parent().hide();
+ } else {
+ note.removeData('checksum');
+ note.find('textarea').val('');
+ $('#contact_note').hide();
+ $('#contacts_propertymenu_dropdown a[data-type="NOTE"]').parent().show();
+ }
+ var permissions = OC.Contacts.Card.permissions = parseInt($('#contacts ul[data-id="' + bookid + '"]').data('permissions'));
+ console.log('permissions', permissions);
+ this.setEnabled(permissions == 0
+ || permissions & OC.Share.PERMISSION_UPDATE
+ || permissions & OC.Share.PERMISSION_DELETE);
+ },
+ loadSingleProperties:function() {
+ var props = ['BDAY', 'NICKNAME', 'ORG', 'URL', 'CATEGORIES'];
+ // Clear all elements
+ $('#ident .propertycontainer').each(function(){
+ if(props.indexOf($(this).data('element')) > -1) {
+ $(this).data('checksum', '');
+ $(this).find('input').val('');
+ $(this).hide();
+ $(this).prev().hide();
}
- if(this.honsuf.length > 0) {
- this.fullname += ', ' + this.honsuf;
+ });
+ for(var prop in props) {
+ var propname = props[prop];
+ if(this.data[propname] != undefined) {
+ $('#contacts_propertymenu_dropdown a[data-type="'+propname+'"]').parent().hide();
+ var property = this.data[propname][0];
+ var value = property['value'], checksum = property['checksum'];
+
+ if(propname == 'BDAY') {
+ var val = $.datepicker.parseDate('yy-mm-dd', value.substring(0, 10));
+ value = $.datepicker.formatDate('dd-mm-yy', val);
+ }
+ var identcontainer = $('#contact_identity');
+ identcontainer.find('#'+propname.toLowerCase()).val(value);
+ identcontainer.find('#'+propname.toLowerCase()+'_value').data('checksum', checksum);
+ identcontainer.find('#'+propname.toLowerCase()+'_label').show();
+ identcontainer.find('#'+propname.toLowerCase()+'_value').show();
+ } else {
+ $('#contacts_propertymenu_dropdown a[data-type="'+propname+'"]').parent().show();
}
- $('#n').val(narray.join(';'));
- $('#fn_select option').remove();
- var names = [this.fn, this.fullname, this.givname + ' ' + this.famname, this.famname + ' ' + this.givname, this.famname + ', ' + this.givname];
- if(this.data.ORG) {
- names[names.length]=this.data.ORG[0].value;
+ }
+ },
+ populateNameFields:function() {
+ var props = ['FN', 'N'];
+ // Clear all elements
+ $('#ident .propertycontainer').each(function(){
+ if(props.indexOf($(this).data('element')) > -1) {
+ $(this).data('checksum', '');
+ $(this).find('input').val('');
}
- $.each(names, function(key, value) {
- $('#fn_select')
- .append($('<option></option>')
- .text(value));
- });
+ });
+
+ with(this) {
+ delete fn; delete fullname; delete givname; delete famname;
+ delete addname; delete honpre; delete honsuf;
+ }
+
+ if(this.data.FN) {
+ this.fn = this.data.FN[0]['value'];
+ }
+ else {
+ this.fn = '';
+ }
+ if(this.data.N == undefined) {
+ narray = [this.fn,'','','','']; // Checking for non-existing 'N' property :-P
+ } else {
+ narray = this.data.N[0]['value'];
+ }
+ this.famname = narray[0] || '';
+ this.givname = narray[1] || '';
+ this.addname = narray[2] || '';
+ this.honpre = narray[3] || '';
+ this.honsuf = narray[4] || '';
+ if(this.honpre.length > 0) {
+ this.fullname += this.honpre + ' ';
+ }
+ if(this.givname.length > 0) {
+ this.fullname += ' ' + this.givname;
+ }
+ if(this.addname.length > 0) {
+ this.fullname += ' ' + this.addname;
+ }
+ if(this.famname.length > 0) {
+ this.fullname += ' ' + this.famname;
+ }
+ if(this.honsuf.length > 0) {
+ this.fullname += ', ' + this.honsuf;
+ }
+ $('#n').val(narray.join(';'));
+ $('#fn_select option').remove();
+ var names = [this.fn, this.fullname, this.givname + ' ' + this.famname, this.famname + ' ' + this.givname, this.famname + ', ' + this.givname];
+ if(this.data.ORG) {
+ names[names.length]=this.data.ORG[0].value;
+ }
+ $.each(names, function(key, value) {
+ $('#fn_select')
+ .append($('<option></option>')
+ .text(value));
+ });
$('#fn_select').combobox('value', this.fn);
$('#contact_identity').find('*[data-element="N"]').data('checksum', this.data.N[0]['checksum']);
if(this.data.FN) {
$('#contact_identity').find('*[data-element="FN"]').data('checksum', this.data.FN[0]['checksum']);
}
$('#contact_identity').show();
- },
- hasCategory:function(category) {
- if(this.data.CATEGORIES) {
- var categories = this.data.CATEGORIES[0]['value'].split(/,\s*/);
- for(var c in categories) {
- var cat = this.data.CATEGORIES[0]['value'][c];
- if(typeof cat === 'string' && (cat.toUpperCase() === category.toUpperCase())) {
- return true;
- }
+ },
+ hasCategory:function(category) {
+ if(this.data.CATEGORIES) {
+ var categories = this.data.CATEGORIES[0]['value'].split(/,\s*/);
+ for(var c in categories) {
+ var cat = this.data.CATEGORIES[0]['value'][c];
+ if(typeof cat === 'string' && (cat.toUpperCase() === category.toUpperCase())) {
+ return true;
}
}
- return false;
- },
- categoriesChanged:function(newcategories) { // Categories added/deleted.
- categories = $.map(newcategories, function(v) {return v;});
- $('#categories').multiple_autocomplete('option', 'source', categories);
- var categorylist = $('#categories_value').find('input');
- $.getJSON(OC.filePath('contacts', 'ajax', 'categories/categoriesfor.php'),{'id':Contacts.UI.Card.id},function(jsondata){
- if(jsondata.status == 'success'){
- $('#categories_value').data('checksum', jsondata.data.checksum);
- categorylist.val(jsondata.data.value);
+ }
+ return false;
+ },
+ categoriesChanged:function(newcategories) { // Categories added/deleted.
+ categories = $.map(newcategories, function(v) {return v;});
+ $('#categories').multiple_autocomplete('option', 'source', categories);
+ var categorylist = $('#categories_value').find('input');
+ $.getJSON(OC.filePath('contacts', 'ajax', 'categories/categoriesfor.php'),{'id':OC.Contacts.Card.id},function(jsondata){
+ if(jsondata.status == 'success'){
+ $('#categories_value').data('checksum', jsondata.data.checksum);
+ categorylist.val(jsondata.data.value);
+ } else {
+ OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
+ }
+ });
+ },
+ savePropertyInternal:function(name, fields, oldchecksum, checksum) {
+ // TODO: Add functionality for new fields.
+ //console.log('savePropertyInternal: ' + name + ', fields: ' + fields + 'checksum: ' + checksum);
+ //console.log('savePropertyInternal: ' + this.data[name]);
+ var multivalue = ['CATEGORIES'];
+ var params = {};
+ var value = multivalue.indexOf(name) != -1 ? new Array() : undefined;
+ jQuery.each(fields, function(i, field){
+ //.substring(11,'parameters[TYPE][]'.indexOf(']'))
+ if(field.name.substring(0, 5) === 'value') {
+ if(multivalue.indexOf(name) != -1) {
+ value.push(field.value);
} else {
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- },
- savePropertyInternal:function(name, fields, oldchecksum, checksum){
- // TODO: Add functionality for new fields.
- //console.log('savePropertyInternal: ' + name + ', fields: ' + fields + 'checksum: ' + checksum);
- //console.log('savePropertyInternal: ' + this.data[name]);
- var multivalue = ['CATEGORIES'];
- var params = {};
- var value = multivalue.indexOf(name) != -1 ? new Array() : undefined;
- jQuery.each(fields, function(i, field){
- //.substring(11,'parameters[TYPE][]'.indexOf(']'))
- if(field.name.substring(0, 5) === 'value') {
- if(multivalue.indexOf(name) != -1) {
- value.push(field.value);
- } else {
- value = field.value;
- }
- } else if(field.name.substring(0, 10) === 'parameters') {
- var p = field.name.substring(11,'parameters[TYPE][]'.indexOf(']'));
- if(!(p in params)) {
- params[p] = [];
- }
- params[p].push(field.value);
+ value = field.value;
}
- });
- for(var i in this.data[name]) {
- if(this.data[name][i]['checksum'] == oldchecksum) {
- this.data[name][i]['checksum'] = checksum;
- this.data[name][i]['value'] = value;
- this.data[name][i]['parameters'] = params;
+ } else if(field.name.substring(0, 10) === 'parameters') {
+ var p = field.name.substring(11,'parameters[TYPE][]'.indexOf(']'));
+ if(!(p in params)) {
+ params[p] = [];
}
+ params[p].push(field.value);
}
- },
- saveProperty:function(obj){
- if(!$(obj).hasClass('contacts_property')) {
- return false;
- }
- if($(obj).hasClass('nonempty') && $(obj).val().trim() == '') {
- OC.dialogs.alert(t('contacts', 'This property has to be non-empty.'), t('contacts', 'Error'));
- return false;
- }
- container = $(obj).parents('.propertycontainer').first(); // get the parent holding the metadata.
- Contacts.UI.loading(obj, true);
- var checksum = container.data('checksum');
- var name = container.data('element');
- var fields = container.find('input.contacts_property,select.contacts_property').serializeArray();
- switch(name) {
- case 'FN':
- var nempty = true;
- for(var i in Contacts.UI.Card.data.N[0]['value']) {
- if(Contacts.UI.Card.data.N[0]['value'][i] != '') {
- nempty = false;
- break;
- }
+ });
+ for(var i in this.data[name]) {
+ if(this.data[name][i]['checksum'] == oldchecksum) {
+ this.data[name][i]['checksum'] = checksum;
+ this.data[name][i]['value'] = value;
+ this.data[name][i]['parameters'] = params;
}
- if(nempty) {
- $('#n').val(fields[0].value + ';;;;');
- Contacts.UI.Card.data.N[0]['value'] = Array(fields[0].value, '', '', '', '');
- setTimeout(function() {Contacts.UI.Card.saveProperty($('#n'))}, 500);
+ }
+ },
+ saveProperty:function(obj) {
+ if(!$(obj).hasClass('contacts_property')) {
+ return false;
+ }
+ if($(obj).hasClass('nonempty') && $(obj).val().trim() == '') {
+ OC.dialogs.alert(t('contacts', 'This property has to be non-empty.'), t('contacts', 'Error'));
+ return false;
+ }
+ container = $(obj).parents('.propertycontainer').first(); // get the parent holding the metadata.
+ OC.Contacts.loading(obj, true);
+ var checksum = container.data('checksum');
+ var name = container.data('element');
+ var fields = container.find('input.contacts_property,select.contacts_property').serializeArray();
+ switch(name) {
+ case 'FN':
+ var nempty = true;
+ for(var i in OC.Contacts.Card.data.N[0]['value']) {
+ if(OC.Contacts.Card.data.N[0]['value'][i] != '') {
+ nempty = false;
+ break;
}
- break;
- }
- var q = container.find('input.contacts_property,select.contacts_property,textarea.contacts_property').serialize();
- if(q == '' || q == undefined) {
- OC.dialogs.alert(t('contacts', 'Couldn\'t serialize elements.'), t('contacts', 'Error'));
- Contacts.UI.loading(obj, false);
- return false;
- }
- q = q + '&id=' + this.id + '&name=' + name;
- if(checksum != undefined && checksum != '') { // save
+ }
+ if(nempty) {
+ $('#n').val(fields[0].value + ';;;;');
+ OC.Contacts.Card.data.N[0]['value'] = Array(fields[0].value, '', '', '', '');
+ setTimeout(function() {OC.Contacts.Card.saveProperty($('#n'))}, 500);
+ }
+ break;
+ }
+ var q = container.find('input.contacts_property,select.contacts_property,textarea.contacts_property').serialize();
+ if(q == '' || q == undefined) {
+ OC.dialogs.alert(t('contacts', 'Couldn\'t serialize elements.'), t('contacts', 'Error'));
+ OC.Contacts.loading(obj, false);
+ return false;
+ }
+ q = q + '&id=' + this.id + '&name=' + name;
+ if(checksum != undefined && checksum != '') { // save
q = q + '&checksum=' + checksum;
- //console.log('Saving: ' + q);
+ console.log('Saving: ' + q);
$(obj).attr('disabled', 'disabled');
- $.post(OC.filePath('contacts', 'ajax', 'saveproperty.php'),q,function(jsondata){
+ $.post(OC.filePath('contacts', 'ajax', 'contact/saveproperty.php'),q,function(jsondata){
+ if(!jsondata) {
+ OC.dialogs.alert(t('contacts', 'Unknown error. Please check logs.'), t('contacts', 'Error'));
+ OC.Contacts.loading(obj, false);
+ $(obj).removeAttr('disabled');
+ OC.Contacts.Card.update({cid:OC.Contacts.Card.id});
+ return false;
+ }
if(jsondata.status == 'success'){
container.data('checksum', jsondata.data.checksum);
- Contacts.UI.Card.savePropertyInternal(name, fields, checksum, jsondata.data.checksum);
- Contacts.UI.loading(obj, false);
+ OC.Contacts.Card.savePropertyInternal(name, fields, checksum, jsondata.data.checksum);
+ OC.Contacts.loading(obj, false);
$(obj).removeAttr('disabled');
return true;
}
else{
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- Contacts.UI.loading(obj, false);
+ OC.Contacts.loading(obj, false);
$(obj).removeAttr('disabled');
+ OC.Contacts.Card.update({cid:OC.Contacts.Card.id});
return false;
}
},'json');
- } else { // add
- //console.log('Adding: ' + q);
+ } else { // add
+ console.log('Adding: ' + q);
$(obj).attr('disabled', 'disabled');
- $.post(OC.filePath('contacts', 'ajax', 'addproperty.php'),q,function(jsondata){
+ $.post(OC.filePath('contacts', 'ajax', 'contact/addproperty.php'),q,function(jsondata){
if(jsondata.status == 'success'){
container.data('checksum', jsondata.data.checksum);
// TODO: savePropertyInternal doesn't know about new fields
- //Contacts.UI.Card.savePropertyInternal(name, fields, checksum, jsondata.data.checksum);
- Contacts.UI.loading(obj, false);
+ //OC.Contacts.Card.savePropertyInternal(name, fields, checksum, jsondata.data.checksum);
+ OC.Contacts.loading(obj, false);
$(obj).removeAttr('disabled');
return true;
}
else{
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- Contacts.UI.loading(obj, false);
+ OC.Contacts.loading(obj, false);
$(obj).removeAttr('disabled');
+ OC.Contacts.Card.update({cid:OC.Contacts.Card.id});
return false;
}
},'json');
- }
- },
- addProperty:function(type){
- switch (type) {
- case 'PHOTO':
- this.loadPhoto(true);
- $('#file_upload_form').show();
- $('#contacts_propertymenu_dropdown a[data-type="'+type+'"]').parent().hide();
- $('#file_upload_start').trigger('click');
- break;
- case 'NOTE':
- $('#note').show();
- $('#contacts_propertymenu_dropdown a[data-type="'+type+'"]').parent().hide();
- $('#note').find('textarea').expandingTextarea();
- $('#note').find('textarea').focus();
- break;
- case 'EMAIL':
- if($('#emaillist>li').length == 1) {
- $('#emails').show();
- }
- Contacts.UI.Card.addMail();
- break;
- case 'TEL':
- if($('#phonelist>li').length == 1) {
- $('#phones').show();
- }
- Contacts.UI.Card.addPhone();
- break;
- case 'ADR':
- if($('#addressdisplay>dl').length == 1) {
- $('#addresses').show();
- }
- Contacts.UI.Card.editAddress('new', true);
- break;
- case 'NICKNAME':
- case 'ORG':
- case 'BDAY':
- case 'CATEGORIES':
- $('dl dt[data-element="'+type+'"],dd[data-element="'+type+'"]').show();
- $('dd[data-element="'+type+'"]').find('input').focus();
- $('#contacts_propertymenu_dropdown a[data-type="'+type+'"]').parent().hide();
- break;
- }
- },
- deleteProperty:function(obj, type){
- Contacts.UI.loading(obj, true);
- var checksum = Contacts.UI.checksumFor(obj);
- if(checksum) {
- $.post(OC.filePath('contacts', 'ajax', 'deleteproperty.php'),{'id': this.id, 'checksum': checksum },function(jsondata){
- if(jsondata.status == 'success'){
- if(type == 'list') {
- Contacts.UI.propertyContainerFor(obj).remove();
- } else if(type == 'single') {
- var proptype = Contacts.UI.propertyTypeFor(obj);
- Contacts.UI.Card.data[proptype] = null;
- var othertypes = ['NOTE', 'PHOTO'];
- if(othertypes.indexOf(proptype) != -1) {
- Contacts.UI.propertyContainerFor(obj).data('checksum', '');
- if(proptype == 'PHOTO') {
- Contacts.UI.Contacts.refreshThumbnail(Contacts.UI.Card.id);
- Contacts.UI.Card.loadPhoto(true);
- } else if(proptype == 'NOTE') {
- $('#note').find('textarea').val('');
- Contacts.UI.propertyContainerFor(obj).hide();
- }
- } else {
- $('dl dt[data-element="'+proptype+'"],dd[data-element="'+proptype+'"]').hide();
- $('dl dd[data-element="'+proptype+'"]').data('checksum', '');
- $('dl dd[data-element="'+proptype+'"]').find('input').val('');
+ }
+ },
+ addProperty:function(type) {
+ if(!this.enabled) {
+ return;
+ }
+ switch (type) {
+ case 'NOTE':
+ $('#contacts_propertymenu_dropdown a[data-type="'+type+'"]').parent().hide();
+ $('#note').find('textarea').expandingTextarea().show().focus();
+ $('#contact_note').show();
+ break;
+ case 'EMAIL':
+ if($('#emaillist>li').length == 1) {
+ $('#emails').show();
+ }
+ OC.Contacts.Card.addMail();
+ break;
+ case 'TEL':
+ if($('#phonelist>li').length == 1) {
+ $('#phones').show();
+ }
+ OC.Contacts.Card.addPhone();
+ break;
+ case 'IMPP':
+ if($('#imlist>li').length == 1) {
+ $('#ims').show();
+ }
+ OC.Contacts.Card.addIM();
+ break;
+ case 'ADR':
+ if($('addresses>dl').length == 1) {
+ $('#addresses').show();
+ }
+ OC.Contacts.Card.editAddress('new', true);
+ break;
+ case 'NICKNAME':
+ case 'URL':
+ case 'ORG':
+ case 'BDAY':
+ case 'CATEGORIES':
+ $('dl dt[data-element="'+type+'"],dd[data-element="'+type+'"]').show();
+ $('dd[data-element="'+type+'"]').find('input').focus();
+ $('#contacts_propertymenu_dropdown a[data-type="'+type+'"]').parent().hide();
+ break;
+ }
+ },
+ deleteProperty:function(obj, type) {
+ console.log('deleteProperty');
+ if(!this.enabled) {
+ return;
+ }
+ OC.Contacts.loading(obj, true);
+ var checksum = OC.Contacts.checksumFor(obj);
+ if(checksum) {
+ $.post(OC.filePath('contacts', 'ajax', 'contact/deleteproperty.php'),{'id': this.id, 'checksum': checksum },function(jsondata){
+ if(jsondata.status == 'success'){
+ if(type == 'list') {
+ OC.Contacts.propertyContainerFor(obj).remove();
+ } else if(type == 'single') {
+ var proptype = OC.Contacts.propertyTypeFor(obj);
+ OC.Contacts.Card.data[proptype] = null;
+ var othertypes = ['NOTE', 'PHOTO'];
+ if(othertypes.indexOf(proptype) != -1) {
+ OC.Contacts.propertyContainerFor(obj).data('checksum', '');
+ if(proptype == 'PHOTO') {
+ OC.Contacts.Contacts.refreshThumbnail(OC.Contacts.Card.id);
+ OC.Contacts.Card.loadPhoto();
+ } else if(proptype == 'NOTE') {
+ $('#note').find('textarea').val('');
+ $('#contact_note').hide();
+ OC.Contacts.propertyContainerFor(obj).hide();
}
- $('#contacts_propertymenu_dropdown a[data-type="'+proptype+'"]').parent().show();
- Contacts.UI.loading(obj, false);
} else {
- OC.dialogs.alert(t('contacts', '\'deleteProperty\' called without type argument. Please report at bugs.owncloud.org'), t('contacts', 'Error'));
- Contacts.UI.loading(obj, false);
+ $('dl dt[data-element="'+proptype+'"],dd[data-element="'+proptype+'"]').hide();
+ $('dl dd[data-element="'+proptype+'"]').data('checksum', '').find('input').val('');
}
+ $('#contacts_propertymenu_dropdown a[data-type="'+proptype+'"]').parent().show();
+ OC.Contacts.loading(obj, false);
+ } else {
+ OC.dialogs.alert(t('contacts', '\'deleteProperty\' called without type argument. Please report at bugs.owncloud.org'), t('contacts', 'Error'));
+ OC.Contacts.loading(obj, false);
}
- else{
- Contacts.UI.loading(obj, false);
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- } else { // Property hasn't been saved so there's nothing to delete.
- if(type == 'list') {
- Contacts.UI.propertyContainerFor(obj).remove();
- } else if(type == 'single') {
- var proptype = Contacts.UI.propertyTypeFor(obj);
- $('dl dt[data-element="'+proptype+'"],dd[data-element="'+proptype+'"]').hide();
- $('#contacts_propertymenu_dropdown a[data-type="'+proptype+'"]').parent().show();
- Contacts.UI.loading(obj, false);
- } else {
- OC.dialogs.alert(t('contacts', '\'deleteProperty\' called without type argument. Please report at bugs.owncloud.org'), t('contacts', 'Error'));
}
+ else{
+ OC.Contacts.loading(obj, false);
+ OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
+ }
+ });
+ } else { // Property hasn't been saved so there's nothing to delete.
+ if(type == 'list') {
+ OC.Contacts.propertyContainerFor(obj).remove();
+ } else if(type == 'single') {
+ var proptype = OC.Contacts.propertyTypeFor(obj);
+ $('dl dt[data-element="'+proptype+'"],dd[data-element="'+proptype+'"]').hide();
+ $('#contacts_propertymenu_dropdown a[data-type="'+proptype+'"]').parent().show();
+ OC.Contacts.loading(obj, false);
+ } else {
+ OC.dialogs.alert(t('contacts', '\'deleteProperty\' called without type argument. Please report at bugs.owncloud.org'), t('contacts', 'Error'));
}
- },
- editName:function(){
- var isnew = (this.id == '');
- /* Initialize the name edit dialog */
- if($('#edit_name_dialog').dialog('isOpen') == true){
- $('#edit_name_dialog').dialog('moveToTop');
- }else{
- $('#dialog_holder').load(OC.filePath('contacts', 'ajax', 'editname.php')+'?id='+this.id, function(jsondata){
- if(jsondata.status != 'error'){
- $('#edit_name_dialog' ).dialog({
- modal: true,
- closeOnEscape: (isnew == '' && false || true),
- title: (isnew && t('contacts', 'Add contact') || t('contacts', 'Edit name')),
- height: 'auto', width: 'auto',
- buttons: {
- 'Ok':function() {
- Contacts.UI.Card.saveName(this);
- $(this).dialog('destroy').remove();
- },
- 'Cancel':function() { $(this).dialog('destroy').remove(); }
- },
- close: function(event, ui) {
- $(this).dialog('destroy').remove();
- //return event;
+ }
+ },
+ editName:function() {
+ if(!this.enabled) {
+ return;
+ }
+ var params = {id: this.id};
+ /* Initialize the name edit dialog */
+ if($('#edit_name_dialog').dialog('isOpen') == true) {
+ $('#edit_name_dialog').dialog('moveToTop');
+ } else {
+ $.getJSON(OC.filePath('contacts', 'ajax', 'editname.php'),{id: this.id},function(jsondata) {
+ if(jsondata.status == 'success') {
+ $('body').append('<div id="name_dialog"></div>');
+ $('#name_dialog').html(jsondata.data.page).find('#edit_name_dialog' ).dialog({
+ modal: true,
+ closeOnEscape: true,
+ title: t('contacts', 'Edit name'),
+ height: 'auto', width: 'auto',
+ buttons: {
+ 'Ok':function() {
+ OC.Contacts.Card.saveName(this);
+ $(this).dialog('close');
},
- open: function(event, ui) {
- // load 'N' property - maybe :-P
- }
- });
- } else {
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
+ 'Cancel':function() { $(this).dialog('close'); }
+ },
+ close: function(event, ui) {
+ $(this).dialog('destroy').remove();
+ $('#name_dialog').remove();
+ },
+ open: function(event, ui) {
+ // load 'N' property - maybe :-P
+ }
+ });
+ } else {
+ OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
+ }
+ });
+ }
+ },
+ saveName:function(dlg) {
+ if(!this.enabled) {
+ return;
+ }
+ //console.log('saveName, id: ' + this.id);
+ var n = new Array($(dlg).find('#fam').val().strip_tags(),$(dlg).find('#giv').val().strip_tags(),$(dlg).find('#add').val().strip_tags(),$(dlg).find('#pre').val().strip_tags(),$(dlg).find('#suf').val().strip_tags());
+ this.famname = n[0];
+ this.givname = n[1];
+ this.addname = n[2];
+ this.honpre = n[3];
+ this.honsuf = n[4];
+ this.fullname = '';
+
+ $('#n').val(n.join(';'));
+ if(n[3].length > 0) {
+ this.fullname = n[3] + ' ';
+ }
+ this.fullname += n[1] + ' ' + n[2] + ' ' + n[0];
+ if(n[4].length > 0) {
+ this.fullname += ', ' + n[4];
+ }
+
+ $('#fn_select option').remove();
+ //$('#fn_select').combobox('value', this.fn);
+ var tmp = [this.fullname, this.givname + ' ' + this.famname, this.famname + ' ' + this.givname, this.famname + ', ' + this.givname];
+ var names = new Array();
+ for(var name in tmp) {
+ if(names.indexOf(tmp[name]) == -1) {
+ names.push(tmp[name]);
}
- },
- saveName:function(dlg){
- //console.log('saveName, id: ' + this.id);
- var n = new Array($(dlg).find('#fam').val().strip_tags(),$(dlg).find('#giv').val().strip_tags(),$(dlg).find('#add').val().strip_tags(),$(dlg).find('#pre').val().strip_tags(),$(dlg).find('#suf').val().strip_tags());
- this.famname = n[0];
- this.givname = n[1];
- this.addname = n[2];
- this.honpre = n[3];
- this.honsuf = n[4];
- this.fullname = '';
+ }
+ $.each(names, function(key, value) {
+ $('#fn_select')
+ .append($('<option></option>')
+ .text(value));
+ });
- $('#n').val(n.join(';'));
- if(n[3].length > 0) {
- this.fullname = n[3] + ' ';
+ if(this.id == '') {
+ var aid = $(dlg).find('#aid').val();
+ OC.Contacts.Card.add(n.join(';'), $('#short').text(), aid);
+ } else {
+ OC.Contacts.Card.saveProperty($('#n'));
+ }
+ },
+ loadAddresses:function() {
+ $('#addresses').hide();
+ $('#addresses dl.propertycontainer').remove();
+ var addresscontainer = $('#addresses');
+ for(var adr in this.data.ADR) {
+ addresscontainer.find('dl').first().clone().insertAfter($('#addresses dl').last()).show();
+ addresscontainer.find('dl').last().removeClass('template').addClass('propertycontainer');
+ addresscontainer.find('dl').last().data('checksum', this.data.ADR[adr]['checksum']);
+ var adrarray = this.data.ADR[adr]['value'];
+ var adrtxt = '';
+ if(adrarray[0] && adrarray[0].length > 0) {
+ adrtxt = adrtxt + '<li>' + adrarray[0].strip_tags() + '</li>';
}
- this.fullname += n[1] + ' ' + n[2] + ' ' + n[0];
- if(n[4].length > 0) {
- this.fullname += ', ' + n[4];
+ if(adrarray[1] && adrarray[1].length > 0) {
+ adrtxt = adrtxt + '<li>' + adrarray[1].strip_tags() + '</li>';
}
-
- $('#fn_select option').remove();
- //$('#fn_select').combobox('value', this.fn);
- var tmp = [this.fullname, this.givname + ' ' + this.famname, this.famname + ' ' + this.givname, this.famname + ', ' + this.givname];
- var names = new Array();
- for(var name in tmp) {
- if(names.indexOf(tmp[name]) == -1) {
- names.push(tmp[name]);
- }
+ if(adrarray[2] && adrarray[2].length > 0) {
+ adrtxt = adrtxt + '<li>' + adrarray[2].strip_tags() + '</li>';
}
- $.each(names, function(key, value) {
- $('#fn_select')
- .append($('<option></option>')
- .text(value));
- });
-
- if(this.id == '') {
- var aid = $(dlg).find('#aid').val();
- Contacts.UI.Card.add(n.join(';'), $('#short').text(), aid);
- } else {
- Contacts.UI.Card.saveProperty($('#n'));
+ if((3 in adrarray && 5 in adrarray) && adrarray[3].length > 0 || adrarray[5].length > 0) {
+ adrtxt = adrtxt + '<li>' + adrarray[5].strip_tags() + ' ' + adrarray[3].strip_tags() + '</li>';
}
- },
- loadAddresses:function(){
- $('#addresses').hide();
- $('#addressdisplay dl.propertycontainer').remove();
- for(var adr in this.data.ADR) {
- $('#addressdisplay dl').first().clone().insertAfter($('#addressdisplay dl').last()).show();
- $('#addressdisplay dl').last().removeClass('template').addClass('propertycontainer');
- $('#addressdisplay dl').last().data('checksum', this.data.ADR[adr]['checksum']);
- var adrarray = this.data.ADR[adr]['value'];
- var adrtxt = '';
- if(adrarray[0] && adrarray[0].length > 0) {
- adrtxt = adrtxt + '<li>' + adrarray[0].strip_tags() + '</li>';
- }
- if(adrarray[1] && adrarray[1].length > 0) {
- adrtxt = adrtxt + '<li>' + adrarray[1].strip_tags() + '</li>';
- }
- if(adrarray[2] && adrarray[2].length > 0) {
- adrtxt = adrtxt + '<li>' + adrarray[2].strip_tags() + '</li>';
- }
- if((adrarray[3] && adrarray[5]) && adrarray[3].length > 0 || adrarray[5].length > 0) {
- adrtxt = adrtxt + '<li>' + adrarray[5].strip_tags() + ' ' + adrarray[3].strip_tags() + '</li>';
- }
- if(adrarray[4] && adrarray[4].length > 0) {
- adrtxt = adrtxt + '<li>' + adrarray[4].strip_tags() + '</li>';
- }
- if(adrarray[6] && adrarray[6].length > 0) {
- adrtxt = adrtxt + '<li>' + adrarray[6].strip_tags() + '</li>';
- }
- $('#addressdisplay dl').last().find('.addresslist').html(adrtxt);
- var types = new Array();
- var ttypes = new Array();
- for(var param in this.data.ADR[adr]['parameters']) {
- if(param.toUpperCase() == 'TYPE') {
- types.push(t('contacts', ucwords(this.data.ADR[adr]['parameters'][param].toLowerCase())));
- ttypes.push(this.data.ADR[adr]['parameters'][param]);
- }
- }
- $('#addressdisplay dl').last().find('.adr_type_label').text(types.join('/'));
- $('#addressdisplay dl').last().find('.adr_type').val(ttypes.join(','));
- $('#addressdisplay dl').last().find('.adr').val(adrarray.join(';'));
- $('#addressdisplay dl').last().data('checksum', this.data.ADR[adr]['checksum']);
+ if(adrarray[4] && adrarray[4].length > 0) {
+ adrtxt = adrtxt + '<li>' + adrarray[4].strip_tags() + '</li>';
}
- if($('#addressdisplay dl').length > 1) {
- $('#addresses').show();
- $('#contact_communication').show();
+ if(adrarray[6] && adrarray[6].length > 0) {
+ adrtxt = adrtxt + '<li>' + adrarray[6].strip_tags() + '</li>';
}
- return false;
- },
- editAddress:function(obj, isnew){
- var container = undefined;
- var q = q = '?id=' + this.id;
- if(obj === 'new') {
- isnew = true;
- $('#addressdisplay dl').first().clone(true).insertAfter($('#addressdisplay dl').last()).show();
- container = $('#addressdisplay dl').last();
- container.removeClass('template').addClass('propertycontainer');
- } else {
- q = q + '&checksum='+Contacts.UI.checksumFor(obj);
+ addresscontainer.find('dl').last().find('.addresslist').html(adrtxt);
+ var types = new Array();
+ var ttypes = new Array();
+ for(var param in this.data.ADR[adr]['parameters']) {
+ if(param.toUpperCase() == 'TYPE') {
+ types.push(t('contacts', ucwords(this.data.ADR[adr]['parameters'][param].toLowerCase())));
+ ttypes.push(this.data.ADR[adr]['parameters'][param]);
+ }
}
- /* Initialize the address edit dialog */
- if($('#edit_address_dialog').dialog('isOpen') == true){
- $('#edit_address_dialog').dialog('moveToTop');
- }else{
- $('#dialog_holder').load(OC.filePath('contacts', 'ajax', 'editaddress.php')+q, function(jsondata){
- if(jsondata.status != 'error'){
- $('#edit_address_dialog' ).dialog({
- /*modal: true,*/
- height: 'auto', width: 'auto',
- buttons: {
- 'Ok':function() {
- if(isnew) {
- Contacts.UI.Card.saveAddress(this, $('#addressdisplay dl:last-child').find('input').first(), isnew);
- } else {
- Contacts.UI.Card.saveAddress(this, obj, isnew);
- }
- $(this).dialog('destroy').remove();
- },
- 'Cancel':function() {
- $(this).dialog('destroy').remove();
- if(isnew) {
- container.remove();
- }
+ addresscontainer.find('dl').last().find('.adr_type_label').text(types.join('/'));
+ addresscontainer.find('dl').last().find('.adr_type').val(ttypes.join(','));
+ addresscontainer.find('dl').last().find('.adr').val(adrarray.join(';'));
+ addresscontainer.find('dl').last().data('checksum', this.data.ADR[adr]['checksum']);
+ }
+ if(addresscontainer.find('dl').length > 1) {
+ $('#addresses').show();
+ }
+ return false;
+ },
+ editAddress:function(obj, isnew){
+ if(!this.enabled) {
+ return;
+ }
+ var container = undefined;
+ var params = {id: this.id};
+ if(obj === 'new') {
+ isnew = true;
+ $('#addresses dl').first().clone(true).insertAfter($('#addresses dl').last()).show();
+ container = $('#addresses dl').last();
+ container.removeClass('template').addClass('propertycontainer');
+ } else {
+ params['checksum'] = OC.Contacts.checksumFor(obj);
+ }
+ /* Initialize the address edit dialog */
+ if($('#edit_address_dialog').dialog('isOpen') == true){
+ $('#edit_address_dialog').dialog('moveToTop');
+ }else{
+ $.getJSON(OC.filePath('contacts', 'ajax', 'editaddress.php'),params,function(jsondata){
+ if(jsondata.status == 'success'){
+ $('body').append('<div id="address_dialog"></div>');
+ $('#address_dialog').html(jsondata.data.page).find('#edit_address_dialog' ).dialog({
+ height: 'auto', width: 'auto',
+ buttons: {
+ 'Ok':function() {
+ if(isnew) {
+ OC.Contacts.Card.saveAddress(this, $('#addresses dl:last-child').find('input').first(), isnew);
+ } else {
+ OC.Contacts.Card.saveAddress(this, obj, isnew);
}
+ $(this).dialog('close');
},
- close : function(event, ui) {
- $(this).dialog('destroy').remove();
+ 'Cancel':function() {
+ $(this).dialog('close');
if(isnew) {
container.remove();
}
- },
- open : function(event, ui) {
- $( "#adr_city" ).autocomplete({
- source: function( request, response ) {
- $.ajax({
- url: "http://ws.geonames.org/searchJSON",
- dataType: "jsonp",
- data: {
- featureClass: "P",
- style: "full",
- maxRows: 12,
- lang: lang,
- name_startsWith: request.term
- },
- success: function( data ) {
- response( $.map( data.geonames, function( item ) {
- return {
- label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
- value: item.name,
- country: item.countryName
- }
- }));
- }
- });
- },
- minLength: 2,
- select: function( event, ui ) {
- if(ui.item && $('#adr_country').val().trim().length == 0) {
- $('#adr_country').val(ui.item.country);
+ }
+ },
+ close : function(event, ui) {
+ $(this).dialog('destroy').remove();
+ $('#address_dialog').remove();
+ },
+ open : function(event, ui) {
+ $( "#adr_city" ).autocomplete({
+ source: function( request, response ) {
+ $.ajax({
+ url: "http://ws.geonames.org/searchJSON",
+ dataType: "jsonp",
+ data: {
+ featureClass: "P",
+ style: "full",
+ maxRows: 12,
+ lang: lang,
+ name_startsWith: request.term
+ },
+ success: function( data ) {
+ response( $.map( data.geonames, function( item ) {
+ return {
+ label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
+ value: item.name,
+ country: item.countryName
+ }
+ }));
}
- },
- open: function() {
- $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
- },
- close: function() {
- $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
+ });
+ },
+ minLength: 2,
+ select: function( event, ui ) {
+ if(ui.item && $('#adr_country').val().trim().length == 0) {
+ $('#adr_country').val(ui.item.country);
}
- });
- $( "#adr_country" ).autocomplete({
- source: function( request, response ) {
- $.ajax({
- url: "http://ws.geonames.org/searchJSON",
- dataType: "jsonp",
- data: {
- /*featureClass: "A",*/
- featureCode: "PCLI",
- /*countryBias: "true",*/
- /*style: "full",*/
- lang: lang,
- maxRows: 12,
- name_startsWith: request.term
- },
- success: function( data ) {
- response( $.map( data.geonames, function( item ) {
- return {
- label: item.name,
- value: item.name
- }
- }));
- }
- });
- },
- minLength: 2,
- select: function( event, ui ) {
- /*if(ui.item) {
- $('#adr_country').val(ui.item.country);
+ },
+ open: function() {
+ $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
+ },
+ close: function() {
+ $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
+ }
+ });
+ $('#adr_country').autocomplete({
+ source: function( request, response ) {
+ $.ajax({
+ url: "http://ws.geonames.org/searchJSON",
+ dataType: "jsonp",
+ data: {
+ /*featureClass: "A",*/
+ featureCode: "PCLI",
+ /*countryBias: "true",*/
+ /*style: "full",*/
+ lang: lang,
+ maxRows: 12,
+ name_startsWith: request.term
+ },
+ success: function( data ) {
+ response( $.map( data.geonames, function( item ) {
+ return {
+ label: item.name,
+ value: item.name
+ }
+ }));
}
- log( ui.item ?
- "Selected: " + ui.item.label :
- "Nothing selected, input was " + this.value);*/
- },
- open: function() {
- $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
- },
- close: function() {
- $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
+ });
+ },
+ minLength: 2,
+ select: function( event, ui ) {
+ /*if(ui.item) {
+ $('#adr_country').val(ui.item.country);
}
- });
- }
- });
- } else {
- alert(jsondata.data.message);
- }
- });
- }
- },
- saveAddress:function(dlg, obj, isnew){
- if(isnew) {
- container = $('#addressdisplay dl').last();
- obj = $('#addressdisplay dl:last-child').find('input').first();
- } else {
- checksum = Contacts.UI.checksumFor(obj);
- container = Contacts.UI.propertyContainerFor(obj);
+ log( ui.item ?
+ "Selected: " + ui.item.label :
+ "Nothing selected, input was " + this.value);*/
+ },
+ open: function() {
+ $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
+ },
+ close: function() {
+ $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
+ }
+ });
+ }
+ });
+ } else {
+ alert(jsondata.data.message);
+ }
+ });
+ }
+ },
+ saveAddress:function(dlg, obj, isnew){
+ if(!this.enabled) {
+ return;
+ }
+ if(isnew) {
+ container = $('#addresses dl').last();
+ obj = container.find('input').first();
+ } else {
+ checksum = OC.Contacts.checksumFor(obj);
+ container = OC.Contacts.propertyContainerFor(obj);
+ }
+ var adr = new Array(
+ $(dlg).find('#adr_pobox').val().strip_tags(),
+ $(dlg).find('#adr_extended').val().strip_tags(),
+ $(dlg).find('#adr_street').val().strip_tags(),
+ $(dlg).find('#adr_city').val().strip_tags(),
+ $(dlg).find('#adr_region').val().strip_tags(),
+ $(dlg).find('#adr_zipcode').val().strip_tags(),
+ $(dlg).find('#adr_country').val().strip_tags()
+ );
+ container.find('.adr').val(adr.join(';'));
+ container.find('.adr_type').val($(dlg).find('#adr_type').val());
+ container.find('.adr_type_label').html(t('contacts',ucwords($(dlg).find('#adr_type').val().toLowerCase())));
+ OC.Contacts.Card.saveProperty($(container).find('input').first());
+ var adrtxt = '';
+ if(adr[0].length > 0) {
+ adrtxt = adrtxt + '<li>' + adr[0] + '</li>';
+ }
+ if(adr[1].length > 0) {
+ adrtxt = adrtxt + '<li>' + adr[1] + '</li>';
+ }
+ if(adr[2].length > 0) {
+ adrtxt = adrtxt + '<li>' + adr[2] + '</li>';
+ }
+ if(adr[3].length > 0 || adr[5].length > 0) {
+ adrtxt = adrtxt + '<li>' + adr[5] + ' ' + adr[3] + '</li>';
+ }
+ if(adr[4].length > 0) {
+ adrtxt = adrtxt + '<li>' + adr[4] + '</li>';
+ }
+ if(adr[6].length > 0) {
+ adrtxt = adrtxt + '<li>' + adr[6] + '</li>';
+ }
+ container.find('.addresslist').html(adrtxt);
+ },
+ uploadPhoto:function(filelist) {
+ if(!this.enabled) {
+ return;
+ }
+ if(!filelist) {
+ OC.dialogs.alert(t('contacts','No files selected for upload.'), t('contacts', 'Error'));
+ return;
+ }
+ var file = filelist[0];
+ var target = $('#file_upload_target');
+ var form = $('#file_upload_form');
+ var totalSize=0;
+ if(file.size > $('#max_upload').val()){
+ OC.dialogs.alert(t('contacts','The file you are trying to upload exceed the maximum size for file uploads on this server.'), t('contacts', 'Error'));
+ return;
+ } else {
+ target.load(function(){
+ var response=jQuery.parseJSON(target.contents().text());
+ if(response != undefined && response.status == 'success'){
+ OC.Contacts.Card.editPhoto(response.data.id, response.data.tmp);
+ //alert('File: ' + file.tmp + ' ' + file.name + ' ' + file.mime);
+ }else{
+ OC.dialogs.alert(response.data.message, t('contacts', 'Error'));
+ }
+ });
+ form.submit();
+ }
+ },
+ loadPhotoHandlers:function() {
+ var phototools = $('#phototools');
+ phototools.find('li a').tipsy('hide');
+ phototools.find('li a').tipsy();
+ if(this.data.PHOTO) {
+ phototools.find('.delete').click(function() {
+ $(this).tipsy('hide');
+ OC.Contacts.Card.deleteProperty($('#contacts_details_photo'), 'single');
+ $(this).hide();
+ });
+ phototools.find('.edit').click(function() {
+ $(this).tipsy('hide');
+ OC.Contacts.Card.editCurrentPhoto();
+ });
+ phototools.find('.delete').show();
+ phototools.find('.edit').show();
+ } else {
+ phototools.find('.delete').hide();
+ phototools.find('.edit').hide();
+ }
+ },
+ cloudPhotoSelected:function(path){
+ $.getJSON(OC.filePath('contacts', 'ajax', 'oc_photo.php'),{'path':path,'id':OC.Contacts.Card.id},function(jsondata){
+ if(jsondata.status == 'success'){
+ //alert(jsondata.data.page);
+ OC.Contacts.Card.editPhoto(jsondata.data.id, jsondata.data.tmp)
+ $('#edit_photo_dialog_img').html(jsondata.data.page);
}
- var adr = new Array($(dlg).find('#adr_pobox').val().strip_tags(),$(dlg).find('#adr_extended').val().strip_tags(),$(dlg).find('#adr_street').val().strip_tags(),$(dlg).find('#adr_city').val().strip_tags(),$(dlg).find('#adr_region').val().strip_tags(),$(dlg).find('#adr_zipcode').val().strip_tags(),$(dlg).find('#adr_country').val().strip_tags());
- $(container).find('.adr').val(adr.join(';'));
- $(container).find('.adr_type').val($(dlg).find('#adr_type').val());
- $(container).find('.adr_type_label').html(t('contacts',ucwords($(dlg).find('#adr_type').val().toLowerCase())));
- Contacts.UI.Card.saveProperty($(container).find('input').first());
- var adrtxt = '';
- if(adr[0].length > 0) {
- adrtxt = adrtxt + '<li>' + adr[0] + '</li>';
+ else{
+ OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
}
- if(adr[1].length > 0) {
- adrtxt = adrtxt + '<li>' + adr[1] + '</li>';
+ });
+ },
+ loadPhoto:function(){
+ var self = this;
+ var refreshstr = '&refresh='+Math.random();
+ $('#phototools li a').tipsy('hide');
+ var wrapper = $('#contacts_details_photo_wrapper');
+ wrapper.addClass('loading').addClass('wait');
+ delete this.photo;
+ this.photo = new Image();
+ $(this.photo).load(function () {
+ $('img.contacts_details_photo').remove()
+ $(this).addClass('contacts_details_photo');
+ wrapper.css('width', $(this).get(0).width + 10);
+ wrapper.removeClass('loading').removeClass('wait');
+ $(this).insertAfter($('#phototools')).fadeIn();
+ }).error(function () {
+ // notify the user that the image could not be loaded
+ OC.Contacts.notify({message:t('contacts','Error loading profile picture.')});
+ }).attr('src', OC.linkTo('contacts', 'photo.php')+'?id='+self.id+refreshstr);
+ this.loadPhotoHandlers()
+ },
+ editCurrentPhoto:function(){
+ if(!this.enabled) {
+ return;
+ }
+ $.getJSON(OC.filePath('contacts', 'ajax', 'currentphoto.php'),{'id':this.id},function(jsondata){
+ if(jsondata.status == 'success'){
+ //alert(jsondata.data.page);
+ OC.Contacts.Card.editPhoto(jsondata.data.id, jsondata.data.tmp)
+ $('#edit_photo_dialog_img').html(jsondata.data.page);
}
- if(adr[2].length > 0) {
- adrtxt = adrtxt + '<li>' + adr[2] + '</li>';
+ else{
+ wrapper.removeClass('wait');
+ OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
}
- if(adr[3].length > 0 || adr[5].length > 0) {
- adrtxt = adrtxt + '<li>' + adr[5] + ' ' + adr[3] + '</li>';
+ });
+ },
+ editPhoto:function(id, tmpkey){
+ if(!this.enabled) {
+ return;
+ }
+ //alert('editPhoto: ' + tmpkey);
+ $.getJSON(OC.filePath('contacts', 'ajax', 'cropphoto.php'),{'tmpkey':tmpkey,'id':this.id, 'requesttoken':requesttoken},function(jsondata){
+ if(jsondata.status == 'success'){
+ //alert(jsondata.data.page);
+ $('#edit_photo_dialog_img').html(jsondata.data.page);
}
- if(adr[4].length > 0) {
- adrtxt = adrtxt + '<li>' + adr[4] + '</li>';
+ else{
+ OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
}
- if(adr[6].length > 0) {
- adrtxt = adrtxt + '<li>' + adr[6] + '</li>';
+ });
+ if($('#edit_photo_dialog').dialog('isOpen') == true){
+ $('#edit_photo_dialog').dialog('moveToTop');
+ } else {
+ $('#edit_photo_dialog').dialog('open');
+ }
+ },
+ savePhoto:function() {
+ if(!this.enabled) {
+ return;
+ }
+ var target = $('#crop_target');
+ var form = $('#cropform');
+ var wrapper = $('#contacts_details_photo_wrapper');
+ var self = this;
+ wrapper.addClass('wait');
+ form.submit();
+ target.load(function(){
+ var response=jQuery.parseJSON(target.contents().text());
+ if(response != undefined && response.status == 'success'){
+ // load cropped photo.
+ self.loadPhoto();
+ OC.Contacts.Card.data.PHOTO = true;
+ }else{
+ OC.dialogs.alert(response.data.message, t('contacts', 'Error'));
+ wrapper.removeClass('wait');
}
- $(container).find('.addresslist').html(adrtxt);
- },
- uploadPhoto:function(filelist) {
- if(!filelist) {
- OC.dialogs.alert(t('contacts','No files selected for upload.'), t('contacts', 'Error'));
- return;
+ });
+ OC.Contacts.Contacts.refreshThumbnail(this.id);
+ },
+ addIM:function() {
+ //alert('addMail');
+ var imlist = $('#imlist');
+ imlist.find('li.template:first-child').clone(true).appendTo(imlist).show().find('a .tip').tipsy();
+ imlist.find('li.template:last-child').find('select').addClass('contacts_property');
+ imlist.find('li.template:last-child').removeClass('template').addClass('propertycontainer');
+ imlist.find('li:last-child').find('input[type="text"]').focus();
+ return false;
+ },
+ loadIMs:function() {
+ //console.log('loadIMs');
+ $('#ims').hide();
+ $('#imlist li.propertycontainer').remove();
+ var imlist = $('#imlist');
+ for(var im in this.data.IMPP) {
+ this.addIM();
+ var curim = imlist.find('li.propertycontainer:last-child');
+ if(typeof this.data.IMPP[im].label != 'undefined') {
+ curim.prepend('<label class="xab">'+this.data.IMPP[im].label+'</label>');
+ }
+ curim.data('checksum', this.data.IMPP[im]['checksum'])
+ curim.find('input[type="text"]').val(this.data.IMPP[im]['value'].split(':').pop());
+ for(var param in this.data.IMPP[im]['parameters']) {
+ if(param.toUpperCase() == 'PREF') {
+ curim.find('input[type="checkbox"]').attr('checked', 'checked')
+ }
+ else if(param.toUpperCase() == 'TYPE') {
+ if(typeof this.data.IMPP[im]['parameters'][param] == 'string') {
+ var found = false;
+ var imt = this.data.IMPP[im]['parameters'][param];
+ curim.find('select.types option').each(function(){
+ if($(this).val().toUpperCase() == imt.toUpperCase()) {
+ $(this).attr('selected', 'selected');
+ found = true;
+ }
+ });
+ if(!found) {
+ curim.find('select.type option:last-child').after('<option value="'+imt+'" selected="selected">'+imt+'</option>');
+ }
+ } else if(typeof this.data.IMPP[im]['parameters'][param] == 'object') {
+ for(imtype in this.data.IMPP[im]['parameters'][param]) {
+ var found = false;
+ var imt = this.data.IMPP[im]['parameters'][param][imtype];
+ curim.find('select.types option').each(function(){
+ if($(this).val().toUpperCase() == imt.toUpperCase().split(',')) {
+ $(this).attr('selected', 'selected');
+ found = true;
+ }
+ });
+ if(!found) {
+ curim.find('select.type option:last-child').after('<option value="'+imt+'" selected="selected">'+imt+'</option>');
+ }
+ }
+ }
+ }
+ else if(param.toUpperCase() == 'X-SERVICE-TYPE') {
+ curim.find('select.impp').val(this.data.IMPP[im]['parameters'][param].toLowerCase());
+ }
}
- var file = filelist[0];
- var target = $('#file_upload_target');
- var form = $('#file_upload_form');
- var totalSize=0;
- if(file.size > $('#max_upload').val()){
- OC.dialogs.alert(t('contacts','The file you are trying to upload exceed the maximum size for file uploads on this server.'), t('contacts', 'Error'));
- return;
- } else {
- target.load(function(){
- var response=jQuery.parseJSON(target.contents().text());
- if(response != undefined && response.status == 'success'){
- Contacts.UI.Card.editPhoto(response.data.id, response.data.tmp);
- //alert('File: ' + file.tmp + ' ' + file.name + ' ' + file.mime);
- }else{
- OC.dialogs.alert(response.data.message, t('contacts', 'Error'));
+ }
+ if($('#imlist li').length > 1) {
+ $('#ims').show();
+ }
+ return false;
+ },
+ addMail:function() {
+ var emaillist = $('#emaillist');
+ emaillist.find('li.template:first-child').clone(true).appendTo(emaillist).show().find('a .tip').tipsy();
+ emaillist.find('li.template:last-child').find('select').addClass('contacts_property');
+ emaillist.find('li.template:last-child').removeClass('template').addClass('propertycontainer');
+ emaillist.find('li:last-child').find('input[type="email"]').focus();
+ emaillist.find('li:last-child').find('select').multiselect({
+ noneSelectedText: t('contacts', 'Select type'),
+ header: false,
+ selectedList: 4,
+ classes: 'typelist'
+ });
+ return false;
+ },
+ loadMails:function() {
+ $('#emails').hide();
+ $('#emaillist li.propertycontainer').remove();
+ var emaillist = $('#emaillist');
+ for(var mail in this.data.EMAIL) {
+ this.addMail();
+ emaillist.find('li:last-child').find('select').multiselect('destroy');
+ var curemail = emaillist.find('li.propertycontainer:last-child');
+ if(typeof this.data.EMAIL[mail].label != 'undefined') {
+ curemail.prepend('<label class="xab">'+this.data.EMAIL[mail].label+'</label>');
+ }
+ curemail.data('checksum', this.data.EMAIL[mail]['checksum'])
+ curemail.find('input[type="email"]').val(this.data.EMAIL[mail]['value']);
+ for(var param in this.data.EMAIL[mail]['parameters']) {
+ if(param.toUpperCase() == 'PREF') {
+ curemail.find('input[type="checkbox"]').attr('checked', 'checked')
+ }
+ else if(param.toUpperCase() == 'TYPE') {
+ for(etype in this.data.EMAIL[mail]['parameters'][param]) {
+ var found = false;
+ var et = this.data.EMAIL[mail]['parameters'][param][etype];
+ curemail.find('select option').each(function(){
+ if($.inArray($(this).val().toUpperCase(), et.toUpperCase().split(',')) > -1) {
+ $(this).attr('selected', 'selected');
+ found = true;
+ }
+ });
+ if(!found) {
+ curemail.find('select option:last-child').after('<option value="'+et+'" selected="selected">'+et+'</option>');
+ }
}
- });
- form.submit();
+ }
}
- },
- loadPhotoHandlers:function(){
- $('#phototools li a').tipsy('hide');
- $('#phototools li a').tipsy();
- $('#phototools li a').click(function() {
- $(this).tipsy('hide');
- });
- $('#contacts_details_photo_wrapper').hover(
- function () {
- $('#phototools').slideDown(200);
- },
- function () {
- $('#phototools').slideUp(200);
+ curemail.find('select').multiselect({
+ noneSelectedText: t('contacts', 'Select type'),
+ header: false,
+ selectedList: 4,
+ classes: 'typelist'
+ });
+ }
+ if($('#emaillist li').length > 1) {
+ $('#emails').show();
+ }
+ $('#emaillist li:last-child').find('input[type="text"]').focus();
+ return false;
+ },
+ addPhone:function() {
+ var phonelist = $('#phonelist');
+ phonelist.find('li.template:first-child').clone(true).appendTo(phonelist); //.show();
+ phonelist.find('li.template:last-child').find('select').addClass('contacts_property');
+ phonelist.find('li.template:last-child').removeClass('template').addClass('propertycontainer');
+ phonelist.find('li:last-child').find('input[type="text"]').focus();
+ phonelist.find('li:last-child').find('select').multiselect({
+ noneSelectedText: t('contacts', 'Select type'),
+ header: false,
+ selectedList: 4,
+ classes: 'typelist'
+ });
+ phonelist.find('li:last-child').show();
+ return false;
+ },
+ loadPhones:function() {
+ $('#phones').hide();
+ $('#phonelist li.propertycontainer').remove();
+ var phonelist = $('#phonelist');
+ for(var phone in this.data.TEL) {
+ this.addPhone();
+ var curphone = phonelist.find('li.propertycontainer:last-child');
+ if(typeof this.data.TEL[phone].label != 'undefined') {
+ curphone.prepend('<label class="xab">'+this.data.TEL[phone].label+'</label>');
+ }
+ curphone.find('select').multiselect('destroy');
+ curphone.data('checksum', this.data.TEL[phone]['checksum'])
+ curphone.find('input[type="text"]').val(this.data.TEL[phone]['value']);
+ for(var param in this.data.TEL[phone]['parameters']) {
+ if(param.toUpperCase() == 'PREF') {
+ curphone.find('input[type="checkbox"]').attr('checked', 'checked');
}
- );
- $('#phototools').hover(
- function () {
- $(this).removeClass('transparent');
- },
- function () {
- $(this).addClass('transparent');
+ else if(param.toUpperCase() == 'TYPE') {
+ for(ptype in this.data.TEL[phone]['parameters'][param]) {
+ var found = false;
+ var pt = this.data.TEL[phone]['parameters'][param][ptype];
+ curphone.find('select option').each(function() {
+ //if ($(this).val().toUpperCase() == pt.toUpperCase()) {
+ if ($.inArray($(this).val().toUpperCase(), pt.toUpperCase().split(',')) > -1) {
+ $(this).attr('selected', 'selected');
+ found = true;
+ }
+ });
+ if(!found) {
+ curphone.find('select option:last-child').after('<option class="custom" value="'+pt+'" selected="selected">'+pt+'</option>');
+ }
+ }
}
- );
- if(this.data.PHOTO) {
- $('#phototools .delete').click(function() {
- $(this).tipsy('hide');
- Contacts.UI.Card.deleteProperty($('#contacts_details_photo'), 'single');
- $(this).hide();
- });
- $('#phototools .edit').click(function() {
- $(this).tipsy('hide');
- Contacts.UI.Card.editCurrentPhoto();
- });
- } else {
- $('#phototools .delete').hide();
- $('#phototools .edit').hide();
}
- $('#phototools .upload').click(function() {
- $('#file_upload_start').trigger('click');
- });
- $('#phototools .cloud').click(function() {
- OC.dialogs.filepicker(t('contacts', 'Select photo'), Contacts.UI.Card.cloudPhotoSelected, false, 'image', true);
- });
- },
- cloudPhotoSelected:function(path){
- $.getJSON(OC.filePath('contacts', 'ajax', 'oc_photo.php'),{'path':path,'id':Contacts.UI.Card.id},function(jsondata){
- if(jsondata.status == 'success'){
- //alert(jsondata.data.page);
- Contacts.UI.Card.editPhoto(jsondata.data.id, jsondata.data.tmp)
- $('#edit_photo_dialog_img').html(jsondata.data.page);
+ curphone.find('select').multiselect({
+ noneSelectedText: t('contacts', 'Select type'),
+ header: false,
+ selectedList: 4,
+ classes: 'typelist'
+ });
+ }
+ if(phonelist.find('li').length > 1) {
+ $('#phones').show();
+ }
+ return false;
+ },
+ },
+ Contacts:{
+ contacts:{},
+ deletionQueue:[],
+ batchnum:50,
+ warnNotDeleted:function(e) {
+ e = e || window.event;
+ var warn = t('contacts', 'Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted.');
+ if (e) {
+ e.returnValue = String(warn);
+ }
+ if(OC.Contacts.Contacts.deletionQueue.length > 0) {
+ setTimeout(OC.Contacts.Contacts.deleteFilesInQueue, 1);
+ }
+ return warn;
+ },
+ deleteFilesInQueue:function() {
+ var queue = OC.Contacts.Contacts.deletionQueue;
+ if(queue.length > 0) {
+ OC.Contacts.notify({cancel:true});
+ while(queue.length > 0) {
+ var id = queue.pop();
+ if(id) {
+ OC.Contacts.Card.doDelete(id, false);
}
- else{
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
+ }
+ }
+ },
+ getContact:function(id) {
+ if(!this.contacts[id]) {
+ this.contacts[id] = $('#contacts li[data-id="'+id+'"]');
+ if(!this.contacts[id]) {
+ self = this;
+ $.getJSON(OC.filePath('contacts', 'ajax', 'contactdetails.php'),{'id':id},function(jsondata){
+ if(jsondata.status == 'success'){
+ self.contacts[id] = self.insertContact({data:jsondata.data});
+ }
+ else{
+ OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
+ }
+ });
}
- });
- },
- loadPhoto:function(refresh){
- $('#phototools li a').tipsy('hide');
- $.getJSON(OC.filePath('contacts', 'ajax', 'loadphoto.php'),{'id':this.id, 'refresh': refresh},function(jsondata){
+ }
+ return this.contacts[id];
+ },
+ drop:function(event, ui) {
+ var dragitem = ui.draggable, droptarget = $(this);
+ if(dragitem.is('li')) {
+ OC.Contacts.Contacts.dropContact(event, dragitem, droptarget);
+ } else {
+ OC.Contacts.Contacts.dropAddressbook(event, dragitem, droptarget);
+ }
+ },
+ dropContact:function(event, dragitem, droptarget) {
+ if(dragitem.data('bookid') == droptarget.data('id')) {
+ return false;
+ }
+ var droplist = (droptarget.is('ul')) ? droptarget : droptarget.next();
+ $.post(OC.filePath('contacts', 'ajax', 'contact/move.php'),
+ {
+ id: dragitem.data('id'),
+ aid: droptarget.data('id')
+ },
+ function(jsondata){
if(jsondata.status == 'success'){
- $('#contacts_details_photo_wrapper').data('checksum', jsondata.data.checksum);
- $('#contacts_details_photo_wrapper').html(jsondata.data.page);
- Contacts.UI.Card.loadPhotoHandlers();
- }
- else{
+ dragitem.attr('data-bookid', droptarget.data('id'))
+ dragitem.data('bookid', droptarget.data('id'));
+ OC.Contacts.Contacts.insertContact({
+ contactlist:droplist,
+ contact:dragitem.detach()
+ });
+ OC.Contacts.Contacts.scrollTo(dragitem.data('id'));
+ } else {
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
}
- });
- $('#file_upload_form').show();
- $('#contacts_propertymenu_dropdown a[data-type="PHOTO"]').parent().hide();
- },
- editCurrentPhoto:function(){
- $.getJSON(OC.filePath('contacts', 'ajax', 'currentphoto.php'),{'id':this.id},function(jsondata){
+ });
+ },
+ dropAddressbook:function(event, dragitem, droptarget) {
+ if(confirm(t('contacts', 'Do you want to merge these address books?'))) {
+ if(dragitem.data('bookid') == droptarget.data('id')) {
+ return false;
+ }
+ var droplist = (droptarget.is('ul')) ? droptarget : droptarget.next();
+ $.post(OC.filePath('contacts', 'ajax', 'contact/move.php'),
+ {
+ id: dragitem.data('id'),
+ aid: droptarget.data('id'),
+ isaddressbook: 1
+ },
+ function(jsondata){
if(jsondata.status == 'success'){
- //alert(jsondata.data.page);
- Contacts.UI.Card.editPhoto(jsondata.data.id, jsondata.data.tmp)
- $('#edit_photo_dialog_img').html(jsondata.data.page);
- }
- else{
+ OC.Contacts.Contacts.update(); // Easier to refresh the whole bunch.
+ } else {
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
}
});
- },
- editPhoto:function(id, tmp_path){
- //alert('editPhoto: ' + tmp_path);
- $.getJSON(OC.filePath('contacts', 'ajax', 'cropphoto.php'),{'tmp_path':tmp_path,'id':this.id,'requesttoken':requesttoken},function(jsondata){
- if(jsondata.status == 'success'){
- //alert(jsondata.data.page);
- $('#edit_photo_dialog_img').html(jsondata.data.page);
- }
- else{
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
+ } else {
+ return false;
+ }
+ },
+ /**
+ * @params params An object with the properties 'contactlist':a jquery object of the ul to insert into,
+ * 'contacts':a jquery object of all items in the list and either 'data': an object with the properties
+ * id, addressbookid and displayname or 'contact': a listitem to be inserted directly.
+ * If 'contactlist' or 'contacts' aren't defined they will be search for based in the properties in 'data'.
+ */
+ insertContact:function(params) {
+ var id, bookid;
+ if(!params.contactlist) {
+ // FIXME: Check if contact really exists.
+ bookid = params.data ? params.data.addressbookid : params.contact.data('bookid');
+ id = params.data ? params.data.id : params.contact.data('id');
+ params.contactlist = $('#contacts ul[data-id="'+bookid+'"]');
+ }
+ if(!params.contacts) {
+ bookid = params.data ? params.data.addressbookid : params.contact.data('bookid');
+ id = params.data ? params.data.id : params.contact.data('id');
+ params.contacts = $('#contacts ul[data-id="'+bookid+'"] li');
+ }
+ var contact = params.data
+ ? $('<li data-id="'+params.data.id+'" data-bookid="'+params.data.addressbookid
+ + '" role="button"><a href="'+OC.linkTo('contacts', 'index.php')+'&id='
+ + params.data.id+'" style="background: url('+OC.filePath('contacts', '', 'thumbnail.php')
+ + '?id='+params.data.id+') no-repeat scroll 0% 0% transparent;">'
+ + params.data.displayname+'</a></li>')
+ : params.contact;
+ var added = false;
+ var name = params.data ? params.data.displayname.toLowerCase() : contact.find('a').text().toLowerCase();
+ if(params.contacts) {
+ params.contacts.each(function() {
+ if ($(this).text().toLowerCase() > name) {
+ $(this).before(contact);
+ added = true;
+ return false;
}
});
- if($('#edit_photo_dialog').dialog('isOpen') == true){
- $('#edit_photo_dialog').dialog('moveToTop');
+ }
+ if(!added || !params.contacts) {
+ params.contactlist.append(contact);
+ }
+ //this.contacts[id] = contact;
+ return contact;
+ },
+ addAddressbook:function(name, description, cb) {
+ $.post(OC.filePath('contacts', 'ajax/addressbook', 'add.php'), { name: name, description: description, active: true },
+ function(jsondata) {
+ if(jsondata.status == 'success'){
+ if(cb && typeof cb == 'function') {
+ cb(jsondata.data.addressbook);
+ }
} else {
- $('#edit_photo_dialog').dialog('open');
+ OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
+ return false;
}
- },
- savePhoto:function(){
- var target = $('#crop_target');
- var form = $('#cropform');
- form.submit();
- target.load(function(){
- var response=jQuery.parseJSON(target.contents().text());
- if(response != undefined && response.status == 'success'){
- // load cropped photo.
- $('#contacts_details_photo_wrapper').html(response.data.page);
- Contacts.UI.Card.data.PHOTO = true;
- Contacts.UI.Card.loadPhotoHandlers();
- }else{
- OC.dialogs.alert(response.data.message, t('contacts', 'Error'));
+ });
+ },
+ doImport:function(file, aid){
+ $.post(OC.filePath('contacts', '', 'import.php'), { id: aid, file: file, fstype: 'OC_FilesystemView' },
+ function(jsondata){
+ if(jsondata.status != 'success'){
+ OC.Contacts.notify({message:jsondata.data.message});
}
+ });
+ return false;
+ },
+ next:function(reverse) {
+ var curlistitem = this.getContact(OC.Contacts.Card.id);
+ var newlistitem = reverse ? curlistitem.prev('li') : curlistitem.next('li');
+ if(newlistitem) {
+ curlistitem.removeClass('active');
+ OC.Contacts.Card.update({
+ cid:newlistitem.data('id'),
+ aid:newlistitem.data('bookid')
});
- Contacts.UI.Contacts.refreshThumbnail(this.id);
- },
- addMail:function() {
- //alert('addMail');
- $('#emaillist li.template:first-child').clone(true).appendTo($('#emaillist')).show().find('a .tip').tipsy();
- $('#emaillist li.template:last-child').find('select').addClass('contacts_property');
- $('#emaillist li.template:last-child').removeClass('template').addClass('propertycontainer');
- $('#emaillist li:last-child').find('input[type="email"]').focus();
- return false;
- },
- loadMails:function() {
- $('#emails').hide();
- $('#emaillist li.propertycontainer').remove();
- for(var mail in this.data.EMAIL) {
- this.addMail();
- //$('#emaillist li:first-child').clone().appendTo($('#emaillist')).show();
- $('#emaillist li:last-child').data('checksum', this.data.EMAIL[mail]['checksum'])
- $('#emaillist li:last-child').find('input[type="email"]').val(this.data.EMAIL[mail]['value']);
- for(var param in this.data.EMAIL[mail]['parameters']) {
- if(param.toUpperCase() == 'PREF') {
- $('#emaillist li:last-child').find('input[type="checkbox"]').attr('checked', 'checked')
- }
- else if(param.toUpperCase() == 'TYPE') {
- for(etype in this.data.EMAIL[mail]['parameters'][param]) {
- var et = this.data.EMAIL[mail]['parameters'][param][etype];
- $('#emaillist li:last-child').find('select option').each(function(){
- if($.inArray($(this).val().toUpperCase(), et.toUpperCase().split(',')) > -1) {
- $(this).attr('selected', 'selected');
- }
- });
- }
- }
- }
+ }
+ },
+ previous:function() {
+ this.next(true);
+ },
+ nextAddressbook:function(reverse) {
+ console.log('nextAddressbook', reverse);
+ var curlistitem = this.getContact(OC.Contacts.Card.id);
+ var parent = curlistitem.parent('ul');
+ var newparent = reverse
+ ? parent.prevAll('ul').first()
+ : parent.nextAll('ul').first();
+ if(newparent) {
+ newlistitem = newparent.find('li:first-child');
+ if(newlistitem) {
+ parent.slideUp().prev('h3').removeClass('active');
+ newparent.slideDown().prev('h3').addClass('active');
+ curlistitem.removeClass('active');
+ OC.Contacts.Card.update({
+ cid:newlistitem.data('id'),
+ aid:newlistitem.data('bookid')
+ });
}
- if($('#emaillist li').length > 1) {
- $('#emails').show();
- $('#contact_communication').show();
+ }
+ },
+ previousAddressbook:function() {
+ console.log('previousAddressbook');
+ this.nextAddressbook(true);
+ },
+ // Reload the contacts list.
+ update:function(params){
+ if(!params) { params = {}; }
+ if(!params.start) {
+ if(params.aid) {
+ $('#contacts h3[data-id="'+params.aid+'"],#contacts ul[data-id="'+params.aid+'"]').remove();
+ } else {
+ $('#contacts').empty();
}
-
- $('#emaillist li:last-child').find('input[type="text"]').focus();
- return false;
- },
- addPhone:function() {
- $('#phonelist li.template:first-child').clone(true).appendTo($('#phonelist')); //.show();
- $('#phonelist li.template:last-child').find('select').addClass('contacts_property');
- $('#phonelist li.template:last-child').removeClass('template').addClass('propertycontainer');
- $('#phonelist li:last-child').find('input[type="text"]').focus();
- $('#phonelist li:last-child').find('select').multiselect({
- noneSelectedText: t('contacts', 'Select type'),
- header: false,
- selectedList: 4,
- classes: 'typelist'
- });
- $('#phonelist li:last-child').show();
- return false;
- },
- loadPhones:function() {
- $('#phones').hide();
- $('#phonelist li.propertycontainer').remove();
- for(var phone in this.data.TEL) {
- this.addPhone();
- $('#phonelist li:last-child').find('select').multiselect('destroy');
- $('#phonelist li:last-child').data('checksum', this.data.TEL[phone]['checksum'])
- $('#phonelist li:last-child').find('input[type="text"]').val(this.data.TEL[phone]['value']);
- for(var param in this.data.TEL[phone]['parameters']) {
- if(param.toUpperCase() == 'PREF') {
- $('#phonelist li:last-child').find('input[type="checkbox"]').attr('checked', 'checked');
- }
- else if(param.toUpperCase() == 'TYPE') {
- for(ptype in this.data.TEL[phone]['parameters'][param]) {
- var pt = this.data.TEL[phone]['parameters'][param][ptype];
- $('#phonelist li:last-child').find('select option').each(function(){
- //if ($(this).val().toUpperCase() == pt.toUpperCase()) {
- if ($.inArray($(this).val().toUpperCase(), pt.toUpperCase().split(',')) > -1) {
- $(this).attr('selected', 'selected');
+ }
+ self = this;
+ console.log('update: ' + params.cid + ' ' + params.aid + ' ' + params.start);
+ var firstrun = false;
+ var opts = {};
+ opts['startat'] = (params.start?params.start:0);
+ if(params.aid) {
+ opts['aid'] = params.aid;
+ }
+ $.getJSON(OC.filePath('contacts', 'ajax', 'contact/list.php'),opts,function(jsondata){
+ if(jsondata.status == 'success'){
+ var books = jsondata.data.entries;
+ $.each(books, function(b, book) {
+ if($('#contacts h3[data-id="'+b+'"]').length == 0) {
+ firstrun = true;
+ if($('#contacts h3').length == 0) {
+ $('#contacts').html('<h3 class="addressbook" contextmenu="addressbookmenu" data-id="'
+ + b + '" data-permissions="' + book.permissions + '">' + book.displayname
+ + '</h3><ul class="contacts hidden" data-id="'+b+'" data-permissions="'
+ + book.permissions + '"></ul>');
+ } else {
+ if(!$('#contacts h3[data-id="' + b + '"]').length) {
+ var item = $('<h3 class="addressbook" contextmenu="addressbookmenu" data-id="'
+ + b + '" data-permissions="' + book.permissions + '">'
+ + book.displayname+'</h3><ul class="contacts hidden" data-id="' + b
+ + '" data-permissions="' + book.permissions + '"></ul>');
+ var added = false;
+ $('#contacts h3').each(function(){
+ if ($(this).text().toLowerCase() > book.displayname.toLowerCase()) {
+ $(this).before(item).fadeIn('fast');
+ added = true;
+ return false;
+ }
+ });
+ if(!added) {
+ $('#contacts').append(item);
}
- });
+ }
}
+ $('#contacts h3[data-id="'+b+'"]').on('click', function(event) {
+ $('#contacts h3').removeClass('active');
+ $(this).addClass('active');
+ $('#contacts ul[data-id="'+b+'"]').slideToggle(300);
+ return false;
+ });
+ var accept = 'li:not([data-bookid="'+b+'"]),h3:not([data-id="'+b+'"])';
+ $('#contacts h3[data-id="'+b+'"],#contacts ul[data-id="'+b+'"]').droppable({
+ drop: OC.Contacts.Contacts.drop,
+ activeClass: 'ui-state-hover',
+ accept: accept
+ });
}
- }
- $('#phonelist li:last-child').find('select').multiselect({
- noneSelectedText: t('contacts', 'Select type'),
- header: false,
- selectedList: 4,
- classes: 'typelist'
- });
- }
- if($('#phonelist li').length > 1) {
- $('#phones').show();
- $('#contact_communication').show();
- }
- return false;
- },
- },
- Addressbooks:{
- droptarget:undefined,
- droptext:t('contacts', 'Drop a VCF file to import contacts.'),
- overview:function(){
- if($('#chooseaddressbook_dialog').dialog('isOpen') == true){
- $('#chooseaddressbook_dialog').dialog('moveToTop');
- }else{
- $('#dialog_holder').load(OC.filePath('contacts', 'ajax', 'chooseaddressbook.php'), function(jsondata){
- if(jsondata.status != 'error'){
- $('#chooseaddressbook_dialog').dialog({
- minWidth: 600,
- close: function(event, ui) {
- $(this).dialog('destroy').remove();
+ var contactlist = $('#contacts ul[data-id="'+b+'"]');
+ var contacts = $('#contacts ul[data-id="'+b+'"] li');
+ for(var c in book.contacts) {
+ if(book.contacts[c].id == undefined) { continue; }
+ if(!$('#contacts li[data-id="'+book.contacts[c]['id']+'"]').length) {
+ var contact = OC.Contacts.Contacts.insertContact({contactlist:contactlist, contacts:contacts, data:book.contacts[c]});
+ if(c == self.batchnum-10) {
+ contact.bind('inview', function(event, isInView, visiblePartX, visiblePartY) {
+ $(this).unbind(event);
+ var bookid = $(this).data('bookid');
+ var numsiblings = $('.contacts li[data-bookid="'+bookid+'"]').length;
+ if (isInView && numsiblings >= self.batchnum) {
+ console.log('This would be a good time to load more contacts.');
+ OC.Contacts.Contacts.update({cid:params.cid, aid:bookid, start:$('#contacts li[data-bookid="'+bookid+'"]').length});
+ }
+ });
}
- }).css('overflow','visible');
- } else {
- alert(jsondata.data.message);
+ }
}
});
- }
- return false;
- },
- activation:function(checkbox, bookid)
- {
- $.post(OC.filePath('contacts', 'ajax', 'activation.php'), { bookid: bookid, active: checkbox.checked?1:0 },
- function(data) {
- if (data.status == 'success'){
- checkbox.checked = data.active == 1;
- Contacts.UI.Contacts.update();
- }
- });
- },
- newAddressbook:function(object){
- var tr = $(document.createElement('tr'))
- .load(OC.filePath('contacts', 'ajax', 'addbook.php'));
- $(object).closest('tr').after(tr).hide();
- },
- editAddressbook:function(object, bookid){
- var tr = $(document.createElement('tr'))
- .load(OC.filePath('contacts', 'ajax', 'editaddressbook.php') + "?bookid="+bookid);
- $(object).closest('tr').after(tr).hide();
- },
- deleteAddressbook:function(obj, bookid){
- var check = confirm("Do you really want to delete this address book?");
- if(check == false){
- return false;
- }else{
- $.post(OC.filePath('contacts', 'ajax', 'deletebook.php'), { id: bookid},
- function(jsondata) {
- if (jsondata.status == 'success'){
- $(obj).closest('tr').remove();
- Contacts.UI.Contacts.update();
- } else {
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- }
- },
- loadImportHandlers:function() {
- $('#import_upload_start').change(function(){
- Contacts.UI.Addressbooks.uploadImport(this.files);
- });
- $('#importaddressbook_dialog').find('.upload').click(function() {
- Contacts.UI.Addressbooks.droptarget.html(t('contacts', 'Uploading...'));
- Contacts.UI.loading(Contacts.UI.Addressbooks.droptarget, true);
- //$('#import_upload_start').trigger('click');
- //return false;
- });
- $('#importaddressbook_dialog').find('.upload').tipsy();
- this.droptarget = $('#import_drop_target');
- $(this.droptarget).bind('dragover',function(event){
- $(event.target).addClass('droppable');
- event.stopPropagation();
- event.preventDefault();
- });
- $(this.droptarget).bind('dragleave',function(event){
- $(event.target).removeClass('droppable');
- });
- $(this.droptarget).bind('drop',function(event){
- event.stopPropagation();
- event.preventDefault();
- $(event.target).removeClass('droppable');
- $(event.target).html(t('contacts', 'Uploading...'));
- Contacts.UI.loading(event.target, true);
- $.importUpload(event.originalEvent.dataTransfer.files);
- });
-
- $.importUpload = function(files){
- var file = files[0];
- if(file.size > $('#max_upload').val()){
- OC.dialogs.alert(t('contacts','The file you are trying to upload exceed the maximum size for file uploads on this server.'), t('contacts','Upload too large'));
- $(Contacts.UI.Addressbooks.droptarget).html(Contacts.UI.Addressbooks.droptext);
- Contacts.UI.loading(Contacts.UI.Addressbooks.droptarget, false);
- return;
+ if($('#contacts h3').length > 1) {
+ $('#contacts li,#contacts h3').draggable({
+ distance: 10,
+ revert: 'invalid',
+ axis: 'y', containment: '#contacts',
+ scroll: true, scrollSensitivity: 40,
+ opacity: 0.7, helper: 'clone'
+ });
+ } else {
+ $('#contacts h3').first().addClass('active');
}
- if(file.type.indexOf('text') != 0) {
- OC.dialogs.alert(t('contacts','You have dropped a file type that cannot be imported: ') + file.type, t('contacts','Wrong file type'));
- $(Contacts.UI.Addressbooks.droptarget).html(Contacts.UI.Addressbooks.droptext);
- Contacts.UI.loading(Contacts.UI.Addressbooks.droptarget, false);
- return;
+ if(opts['startat'] == 0) { // only update card on first load.
+ OC.Contacts.Card.update(params);
}
- var xhr = new XMLHttpRequest();
-
- if (!xhr.upload) {
- OC.dialogs.alert(t('contacts', 'Your browser doesn\'t support AJAX upload. Please upload the contacts file to ownCloud and import that way.'), t('contacts', 'Error'))
- }
- importUpload = xhr.upload,
- xhr.onreadystatechange = function() {
- if (xhr.readyState == 4){
- response = $.parseJSON(xhr.responseText);
- if(response.status == 'success') {
- if(xhr.status == 200) {
- Contacts.UI.Addressbooks.doImport(response.data.path, response.data.file);
- } else {
- $(Contacts.UI.Addressbooks.droptarget).html(Contacts.UI.Addressbooks.droptext);
- Contacts.UI.loading(Contacts.UI.Addressbooks.droptarget, false);
- OC.dialogs.alert(xhr.status + ': ' + xhr.responseText, t('contacts', 'Error'));
- }
- } else {
- OC.dialogs.alert(response.data.message, t('contacts', 'Error'));
- }
- }
- };
- xhr.open('POST', OC.filePath('contacts', 'ajax', 'uploadimport.php') + '?file='+encodeURIComponent(file.name)+'&requesttoken='+requesttoken, true);
- xhr.setRequestHeader('Cache-Control', 'no-cache');
- xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
- xhr.setRequestHeader('X_FILE_NAME', encodeURIComponent(file.name));
- xhr.setRequestHeader('X-File-Size', file.size);
- xhr.setRequestHeader('Content-Type', file.type);
- xhr.send(file);
- }
- },
- uploadImport:function(filelist) {
- if(!filelist) {
- OC.dialogs.alert(t('contacts','No files selected for upload.'), t('contacts', 'Error'));
- return;
- }
- //var file = filelist.item(0);
- var file = filelist[0];
- var target = $('#import_upload_target');
- var form = $('#import_upload_form');
- var totalSize=0;
- if(file.size > $('#max_upload').val()){
- OC.dialogs.alert(t('contacts','The file you are trying to upload exceed the maximum size for file uploads on this server.'), t('contacts', 'Error'));
- return;
} else {
- target.load(function(){
- var response=jQuery.parseJSON(target.contents().text());
- if(response != undefined && response.status == 'success'){
- Contacts.UI.Addressbooks.doImport(response.data.path, response.data.file);
- }else{
- OC.dialogs.alert(response.data.message, t('contacts', 'Error'));
- }
- });
- form.submit();
+ OC.Contacts.notify({message:t('contacts', 'Error')+': '+jsondata.data.message});
}
- },
- importAddressbook:function(object){
- var tr = $(document.createElement('tr'))
- .load(OC.filePath('contacts', 'ajax', 'importaddressbook.php'));
- $(object).closest('tr').after(tr).hide();
- },
- doImport:function(path, file){
- $(Contacts.UI.Addressbooks.droptarget).html(t('contacts', 'Importing...'));
- Contacts.UI.loading(Contacts.UI.Addressbooks.droptarget, true);
- var id = $('#importaddressbook_dialog').find('#book').val();
- $.post(OC.filePath('contacts', '', 'import.php'), { id: id, path: path, file: file, fstype: 'OC_FilesystemView' },
- function(jsondata){
- if(jsondata.status == 'success'){
- Contacts.UI.Addressbooks.droptarget.html(t('contacts', 'Import done. Success/Failure: ')+jsondata.data.imported+'/'+jsondata.data.failed);
- $('#chooseaddressbook_dialog').find('#close_button').val(t('contacts', 'OK'));
- Contacts.UI.Contacts.update();
- setTimeout(
- function() {
- $(Contacts.UI.Addressbooks.droptarget).html(Contacts.UI.Addressbooks.droptext);
- }, 5000);
- } else {
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- Contacts.UI.loading(Contacts.UI.Addressbooks.droptarget, false);
- },
- submit:function(button, bookid){
- var displayname = $("#displayname_"+bookid).val().trim();
- var active = $("#edit_active_"+bookid+":checked").length;
- var description = $("#description_"+bookid).val();
-
- if(displayname.length == 0) {
- OC.dialogs.alert(t('contacts', 'Displayname cannot be empty.'), t('contacts', 'Error'));
- return false;
- }
- var url;
- if (bookid == 'new'){
- url = OC.filePath('contacts', 'ajax', 'createaddressbook.php');
- }else{
- url = OC.filePath('contacts', 'ajax', 'updateaddressbook.php');
- }
- $.post(url, { id: bookid, name: displayname, active: active, description: description },
- function(jsondata){
- if(jsondata.status == 'success'){
- $(button).closest('tr').prev().html(jsondata.page).show().next().remove();
- Contacts.UI.Contacts.update();
- } else {
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- },
- cancel:function(button, bookid){
- $(button).closest('tr').prev().show().next().remove();
- }
+ });
},
- Contacts:{
- // Reload the contacts list.
- update:function(){
- $.getJSON(OC.filePath('contacts', 'ajax', 'contacts.php'),{},function(jsondata){
- if(jsondata.status == 'success'){
- $('#contacts').html(jsondata.data.page);
- Contacts.UI.Card.update();
- }
- else{
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- setTimeout(function() {
- $('#contacts li').unbind('inview');
- $('#contacts li').bind('inview', function(event, isInView, visiblePartX, visiblePartY) {
- if (isInView) {
- if (!$(this).find('a').attr('style')) {
- $(this).find('a').css('background','url('+OC.filePath('contacts', '', 'thumbnail.php')+'?id='+$(this).data('id')+') no-repeat');
- }
- }
- })}, 500);
- setTimeout(Contacts.UI.Contacts.lazyupdate, 500);
- },
- // Add thumbnails to the contact list as they become visible in the viewport.
- lazyupdate:function(){
- $('#contacts li').live('inview', function(){
- if (!$(this).find('a').attr('style')) {
- $(this).find('a').css('background','url('+OC.filePath('contacts', '', 'thumbnail.php')+'?id='+$(this).data('id')+') no-repeat');
- }
- });
- },
- refreshThumbnail:function(id){
- var item = $('#contacts [data-id="'+id+'"]').find('a');
- item.html(Contacts.UI.Card.fn);
- item.css('background','url('+OC.filePath('contacts', '', 'thumbnail.php')+'?id='+id+'&refresh=1'+Math.random()+') no-repeat');
- },
- scrollTo:function(id){
+ refreshThumbnail:function(id){
+ var item = $('.contacts li[data-id="'+id+'"]').find('a');
+ item.html(OC.Contacts.Card.fn);
+ item.css('background','url('+OC.filePath('contacts', '', 'thumbnail.php')+'?id='+id+'&refresh=1'+Math.random()+') no-repeat');
+ },
+ scrollTo:function(id){
+ var item = $('#contacts li[data-id="'+id+'"]');
+ if(item && $.isNumeric(item.offset().top)) {
+ console.log('scrollTo ' + parseInt(item.offset().top));
$('#contacts').animate({
- scrollTop: $('#leftcontent li[data-id="'+id+'"]').offset().top-20}, 'slow','swing');
+ scrollTop: parseInt(item.offset()).top-40}, 'slow','swing');
}
}
}
}
$(document).ready(function(){
- OCCategories.changed = Contacts.UI.Card.categoriesChanged;
+ OCCategories.changed = OC.Contacts.Card.categoriesChanged;
OCCategories.app = 'contacts';
- $('#notification').click(function(){
- $('#notification').fadeOut();
+ var ninjahelp = $('#ninjahelp');
+
+ $('#bottomcontrols .settings').on('click keydown', function() {
+ try {
+ ninjahelp.hide();
+ OC.appSettings({appid:'contacts', loadJS:true, cache:false});
+ } catch(e) {
+ console.log('error:', e.message);
+ }
+ });
+ $('#bottomcontrols .import').click(function() {
+ $('#import_upload_start').trigger('click');
});
-
- $('#chooseaddressbook').click(Contacts.UI.Addressbooks.overview);
- $('#chooseaddressbook').keydown(Contacts.UI.Addressbooks.overview);
+ $('#contacts_newcontact').on('click keydown', OC.Contacts.Card.editNew);
+
+ ninjahelp.find('.close').on('click keydown',function() {
+ ninjahelp.hide();
+ });
+
+ $(document).on('keyup', function(event) {
+ if(event.target.nodeName.toUpperCase() != 'BODY'
+ || $('#contacts li').length == 0
+ || !OC.Contacts.Card.id) {
+ return;
+ }
+ //console.log(event.which + ' ' + event.target.nodeName);
+ /**
+ * To add:
+ * Shift-a: add addressbook
+ * u (85): hide/show leftcontent
+ * f (70): add field
+ */
+ switch(event.which) {
+ case 27: // Esc
+ ninjahelp.hide();
+ break;
+ case 46: // Delete
+ if(event.shiftKey) {
+ OC.Contacts.Card.delayedDelete();
+ }
+ break;
+ case 40: // down
+ case 74: // j
+ OC.Contacts.Contacts.next();
+ break;
+ case 65: // a
+ if(event.shiftKey) {
+ // add addressbook
+ OC.Contacts.notImplemented();
+ break;
+ }
+ OC.Contacts.Card.editNew();
+ break;
+ case 38: // up
+ case 75: // k
+ OC.Contacts.Contacts.previous();
+ break;
+ case 34: // PageDown
+ case 78: // n
+ // next addressbook
+ OC.Contacts.Contacts.nextAddressbook();
+ break;
+ case 79: // o
+ var aid = $('#contacts h3.active').first().data('id');
+ if(aid) {
+ $('#contacts ul[data-id="'+aid+'"]').slideToggle(300);
+ }
+ break;
+ case 33: // PageUp
+ case 80: // p
+ // prev addressbook
+ OC.Contacts.Contacts.previousAddressbook();
+ break;
+ case 82: // r
+ OC.Contacts.Contacts.update({cid:OC.Contacts.Card.id});
+ break;
+ case 191: // ?
+ ninjahelp.toggle('fast');
+ break;
+ }
+
+ });
+
+ //$(window).on('beforeunload', OC.Contacts.Contacts.deleteFilesInQueue);
- $('#contacts_newcontact').click(Contacts.UI.Card.editNew);
- $('#contacts_newcontact').keydown(Contacts.UI.Card.editNew);
-
// Load a contact.
- $('#contacts').keydown(function(event) {
- if(event.which == 13) {
- $('#contacts').click();
+ $('.contacts').keydown(function(event) {
+ if(event.which == 13 || event.which == 32) {
+ $('.contacts').click();
}
});
- $('#contacts').click(function(event){
+ $(document).on('click', '#contacts', function(event){
var $tgt = $(event.target);
if ($tgt.is('li') || $tgt.is('a')) {
var item = $tgt.is('li')?$($tgt):($tgt).parent();
var id = item.data('id');
+ var bookid = item.data('bookid');
item.addClass('active');
var oldid = $('#rightcontent').data('id');
if(oldid != 0){
- $('#contacts li[data-id="'+oldid+'"]').removeClass('active');
+ var olditem = $('.contacts li[data-id="'+oldid+'"]');
+ var oldbookid = olditem.data('bookid');
+ olditem.removeClass('active');
+ if(oldbookid != bookid) {
+ $('#contacts h3[data-id="'+oldbookid+'"]').removeClass('active');
+ $('#contacts h3[data-id="'+bookid+'"]').addClass('active');
+ }
}
- $.getJSON(OC.filePath('contacts', 'ajax', 'contactdetails.php'),{'id':id},function(jsondata){
+ $.getJSON(OC.filePath('contacts', 'ajax', 'contact/details.php'),{'id':id},function(jsondata){
if(jsondata.status == 'success'){
- Contacts.UI.Card.loadContact(jsondata.data);
+ OC.Contacts.Card.loadContact(jsondata.data, bookid);
}
else{
OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
@@ -1601,102 +2011,267 @@ $(document).ready(function(){
return false;
});
- $('#contacts li').bind('inview', function(event, isInView, visiblePartX, visiblePartY) {
- if (isInView) { //NOTE: I've kept all conditions for future reference ;-)
- // element is now visible in the viewport
- if (visiblePartY == 'top') {
- // top part of element is visible
- } else if (visiblePartY == 'bottom') {
- // bottom part of element is visible
- } else {
- // whole part of element is visible
- if (!$(this).find('a').attr('style')) {
- //alert($(this).data('id') + ' has background: ' + $(this).attr('style'));
- $(this).find('a').css('background','url('+OC.filePath('contacts', '', 'thumbnail.php')+'?id='+$(this).data('id')+') no-repeat');
- }/* else {
- alert($(this).data('id') + ' has style ' + $(this).attr('style').match('url'));
- }*/
+ $('.contacts_property').live('change', function(){
+ OC.Contacts.Card.saveProperty(this);
+ });
+
+ $(function() {
+ // Upload function for dropped contact photos files. Should go in the Contacts class/object.
+ $.fileUpload = function(files){
+ var file = files[0];
+ if(file.size > $('#max_upload').val()){
+ OC.dialogs.alert(t('contacts','The file you are trying to upload exceed the maximum size for file uploads on this server.'), t('contacts','Upload too large'));
+ return;
}
- } else {
- // element has gone out of viewport
+ if (file.type.indexOf("image") != 0) {
+ OC.dialogs.alert(t('contacts','Only image files can be used as profile picture.'), t('contacts','Wrong file type'));
+ return;
+ }
+ var xhr = new XMLHttpRequest();
+
+ if (!xhr.upload) {
+ OC.dialogs.alert(t('contacts', 'Your browser doesn\'t support AJAX upload. Please click on the profile picture to select a photo to upload.'), t('contacts', 'Error'))
+ }
+ fileUpload = xhr.upload,
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState == 4){
+ response = $.parseJSON(xhr.responseText);
+ if(response.status == 'success') {
+ if(xhr.status == 200) {
+ OC.Contacts.Card.editPhoto(response.data.id, response.data.tmp);
+ } else {
+ OC.dialogs.alert(xhr.status + ': ' + xhr.responseText, t('contacts', 'Error'));
+ }
+ } else {
+ OC.dialogs.alert(response.data.message, t('contacts', 'Error'));
+ }
+ }
+ };
+
+ fileUpload.onprogress = function(e){
+ if (e.lengthComputable){
+ var _progress = Math.round((e.loaded * 100) / e.total);
+ //if (_progress != 100){
+ //}
+ }
+ };
+ xhr.open('POST', OC.filePath('contacts', 'ajax', 'uploadphoto.php')+'?id='+OC.Contacts.Card.id+'&requesttoken='+requesttoken+'&imagefile='+encodeURIComponent(file.name), true);
+ xhr.setRequestHeader('Cache-Control', 'no-cache');
+ xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
+ xhr.setRequestHeader('X_FILE_NAME', encodeURIComponent(file.name));
+ xhr.setRequestHeader('X-File-Size', file.size);
+ xhr.setRequestHeader('Content-Type', file.type);
+ xhr.send(file);
}
});
-
- $('.contacts_property').live('change', function(){
- Contacts.UI.Card.saveProperty(this);
+
+ $(document).bind('drop dragover', function (e) {
+ e.preventDefault(); // prevent browser from doing anything, if file isn't dropped in dropZone
});
- /**
- * Upload function for dropped files. Should go in the Contacts class/object.
- */
- $.fileUpload = function(files){
- var file = files[0];
- if(file.size > $('#max_upload').val()){
- OC.dialogs.alert(t('contacts','The file you are trying to upload exceed the maximum size for file uploads on this server.'), t('contacts','Upload too large'));
- return;
- }
- if (file.type.indexOf("image") != 0) {
- OC.dialogs.alert(t('contacts','Only image files can be used as profile picture.'), t('contacts','Wrong file type'));
- return;
- }
- var xhr = new XMLHttpRequest();
+ //add multiply file upload attribute to all browsers except konqueror (which crashes when it's used)
+ if(navigator.userAgent.search(/konqueror/i)==-1){
+ $('#import_upload_start').attr('multiple','multiple')
+ }
+ // Import using jquery.fileupload
+ $(function() {
+ var uploadingFiles = {}, numfiles = 0, uploadedfiles = 0, retries = 0;
+ var aid;
- if (!xhr.upload) {
- OC.dialogs.alert(t('contacts', 'Your browser doesn\'t support AJAX upload. Please click on the profile picture to select a photo to upload.'), t('contacts', 'Error'))
- }
- fileUpload = xhr.upload,
- xhr.onreadystatechange = function() {
- if (xhr.readyState == 4){
- response = $.parseJSON(xhr.responseText);
- if(response.status == 'success') {
- if(xhr.status == 200) {
- Contacts.UI.Card.editPhoto(response.data.id, response.data.tmp);
+ $('#import_upload_start').fileupload({
+ dropZone: $('#contacts'), // restrict dropZone to contacts list.
+ acceptFileTypes: /^text\/(directory|vcard|x-vcard)$/i,
+ add: function(e, data) {
+ var files = data.files;
+ var totalSize=0;
+ if(files) {
+ numfiles += files.length; uploadedfiles = 0;
+ for(var i=0;i<files.length;i++) {
+ if(files[i].size ==0 && files[i].type== '') {
+ OC.dialogs.alert(t('files', 'Unable to upload your file as it is a directory or has 0 bytes'), t('files', 'Upload Error'));
+ return;
+ }
+ totalSize+=files[i].size;
+ }
+ }
+ if(totalSize>$('#max_upload').val()){
+ OC.dialogs.alert(t('contacts','The file you are trying to upload exceed the maximum size for file uploads on this server.'), t('contacts','Upload too large'));
+ numfiles = uploadedfiles = retries = aid = 0;
+ uploadingFiles = {};
+ return;
+ }else{
+ if($.support.xhrFileUpload) {
+ for(var i=0;i<files.length;i++){
+ var fileName = files[i].name;
+ var dropTarget;
+ if($(e.originalEvent.target).is('h3')) {
+ dropTarget = $(e.originalEvent.target).next('ul');
+ } else {
+ dropTarget = $(e.originalEvent.target).closest('ul');
+ }
+ if(dropTarget && dropTarget.hasClass('contacts')) { // TODO: More thorough check for where we are.
+ aid = dropTarget.attr('data-id');
+ } else {
+ aid = undefined;
+ }
+ var jqXHR = $('#import_upload_start').fileupload('send', {files: files[i],
+ formData: function(form) {
+ var formArray = form.serializeArray();
+ formArray['aid'] = aid;
+ return formArray;
+ }})
+ .success(function(result, textStatus, jqXHR) {
+ if(result.status == 'success') {
+ // import the file
+ uploadedfiles += 1;
+ } else {
+ OC.Contacts.notify({message:jsondata.data.message});
+ }
+ return false;
+ })
+ .error(function(jqXHR, textStatus, errorThrown) {
+ console.log(textStatus);
+ OC.Contacts.notify({message:errorThrown + ': ' + textStatus,});
+ });
+ uploadingFiles[fileName] = jqXHR;
+ }
} else {
- OC.dialogs.alert(xhr.status + ': ' + xhr.responseText, t('contacts', 'Error'));
+ data.submit().success(function(data, status) {
+ response = jQuery.parseJSON(data[0].body.innerText);
+ if(response[0] != undefined && response[0].status == 'success') {
+ var file=response[0];
+ delete uploadingFiles[file.name];
+ $('tr').filterAttr('data-file',file.name).data('mime',file.mime);
+ var size = $('tr').filterAttr('data-file',file.name).find('td.filesize').text();
+ if(size==t('files','Pending')){
+ $('tr').filterAttr('data-file',file.name).find('td.filesize').text(file.size);
+ }
+ FileList.loadingDone(file.name);
+ } else {
+ OC.Contacts.notify({message:response.data.message});
+ }
+ });
}
+ }
+ },
+ fail: function(e, data) {
+ console.log('fail');
+ OC.Contacts.notify({message:data.errorThrown + ': ' + data.textStatus});
+ // TODO: Remove file from upload queue.
+ },
+ progressall: function(e, data) {
+ var progress = (data.loaded/data.total)*50;
+ $('#uploadprogressbar').progressbar('value',progress);
+ },
+ start: function(e, data) {
+ $('#uploadprogressbar').progressbar({value:0});
+ $('#uploadprogressbar').fadeIn();
+ if(data.dataType != 'iframe ') {
+ $('#upload input.stop').show();
+ }
+ },
+ stop: function(e, data) {
+ // stop only gets fired once so we collect uploaded items here.
+ var importFiles = function(aid, fileList) {
+ // Create a closure that can be called from different places.
+ if(numfiles != uploadedfiles) {
+ OC.Contacts.notify({message:t('contacts', 'Not all files uploaded. Retrying...')});
+ retries += 1;
+ if(retries > 3) {
+ numfiles = uploadedfiles = retries = aid = 0;
+ uploadingFiles = {};
+ $('#uploadprogressbar').fadeOut();
+ OC.dialogs.alert(t('contacts', 'Something went wrong with the upload, please retry.'), t('contacts', 'Error'));
+ return;
+ }
+ setTimeout(function() { // Just to let any uploads finish
+ importFiles(aid, uploadingFiles);
+ }, 1000);
+ }
+ $('#uploadprogressbar').progressbar('value',50);
+ var todo = uploadedfiles;
+ $.each(fileList, function(fileName, data) {
+ OC.Contacts.Contacts.doImport(fileName, aid);
+ delete fileList[fileName];
+ numfiles -= 1; uploadedfiles -= 1;
+ $('#uploadprogressbar').progressbar('value',50+(50/(todo-uploadedfiles)));
+ })
+ $('#uploadprogressbar').progressbar('value',100);
+ $('#uploadprogressbar').fadeOut();
+ setTimeout(function() {
+ OC.Contacts.Contacts.update({aid:aid});
+ numfiles = uploadedfiles = retries = aid = 0;
+ }, 1000);
+ }
+ if(!aid) {
+ // Either selected with filepicker or dropped outside of an address book.
+ $.getJSON(OC.filePath('contacts', 'ajax', 'selectaddressbook.php'),{},function(jsondata) {
+ if(jsondata.status == 'success') {
+ if($('#selectaddressbook_dialog').dialog('isOpen') == true) {
+ $('#selectaddressbook_dialog').dialog('moveToTop');
+ } else {
+ $('#dialog_holder').html(jsondata.data.page).ready(function($) {
+ var select_dlg = $('#selectaddressbook_dialog');
+ select_dlg.dialog({
+ modal: true, height: 'auto', width: 'auto',
+ buttons: {
+ 'Ok':function() {
+ aid = select_dlg.find('input:checked').val();
+ if(aid == 'new') {
+ var displayname = select_dlg.find('input.name').val();
+ var description = select_dlg.find('input.desc').val();
+ if(!displayname.trim()) {
+ OC.dialogs.alert(t('contacts', 'The address book name cannot be empty.'), t('contacts', 'Error'));
+ return false;
+ }
+ $(this).dialog('close');
+ OC.Contacts.Contacts.addAddressbook(displayname, description, function(addressbook) {
+ aid = addressbook.id;
+ setTimeout(function() {
+ importFiles(aid, uploadingFiles);
+ }, 500);
+ console.log('aid ' + aid);
+ });
+ } else {
+ setTimeout(function() {
+ importFiles(aid, uploadingFiles);
+ }, 500);
+ console.log('aid ' + aid);
+ $(this).dialog('close');
+ }
+ },
+ 'Cancel':function() {
+ $(this).dialog('close');
+ numfiles = uploadedfiles = retries = aid = 0;
+ uploadingFiles = {};
+ $('#uploadprogressbar').fadeOut();
+ }
+ },
+ close: function(event, ui) {
+ // TODO: If numfiles != 0 delete tmp files after a timeout.
+ $(this).dialog('destroy').remove();
+ }
+ });
+ });
+ }
+ } else {
+ $('#uploadprogressbar').fadeOut();
+ OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
+ }
+ });
} else {
- OC.dialogs.alert(response.data.message, t('contacts', 'Error'));
+ // Dropped on an address book or it's list.
+ setTimeout(function() { // Just to let any uploads finish
+ importFiles(aid, uploadingFiles);
+ }, 1000);
+ }
+ if(data.dataType != 'iframe ') {
+ $('#upload input.stop').hide();
}
}
- };
-
- fileUpload.onprogress = function(e){
- if (e.lengthComputable){
- var _progress = Math.round((e.loaded * 100) / e.total);
- //if (_progress != 100){
- //}
- }
- };
- xhr.open('POST', OC.filePath('contacts', 'ajax', 'uploadphoto.php')+'?id='+Contacts.UI.Card.id+'&requesttoken='+requesttoken+'&imagefile='+encodeURIComponent(file.name), true);
- xhr.setRequestHeader('Cache-Control', 'no-cache');
- xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
- xhr.setRequestHeader('X_FILE_NAME', encodeURIComponent(file.name));
- xhr.setRequestHeader('X-File-Size', file.size);
- xhr.setRequestHeader('Content-Type', file.type);
- xhr.send(file);
- }
-
- $('body').click(function(e){
- if(!$(e.target).is('#contacts_propertymenu_button')) {
- $('#contacts_propertymenu_dropdown').hide();
- }
+ })
});
- function propertyMenu(){
- var menu = $('#contacts_propertymenu_dropdown');
- if(menu.is(':hidden')) {
- menu.show();
- menu.find('li').first().focus();
- } else {
- menu.hide();
- }
- }
- $('#contacts_propertymenu_button').click(propertyMenu);
- $('#contacts_propertymenu_button').keydown(propertyMenu);
- function propertyMenuItem(){
- var type = $(this).data('type');
- Contacts.UI.Card.addProperty(type);
- $('#contacts_propertymenu_dropdown').hide();
- }
- $('#contacts_propertymenu_dropdown a').click(propertyMenuItem);
- $('#contacts_propertymenu_dropdown a').keydown(propertyMenuItem);
+
+ OC.Contacts.loadHandlers();
+ OC.Contacts.Contacts.update({cid:id});
});
diff --git a/apps/contacts/js/jquery.combobox.js b/apps/contacts/js/jquery.combobox.js
index f12d1d7dd20..d9959eb6cde 100644
--- a/apps/contacts/js/jquery.combobox.js
+++ b/apps/contacts/js/jquery.combobox.js
@@ -23,16 +23,16 @@
minLength: 0,
source: function( request, response ) {
var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" );
- response( select.children( "option" ).map(function() {
+ response( select.children('option').map(function() {
var text = $( this ).text();
if ( this.value && ( !request.term || matcher.test(text) ) )
return {
label: text.replace(
new RegExp(
- "(?![^&;]+;)(?!<[^<>]*)(" +
+ '(?![^&;]+;)(?!<[^<>]*)(' +
$.ui.autocomplete.escapeRegex(request.term) +
- ")(?![^<>]*>)(?![^&;]+;)", "gi"
- ), "<strong>$1</strong>" ),
+ ')(?![^<>]*>)(?![^&;]+;)', 'gi'
+ ), '<strong>$1</strong>'),
value: text,
option: this
};
@@ -42,17 +42,17 @@
self.input.val($(ui.item.option).text());
self.input.trigger('change');
ui.item.option.selected = true;
- self._trigger( "selected", event, {
+ self._trigger('selected', event, {
item: ui.item.option
});
},
change: function( event, ui ) {
if ( !ui.item ) {
- var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( $(this).val() ) + "$", "i" ),
+ var matcher = new RegExp( '^' + $.ui.autocomplete.escapeRegex( $(this).val() ) + '$', 'i' ),
valid = false;
self.input.val($(this).val());
//self.input.trigger('change');
- select.children( "option" ).each(function() {
+ select.children('option').each(function() {
if ( $( this ).text().match( matcher ) ) {
this.selected = valid = true;
return false;
@@ -62,36 +62,41 @@
// remove invalid value, as it didn't match anything
$( this ).val( "" );
select.val( "" );
- input.data( "autocomplete" ).term = "";
+ input.data('autocomplete').term = '';
return false;
}
}
}
})
- .addClass( "ui-widget ui-widget-content ui-corner-left" );
+ .addClass('ui-widget ui-widget-content ui-corner-left');
- input.data( "autocomplete" )._renderItem = function( ul, item ) {
- return $( "<li></li>" )
- .data( "item.autocomplete", item )
- .append( "<a>" + item.label + "</a>" )
+ input.data('autocomplete')._renderItem = function( ul, item ) {
+ return $('<li></li>')
+ .data('item.autocomplete', item )
+ .append('<a>' + item.label + '</a>')
.appendTo( ul );
};
$.each(this.options, function(key, value) {
self._setOption(key, value);
});
+ input.dblclick(function() {
+ // pass empty string as value to search for, displaying all results
+ input.autocomplete('search', '');
+ });
+
if(this.options['showButton']) {
- this.button = $( "<button type='button'>&nbsp;</button>" )
- .attr( "tabIndex", -1 )
- .attr( "title", "Show All Items" )
+ this.button = $('<button type="button">&nbsp;</button>')
+ .attr('tabIndex', -1 )
+ .attr('title', 'Show All Items')
.insertAfter( input )
.addClass('svg')
.addClass('action')
.addClass('combo-button')
.click(function() {
// close if already visible
- if ( input.autocomplete( "widget" ).is( ":visible" ) ) {
- input.autocomplete( "close" );
+ if ( input.autocomplete('widget').is(':visible') ) {
+ input.autocomplete('close');
return;
}
@@ -99,7 +104,7 @@
$( this ).blur();
// pass empty string as value to search for, displaying all results
- input.autocomplete( "search", "" );
+ input.autocomplete('search', '');
input.focus();
});
}
diff --git a/apps/contacts/js/jquery.inview.js b/apps/contacts/js/jquery.inview.js
index 01900b0b4b4..9687cd83368 100644
--- a/apps/contacts/js/jquery.inview.js
+++ b/apps/contacts/js/jquery.inview.js
@@ -62,8 +62,8 @@
function getViewportOffset() {
return {
- top: w.pageYOffset || documentElement.scrollTop || d.body.scrollTop,
- left: w.pageXOffset || documentElement.scrollLeft || d.body.scrollLeft
+ top: w.pageYOffset || documentElement.scrollTop || (d.body?d.body.scrollTop:0),
+ left: w.pageXOffset || documentElement.scrollLeft || (d.body?d.body.scrollLeft:0)
};
}
diff --git a/apps/contacts/js/loader.js b/apps/contacts/js/loader.js
index 0e6da10e024..3b1f4070485 100644
--- a/apps/contacts/js/loader.js
+++ b/apps/contacts/js/loader.js
@@ -42,8 +42,8 @@ Contacts_Import={
}
$('#newaddressbook').attr('readonly', 'readonly');
$('#contacts').attr('disabled', 'disabled');
- var progressfile = $('#progressfile').val();
- $.post(OC.filePath('contacts', '', 'import.php'), {method: String (method), addressbookname: String (addressbookname), path: String (path), file: String (filename), id: String (addressbookid)}, function(jsondata){
+ var progresskey = $('#progresskey').val();
+ $.post(OC.filePath('contacts', '', 'import.php') + '?progresskey='+progresskey, {method: String (method), addressbookname: String (addressbookname), path: String (path), file: String (filename), id: String (addressbookid)}, function(jsondata){
if(jsondata.status == 'success'){
$('#progressbar').progressbar('option', 'value', 100);
$('#import_done').find('p').html(t('contacts', 'Result: ') + jsondata.data.imported + t('contacts', ' imported, ') + jsondata.data.failed + t('contacts', ' failed.'));
@@ -55,7 +55,7 @@ Contacts_Import={
});
$('#form_container').css('display', 'none');
$('#progressbar_container').css('display', 'block');
- window.setTimeout('Contacts_Import.getimportstatus(\'' + progressfile + '\')', 500);
+ window.setTimeout('Contacts_Import.getimportstatus(\'' + progresskey + '\')', 500);
});
$('#contacts').change(function(){
if($('#contacts option:selected').val() == 'newaddressbook'){
@@ -65,11 +65,11 @@ Contacts_Import={
}
});
},
- getimportstatus: function(progressfile){
- $.get(OC.filePath('contacts', 'import_tmp', progressfile), function(percent){
+ getimportstatus: function(progresskey){
+ $.get(OC.filePath('contacts', '', 'import.php') + '?progress=1&progresskey=' + progresskey, function(percent){
$('#progressbar').progressbar('option', 'value', parseInt(percent));
if(percent < 100){
- window.setTimeout('Contacts_Import.getimportstatus(\'' + progressfile + '\')', 500);
+ window.setTimeout('Contacts_Import.getimportstatus(\'' + progresskey + '\')', 500);
}else{
$('#import_done').css('display', 'block');
}
@@ -78,9 +78,9 @@ Contacts_Import={
}
$(document).ready(function(){
if(typeof FileActions !== 'undefined'){
- FileActions.register('text/vcard','importaddressbook', '', Contacts_Import.importdialog);
+ FileActions.register('text/vcard','importaddressbook', FileActions.PERMISSION_READ, '', Contacts_Import.importdialog);
FileActions.setDefault('text/vcard','importaddressbook');
- FileActions.register('text/x-vcard','importaddressbook', '', Contacts_Import.importdialog);
+ FileActions.register('text/x-vcard','importaddressbook', FileActions.PERMISSION_READ, '', Contacts_Import.importdialog);
FileActions.setDefault('text/x-vcard','importaddressbook');
};
}); \ No newline at end of file
diff --git a/apps/contacts/js/settings.js b/apps/contacts/js/settings.js
new file mode 100644
index 00000000000..69cf473e06a
--- /dev/null
+++ b/apps/contacts/js/settings.js
@@ -0,0 +1,196 @@
+OC.Contacts = OC.Contacts || {};
+OC.Contacts.Settings = OC.Contacts.Settings || {
+ init:function() {
+ this.Addressbook.adrsettings = $('.addressbooks-settings').first();
+ this.Addressbook.adractions = $('#contacts-settings').find('div.actions');
+ console.log('actions: ' + this.Addressbook.adractions.length);
+ OC.Share.loadIcons('addressbook');
+ },
+ Addressbook:{
+ showActions:function(act) {
+ this.adractions.children().hide();
+ this.adractions.children('.'+act.join(',.')).show();
+ },
+ doActivate:function(id, tgt) {
+ var active = tgt.is(':checked');
+ console.log('doActivate: ', id, active);
+ $.post(OC.filePath('contacts', 'ajax', 'addressbook/activate.php'), {id: id, active: Number(active)}, function(jsondata) {
+ if (jsondata.status == 'success'){
+ if(!active) {
+ $('#contacts h3[data-id="'+id+'"],#contacts ul[data-id="'+id+'"]').remove();
+ } else {
+ OC.Contacts.Contacts.update();
+ }
+ } else {
+ console.log('Error:', jsondata.data.message);
+ OC.Contacts.notify(t('contacts', 'Error') + ': ' + jsondata.data.message);
+ tgt.checked = !active;
+ }
+ });
+ },
+ doDelete:function(id) {
+ console.log('doDelete: ', id);
+ var check = confirm('Do you really want to delete this address book?');
+ if(check == false){
+ return false;
+ } else {
+ $.post(OC.filePath('contacts', 'ajax', 'addressbook/delete.php'), { id: id}, function(jsondata) {
+ if (jsondata.status == 'success'){
+ $('#contacts h3[data-id="'+id+'"],#contacts ul[data-id="'+id+'"]').remove();
+ $('.addressbooks-settings tr[data-id="'+id+'"]').remove()
+ OC.Contacts.Contacts.update();
+ } else {
+ OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
+ }
+ });
+ }
+ },
+ doEdit:function(id) {
+ console.log('doEdit: ', id);
+ this.showActions(['active', 'name', 'description', 'save', 'cancel']);
+ var name = this.adrsettings.find('[data-id="'+id+'"]').find('.name').text();
+ var description = this.adrsettings.find('[data-id="'+id+'"]').find('.description').text();
+ var active = this.adrsettings.find('[data-id="'+id+'"]').find(':checkbox').is(':checked');
+ console.log('name, desc', name, description);
+ this.adractions.find('.active').prop('checked', active);
+ this.adractions.find('.name').val(name);
+ this.adractions.find('.description').val(description);
+ this.adractions.data('id', id);
+ },
+ doSave:function() {
+ var name = this.adractions.find('.name').val();
+ var description = this.adractions.find('.description').val();
+ var active = this.adractions.find('.active').is(':checked');
+ var id = this.adractions.data('id');
+ console.log('doSave:', id, name, description, active);
+
+ if(name.length == 0) {
+ OC.dialogs.alert(t('contacts', 'Displayname cannot be empty.'), t('contacts', 'Error'));
+ return false;
+ }
+ var url;
+ if (id == 'new'){
+ url = OC.filePath('contacts', 'ajax', 'addressbook/add.php');
+ }else{
+ url = OC.filePath('contacts', 'ajax', 'addressbook/update.php');
+ }
+ self = this;
+ $.post(url, { id: id, name: name, active: Number(active), description: description },
+ function(jsondata){
+ if(jsondata.status == 'success'){
+ self.showActions(['new',]);
+ self.adractions.removeData('id');
+ active = Boolean(Number(jsondata.data.addressbook.active));
+ if(id == 'new') {
+ self.adrsettings.find('table')
+ .append('<tr class="addressbook" data-id="'+jsondata.data.addressbook.id+'" data-uri="'+jsondata.data.addressbook.uri+'">'
+ + '<td class="active"><input type="checkbox" '+(active ? 'checked="checked"' : '')+' /></td>'
+ + '<td class="name">'+jsondata.data.addressbook.displayname+'</td>'
+ + '<td class="description">'+jsondata.data.addressbook.description+'</td>'
+ + '<td class="action"><a class="svg action globe" title="'+t('contacts', 'Show CardDav link')+'"></a></td>'
+ + '<td class="action"><a class="svg action cloud" title="'+t('contacts', 'Show read-only VCF link')+'"></a></td>'
+ + '<td class="action"><a class="svg action download" title="'+t('contacts', 'Download')+'" '
+ + 'href="'+OC.linkTo('contacts', 'export.php')+'?bookid='+jsondata.data.addressbook.id+'"></a></td>'
+ + '<td class="action"><a class="svg action edit" title="'+t('contacts', 'Edit')+'"></a></td>'
+ + '<td class="action"><a class="svg action delete" title="'+t('contacts', 'Delete')+'"></a></td>'
+ + '</tr>');
+ } else {
+ var row = self.adrsettings.find('tr[data-id="'+id+'"]');
+ row.find('td.active').find('input:checkbox').prop('checked', active);
+ row.find('td.name').text(jsondata.data.addressbook.displayname);
+ row.find('td.description').text(jsondata.data.addressbook.description);
+ }
+ OC.Contacts.Contacts.update();
+ } else {
+ OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
+ }
+ });
+ },
+ showLink:function(id, row, link) {
+ console.log('row:', row.length);
+ row.next('tr.link').remove();
+ var linkrow = $('<tr class="link"><td colspan="5"><input style="width: 95%;" type="text" value="'+link+'" /></td>'
+ + '<td colspan="3"><button>'+t('contacts', 'Cancel')+'</button></td></tr>').insertAfter(row);
+ linkrow.find('input').focus().select();
+ linkrow.find('button').click(function() {
+ $(this).parents('tr').first().remove();
+ });
+ },
+ showCardDAV:function(id) {
+ console.log('showCardDAV: ', id);
+ var row = this.adrsettings.find('tr[data-id="'+id+'"]');
+ this.showLink(id, row, totalurl+'/'+encodeURIComponent(oc_current_user));
+ },
+ showVCF:function(id) {
+ console.log('showVCF: ', id);
+ var row = this.adrsettings.find('tr[data-id="'+id+'"]');
+ var link = totalurl+'/'+encodeURIComponent(oc_current_user)+'/'+encodeURIComponent(row.data('uri'))+'?export';
+ console.log(link);
+ this.showLink(id, row, link);
+ }
+ }
+};
+
+
+$(document).ready(function() {
+ OC.Contacts.Settings.init();
+
+ var moreless = $('#contacts-settings').find('.moreless').first();
+ moreless.keydown(function(event) {
+ if(event.which == 13 || event.which == 32) {
+ moreless.click();
+ }
+ });
+ moreless.on('click', function(event) {
+ event.preventDefault();
+ if(OC.Contacts.Settings.Addressbook.adrsettings.is(':visible')) {
+ OC.Contacts.Settings.Addressbook.adrsettings.slideUp();
+ OC.Contacts.Settings.Addressbook.adrsettings.prev('dt').hide();
+ moreless.text(t('contacts', 'More...'));
+ } else {
+ OC.Contacts.Settings.Addressbook.adrsettings.slideDown();
+ OC.Contacts.Settings.Addressbook.adrsettings.prev('dt').show();
+ moreless.text(t('contacts', 'Less...'));
+ }
+ });
+
+ OC.Contacts.Settings.Addressbook.adrsettings.keydown(function(event) {
+ if(event.which == 13 || event.which == 32) {
+ OC.Contacts.Settings.Addressbook.adrsettings.click();
+ }
+ });
+
+
+ OC.Contacts.Settings.Addressbook.adrsettings.on('click', function(event){
+ $('.tipsy').remove();
+ var tgt = $(event.target);
+ if(tgt.is('a') || tgt.is(':checkbox')) {
+ var id = tgt.parents('tr').first().data('id');
+ if(!id) {
+ return;
+ }
+ if(tgt.is(':checkbox')) {
+ OC.Contacts.Settings.Addressbook.doActivate(id, tgt);
+ } else if(tgt.is('a')) {
+ if(tgt.hasClass('edit')) {
+ OC.Contacts.Settings.Addressbook.doEdit(id);
+ } else if(tgt.hasClass('delete')) {
+ OC.Contacts.Settings.Addressbook.doDelete(id);
+ } else if(tgt.hasClass('globe')) {
+ OC.Contacts.Settings.Addressbook.showCardDAV(id);
+ } else if(tgt.hasClass('cloud')) {
+ OC.Contacts.Settings.Addressbook.showVCF(id);
+ }
+ }
+ } else if(tgt.is('button')) {
+ event.preventDefault();
+ if(tgt.hasClass('save')) {
+ OC.Contacts.Settings.Addressbook.doSave();
+ } else if(tgt.hasClass('cancel')) {
+ OC.Contacts.Settings.Addressbook.showActions(['new']);
+ } else if(tgt.hasClass('new')) {
+ OC.Contacts.Settings.Addressbook.doEdit('new');
+ }
+ }
+ });
+});
diff --git a/apps/contacts/l10n/ar.php b/apps/contacts/l10n/ar.php
index 6bebda3b6ad..2b28d6ca6d3 100644
--- a/apps/contacts/l10n/ar.php
+++ b/apps/contacts/l10n/ar.php
@@ -1,22 +1,13 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "خطء خلال توقي٠كتاب العناوين.",
+"Error updating addressbook." => "خطء خلال تعديل كتاب العناوين",
"There was an error adding the contact." => "خطء خلال اضاÙØ© معرÙÙ‡ جديده.",
"Cannot add empty property." => "لا يمكنك اضاÙÙ‡ صÙÙ‡ خاليه.",
"At least one of the address fields has to be filled out." => "يجب ملء على الاقل خانه واحده من العنوان.",
-"Error adding contact property." => "خطء خلال اضاÙØ© صÙØ© المعرÙÙ‡.",
-"Error adding addressbook." => "خطء خلال اضاÙØ© كتاب عناوين.",
-"Error activating addressbook." => "خطء خلال تÙعيل كتاب العناوين.",
"Information about vCard is incorrect. Please reload the page." => "المعلومات الموجودة ÙÙŠ ال vCard غير صحيحة. الرجاء إعادة تحديث الصÙحة.",
-"Error deleting contact property." => "خطء خلال محي الصÙÙ‡.",
-"Error updating contact property." => "خطء خلال تعديل الصÙÙ‡.",
-"Error updating addressbook." => "خطء خلال تعديل كتاب العناوين",
"Contacts" => "المعارÙ",
"This is not your addressbook." => "هذا ليس دÙتر عناوينك.",
"Contact could not be found." => "لم يتم العثور على الشخص.",
-"Address" => "عنوان",
-"Telephone" => "الهاتÙ",
-"Email" => "البريد الالكتروني",
-"Organization" => "المؤسسة",
"Work" => "الوظيÙØ©",
"Home" => "البيت",
"Mobile" => "الهات٠المحمول",
@@ -25,34 +16,29 @@
"Fax" => "الÙاكس",
"Video" => "الÙيديو",
"Pager" => "الرنان",
+"Birthday" => "تاريخ الميلاد",
"Contact" => "معرÙÙ‡",
"Add Contact" => "أض٠شخص ",
"Addressbooks" => "كتب العناوين",
-"New Address Book" => "كتاب عناوين جديد",
-"CardDav Link" => "وصلة CardDav",
-"Download" => "انزال",
-"Edit" => "تعديل",
+"Organization" => "المؤسسة",
"Delete" => "حذÙ",
-"Download contact" => "انزال المعرÙÙ‡",
-"Delete contact" => "امحي المعرÙÙ‡",
-"Birthday" => "تاريخ الميلاد",
"Preferred" => "Ù…Ùضل",
"Phone" => "الهاتÙ",
+"Email" => "البريد الالكتروني",
+"Address" => "عنوان",
+"Download contact" => "انزال المعرÙÙ‡",
+"Delete contact" => "امحي المعرÙÙ‡",
"Type" => "نوع",
"PO Box" => "العنوان البريدي",
"Extended" => "إضاÙØ©",
-"Street" => "شارع",
"City" => "المدينة",
"Region" => "المنطقة",
"Zipcode" => "رقم المنطقة",
"Country" => "البلد",
-"Add" => "أدخل",
"Addressbook" => "كتاب العناوين",
-"New Addressbook" => "كتاب عناوين جديد",
-"Edit Addressbook" => "عدل كتاب العناوين",
-"Displayname" => "الاسم المعروض",
-"Active" => "Ùعال",
+"Download" => "انزال",
+"Edit" => "تعديل",
+"New Address Book" => "كتاب عناوين جديد",
"Save" => "Ø­Ùظ",
-"Submit" => "ارسال",
"Cancel" => "الغاء"
);
diff --git a/apps/contacts/l10n/ca.php b/apps/contacts/l10n/ca.php
index 0c95b83d5eb..b930d7c685c 100644
--- a/apps/contacts/l10n/ca.php
+++ b/apps/contacts/l10n/ca.php
@@ -1,39 +1,42 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Error en (des)activar la llibreta d'adreces.",
-"There was an error adding the contact." => "S'ha produït un error en afegir el contacte.",
-"Cannot add empty property." => "No es pot afegir una propietat buida.",
-"At least one of the address fields has to be filled out." => "Almenys heu d'omplir un dels camps d'adreça.",
-"Trying to add duplicate property: " => "Esteu intentant afegir una propietat duplicada:",
-"Error adding contact property." => "Error en afegir la propietat del contacte.",
+"id is not set." => "no s'ha establert la id.",
+"Cannot update addressbook with an empty name." => "No es pot actualitzar la llibreta d'adreces amb un nom buit",
+"Error updating addressbook." => "Error en actualitzar la llibreta d'adreces.",
"No ID provided" => "No heu facilitat cap ID",
"Error setting checksum." => "Error en establir la suma de verificació.",
"No categories selected for deletion." => "No heu seleccionat les categories a eliminar.",
"No address books found." => "No s'han trobat llibretes d'adreces.",
"No contacts found." => "No s'han trobat contactes.",
+"There was an error adding the contact." => "S'ha produït un error en afegir el contacte.",
+"element name is not set." => "no s'ha establert el nom de l'element.",
+"Could not parse contact: " => "No s'ha pogut processar el contacte:",
+"Cannot add empty property." => "No es pot afegir una propietat buida.",
+"At least one of the address fields has to be filled out." => "Almenys heu d'omplir un dels camps d'adreça.",
+"Trying to add duplicate property: " => "Esteu intentant afegir una propietat duplicada:",
+"Missing IM parameter." => "Falta el paràmetre IM.",
+"Unknown IM: " => "IM desconegut:",
+"Information about vCard is incorrect. Please reload the page." => "La informació de la vCard és incorrecta. Carregueu la pàgina de nou.",
"Missing ID" => "Falta la ID",
"Error parsing VCard for ID: \"" => "Error en analitzar la ID de la VCard: \"",
-"Cannot add addressbook with an empty name." => "No es pot afegir una llibreta d'adreces amb un nom buit.",
-"Error adding addressbook." => "Error en afegir la llibreta d'adreces.",
-"Error activating addressbook." => "Error en activar la llibreta d'adreces.",
+"checksum is not set." => "no s'ha establert la suma de verificació.",
+"Information about vCard is incorrect. Please reload the page: " => "La informació de la vCard és incorrecta. Carregueu de nou la pàgina:",
+"Something went FUBAR. " => "Alguna cosa ha anat FUBAR.",
"No contact ID was submitted." => "No s'ha tramès cap ID de contacte.",
"Error reading contact photo." => "Error en llegir la foto del contacte.",
"Error saving temporary file." => "Error en desar el fitxer temporal.",
"The loading photo is not valid." => "La foto carregada no és vàlida.",
-"id is not set." => "no s'ha establert la id.",
-"Information about vCard is incorrect. Please reload the page." => "La informació de la vCard és incorrecta. Carregueu la pàgina de nou.",
-"Error deleting contact property." => "Error en eliminar la propietat del contacte.",
"Contact ID is missing." => "falta la ID del contacte.",
-"Missing contact id." => "Falta la id del contacte.",
"No photo path was submitted." => "No heu tramès el camí de la foto.",
"File doesn't exist:" => "El fitxer no existeix:",
"Error loading image." => "Error en carregar la imatge.",
-"element name is not set." => "no s'ha establert el nom de l'element.",
-"checksum is not set." => "no s'ha establert la suma de verificació.",
-"Information about vCard is incorrect. Please reload the page: " => "La informació de la vCard és incorrecta. Carregueu de nou la pàgina:",
-"Something went FUBAR. " => "Alguna cosa ha anat FUBAR.",
-"Error updating contact property." => "Error en actualitzar la propietat del contacte.",
-"Cannot update addressbook with an empty name." => "No es pot actualitzar la llibreta d'adreces amb un nom buit",
-"Error updating addressbook." => "Error en actualitzar la llibreta d'adreces.",
+"Error getting contact object." => "Error en obtenir l'objecte contacte.",
+"Error getting PHOTO property." => "Error en obtenir la propietat PHOTO.",
+"Error saving contact." => "Error en desar el contacte.",
+"Error resizing image" => "Error en modificar la mida de la imatge",
+"Error cropping image" => "Error en retallar la imatge",
+"Error creating temporary image" => "Error en crear la imatge temporal",
+"Error finding image: " => "Error en trobar la imatge:",
"Error uploading contacts to storage." => "Error en carregar contactes a l'emmagatzemament.",
"There is no error, the file uploaded with success" => "No hi ha errors, el fitxer s'ha carregat correctament",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "El fitxer carregat supera la directiva upload_max_filesize de php.ini",
@@ -41,17 +44,46 @@
"The uploaded file was only partially uploaded" => "El fitxer només s'ha carregat parcialment",
"No file was uploaded" => "No s'ha carregat cap fitxer",
"Missing a temporary folder" => "Falta un fitxer temporal",
+"Couldn't save temporary image: " => "No s'ha pogut desar la imatge temporal: ",
+"Couldn't load temporary image: " => "No s'ha pogut carregar la imatge temporal: ",
+"No file was uploaded. Unknown error" => "No s'ha carregat cap fitxer. Error desconegut",
"Contacts" => "Contactes",
-"Drop a VCF file to import contacts." => "Elimina un fitxer VCF per importar contactes.",
-"Addressbook not found." => "No s'ha trobat la llibreta d'adreces.",
+"Sorry, this functionality has not been implemented yet" => "Aquesta funcionalitat encara no està implementada",
+"Not implemented" => "No implementada",
+"Couldn't get a valid address." => "No s'ha pogut obtenir una adreça vàlida.",
+"Error" => "Error",
+"This property has to be non-empty." => "Aquesta propietat no pot ser buida.",
+"Couldn't serialize elements." => "No s'han pogut serialitzar els elements.",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' s'ha cridat sense argument de tipus. Informeu-ne a bugs.owncloud.org",
+"Edit name" => "Edita el nom",
+"No files selected for upload." => "No s'han seleccionat fitxers per a la pujada.",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "El fitxer que intenteu pujar excedeix la mida màxima de pujada en aquest servidor.",
+"Error loading profile picture." => "Error en carregar la imatge de perfil.",
+"Select type" => "Seleccioneu un tipus",
+"Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted." => "Heu marcat eliminar alguns contactes, però encara no s'han eliminat. Espereu mentre s'esborren.",
+"Do you want to merge these address books?" => "Voleu fusionar aquestes llibretes d'adreces?",
+"Result: " => "Resultat: ",
+" imported, " => " importat, ",
+" failed." => " fallada.",
+"Displayname cannot be empty." => "El nom a mostrar no pot ser buit",
+"Addressbook not found: " => "No s'ha trobat la llibreta d'adreces: ",
"This is not your addressbook." => "Aquesta no és la vostra llibreta d'adreces",
"Contact could not be found." => "No s'ha trobat el contacte.",
-"Address" => "Adreça",
-"Telephone" => "Telèfon",
-"Email" => "Correu electrònic",
-"Organization" => "Organització",
+"Jabber" => "Jabber",
+"AIM" => "AIM",
+"MSN" => "MSN",
+"Twitter" => "Twitter",
+"GoogleTalk" => "GoogleTalk",
+"Facebook" => "Facebook",
+"XMPP" => "XMPP",
+"ICQ" => "ICQ",
+"Yahoo" => "Yahoo",
+"Skype" => "Skype",
+"QQ" => "QQ",
+"GaduGadu" => "GaduGadu",
"Work" => "Feina",
"Home" => "Casa",
+"Other" => "Altres",
"Mobile" => "Mòbil",
"Text" => "Text",
"Voice" => "Veu",
@@ -60,25 +92,52 @@
"Video" => "Vídeo",
"Pager" => "Paginador",
"Internet" => "Internet",
+"Birthday" => "Aniversari",
+"Business" => "Negocis",
+"Call" => "Trucada",
+"Clients" => "Clients",
+"Deliverer" => "Emissari",
+"Holidays" => "Vacances",
+"Ideas" => "Idees",
+"Journey" => "Viatge",
+"Jubilee" => "Aniversari",
+"Meeting" => "Reunió",
+"Personal" => "Personal",
+"Projects" => "Projectes",
+"Questions" => "Preguntes",
"{name}'s Birthday" => "Aniversari de {name}",
"Contact" => "Contacte",
"Add Contact" => "Afegeix un contacte",
+"Import" => "Importa",
+"Settings" => "Configuració",
"Addressbooks" => "Llibretes d'adreces",
-"Configure Address Books" => "Configura les llibretes d'adreces",
-"New Address Book" => "Nova llibreta d'adreces",
-"Import from VCF" => "Importa de VFC",
-"CardDav Link" => "Enllaç CardDav",
-"Download" => "Baixa",
-"Edit" => "Edita",
-"Delete" => "Suprimeix",
-"Download contact" => "Baixa el contacte",
-"Delete contact" => "Suprimeix el contacte",
+"Close" => "Tanca",
+"Keyboard shortcuts" => "Dreceres de teclat",
+"Navigation" => "Navegació",
+"Next contact in list" => "Següent contacte de la llista",
+"Previous contact in list" => "Contacte anterior de la llista",
+"Expand/collapse current addressbook" => "Expandeix/col·lapsa la llibreta d'adreces",
+"Next addressbook" => "Llibreta d'adreces següent",
+"Previous addressbook" => "Llibreta d'adreces anterior",
+"Actions" => "Accions",
+"Refresh contacts list" => "Carrega de nou la llista de contactes",
+"Add new contact" => "Afegeix un contacte nou",
+"Add new addressbook" => "Afegeix una llibreta d'adreces nova",
+"Delete current contact" => "Esborra el contacte",
"Drop photo to upload" => "Elimina la foto a carregar",
+"Delete current photo" => "Elimina la foto actual",
+"Edit current photo" => "Edita la foto actual",
+"Upload new photo" => "Carrega una foto nova",
+"Select photo from ownCloud" => "Selecciona una foto de ownCloud",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Format personalitzat, Nom curt, Nom sencer, Invertit o Invertit amb coma",
"Edit name details" => "Edita detalls del nom",
+"Organization" => "Organització",
+"Delete" => "Suprimeix",
"Nickname" => "Sobrenom",
"Enter nickname" => "Escriviu el sobrenom",
-"Birthday" => "Aniversari",
+"Web site" => "Adreça web",
+"http://www.somesite.com" => "http://www.somesite.com",
+"Go to web site" => "Vés a la web",
"dd-mm-yyyy" => "dd-mm-yyyy",
"Groups" => "Grups",
"Separate groups with commas" => "Separeu els grups amb comes",
@@ -90,28 +149,33 @@
"Delete email address" => "Elimina l'adreça de correu electrònic",
"Enter phone number" => "Escriviu el número de telèfon",
"Delete phone number" => "Elimina el número de telèfon",
+"Instant Messenger" => "Instant Messenger",
+"Delete IM" => "Elimina IM",
"View on map" => "Visualitza al mapa",
"Edit address details" => "Edita els detalls de l'adreça",
"Add notes here." => "Afegiu notes aquí.",
"Add field" => "Afegeix un camp",
-"Profile picture" => "Foto de perfil",
"Phone" => "Telèfon",
+"Email" => "Correu electrònic",
+"Instant Messaging" => "Missatgeria instantània",
+"Address" => "Adreça",
"Note" => "Nota",
-"Delete current photo" => "Elimina la foto actual",
-"Edit current photo" => "Edita la foto actual",
-"Upload new photo" => "Carrega una foto nova",
-"Select photo from ownCloud" => "Selecciona una foto de ownCloud",
+"Download contact" => "Baixa el contacte",
+"Delete contact" => "Suprimeix el contacte",
+"The temporary image has been removed from cache." => "La imatge temporal ha estat eliminada de la memòria de cau.",
"Edit address" => "Edita l'adreça",
"Type" => "Tipus",
"PO Box" => "Adreça postal",
+"Street address" => "Adreça",
+"Street and number" => "Carrer i número",
"Extended" => "Addicional",
-"Street" => "Carrer",
+"Apartment number etc." => "Número d'apartament, etc.",
"City" => "Ciutat",
"Region" => "Comarca",
+"E.g. state or province" => "p. ex. Estat o província ",
"Zipcode" => "Codi postal",
+"Postal code" => "Codi postal",
"Country" => "País",
-"Edit categories" => "Edita categories",
-"Add" => "Afegeix",
"Addressbook" => "Llibreta d'adreces",
"Hon. prefixes" => "Prefix honorífic:",
"Miss" => "Srta",
@@ -132,26 +196,35 @@
"Esq." => "Esq.",
"Jr." => "Jr.",
"Sn." => "Sn.",
-"New Addressbook" => "Nova llibreta d'adreces",
-"Edit Addressbook" => "Edita la llibreta d'adreces",
-"Displayname" => "Nom a mostrar",
-"Active" => "Actiu",
-"Save" => "Desa",
-"Submit" => "Envia",
-"Cancel" => "Cancel·la",
"Import a contacts file" => "Importa un fitxer de contactes",
"Please choose the addressbook" => "Escolliu la llibreta d'adreces",
"create a new addressbook" => "crea una llibreta d'adreces nova",
"Name of new addressbook" => "Nom de la nova llibreta d'adreces",
-"Import" => "Importa",
"Importing contacts" => "S'estan important contactes",
+"Contacts imported successfully" => "Els contactes s'han importat correctament",
+"Close Dialog" => "Tanca el diàleg",
+"Import Addressbook" => "Importa la llibreta d'adreces",
"Select address book to import to:" => "Seleccioneu la llibreta d'adreces a la que voleu importar:",
+"Drop a VCF file to import contacts." => "Elimina un fitxer VCF per importar contactes.",
"Select from HD" => "Selecciona de HD",
"You have no contacts in your addressbook." => "No teniu contactes a la llibreta d'adreces.",
"Add contact" => "Afegeix un contacte",
-"Configure addressbooks" => "Configura les llibretes d'adreces",
+"Select Address Books" => "Selecccioneu llibretes d'adreces",
+"Enter name" => "Escriviu un nom",
+"Enter description" => "Escriviu una descripció",
"CardDAV syncing addresses" => "Adreces de sincronització CardDAV",
"more info" => "més informació",
"Primary address (Kontact et al)" => "Adreça primària (Kontact i al)",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Show CardDav link" => "Mostra l'enllaç CardDav",
+"Show read-only VCF link" => "Mostra l'enllaç VCF només de lectura",
+"Share" => "Comparteix",
+"Download" => "Baixa",
+"Edit" => "Edita",
+"New Address Book" => "Nova llibreta d'adreces",
+"Name" => "Nom",
+"Description" => "Descripció",
+"Save" => "Desa",
+"Cancel" => "Cancel·la",
+"More..." => "Més..."
);
diff --git a/apps/contacts/l10n/cs_CZ.php b/apps/contacts/l10n/cs_CZ.php
index 391a62010b1..830077aa278 100644
--- a/apps/contacts/l10n/cs_CZ.php
+++ b/apps/contacts/l10n/cs_CZ.php
@@ -1,39 +1,40 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Chyba při (de)aktivaci adresáře.",
-"There was an error adding the contact." => "Během přidávání kontaktu nastala chyba.",
-"Cannot add empty property." => "Nelze přidat prazdný údaj.",
-"At least one of the address fields has to be filled out." => "Musí být uveden nejméně jeden z adresních údajů",
-"Trying to add duplicate property: " => "Pokoušíte se přidat duplicitní atribut: ",
-"Error adding contact property." => "Chyba během přdávání údaje kontaktu.",
+"id is not set." => "id neni nastaveno.",
+"Cannot update addressbook with an empty name." => "Nelze aktualizovat adresář s prázdným jménem.",
+"Error updating addressbook." => "Chyba při aktualizaci adresáře.",
"No ID provided" => "ID nezadáno",
"Error setting checksum." => "Chyba pÅ™i nastavování kontrolního souÄtu.",
"No categories selected for deletion." => "Žádné kategorie nebyly vybrány k smazání.",
"No address books found." => "Žádný adresář nenalezen.",
"No contacts found." => "Žádné kontakty nenalezeny.",
+"There was an error adding the contact." => "Během přidávání kontaktu nastala chyba.",
+"element name is not set." => "jméno elementu není nastaveno.",
+"Could not parse contact: " => "Nelze analyzovat kontakty",
+"Cannot add empty property." => "Nelze přidat prazdný údaj.",
+"At least one of the address fields has to be filled out." => "Musí být uveden nejméně jeden z adresních údajů",
+"Trying to add duplicate property: " => "Pokoušíte se přidat duplicitní atribut: ",
+"Information about vCard is incorrect. Please reload the page." => "Informace o vCard je nesprávná. Obnovte stránku, prosím.",
"Missing ID" => "Chybí ID",
"Error parsing VCard for ID: \"" => "Chyba při parsování VCard pro ID: \"",
-"Cannot add addressbook with an empty name." => "Nelze přidat adresář s prázdným jménem.",
-"Error adding addressbook." => "Chyba při přidávání adresáře.",
-"Error activating addressbook." => "Chyba při aktivaci adresáře.",
+"checksum is not set." => "kontrolní souÄet není nastaven.",
+"Information about vCard is incorrect. Please reload the page: " => "Informace o vCard je nesprávná. Obnovte stránku, prosím.",
+"Something went FUBAR. " => "Něco se pokazilo. ",
"No contact ID was submitted." => "Nebylo nastaveno ID kontaktu.",
"Error reading contact photo." => "Chyba pÅ™i naÄítání fotky kontaktu.",
"Error saving temporary file." => "Chyba pÅ™i ukládání doÄasného souboru.",
"The loading photo is not valid." => "NaÄítaná fotka je vadná.",
-"id is not set." => "id neni nastaveno.",
-"Information about vCard is incorrect. Please reload the page." => "Informace o vCard je nesprávná. Obnovte stránku, prosím.",
-"Error deleting contact property." => "Chyba při odstraňování údaje kontaktu.",
"Contact ID is missing." => "Chybí ID kontaktu.",
-"Missing contact id." => "Chybí id kontaktu.",
"No photo path was submitted." => "Žádná fotka nebyla nahrána.",
"File doesn't exist:" => "Soubor neexistuje:",
"Error loading image." => "Chyba pÅ™i naÄítání obrázku.",
-"element name is not set." => "jméno elementu není nastaveno.",
-"checksum is not set." => "kontrolní souÄet není nastaven.",
-"Information about vCard is incorrect. Please reload the page: " => "Informace o vCard je nesprávná. Obnovte stránku, prosím.",
-"Something went FUBAR. " => "Něco se pokazilo. ",
-"Error updating contact property." => "Chyba při aktualizaci údaje kontaktu.",
-"Cannot update addressbook with an empty name." => "Nelze aktualizovat adresář s prázdným jménem.",
-"Error updating addressbook." => "Chyba při aktualizaci adresáře.",
+"Error getting contact object." => "Chyba při převzetí objektu kontakt.",
+"Error getting PHOTO property." => "Chyba při získávání fotky.",
+"Error saving contact." => "Chyba při ukládání kontaktu.",
+"Error resizing image" => "Chyba při změně velikosti obrázku.",
+"Error cropping image" => "Chyba při osekávání obrázku.",
+"Error creating temporary image" => "Chyba pÅ™i vytváření doÄasného obrázku.",
+"Error finding image: " => "Chyba při hledání obrázku:",
"Error uploading contacts to storage." => "Chyba při nahrávání kontaktů do úložiště.",
"There is no error, the file uploaded with success" => "Nevyskytla se žádná chyba, soubor byl úspěšně nahrán",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Nahrávaný soubor pÅ™ekraÄuje nastavení upload_max_filesize directive v php.ini",
@@ -41,17 +42,33 @@
"The uploaded file was only partially uploaded" => "Nahrávaný soubor se nahrál pouze z Äásti",
"No file was uploaded" => "Žádný soubor nebyl nahrán",
"Missing a temporary folder" => "Chybí doÄasný adresář",
+"Couldn't save temporary image: " => "Nemohu uložit doÄasný obrázek: ",
+"Couldn't load temporary image: " => "Nemohu naÄíst doÄasný obrázek: ",
+"No file was uploaded. Unknown error" => "Soubor nebyl odeslán. Neznámá chyba",
"Contacts" => "Kontakty",
-"Drop a VCF file to import contacts." => "Pro import kontaktů sem přetáhněte soubor VCF",
-"Addressbook not found." => "Adresář nenalezen.",
+"Sorry, this functionality has not been implemented yet" => "Bohužel, tato funkce nebyla ještě implementována.",
+"Not implemented" => "Neimplementováno",
+"Couldn't get a valid address." => "Nelze získat platnou adresu.",
+"Error" => "Chyba",
+"This property has to be non-empty." => "Tento parametr nemuže zůstat nevyplněn.",
+"Couldn't serialize elements." => "Prvky nelze převést..",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' voláno bez argumentu. Prosím oznamte chybu na bugs.owncloud.org",
+"Edit name" => "Upravit jméno",
+"No files selected for upload." => "Žádné soubory nebyly vybrány k nahrání.",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Soubor, který se pokoušíte odeslat, přesahuje maximální povolenou velikost.",
+"Error loading profile picture." => "Chyba při otevírání obrázku profilu",
+"Select type" => "Vybrat typ",
+"Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted." => "NÄ›které kontakty jsou oznaÄeny ke smazání. PoÄkete prosím na dokonÄení operace.",
+"Result: " => "Výsledek: ",
+" imported, " => "importováno v pořádku,",
+" failed." => "neimportováno.",
+"Displayname cannot be empty." => "Zobrazované jméno nemůže zůstat prázdné.",
+"Addressbook not found: " => "Adresář nenalezen:",
"This is not your addressbook." => "Toto není Váš adresář.",
"Contact could not be found." => "Kontakt nebyl nalezen.",
-"Address" => "Adresa",
-"Telephone" => "Telefon",
-"Email" => "Email",
-"Organization" => "Organizace",
"Work" => "Pracovní",
"Home" => "Domácí",
+"Other" => "Ostatní",
"Mobile" => "Mobil",
"Text" => "Text",
"Voice" => "Hlas",
@@ -60,25 +77,52 @@
"Video" => "Video",
"Pager" => "Pager",
"Internet" => "Internet",
+"Birthday" => "Narozeniny",
+"Business" => "Pracovní",
+"Call" => "Volat",
+"Clients" => "Klienti",
+"Deliverer" => "Dodavatel",
+"Holidays" => "Prázdniny",
+"Ideas" => "Nápady",
+"Journey" => "Cestování",
+"Jubilee" => "Jubileum",
+"Meeting" => "Schůzka",
+"Personal" => "Osobní",
+"Projects" => "Projekty",
+"Questions" => "Dotazy",
"{name}'s Birthday" => "Narozeniny {name}",
"Contact" => "Kontakt",
"Add Contact" => "Přidat kontakt",
+"Import" => "Import",
+"Settings" => "Nastavení",
"Addressbooks" => "Adresáře",
-"Configure Address Books" => "Nastavit adresáře",
-"New Address Book" => "Nový adresář",
-"Import from VCF" => "Importovat z VCF",
-"CardDav Link" => "CardDav odkaz",
-"Download" => "Stažení",
-"Edit" => "Editovat",
-"Delete" => "Odstranit",
-"Download contact" => "Stáhnout kontakt",
-"Delete contact" => "Odstranit kontakt",
+"Close" => "Zavřít",
+"Keyboard shortcuts" => "Klávesoví zkratky",
+"Navigation" => "Navigace",
+"Next contact in list" => "Následující kontakt v seznamu",
+"Previous contact in list" => "Předchozí kontakt v seznamu",
+"Expand/collapse current addressbook" => "Rozbalit/sbalit aktuální Adresář",
+"Next addressbook" => "Následující Adresář",
+"Previous addressbook" => "Předchozí Adresář",
+"Actions" => "Akce",
+"Refresh contacts list" => "ObÄerstvit seznam kontaktů",
+"Add new contact" => "Přidat kontakt",
+"Add new addressbook" => "Předat nový Adresář",
+"Delete current contact" => "Odstranit aktuální kontakt",
"Drop photo to upload" => "Přetáhněte sem fotku pro její nahrání",
+"Delete current photo" => "Smazat souÄasnou fotku",
+"Edit current photo" => "Upravit souÄasnou fotku",
+"Upload new photo" => "Nahrát novou fotku",
+"Select photo from ownCloud" => "Vybrat fotku z ownCloudu",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Formát vlastní, kÅ™estní, celé jméno, obrácenÄ› nebo obrácenÄ› oddelené Äárkami",
"Edit name details" => "Upravit podrobnosti jména",
+"Organization" => "Organizace",
+"Delete" => "Odstranit",
"Nickname" => "Přezdívka",
"Enter nickname" => "Zadejte přezdívku",
-"Birthday" => "Narozeniny",
+"Web site" => "Web",
+"http://www.somesite.com" => "http://www.somesite.com",
+"Go to web site" => "Přejít na web",
"dd-mm-yyyy" => "dd. mm. yyyy",
"Groups" => "Skupiny",
"Separate groups with commas" => "OddÄ›lte skupiny Äárkami",
@@ -94,24 +138,26 @@
"Edit address details" => "Upravit podrobnosti adresy",
"Add notes here." => "Zde můžete připsat poznámky.",
"Add field" => "PÅ™idat políÄko",
-"Profile picture" => "Profilová fotka",
"Phone" => "Telefon",
+"Email" => "Email",
+"Address" => "Adresa",
"Note" => "Poznámka",
-"Delete current photo" => "Smazat souÄasnou fotku",
-"Edit current photo" => "Upravit souÄasnou fotku",
-"Upload new photo" => "Nahrát novou fotku",
-"Select photo from ownCloud" => "Vybrat fotku z ownCloudu",
+"Download contact" => "Stáhnout kontakt",
+"Delete contact" => "Odstranit kontakt",
+"The temporary image has been removed from cache." => "Obrázek byl odstranÄ›n z doÄasné pamÄ›ti.",
"Edit address" => "Upravit adresu",
"Type" => "Typ",
"PO Box" => "PO box",
+"Street address" => "Ulice",
+"Street and number" => "Ulice a Äíslo",
"Extended" => "Rozšířené",
-"Street" => "Ulice",
+"Apartment number etc." => "Byt Äíslo atd.",
"City" => "Město",
"Region" => "Kraj",
+"E.g. state or province" => "Např. stát nebo okres",
"Zipcode" => "PSČ",
+"Postal code" => "PSČ",
"Country" => "ZemÄ›",
-"Edit categories" => "Upravit kategorie",
-"Add" => "Přidat",
"Addressbook" => "Adresář",
"Hon. prefixes" => "Tituly před",
"Miss" => "SleÄna",
@@ -132,26 +178,34 @@
"Esq." => "Esq.",
"Jr." => "ml.",
"Sn." => "st.",
-"New Addressbook" => "Nový adresář",
-"Edit Addressbook" => "Editace adresáře",
-"Displayname" => "Zobrazené jméno",
-"Active" => "Aktivní",
-"Save" => "Uložit",
-"Submit" => "Potvrdit",
-"Cancel" => "Storno",
"Import a contacts file" => "Importovat soubor kontaktů",
"Please choose the addressbook" => "Prosím zvolte adresář",
"create a new addressbook" => "vytvořit nový adresář",
"Name of new addressbook" => "Jméno nového adresáře",
-"Import" => "Import",
"Importing contacts" => "Importování kontaktů",
+"Contacts imported successfully" => "Kontakty úspěšně importovány",
+"Close Dialog" => "Zavírací dialog",
+"Import Addressbook" => "Importovat adresář",
"Select address book to import to:" => "Vyberte adresář do kterého chcete importovat:",
+"Drop a VCF file to import contacts." => "Pro import kontaktů sem přetáhněte soubor VCF",
"Select from HD" => "Vybrat z disku",
"You have no contacts in your addressbook." => "Nemáte žádné kontakty v adresáři.",
"Add contact" => "Přidat kontakt",
-"Configure addressbooks" => "Nastavit adresář",
+"Select Address Books" => "Vybrat Adresář",
+"Enter name" => "Vložte jméno",
+"Enter description" => "Vložte popis",
"CardDAV syncing addresses" => "Adresa pro synchronizaci pomocí CardDAV:",
"more info" => "víc informací",
"Primary address (Kontact et al)" => "Hlavní adresa (Kontakt etc)",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Show CardDav link" => "Zobrazit odklaz CardDAV:",
+"Show read-only VCF link" => "Zobrazit odkaz VCF pouze pro Ätení",
+"Download" => "Stažení",
+"Edit" => "Editovat",
+"New Address Book" => "Nový adresář",
+"Name" => "Název",
+"Description" => "Popis",
+"Save" => "Uložit",
+"Cancel" => "Storno",
+"More..." => "Více..."
);
diff --git a/apps/contacts/l10n/da.php b/apps/contacts/l10n/da.php
index 28753edda4e..97c5f1307cd 100644
--- a/apps/contacts/l10n/da.php
+++ b/apps/contacts/l10n/da.php
@@ -1,39 +1,39 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Fejl ved (de)aktivering af adressebogen",
-"There was an error adding the contact." => "Der opstod en fejl ved tilføjelse af kontaktpersonen.",
-"Cannot add empty property." => "Kan ikke tilføje en egenskab uden indhold.",
-"At least one of the address fields has to be filled out." => "Der skal udfyldes mindst et adressefelt.",
-"Trying to add duplicate property: " => "Kan ikke tilføje overlappende element.",
-"Error adding contact property." => "Fejl ved tilføjelse af egenskab.",
+"id is not set." => "Intet ID medsendt.",
+"Cannot update addressbook with an empty name." => "Kan ikke opdatére adressebogen med et tomt navn.",
+"Error updating addressbook." => "Fejl ved opdatering af adressebog",
"No ID provided" => "Intet ID medsendt",
"Error setting checksum." => "Kunne ikke sætte checksum.",
"No categories selected for deletion." => "Der ikke valgt nogle grupper at slette.",
"No address books found." => "Der blev ikke fundet nogen adressebøger.",
"No contacts found." => "Der blev ikke fundet nogen kontaktpersoner.",
+"There was an error adding the contact." => "Der opstod en fejl ved tilføjelse af kontaktpersonen.",
+"element name is not set." => "Elementnavnet er ikke medsendt.",
+"Cannot add empty property." => "Kan ikke tilføje en egenskab uden indhold.",
+"At least one of the address fields has to be filled out." => "Der skal udfyldes mindst et adressefelt.",
+"Trying to add duplicate property: " => "Kan ikke tilføje overlappende element.",
+"Information about vCard is incorrect. Please reload the page." => "Informationen om vCard er forkert. Genindlæs siden.",
"Missing ID" => "Manglende ID",
-"Error parsing VCard for ID: \"" => "Kunne ikke indlæse VCard med ID'en: \"",
-"Cannot add addressbook with an empty name." => "Kan ikke tilføje adressebog uden et navn.",
-"Error adding addressbook." => "Fejl ved tilføjelse af adressebog.",
-"Error activating addressbook." => "Fejl ved aktivering af adressebog.",
+"Error parsing VCard for ID: \"" => "Kunne ikke indlæse VCard med ID'et: \"",
+"checksum is not set." => "Checksum er ikke medsendt.",
+"Information about vCard is incorrect. Please reload the page: " => "Informationen om dette VCard stemmer ikke. Genindlæs venligst siden: ",
+"Something went FUBAR. " => "Noget gik grueligt galt. ",
"No contact ID was submitted." => "Ingen ID for kontakperson medsendt.",
"Error reading contact photo." => "Kunne ikke indlæse foto for kontakperson.",
"Error saving temporary file." => "Kunne ikke gemme midlertidig fil.",
"The loading photo is not valid." => "Billedet under indlæsning er ikke gyldigt.",
-"id is not set." => "Intet ID medsendt.",
-"Information about vCard is incorrect. Please reload the page." => "Informationen om vCard er forkert. Genindlæs siden.",
-"Error deleting contact property." => "Fejl ved sletning af egenskab for kontaktperson.",
"Contact ID is missing." => "Kontaktperson ID mangler.",
-"Missing contact id." => "Kontaktperson ID mangler.",
"No photo path was submitted." => "Der blev ikke medsendt en sti til fotoet.",
"File doesn't exist:" => "Filen eksisterer ikke:",
"Error loading image." => "Kunne ikke indlæse billede.",
-"element name is not set." => "Element navnet er ikke medsendt.",
-"checksum is not set." => "Checksum er ikke medsendt.",
-"Information about vCard is incorrect. Please reload the page: " => "Informationen om dette VCard stemmer ikke. Genindlæs venligst siden: ",
-"Something went FUBAR. " => "Noget gik grueligt galt. ",
-"Error updating contact property." => "Fejl ved opdatering af egenskab for kontaktperson.",
-"Cannot update addressbook with an empty name." => "Kan ikke opdatére adressebogen med et tomt navn.",
-"Error updating addressbook." => "Fejl ved opdatering af adressebog",
+"Error getting contact object." => "Fejl ved indlæsning af kontaktpersonobjektet.",
+"Error getting PHOTO property." => "Fejl ved indlæsning af PHOTO feltet.",
+"Error saving contact." => "Kunne ikke gemme kontaktpersonen.",
+"Error resizing image" => "Kunne ikke ændre billedets størrelse",
+"Error cropping image" => "Kunne ikke beskære billedet",
+"Error creating temporary image" => "Kunne ikke oprette midlertidigt billede",
+"Error finding image: " => "Kunne ikke finde billedet: ",
"Error uploading contacts to storage." => "Kunne ikke uploade kontaktepersoner til midlertidig opbevaring.",
"There is no error, the file uploaded with success" => "Der skete ingen fejl, filen blev succesfuldt uploadet",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Den uploadede fil er større end upload_max_filesize indstillingen i php.ini",
@@ -41,15 +41,26 @@
"The uploaded file was only partially uploaded" => "Filen blev kun delvist uploadet.",
"No file was uploaded" => "Ingen fil uploadet",
"Missing a temporary folder" => "Manglende midlertidig mappe.",
+"Couldn't save temporary image: " => "Kunne ikke gemme midlertidigt billede: ",
+"Couldn't load temporary image: " => "Kunne ikke indlæse midlertidigt billede",
+"No file was uploaded. Unknown error" => "Ingen fil blev uploadet. Ukendt fejl.",
"Contacts" => "Kontaktpersoner",
-"Drop a VCF file to import contacts." => "Drop en VCF fil for at importere kontaktpersoner.",
-"Addressbook not found." => "Adressebogen blev ikke fundet.",
+"Sorry, this functionality has not been implemented yet" => "Denne funktion er desværre ikke implementeret endnu",
+"Not implemented" => "Ikke implementeret",
+"Couldn't get a valid address." => "Kunne ikke finde en gyldig adresse.",
+"Error" => "Fejl",
+"This property has to be non-empty." => "Dette felt må ikke være tomt.",
+"Couldn't serialize elements." => "Kunne ikke serialisere elementerne.",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' kaldet uden typeargument. Indrapporter fejl på bugs.owncloud.org",
+"Edit name" => "Rediger navn",
+"No files selected for upload." => "Der er ikke valgt nogen filer at uploade.",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Dr.",
+"Select type" => "Vælg type",
+"Result: " => "Resultat:",
+" imported, " => " importeret ",
+" failed." => " fejl.",
"This is not your addressbook." => "Dette er ikke din adressebog.",
"Contact could not be found." => "Kontaktperson kunne ikke findes.",
-"Address" => "Adresse",
-"Telephone" => "Telefon",
-"Email" => "Email",
-"Organization" => "Organisation",
"Work" => "Arbejde",
"Home" => "Hjemme",
"Mobile" => "Mobil",
@@ -60,25 +71,24 @@
"Video" => "Video",
"Pager" => "Personsøger",
"Internet" => "Internet",
-"{name}'s Birthday" => "{name}'s fødselsdag",
+"Birthday" => "Fødselsdag",
+"{name}'s Birthday" => "{name}s fødselsdag",
"Contact" => "Kontaktperson",
"Add Contact" => "Tilføj kontaktperson",
+"Import" => "Importer",
"Addressbooks" => "Adressebøger",
-"Configure Address Books" => "Konfigurer adressebøger",
-"New Address Book" => "Ny adressebog",
-"Import from VCF" => "Importer fra VCF",
-"CardDav Link" => "CardDav-link",
-"Download" => "Download",
-"Edit" => "Rediger",
-"Delete" => "Slet",
-"Download contact" => "Download kontaktperson",
-"Delete contact" => "Slet kontaktperson",
+"Close" => "Luk",
"Drop photo to upload" => "Drop foto for at uploade",
+"Delete current photo" => "Slet nuværende foto",
+"Edit current photo" => "Rediger nuværende foto",
+"Upload new photo" => "Upload nyt foto",
+"Select photo from ownCloud" => "Vælg foto fra ownCloud",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Formatter som valgfrit, fuldt navn, efternavn først eller efternavn først med komma",
"Edit name details" => "Rediger navnedetaljer.",
-"Nickname" => "Øgenavn",
-"Enter nickname" => "Indtast øgenavn",
-"Birthday" => "Fødselsdag",
+"Organization" => "Organisation",
+"Delete" => "Slet",
+"Nickname" => "Kaldenavn",
+"Enter nickname" => "Indtast kaldenavn",
"dd-mm-yyyy" => "dd-mm-åååå",
"Groups" => "Grupper",
"Separate groups with commas" => "Opdel gruppenavne med kommaer",
@@ -93,25 +103,22 @@
"View on map" => "Vis på kort",
"Edit address details" => "Rediger adresse detaljer",
"Add notes here." => "Tilføj noter her.",
-"Add field" => "Tilfæj element",
-"Profile picture" => "Profilbillede",
+"Add field" => "Tilføj element",
"Phone" => "Telefon",
+"Email" => "Email",
+"Address" => "Adresse",
"Note" => "Note",
-"Delete current photo" => "Slet nuværende foto",
-"Edit current photo" => "Rediger nuværende foto",
-"Upload new photo" => "Upload nyt foto",
-"Select photo from ownCloud" => "Vælg foto fra ownCloud",
+"Download contact" => "Download kontaktperson",
+"Delete contact" => "Slet kontaktperson",
+"The temporary image has been removed from cache." => "Det midlertidige billede er ikke længere tilgængeligt.",
"Edit address" => "Rediger adresse",
"Type" => "Type",
"PO Box" => "Postboks",
"Extended" => "Udvidet",
-"Street" => "Vej",
"City" => "By",
"Region" => "Region",
"Zipcode" => "Postnummer",
"Country" => "Land",
-"Edit categories" => "Rediger grupper",
-"Add" => "Tilføj",
"Addressbook" => "Adressebog",
"Hon. prefixes" => "Foranstillede titler",
"Miss" => "Frøken",
@@ -119,7 +126,7 @@
"Mr" => "Hr.",
"Sir" => "Sir",
"Mrs" => "Fru",
-"Dr" => "Dr",
+"Dr" => "Dr.",
"Given name" => "Fornavn",
"Additional names" => "Mellemnavne",
"Family name" => "Efternavn",
@@ -132,26 +139,20 @@
"Esq." => "Esq.",
"Jr." => "Jr.",
"Sn." => "Sn.",
-"New Addressbook" => "Ny adressebog",
-"Edit Addressbook" => "Rediger adressebog",
-"Displayname" => "Vist navn",
-"Active" => "Aktiv",
-"Save" => "Gem",
-"Submit" => "Gem",
-"Cancel" => "Fortryd",
"Import a contacts file" => "Importer fil med kontaktpersoner",
"Please choose the addressbook" => "Vælg venligst adressebog",
"create a new addressbook" => "Opret ny adressebog",
"Name of new addressbook" => "Navn på ny adressebog",
-"Import" => "Importer",
"Importing contacts" => "Importerer kontaktpersoner",
-"Select address book to import to:" => "Vælg hvilken adressebog, der skal importeres til:",
-"Select from HD" => "Vælg fra harddisk.",
"You have no contacts in your addressbook." => "Du har ingen kontaktpersoner i din adressebog.",
"Add contact" => "Tilføj kontaktpeson.",
-"Configure addressbooks" => "Konfigurer adressebøger",
"CardDAV syncing addresses" => "CardDAV synkroniserings adresse",
"more info" => "mere info",
"Primary address (Kontact et al)" => "Primær adresse (Kontak m. fl.)",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Download" => "Download",
+"Edit" => "Rediger",
+"New Address Book" => "Ny adressebog",
+"Save" => "Gem",
+"Cancel" => "Fortryd"
);
diff --git a/apps/contacts/l10n/de.php b/apps/contacts/l10n/de.php
index 3a1013eb4fc..ca65d26cec1 100644
--- a/apps/contacts/l10n/de.php
+++ b/apps/contacts/l10n/de.php
@@ -1,57 +1,89 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "(De-)Aktivierung des Adressbuches fehlgeschlagen",
-"There was an error adding the contact." => "Erstellen des Kontakts fehlgeschlagen",
-"Cannot add empty property." => "Feld darf nicht leer sein.",
-"At least one of the address fields has to be filled out." => "Mindestens eines der Adressfelder muss ausgefüllt werden.",
-"Trying to add duplicate property: " => "Versuche, doppelte Eigenschaft hinzuzufügen: ",
-"Error adding contact property." => "Kontakt ändern fehlgeschlagen",
+"id is not set." => "ID ist nicht angegeben.",
+"Cannot update addressbook with an empty name." => "Adressbuch kann nicht mir leeren Namen aktualisiert werden.",
+"Error updating addressbook." => "Adressbuch aktualisieren fehlgeschlagen.",
"No ID provided" => "Keine ID angegeben",
"Error setting checksum." => "Fehler beim Setzen der Prüfsumme.",
"No categories selected for deletion." => "Keine Kategorien zum Löschen ausgewählt.",
"No address books found." => "Keine Adressbücher gefunden.",
"No contacts found." => "Keine Kontakte gefunden.",
+"There was an error adding the contact." => "Erstellen des Kontakts fehlgeschlagen.",
+"element name is not set." => "Kein Name für das Element angegeben.",
+"Could not parse contact: " => "Konnte folgenden Kontakt nicht verarbeiten:",
+"Cannot add empty property." => "Feld darf nicht leer sein.",
+"At least one of the address fields has to be filled out." => "Mindestens eines der Adressfelder muss ausgefüllt werden.",
+"Trying to add duplicate property: " => "Versuche doppelte Eigenschaft hinzuzufügen: ",
+"Missing IM parameter." => "IM-Parameter fehlt.",
+"Unknown IM: " => "IM unbekannt:",
+"Information about vCard is incorrect. Please reload the page." => "Die Information der vCard ist fehlerhaft. Bitte aktualisieren Sie die Seite.",
"Missing ID" => "Fehlende ID",
"Error parsing VCard for ID: \"" => "Fehler beim Einlesen der VCard für die ID: \"",
-"Cannot add addressbook with an empty name." => "Bitte einen Namen für das Adressbuch angeben.",
-"Error adding addressbook." => "Adressbuch hinzufügen fehlgeschlagen",
-"Error activating addressbook." => "Adressbuchaktivierung fehlgeschlagen",
+"checksum is not set." => "Keine Prüfsumme angegeben.",
+"Information about vCard is incorrect. Please reload the page: " => "Die Informationen zur vCard sind fehlerhaft. Bitte Seite neu laden: ",
+"Something went FUBAR. " => "Irgendwas ist hier so richtig schief gelaufen. ",
"No contact ID was submitted." => "Es wurde keine Kontakt-ID übermittelt.",
-"Error reading contact photo." => "Fehler beim auslesen des Kontaktfotos.",
+"Error reading contact photo." => "Fehler beim Auslesen des Kontaktfotos.",
"Error saving temporary file." => "Fehler beim Speichern der temporären Datei.",
"The loading photo is not valid." => "Das Kontaktfoto ist fehlerhaft.",
-"id is not set." => "ID ist nicht angegeben.",
-"Information about vCard is incorrect. Please reload the page." => "Die Information der vCard ist fehlerhaft. Bitte aktualisiere die Seite.",
-"Error deleting contact property." => "Kontakteigenschaft löschen fehlgeschlagen",
"Contact ID is missing." => "Keine Kontakt-ID angegeben.",
-"Missing contact id." => "Fehlende Kontakt-ID.",
"No photo path was submitted." => "Kein Foto-Pfad übermittelt.",
"File doesn't exist:" => "Datei existiert nicht: ",
"Error loading image." => "Fehler beim Laden des Bildes.",
-"element name is not set." => "Kein Name für das Element angegeben.",
-"checksum is not set." => "Keine Prüfsumme angegeben.",
-"Information about vCard is incorrect. Please reload the page: " => "Die Informationen zur vCard sind fehlerhaft. Bitte Seite neu laden: ",
-"Something went FUBAR. " => "Irgendwas ist hier so richtig schief gelaufen. ",
-"Error updating contact property." => "Kontakteigenschaft aktualisieren fehlgeschlagen",
-"Cannot update addressbook with an empty name." => "Adressbuch kann nicht mir leeren Namen aktualisiert werden.",
-"Error updating addressbook." => "Adressbuch aktualisieren fehlgeschlagen",
-"Error uploading contacts to storage." => "Ãœbertragen der Kontakte fehlgeschlagen",
+"Error getting contact object." => "Fehler beim Abruf des Kontakt-Objektes.",
+"Error getting PHOTO property." => "Fehler beim Abrufen der PHOTO-Eigenschaft.",
+"Error saving contact." => "Fehler beim Speichern des Kontaktes.",
+"Error resizing image" => "Fehler bei der Größenänderung des Bildes",
+"Error cropping image" => "Fehler beim Zuschneiden des Bildes",
+"Error creating temporary image" => "Fehler beim Erstellen des temporären Bildes",
+"Error finding image: " => "Fehler beim Suchen des Bildes: ",
+"Error uploading contacts to storage." => "Ãœbertragen der Kontakte fehlgeschlagen.",
"There is no error, the file uploaded with success" => "Alles bestens, Datei erfolgreich übertragen.",
-"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Datei größer als durch die upload_max_filesize Direktive in php.ini erlaubt",
-"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Datei größer als die MAX_FILE_SIZE Direktive erlaubt, die im HTML Formular spezifiziert ist",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Datei größer, als durch die upload_max_filesize Direktive in php.ini erlaubt",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Datei größer, als die MAX_FILE_SIZE Direktive erlaubt, die im HTML Formular spezifiziert ist",
"The uploaded file was only partially uploaded" => "Datei konnte nur teilweise übertragen werden",
"No file was uploaded" => "Keine Datei konnte übertragen werden.",
"Missing a temporary folder" => "Kein temporärer Ordner vorhanden",
+"Couldn't save temporary image: " => "Konnte das temporäre Bild nicht speichern:",
+"Couldn't load temporary image: " => "Konnte das temporäre Bild nicht laden:",
+"No file was uploaded. Unknown error" => "Keine Datei hochgeladen. Unbekannter Fehler",
"Contacts" => "Kontakte",
-"Drop a VCF file to import contacts." => "Zieh' eine VCF Datei hierher zum Kontaktimport",
-"Addressbook not found." => "Adressbuch nicht gefunden.",
-"This is not your addressbook." => "Dies ist nicht dein Adressbuch.",
+"Sorry, this functionality has not been implemented yet" => "Diese Funktion steht leider noch nicht zur Verfügung",
+"Not implemented" => "Nicht verfügbar",
+"Couldn't get a valid address." => "Konnte keine gültige Adresse abrufen.",
+"Error" => "Fehler",
+"This property has to be non-empty." => "Dieses Feld darf nicht leer sein.",
+"Couldn't serialize elements." => "Konnte Elemente nicht serialisieren",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' wurde ohne Argumente aufgerufen. Bitte melden Sie dies auf bugs.owncloud.org",
+"Edit name" => "Name ändern",
+"No files selected for upload." => "Keine Datei(en) zum Hochladen ausgewählt.",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Die Datei, die Sie hochladen möchten, überschreitet die maximale Größe für Datei-Uploads auf diesem Server.",
+"Error loading profile picture." => "Fehler beim Laden des Profilbildes.",
+"Select type" => "Wähle Typ",
+"Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted." => "Einige zum Löschen markiert Kontakte wurden noch nicht gelöscht. Bitte warten.",
+"Do you want to merge these address books?" => "Möchten Sie diese Adressbücher zusammenführen?",
+"Result: " => "Ergebnis: ",
+" imported, " => " importiert, ",
+" failed." => " fehlgeschlagen.",
+"Displayname cannot be empty." => "Der Anzeigename darf nicht leer sein.",
+"Addressbook not found: " => "Adressbuch nicht gefunden:",
+"This is not your addressbook." => "Dies ist nicht Ihr Adressbuch.",
"Contact could not be found." => "Kontakt konnte nicht gefunden werden.",
-"Address" => "Adresse",
-"Telephone" => "Telefon",
-"Email" => "Email",
-"Organization" => "Organisation",
+"Jabber" => "Jabber",
+"AIM" => "AIM",
+"MSN" => "MSN",
+"Twitter" => "Twitter",
+"GoogleTalk" => "GoogleTalk",
+"Facebook" => "Facebook",
+"XMPP" => "XMPP",
+"ICQ" => "ICQ",
+"Yahoo" => "Yahoo",
+"Skype" => "Skype",
+"QQ" => "QQ",
+"GaduGadu" => "GaduGadu",
"Work" => "Arbeit",
"Home" => "Zuhause",
+"Other" => "Andere",
"Mobile" => "Mobil",
"Text" => "Text",
"Voice" => "Anruf",
@@ -60,58 +92,90 @@
"Video" => "Video",
"Pager" => "Pager",
"Internet" => "Internet",
+"Birthday" => "Geburtstag",
+"Business" => "Geschäftlich",
+"Call" => "Anruf",
+"Clients" => "Kunden",
+"Deliverer" => "Lieferant",
+"Holidays" => "Feiertage",
+"Ideas" => "Ideen",
+"Journey" => "Reise",
+"Jubilee" => "Jubiläum",
+"Meeting" => "Besprechung",
+"Personal" => "Persönlich",
+"Projects" => "Projekte",
+"Questions" => "Fragen",
"{name}'s Birthday" => "Geburtstag von {name}",
"Contact" => "Kontakt",
"Add Contact" => "Kontakt hinzufügen",
+"Import" => "Importieren",
+"Settings" => "Einstellungen",
"Addressbooks" => "Adressbücher",
-"Configure Address Books" => "Adressbücher konfigurieren",
-"New Address Book" => "Neues Adressbuch",
-"Import from VCF" => "Import von VCF Datei",
-"CardDav Link" => "CardDav Link",
-"Download" => "Herunterladen",
-"Edit" => "Bearbeiten",
+"Close" => "Schließen",
+"Keyboard shortcuts" => "Tastaturbefehle",
+"Navigation" => "Navigation",
+"Next contact in list" => "Nächster Kontakt aus der Liste",
+"Previous contact in list" => "Vorheriger Kontakt aus der Liste",
+"Expand/collapse current addressbook" => "Ausklappen/Einklappen des Adressbuches",
+"Next addressbook" => "Nächstes Adressbuch",
+"Previous addressbook" => "Vorheriges Adressbuch",
+"Actions" => "Aktionen",
+"Refresh contacts list" => "Kontaktliste neu laden",
+"Add new contact" => "Neuen Kontakt hinzufügen",
+"Add new addressbook" => "Neues Adressbuch hinzufügen",
+"Delete current contact" => "Aktuellen Kontakt löschen",
+"Drop photo to upload" => "Ziehen Sie ein Foto zum Hochladen hierher",
+"Delete current photo" => "Derzeitiges Foto löschen",
+"Edit current photo" => "Foto ändern",
+"Upload new photo" => "Neues Foto hochladen",
+"Select photo from ownCloud" => "Foto aus der ownCloud auswählen",
+"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Format benutzerdefiniert, Kurzname, Vollname, Rückwärts oder Rückwärts mit Komma",
+"Edit name details" => "Name ändern",
+"Organization" => "Organisation",
"Delete" => "Löschen",
-"Download contact" => "Kontakt herunterladen",
-"Delete contact" => "Kontakt löschen",
-"Drop photo to upload" => "Zieh' ein Foto hierher zum hochladen",
-"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Format benutzerdefiniert, Kurzname, Vollname, Rückwärts order Rückwärts mit Komma",
-"Edit name details" => "Namen ändern",
"Nickname" => "Spitzname",
-"Enter nickname" => "Spitznamen angeben",
-"Birthday" => "Geburtstag",
-"dd-mm-yyyy" => "TT-MM-JJJJ",
+"Enter nickname" => "Spitzname angeben",
+"Web site" => "Webseite",
+"http://www.somesite.com" => "http://www.somesite.com",
+"Go to web site" => "Webseite aufrufen",
+"dd-mm-yyyy" => "dd.mm.yyyy",
"Groups" => "Gruppen",
-"Separate groups with commas" => "Gruppen mit Komma trennt",
+"Separate groups with commas" => "Gruppen mit Komma getrennt",
"Edit groups" => "Gruppen editieren",
"Preferred" => "Bevorzugt",
"Please specify a valid email address." => "Bitte eine gültige E-Mail-Adresse angeben.",
-"Enter email address" => "E-Mail-Adresse angeben.",
+"Enter email address" => "E-Mail-Adresse angeben",
"Mail to address" => "E-Mail an diese Adresse schreiben",
"Delete email address" => "E-Mail-Adresse löschen",
"Enter phone number" => "Telefonnummer angeben",
"Delete phone number" => "Telefonnummer löschen",
+"Instant Messenger" => "Instant Messenger",
+"Delete IM" => "IM löschen",
"View on map" => "Auf Karte anzeigen",
"Edit address details" => "Adressinformationen ändern",
"Add notes here." => "Füge hier Notizen ein.",
"Add field" => "Feld hinzufügen",
-"Profile picture" => "Profil Bild",
"Phone" => "Telefon",
+"Email" => "E-Mail",
+"Instant Messaging" => "Instant Messaging",
+"Address" => "Adresse",
"Note" => "Notiz",
-"Delete current photo" => "Derzeitiges Foto löschen",
-"Edit current photo" => "Foto ändern",
-"Upload new photo" => "Neues Foto hochladen",
-"Select photo from ownCloud" => "Foto aus ownCloud auswählen",
+"Download contact" => "Kontakt herunterladen",
+"Delete contact" => "Kontakt löschen",
+"The temporary image has been removed from cache." => "Das temporäre Bild wurde aus dem Cache gelöscht.",
"Edit address" => "Adresse ändern",
"Type" => "Typ",
"PO Box" => "Postfach",
+"Street address" => "Straßenanschrift",
+"Street and number" => "Straße und Nummer",
"Extended" => "Erweitert",
-"Street" => "Straße",
+"Apartment number etc." => "Wohnungsnummer usw.",
"City" => "Stadt",
"Region" => "Region",
+"E.g. state or province" => "Z.B. Staat oder Bezirk",
"Zipcode" => "Postleitzahl",
+"Postal code" => "PLZ",
"Country" => "Land",
-"Edit categories" => "Kategorie ändern",
-"Add" => "Hinzufügen",
"Addressbook" => "Adressbuch",
"Hon. prefixes" => "Höflichkeitspräfixe",
"Miss" => "Frau",
@@ -119,12 +183,12 @@
"Mr" => "Herr",
"Sir" => "Herr",
"Mrs" => "Frau",
-"Dr" => "Dr",
+"Dr" => "Dr.",
"Given name" => "Vorname",
"Additional names" => "Zusätzliche Namen",
"Family name" => "Familienname",
"Hon. suffixes" => "Höflichkeitssuffixe",
-"J.D." => "Dr. Jur",
+"J.D." => "Dr. Jur.",
"M.D." => "Dr. med.",
"D.O." => "DGOM",
"D.C." => "MChiro",
@@ -132,26 +196,29 @@
"Esq." => "Hochwohlgeborenen",
"Jr." => "Jr.",
"Sn." => "Senior",
-"New Addressbook" => "Neues Adressbuch",
-"Edit Addressbook" => "Adressbuch editieren",
-"Displayname" => "Anzeigename",
-"Active" => "Aktiv",
-"Save" => "Speichern",
-"Submit" => "Eintragen",
-"Cancel" => "Abbrechen",
"Import a contacts file" => "Kontaktdatei importieren",
"Please choose the addressbook" => "Bitte Adressbuch auswählen",
"create a new addressbook" => "Neues Adressbuch erstellen",
"Name of new addressbook" => "Name des neuen Adressbuchs",
-"Import" => "Importieren",
"Importing contacts" => "Kontakte werden importiert",
-"Select address book to import to:" => "Adressbuch, in das importiert werden soll",
-"Select from HD" => "Von der Festplatte auswählen",
-"You have no contacts in your addressbook." => "Du hast keine Kontakte im Adressbuch.",
+"You have no contacts in your addressbook." => "Sie haben keine Kontakte im Adressbuch.",
"Add contact" => "Kontakt hinzufügen",
-"Configure addressbooks" => "Adressbücher konfigurieren",
+"Select Address Books" => "Wähle Adressbuch",
+"Enter name" => "Name eingeben",
+"Enter description" => "Beschreibung eingeben",
"CardDAV syncing addresses" => "CardDAV Sync-Adressen",
-"more info" => "mehr Info",
-"Primary address (Kontact et al)" => "primäre Adresse (für Kontact o.ä. Programme)",
-"iOS/OS X" => "iOS/OS X"
+"more info" => "mehr Informationen",
+"Primary address (Kontact et al)" => "Primäre Adresse (für Kontakt o.ä.)",
+"iOS/OS X" => "iOS/OS X",
+"Show CardDav link" => "CardDav-Link anzeigen",
+"Show read-only VCF link" => "Schreibgeschützten VCF-Link anzeigen",
+"Share" => "Teilen",
+"Download" => "Herunterladen",
+"Edit" => "Bearbeiten",
+"New Address Book" => "Neues Adressbuch",
+"Name" => "Name",
+"Description" => "Beschreibung",
+"Save" => "Speichern",
+"Cancel" => "Abbrechen",
+"More..." => "Mehr..."
);
diff --git a/apps/contacts/l10n/el.php b/apps/contacts/l10n/el.php
index f015f0ca363..3552ffba616 100644
--- a/apps/contacts/l10n/el.php
+++ b/apps/contacts/l10n/el.php
@@ -1,39 +1,42 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Σφάλμα (απ)ενεÏγοποίησης βιβλίου διευθÏνσεων",
-"There was an error adding the contact." => "Σφάλμα κατά την Ï€Ïοσθήκη επαφής.",
-"Cannot add empty property." => "ΑδÏνατη Ï€Ïοσθήκη κενής ιδιότητας.",
-"At least one of the address fields has to be filled out." => "ΠÏέπει να συμπληÏωθεί τουλάχιστον ένα από τα παιδία διεÏθυνσης.",
-"Trying to add duplicate property: " => "ΠÏοσπάθεια Ï€Ïοσθήκης διπλότυπης ιδιότητας:",
-"Error adding contact property." => "Σφάλμα Ï€Ïοσθήκης ιδιότητας επαφής.",
-"No ID provided" => "Δε δώθηκε ID",
+"id is not set." => "δεν οÏίστηκε id",
+"Cannot update addressbook with an empty name." => "Δε μποÏεί να γίνει αλλαγή βιβλίου διευθÏνσεων χωÏίς όνομα",
+"Error updating addressbook." => "Σφάλμα ενημέÏωσης βιβλίου διευθÏνσεων.",
+"No ID provided" => "Δε δόθηκε ID",
"Error setting checksum." => "Λάθος κατά τον οÏισμό checksum ",
"No categories selected for deletion." => "Δε επελέγησαν κατηγοÏίες για διαγÏαφή",
"No address books found." => "Δε βÏέθηκε βιβλίο διευθÏνσεων",
"No contacts found." => "Δεν βÏέθηκαν επαφές",
+"There was an error adding the contact." => "Σφάλμα κατά την Ï€Ïοσθήκη επαφής.",
+"element name is not set." => "δεν οÏίστηκε όνομα στοιχείου",
+"Could not parse contact: " => "Δε αναγνώστηκε η επαφή",
+"Cannot add empty property." => "ΑδÏνατη Ï€Ïοσθήκη κενής ιδιότητας.",
+"At least one of the address fields has to be filled out." => "ΠÏέπει να συμπληÏωθεί τουλάχιστον ένα από τα παιδία διεÏθυνσης.",
+"Trying to add duplicate property: " => "ΠÏοσπάθεια Ï€Ïοσθήκης διπλότυπης ιδιότητας:",
+"Missing IM parameter." => "Λείπει IM παÏάμετÏος.",
+"Unknown IM: " => "Άγνωστο IM:",
+"Information about vCard is incorrect. Please reload the page." => "Οι πληÏοφοÏίες σχετικά με vCard είναι εσφαλμένες. ΠαÏακαλώ επαναφοÏτώστε τη σελίδα.",
"Missing ID" => "Λείπει ID",
"Error parsing VCard for ID: \"" => "Σφάλμα κατά την ανάγνωση του VCard για το ID:\"",
-"Cannot add addressbook with an empty name." => "Δε μποÏεί να Ï€Ïοστεθεί βιβλίο διευθÏνσεων με κενό όνομα",
-"Error adding addressbook." => "Σφάλμα Ï€Ïοσθήκης βιβλίου διευθÏνσεων.",
-"Error activating addressbook." => "Σφάλμα ενεÏγοποίησης βιβλίου διευθÏνσεων",
+"checksum is not set." => "δε οÏίστηκε checksum ",
+"Information about vCard is incorrect. Please reload the page: " => "Οι πληÏοφοÏίες για τη vCard είναι λανθασμένες.ΠαÏακαλώ ξαναφοÏτώστε τη σελίδα: ",
+"Something went FUBAR. " => "Κάτι χάθηκε στο άγνωστο. ",
"No contact ID was submitted." => "Δε υπεβλήθει ID επαφής",
"Error reading contact photo." => "Σφάλμα ανάγνωσης εικόνας επαφής",
"Error saving temporary file." => "Σφάλμα αποθήκευσης Ï€ÏοσωÏÎ¹Î½Î¿Ï Î±Ïχείου",
"The loading photo is not valid." => "Η φοÏτωμένη φωτογÏαφία δεν είναι έγκυÏη",
-"id is not set." => "δεν οÏίστηκε id",
-"Information about vCard is incorrect. Please reload the page." => "Οι πληÏοφοÏίες σχετικά με vCard είναι εσφαλμένες. ΠαÏακαλώ επαναφοÏτώστε τη σελίδα.",
-"Error deleting contact property." => "Σφάλμα διαγÏαφής ιδιότητας επαφής.",
"Contact ID is missing." => "Λείπει ID επαφής",
-"Missing contact id." => "Απουσιαζει ID επαφής",
"No photo path was submitted." => "Δε δόθηκε διαδÏομή εικόνας",
"File doesn't exist:" => "Το αÏχείο δεν υπάÏχει:",
"Error loading image." => "Σφάλμα φόÏτωσης εικόνας",
-"element name is not set." => "δεν οÏίστηκε όνομα στοιχείου",
-"checksum is not set." => "δε οÏίστηκε checksum ",
-"Information about vCard is incorrect. Please reload the page: " => "Οι πληÏοφοÏίες για τη vCard είναι λανθασμένες.ΠαÏακαλώ ξαναφοÏτώστε τη σελίδα:",
-"Something went FUBAR. " => "Κάτι χάθηκε στο άγνωστο",
-"Error updating contact property." => "Σφάλμα ενημέÏωσης ιδιότητας επαφής.",
-"Cannot update addressbook with an empty name." => "Δε μποÏεί να γίνει αλλαγή βιβλίου διευθÏνσεων χωÏίς όνομα",
-"Error updating addressbook." => "Σφάλμα ενημέÏωσης βιβλίου διευθÏνσεων.",
+"Error getting contact object." => "Σφάλμα κατά τη λήψη αντικειμένου επαφής",
+"Error getting PHOTO property." => "Σφάλμα κατά τη λήψη ιδιοτήτων ΦΩΤΟΓΡΑΦΙΑΣ.",
+"Error saving contact." => "Σφάλμα κατά την αποθήκευση επαφής.",
+"Error resizing image" => "Σφάλμα κατά την αλλαγή μεγέθους εικόνας",
+"Error cropping image" => "Σφάλμα κατά την πεÏικοπή εικόνας",
+"Error creating temporary image" => "Σφάλμα κατά την δημιουÏγία Ï€ÏοσωÏινής εικόνας",
+"Error finding image: " => "Σφάλμα κατά την εÏÏεση της εικόνας: ",
"Error uploading contacts to storage." => "Σφάλμα κατά την αποθήκευση επαφών",
"There is no error, the file uploaded with success" => "Δεν υπάÏχει σφάλμα, το αÏχείο ανέβηκε με επιτυχία ",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Το μέγεθος του αÏχείου ξεπεÏνάει το upload_max_filesize του php.ini",
@@ -41,44 +44,100 @@
"The uploaded file was only partially uploaded" => "Το αÏχείο ανέβηκε μεÏικώς",
"No file was uploaded" => "Δεν ανέβηκε κάποιο αÏχείο",
"Missing a temporary folder" => "Λείπει ο Ï€ÏοσωÏινός φάκελος",
+"Couldn't save temporary image: " => "Δεν ήταν δυνατή η αποθήκευση της Ï€ÏοσωÏινής εικόνας: ",
+"Couldn't load temporary image: " => "Δεν ήταν δυνατή η φόÏτωση της Ï€ÏοσωÏινής εικόνας: ",
+"No file was uploaded. Unknown error" => "Δεν ανέβηκε κάποιο αÏχείο. Άγνωστο σφάλμα",
"Contacts" => "Επαφές",
-"Drop a VCF file to import contacts." => "Εισάγεται ένα VCF αÏχείο για εισαγωγή επαφών",
-"Addressbook not found." => "Δε βÏέθηκε βιβλίο διευθÏνσεων",
+"Sorry, this functionality has not been implemented yet" => "ΛυποÏμαστε, αυτή η λειτουÏγία δεν έχει υλοποιηθεί ακόμα",
+"Not implemented" => "Δεν έχει υλοποιηθεί",
+"Couldn't get a valid address." => "Αδυναμία λήψης έγκυÏης διεÏθυνσης",
+"Error" => "Σφάλμα",
+"This property has to be non-empty." => "Το πεδίο δεν Ï€Ïέπει να είναι άδειο.",
+"Couldn't serialize elements." => "ΑδÏνατο να μπουν σε σειÏά τα στοιχεία",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "το 'deleteProperty' καλέστηκε χωÏίς without type argument. ΠαÏακαλώ αναφέÏατε στο bugs.owncloud.org",
+"Edit name" => "Αλλαγή ονόματος",
+"No files selected for upload." => "Δεν επιλέχτηκαν αÏχεία για μεταφόÏτωση",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Το αÏχείο που Ï€Ïοσπαθείτε να ανεβάσετε υπεÏβαίνει το μέγιστο μέγεθος για τις Ï€Ïοσθήκες αÏχείων σε αυτόν τον server.",
+"Error loading profile picture." => "Σφάλμα στην φόÏτωση εικόνας Ï€Ïοφίλ.",
+"Select type" => "Επιλογή Ï„Ïπου",
+"Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted." => "Κάποιες επαφές σημειώθηκαν Ï€Ïος διαγÏαφή,δεν έχουν διαγÏαφεί ακόμα. ΠαÏακαλώ πεÏιμένετε μέχÏι να διαγÏαφοÏν.",
+"Do you want to merge these address books?" => "Επιθυμείτε να συγχωνεÏσετε αυτά τα δÏο βιβλία διευθÏνσεων?",
+"Result: " => "Αποτέλεσμα: ",
+" imported, " => " εισάγεται,",
+" failed." => " απέτυχε.",
+"Displayname cannot be empty." => "Το όνομα Ï€Ïοβολής δεν μποÏεί να είναι κενό. ",
+"Addressbook not found: " => "Το βιβλίο διευθÏνσεων δεν βÏέθηκε:",
"This is not your addressbook." => "Αυτό δεν είναι το βιβλίο διευθÏνσεων σας.",
"Contact could not be found." => "Η επαφή δεν μπόÏεσε να βÏεθεί.",
-"Address" => "ΔιεÏθυνση",
-"Telephone" => "Τηλέφωνο",
-"Email" => "Email",
-"Organization" => "ΟÏγανισμός",
+"Jabber" => "Jabber",
+"AIM" => "AIM",
+"MSN" => "MSN",
+"Twitter" => "Twitter",
+"GoogleTalk" => "GoogleTalk",
+"Facebook" => "Facebook",
+"XMPP" => "XMPP",
+"ICQ" => "ICQ",
+"Yahoo" => "Yahoo",
+"Skype" => "Skype",
+"QQ" => "QQ",
+"GaduGadu" => "GaduGadu",
"Work" => "ΕÏγασία",
"Home" => "Σπίτι",
+"Other" => "Άλλο",
"Mobile" => "Κινητό",
"Text" => "Κείμενο",
"Voice" => "Ομιλία",
-"Message" => "Μήνυμα ",
+"Message" => "Μήνυμα",
"Fax" => "Φαξ",
"Video" => "Βίντεο",
"Pager" => "Βομβητής",
"Internet" => "Διαδίκτυο",
+"Birthday" => "Γενέθλια",
+"Business" => "ΕπιχείÏηση",
+"Call" => "Κάλεσε",
+"Clients" => "Πελάτες",
+"Deliverer" => "ΠÏομηθευτής",
+"Holidays" => "Διακοπές",
+"Ideas" => "Ιδέες",
+"Journey" => "Ταξίδι",
+"Jubilee" => "Ιωβηλαίο",
+"Meeting" => "Συνάντηση",
+"Personal" => "ΠÏοσωπικό",
+"Projects" => "ΈÏγα",
+"Questions" => "ΕÏωτήσεις",
"{name}'s Birthday" => "{name} έχει Γενέθλια",
"Contact" => "Επαφή",
"Add Contact" => "ΠÏοσθήκη επαφής",
+"Import" => "Εισαγωγή",
+"Settings" => "Ρυθμίσεις",
"Addressbooks" => "Βιβλία διευθÏνσεων",
-"Configure Address Books" => "Ρυθμίστε το βιβλίο διευθÏνσεων ",
-"New Address Book" => "Îέο βιβλίο διευθÏνσεων",
-"Import from VCF" => "Εισαγωγή από VCF αÏχείο",
-"CardDav Link" => "ΣÏνδεσμος CardDav",
-"Download" => "Λήψη",
-"Edit" => "ΕπεξεÏγασία",
-"Delete" => "ΔιαγÏαφή",
-"Download contact" => "Λήψη επαφής",
-"Delete contact" => "ΔιαγÏαφή επαφής",
+"Close" => "Κλείσιμο ",
+"Keyboard shortcuts" => "ΣυντομεÏσεις πλητÏολογίου",
+"Navigation" => "Πλοήγηση",
+"Next contact in list" => "Επόμενη επαφή στη λίστα",
+"Previous contact in list" => "ΠÏοηγοÏμενη επαφή στη λίστα",
+"Expand/collapse current addressbook" => "Ανάπτυξη/σÏμπτυξη Ï„Ïέχοντος βιβλίου διευθÏνσεων",
+"Next addressbook" => "Επόμενο βιβλίο διευθÏνσεων",
+"Previous addressbook" => "ΠÏοηγοÏμενο βιβλίο διευθÏνσεων",
+"Actions" => "ΕνέÏγειες",
+"Refresh contacts list" => "Ανανέωσε τη λίστα επαφών",
+"Add new contact" => "ΠÏοσθήκη νέας επαφής",
+"Add new addressbook" => "ΠÏοσθήκη νέου βιβλίου επαφών",
+"Delete current contact" => "ΔιαγÏαφή Ï„Ïέχουσας επαφής",
"Drop photo to upload" => "Ρίξε μια φωτογÏαφία για ανέβασμα",
+"Delete current photo" => "ΔιαγÏαφή Ï„Ïέχουσας φωτογÏαφίας",
+"Edit current photo" => "ΕπεξεÏγασία Ï„Ïέχουσας φωτογÏαφίας",
+"Upload new photo" => "Ανέβασε νέα φωτογÏαφία",
+"Select photo from ownCloud" => "Επέλεξε φωτογÏαφία από το ownCloud",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Format custom, Όνομα, Επώνυμο, ΑντίστÏοφο ή ΑντίστÏοφο με κόμμα",
"Edit name details" => "Αλλάξτε τις λεπτομέÏειες ονόματος",
+"Organization" => "ΟÏγανισμός",
+"Delete" => "ΔιαγÏαφή",
"Nickname" => "ΠαÏατσοÏκλι",
-"Enter nickname" => "Εισάγεται παÏατσοÏκλι",
-"Birthday" => "Γενέθλια",
+"Enter nickname" => "Εισάγετε παÏατσοÏκλι",
+"Web site" => "Ιστότοπος",
+"http://www.somesite.com" => "http://www.somesite.com",
+"Go to web site" => "Πήγαινε στον ιστότοπο",
"dd-mm-yyyy" => "ΗΗ-ΜΜ-ΕΕΕΕ",
"Groups" => "Ομάδες",
"Separate groups with commas" => "ΔιαχώÏισε τις ομάδες με κόμμα ",
@@ -90,28 +149,33 @@
"Delete email address" => "ΔιαγÏαφή διεÏθυνση email",
"Enter phone number" => "Εισήγαγε αÏιθμό τηλεφώνου",
"Delete phone number" => "ΔιέγÏαψε αÏιθμό τηλεφώνου",
+"Instant Messenger" => "Instant Messenger",
+"Delete IM" => "ΔιαγÏαφή IM",
"View on map" => "ΠÏοβολή στο χάÏτη",
"Edit address details" => "ΕπεξεÏγασία λεπτομεÏειών διεÏθυνσης",
"Add notes here." => "ΠÏόσθεσε τις σημειώσεις εδώ",
"Add field" => "ΠÏοσθήκη πεδίου",
-"Profile picture" => "ΦωτογÏαφία Ï€Ïοφίλ",
"Phone" => "Τηλέφωνο",
+"Email" => "Email",
+"Instant Messaging" => "Άμεσα μυνήματα",
+"Address" => "ΔιεÏθυνση",
"Note" => "Σημείωση",
-"Delete current photo" => "ΔιαγÏαφή Ï„Ïέχουσας φωτογÏαφίας",
-"Edit current photo" => "ΕπεξεÏγασία Ï„Ïέχουσας φωτογÏαφίας",
-"Upload new photo" => "Ανέβασε νέα φωτογÏαφία",
-"Select photo from ownCloud" => "Επέλεξε φωτογÏαφία από το ownCloud",
+"Download contact" => "Λήψη επαφής",
+"Delete contact" => "ΔιαγÏαφή επαφής",
+"The temporary image has been removed from cache." => "Η Ï€ÏοσωÏινή εικόνα αφαιÏέθηκε από την κÏυφή μνήμη.",
"Edit address" => "ΕπεξεÏγασία διεÏθυνσης",
"Type" => "ΤÏπος",
"PO Box" => "Ταχ. ΘυÏίδα",
+"Street address" => "ΔιεÏθυνση οδοÏ",
+"Street and number" => "Οδός και αÏιθμός",
"Extended" => "Εκτεταμένη",
-"Street" => "Οδός",
+"Apartment number etc." => "ΑÏιθμός διαμεÏίσματος",
"City" => "Πόλη",
"Region" => "ΠεÏιοχή",
+"E.g. state or province" => "Π.χ. Πολιτεία ή επαÏχεία",
"Zipcode" => "Τ.Κ.",
+"Postal code" => "ΤαχυδÏομικός Κωδικός",
"Country" => "ΧώÏα",
-"Edit categories" => "ΕπεξεÏγασία κατηγοÏίας",
-"Add" => "ΠÏοσθήκη",
"Addressbook" => "Βιβλίο διευθÏνσεων",
"Hon. prefixes" => "Ï€Ïοθέματα",
"Miss" => "Δις",
@@ -132,26 +196,35 @@
"Esq." => "Esq.",
"Jr." => "Jr.",
"Sn." => "Sn.",
-"New Addressbook" => "Îέο βιβλίο διευθÏνσεων",
-"Edit Addressbook" => "ΕπεξεÏγασία βιβλίου διευθÏνσεων",
-"Displayname" => "ΠÏοβαλόμενο όνομα",
-"Active" => "ΕνεÏγό",
-"Save" => "Αποθήκευση",
-"Submit" => "ΚαταχώÏηση",
-"Cancel" => "ΑκÏÏωση",
"Import a contacts file" => "Εισαγωγή αÏχείου επαφών",
"Please choose the addressbook" => "ΠαÏακαλώ επέλεξε βιβλίο διευθÏνσεων",
"create a new addressbook" => "ΔημιουÏγία νέου βιβλίου διευθÏνσεων",
"Name of new addressbook" => "Όνομα νέου βιβλίου διευθÏνσεων",
-"Import" => "Εισαγωγή",
"Importing contacts" => "Εισαγωγή επαφών",
+"Contacts imported successfully" => "Οι επαφές εισήχθησαν επιτυχώς",
+"Close Dialog" => "Κλείσιμο διαλόγου",
+"Import Addressbook" => "Εισαγωγή βιβλίου διευθÏνσεων",
"Select address book to import to:" => "Επέλεξε σε ποιο βιβλίο διευθÏνσεων για εισαγωγή:",
+"Drop a VCF file to import contacts." => "Εισάγεται ένα VCF αÏχείο για εισαγωγή επαφών",
"Select from HD" => "Επιλογή από HD",
"You have no contacts in your addressbook." => "Δεν έχεις επαφές στο βιβλίο διευθÏνσεων",
"Add contact" => "ΠÏοσθήκη επαφής",
-"Configure addressbooks" => "ΡÏθμισε το βιβλίο διευθÏνσεων",
+"Select Address Books" => "Επέλεξε βιβλίο διευθÏνσεων",
+"Enter name" => "Εισαγωγή ονόματος",
+"Enter description" => "Εισαγωγή πεÏιγÏαφής",
"CardDAV syncing addresses" => "συγχÏονισμός διευθÏνσεων μέσω CardDAV ",
"more info" => "πεÏισσότεÏες πληÏοφοÏίες",
"Primary address (Kontact et al)" => "ΚÏÏια διεÏθυνση",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Show CardDav link" => "Εμφάνιση συνδέσμου CardDav",
+"Show read-only VCF link" => "Εμφάνιση συνδέσμου VCF μόνο για ανάγνωση",
+"Share" => "ΜοιÏάσου",
+"Download" => "Λήψη",
+"Edit" => "ΕπεξεÏγασία",
+"New Address Book" => "Îέο βιβλίο διευθÏνσεων",
+"Name" => "Όνομα",
+"Description" => "ΠεÏιγÏαφή",
+"Save" => "Αποθήκευση",
+"Cancel" => "ΑκÏÏωση",
+"More..." => "ΠεÏισσότεÏα..."
);
diff --git a/apps/contacts/l10n/eo.php b/apps/contacts/l10n/eo.php
index ffc885a41a5..e4eb06db2aa 100644
--- a/apps/contacts/l10n/eo.php
+++ b/apps/contacts/l10n/eo.php
@@ -1,54 +1,70 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Eraro dum (mal)aktivigo de adresaro.",
-"There was an error adding the contact." => "Eraro okazis dum aldono de kontakto.",
-"Cannot add empty property." => "Ne eblas aldoni malplenan propraĵon.",
-"At least one of the address fields has to be filled out." => "AlmenaÅ­ unu el la adreskampoj necesas pleniÄi.",
-"Trying to add duplicate property: " => "Provante aldoni duobligitan propraĵon:",
-"Error adding contact property." => "Eraro dum aldono de kontaktopropraĵo.",
+"id is not set." => "identigilo ne agordiÄis.",
+"Cannot update addressbook with an empty name." => "Ne eblas Äisdatigi adresaron kun malplena nomo.",
+"Error updating addressbook." => "Eraro dum Äisdatigo de adresaro.",
"No ID provided" => "Neniu identigilo proviziÄis.",
"Error setting checksum." => "Eraro dum agordado de kontrolsumo.",
"No categories selected for deletion." => "Neniu kategorio elektiÄis por forigi.",
"No address books found." => "Neniu adresaro troviÄis.",
"No contacts found." => "Neniu kontakto troviÄis.",
+"There was an error adding the contact." => "Eraro okazis dum aldono de kontakto.",
+"element name is not set." => "eronomo ne agordiÄis.",
+"Could not parse contact: " => "Ne eblis analizi kontakton:",
+"Cannot add empty property." => "Ne eblas aldoni malplenan propraĵon.",
+"At least one of the address fields has to be filled out." => "AlmenaÅ­ unu el la adreskampoj necesas pleniÄi.",
+"Trying to add duplicate property: " => "Provante aldoni duobligitan propraĵon:",
+"Information about vCard is incorrect. Please reload the page." => "Informo pri vCard estas malÄusta. Bonvolu reÅargi la paÄon.",
"Missing ID" => "Mankas identigilo",
"Error parsing VCard for ID: \"" => "Eraro dum analizo de VCard por identigilo:",
-"Cannot add addressbook with an empty name." => "Ne eblas aldoni adresaron kun malplena nomo.",
-"Error adding addressbook." => "Eraro dum aldono de adresaro.",
-"Error activating addressbook." => "Eraro dum aktivigo de adresaro.",
+"checksum is not set." => "kontrolsumo ne agordiÄis.",
+"Information about vCard is incorrect. Please reload the page: " => "Informo pri vCard malÄustas. Bonvolu reÅargi la paÄon:",
+"Something went FUBAR. " => "Io FUBAR-is.",
"No contact ID was submitted." => "Neniu kontaktidentigilo sendiÄis.",
"Error reading contact photo." => "Eraro dum lego de kontakta foto.",
"Error saving temporary file." => "Eraro dum konservado de provizora dosiero.",
"The loading photo is not valid." => "La alÅutata foto ne validas.",
-"id is not set." => "identigilo ne agordiÄis.",
-"Information about vCard is incorrect. Please reload the page." => "Informo pri vCard estas malÄusta. Bonvolu reÅargi la paÄon.",
-"Error deleting contact property." => "Eraro dum forigo de kontaktopropraĵo.",
"Contact ID is missing." => "Kontaktidentigilo mankas.",
-"Missing contact id." => "Mankas kontaktidentigilo.",
"No photo path was submitted." => "Neniu vojo al foto sendiÄis.",
"File doesn't exist:" => "Dosiero ne ekzistas:",
"Error loading image." => "Eraro dum Åargado de bildo.",
-"element name is not set." => "eronomo ne agordiÄis.",
-"checksum is not set." => "kontrolsumo ne agordiÄis.",
-"Information about vCard is incorrect. Please reload the page: " => "Informo pri vCard malÄustas. Bonvolu reÅargi la paÄon:",
-"Something went FUBAR. " => "Io FUBAR-is.",
-"Error updating contact property." => "Eraro dum Äisdatigo de kontaktopropraĵo.",
-"Cannot update addressbook with an empty name." => "Ne eblas Äisdatigi adresaron kun malplena nomo.",
-"Error updating addressbook." => "Eraro dum Äisdatigo de adresaro.",
+"Error getting contact object." => "Eraro dum ekhaviÄis kontakta objekto.",
+"Error getting PHOTO property." => "Eraro dum ekhaviÄis la propraĵon PHOTO.",
+"Error saving contact." => "Eraro dum konserviÄis kontakto.",
+"Error resizing image" => "Eraro dum aligrandiÄis bildo",
+"Error cropping image" => "Eraro dum stuciÄis bildo.",
+"Error creating temporary image" => "Eraro dum kreiÄis provizora bildo.",
+"Error finding image: " => "Eraro dum serĉo de bildo: ",
+"Error uploading contacts to storage." => "Eraro dum alÅutiÄis kontaktoj al konservejo.",
"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 alÅutita dosiero transpasas la preskribon upload_max_filesize en php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "La alÅutita dosiero transpasas la preskribon MAX_FILE_SIZE kiu specifiÄis en la HTML-formularo",
"The uploaded file was only partially uploaded" => "la alÅutita dosiero nur parte alÅutiÄis",
"No file was uploaded" => "Neniu dosiero alÅutiÄis.",
"Missing a temporary folder" => "Mankas provizora dosierujo.",
+"Couldn't save temporary image: " => "Ne eblis konservi provizoran bildon: ",
+"Couldn't load temporary image: " => "Ne eblis Åargi provizoran bildon: ",
+"No file was uploaded. Unknown error" => "Neniu dosiero alÅutiÄis. Nekonata eraro.",
"Contacts" => "Kontaktoj",
-"Drop a VCF file to import contacts." => "Demetu VCF-dosieron por enporti kontaktojn.",
-"Addressbook not found." => "Adresaro ne troviÄis.",
+"Sorry, this functionality has not been implemented yet" => "Pardonu, ĉi tiu funkcio ankoraŭ ne estas realigita.",
+"Not implemented" => "Ne disponebla",
+"Couldn't get a valid address." => "Ne eblis ekhavi validan adreson.",
+"Error" => "Eraro",
+"This property has to be non-empty." => "Ĉi tiu propraĵo devas ne esti malplena.",
+"Couldn't serialize elements." => "Ne eblis seriigi erojn.",
+"Edit name" => "Redakti nomon",
+"No files selected for upload." => "Neniu dosiero elektita por alÅuto.",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "La dosiero, kiun vi provas alÅuti, transpasas la maksimuman grandon por dosieraj alÅutoj en ĉi tiu servilo.",
+"Select type" => "Elektu tipon",
+"Result: " => "Rezulto: ",
+" imported, " => " enportoj, ",
+" failed." => "malsukcesoj.",
+"Addressbook not found: " => "Adresaro ne troviÄis:",
"This is not your addressbook." => "Ĉi tiu ne estas via adresaro.",
"Contact could not be found." => "Ne eblis trovi la kontakton.",
-"Address" => "Adreso",
-"Telephone" => "Telefono",
-"Email" => "RetpoÅtadreso",
-"Organization" => "Organizaĵo",
"Work" => "Laboro",
"Home" => "Hejmo",
+"Other" => "Alia",
"Mobile" => "PoÅtelefono",
"Text" => "Teksto",
"Voice" => "Voĉo",
@@ -57,25 +73,51 @@
"Video" => "Videaĵo",
"Pager" => "Televokilo",
"Internet" => "Interreto",
+"Birthday" => "NaskiÄotago",
+"Business" => "Negoco",
+"Call" => "Voko",
+"Clients" => "Klientoj",
+"Deliverer" => "Liveranto",
+"Holidays" => "Ferioj",
+"Ideas" => "Ideoj",
+"Journey" => "VojaÄo",
+"Jubilee" => "Jubileo",
+"Meeting" => "Kunveno",
+"Personal" => "Persona",
+"Projects" => "Projektoj",
+"Questions" => "Demandoj",
"{name}'s Birthday" => "NaskiÄtago de {name}",
"Contact" => "Kontakto",
"Add Contact" => "Aldoni kontakton",
+"Import" => "Enporti",
+"Settings" => "Agordo",
"Addressbooks" => "Adresaroj",
-"Configure Address Books" => "Agordi adresarojn",
-"New Address Book" => "Nova adresaro",
-"Import from VCF" => "Enporti el VCF",
-"CardDav Link" => "CardDav-ligilo",
-"Download" => "ElÅuti",
-"Edit" => "Redakti",
-"Delete" => "Forigi",
-"Download contact" => "ElÅuti kontakton",
-"Delete contact" => "Forigi kontakton",
+"Close" => "Fermi",
+"Keyboard shortcuts" => "Fulmoklavoj",
+"Navigation" => "Navigado",
+"Next contact in list" => "Jena kontakto en la listo",
+"Previous contact in list" => "Maljena kontakto en la listo",
+"Next addressbook" => "Jena adresaro",
+"Previous addressbook" => "Maljena adresaro",
+"Actions" => "Agoj",
+"Refresh contacts list" => "RefreÅigi la kontaktoliston",
+"Add new contact" => "Aldoni novan kontakton",
+"Add new addressbook" => "Aldoni novan adresaron",
+"Delete current contact" => "Forigi la nunan kontakton",
"Drop photo to upload" => "Demeti foton por alÅuti",
+"Delete current photo" => "Forigi nunan foton",
+"Edit current photo" => "Redakti nunan foton",
+"Upload new photo" => "AlÅuti novan foton",
+"Select photo from ownCloud" => "Elekti foton el ownCloud",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Propra formo, Mallonga nomo, Longa nomo, Inversa aÅ­ Inversa kun komo",
"Edit name details" => "Redakti detalojn de nomo",
+"Organization" => "Organizaĵo",
+"Delete" => "Forigi",
"Nickname" => "Kromnomo",
"Enter nickname" => "Enigu kromnomon",
-"Birthday" => "NaskiÄotago",
+"Web site" => "TTT-ejo",
+"http://www.somesite.com" => "http://www.iuejo.com",
+"Go to web site" => "Iri al TTT-ejon",
"dd-mm-yyyy" => "yyyy-mm-dd",
"Groups" => "Grupoj",
"Separate groups with commas" => "Disigi grupojn per komoj",
@@ -91,24 +133,24 @@
"Edit address details" => "Redakti detalojn de adreso",
"Add notes here." => "Aldoni notojn ĉi tie.",
"Add field" => "Aldoni kampon",
-"Profile picture" => "Profila bildo",
"Phone" => "Telefono",
+"Email" => "RetpoÅtadreso",
+"Address" => "Adreso",
"Note" => "Noto",
-"Delete current photo" => "Forigi nunan foton",
-"Edit current photo" => "Redakti nunan foton",
-"Upload new photo" => "AlÅuti novan foton",
-"Select photo from ownCloud" => "Elekti foton el ownCloud",
+"Download contact" => "ElÅuti kontakton",
+"Delete contact" => "Forigi kontakton",
+"The temporary image has been removed from cache." => "La provizora bildo estas forigita de la kaÅmemoro.",
"Edit address" => "Redakti adreson",
"Type" => "Tipo",
"PO Box" => "Abonkesto",
+"Street address" => "Stratadreso",
+"Street and number" => "Strato kaj numero",
"Extended" => "Etendita",
-"Street" => "Strato",
"City" => "Urbo",
"Region" => "Regiono",
"Zipcode" => "PoÅtokodo",
+"Postal code" => "PoÅtkodo",
"Country" => "Lando",
-"Edit categories" => "Redakti kategoriojn",
-"Add" => "Aldoni",
"Addressbook" => "Adresaro",
"Hon. prefixes" => "Honoraj antaŭmetaĵoj",
"Miss" => "f-ino",
@@ -121,26 +163,28 @@
"Additional names" => "Pliaj nomoj",
"Family name" => "Familia nomo",
"Hon. suffixes" => "Honoraj postmetaĵoj",
-"New Addressbook" => "Nova adresaro",
-"Edit Addressbook" => "Redakti adresaron",
-"Displayname" => "Montronomo",
-"Active" => "Aktiva",
-"Save" => "Konservi",
-"Submit" => "Sendi",
-"Cancel" => "Nuligi",
"Import a contacts file" => "Enporti kontaktodosieron",
"Please choose the addressbook" => "Bonvolu elekti adresaron",
"create a new addressbook" => "krei novan adresaron",
"Name of new addressbook" => "Nomo de nova adresaro",
-"Import" => "Enporti",
"Importing contacts" => "Enportante kontaktojn",
-"Select address book to import to:" => "Elektu adresaron kien enporti:",
-"Select from HD" => "Elekti el malmoldisko",
"You have no contacts in your addressbook." => "Vi ne havas kontaktojn en via adresaro",
"Add contact" => "Aldoni kontakton",
-"Configure addressbooks" => "Agordi adresarojn",
+"Select Address Books" => "Elektu adresarojn",
+"Enter name" => "Enigu nomon",
+"Enter description" => "Enigu priskribon",
"CardDAV syncing addresses" => "adresoj por CardDAV-sinkronigo",
"more info" => "pli da informo",
"Primary address (Kontact et al)" => "Ĉefa adreso (por Kontakt kaj aliaj)",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Show CardDav link" => "Montri CardDav-ligilon",
+"Show read-only VCF link" => "Montri nur legeblan VCF-ligilon",
+"Download" => "ElÅuti",
+"Edit" => "Redakti",
+"New Address Book" => "Nova adresaro",
+"Name" => "Nomo",
+"Description" => "Priskribo",
+"Save" => "Konservi",
+"Cancel" => "Nuligi",
+"More..." => "Pli..."
);
diff --git a/apps/contacts/l10n/es.php b/apps/contacts/l10n/es.php
index 2bdb300aa8f..c80c2987e10 100644
--- a/apps/contacts/l10n/es.php
+++ b/apps/contacts/l10n/es.php
@@ -1,39 +1,41 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Error al (des)activar libreta de direcciones.",
-"There was an error adding the contact." => "Se ha producido un error al añadir el contacto.",
-"Cannot add empty property." => "No se puede añadir una propiedad vacía.",
-"At least one of the address fields has to be filled out." => "Al menos uno de los campos de direcciones se tiene que rellenar.",
-"Trying to add duplicate property: " => "Intentando añadir una propiedad duplicada: ",
-"Error adding contact property." => "Error al añadir una propiedad del contacto.",
+"id is not set." => "no se ha puesto ninguna ID.",
+"Cannot update addressbook with an empty name." => "No se puede actualizar una libreta de direcciones sin nombre.",
+"Error updating addressbook." => "Error al actualizar la libreta de direcciones.",
"No ID provided" => "No se ha proporcionado una ID",
"Error setting checksum." => "Error al establecer la suma de verificación.",
"No categories selected for deletion." => "No se seleccionaron categorías para borrar.",
"No address books found." => "No se encontraron libretas de direcciones.",
"No contacts found." => "No se encontraron contactos.",
+"There was an error adding the contact." => "Se ha producido un error al añadir el contacto.",
+"element name is not set." => "no se ha puesto ningún nombre de elemento.",
+"Cannot add empty property." => "No se puede añadir una propiedad vacía.",
+"At least one of the address fields has to be filled out." => "Al menos uno de los campos de direcciones se tiene que rellenar.",
+"Trying to add duplicate property: " => "Intentando añadir una propiedad duplicada: ",
+"Missing IM parameter." => "Falta un parámetro del MI.",
+"Unknown IM: " => "MI desconocido:",
+"Information about vCard is incorrect. Please reload the page." => "La información sobre el vCard es incorrecta. Por favor vuelve a cargar la página.",
"Missing ID" => "Falta la ID",
"Error parsing VCard for ID: \"" => "Error al analizar el VCard para la ID: \"",
-"Cannot add addressbook with an empty name." => "No se puede añadir una libreta de direcciones sin nombre",
-"Error adding addressbook." => "Error al añadir la libreta de direcciones.",
-"Error activating addressbook." => "Error al activar la libreta de direcciones.",
+"checksum is not set." => "no se ha puesto ninguna suma de comprobación.",
+"Information about vCard is incorrect. Please reload the page: " => "La información sobre la vCard es incorrecta. Por favor, recarga la página:",
+"Something went FUBAR. " => "Plof. Algo ha fallado.",
"No contact ID was submitted." => "No se ha mandado ninguna ID de contacto.",
"Error reading contact photo." => "Error leyendo fotografía del contacto.",
"Error saving temporary file." => "Error al guardar archivo temporal.",
"The loading photo is not valid." => "La foto que se estaba cargando no es válida.",
-"id is not set." => "no se ha puesto ninguna ID.",
-"Information about vCard is incorrect. Please reload the page." => "La información sobre el vCard es incorrecta. Por favor vuelve a cargar la página.",
-"Error deleting contact property." => "Error al borrar una propiedad del contacto.",
"Contact ID is missing." => "Falta la ID del contacto.",
-"Missing contact id." => "Falta la id del contacto.",
"No photo path was submitted." => "No se ha introducido la ruta de la foto.",
"File doesn't exist:" => "Archivo inexistente:",
"Error loading image." => "Error cargando imagen.",
-"element name is not set." => "no se ha puesto ningún nombre de elemento.",
-"checksum is not set." => "no se ha puesto ninguna suma de comprobación.",
-"Information about vCard is incorrect. Please reload the page: " => "La información sobre la vCard es incorrecta. Por favor, recarga la página:",
-"Something went FUBAR. " => "Plof. Algo ha fallado.",
-"Error updating contact property." => "Error al actualizar una propiedad del contacto.",
-"Cannot update addressbook with an empty name." => "No se puede actualizar una libreta de direcciones sin nombre.",
-"Error updating addressbook." => "Error al actualizar la libreta de direcciones.",
+"Error getting contact object." => "Fallo al coger el contacto.",
+"Error getting PHOTO property." => "Fallo al coger las propiedades de la foto .",
+"Error saving contact." => "Fallo al salvar un contacto",
+"Error resizing image" => "Fallo al cambiar de tamaño una foto",
+"Error cropping image" => "Fallo al cortar el tamaño de la foto",
+"Error creating temporary image" => "Fallo al crear la foto temporal",
+"Error finding image: " => "Fallo al encontrar la imagen",
"Error uploading contacts to storage." => "Error al subir contactos al almacenamiento.",
"There is no error, the file uploaded with success" => "No hay ningún error, el archivo se ha subido con éxito",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "El archivo subido sobrepasa la directiva upload_max_filesize de php.ini",
@@ -41,17 +43,41 @@
"The uploaded file was only partially uploaded" => "El archivo se ha subido parcialmente",
"No file was uploaded" => "No se ha subido ningún archivo",
"Missing a temporary folder" => "Falta la carpeta temporal",
+"Couldn't save temporary image: " => "Fallo no pudo salvar a una imagen temporal",
+"Couldn't load temporary image: " => "Fallo no pudo cargara de una imagen temporal",
+"No file was uploaded. Unknown error" => "Fallo no se subió el fichero",
"Contacts" => "Contactos",
-"Drop a VCF file to import contacts." => "Suelta un archivo VCF para importar contactos.",
-"Addressbook not found." => "Libreta de direcciones no encontrada.",
+"Sorry, this functionality has not been implemented yet" => "Perdón esta función no esta aún implementada",
+"Not implemented" => "No esta implementada",
+"Couldn't get a valid address." => "Fallo : no hay dirección valida",
+"Error" => "Fallo",
+"This property has to be non-empty." => "Este campo no puede estar vacío.",
+"Couldn't serialize elements." => "Fallo no podido ordenar los elementos",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "La propiedad de \"borrar\" se llamado sin argumentos envia fallos a\nbugs.owncloud.org",
+"Edit name" => "Edita el Nombre",
+"No files selected for upload." => "No hay ficheros seleccionados para subir",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "El fichero que quieres subir excede el tamaño máximo permitido en este servidor.",
+"Select type" => "Selecciona el tipo",
+"Result: " => "Resultado :",
+" imported, " => "Importado.",
+" failed." => "Fallo.",
"This is not your addressbook." => "Esta no es tu agenda de contactos.",
"Contact could not be found." => "No se ha podido encontrar el contacto.",
-"Address" => "Dirección",
-"Telephone" => "Teléfono",
-"Email" => "Correo electrónico",
-"Organization" => "Organización",
+"Jabber" => "Jabber",
+"AIM" => "AIM",
+"MSN" => "MSN",
+"Twitter" => "Twitter",
+"GoogleTalk" => "Google Talk",
+"Facebook" => "Facebook",
+"XMPP" => "XMPP",
+"ICQ" => "ICQ",
+"Yahoo" => "Yahoo",
+"Skype" => "Skype",
+"QQ" => "QQ",
+"GaduGadu" => "GaduGadu",
"Work" => "Trabajo",
"Home" => "Particular",
+"Other" => "Otro",
"Mobile" => "Móvil",
"Text" => "Texto",
"Voice" => "Voz",
@@ -60,25 +86,47 @@
"Video" => "Vídeo",
"Pager" => "Localizador",
"Internet" => "Internet",
+"Birthday" => "Cumpleaños",
+"Business" => "Negocio",
+"Call" => "Llamada",
+"Clients" => "Clientes",
+"Holidays" => "Vacaciones",
+"Ideas" => "Ideas",
+"Journey" => "Jornada",
+"Meeting" => "Reunión",
+"Personal" => "Personal",
+"Projects" => "Proyectos",
+"Questions" => "Preguntas",
"{name}'s Birthday" => "Cumpleaños de {name}",
"Contact" => "Contacto",
"Add Contact" => "Añadir contacto",
+"Import" => "Importar",
+"Settings" => "Configuración",
"Addressbooks" => "Libretas de direcciones",
-"Configure Address Books" => "Configurar libretas de direcciones",
-"New Address Book" => "Nueva libreta de direcciones",
-"Import from VCF" => "Importar desde VCF",
-"CardDav Link" => "Enlace CardDav",
-"Download" => "Descargar",
-"Edit" => "Editar",
-"Delete" => "Borrar",
-"Download contact" => "Descargar contacto",
-"Delete contact" => "Eliminar contacto",
+"Close" => "Cierra.",
+"Keyboard shortcuts" => "Atajos de teclado",
+"Navigation" => "Navegación",
+"Next contact in list" => "Siguiente contacto en la lista",
+"Previous contact in list" => "Anterior contacto en la lista",
+"Actions" => "Acciones",
+"Refresh contacts list" => "Refrescar la lista de contactos",
+"Add new contact" => "Añadir un nuevo contacto",
+"Add new addressbook" => "Añadir nueva libreta de direcciones",
+"Delete current contact" => "Eliminar contacto actual",
"Drop photo to upload" => "Suelta una foto para subirla",
+"Delete current photo" => "Eliminar fotografía actual",
+"Edit current photo" => "Editar fotografía actual",
+"Upload new photo" => "Subir nueva fotografía",
+"Select photo from ownCloud" => "Seleccionar fotografía desde ownCloud",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Formato personalizado, nombre abreviado, nombre completo, al revés o al revés con coma",
"Edit name details" => "Editar los detalles del nombre",
+"Organization" => "Organización",
+"Delete" => "Borrar",
"Nickname" => "Alias",
"Enter nickname" => "Introduce un alias",
-"Birthday" => "Cumpleaños",
+"Web site" => "Sitio Web",
+"http://www.somesite.com" => "http://www.unsitio.com",
+"Go to web site" => "Ir al sitio Web",
"dd-mm-yyyy" => "dd-mm-yyyy",
"Groups" => "Grupos",
"Separate groups with commas" => "Separa los grupos con comas",
@@ -90,28 +138,31 @@
"Delete email address" => "Eliminar dirección de correo electrónico",
"Enter phone number" => "Introduce un número de teléfono",
"Delete phone number" => "Eliminar número de teléfono",
+"Instant Messenger" => "Mensajero instantáneo",
"View on map" => "Ver en el mapa",
"Edit address details" => "Editar detalles de la dirección",
"Add notes here." => "Añade notas aquí.",
"Add field" => "Añadir campo",
-"Profile picture" => "Foto del perfil",
"Phone" => "Teléfono",
+"Email" => "Correo electrónico",
+"Instant Messaging" => "Mensajería instantánea",
+"Address" => "Dirección",
"Note" => "Nota",
-"Delete current photo" => "Eliminar fotografía actual",
-"Edit current photo" => "Editar fotografía actual",
-"Upload new photo" => "Subir nueva fotografía",
-"Select photo from ownCloud" => "Seleccionar fotografía desde ownCloud",
+"Download contact" => "Descargar contacto",
+"Delete contact" => "Eliminar contacto",
+"The temporary image has been removed from cache." => "La foto temporal se ha borrado del cache.",
"Edit address" => "Editar dirección",
"Type" => "Tipo",
"PO Box" => "Código postal",
+"Street and number" => "Calle y número",
"Extended" => "Extendido",
-"Street" => "Calle",
+"Apartment number etc." => "Número del apartamento, etc.",
"City" => "Ciudad",
"Region" => "Región",
+"E.g. state or province" => "Ej: región o provincia",
"Zipcode" => "Código postal",
+"Postal code" => "Código postal",
"Country" => "País",
-"Edit categories" => "Editar categorías",
-"Add" => "Añadir",
"Addressbook" => "Libreta de direcciones",
"Hon. prefixes" => "Prefijos honoríficos",
"Miss" => "Srta",
@@ -132,26 +183,32 @@
"Esq." => "Don",
"Jr." => "Jr.",
"Sn." => "Sn.",
-"New Addressbook" => "Nueva libreta de direcciones",
-"Edit Addressbook" => "Editar libreta de direcciones",
-"Displayname" => "Nombre a mostrar",
-"Active" => "Activo",
-"Save" => "Guardar",
-"Submit" => "Aceptar",
-"Cancel" => "Cancelar",
"Import a contacts file" => "Importar archivo de contactos",
"Please choose the addressbook" => "Por favor escoge la agenda",
"create a new addressbook" => "crear una nueva agenda",
"Name of new addressbook" => "Nombre de la nueva agenda",
-"Import" => "Importar",
"Importing contacts" => "Importando contactos",
+"Contacts imported successfully" => "Contactos importados correctamente",
+"Close Dialog" => "Cerrar Diálogo",
+"Import Addressbook" => "Importar agenda",
"Select address book to import to:" => "Selecciona una agenda para importar a:",
+"Drop a VCF file to import contacts." => "Suelta un archivo VCF para importar contactos.",
"Select from HD" => "Seleccionar del disco duro",
"You have no contacts in your addressbook." => "No hay contactos en tu agenda.",
"Add contact" => "Añadir contacto",
-"Configure addressbooks" => "Configurar agenda",
+"Enter name" => "Introducir nombre",
+"Enter description" => "Introducir descripción",
"CardDAV syncing addresses" => "Sincronizando direcciones",
"more info" => "más información",
"Primary address (Kontact et al)" => "Dirección primaria (Kontact et al)",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Share" => "Compartir",
+"Download" => "Descargar",
+"Edit" => "Editar",
+"New Address Book" => "Nueva libreta de direcciones",
+"Name" => "Nombre",
+"Description" => "Descripción",
+"Save" => "Guardar",
+"Cancel" => "Cancelar",
+"More..." => "Más..."
);
diff --git a/apps/contacts/l10n/et_EE.php b/apps/contacts/l10n/et_EE.php
index 39a287c9619..e15ea0c10bd 100644
--- a/apps/contacts/l10n/et_EE.php
+++ b/apps/contacts/l10n/et_EE.php
@@ -1,39 +1,39 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Viga aadressiraamatu (de)aktiveerimisel.",
-"There was an error adding the contact." => "Konktakti lisamisel tekkis viga.",
-"Cannot add empty property." => "Tühja omadust ei saa lisada.",
-"At least one of the address fields has to be filled out." => "Vähemalt üks aadressiväljadest peab olema täidetud.",
-"Trying to add duplicate property: " => "Proovitakse lisada topeltomadust: ",
-"Error adding contact property." => "Viga konktakti korralikul lisamisel.",
+"id is not set." => "ID on määramata.",
+"Cannot update addressbook with an empty name." => "Tühja nimega aadressiraamatut ei saa uuendada.",
+"Error updating addressbook." => "Viga aadressiraamatu uuendamisel.",
"No ID provided" => "ID-d pole sisestatud",
"Error setting checksum." => "Viga kontrollsumma määramisel.",
"No categories selected for deletion." => "Kustutamiseks pole valitud ühtegi kategooriat.",
"No address books found." => "Ei leitud ühtegi aadressiraamatut.",
"No contacts found." => "Ãœhtegi kontakti ei leitud.",
+"There was an error adding the contact." => "Konktakti lisamisel tekkis viga.",
+"element name is not set." => "elemendi nime pole määratud.",
+"Cannot add empty property." => "Tühja omadust ei saa lisada.",
+"At least one of the address fields has to be filled out." => "Vähemalt üks aadressiväljadest peab olema täidetud.",
+"Trying to add duplicate property: " => "Proovitakse lisada topeltomadust: ",
+"Information about vCard is incorrect. Please reload the page." => "Visiitkaardi info pole korrektne. Palun lae leht uuesti.",
"Missing ID" => "Puudub ID",
"Error parsing VCard for ID: \"" => "Viga VCard-ist ID parsimisel: \"",
-"Cannot add addressbook with an empty name." => "Tühja nimega aadressiraamatut ei saa lisada.",
-"Error adding addressbook." => "Viga aadressiraamatu lisamisel.",
-"Error activating addressbook." => "Viga aadressiraamatu aktiveerimisel.",
+"checksum is not set." => "kontrollsummat pole määratud.",
+"Information about vCard is incorrect. Please reload the page: " => "vCard info pole korrektne. Palun lae lehekülg uuesti: ",
+"Something went FUBAR. " => "Midagi läks tõsiselt metsa.",
"No contact ID was submitted." => "Kontakti ID-d pole sisestatud.",
"Error reading contact photo." => "Viga kontakti foto lugemisel.",
"Error saving temporary file." => "Viga ajutise faili salvestamisel.",
"The loading photo is not valid." => "Laetav pilt pole korrektne pildifail.",
-"id is not set." => "ID on määramata.",
-"Information about vCard is incorrect. Please reload the page." => "Visiitkaardi info pole korrektne. Palun lae leht uuesti.",
-"Error deleting contact property." => "Viga konktaki korralikul kustutamisel.",
"Contact ID is missing." => "Kontakti ID puudub.",
-"Missing contact id." => "Puuduv kontakti ID.",
"No photo path was submitted." => "Foto asukohta pole määratud.",
"File doesn't exist:" => "Faili pole olemas:",
"Error loading image." => "Viga pildi laadimisel.",
-"element name is not set." => "elemendi nime pole määratud.",
-"checksum is not set." => "kontrollsummat pole määratud.",
-"Information about vCard is incorrect. Please reload the page: " => "vCard info pole korrektne. Palun lae lehekülg uuesti: ",
-"Something went FUBAR. " => "Midagi läks tõsiselt metsa.",
-"Error updating contact property." => "Viga konktaki korralikul uuendamisel.",
-"Cannot update addressbook with an empty name." => "Tühja nimega aadressiraamatut ei saa uuendada.",
-"Error updating addressbook." => "Viga aadressiraamatu uuendamisel.",
+"Error getting contact object." => "Viga kontakti objekti hankimisel.",
+"Error getting PHOTO property." => "Viga PHOTO omaduse hankimisel.",
+"Error saving contact." => "Viga kontakti salvestamisel.",
+"Error resizing image" => "Viga pildi suuruse muutmisel",
+"Error cropping image" => "Viga pildi lõikamisel",
+"Error creating temporary image" => "Viga ajutise pildi loomisel",
+"Error finding image: " => "Viga pildi leidmisel: ",
"Error uploading contacts to storage." => "Viga kontaktide üleslaadimisel kettale.",
"There is no error, the file uploaded with success" => "Ühtegi tõrget polnud, fail on üles laetud",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Üleslaetud fail ületab php.ini failis määratud upload_max_filesize suuruse",
@@ -41,15 +41,23 @@
"The uploaded file was only partially uploaded" => "Fail laeti üles ainult osaliselt",
"No file was uploaded" => "Ühtegi faili ei laetud üles",
"Missing a temporary folder" => "Ajutiste failide kaust puudub",
+"Couldn't save temporary image: " => "Ajutise pildi salvestamine ebaõnnestus: ",
+"Couldn't load temporary image: " => "Ajutise pildi laadimine ebaõnnestus: ",
+"No file was uploaded. Unknown error" => "Ühtegi faili ei laetud üles. Tundmatu viga",
"Contacts" => "Kontaktid",
-"Drop a VCF file to import contacts." => "Lohista siia VCF-fail, millest kontakte importida.",
-"Addressbook not found." => "Aadressiraamatut ei leitud",
+"Sorry, this functionality has not been implemented yet" => "Vabandust, aga see funktsioon pole veel valmis",
+"Not implemented" => "Pole implementeeritud",
+"Couldn't get a valid address." => "Kehtiva aadressi hankimine ebaõnnestus",
+"Error" => "Viga",
+"This property has to be non-empty." => "See omadus ei tohi olla tühi.",
+"Edit name" => "Muuda nime",
+"No files selected for upload." => "Ãœleslaadimiseks pole faile valitud.",
+"Select type" => "Vali tüüp",
+"Result: " => "Tulemus: ",
+" imported, " => " imporditud, ",
+" failed." => " ebaõnnestus.",
"This is not your addressbook." => "See pole sinu aadressiraamat.",
"Contact could not be found." => "Kontakti ei leitud.",
-"Address" => "Aadress",
-"Telephone" => "Telefon",
-"Email" => "E-post",
-"Organization" => "Organisatsioon",
"Work" => "Töö",
"Home" => "Kodu",
"Mobile" => "Mobiil",
@@ -60,25 +68,24 @@
"Video" => "Video",
"Pager" => "Piipar",
"Internet" => "Internet",
+"Birthday" => "Sünnipäev",
"{name}'s Birthday" => "{name} sünnipäev",
"Contact" => "Kontakt",
"Add Contact" => "Lisa kontakt",
+"Import" => "Impordi",
"Addressbooks" => "Aadressiraamatud",
-"Configure Address Books" => "Seadista aadressiraamatut",
-"New Address Book" => "Uus aadressiraamat",
-"Import from VCF" => "Impordi VCF-ist",
-"CardDav Link" => "CardDav link",
-"Download" => "Lae alla",
-"Edit" => "Muuda",
-"Delete" => "Kustuta",
-"Download contact" => "Lae kontakt alla",
-"Delete contact" => "Kustuta kontakt",
+"Close" => "Sule",
"Drop photo to upload" => "Lohista üleslaetav foto siia",
+"Delete current photo" => "Kustuta praegune foto",
+"Edit current photo" => "Muuda praegust pilti",
+"Upload new photo" => "Lae üles uus foto",
+"Select photo from ownCloud" => "Vali foto ownCloudist",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Kohandatud vorming, Lühike nimi, Täielik nimi, vastupidine või vastupidine komadega",
"Edit name details" => "Muuda nime üksikasju",
+"Organization" => "Organisatsioon",
+"Delete" => "Kustuta",
"Nickname" => "Hüüdnimi",
"Enter nickname" => "Sisesta hüüdnimi",
-"Birthday" => "Sünnipäev",
"dd-mm-yyyy" => "dd.mm.yyyy",
"Groups" => "Grupid",
"Separate groups with commas" => "Eralda grupid komadega",
@@ -94,24 +101,21 @@
"Edit address details" => "Muuda aaressi infot",
"Add notes here." => "Lisa märkmed siia.",
"Add field" => "Lisa väli",
-"Profile picture" => "Profiili pilt",
"Phone" => "Telefon",
+"Email" => "E-post",
+"Address" => "Aadress",
"Note" => "Märkus",
-"Delete current photo" => "Kustuta praegune foto",
-"Edit current photo" => "Muuda praegust pilti",
-"Upload new photo" => "Lae üles uus foto",
-"Select photo from ownCloud" => "Vali foto ownCloudist",
+"Download contact" => "Lae kontakt alla",
+"Delete contact" => "Kustuta kontakt",
+"The temporary image has been removed from cache." => "Ajutine pilt on puhvrist eemaldatud.",
"Edit address" => "Muuda aadressi",
"Type" => "Tüüp",
"PO Box" => "Postkontori postkast",
"Extended" => "Laiendatud",
-"Street" => "Tänav",
"City" => "Linn",
"Region" => "Piirkond",
"Zipcode" => "Postiindeks",
"Country" => "Riik",
-"Edit categories" => "Muuda kategooriat",
-"Add" => "Lisa",
"Addressbook" => "Aadressiraamat",
"Hon. prefixes" => "Eesliited",
"Miss" => "Preili",
@@ -132,26 +136,26 @@
"Esq." => "Esq.",
"Jr." => "Jr.",
"Sn." => "Senior.",
-"New Addressbook" => "Uus aadressiraamat",
-"Edit Addressbook" => "Muuda aadressiraamatut",
-"Displayname" => "Näidatav nimi",
-"Active" => "Aktiivne",
-"Save" => "Salvesta",
-"Submit" => "Saada",
-"Cancel" => "Loobu",
"Import a contacts file" => "Impordi kontaktifail",
"Please choose the addressbook" => "Palun vali aadressiraamat",
"create a new addressbook" => "loo uus aadressiraamat",
"Name of new addressbook" => "Uue aadressiraamatu nimi",
-"Import" => "Impordi",
"Importing contacts" => "Kontaktide importimine",
+"Contacts imported successfully" => "Kontaktid on imporditud",
+"Close Dialog" => "Sulge dialoog",
+"Import Addressbook" => "Impordi aadressiraamat",
"Select address book to import to:" => "Vali aadressiraamat, millesse importida:",
+"Drop a VCF file to import contacts." => "Lohista siia VCF-fail, millest kontakte importida.",
"Select from HD" => "Vali kõvakettalt",
"You have no contacts in your addressbook." => "Sinu aadressiraamatus pole ühtegi kontakti.",
"Add contact" => "Lisa kontakt",
-"Configure addressbooks" => "Seadista aadressiraamatuid",
"CardDAV syncing addresses" => "CardDAV sünkroniseerimise aadressid",
"more info" => "lisainfo",
"Primary address (Kontact et al)" => "Peamine aadress",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Download" => "Lae alla",
+"Edit" => "Muuda",
+"New Address Book" => "Uus aadressiraamat",
+"Save" => "Salvesta",
+"Cancel" => "Loobu"
);
diff --git a/apps/contacts/l10n/eu.php b/apps/contacts/l10n/eu.php
index 6dfbf0a7b23..b676b45c0fd 100644
--- a/apps/contacts/l10n/eu.php
+++ b/apps/contacts/l10n/eu.php
@@ -1,44 +1,69 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Errore bat egon da helbide-liburua (des)gaitzen",
-"There was an error adding the contact." => "Errore bat egon da kontaktua gehitzerakoan",
-"Cannot add empty property." => "Ezin da propieta hutsa gehitu.",
-"At least one of the address fields has to be filled out." => "Behintzat helbide eremuetako bat bete behar da.",
-"Error adding contact property." => "Errorea kontaktu propietatea gehitzean.",
+"id is not set." => "IDa ez da ezarri.",
+"Cannot update addressbook with an empty name." => "Ezin da helbide liburua eguneratu izen huts batekin.",
+"Error updating addressbook." => "Errore bat egon da helbide liburua eguneratzen.",
"No ID provided" => "Ez da IDrik eman",
+"Error setting checksum." => "Errorea kontrol-batura ezartzean.",
"No categories selected for deletion." => "Ez dira ezabatzeko kategoriak hautatu.",
"No address books found." => "Ez da helbide libururik aurkitu.",
"No contacts found." => "Ez da kontakturik aurkitu.",
+"There was an error adding the contact." => "Errore bat egon da kontaktua gehitzerakoan",
+"element name is not set." => "elementuaren izena ez da ezarri.",
+"Could not parse contact: " => "Ezin izan da kontaktua analizatu:",
+"Cannot add empty property." => "Ezin da propieta hutsa gehitu.",
+"At least one of the address fields has to be filled out." => "Behintzat helbide eremuetako bat bete behar da.",
+"Trying to add duplicate property: " => "Propietate bikoiztuta gehitzen saiatzen ari zara:",
+"Information about vCard is incorrect. Please reload the page." => "vCard-aren inguruko informazioa okerra da. Mesedez birkargatu orrialdea.",
"Missing ID" => "ID falta da",
-"Error adding addressbook." => "Errore bat egon da helbide liburua gehitzean.",
-"Error activating addressbook." => "Errore bat egon da helbide-liburua aktibatzen.",
+"Error parsing VCard for ID: \"" => "Errorea VCard analizatzean hurrengo IDrako: \"",
+"checksum is not set." => "Kontrol-batura ezarri gabe dago.",
+"Information about vCard is incorrect. Please reload the page: " => "vCard honen informazioa ez da zuzena.Mezedez birkargatu orria:",
+"No contact ID was submitted." => "Ez da kontaktuaren IDrik eman.",
"Error reading contact photo." => "Errore bat izan da kontaktuaren argazkia igotzerakoan.",
+"Error saving temporary file." => "Errore bat izan da aldi bateko fitxategia gordetzerakoan.",
"The loading photo is not valid." => "Kargatzen ari den argazkia ez da egokia.",
-"id is not set." => "IDa ez da ezarri.",
-"Information about vCard is incorrect. Please reload the page." => "vCard-aren inguruko informazioa okerra da. Mesedez birkargatu orrialdea.",
-"Error deleting contact property." => "Errorea kontaktu propietatea ezabatzean.",
"Contact ID is missing." => "Kontaktuaren IDa falta da.",
-"Missing contact id." => "Kontaktuaren IDa falta da.",
+"No photo path was submitted." => "Ez da argazkiaren bide-izenik eman.",
"File doesn't exist:" => "Fitxategia ez da existitzen:",
"Error loading image." => "Errore bat izan da irudia kargatzearkoan.",
-"element name is not set." => "elementuaren izena ez da ezarri.",
-"Error updating contact property." => "Errorea kontaktu propietatea eguneratzean.",
-"Cannot update addressbook with an empty name." => "Ezin da helbide liburua eguneratu izen huts batekin.",
-"Error updating addressbook." => "Errore bat egon da helbide liburua eguneratzen.",
+"Error getting contact object." => "Errore bat izan da kontaktu objetua lortzean.",
+"Error getting PHOTO property." => "Errore bat izan da PHOTO propietatea lortzean.",
+"Error saving contact." => "Errore bat izan da kontaktua gordetzean.",
+"Error resizing image" => "Errore bat izan da irudiaren tamaina aldatzean",
+"Error cropping image" => "Errore bat izan da irudia mozten",
+"Error creating temporary image" => "Errore bat izan da aldi bateko irudia sortzen",
+"Error finding image: " => "Ezin izan da irudia aurkitu:",
"Error uploading contacts to storage." => "Errore bat egon da kontaktuak biltegira igotzerakoan.",
"There is no error, the file uploaded with success" => "Ez da errorerik egon, fitxategia ongi igo da",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Igotako fitxategia php.ini fitxategiko upload_max_filesize direktiba baino handiagoa da",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Igotako fitxategia HTML formularioan zehaztutako MAX_FILE_SIZE direktiba baino handidagoa da.",
"The uploaded file was only partially uploaded" => "Igotako fitxategiaren zati bat bakarrik igo da",
"No file was uploaded" => "Ez da fitxategirik igo",
+"Missing a temporary folder" => "Aldi bateko karpeta falta da",
+"Couldn't save temporary image: " => "Ezin izan da aldi bateko irudia gorde:",
+"Couldn't load temporary image: " => "Ezin izan da aldi bateko irudia kargatu:",
+"No file was uploaded. Unknown error" => "Ez da fitxategirik igo. Errore ezezaguna",
"Contacts" => "Kontaktuak",
-"Drop a VCF file to import contacts." => "Askatu VCF fitxategia kontaktuak inportatzeko.",
-"Addressbook not found." => "Helbide liburua ez da aurkitu",
+"Sorry, this functionality has not been implemented yet" => "Barkatu, aukera hau ez da oriandik inplementatu",
+"Not implemented" => "Inplementatu gabe",
+"Couldn't get a valid address." => "Ezin izan da eposta baliagarri bat hartu.",
+"Error" => "Errorea",
+"This property has to be non-empty." => "Propietate hau ezin da hutsik egon.",
+"Couldn't serialize elements." => "Ezin izan dira elementuak serializatu.",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' argumenturik gabe deitu da. Mezedez abisatu bugs.owncloud.org-en",
+"Edit name" => "Editatu izena",
+"No files selected for upload." => "Ez duzu igotzeko fitxategirik hautatu.",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Igo nahi duzun fitxategia zerbitzariak onartzen duen tamaina baino handiagoa da.",
+"Select type" => "Hautatu mota",
+"Result: " => "Emaitza:",
+" imported, " => " inportatua, ",
+" failed." => "huts egin du.",
"This is not your addressbook." => "Hau ez da zure helbide liburua.",
"Contact could not be found." => "Ezin izan da kontaktua aurkitu.",
-"Address" => "Helbidea",
-"Telephone" => "Telefonoa",
-"Email" => "Eposta",
-"Organization" => "Erakundea",
"Work" => "Lana",
"Home" => "Etxea",
+"Other" => "Bestelakoa",
"Mobile" => "Mugikorra",
"Text" => "Testua",
"Voice" => "Ahotsa",
@@ -47,24 +72,46 @@
"Video" => "Bideoa",
"Pager" => "Bilagailua",
"Internet" => "Internet",
+"Birthday" => "Jaioteguna",
+"Call" => "Deia",
+"Clients" => "Bezeroak",
+"Holidays" => "Oporrak",
+"Ideas" => "Ideiak",
+"Journey" => "Bidaia",
+"Meeting" => "Bilera",
+"Personal" => "Pertsonala",
+"Projects" => "Proiektuak",
+"Questions" => "Galderak",
"{name}'s Birthday" => "{name}ren jaioteguna",
"Contact" => "Kontaktua",
"Add Contact" => "Gehitu kontaktua",
+"Import" => "Inportatu",
+"Settings" => "Ezarpenak",
"Addressbooks" => "Helbide Liburuak",
-"Configure Address Books" => "Konfiguratu Helbide Liburuak",
-"New Address Book" => "Helbide-liburu berria",
-"Import from VCF" => "VCFtik inportatu",
-"CardDav Link" => "CardDav lotura",
-"Download" => "Deskargatu",
-"Edit" => "Editatu",
-"Delete" => "Ezabatu",
-"Download contact" => "Deskargatu kontaktua",
-"Delete contact" => "Ezabatu kontaktua",
+"Close" => "Itxi",
+"Keyboard shortcuts" => "Teklatuaren lasterbideak",
+"Navigation" => "Nabigazioa",
+"Next contact in list" => "Hurrengoa kontaktua zerrendan",
+"Previous contact in list" => "Aurreko kontaktua zerrendan",
+"Expand/collapse current addressbook" => "Zabaldu/tolestu uneko helbide-liburua",
+"Actions" => "Ekintzak",
+"Refresh contacts list" => "Gaurkotu kontaktuen zerrenda",
+"Add new contact" => "Gehitu kontaktu berria",
+"Add new addressbook" => "Gehitu helbide-liburu berria",
+"Delete current contact" => "Ezabatu uneko kontaktuak",
"Drop photo to upload" => "Askatu argazkia igotzeko",
+"Delete current photo" => "Ezabatu oraingo argazkia",
+"Edit current photo" => "Editatu oraingo argazkia",
+"Upload new photo" => "Igo argazki berria",
+"Select photo from ownCloud" => "Hautatu argazki bat ownCloudetik",
"Edit name details" => "Editatu izenaren zehaztasunak",
+"Organization" => "Erakundea",
+"Delete" => "Ezabatu",
"Nickname" => "Ezizena",
"Enter nickname" => "Sartu ezizena",
-"Birthday" => "Jaioteguna",
+"Web site" => "Web orria",
+"http://www.somesite.com" => "http://www.webgunea.com",
+"Go to web site" => "Web orrira joan",
"dd-mm-yyyy" => "yyyy-mm-dd",
"Groups" => "Taldeak",
"Separate groups with commas" => "Banatu taldeak komekin",
@@ -80,45 +127,49 @@
"Edit address details" => "Editatu helbidearen zehaztasunak",
"Add notes here." => "Gehitu oharrak hemen.",
"Add field" => "Gehitu eremua",
-"Profile picture" => "Profilaren irudia",
"Phone" => "Telefonoa",
+"Email" => "Eposta",
+"Address" => "Helbidea",
"Note" => "Oharra",
-"Delete current photo" => "Ezabatu oraingo argazkia",
-"Edit current photo" => "Editatu oraingo argazkia",
-"Upload new photo" => "Igo argazki berria",
-"Select photo from ownCloud" => "Hautatu argazki bat ownCloudetik",
+"Download contact" => "Deskargatu kontaktua",
+"Delete contact" => "Ezabatu kontaktua",
+"The temporary image has been removed from cache." => "Aldi bateko irudia cachetik ezabatu da.",
"Edit address" => "Editatu helbidea",
"Type" => "Mota",
"PO Box" => "Posta kutxa",
+"Street address" => "Kalearen helbidea",
+"Street and number" => "Kalea eta zenbakia",
"Extended" => "Hedatua",
-"Street" => "Kalea",
+"Apartment number etc." => "Etxe zenbakia eab.",
"City" => "Hiria",
"Region" => "Eskualdea",
"Zipcode" => "Posta kodea",
+"Postal code" => "Posta kodea",
"Country" => "Herrialdea",
-"Edit categories" => "Editatu kategoriak",
-"Add" => "Gehitu",
"Addressbook" => "Helbide-liburua",
-"New Addressbook" => "Helbide-liburu berria",
-"Edit Addressbook" => "Editatu helbide-liburua",
-"Displayname" => "Bistaratzeko izena",
-"Active" => "Aktibo",
-"Save" => "Gorde",
-"Submit" => "Bidali",
-"Cancel" => "Ezeztatu",
"Import a contacts file" => "Inporatu kontaktuen fitxategia",
"Please choose the addressbook" => "Mesedez, aukeratu helbide liburua",
"create a new addressbook" => "sortu helbide liburu berria",
"Name of new addressbook" => "Helbide liburuaren izena",
-"Import" => "Inportatu",
"Importing contacts" => "Kontaktuak inportatzen",
+"Contacts imported successfully" => "Kontaktuak ongi inportatu dira",
+"Close Dialog" => "Dialogoa itxi",
+"Import Addressbook" => "Inporatu helbide liburua",
"Select address book to import to:" => "Hautau helburuko helbide liburua:",
+"Drop a VCF file to import contacts." => "Askatu VCF fitxategia kontaktuak inportatzeko.",
"Select from HD" => "Hautatu disko gogorretik",
"You have no contacts in your addressbook." => "Ez duzu kontakturik zure helbide liburuan.",
"Add contact" => "Gehitu kontaktua",
-"Configure addressbooks" => "Konfiguratu helbide liburuak",
+"Select Address Books" => "Hautatu helbide-liburuak",
+"Enter name" => "Sartu izena",
+"Enter description" => "Sartu deskribapena",
"CardDAV syncing addresses" => "CardDAV sinkronizazio helbideak",
"more info" => "informazio gehiago",
"Primary address (Kontact et al)" => "Helbide nagusia",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Download" => "Deskargatu",
+"Edit" => "Editatu",
+"New Address Book" => "Helbide-liburu berria",
+"Save" => "Gorde",
+"Cancel" => "Ezeztatu"
);
diff --git a/apps/contacts/l10n/fa.php b/apps/contacts/l10n/fa.php
index 9278975c407..9ee6ee54661 100644
--- a/apps/contacts/l10n/fa.php
+++ b/apps/contacts/l10n/fa.php
@@ -1,39 +1,39 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "خطا در (غیر) Ùعال سازی کتابچه نشانه ها",
-"There was an error adding the contact." => "یک خطا در اÙزودن اطلاعات شخص مورد نظر",
-"Cannot add empty property." => "نمیتوان یک خاصیت خالی ایجاد کرد",
-"At least one of the address fields has to be filled out." => "At least one of the address fields has to be filled out. ",
-"Trying to add duplicate property: " => "امتحان کردن برای وارد کردن مشخصات تکراری",
-"Error adding contact property." => "خطا درهنگام اÙزودن ویژگی",
+"id is not set." => "شناسه تعیین نشده",
+"Cannot update addressbook with an empty name." => "نمی توانید کتابچه نشانی ها را با یک نام خالی بروزرسانی کنید",
+"Error updating addressbook." => "خطا در هنگام بروزرسانی کتابچه نشانی ها",
"No ID provided" => "هیچ شناسه ای ارائه نشده",
"Error setting checksum." => "خطا در تنظیم checksum",
"No categories selected for deletion." => "هیچ گروهی برای حذ٠شدن در نظر گرÙته نشده",
"No address books found." => "هیچ کتابچه نشانی پیدا نشد",
"No contacts found." => "هیچ شخصی پیدا نشد",
+"There was an error adding the contact." => "یک خطا در اÙزودن اطلاعات شخص مورد نظر",
+"element name is not set." => "نام اصلی تنظیم نشده است",
+"Cannot add empty property." => "نمیتوان یک خاصیت خالی ایجاد کرد",
+"At least one of the address fields has to be filled out." => "At least one of the address fields has to be filled out. ",
+"Trying to add duplicate property: " => "امتحان کردن برای وارد کردن مشخصات تکراری",
+"Information about vCard is incorrect. Please reload the page." => "اطلاعات درمورد vCard شما اشتباه است لطÙا صÙحه را دوباره بار گذاری کنید",
"Missing ID" => "نشانی گم شده",
"Error parsing VCard for ID: \"" => "خطا در تجزیه کارت ویزا برای شناسه:",
-"Cannot add addressbook with an empty name." => "نمیتوانید یک نام خالی را به کتابچه نشانی ها اÙزود",
-"Error adding addressbook." => "خطا درهنگام اÙزودن کتابچه نشانی ها",
-"Error activating addressbook." => "خطا درهنگام Ùعال سازیکتابچه نشانی ها",
+"checksum is not set." => "checksum تنظیم شده نیست",
+"Information about vCard is incorrect. Please reload the page: " => "اطلاعات کارت ویزا شما غلط است لطÙا صÙحه را دوباره بارگزاری کنید",
+"Something went FUBAR. " => "چند چیز به FUBAR رÙتند",
"No contact ID was submitted." => "هیچ اطلاعاتی راجع به شناسه ارسال نشده",
"Error reading contact photo." => "خطا در خواندن اطلاعات تصویر",
"Error saving temporary file." => "خطا در ذخیره پرونده موقت",
"The loading photo is not valid." => "بارگزاری تصویر امکان پذیر نیست",
-"id is not set." => "شناسه تعیین نشده",
-"Information about vCard is incorrect. Please reload the page." => "اطلاعات درمورد vCard شما اشتباه است لطÙا صÙحه را دوباره بار گذاری کنید",
-"Error deleting contact property." => "خطا در هنگام پاک کرد ویژگی",
"Contact ID is missing." => "اطلاعات شناسه گم شده",
-"Missing contact id." => "شما اطلاعات شناسه را Ùراموش کرده اید",
"No photo path was submitted." => "هیچ نشانی از تصویرارسال نشده",
"File doesn't exist:" => "پرونده وجود ندارد",
"Error loading image." => "خطا در بارگزاری تصویر",
-"element name is not set." => "نام اصلی تنظیم نشده است",
-"checksum is not set." => "checksum تنظیم شده نیست",
-"Information about vCard is incorrect. Please reload the page: " => "اطلاعات کارت ویزا شما غلط است لطÙا صÙحه را دوباره بارگزاری کنید",
-"Something went FUBAR. " => "چند چیز به FUBAR رÙتند",
-"Error updating contact property." => "خطا در هنگام بروزرسانی اطلاعات شخص مورد نظر",
-"Cannot update addressbook with an empty name." => "نمی توانید کتابچه نشانی ها را با یک نام خالی بروزرسانی کنید",
-"Error updating addressbook." => "خطا در هنگام بروزرسانی کتابچه نشانی ها",
+"Error getting contact object." => "خطا در گرÙتن اطلاعات شخص",
+"Error getting PHOTO property." => "خطا در درباÙت تصویر ویژگی شخصی",
+"Error saving contact." => "خطا در ذخیره سازی اطلاعات",
+"Error resizing image" => "خطا در تغییر دادن اندازه تصویر",
+"Error cropping image" => "خطا در برداشت تصویر",
+"Error creating temporary image" => "خطا در ساخت تصویر temporary",
+"Error finding image: " => "خطا در پیدا کردن تصویر:",
"Error uploading contacts to storage." => "خطا در هنگام بارگذاری و ذخیره سازی",
"There is no error, the file uploaded with success" => "هیچ خطایی نیست بارگذاری پرونده موÙقیت آمیز بود",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "حجم آپلود از طریق Php.ini تعیین می شود",
@@ -41,15 +41,26 @@
"The uploaded file was only partially uploaded" => "پرونده بارگذاری شده Ùقط تاحدودی بارگذاری شده",
"No file was uploaded" => "هیچ پروندهای بارگذاری نشده",
"Missing a temporary folder" => "یک پوشه موقت گم شده",
+"Couldn't save temporary image: " => "قابلیت ذخیره تصویر موقت وجود ندارد:",
+"Couldn't load temporary image: " => "قابلیت بارگذاری تصویر موقت وجود ندارد:",
+"No file was uploaded. Unknown error" => "هیچ Ùایلی آپلود نشد.خطای ناشناس",
"Contacts" => "اشخاص",
-"Drop a VCF file to import contacts." => "یک پرونده VCF را به اینجا بکشید تا اشخاص اÙزوده شوند",
-"Addressbook not found." => "کتابچه نشانی ها یاÙت نشد",
+"Sorry, this functionality has not been implemented yet" => "با عرض پوزش،این قابلیت هنوز اجرا نشده است",
+"Not implemented" => "انجام نشد",
+"Couldn't get a valid address." => "Couldn't get a valid address.",
+"Error" => "خطا",
+"This property has to be non-empty." => "این ویژگی باید به صورت غیر تهی عمل کند",
+"Couldn't serialize elements." => "قابلیت مرتب سازی عناصر وجود ندارد",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "پاک کردن ویژگی بدون استدلال انجام شده.لطÙا این مورد را گزارش دهید:bugs.owncloud.org",
+"Edit name" => "نام تغییر",
+"No files selected for upload." => "هیچ Ùایلی برای آپلود انتخاب نشده است",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "حجم Ùایل بسیار بیشتر از حجم تنظیم شده در تنظیمات سرور است",
+"Select type" => "نوع را انتخاب کنید",
+"Result: " => "نتیجه:",
+" imported, " => "وارد شد،",
+" failed." => "ناموÙÙ‚",
"This is not your addressbook." => "این کتابچه ی نشانه های شما نیست",
"Contact could not be found." => "اتصال ویا تماسی یاÙت نشد",
-"Address" => "نشانی",
-"Telephone" => "تلÙÙ†",
-"Email" => "نشانی پست الکترنیک",
-"Organization" => "نهاد(ارگان)",
"Work" => "کار",
"Home" => "خانه",
"Mobile" => "موبایل",
@@ -60,25 +71,24 @@
"Video" => "رسانه تصویری",
"Pager" => "صÙحه",
"Internet" => "اینترنت",
+"Birthday" => "روزتولد",
"{name}'s Birthday" => "روز تولد {name} است",
"Contact" => "اشخاص",
"Add Contact" => "اÙزودن اطلاعات شخص مورد نظر",
+"Import" => "وارد کردن",
"Addressbooks" => "کتابچه ی نشانی ها",
-"Configure Address Books" => "پیکر بندی کتابچه نشانی ها",
-"New Address Book" => "کتابچه نشانه های جدید",
-"Import from VCF" => "وارد شده از VCF",
-"CardDav Link" => "CardDav Link",
-"Download" => "بارگیری",
-"Edit" => "ویرایش",
-"Delete" => "پاک کردن",
-"Download contact" => "دانلود مشخصات اشخاص",
-"Delete contact" => "پاک کردن اطلاعات شخص مورد نظر",
+"Close" => "بستن",
"Drop photo to upload" => "تصویر را به اینجا بکشید تا بار گذازی شود",
+"Delete current photo" => "پاک کردن تصویر کنونی",
+"Edit current photo" => "ویرایش تصویر کنونی",
+"Upload new photo" => "بار گذاری یک تصویر جدید",
+"Select photo from ownCloud" => "انتخاب یک تصویر از ابر های شما",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Format custom, Short name, Full name, Reverse or Reverse with comma",
"Edit name details" => "ویرایش نام جزئیات",
+"Organization" => "نهاد(ارگان)",
+"Delete" => "پاک کردن",
"Nickname" => "نام مستعار",
"Enter nickname" => "یک نام مستعار وارد کنید",
-"Birthday" => "روزتولد",
"dd-mm-yyyy" => "dd-mm-yyyy",
"Groups" => "گروه ها",
"Separate groups with commas" => "جدا کردن گروه ها به وسیله درنگ نما",
@@ -94,24 +104,21 @@
"Edit address details" => "ویرایش جزئیات نشانی ها",
"Add notes here." => "اینجا یادداشت ها را بیاÙزایید",
"Add field" => "اضاÙÙ‡ کردن Ùیلد",
-"Profile picture" => "تصویر پروÙایل",
"Phone" => "شماره تلÙÙ†",
+"Email" => "نشانی پست الکترنیک",
+"Address" => "نشانی",
"Note" => "یادداشت",
-"Delete current photo" => "پاک کردن تصویر کنونی",
-"Edit current photo" => "ویرایش تصویر کنونی",
-"Upload new photo" => "بار گذاری یک تصویر جدید",
-"Select photo from ownCloud" => "انتخاب یک تصویر از ابر های شما",
+"Download contact" => "دانلود مشخصات اشخاص",
+"Delete contact" => "پاک کردن اطلاعات شخص مورد نظر",
+"The temporary image has been removed from cache." => "تصویر موقت از کش پاک شد.",
"Edit address" => "ویرایش نشانی",
"Type" => "نوع",
"PO Box" => "صندوق پستی",
"Extended" => "تمدید شده",
-"Street" => "خیابان",
"City" => "شهر",
"Region" => "ناحیه",
"Zipcode" => "کد پستی",
"Country" => "کشور",
-"Edit categories" => "ویرایش گروه",
-"Add" => "اÙزودن",
"Addressbook" => "کتابچه ی نشانی ها",
"Hon. prefixes" => "پیشوند های محترمانه",
"Miss" => "خانم",
@@ -132,26 +139,26 @@
"Esq." => "Esq.",
"Jr." => "Jr.",
"Sn." => "Sn.",
-"New Addressbook" => "کتابچه نشانی جدید",
-"Edit Addressbook" => "ویرایش کتابچه نشانی",
-"Displayname" => "نام برای نمایش",
-"Active" => "Ùعال",
-"Save" => "ذخیره سازی",
-"Submit" => "ارسال",
-"Cancel" => "انصراÙ",
"Import a contacts file" => "وارد کردن پرونده حاوی اطلاعات",
"Please choose the addressbook" => "لطÙا یک کتابچه نشانی انتخاب کنید",
"create a new addressbook" => "یک کتابچه نشانی بسازید",
"Name of new addressbook" => "نام کتابچه نشانی جدید",
-"Import" => "وارد کردن",
"Importing contacts" => "وارد کردن اشخاص",
+"Contacts imported successfully" => "اشخاص با موÙقیت اÙزوده شدند",
+"Close Dialog" => "بستن دیالوگ",
+"Import Addressbook" => "وارد کردن کتابچه نشانی",
"Select address book to import to:" => "یک کتابچه نشانی انتخاب کنید تا وارد شود",
+"Drop a VCF file to import contacts." => "یک پرونده VCF را به اینجا بکشید تا اشخاص اÙزوده شوند",
"Select from HD" => "انتخاب از دیسک سخت",
"You have no contacts in your addressbook." => "شماهیچ شخصی در کتابچه نشانی خود ندارید",
"Add contact" => "اÙزودن اطلاعات شخص مورد نظر",
-"Configure addressbooks" => "پیکربندی کتابچه ی نشانی ها",
"CardDAV syncing addresses" => "CardDAV syncing addresses ",
"more info" => "اطلاعات بیشتر",
"Primary address (Kontact et al)" => "نشانی اولیه",
-"iOS/OS X" => "iOS/OS X "
+"iOS/OS X" => "iOS/OS X ",
+"Download" => "بارگیری",
+"Edit" => "ویرایش",
+"New Address Book" => "کتابچه نشانه های جدید",
+"Save" => "ذخیره سازی",
+"Cancel" => "انصراÙ"
);
diff --git a/apps/contacts/l10n/fi_FI.php b/apps/contacts/l10n/fi_FI.php
index 2e3e91611bb..23cafe44dcf 100644
--- a/apps/contacts/l10n/fi_FI.php
+++ b/apps/contacts/l10n/fi_FI.php
@@ -1,36 +1,60 @@
<?php $TRANSLATIONS = array(
-"There was an error adding the contact." => "Virhe yhteystietoa lisättäessä.",
-"Cannot add empty property." => "Tyhjää ominaisuutta ei voi lisätä.",
-"At least one of the address fields has to be filled out." => "Vähintään yksi osoitekenttä tulee täyttää.",
-"Error adding contact property." => "Virhe lisättäessä ominaisuutta yhteystietoon.",
+"Error updating addressbook." => "Virhe päivitettäessä osoitekirjaa.",
+"Error setting checksum." => "Virhe asettaessa tarkistussummaa.",
"No categories selected for deletion." => "Luokkia ei ole valittu poistettavaksi.",
"No address books found." => "Osoitekirjoja ei löytynyt.",
"No contacts found." => "Yhteystietoja ei löytynyt.",
+"There was an error adding the contact." => "Virhe yhteystietoa lisättäessä.",
+"Cannot add empty property." => "Tyhjää ominaisuutta ei voi lisätä.",
+"At least one of the address fields has to be filled out." => "Vähintään yksi osoitekenttä tulee täyttää.",
+"Information about vCard is incorrect. Please reload the page." => "vCardin tiedot eivät kelpaa. Lataa sivu uudelleen.",
"Error parsing VCard for ID: \"" => "Virhe jäsennettäessä vCardia tunnisteelle: \"",
-"Cannot add addressbook with an empty name." => "Ilman nimeä olevaa osoitekirjaa ei voi lisätä.",
-"Error adding addressbook." => "Virhe lisättäessä osoitekirjaa.",
-"Error activating addressbook." => "Virhe aktivoitaessa osoitekirjaa.",
"Error saving temporary file." => "Virhe tallennettaessa tilapäistiedostoa.",
-"Error deleting contact property." => "Virhe poistettaessa yhteystiedon ominaisuutta.",
+"No photo path was submitted." => "Kuvan polkua ei annettu.",
"File doesn't exist:" => "Tiedostoa ei ole olemassa:",
"Error loading image." => "Virhe kuvaa ladatessa.",
-"Error updating contact property." => "Virhe päivitettäessä yhteystiedon ominaisuutta.",
-"Error updating addressbook." => "Virhe päivitettäessä osoitekirjaa.",
+"Error saving contact." => "Virhe yhteystietoa tallennettaessa.",
+"Error resizing image" => "Virhe asettaessa kuvaa uuteen kokoon",
+"Error cropping image" => "Virhe rajatessa kuvaa",
+"Error creating temporary image" => "Virhe luotaessa väliaikaista kuvaa",
"There is no error, the file uploaded with success" => "Ei virhettä, tiedosto lähetettiin onnistuneesti",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Lähetetyn tiedoston koko ylittää upload_max_filesize-asetuksen arvon php.ini-tiedostossa",
"The uploaded file was only partially uploaded" => "Lähetetty tiedosto lähetettiin vain osittain",
"No file was uploaded" => "Tiedostoa ei lähetetty",
"Missing a temporary folder" => "Tilapäiskansio puuttuu",
+"Couldn't save temporary image: " => "Väliaikaiskuvan tallennus epäonnistui:",
+"Couldn't load temporary image: " => "Väliaikaiskuvan lataus epäonnistui:",
+"No file was uploaded. Unknown error" => "Tiedostoa ei lähetetty. Tuntematon virhe",
"Contacts" => "Yhteystiedot",
-"Addressbook not found." => "Osoitekirjaa ei löytynyt.",
+"Error" => "Virhe",
+"Edit name" => "Muokkaa nimeä",
+"No files selected for upload." => "Tiedostoja ei ole valittu lähetettäväksi.",
+"Error loading profile picture." => "Virhe profiilikuvaa ladatessa.",
+"Select type" => "Valitse tyyppi",
+"Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted." => "Jotkin yhteystiedot on merkitty poistettaviksi, mutta niitä ei ole vielä poistettu. Odota hetki, että kyseiset yhteystiedot poistetaan.",
+"Do you want to merge these address books?" => "Haluatko yhdistää nämä osoitekirjat?",
+"Result: " => "Tulos: ",
+" imported, " => " tuotu, ",
+" failed." => " epäonnistui.",
+"Displayname cannot be empty." => "Näyttönimi ei voi olla tyhjä.",
+"Addressbook not found: " => "Osoitekirjaa ei löytynyt:",
"This is not your addressbook." => "Tämä ei ole osoitekirjasi.",
"Contact could not be found." => "Yhteystietoa ei löytynyt.",
-"Address" => "Osoite",
-"Telephone" => "Puhelin",
-"Email" => "Sähköposti",
-"Organization" => "Organisaatio",
+"Jabber" => "Jabber",
+"AIM" => "AIM",
+"MSN" => "MSN",
+"Twitter" => "Twitter",
+"GoogleTalk" => "Google Talk",
+"Facebook" => "Facebook",
+"XMPP" => "XMPP",
+"ICQ" => "ICQ",
+"Yahoo" => "Yahoo",
+"Skype" => "Skype",
+"QQ" => "QQ",
+"GaduGadu" => "GaduGadu",
"Work" => "Työ",
"Home" => "Koti",
+"Other" => "Muu",
"Mobile" => "Mobiili",
"Text" => "Teksti",
"Voice" => "Ääni",
@@ -39,71 +63,97 @@
"Video" => "Video",
"Pager" => "Hakulaite",
"Internet" => "Internet",
+"Birthday" => "Syntymäpäivä",
+"Business" => "Työ",
+"Questions" => "Kysymykset",
"{name}'s Birthday" => "Henkilön {name} syntymäpäivä",
"Contact" => "Yhteystieto",
"Add Contact" => "Lisää yhteystieto",
+"Import" => "Tuo",
+"Settings" => "Asetukset",
"Addressbooks" => "Osoitekirjat",
-"Configure Address Books" => "Muokkaa osoitekirjoja",
-"New Address Book" => "Uusi osoitekirja",
-"Import from VCF" => "Tuo VCF-tiedostosta",
-"CardDav Link" => "CardDav-linkki",
-"Download" => "Lataa",
-"Edit" => "Muokkaa",
+"Close" => "Sulje",
+"Keyboard shortcuts" => "Pikanäppäimet",
+"Next contact in list" => "Seuraava yhteystieto luettelossa",
+"Previous contact in list" => "Edellinen yhteystieto luettelossa",
+"Next addressbook" => "Seuraava osoitekirja",
+"Previous addressbook" => "Edellinen osoitekirja",
+"Actions" => "Toiminnot",
+"Refresh contacts list" => "Päivitä yhteystietoluettelo",
+"Add new contact" => "Lisää uusi yhteystieto",
+"Add new addressbook" => "Lisää uusi osoitekirja",
+"Delete current contact" => "Poista nykyinen yhteystieto",
+"Delete current photo" => "Poista nykyinen valokuva",
+"Edit current photo" => "Muokkaa nykyistä valokuvaa",
+"Upload new photo" => "Lähetä uusi valokuva",
+"Select photo from ownCloud" => "Valitse valokuva ownCloudista",
+"Edit name details" => "Muokkaa nimitietoja",
+"Organization" => "Organisaatio",
"Delete" => "Poista",
-"Download contact" => "Lataa yhteystieto",
-"Delete contact" => "Poista yhteystieto",
"Nickname" => "Kutsumanimi",
"Enter nickname" => "Anna kutsumanimi",
-"Birthday" => "Syntymäpäivä",
+"Web site" => "Verkkosivu",
+"http://www.somesite.com" => "http://www.somesite.com",
+"Go to web site" => "Siirry verkkosivulle",
"Groups" => "Ryhmät",
"Separate groups with commas" => "Erota ryhmät pilkuilla",
"Edit groups" => "Muokkaa ryhmiä",
+"Preferred" => "Ensisijainen",
"Please specify a valid email address." => "Anna kelvollinen sähköpostiosoite.",
"Enter email address" => "Anna sähköpostiosoite",
+"Mail to address" => "Lähetä sähköpostia",
"Delete email address" => "Poista sähköpostiosoite",
"Enter phone number" => "Anna puhelinnumero",
"Delete phone number" => "Poista puhelinnumero",
+"Instant Messenger" => "Pikaviestin",
"View on map" => "Näytä kartalla",
+"Edit address details" => "Muokkaa osoitetietoja",
"Add notes here." => "Lisää huomiot tähän.",
"Add field" => "Lisää kenttä",
-"Profile picture" => "Profiilikuva",
"Phone" => "Puhelin",
+"Email" => "Sähköposti",
+"Address" => "Osoite",
"Note" => "Huomio",
-"Delete current photo" => "Poista nykyinen valokuva",
-"Edit current photo" => "Muokkaa nykyistä valokuvaa",
-"Upload new photo" => "Lähetä uusi valokuva",
-"Select photo from ownCloud" => "Valitse valokuva ownCloudista",
+"Download contact" => "Lataa yhteystieto",
+"Delete contact" => "Poista yhteystieto",
+"The temporary image has been removed from cache." => "Väliaikainen kuva on poistettu välimuistista.",
"Edit address" => "Muokkaa osoitetta",
"Type" => "Tyyppi",
"PO Box" => "Postilokero",
+"Street address" => "Katuosoite",
+"Street and number" => "Katu ja numero",
"Extended" => "Laajennettu",
-"Street" => "Katuosoite",
+"Apartment number etc." => "Asunnon numero jne.",
"City" => "Paikkakunta",
"Region" => "Alue",
"Zipcode" => "Postinumero",
+"Postal code" => "Postinumero",
"Country" => "Maa",
-"Edit categories" => "Muokkaa luokkia",
-"Add" => "Lisää",
"Addressbook" => "Osoitekirja",
"Given name" => "Etunimi",
"Additional names" => "Lisänimet",
"Family name" => "Sukunimi",
-"New Addressbook" => "Uusi osoitekirja",
-"Edit Addressbook" => "Muokkaa osoitekirjaa",
-"Active" => "Aktiivinen",
-"Save" => "Tallenna",
-"Submit" => "Lähetä",
-"Cancel" => "Peru",
"Import a contacts file" => "Tuo yhteystiedon sisältävä tiedosto",
"Please choose the addressbook" => "Valitse osoitekirja",
"create a new addressbook" => "luo uusi osoitekirja",
"Name of new addressbook" => "Uuden osoitekirjan nimi",
-"Import" => "Tuo",
"Importing contacts" => "Tuodaan yhteystietoja",
-"Select address book to import to:" => "Valitse osoitekirja, johon yhteystiedot tuodaan:",
"You have no contacts in your addressbook." => "Osoitekirjassasi ei ole yhteystietoja.",
"Add contact" => "Lisää yhteystieto",
-"Configure addressbooks" => "Muokkaa osoitekirjoja",
+"Select Address Books" => "Valitse osoitekirjat",
+"Enter name" => "Anna nimi",
+"Enter description" => "Anna kuvaus",
"CardDAV syncing addresses" => "CardDAV-synkronointiosoitteet",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Show CardDav link" => "Näytä CardDav-linkki",
+"Show read-only VCF link" => "Näytä vain luku -muodossa oleva VCF-linkki",
+"Share" => "Jaa",
+"Download" => "Lataa",
+"Edit" => "Muokkaa",
+"New Address Book" => "Uusi osoitekirja",
+"Name" => "Nimi",
+"Description" => "Kuvaus",
+"Save" => "Tallenna",
+"Cancel" => "Peru",
+"More..." => "Lisää..."
);
diff --git a/apps/contacts/l10n/fr.php b/apps/contacts/l10n/fr.php
index 0a2a4e58b9f..87942444356 100644
--- a/apps/contacts/l10n/fr.php
+++ b/apps/contacts/l10n/fr.php
@@ -1,39 +1,42 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Des erreurs se sont produites lors de l'activation/désactivation du carnet d'adresses.",
-"There was an error adding the contact." => "Une erreur s'est produite lors de l'ajout du contact.",
-"Cannot add empty property." => "Impossible d'ajouter un champ vide.",
-"At least one of the address fields has to be filled out." => "Au moins un des champs d'adresses doit être complété.",
-"Trying to add duplicate property: " => "Ajout d'une propriété en double:",
-"Error adding contact property." => "Erreur lors de l'ajout du champ.",
+"id is not set." => "L'ID n'est pas défini.",
+"Cannot update addressbook with an empty name." => "Impossible de mettre à jour le carnet d'adresses avec un nom vide.",
+"Error updating addressbook." => "Erreur lors de la mise à jour du carnet d'adresses.",
"No ID provided" => "Aucun ID fourni",
"Error setting checksum." => "Erreur lors du paramétrage du hachage.",
"No categories selected for deletion." => "Pas de catégories sélectionnées pour la suppression.",
"No address books found." => "Pas de carnet d'adresses trouvé.",
"No contacts found." => "Aucun contact trouvé.",
+"There was an error adding the contact." => "Une erreur s'est produite lors de l'ajout du contact.",
+"element name is not set." => "Le champ Nom n'est pas défini.",
+"Could not parse contact: " => "Impossible de lire le contact :",
+"Cannot add empty property." => "Impossible d'ajouter un champ vide.",
+"At least one of the address fields has to be filled out." => "Au moins un des champs d'adresses doit être complété.",
+"Trying to add duplicate property: " => "Ajout d'une propriété en double:",
+"Missing IM parameter." => "Paramètre de Messagerie Instantanée manquants.",
+"Unknown IM: " => "Messagerie Instantanée inconnue",
+"Information about vCard is incorrect. Please reload the page." => "Les informations relatives à cette vCard sont incorrectes. Veuillez recharger la page.",
"Missing ID" => "ID manquant",
"Error parsing VCard for ID: \"" => "Erreur lors de l'analyse du VCard pour l'ID: \"",
-"Cannot add addressbook with an empty name." => "Ne peut être ajouté avec un nom vide.",
-"Error adding addressbook." => "Erreur lors de l'ajout du carnet d'adresses.",
-"Error activating addressbook." => "Erreur lors de l'activation du carnet d'adresses.",
+"checksum is not set." => "L'hachage n'est pas défini.",
+"Information about vCard is incorrect. Please reload the page: " => "L'informatiion à propos de la vCard est incorrect. Merci de rafraichir la page:",
+"Something went FUBAR. " => "Quelque chose est FUBAR.",
"No contact ID was submitted." => "Aucun ID de contact envoyé",
"Error reading contact photo." => "Erreur de lecture de la photo du contact.",
"Error saving temporary file." => "Erreur de sauvegarde du fichier temporaire.",
"The loading photo is not valid." => "La photo chargée est invalide.",
-"id is not set." => "L'ID n'est pas défini.",
-"Information about vCard is incorrect. Please reload the page." => "Les informations relatives à cette vCard sont incorrectes. Veuillez recharger la page.",
-"Error deleting contact property." => "Erreur lors de la suppression du champ.",
"Contact ID is missing." => "L'ID du contact est manquant.",
-"Missing contact id." => "ID contact manquant.",
"No photo path was submitted." => "Le chemin de la photo n'a pas été envoyé.",
"File doesn't exist:" => "Fichier inexistant:",
"Error loading image." => "Erreur lors du chargement de l'image.",
-"element name is not set." => "Le champ Nom n'est pas défini.",
-"checksum is not set." => "L'hachage n'est pas défini.",
-"Information about vCard is incorrect. Please reload the page: " => "L'informatiion à propos de la vCard est incorrect. Merci de rafraichir la page:",
-"Something went FUBAR. " => "Quelque chose est FUBAR.",
-"Error updating contact property." => "Erreur lors de la mise à jour du champ.",
-"Cannot update addressbook with an empty name." => "Impossible de mettre à jour le carnet d'adresses avec un nom vide.",
-"Error updating addressbook." => "Erreur lors de la mise à jour du carnet d'adresses.",
+"Error getting contact object." => "Erreur lors de l'obtention de l'objet contact",
+"Error getting PHOTO property." => "Erreur lors de l'obtention des propriétés de la photo",
+"Error saving contact." => "Erreur de sauvegarde du contact",
+"Error resizing image" => "Erreur de redimensionnement de l'image",
+"Error cropping image" => "Erreur lors du rognage de l'image",
+"Error creating temporary image" => "Erreur de création de l'image temporaire",
+"Error finding image: " => "Erreur pour trouver l'image :",
"Error uploading contacts to storage." => "Erreur lors de l'envoi des contacts vers le stockage.",
"There is no error, the file uploaded with success" => "Il n'y a pas d'erreur, le fichier a été envoyé avec succes.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Le fichier envoyé dépasse la directive upload_max_filesize dans php.ini",
@@ -41,17 +44,46 @@
"The uploaded file was only partially uploaded" => "Le fichier envoyé n'a été que partiellement envoyé.",
"No file was uploaded" => "Pas de fichier envoyé.",
"Missing a temporary folder" => "Absence de dossier temporaire.",
+"Couldn't save temporary image: " => "Impossible de sauvegarder l'image temporaire :",
+"Couldn't load temporary image: " => "Impossible de charger l'image temporaire :",
+"No file was uploaded. Unknown error" => "Aucun fichier n'a été chargé. Erreur inconnue",
"Contacts" => "Contacts",
-"Drop a VCF file to import contacts." => "Glisser un fichier VCF pour importer des contacts.",
-"Addressbook not found." => "Carnet d'adresses introuvable.",
+"Sorry, this functionality has not been implemented yet" => "Désolé cette fonctionnalité n'a pas encore été implémentée",
+"Not implemented" => "Pas encore implémenté",
+"Couldn't get a valid address." => "Impossible de trouver une adresse valide.",
+"Error" => "Erreur",
+"This property has to be non-empty." => "Cette valeur ne doit pas être vide",
+"Couldn't serialize elements." => "Impossible de sérialiser les éléments.",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' a été appelé sans type d'arguments. Merci de rapporter un bug à bugs.owncloud.org",
+"Edit name" => "Éditer le nom",
+"No files selected for upload." => "Aucun fichiers choisis pour être chargés",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Le fichier que vous tentez de charger dépasse la taille maximum de fichier autorisée sur ce serveur.",
+"Error loading profile picture." => "Erreur pendant le chargement de la photo de profil.",
+"Select type" => "Sélectionner un type",
+"Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted." => "Certains contacts sont marqués pour être supprimés, mais ne le sont pas encore. Veuillez attendre que l'opération se termine.",
+"Do you want to merge these address books?" => "Voulez-vous fusionner ces carnets d'adresses ?",
+"Result: " => "Résultat :",
+" imported, " => "importé,",
+" failed." => "échoué.",
+"Displayname cannot be empty." => "Le nom d'affichage ne peut pas être vide.",
+"Addressbook not found: " => "Carnet d'adresse introuvable : ",
"This is not your addressbook." => "Ce n'est pas votre carnet d'adresses.",
"Contact could not be found." => "Ce contact n'a pu être trouvé.",
-"Address" => "Adresse",
-"Telephone" => "Téléphone",
-"Email" => "E-mail",
-"Organization" => "Société",
+"Jabber" => "Jabber",
+"AIM" => "Messagerie Instantanée",
+"MSN" => "MSN",
+"Twitter" => "Twitter",
+"GoogleTalk" => "GoogleTalk",
+"Facebook" => "Facebook",
+"XMPP" => "XMPP",
+"ICQ" => "ICQ",
+"Yahoo" => "Yahoo",
+"Skype" => "Skype",
+"QQ" => "QQ",
+"GaduGadu" => "GaduGadu",
"Work" => "Travail",
"Home" => "Maison",
+"Other" => "Autre",
"Mobile" => "Mobile",
"Text" => "Texte",
"Voice" => "Voix",
@@ -60,25 +92,52 @@
"Video" => "Vidéo",
"Pager" => "Bipeur",
"Internet" => "Internet",
+"Birthday" => "Anniversaire",
+"Business" => "Business",
+"Call" => "Appel",
+"Clients" => "Clients",
+"Deliverer" => "Livreur",
+"Holidays" => "Vacances",
+"Ideas" => "Idées",
+"Journey" => "Trajet",
+"Jubilee" => "Jubilé",
+"Meeting" => "Rendez-vous",
+"Personal" => "Personnel",
+"Projects" => "Projets",
+"Questions" => "Questions",
"{name}'s Birthday" => "Anniversaire de {name}",
"Contact" => "Contact",
"Add Contact" => "Ajouter un Contact",
+"Import" => "Importer",
+"Settings" => "Paramètres",
"Addressbooks" => "Carnets d'adresses",
-"Configure Address Books" => "Paramétrer carnet d'adresses",
-"New Address Book" => "Nouveau Carnet d'adresses",
-"Import from VCF" => "Importer depuis VCF",
-"CardDav Link" => "Lien CardDav",
-"Download" => "Télécharger",
-"Edit" => "Modifier",
-"Delete" => "Supprimer",
-"Download contact" => "Télécharger le contact",
-"Delete contact" => "Supprimer le contact",
+"Close" => "Fermer",
+"Keyboard shortcuts" => "Raccourcis clavier",
+"Navigation" => "Navigation",
+"Next contact in list" => "Contact suivant dans la liste",
+"Previous contact in list" => "Contact précédent dans la liste",
+"Expand/collapse current addressbook" => "Dé/Replier le carnet d'adresses courant",
+"Next addressbook" => "Carnet d'adresses suivant",
+"Previous addressbook" => "Carnet d'adresses précédent",
+"Actions" => "Actions",
+"Refresh contacts list" => "Actualiser la liste des contacts",
+"Add new contact" => "Ajouter un nouveau contact",
+"Add new addressbook" => "Ajouter un nouveau carnet d'adresses",
+"Delete current contact" => "Effacer le contact sélectionné",
"Drop photo to upload" => "Glisser une photo pour l'envoi",
+"Delete current photo" => "Supprimer la photo actuelle",
+"Edit current photo" => "Editer la photo actuelle",
+"Upload new photo" => "Envoyer une nouvelle photo",
+"Select photo from ownCloud" => "Sélectionner une photo depuis ownCloud",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Formatage personnalisé, Nom court, Nom complet, Inversé, Inversé avec virgule",
"Edit name details" => "Editer les noms",
+"Organization" => "Société",
+"Delete" => "Supprimer",
"Nickname" => "Surnom",
"Enter nickname" => "Entrer un surnom",
-"Birthday" => "Anniversaire",
+"Web site" => "Page web",
+"http://www.somesite.com" => "http://www.somesite.com",
+"Go to web site" => "Allez à la page web",
"dd-mm-yyyy" => "jj-mm-aaaa",
"Groups" => "Groupes",
"Separate groups with commas" => "Séparer les groupes avec des virgules",
@@ -86,31 +145,37 @@
"Preferred" => "Préféré",
"Please specify a valid email address." => "Merci d'entrer une adresse e-mail valide.",
"Enter email address" => "Entrer une adresse e-mail",
+"Mail to address" => "Envoyer à l'adresse",
"Delete email address" => "Supprimer l'adresse e-mail",
"Enter phone number" => "Entrer un numéro de téléphone",
"Delete phone number" => "Supprimer le numéro de téléphone",
+"Instant Messenger" => "Instant Messenger",
+"Delete IM" => "Supprimer la Messagerie Instantanée",
"View on map" => "Voir sur une carte",
"Edit address details" => "Editer les adresses",
"Add notes here." => "Ajouter des notes ici.",
"Add field" => "Ajouter un champ.",
-"Profile picture" => "Photo de profil",
"Phone" => "Téléphone",
+"Email" => "E-mail",
+"Instant Messaging" => "Messagerie instantanée",
+"Address" => "Adresse",
"Note" => "Note",
-"Delete current photo" => "Supprimer la photo actuelle",
-"Edit current photo" => "Editer la photo actuelle",
-"Upload new photo" => "Envoyer une nouvelle photo",
-"Select photo from ownCloud" => "Sélectionner une photo depuis ownCloud",
+"Download contact" => "Télécharger le contact",
+"Delete contact" => "Supprimer le contact",
+"The temporary image has been removed from cache." => "L'image temporaire a été supprimée du cache.",
"Edit address" => "Editer l'adresse",
"Type" => "Type",
"PO Box" => "Boîte postale",
+"Street address" => "Adresse postale",
+"Street and number" => "Rue et numéro",
"Extended" => "Étendu",
-"Street" => "Rue",
+"Apartment number etc." => "Numéro d'appartement, etc.",
"City" => "Ville",
"Region" => "Région",
+"E.g. state or province" => "Ex: état ou province",
"Zipcode" => "Code postal",
+"Postal code" => "Code postal",
"Country" => "Pays",
-"Edit categories" => "Editer les catégories",
-"Add" => "Ajouter",
"Addressbook" => "Carnet d'adresses",
"Hon. prefixes" => "Préfixe hon.",
"Miss" => "Mlle",
@@ -123,27 +188,43 @@
"Additional names" => "Nom supplémentaires",
"Family name" => "Nom de famille",
"Hon. suffixes" => "Suffixes hon.",
+"J.D." => "J.D.",
+"M.D." => "Dr.",
+"D.O." => "D.O.",
+"D.C." => "D.C.",
"Ph.D." => "Dr",
-"New Addressbook" => "Nouveau carnet d'adresses",
-"Edit Addressbook" => "Éditer le carnet d'adresses",
-"Displayname" => "Nom",
-"Active" => "Carnet actif",
-"Save" => "Sauvegarder",
-"Submit" => "Envoyer",
-"Cancel" => "Annuler",
+"Esq." => "Esq.",
+"Jr." => "Jr.",
+"Sn." => "Sn.",
"Import a contacts file" => "Importer un fichier de contacts",
"Please choose the addressbook" => "Choisissez le carnet d'adresses SVP",
"create a new addressbook" => "Créer un nouveau carnet d'adresses",
"Name of new addressbook" => "Nom du nouveau carnet d'adresses",
-"Import" => "Importer",
"Importing contacts" => "Importation des contacts",
+"Contacts imported successfully" => "Contacts importés avec succes",
+"Close Dialog" => "Fermer la boite de dialogue",
+"Import Addressbook" => "Importer un carnet d'adresses.",
"Select address book to import to:" => "Selectionner le carnet d'adresses à importer vers:",
+"Drop a VCF file to import contacts." => "Glisser un fichier VCF pour importer des contacts.",
"Select from HD" => "Selectionner depuis le disque dur",
"You have no contacts in your addressbook." => "Il n'y a pas de contact dans votre carnet d'adresses.",
"Add contact" => "Ajouter un contact",
-"Configure addressbooks" => "Paramétrer carnet d'adresses",
+"Select Address Books" => "Choix du carnet d'adresses",
+"Enter name" => "Saisissez le nom",
+"Enter description" => "Saisissez une description",
"CardDAV syncing addresses" => "Synchronisation des contacts CardDAV",
"more info" => "Plus d'infos",
"Primary address (Kontact et al)" => "Adresse principale",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Show CardDav link" => "Afficher le lien CardDav",
+"Show read-only VCF link" => "Afficher les liens VCF en lecture seule",
+"Share" => "Partager",
+"Download" => "Télécharger",
+"Edit" => "Modifier",
+"New Address Book" => "Nouveau Carnet d'adresses",
+"Name" => "Nom",
+"Description" => "Description",
+"Save" => "Sauvegarder",
+"Cancel" => "Annuler",
+"More..." => "Plus…"
);
diff --git a/apps/contacts/l10n/gl.php b/apps/contacts/l10n/gl.php
index bc3ec7449c9..f25219b22ce 100644
--- a/apps/contacts/l10n/gl.php
+++ b/apps/contacts/l10n/gl.php
@@ -1,58 +1,157 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Produciuse un erro (des)activando a axenda.",
+"id is not set." => "non se estableceu o id.",
+"Cannot update addressbook with an empty name." => "Non se pode actualizar a libreta de enderezos sen completar o nome.",
+"Error updating addressbook." => "Produciuse un erro actualizando a axenda.",
+"No ID provided" => "Non se proveeu ID",
+"Error setting checksum." => "Erro establecendo a suma de verificación",
+"No categories selected for deletion." => "Non se seleccionaron categorías para borrado.",
+"No address books found." => "Non se atoparon libretas de enderezos.",
+"No contacts found." => "Non se atoparon contactos.",
"There was an error adding the contact." => "Produciuse un erro engadindo o contacto.",
+"element name is not set." => "non se nomeou o elemento.",
"Cannot add empty property." => "Non se pode engadir unha propiedade baleira.",
"At least one of the address fields has to be filled out." => "Polo menos un dos campos do enderezo ten que ser cuberto.",
-"Error adding contact property." => "Produciuse un erro engadindo unha propiedade do contacto.",
-"Error adding addressbook." => "Produciuse un erro engadindo a axenda.",
-"Error activating addressbook." => "Produciuse un erro activando a axenda.",
+"Trying to add duplicate property: " => "Tentando engadir propiedade duplicada: ",
"Information about vCard is incorrect. Please reload the page." => "A información sobre a vCard é incorrecta. Por favor volva cargar a páxina.",
-"Error deleting contact property." => "Produciuse un erro borrando a propiedade do contacto.",
-"Error updating contact property." => "Produciuse un erro actualizando a propiedade do contacto.",
-"Error updating addressbook." => "Produciuse un erro actualizando a axenda.",
+"Missing ID" => "ID perdido",
+"Error parsing VCard for ID: \"" => "Erro procesando a VCard para o ID: \"",
+"checksum is not set." => "non se estableceu a suma de verificación.",
+"Information about vCard is incorrect. Please reload the page: " => "A información sobre a vCard é incorrecta. Por favor, recargue a páxina: ",
+"No contact ID was submitted." => "Non se enviou ningún ID de contacto.",
+"Error reading contact photo." => "Erro lendo a fotografía do contacto.",
+"Error saving temporary file." => "Erro gardando o ficheiro temporal.",
+"The loading photo is not valid." => "A fotografía cargada non é válida.",
+"Contact ID is missing." => "Falta o ID do contacto.",
+"No photo path was submitted." => "Non se enviou a ruta a unha foto.",
+"File doesn't exist:" => "O ficheiro non existe:",
+"Error loading image." => "Erro cargando imaxe.",
+"Error getting contact object." => "Erro obtendo o obxeto contacto.",
+"Error getting PHOTO property." => "Erro obtendo a propiedade PHOTO.",
+"Error saving contact." => "Erro gardando o contacto.",
+"Error resizing image" => "Erro cambiando o tamaño da imaxe",
+"Error cropping image" => "Erro recortando a imaxe",
+"Error creating temporary image" => "Erro creando a imaxe temporal",
+"Error finding image: " => "Erro buscando a imaxe: ",
+"Error uploading contacts to storage." => "Erro subindo os contactos ao almacén.",
+"There is no error, the file uploaded with success" => "Non houbo erros, o ficheiro subeuse con éxito",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "O ficheiro subido supera a directiva upload_max_filesize no php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "O ficheiro subido supera a directiva MAX_FILE_SIZE especificada no formulario HTML",
+"The uploaded file was only partially uploaded" => "O ficheiro so foi parcialmente subido",
+"No file was uploaded" => "Non se subeu ningún ficheiro",
+"Missing a temporary folder" => "Falta o cartafol temporal",
+"Couldn't save temporary image: " => "Non se puido gardar a imaxe temporal: ",
+"Couldn't load temporary image: " => "Non se puido cargar a imaxe temporal: ",
+"No file was uploaded. Unknown error" => "Non se subeu ningún ficheiro. Erro descoñecido.",
"Contacts" => "Contactos",
+"Sorry, this functionality has not been implemented yet" => "Sentímolo, esta función aínda non foi implementada.",
+"Not implemented" => "Non implementada.",
+"Couldn't get a valid address." => "Non se puido obter un enderezo de correo válido.",
+"Error" => "Erro",
+"This property has to be non-empty." => "Esta propiedade non pode quedar baldeira.",
+"Couldn't serialize elements." => "Non se puido serializar os elementos.",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' chamado sen argumento. Por favor, informe en bugs.owncloud.org",
+"Edit name" => "Editar nome",
+"No files selected for upload." => "Sen ficheiros escollidos para subir.",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "O ficheiro que tenta subir supera o tamaño máximo permitido neste servidor.",
+"Select type" => "Seleccione tipo",
+"Result: " => "Resultado: ",
+" imported, " => " importado, ",
+" failed." => " fallou.",
"This is not your addressbook." => "Esta non é a súa axenda.",
"Contact could not be found." => "Non se atopou o contacto.",
-"Address" => "Enderezo",
-"Telephone" => "Teléfono",
-"Email" => "Correo electrónico",
-"Organization" => "Organización",
"Work" => "Traballo",
"Home" => "Casa",
"Mobile" => "Móbil",
"Text" => "Texto",
"Voice" => "Voz",
+"Message" => "Mensaxe",
"Fax" => "Fax",
"Video" => "Vídeo",
"Pager" => "Paxinador",
+"Internet" => "Internet",
+"Birthday" => "Aniversario",
+"{name}'s Birthday" => "Cumpleanos de {name}",
"Contact" => "Contacto",
"Add Contact" => "Engadir contacto",
+"Import" => "Importar",
"Addressbooks" => "Axendas",
-"New Address Book" => "Nova axenda",
-"CardDav Link" => "Ligazón CardDav",
-"Download" => "Descargar",
-"Edit" => "Editar",
+"Close" => "Pechar",
+"Drop photo to upload" => "Solte a foto a subir",
+"Delete current photo" => "Borrar foto actual",
+"Edit current photo" => "Editar a foto actual",
+"Upload new photo" => "Subir unha nova foto",
+"Select photo from ownCloud" => "Escoller foto desde ownCloud",
+"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Formato personalizado, Nome corto, Nome completo, Inverso ou Inverso con coma",
+"Edit name details" => "Editar detalles do nome",
+"Organization" => "Organización",
"Delete" => "Eliminar",
-"Download contact" => "Descargar contacto",
-"Delete contact" => "Borrar contacto",
-"Birthday" => "Aniversario",
+"Nickname" => "Apodo",
+"Enter nickname" => "Introuza apodo",
+"dd-mm-yyyy" => "dd-mm-yyyy",
+"Groups" => "Grupos",
+"Separate groups with commas" => "Separe grupos con comas",
+"Edit groups" => "Editar grupos",
"Preferred" => "Preferido",
+"Please specify a valid email address." => "Por favor indique un enderezo de correo electrónico válido.",
+"Enter email address" => "Introduza enderezo de correo electrónico",
+"Mail to address" => "Correo ao enderezo",
+"Delete email address" => "Borrar enderezo de correo electrónico",
+"Enter phone number" => "Introducir número de teléfono",
+"Delete phone number" => "Borrar número de teléfono",
+"View on map" => "Ver no mapa",
+"Edit address details" => "Editar detalles do enderezo",
+"Add notes here." => "Engadir aquí as notas.",
+"Add field" => "Engadir campo",
"Phone" => "Teléfono",
+"Email" => "Correo electrónico",
+"Address" => "Enderezo",
+"Note" => "Nota",
+"Download contact" => "Descargar contacto",
+"Delete contact" => "Borrar contacto",
+"The temporary image has been removed from cache." => "A imaxe temporal foi eliminada da caché.",
+"Edit address" => "Editar enderezo",
"Type" => "Escribir",
"PO Box" => "Apartado de correos",
"Extended" => "Ampliado",
-"Street" => "Rúa",
"City" => "Cidade",
"Region" => "Autonomía",
"Zipcode" => "Código postal",
"Country" => "País",
-"Add" => "Engadir",
"Addressbook" => "Axenda",
-"New Addressbook" => "Nova axenda",
-"Edit Addressbook" => "Editar axenda",
-"Displayname" => "Nome a mostrar",
-"Active" => "Activo",
+"Hon. prefixes" => "Prefixos honoríficos",
+"Miss" => "Srta",
+"Ms" => "Sra/Srta",
+"Mr" => "Sr",
+"Sir" => "Sir",
+"Mrs" => "Sra",
+"Dr" => "Dr",
+"Given name" => "Apodo",
+"Additional names" => "Nomes adicionais",
+"Family name" => "Nome familiar",
+"Hon. suffixes" => "Sufixos honorarios",
+"J.D." => "J.D.",
+"M.D." => "M.D.",
+"D.O." => "D.O.",
+"D.C." => "D.C.",
+"Ph.D." => "Ph.D.",
+"Esq." => "Esq.",
+"Jr." => "Jr.",
+"Sn." => "Sn.",
+"Import a contacts file" => "Importar un ficheiro de contactos",
+"Please choose the addressbook" => "Por favor escolla unha libreta de enderezos",
+"create a new addressbook" => "crear unha nova libreta de enderezos",
+"Name of new addressbook" => "Nome da nova libreta de enderezos",
+"Importing contacts" => "Importando contactos",
+"You have no contacts in your addressbook." => "Non ten contactos na súa libreta de enderezos.",
+"Add contact" => "Engadir contacto",
+"CardDAV syncing addresses" => "Enderezos CardDAV a sincronizar",
+"more info" => "máis información",
+"Primary address (Kontact et al)" => "Enderezo primario (Kontact et al)",
+"iOS/OS X" => "iOS/OS X",
+"Download" => "Descargar",
+"Edit" => "Editar",
+"New Address Book" => "Nova axenda",
"Save" => "Gardar",
-"Submit" => "Enviar",
"Cancel" => "Cancelar"
);
diff --git a/apps/contacts/l10n/he.php b/apps/contacts/l10n/he.php
index 6e40ad71e1d..b224403ad22 100644
--- a/apps/contacts/l10n/he.php
+++ b/apps/contacts/l10n/he.php
@@ -1,65 +1,135 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "שגי××” בהפעלה ×ו בנטרול פנקס הכתובות.",
-"There was an error adding the contact." => "×ירעה שגי××” בעת הוספת ×יש הקשר.",
-"Cannot add empty property." => "×œ× × ×™×ª×Ÿ להוסיף מ×פיין ריק.",
-"At least one of the address fields has to be filled out." => "יש ×œ×ž×œ× ×œ×¤×—×•×ª ×חד משדות הכתובת.",
-"Trying to add duplicate property: " => "ניסיון להוספת מ×פיין כפול: ",
-"Error adding contact property." => "שגי××” בהוספת מ×פיין ל×יש הקשר.",
+"id is not set." => "מספר מזהה ×œ× × ×§×‘×¢.",
+"Cannot update addressbook with an empty name." => "××™ ×פשר לעדכן ספר כתובות ×œ×œ× ×©×",
+"Error updating addressbook." => "שגי××” בעדכון פנקס הכתובות.",
"No ID provided" => "×œ× ×¦×•×™×Ÿ מזהה",
"Error setting checksum." => "שגי××” בהגדרת נתוני הביקורת.",
"No categories selected for deletion." => "×œ× × ×‘×—×•×¨ קטגוריות למחיקה.",
"No address books found." => "×œ× × ×ž×¦×ו פנקסי כתובות.",
"No contacts found." => "×œ× × ×ž×¦×ו ×נשי קשר.",
-"Missing ID" => "מזהה חסר",
-"Error adding addressbook." => "שגי××” בהוספת פנקס הכתובות.",
-"Error activating addressbook." => "שגי××” בהפעלת פנקס הכתובות.",
+"There was an error adding the contact." => "×ירעה שגי××” בעת הוספת ×יש הקשר.",
+"element name is not set." => "×©× ×”×למנט ×œ× × ×§×‘×¢.",
+"Cannot add empty property." => "×œ× × ×™×ª×Ÿ להוסיף מ×פיין ריק.",
+"At least one of the address fields has to be filled out." => "יש ×œ×ž×œ× ×œ×¤×—×•×ª ×חד משדות הכתובת.",
+"Trying to add duplicate property: " => "ניסיון להוספת מ×פיין כפול: ",
"Information about vCard is incorrect. Please reload the page." => "המידע ×ודות vCard ×ינו נכון. × × ×œ×˜×¢×•×Ÿ מחדש ×ת הדף.",
-"Error deleting contact property." => "שגי××” במחיקת מ×פיין של ×יש הקשר.",
-"Error updating contact property." => "שגי××” בעדכון המ×פיין של ×יש הקשר.",
-"Error updating addressbook." => "שגי××” בעדכון פנקס הכתובות.",
+"Missing ID" => "מזהה חסר",
+"Error parsing VCard for ID: \"" => "שגי××” בפענוח ×” VCard עבור מספר המזהה: \"",
+"checksum is not set." => "×¡×™×›×•× ×‘×™×§×•×¨×ª ×œ× × ×§×‘×¢.",
+"Information about vCard is incorrect. Please reload the page: " => "המידע עבור ×” vCard ×ינו נכון. ×× × ×˜×¢×Ÿ ×ת העמוד: ",
+"Something went FUBAR. " => "משהו ×œ× ×”×ª× ×”×œ כצפוי.",
+"No contact ID was submitted." => "מספר מזהה של ×ישר הקשר ×œ× × ×©×œ×—.",
+"Error reading contact photo." => "שגי××” בקרי×ת תמונת ×יש הקשר.",
+"Error saving temporary file." => "שגי××” בשמירת קובץ זמני.",
+"The loading photo is not valid." => "התמונה הנטענת ××™× ×” תקנית.",
+"Contact ID is missing." => "מספר מזהה של ×ישר הקשר חסר.",
+"No photo path was submitted." => "כתובת התמונה ×œ× × ×©×œ×—×”",
+"File doesn't exist:" => "קובץ ×œ× ×§×™×™×:",
+"Error loading image." => "שגי××” בטעינת התמונה.",
+"Error getting contact object." => "שגי××” בקבלת ×ובי×קט ×יש הקשר",
+"Error getting PHOTO property." => "שגי××” בקבלת מידע של תמונה",
+"Error saving contact." => "שגי××” בשמירת ×יש הקשר",
+"Error resizing image" => "שגי××” בשינוי גודל התמונה",
+"Error uploading contacts to storage." => "התרשה שגי××” בהעל×ת ×נשי הקשר ל×כסון.",
+"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",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "הקובץ שהועלה גדוך מהערך MAX_FILE_SIZE שהוגדר בתופס HTML",
+"The uploaded file was only partially uploaded" => "הקובץ הועלה ב×ופן חלקי בלבד",
+"No file was uploaded" => "×©×•× ×§×•×‘×¥ ×œ× ×”×•×¢×œ×”",
+"Missing a temporary folder" => "תקיה זמנית חסרה",
"Contacts" => "×נשי קשר",
"This is not your addressbook." => "זהו ×ינו ספר הכתובות שלך",
"Contact could not be found." => "×œ× × ×™×ª×Ÿ ל×תר ×יש קשר",
-"Address" => "כתובת",
-"Telephone" => "טלפון",
-"Email" => "דו×ר ×לקטרוני",
-"Organization" => "×רגון",
"Work" => "עבודה",
"Home" => "בית",
"Mobile" => "נייד",
"Text" => "טקסט",
"Voice" => "קולי",
+"Message" => "הודעה",
"Fax" => "פקס",
"Video" => "ויד×ו",
"Pager" => "זימונית",
+"Internet" => "×ינטרנט",
+"Birthday" => "×™×•× ×”×•×œ×“×ª",
+"{name}'s Birthday" => "×™×•× ×”×”×•×œ×“×ª של {name}",
"Contact" => "×יש קשר",
"Add Contact" => "הוספת ×יש קשר",
+"Import" => "יב×",
"Addressbooks" => "פנקסי כתובות",
-"New Address Book" => "פנקס כתובות חדש",
-"CardDav Link" => "קישור ",
-"Download" => "הורדה",
-"Edit" => "עריכה",
+"Drop photo to upload" => "גרור ושחרר תמונה בשביל להעלות",
+"Delete current photo" => "מחק תמונה נוכחית",
+"Edit current photo" => "ערוך תמונה נוכחית",
+"Upload new photo" => "העלה תמונה חדשה",
+"Select photo from ownCloud" => "בחר תמונה מ ownCloud",
+"Edit name details" => "ערוך פרטי ש×",
+"Organization" => "×רגון",
"Delete" => "מחיקה",
-"Download contact" => "הורדת ×יש קשר",
-"Delete contact" => "מחיקת ×יש קשר",
-"Birthday" => "×™×•× ×”×•×œ×“×ª",
+"Nickname" => "כינוי",
+"Enter nickname" => "הכנס כינוי",
+"dd-mm-yyyy" => "dd-mm-yyyy",
+"Groups" => "קבוצות",
+"Separate groups with commas" => "הפרד קבוצות ×¢× ×¤×¡×™×§×™×",
+"Edit groups" => "ערוך קבוצות",
"Preferred" => "מועדף",
+"Please specify a valid email address." => "×× × ×”×–×Ÿ כתובת דו×\"ל חוקית",
+"Enter email address" => "הזן כתובת דו×\"ל",
+"Mail to address" => "כתובת",
+"Delete email address" => "מחק כתובת דו×\"ל",
+"Enter phone number" => "הכנס מספר טלפון",
+"Delete phone number" => "מחק מספר טלפון",
+"View on map" => "ר××” במפה",
+"Edit address details" => "ערוך פרטי כתובת",
+"Add notes here." => "הוסף הערות ×›×ן.",
+"Add field" => "הוסף שדה",
"Phone" => "טלפון",
+"Email" => "דו×ר ×לקטרוני",
+"Address" => "כתובת",
+"Note" => "הערה",
+"Download contact" => "הורדת ×יש קשר",
+"Delete contact" => "מחיקת ×יש קשר",
+"Edit address" => "ערוך כתובת",
"Type" => "סוג",
"PO Box" => "×ª× ×“×•×ר",
"Extended" => "מורחב",
-"Street" => "רחוב",
"City" => "עיר",
"Region" => "×זור",
"Zipcode" => "מיקוד",
"Country" => "מדינה",
-"Add" => "הוספה",
"Addressbook" => "פנקס כתובות",
-"New Addressbook" => "פנקס כתובות חדש",
-"Edit Addressbook" => "עריכת פנקס הכתובות",
-"Displayname" => "×©× ×”×ª×¦×•×’×”",
-"Active" => "פעיל",
+"Hon. prefixes" => "קידומות ש×",
+"Miss" => "גב'",
+"Ms" => "גב'",
+"Mr" => "מר'",
+"Sir" => "×דון",
+"Mrs" => "גב'",
+"Dr" => "ד\"ר",
+"Given name" => "ש×",
+"Additional names" => "שמות נוספי×",
+"Family name" => "×©× ×ž×©×¤×—×”",
+"Hon. suffixes" => "סיומות ש×",
+"J.D." => "J.D.",
+"M.D." => "M.D.",
+"D.O." => "D.O.",
+"D.C." => "D.C.",
+"Ph.D." => "Ph.D.",
+"Esq." => "Esq.",
+"Jr." => "Jr.",
+"Sn." => "Sn.",
+"Import a contacts file" => "×™×‘× ×§×•×‘×¥ ×נשי קשר",
+"Please choose the addressbook" => "×× × ×‘×—×¨ ספר כתובות",
+"create a new addressbook" => "צור ספר כתובות חדש",
+"Name of new addressbook" => "×©× ×¡×¤×¨ כתובות החדש",
+"Importing contacts" => "×ž×™×‘× ×נשי קשר",
+"You have no contacts in your addressbook." => "×יך לך ×נשי קשר בספר הכתובות",
+"Add contact" => "הוסף ×יש קשר",
+"CardDAV syncing addresses" => "CardDAV מסנכרן כתובות",
+"more info" => "מידע נוסף",
+"Primary address (Kontact et al)" => "כתובת ר×שית",
+"iOS/OS X" => "iOS/OS X",
+"Download" => "הורדה",
+"Edit" => "עריכה",
+"New Address Book" => "פנקס כתובות חדש",
"Save" => "שמירה",
-"Submit" => "ביצוע",
"Cancel" => "ביטול"
);
diff --git a/apps/contacts/l10n/hr.php b/apps/contacts/l10n/hr.php
index d381bf4fa90..769a6ced0fd 100644
--- a/apps/contacts/l10n/hr.php
+++ b/apps/contacts/l10n/hr.php
@@ -1,38 +1,69 @@
<?php $TRANSLATIONS = array(
+"Error (de)activating addressbook." => "Pogreška pri (de)aktivaciji adresara.",
+"id is not set." => "id nije postavljen.",
+"Cannot update addressbook with an empty name." => "Ne mogu ažurirati adresar sa praznim nazivom.",
+"Error updating addressbook." => "Pogreška pri ažuriranju adresara.",
+"No ID provided" => "Nema dodijeljenog ID identifikatora",
+"Error setting checksum." => "Pogreška pri postavljanju checksuma.",
+"No categories selected for deletion." => "Niti jedna kategorija nije odabrana za brisanje.",
+"No address books found." => "Nema adresara.",
+"No contacts found." => "Nema kontakata.",
+"There was an error adding the contact." => "Dogodila se pogreška prilikom dodavanja kontakta.",
+"element name is not set." => "naziv elementa nije postavljen.",
+"Cannot add empty property." => "Prazno svojstvo se ne može dodati.",
+"At least one of the address fields has to be filled out." => "Morate ispuniti barem jedno od adresnih polja.",
+"Trying to add duplicate property: " => "Pokušali ste dodati duplo svojstvo:",
"Information about vCard is incorrect. Please reload the page." => "Informacija o vCard je neispravna. Osvježite stranicu.",
+"Missing ID" => "Nedostupan ID identifikator",
+"Error parsing VCard for ID: \"" => "PogreÅ¡ka pri raÅ¡Älanjivanju VCard za ID:",
+"checksum is not set." => "checksum nije postavljen.",
+"Information about vCard is incorrect. Please reload the page: " => "Informacije o VCard su pogreÅ¡ne. Molimo, uÄitajte ponovno stranicu:",
+"Something went FUBAR. " => "Nešto je otišlo... krivo...",
+"No contact ID was submitted." => "ID kontakta nije podnešen.",
+"Error reading contact photo." => "PogreÅ¡ka pri Äitanju kontakt fotografije.",
+"Error saving temporary file." => "Pogreška pri spremanju privremene datoteke.",
+"The loading photo is not valid." => "Fotografija nije valjana.",
+"Contact ID is missing." => "ID kontakta nije dostupan.",
+"No photo path was submitted." => "Putanja do fotografije nije podnešena.",
"File doesn't exist:" => "Datoteka ne postoji:",
+"Error loading image." => "PogreÅ¡ka pri uÄitavanju slike.",
+"Error uploading contacts to storage." => "Pogreška pri slanju kontakata.",
+"There is no error, the file uploaded with success" => "Nema pogreške, datoteka je poslana uspješno.",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "VeliÄina poslane datoteke prelazi veliÄinu prikazanu u upload_max_filesize direktivi u konfiguracijskoj datoteci php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Poslana datoteka prelazi veliÄinu prikazanu u MAX_FILE_SIZE direktivi u HTML formi",
+"The uploaded file was only partially uploaded" => "Poslana datoteka je parcijalno poslana",
+"No file was uploaded" => "Datoteka nije poslana",
+"Missing a temporary folder" => "Nedostaje privremeni direktorij",
"Contacts" => "Kontakti",
"This is not your addressbook." => "Ovo nije vaš adresar.",
"Contact could not be found." => "Kontakt ne postoji.",
-"Address" => "Adresa",
-"Telephone" => "Telefon",
-"Email" => "E-mail",
-"Organization" => "Organizacija",
"Work" => "Posao",
"Home" => "Kuća",
"Mobile" => "Mobitel",
"Text" => "Tekst",
"Voice" => "Glasovno",
+"Message" => "Poruka",
"Fax" => "Fax",
"Video" => "Video",
"Pager" => "Pager",
+"Internet" => "Internet",
+"Birthday" => "Rođendan",
+"{name}'s Birthday" => "{name} Rođendan",
"Contact" => "Kontakt",
"Add Contact" => "Dodaj kontakt",
+"Import" => "Uvezi",
"Addressbooks" => "Adresari",
-"New Address Book" => "Novi adresar",
-"CardDav Link" => "CardDav poveznica",
-"Download" => "Preuzimanje",
-"Edit" => "Uredi",
-"Delete" => "Obriši",
-"Download contact" => "Preuzmi kontakt",
-"Delete contact" => "Izbriši kontakt",
+"Drop photo to upload" => "Dovucite fotografiju za slanje",
+"Edit current photo" => "Uredi trenutnu sliku",
"Edit name details" => "Uredi detalje imena",
+"Organization" => "Organizacija",
+"Delete" => "Obriši",
"Nickname" => "Nadimak",
"Enter nickname" => "Unesi nadimank",
-"Birthday" => "Rođendan",
"dd-mm-yyyy" => "dd-mm-yyyy",
"Groups" => "Grupe",
"Edit groups" => "Uredi grupe",
+"Preferred" => "Preferirano",
"Enter email address" => "Unesi email adresu",
"Enter phone number" => "Unesi broj telefona",
"View on map" => "Prikaži na karti",
@@ -40,24 +71,23 @@
"Add notes here." => "Dodaj bilješke ovdje.",
"Add field" => "Dodaj polje",
"Phone" => "Telefon",
+"Email" => "E-mail",
+"Address" => "Adresa",
"Note" => "Bilješka",
-"Edit current photo" => "Uredi trenutnu sliku",
+"Download contact" => "Preuzmi kontakt",
+"Delete contact" => "Izbriši kontakt",
"Edit address" => "Uredi adresu",
"Type" => "Tip",
"PO Box" => "Poštanski Pretinac",
"Extended" => "Prošireno",
-"Street" => "Ulica",
"City" => "Grad",
"Region" => "Regija",
"Zipcode" => "Poštanski broj",
"Country" => "Država",
-"Edit categories" => "Uredi kategorije",
-"Add" => "Dodaj",
"Addressbook" => "Adresar",
-"New Addressbook" => "Novi adresar",
-"Edit Addressbook" => "Uredi adresar",
+"Download" => "Preuzimanje",
+"Edit" => "Uredi",
+"New Address Book" => "Novi adresar",
"Save" => "Spremi",
-"Submit" => "Pošalji",
-"Cancel" => "Prekini",
-"Import" => "Uvezi"
+"Cancel" => "Prekini"
);
diff --git a/apps/contacts/l10n/hu_HU.php b/apps/contacts/l10n/hu_HU.php
index 68f7b2607eb..4febe9c29f2 100644
--- a/apps/contacts/l10n/hu_HU.php
+++ b/apps/contacts/l10n/hu_HU.php
@@ -1,39 +1,39 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Címlista (de)aktiválása sikertelen",
-"There was an error adding the contact." => "Hiba a kapcsolat hozzáadásakor",
-"Cannot add empty property." => "Nem adható hozzá üres tulajdonság",
-"At least one of the address fields has to be filled out." => "Legalább egy címmező kitöltendő",
-"Trying to add duplicate property: " => "Kísérlet dupla tulajdonság hozzáadására: ",
-"Error adding contact property." => "Hiba a kapcsolat-tulajdonság hozzáadásakor",
+"id is not set." => "ID nincs beállítva",
+"Cannot update addressbook with an empty name." => "Üres névvel nem frissíthető a címlista",
+"Error updating addressbook." => "Hiba a címlista frissítésekor",
"No ID provided" => "Nincs ID megadva",
"Error setting checksum." => "Hiba az ellenőrzőösszeg beállításakor",
"No categories selected for deletion." => "Nincs kiválasztva törlendő kategória",
"No address books found." => "Nem található címlista",
"No contacts found." => "Nem található kontakt",
+"There was an error adding the contact." => "Hiba a kapcsolat hozzáadásakor",
+"element name is not set." => "az elem neve nincs beállítva",
+"Cannot add empty property." => "Nem adható hozzá üres tulajdonság",
+"At least one of the address fields has to be filled out." => "Legalább egy címmező kitöltendő",
+"Trying to add duplicate property: " => "Kísérlet dupla tulajdonság hozzáadására: ",
+"Information about vCard is incorrect. Please reload the page." => "A vCardról szóló információ helytelen. Töltsd újra az oldalt.",
"Missing ID" => "Hiányzó ID",
"Error parsing VCard for ID: \"" => "VCard elemzése sikertelen a következő ID-hoz: \"",
-"Cannot add addressbook with an empty name." => "Nem adható hozzá névtelen címlista",
-"Error adding addressbook." => "Hiba a címlista hozzáadásakor",
-"Error activating addressbook." => "Címlista aktiválása sikertelen",
+"checksum is not set." => "az ellenőrzőösszeg nincs beállítva",
+"Information about vCard is incorrect. Please reload the page: " => "Helytelen információ a vCardról. Töltse újra az oldalt: ",
+"Something went FUBAR. " => "Valami balul sült el.",
"No contact ID was submitted." => "Nincs ID megadva a kontakthoz",
"Error reading contact photo." => "A kontakt képének beolvasása sikertelen",
"Error saving temporary file." => "Ideiglenes fájl mentése sikertelen",
"The loading photo is not valid." => "A kép érvénytelen",
-"id is not set." => "ID nincs beállítva",
-"Information about vCard is incorrect. Please reload the page." => "A vCardról szóló információ helytelen. Töltsd újra az oldalt.",
-"Error deleting contact property." => "Hiba a kapcsolat-tulajdonság törlésekor",
"Contact ID is missing." => "Hiányzik a kapcsolat ID",
-"Missing contact id." => "Hiányzik a kontakt ID",
"No photo path was submitted." => "Nincs fénykép-útvonal megadva",
"File doesn't exist:" => "A fájl nem létezik:",
"Error loading image." => "Kép betöltése sikertelen",
-"element name is not set." => "az elem neve nincs beállítva",
-"checksum is not set." => "az ellenőrzőösszeg nincs beállítva",
-"Information about vCard is incorrect. Please reload the page: " => "Helytelen információ a vCardról. Töltse újra az oldalt: ",
-"Something went FUBAR. " => "Valami balul sült el.",
-"Error updating contact property." => "Hiba a kapcsolat-tulajdonság frissítésekor",
-"Cannot update addressbook with an empty name." => "Üres névvel nem frissíthető a címlista",
-"Error updating addressbook." => "Hiba a címlista frissítésekor",
+"Error getting contact object." => "A kontakt-objektum feldolgozása sikertelen",
+"Error getting PHOTO property." => "A PHOTO-tulajdonság feldolgozása sikertelen",
+"Error saving contact." => "A kontakt mentése sikertelen",
+"Error resizing image" => "Képméretezés sikertelen",
+"Error cropping image" => "Képvágás sikertelen",
+"Error creating temporary image" => "Ideiglenes kép létrehozása sikertelen",
+"Error finding image: " => "A kép nem található",
"Error uploading contacts to storage." => "Hiba a kapcsolatok feltöltésekor",
"There is no error, the file uploaded with success" => "Nincs hiba, a fájl sikeresen feltöltődött",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "A feltöltött fájl mérete meghaladja az upload_max_filesize értéket a php.ini-ben",
@@ -41,15 +41,26 @@
"The uploaded file was only partially uploaded" => "A fájl csak részlegesen lett feltöltve",
"No file was uploaded" => "Nincs feltöltött fájl",
"Missing a temporary folder" => "Hiányzik az ideiglenes könyvtár",
+"Couldn't save temporary image: " => "Ideiglenes kép létrehozása sikertelen",
+"Couldn't load temporary image: " => "Ideiglenes kép betöltése sikertelen",
+"No file was uploaded. Unknown error" => "Nem történt feltöltés. Ismeretlen hiba",
"Contacts" => "Kapcsolatok",
-"Drop a VCF file to import contacts." => "Húzza ide a VCF fájlt a kapcsolatok importálásához",
-"Addressbook not found." => "Címlista nem található",
+"Sorry, this functionality has not been implemented yet" => "Sajnáljuk, ez a funkció még nem támogatott",
+"Not implemented" => "Nem támogatott",
+"Couldn't get a valid address." => "Érvényes cím lekérése sikertelen",
+"Error" => "Hiba",
+"This property has to be non-empty." => "Ezt a tulajdonságot muszáj kitölteni",
+"Couldn't serialize elements." => "Sorbarakás sikertelen",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "A 'deleteProperty' argumentum nélkül lett meghívva. Kérjük, jelezze a hibát.",
+"Edit name" => "Név szerkesztése",
+"No files selected for upload." => "Nincs kiválasztva feltöltendő fájl",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "A feltöltendő fájl mérete meghaladja a megengedett mértéket",
+"Select type" => "Típus kiválasztása",
+"Result: " => "Eredmény: ",
+" imported, " => " beimportálva, ",
+" failed." => " sikertelen",
"This is not your addressbook." => "Ez nem a te címjegyzéked.",
"Contact could not be found." => "Kapcsolat nem található.",
-"Address" => "Cím",
-"Telephone" => "Telefonszám",
-"Email" => "E-mail",
-"Organization" => "Szervezet",
"Work" => "Munkahelyi",
"Home" => "Otthoni",
"Mobile" => "Mobiltelefonszám",
@@ -60,25 +71,24 @@
"Video" => "Video",
"Pager" => "Személyhívó",
"Internet" => "Internet",
+"Birthday" => "Születésnap",
"{name}'s Birthday" => "{name} születésnapja",
"Contact" => "Kapcsolat",
"Add Contact" => "Kapcsolat hozzáadása",
+"Import" => "Import",
"Addressbooks" => "Címlisták",
-"Configure Address Books" => "Címlisták beállítása",
-"New Address Book" => "Új címlista",
-"Import from VCF" => "Importálás VCF-ből",
-"CardDav Link" => "CardDav hivatkozás",
-"Download" => "Letöltés",
-"Edit" => "Szerkesztés",
-"Delete" => "Törlés",
-"Download contact" => "Kapcsolat letöltése",
-"Delete contact" => "Kapcsolat törlése",
+"Close" => "Bezár",
"Drop photo to upload" => "Húzza ide a feltöltendő képet",
+"Delete current photo" => "Aktuális kép törlése",
+"Edit current photo" => "Aktuális kép szerkesztése",
+"Upload new photo" => "Új kép feltöltése",
+"Select photo from ownCloud" => "Kép kiválasztása ownCloud-ból",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Formátum egyedi, Rövid név, Teljes név, Visszafelé vagy Visszafelé vesszővel",
"Edit name details" => "Név részleteinek szerkesztése",
+"Organization" => "Szervezet",
+"Delete" => "Törlés",
"Nickname" => "Becenév",
"Enter nickname" => "Becenév megadása",
-"Birthday" => "Születésnap",
"dd-mm-yyyy" => "yyyy-mm-dd",
"Groups" => "Csoportok",
"Separate groups with commas" => "Vesszővel válassza el a csoportokat",
@@ -94,24 +104,21 @@
"Edit address details" => "Cím részleteinek szerkesztése",
"Add notes here." => "Megjegyzések",
"Add field" => "Mező hozzáadása",
-"Profile picture" => "Profilkép",
"Phone" => "Telefonszám",
+"Email" => "E-mail",
+"Address" => "Cím",
"Note" => "Jegyzet",
-"Delete current photo" => "Aktuális kép törlése",
-"Edit current photo" => "Aktuális kép szerkesztése",
-"Upload new photo" => "Új kép feltöltése",
-"Select photo from ownCloud" => "Kép kiválasztása ownCloud-ból",
+"Download contact" => "Kapcsolat letöltése",
+"Delete contact" => "Kapcsolat törlése",
+"The temporary image has been removed from cache." => "Az ideiglenes kép el lett távolítva a gyorsítótárból",
"Edit address" => "Cím szerkesztése",
"Type" => "Típus",
"PO Box" => "Postafiók",
"Extended" => "Kiterjesztett",
-"Street" => "Utca",
"City" => "Város",
"Region" => "Megye",
"Zipcode" => "Irányítószám",
"Country" => "Ország",
-"Edit categories" => "Kategóriák szerkesztése",
-"Add" => "Hozzáad",
"Addressbook" => "Címlista",
"Hon. prefixes" => "Előtag",
"Miss" => "Miss",
@@ -132,26 +139,20 @@
"Esq." => "Esq.",
"Jr." => "Ifj.",
"Sn." => "Id.",
-"New Addressbook" => "Új Címlista",
-"Edit Addressbook" => "Címlista szerkesztése",
-"Displayname" => "Megjelenített név",
-"Active" => "Aktív",
-"Save" => "Mentés",
-"Submit" => "Elküld",
-"Cancel" => "Mégsem",
"Import a contacts file" => "Kapcsolat-fájl importálása",
"Please choose the addressbook" => "Válassza ki a címlistát",
"create a new addressbook" => "Címlista létrehozása",
"Name of new addressbook" => "Új címlista neve",
-"Import" => "Import",
"Importing contacts" => "Kapcsolatok importálása",
-"Select address book to import to:" => "Melyik címlistába történjen az importálás:",
-"Select from HD" => "Kiválasztás merevlemezről",
"You have no contacts in your addressbook." => "Nincsenek kapcsolatok a címlistában",
"Add contact" => "Kapcsolat hozzáadása",
-"Configure addressbooks" => "Címlisták beállítása",
"CardDAV syncing addresses" => "CardDAV szinkronizációs címek",
"more info" => "további információ",
"Primary address (Kontact et al)" => "Elsődleges cím",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Download" => "Letöltés",
+"Edit" => "Szerkesztés",
+"New Address Book" => "Új címlista",
+"Save" => "Mentés",
+"Cancel" => "Mégsem"
);
diff --git a/apps/contacts/l10n/ia.php b/apps/contacts/l10n/ia.php
index f420b48d842..4d455f7c976 100644
--- a/apps/contacts/l10n/ia.php
+++ b/apps/contacts/l10n/ia.php
@@ -1,21 +1,14 @@
<?php $TRANSLATIONS = array(
-"Cannot add empty property." => "Non pote adder proprietate vacue.",
"No address books found." => "Nulle adressario trovate",
"No contacts found." => "Nulle contactos trovate.",
-"Error adding addressbook." => "Error durante que il addeva le adressario.",
-"Error activating addressbook." => "Error in activar adressario",
+"Cannot add empty property." => "Non pote adder proprietate vacue.",
"Error saving temporary file." => "Error durante le scriptura in le file temporari",
"Error loading image." => "Il habeva un error durante le cargamento del imagine.",
"No file was uploaded" => "Nulle file esseva incargate.",
"Missing a temporary folder" => "Manca un dossier temporari",
"Contacts" => "Contactos",
-"Addressbook not found." => "Adressario non trovate.",
"This is not your addressbook." => "Iste non es tu libro de adresses",
"Contact could not be found." => "Contacto non poterea esser legite",
-"Address" => "Adresse",
-"Telephone" => "Telephono",
-"Email" => "E-posta",
-"Organization" => "Organisation",
"Work" => "Travalio",
"Home" => "Domo",
"Mobile" => "Mobile",
@@ -26,19 +19,19 @@
"Video" => "Video",
"Pager" => "Pager",
"Internet" => "Internet",
+"Birthday" => "Anniversario",
"Contact" => "Contacto",
"Add Contact" => "Adder contacto",
+"Import" => "Importar",
"Addressbooks" => "Adressarios",
-"New Address Book" => "Nove adressario",
-"CardDav Link" => "Ligamine CardDav",
-"Download" => "Discargar",
-"Edit" => "Modificar",
+"Delete current photo" => "Deler photo currente",
+"Edit current photo" => "Modificar photo currente",
+"Upload new photo" => "Incargar nove photo",
+"Select photo from ownCloud" => "Seliger photo ex ownCloud",
+"Organization" => "Organisation",
"Delete" => "Deler",
-"Download contact" => "Discargar contacto",
-"Delete contact" => "Deler contacto",
"Nickname" => "Pseudonymo",
"Enter nickname" => "Inserer pseudonymo",
-"Birthday" => "Anniversario",
"Groups" => "Gruppos",
"Edit groups" => "Modificar gruppos",
"Preferred" => "Preferite",
@@ -49,24 +42,20 @@
"View on map" => "Vider in un carta",
"Add notes here." => "Adder notas hic",
"Add field" => "Adder campo",
-"Profile picture" => "Imagine de profilo",
"Phone" => "Phono",
+"Email" => "E-posta",
+"Address" => "Adresse",
"Note" => "Nota",
-"Delete current photo" => "Deler photo currente",
-"Edit current photo" => "Modificar photo currente",
-"Upload new photo" => "Incargar nove photo",
-"Select photo from ownCloud" => "Seliger photo ex ownCloud",
+"Download contact" => "Discargar contacto",
+"Delete contact" => "Deler contacto",
"Edit address" => "Modificar adresses",
"Type" => "Typo",
"PO Box" => "Cassa postal",
"Extended" => "Extendite",
-"Street" => "Strata",
"City" => "Citate",
"Region" => "Region",
"Zipcode" => "Codice postal",
"Country" => "Pais",
-"Edit categories" => "Modificar categorias",
-"Add" => "Adder",
"Addressbook" => "Adressario",
"Hon. prefixes" => "Prefixos honorific",
"Miss" => "Senioretta",
@@ -77,18 +66,20 @@
"Additional names" => "Nomines additional",
"Family name" => "Nomine de familia",
"Hon. suffixes" => "Suffixos honorific",
-"New Addressbook" => "Nove adressario",
-"Edit Addressbook" => "Modificar adressario",
-"Active" => "Active",
-"Save" => "Salveguardar",
-"Submit" => "Submitter",
-"Cancel" => "Cancellar",
"Import a contacts file" => "Importar un file de contactos",
"Please choose the addressbook" => "Per favor selige le adressario",
"create a new addressbook" => "Crear un nove adressario",
"Name of new addressbook" => "Nomine del nove gruppo:",
"Import" => "Importar",
+"Contacts imported successfully" => "Contactos importate con successo.",
+"Close Dialog" => "Clauder dialogo",
+"Import Addressbook" => "Importar adressario.",
"Add contact" => "Adder adressario",
"more info" => "plus info",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Download" => "Discargar",
+"Edit" => "Modificar",
+"New Address Book" => "Nove adressario",
+"Save" => "Salveguardar",
+"Cancel" => "Cancellar"
);
diff --git a/apps/contacts/l10n/it.php b/apps/contacts/l10n/it.php
index 2a5478e6c4b..8302bfffdca 100644
--- a/apps/contacts/l10n/it.php
+++ b/apps/contacts/l10n/it.php
@@ -1,39 +1,42 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Errore nel (dis)attivare la rubrica.",
-"There was an error adding the contact." => "Si è verificato un errore nell'aggiunta del contatto.",
-"Cannot add empty property." => "Impossibile aggiungere una proprietà vuota.",
-"At least one of the address fields has to be filled out." => "Deve essere riempito almeno un indirizzo.",
-"Trying to add duplicate property: " => "P",
-"Error adding contact property." => "Errore durante l'aggiunta della proprietà del contatto.",
+"id is not set." => "ID non impostato.",
+"Cannot update addressbook with an empty name." => "Impossibile aggiornare una rubrica senza nome.",
+"Error updating addressbook." => "Errore durante l'aggiornamento della rubrica.",
"No ID provided" => "Nessun ID fornito",
"Error setting checksum." => "Errore di impostazione del codice di controllo.",
"No categories selected for deletion." => "Nessuna categoria selezionata per l'eliminazione.",
"No address books found." => "Nessuna rubrica trovata.",
"No contacts found." => "Nessun contatto trovato.",
+"There was an error adding the contact." => "Si è verificato un errore nell'aggiunta del contatto.",
+"element name is not set." => "il nome dell'elemento non è impostato.",
+"Could not parse contact: " => "Impossibile elaborare il contatto: ",
+"Cannot add empty property." => "Impossibile aggiungere una proprietà vuota.",
+"At least one of the address fields has to be filled out." => "Deve essere inserito almeno un indirizzo.",
+"Trying to add duplicate property: " => "P",
+"Missing IM parameter." => "Parametro IM mancante.",
+"Unknown IM: " => "IM sconosciuto:",
+"Information about vCard is incorrect. Please reload the page." => "Informazioni sulla vCard non corrette. Ricarica la pagina.",
"Missing ID" => "ID mancante",
"Error parsing VCard for ID: \"" => "Errore in fase di elaborazione del file VCard per l'ID: \"",
-"Cannot add addressbook with an empty name." => "Impossibile aggiungere una rubrica senza nome.",
-"Error adding addressbook." => "Errore durante l'aggiunta della rubrica.",
-"Error activating addressbook." => "Errore durante l'attivazione della rubrica.",
+"checksum is not set." => "il codice di controllo non è impostato.",
+"Information about vCard is incorrect. Please reload the page: " => "Le informazioni della vCard non sono corrette. Ricarica la pagina: ",
+"Something went FUBAR. " => "Qualcosa è andato storto. ",
"No contact ID was submitted." => "Nessun ID di contatto inviato.",
"Error reading contact photo." => "Errore di lettura della foto del contatto.",
"Error saving temporary file." => "Errore di salvataggio del file temporaneo.",
"The loading photo is not valid." => "La foto caricata non è valida.",
-"id is not set." => "ID non impostato.",
-"Information about vCard is incorrect. Please reload the page." => "Informazioni sulla vCard non corrette. Ricarica la pagina.",
-"Error deleting contact property." => "Errore durante l'eliminazione della proprietà del contatto.",
"Contact ID is missing." => "Manca l'ID del contatto.",
-"Missing contact id." => "ID di contatto mancante.",
"No photo path was submitted." => "Non è stato inviato alcun percorso a una foto.",
"File doesn't exist:" => "Il file non esiste:",
"Error loading image." => "Errore di caricamento immagine.",
-"element name is not set." => "il nome dell'elemento non è impostato.",
-"checksum is not set." => "il codice di controllo non è impostato.",
-"Information about vCard is incorrect. Please reload the page: " => "Le informazioni della vCard non sono corrette. Ricarica la pagina: ",
-"Something went FUBAR. " => "Qualcosa è andato storto. ",
-"Error updating contact property." => "Errore durante l'aggiornamento della proprietà del contatto.",
-"Cannot update addressbook with an empty name." => "Impossibile aggiornare una rubrica senza nome.",
-"Error updating addressbook." => "Errore durante l'aggiornamento della rubrica.",
+"Error getting contact object." => "Errore di recupero dell'oggetto contatto.",
+"Error getting PHOTO property." => "Errore di recupero della proprietà FOTO.",
+"Error saving contact." => "Errore di salvataggio del contatto.",
+"Error resizing image" => "Errore di ridimensionamento dell'immagine",
+"Error cropping image" => "Errore di ritaglio dell'immagine",
+"Error creating temporary image" => "Errore durante la creazione dell'immagine temporanea",
+"Error finding image: " => "Errore durante la ricerca dell'immagine: ",
"Error uploading contacts to storage." => "Errore di invio dei contatti in archivio.",
"There is no error, the file uploaded with success" => "Non ci sono errori, il file è stato inviato correttamente",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Il file inviato supera la direttiva upload_max_filesize nel php.ini",
@@ -41,17 +44,46 @@
"The uploaded file was only partially uploaded" => "Il file è stato inviato solo parzialmente",
"No file was uploaded" => "Nessun file è stato inviato",
"Missing a temporary folder" => "Manca una cartella temporanea",
+"Couldn't save temporary image: " => "Impossibile salvare l'immagine temporanea: ",
+"Couldn't load temporary image: " => "Impossibile caricare l'immagine temporanea: ",
+"No file was uploaded. Unknown error" => "Nessun file è stato inviato. Errore sconosciuto",
"Contacts" => "Contatti",
-"Drop a VCF file to import contacts." => "Rilascia un file VCF per importare i contatti.",
-"Addressbook not found." => "Rubrica non trovata.",
+"Sorry, this functionality has not been implemented yet" => "Siamo spiacenti, questa funzionalità non è stata ancora implementata",
+"Not implemented" => "Non implementata",
+"Couldn't get a valid address." => "Impossibile ottenere un indirizzo valido.",
+"Error" => "Errore",
+"This property has to be non-empty." => "Questa proprietà non può essere vuota.",
+"Couldn't serialize elements." => "Impossibile serializzare gli elementi.",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' invocata senza l'argomento di tipo. Segnalalo a bugs.owncloud.org",
+"Edit name" => "Modifica il nome",
+"No files selected for upload." => "Nessun file selezionato per l'invio",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Il file che stai cercando di inviare supera la dimensione massima per l'invio dei file su questo server.",
+"Error loading profile picture." => "Errore durante il caricamento dell'immagine di profilo.",
+"Select type" => "Seleziona il tipo",
+"Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted." => "Alcuni contatti sono marcati per l'eliminazione, ma non sono stati ancora rimossi. Attendi fino al completamento dell'operazione.",
+"Do you want to merge these address books?" => "Vuoi unire queste rubriche?",
+"Result: " => "Risultato: ",
+" imported, " => " importato, ",
+" failed." => " non riuscito.",
+"Displayname cannot be empty." => "Il nome visualizzato non può essere vuoto.",
+"Addressbook not found: " => "Rubrica non trovata:",
"This is not your addressbook." => "Questa non è la tua rubrica.",
"Contact could not be found." => "Il contatto non può essere trovato.",
-"Address" => "Indirizzo",
-"Telephone" => "Telefono",
-"Email" => "Email",
-"Organization" => "Organizzazione",
+"Jabber" => "Jabber",
+"AIM" => "AIM",
+"MSN" => "MSN",
+"Twitter" => "Twitter",
+"GoogleTalk" => "GoogleTalk",
+"Facebook" => "Facebook",
+"XMPP" => "XMPP",
+"ICQ" => "ICQ",
+"Yahoo" => "Yahoo",
+"Skype" => "Skype",
+"QQ" => "QQ",
+"GaduGadu" => "GaduGadu",
"Work" => "Lavoro",
"Home" => "Casa",
+"Other" => "Altro",
"Mobile" => "Cellulare",
"Text" => "Testo",
"Voice" => "Voce",
@@ -60,25 +92,52 @@
"Video" => "Video",
"Pager" => "Cercapersone",
"Internet" => "Internet",
+"Birthday" => "Compleanno",
+"Business" => "Lavoro",
+"Call" => "Chiama",
+"Clients" => "Client",
+"Deliverer" => "Corriere",
+"Holidays" => "Festività",
+"Ideas" => "Idee",
+"Journey" => "Viaggio",
+"Jubilee" => "Anniversario",
+"Meeting" => "Riunione",
+"Personal" => "Personale",
+"Projects" => "Progetti",
+"Questions" => "Domande",
"{name}'s Birthday" => "Data di nascita di {name}",
"Contact" => "Contatto",
"Add Contact" => "Aggiungi contatto",
+"Import" => "Importa",
+"Settings" => "Impostazioni",
"Addressbooks" => "Rubriche",
-"Configure Address Books" => "Configura rubrica",
-"New Address Book" => "Nuova rubrica",
-"Import from VCF" => "Importa da VCF",
-"CardDav Link" => "Link CardDav",
-"Download" => "Scarica",
-"Edit" => "Modifica",
-"Delete" => "Elimina",
-"Download contact" => "Scarica contatto",
-"Delete contact" => "Elimina contatto",
+"Close" => "Chiudi",
+"Keyboard shortcuts" => "Scorciatoie da tastiera",
+"Navigation" => "Navigazione",
+"Next contact in list" => "Contatto successivo in elenco",
+"Previous contact in list" => "Contatto precedente in elenco",
+"Expand/collapse current addressbook" => "Espandi/Contrai la rubrica corrente",
+"Next addressbook" => "Rubrica successiva",
+"Previous addressbook" => "Rubrica precedente",
+"Actions" => "Azioni",
+"Refresh contacts list" => "Aggiorna l'elenco dei contatti",
+"Add new contact" => "Aggiungi un nuovo contatto",
+"Add new addressbook" => "Aggiungi una nuova rubrica",
+"Delete current contact" => "Elimina il contatto corrente",
"Drop photo to upload" => "Rilascia una foto da inviare",
+"Delete current photo" => "Elimina la foto corrente",
+"Edit current photo" => "Modifica la foto corrente",
+"Upload new photo" => "Invia una nuova foto",
+"Select photo from ownCloud" => "Seleziona la foto da ownCloud",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Formato personalizzato, nome breve, nome completo, invertito o invertito con virgola",
"Edit name details" => "Modifica dettagli del nome",
+"Organization" => "Organizzazione",
+"Delete" => "Elimina",
"Nickname" => "Pseudonimo",
"Enter nickname" => "Inserisci pseudonimo",
-"Birthday" => "Compleanno",
+"Web site" => "Sito web",
+"http://www.somesite.com" => "http://www.somesite.com",
+"Go to web site" => "Vai al sito web",
"dd-mm-yyyy" => "gg-mm-aaaa",
"Groups" => "Gruppi",
"Separate groups with commas" => "Separa i gruppi con virgole",
@@ -90,28 +149,33 @@
"Delete email address" => "Elimina l'indirizzo email",
"Enter phone number" => "Inserisci il numero di telefono",
"Delete phone number" => "Elimina il numero di telefono",
+"Instant Messenger" => "Client di messaggistica istantanea",
+"Delete IM" => "Elimina IM",
"View on map" => "Visualizza sulla mappa",
"Edit address details" => "Modifica dettagli dell'indirizzo",
"Add notes here." => "Aggiungi qui le note.",
"Add field" => "Aggiungi campo",
-"Profile picture" => "Immagine del profilo",
"Phone" => "Telefono",
+"Email" => "Email",
+"Instant Messaging" => "Messaggistica istantanea",
+"Address" => "Indirizzo",
"Note" => "Nota",
-"Delete current photo" => "Elimina la foto corrente",
-"Edit current photo" => "Modifica la foto corrente",
-"Upload new photo" => "Invia una nuova foto",
-"Select photo from ownCloud" => "Seleziona la foto da ownCloud",
+"Download contact" => "Scarica contatto",
+"Delete contact" => "Elimina contatto",
+"The temporary image has been removed from cache." => "L'immagine temporanea è stata rimossa dalla cache.",
"Edit address" => "Modifica indirizzo",
"Type" => "Tipo",
"PO Box" => "Casella postale",
+"Street address" => "Indirizzo",
+"Street and number" => "Via e numero",
"Extended" => "Esteso",
-"Street" => "Via",
+"Apartment number etc." => "Numero appartamento ecc.",
"City" => "Città",
"Region" => "Regione",
+"E.g. state or province" => "Ad es. stato o provincia",
"Zipcode" => "CAP",
+"Postal code" => "CAP",
"Country" => "Stato",
-"Edit categories" => "Modifica categorie",
-"Add" => "Aggiungi",
"Addressbook" => "Rubrica",
"Hon. prefixes" => "Prefissi onorifici",
"Miss" => "Sig.na",
@@ -132,26 +196,35 @@
"Esq." => "Esq.",
"Jr." => "Jr.",
"Sn." => "Sn.",
-"New Addressbook" => "Nuova rubrica",
-"Edit Addressbook" => "Modifica rubrica",
-"Displayname" => "Nome visualizzato",
-"Active" => "Attiva",
-"Save" => "Salva",
-"Submit" => "Invia",
-"Cancel" => "Annulla",
"Import a contacts file" => "Importa un file di contatti",
"Please choose the addressbook" => "Scegli la rubrica",
"create a new addressbook" => "crea una nuova rubrica",
"Name of new addressbook" => "Nome della nuova rubrica",
-"Import" => "Importa",
"Importing contacts" => "Importazione contatti",
+"Contacts imported successfully" => "Contatti importati correttamente",
+"Close Dialog" => "Chiudi finestra",
+"Import Addressbook" => "Importa rubrica",
"Select address book to import to:" => "Seleziona la rubrica di destinazione:",
+"Drop a VCF file to import contacts." => "Rilascia un file VCF per importare i contatti.",
"Select from HD" => "Seleziona da disco",
"You have no contacts in your addressbook." => "Non hai contatti nella rubrica.",
"Add contact" => "Aggiungi contatto",
-"Configure addressbooks" => "Configura rubriche",
+"Select Address Books" => "Seleziona rubriche",
+"Enter name" => "Inserisci il nome",
+"Enter description" => "Inserisci una descrizione",
"CardDAV syncing addresses" => "Indirizzi di sincronizzazione CardDAV",
"more info" => "altre informazioni",
"Primary address (Kontact et al)" => "Indirizzo principale (Kontact e altri)",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Show CardDav link" => "Mostra collegamento CardDav",
+"Show read-only VCF link" => "Mostra collegamento VCF in sola lettura",
+"Share" => "Condividi",
+"Download" => "Scarica",
+"Edit" => "Modifica",
+"New Address Book" => "Nuova rubrica",
+"Name" => "Nome",
+"Description" => "Descrizione",
+"Save" => "Salva",
+"Cancel" => "Annulla",
+"More..." => "Altro..."
);
diff --git a/apps/contacts/l10n/ja_JP.php b/apps/contacts/l10n/ja_JP.php
index d98e58f94da..8a6cce37cc6 100644
--- a/apps/contacts/l10n/ja_JP.php
+++ b/apps/contacts/l10n/ja_JP.php
@@ -1,36 +1,42 @@
<?php $TRANSLATIONS = array(
-"Error (de)activating addressbook." => "アドレスブックã®æœ‰åŠ¹/無効化ã«å¤±æ•—ã—ã¾ã—ãŸã€‚",
-"There was an error adding the contact." => "連絡先ã®è¿½åŠ ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚",
-"Cannot add empty property." => "é …ç›®ã®æ–°è¦è¿½åŠ ã«å¤±æ•—ã—ã¾ã—ãŸã€‚",
-"At least one of the address fields has to be filled out." => "ä½æ‰€ã®é …ç›®ã®ã†ã¡ï¼‘ã¤ã¯å…¥åŠ›ã—ã¦ä¸‹ã•ã„。",
-"Error adding contact property." => "連絡先ã®è¿½åŠ ã«å¤±æ•—ã—ã¾ã—ãŸã€‚",
+"Error (de)activating addressbook." => "アドレス帳ã®æœ‰åŠ¹ï¼ç„¡åŠ¹åŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚",
+"id is not set." => "idãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。",
+"Cannot update addressbook with an empty name." => "空白ã®åå‰ã§ã‚¢ãƒ‰ãƒ¬ã‚¹å¸³ã‚’æ›´æ–°ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。",
+"Error updating addressbook." => "アドレス帳ã®æ›´æ–°ã«å¤±æ•—ã—ã¾ã—ãŸã€‚",
"No ID provided" => "IDãŒæä¾›ã•ã‚Œã¦ã„ã¾ã›ã‚“",
"Error setting checksum." => "ãƒã‚§ãƒƒã‚¯ã‚µãƒ ã®è¨­å®šã‚¨ãƒ©ãƒ¼ã€‚",
"No categories selected for deletion." => "削除ã™ã‚‹ã‚«ãƒ†ã‚´ãƒªãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“。",
-"No address books found." => "アドレスブックãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。",
+"No address books found." => "アドレス帳ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。",
"No contacts found." => "連絡先ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。",
+"There was an error adding the contact." => "連絡先ã®è¿½åŠ ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚",
+"element name is not set." => "è¦ç´ åãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。",
+"Could not parse contact: " => "連絡先を解æžã§ãã¾ã›ã‚“ã§ã—ãŸ:",
+"Cannot add empty property." => "é …ç›®ã®æ–°è¦è¿½åŠ ã«å¤±æ•—ã—ã¾ã—ãŸã€‚",
+"At least one of the address fields has to be filled out." => "ä½æ‰€ã®é …ç›®ã®ã†ã¡ï¼‘ã¤ã¯å…¥åŠ›ã—ã¦ä¸‹ã•ã„。",
+"Trying to add duplicate property: " => "é‡è¤‡ã™ã‚‹å±žæ€§ã‚’追加: ",
+"Missing IM parameter." => "IMã®ãƒ‘ラメータãŒä¸è¶³ã—ã¦ã„ã¾ã™ã€‚",
+"Unknown IM: " => "ä¸æ˜ŽãªIM:",
+"Information about vCard is incorrect. Please reload the page." => "vCardã®æƒ…å ±ã«èª¤ã‚ŠãŒã‚ã‚Šã¾ã™ã€‚ページをリロードã—ã¦ä¸‹ã•ã„。",
+"Missing ID" => "IDãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“",
"Error parsing VCard for ID: \"" => "VCardã‹ã‚‰IDã®æŠ½å‡ºã‚¨ãƒ©ãƒ¼: \"",
-"Cannot add addressbook with an empty name." => "åå‰ã‚’空白ã«ã—ãŸã¾ã¾ã§ã‚¢ãƒ‰ãƒ¬ã‚¹ãƒ–ックを追加ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。",
-"Error adding addressbook." => "アドレスブックã®è¿½åŠ ã«å¤±æ•—ã—ã¾ã—ãŸã€‚",
-"Error activating addressbook." => "アドレスブックã®æœ‰åŠ¹åŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚",
+"checksum is not set." => "ãƒã‚§ãƒƒã‚¯ã‚µãƒ ãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。",
+"Information about vCard is incorrect. Please reload the page: " => "vCardã®æƒ…å ±ãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“。ページをå†èª­ã¿è¾¼ã¿ã—ã¦ãã ã•ã„: ",
+"Something went FUBAR. " => "何ã‹ãŒFUBARã¸ç§»å‹•ã—ã¾ã—ãŸã€‚",
"No contact ID was submitted." => "連絡先IDã¯ç™»éŒ²ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚",
"Error reading contact photo." => "連絡先写真ã®èª­ã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼ã€‚",
"Error saving temporary file." => "一時ファイルã®ä¿å­˜ã‚¨ãƒ©ãƒ¼ã€‚",
"The loading photo is not valid." => "写真ã®èª­ã¿è¾¼ã¿ã¯ç„¡åŠ¹ã§ã™ã€‚",
-"id is not set." => "idãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。",
-"Information about vCard is incorrect. Please reload the page." => "vCardã®æƒ…å ±ã«èª¤ã‚ŠãŒã‚ã‚Šã¾ã™ã€‚ページをリロードã—ã¦ä¸‹ã•ã„。",
-"Error deleting contact property." => "連絡先ã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸã€‚",
"Contact ID is missing." => "コンタクトIDãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。",
-"Missing contact id." => "コンタクトIDãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。",
"No photo path was submitted." => "写真ã®ãƒ‘スãŒç™»éŒ²ã•ã‚Œã¦ã„ã¾ã›ã‚“。",
"File doesn't exist:" => "ファイルãŒå­˜åœ¨ã—ã¾ã›ã‚“:",
"Error loading image." => "ç”»åƒã®èª­ã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼ã€‚",
-"element name is not set." => "è¦ç´ åãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。",
-"checksum is not set." => "ãƒã‚§ãƒƒã‚¯ã‚µãƒ ãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。",
-"Information about vCard is incorrect. Please reload the page: " => "vCardã®æƒ…å ±ãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“。ページをå†èª­ã¿è¾¼ã¿ã—ã¦ãã ã•ã„: ",
-"Error updating contact property." => "連絡先ã®æ›´æ–°ã«å¤±æ•—ã—ã¾ã—ãŸã€‚",
-"Cannot update addressbook with an empty name." => "空白ã®åå‰ã§ã‚¢ãƒ‰ãƒ¬ã‚¹ãƒ–ックを更新ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。",
-"Error updating addressbook." => "アドレスブックã®æ›´æ–°ã«å¤±æ•—ã—ã¾ã—ãŸã€‚",
+"Error getting contact object." => "コンタクトオブジェクトã®å–得エラー。",
+"Error getting PHOTO property." => "写真属性ã®å–得エラー。",
+"Error saving contact." => "コンタクトã®ä¿å­˜ã‚¨ãƒ©ãƒ¼ã€‚",
+"Error resizing image" => "ç”»åƒã®ãƒªã‚µã‚¤ã‚ºã‚¨ãƒ©ãƒ¼",
+"Error cropping image" => "ç”»åƒã®åˆ‡ã‚ŠæŠœãエラー",
+"Error creating temporary image" => "一時画åƒã®ç”Ÿæˆã‚¨ãƒ©ãƒ¼",
+"Error finding image: " => "ç”»åƒæ¤œç´¢ã‚¨ãƒ©ãƒ¼: ",
"Error uploading contacts to storage." => "ストレージã¸ã®é€£çµ¡å…ˆã®ã‚¢ãƒƒãƒ—ロードエラー。",
"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 ã®åˆ¶é™ã‚’超ãˆã¦ã„ã¾ã™",
@@ -38,17 +44,46 @@
"The uploaded file was only partially uploaded" => "アップロードファイルã¯ä¸€éƒ¨åˆ†ã ã‘アップロードã•ã‚Œã¾ã—ãŸ",
"No file was uploaded" => "ファイルã¯ã‚¢ãƒƒãƒ—ロードã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ",
"Missing a temporary folder" => "一時ä¿å­˜ãƒ•ã‚©ãƒ«ãƒ€ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“",
+"Couldn't save temporary image: " => "一時的ãªç”»åƒã®ä¿å­˜ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ: ",
+"Couldn't load temporary image: " => "一時的ãªç”»åƒã®èª­ã¿è¾¼ã¿ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ: ",
+"No file was uploaded. Unknown error" => "ファイルã¯ä½•ã‚‚アップロードã•ã‚Œã¦ã„ã¾ã›ã‚“。ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼",
"Contacts" => "連絡先",
-"Drop a VCF file to import contacts." => "連絡先をインãƒãƒ¼ãƒˆã™ã‚‹VCFファイルをドロップã—ã¦ãã ã•ã„。",
-"Addressbook not found." => "アドレスブックãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚",
+"Sorry, this functionality has not been implemented yet" => "申ã—訳ã‚ã‚Šã¾ã›ã‚“。ã“ã®æ©Ÿèƒ½ã¯ã¾ã å®Ÿè£…ã•ã‚Œã¦ã„ã¾ã›ã‚“",
+"Not implemented" => "未実装",
+"Couldn't get a valid address." => "有効ãªã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚",
+"Error" => "エラー",
+"This property has to be non-empty." => "ã“ã®å±žæ€§ã¯ç©ºã«ã§ãã¾ã›ã‚“。",
+"Couldn't serialize elements." => "è¦ç´ ã‚’シリアライズã§ãã¾ã›ã‚“ã§ã—ãŸã€‚",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' ã¯åž‹ã®å¼•æ•°ç„¡ã—ã§å‘¼ã³å‡ºã•ã‚Œã¾ã—ãŸã€‚bugs.owncloud.org ã¸å ±å‘Šã—ã¦ãã ã•ã„。",
+"Edit name" => "åå‰ã‚’編集",
+"No files selected for upload." => "アップロードã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“。",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "アップロードã—よã†ã¨ã—ã¦ã„るファイルã¯ã€ã“ã®ã‚µãƒ¼ãƒã®æœ€å¤§ãƒ•ã‚¡ã‚¤ãƒ«ã‚¢ãƒƒãƒ—ロードサイズを超ãˆã¦ã„ã¾ã™ã€‚",
+"Error loading profile picture." => "プロファイルã®ç”»åƒã®èª­ã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼",
+"Select type" => "タイプをé¸æŠž",
+"Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted." => "ã„ãã¤ã‹ã®ã‚³ãƒ³ã‚¿ã‚¯ãƒˆãŒå‰Šé™¤ã¨ãƒžãƒ¼ã‚¯ã•ã‚Œã¦ã„ã¾ã™ãŒã€ã¾ã å‰Šé™¤ã•ã‚Œã¦ã„ã¾ã›ã‚“。削除ã™ã‚‹ã¾ã§ãŠå¾…ã¡ãã ã•ã„。",
+"Do you want to merge these address books?" => "ã“れらã®ã‚¢ãƒ‰ãƒ¬ã‚¹å¸³ã‚’マージã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ",
+"Result: " => "çµæžœ: ",
+" imported, " => " をインãƒãƒ¼ãƒˆã€ ",
+" failed." => " ã¯å¤±æ•—ã—ã¾ã—ãŸã€‚",
+"Displayname cannot be empty." => "表示åã¯ç©ºã«ã§ãã¾ã›ã‚“。",
+"Addressbook not found: " => "アドレス帳ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“:",
"This is not your addressbook." => "ã“ã‚Œã¯ã‚ãªãŸã®é›»è©±å¸³ã§ã¯ã‚ã‚Šã¾ã›ã‚“。",
"Contact could not be found." => "連絡先を見ã¤ã‘る事ãŒã§ãã¾ã›ã‚“。",
-"Address" => "ä½æ‰€",
-"Telephone" => "電話番å·",
-"Email" => "メールアドレス",
-"Organization" => "所属",
+"Jabber" => "Jabber",
+"AIM" => "AIM",
+"MSN" => "MSN",
+"Twitter" => "Twitter",
+"GoogleTalk" => "Googleトーク",
+"Facebook" => "Facebook",
+"XMPP" => "XMPP",
+"ICQ" => "ICQ",
+"Yahoo" => "Yahoo",
+"Skype" => "Skype",
+"QQ" => "QQ",
+"GaduGadu" => "GaduGadu",
"Work" => "勤務先",
"Home" => "ä½å±…",
+"Other" => "ãã®ä»–",
"Mobile" => "æºå¸¯é›»è©±",
"Text" => "TTY TDD",
"Voice" => "音声番å·",
@@ -57,58 +92,92 @@
"Video" => "テレビ電話",
"Pager" => "ãƒã‚±ãƒ™ãƒ«",
"Internet" => "インターãƒãƒƒãƒˆ",
+"Birthday" => "誕生日",
+"Business" => "ビジãƒã‚¹",
+"Call" => "電話",
+"Clients" => "顧客",
+"Deliverer" => "é‹é€ä¼šç¤¾",
+"Holidays" => "休日",
+"Ideas" => "アイデア",
+"Journey" => "旅行",
+"Jubilee" => "記念祭",
+"Meeting" => "打ã¡åˆã‚ã›",
+"Personal" => "個人",
+"Projects" => "プロジェクト",
+"Questions" => "質å•",
"{name}'s Birthday" => "{name}ã®èª•ç”Ÿæ—¥",
"Contact" => "連絡先",
"Add Contact" => "連絡先ã®è¿½åŠ ",
-"Addressbooks" => "電話帳",
-"Configure Address Books" => "アドレスブックを設定",
-"New Address Book" => "æ–°è¦é›»è©±å¸³",
-"Import from VCF" => "VCFã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆ",
-"CardDav Link" => "CardDAVリンク",
-"Download" => "ダウンロード",
-"Edit" => "編集",
-"Delete" => "削除",
-"Download contact" => "連絡先ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰",
-"Delete contact" => "連絡先ã®å‰Šé™¤",
+"Import" => "インãƒãƒ¼ãƒˆ",
+"Settings" => "設定",
+"Addressbooks" => "アドレス帳",
+"Close" => "é–‰ã˜ã‚‹",
+"Keyboard shortcuts" => "キーボードショートカット",
+"Navigation" => "ナビゲーション",
+"Next contact in list" => "リスト内ã®æ¬¡ã®ã‚³ãƒ³ã‚¿ã‚¯ãƒˆ",
+"Previous contact in list" => "リスト内ã®å‰ã®ã‚³ãƒ³ã‚¿ã‚¯ãƒˆ",
+"Expand/collapse current addressbook" => "ç¾åœ¨ã®ã‚¢ãƒ‰ãƒ¬ã‚¹å¸³ã‚’展開ã™ã‚‹ï¼æŠ˜ã‚ŠãŸãŸã‚€",
+"Next addressbook" => "次ã®ã‚¢ãƒ‰ãƒ¬ã‚¹å¸³",
+"Previous addressbook" => "å‰ã®ã‚¢ãƒ‰ãƒ¬ã‚¹å¸³",
+"Actions" => "アクション",
+"Refresh contacts list" => "連絡先リストをå†èª­è¾¼ã™ã‚‹",
+"Add new contact" => "æ–°ã—ã„コンタクトを追加",
+"Add new addressbook" => "æ–°ã—ã„アドレス帳を追加",
+"Delete current contact" => "ç¾åœ¨ã®ã‚³ãƒ³ã‚¿ã‚¯ãƒˆã‚’削除",
"Drop photo to upload" => "写真をドロップã—ã¦ã‚¢ãƒƒãƒ—ロード",
+"Delete current photo" => "ç¾åœ¨ã®å†™çœŸã‚’削除",
+"Edit current photo" => "ç¾åœ¨ã®å†™çœŸã‚’編集",
+"Upload new photo" => "æ–°ã—ã„写真をアップロード",
+"Select photo from ownCloud" => "ownCloudã‹ã‚‰å†™çœŸã‚’é¸æŠž",
+"Format custom, Short name, Full name, Reverse or Reverse with comma" => "編集フォーマットã€ã‚·ãƒ§ãƒ¼ãƒˆãƒãƒ¼ãƒ ã€ãƒ•ãƒ«ãƒãƒ¼ãƒ ã€é€†é †ã€ã‚«ãƒ³ãƒžåŒºåˆ‡ã‚Šã®é€†é †",
"Edit name details" => "åå‰ã®è©³ç´°ã‚’編集",
+"Organization" => "所属",
+"Delete" => "削除",
"Nickname" => "ニックãƒãƒ¼ãƒ ",
"Enter nickname" => "ニックãƒãƒ¼ãƒ ã‚’入力",
-"Birthday" => "誕生日",
+"Web site" => "ウェブサイト",
+"http://www.somesite.com" => "http://www.somesite.com",
+"Go to web site" => "Webサイトã¸ç§»å‹•",
"dd-mm-yyyy" => "yyyy-mm-dd",
"Groups" => "グループ",
"Separate groups with commas" => "コンマã§ã‚°ãƒ«ãƒ¼ãƒ—を分割",
"Edit groups" => "グループを編集",
"Preferred" => "推奨",
-"Please specify a valid email address." => "連絡先を追加",
+"Please specify a valid email address." => "有効ãªãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定ã—ã¦ãã ã•ã„。",
"Enter email address" => "メールアドレスを入力",
"Mail to address" => "アドレスã¸ãƒ¡ãƒ¼ãƒ«ã‚’é€ã‚‹",
"Delete email address" => "メールアドレスを削除",
"Enter phone number" => "電話番å·ã‚’入力",
"Delete phone number" => "電話番å·ã‚’削除",
+"Instant Messenger" => "インスタントメッセンジャー",
+"Delete IM" => "IMを削除",
"View on map" => "地図ã§è¡¨ç¤º",
"Edit address details" => "ä½æ‰€ã®è©³ç´°ã‚’編集",
"Add notes here." => "ã“ã“ã«ãƒ¡ãƒ¢ã‚’追加。",
"Add field" => "項目を追加",
-"Profile picture" => "プロフィール写真",
"Phone" => "電話番å·",
+"Email" => "メールアドレス",
+"Instant Messaging" => "インスタントメッセージ",
+"Address" => "ä½æ‰€",
"Note" => "メモ",
-"Delete current photo" => "ç¾åœ¨ã®å†™çœŸã‚’削除",
-"Edit current photo" => "ç¾åœ¨ã®å†™çœŸã‚’編集",
-"Upload new photo" => "æ–°ã—ã„写真をアップロード",
-"Select photo from ownCloud" => "ownCloudã‹ã‚‰å†™çœŸã‚’é¸æŠž",
+"Download contact" => "連絡先ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰",
+"Delete contact" => "連絡先ã®å‰Šé™¤",
+"The temporary image has been removed from cache." => "一時画åƒã¯ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‹ã‚‰å‰Šé™¤ã•ã‚Œã¾ã—ãŸã€‚",
"Edit address" => "ä½æ‰€ã‚’編集",
"Type" => "種類",
"PO Box" => "ç§æ›¸ç®±",
-"Extended" => "番地2",
-"Street" => "番地1",
+"Street address" => "ä½æ‰€1",
+"Street and number" => "番地",
+"Extended" => "ä½æ‰€2",
+"Apartment number etc." => "アパートåç­‰",
"City" => "都市",
"Region" => "都é“府県",
+"E.g. state or province" => "例:æ±äº¬éƒ½ã€å¤§é˜ªåºœ",
"Zipcode" => "郵便番å·",
+"Postal code" => "郵便番å·",
"Country" => "国å",
-"Edit categories" => "カテゴリを編集",
-"Add" => "追加",
-"Addressbook" => "アドレスブック",
+"Addressbook" => "アドレス帳",
+"Hon. prefixes" => "敬称",
"Miss" => "Miss",
"Ms" => "Ms",
"Mr" => "Mr",
@@ -118,7 +187,7 @@
"Given name" => "å",
"Additional names" => "ミドルãƒãƒ¼ãƒ ",
"Family name" => "姓",
-"Hon. suffixes" => "ストレージã¸ã®é€£çµ¡å…ˆã®ã‚¢ãƒƒãƒ—ロードエラー。",
+"Hon. suffixes" => "称å·",
"J.D." => "J.D.",
"M.D." => "M.D.",
"D.O." => "D.O.",
@@ -127,26 +196,29 @@
"Esq." => "Esq.",
"Jr." => "Jr.",
"Sn." => "Sn.",
-"New Addressbook" => "アドレスブックã®æ–°è¦ä½œæˆ",
-"Edit Addressbook" => "アドレスブックを編集",
-"Displayname" => "表示å",
-"Active" => "アクティブ",
-"Save" => "ä¿å­˜",
-"Submit" => "é€ä¿¡",
-"Cancel" => "å–り消ã—",
"Import a contacts file" => "コンタクトファイルをインãƒãƒ¼ãƒˆ",
-"Please choose the addressbook" => "アドレスブックをé¸æŠžã—ã¦ãã ã•ã„",
-"create a new addressbook" => "æ–°ã—ã„アドレスブックを作æˆ",
+"Please choose the addressbook" => "アドレス帳をé¸æŠžã—ã¦ãã ã•ã„",
+"create a new addressbook" => "æ–°ã—ã„アドレス帳を作æˆ",
"Name of new addressbook" => "æ–°ã—ã„アドレスブックã®åå‰",
-"Import" => "インãƒãƒ¼ãƒˆ",
"Importing contacts" => "コンタクトをインãƒãƒ¼ãƒˆ",
-"Select address book to import to:" => "インãƒãƒ¼ãƒˆã™ã‚‹ã‚¢ãƒ‰ãƒ¬ã‚¹ãƒ–ックをé¸æŠž:",
-"Select from HD" => "HDã‹ã‚‰é¸æŠž",
-"You have no contacts in your addressbook." => "アドレスブックã«é€£çµ¡å…ˆãŒç™»éŒ²ã•ã‚Œã¦ã„ã¾ã›ã‚“。",
+"You have no contacts in your addressbook." => "アドレス帳ã«é€£çµ¡å…ˆãŒç™»éŒ²ã•ã‚Œã¦ã„ã¾ã›ã‚“。",
"Add contact" => "連絡先を追加",
-"Configure addressbooks" => "アドレス帳を設定",
+"Select Address Books" => "アドレス帳をé¸æŠžã—ã¦ãã ã•ã„",
+"Enter name" => "åå‰ã‚’入力",
+"Enter description" => "説明を入力ã—ã¦ãã ã•ã„",
"CardDAV syncing addresses" => "CardDAVåŒæœŸã‚¢ãƒ‰ãƒ¬ã‚¹",
"more info" => "詳細情報",
"Primary address (Kontact et al)" => "プライマリアドレス(Kontact 他)",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Show CardDav link" => "CarDavリンクを表示",
+"Show read-only VCF link" => "読ã¿å–り専用ã®VCFリンクを表示",
+"Share" => "共有",
+"Download" => "ダウンロード",
+"Edit" => "編集",
+"New Address Book" => "æ–°è¦ã®ã‚¢ãƒ‰ãƒ¬ã‚¹å¸³",
+"Name" => "åå‰",
+"Description" => "説明",
+"Save" => "ä¿å­˜",
+"Cancel" => "å–り消ã—",
+"More..." => "ã‚‚ã£ã¨..."
);
diff --git a/apps/contacts/l10n/ko.php b/apps/contacts/l10n/ko.php
index fcdc1d08c62..4349224f53c 100644
--- a/apps/contacts/l10n/ko.php
+++ b/apps/contacts/l10n/ko.php
@@ -1,41 +1,64 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "주소ë¡ì„ (비)활성화하는 ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤.",
-"There was an error adding the contact." => "ì—°ë½ì²˜ë¥¼ 추가하는 중 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤.",
-"Cannot add empty property." => "빈 ì†ì„±ì„ 추가할 수 없습니다.",
-"At least one of the address fields has to be filled out." => "최소한 í•˜ë‚˜ì˜ ì£¼ì†Œë¡ í•­ëª©ì„ ìž…ë ¥í•´ì•¼ 합니다.",
-"Error adding contact property." => "ì—°ë½ì²˜ ì†ì„±ì„ 추가할 수 없습니다.",
+"id is not set." => "ì•„ì´ë””ê°€ 설정ë˜ì–´ 있지 않습니다. ",
+"Cannot update addressbook with an empty name." => "주소ë¡ì— ì´ë¦„ëž€ì´ ë¹„ì–´ìžˆìœ¼ë©´ ì—…ë°ì´íŠ¸ë¥¼ í•  수 없습니다. ",
+"Error updating addressbook." => "주소ë¡ì„ ì—…ë°ì´íŠ¸í•  수 없습니다.",
"No ID provided" => "제공ë˜ëŠ” ì•„ì´ë”” ì—†ìŒ",
"Error setting checksum." => "오류 검사합계 설정",
"No categories selected for deletion." => "ì‚­ì œ 카테고리를 ì„ íƒí•˜ì§€ 않았습니다. ",
"No address books found." => "주소ë¡ì„ ì°¾ì„ ìˆ˜ 없습니다.",
"No contacts found." => "ì—°ë½ì²˜ë¥¼ ì°¾ì„ ìˆ˜ 없습니다.",
+"There was an error adding the contact." => "ì—°ë½ì²˜ë¥¼ 추가하는 중 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤.",
+"element name is not set." => "element ì´ë¦„ì´ ì„¤ì •ë˜ì§€ 않았습니다.",
+"Cannot add empty property." => "빈 ì†ì„±ì„ 추가할 수 없습니다.",
+"At least one of the address fields has to be filled out." => "최소한 í•˜ë‚˜ì˜ ì£¼ì†Œë¡ í•­ëª©ì„ ìž…ë ¥í•´ì•¼ 합니다.",
+"Trying to add duplicate property: " => "중복 ì†ì„± 추가 ì‹œë„: ",
+"Information about vCard is incorrect. Please reload the page." => "vCard ì •ë³´ê°€ 올바르지 않습니다. 페ì´ì§€ë¥¼ 새로 고치십시오.",
"Missing ID" => "ì•„ì´ë”” 분실",
-"Cannot add addressbook with an empty name." => "ì„±ëª…ëž€ì´ ë¹„ì–´ 주소ë¡ì— 추가 í•  수 없습니다.",
-"Error adding addressbook." => "주소ë¡ì„ 추가할 수 없습니다.",
-"Error activating addressbook." => "주소ë¡ì„ 활성화할 수 없습니다.",
+"Error parsing VCard for ID: \"" => "ì•„ì´ë””ì— ëŒ€í•œ VCard ë¶„ì„ ì˜¤ë¥˜",
+"checksum is not set." => "ì²´í¬ì„¬ì´ 설정ë˜ì§€ 않았습니다.",
+"Information about vCard is incorrect. Please reload the page: " => " vCardì— ëŒ€í•œ ì •ë³´ê°€ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤. 페ì´ì§€ë¥¼ 다시 로드하세요:",
"No contact ID was submitted." => "ì ‘ì† ì•„ì´ë””ê°€ 기입ë˜ì§€ 않았습니다.",
"Error reading contact photo." => "사진 ì½ê¸° 오류",
"Error saving temporary file." => "ìž„ì‹œ 파ì¼ì„ 저장하는 ë™ì•ˆ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. ",
"The loading photo is not valid." => "로딩 ì‚¬ì§„ì´ ìœ íš¨í•˜ì§€ 않습니다. ",
-"id is not set." => "ì•„ì´ë””ê°€ 설정ë˜ì–´ 있지 않습니다. ",
-"Information about vCard is incorrect. Please reload the page." => "vCard ì •ë³´ê°€ 올바르지 않습니다. 페ì´ì§€ë¥¼ 새로 고치십시오.",
-"Error deleting contact property." => "ì—°ë½ì²˜ ì†ì„±ì„ 삭제할 수 없습니다.",
"Contact ID is missing." => "ì ‘ì† ì•„ì´ë””ê°€ 없습니다. ",
-"Missing contact id." => "ì ‘ì† ì•„ì´ë”” 분실",
+"No photo path was submitted." => "사진 경로가 제출ë˜ì§€ 않았습니다. ",
"File doesn't exist:" => "파ì¼ì´ 존재하지 않습니다. ",
"Error loading image." => "로딩 ì´ë¯¸ì§€ 오류입니다.",
-"Error updating contact property." => "ì—°ë½ì²˜ ì†ì„±ì„ ì—…ë°ì´íŠ¸í•  수 없습니다.",
-"Error updating addressbook." => "주소ë¡ì„ ì—…ë°ì´íŠ¸í•  수 없습니다.",
+"Error getting contact object." => "ì—°ë½ì²˜ 개체를 가져오는 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. ",
+"Error getting PHOTO property." => "사진 ì†ì„±ì„ 가져오는 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. ",
+"Error saving contact." => "ì—°ë½ì²˜ 저장 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.",
+"Error resizing image" => "ì´ë¯¸ì§€ í¬ê¸° ì¡°ì • 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.",
+"Error cropping image" => "ì´ë¯¸ì§€ë¥¼ ìžë¥´ë˜ 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.",
+"Error creating temporary image" => "ìž„ì‹œ ì´ë¯¸ì§€ë¥¼ ìƒì„± 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.",
+"Error finding image: " => "ì´ë¯¸ì§€ë¥¼ ì°¾ë˜ ì¤‘ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤:",
+"Error uploading contacts to storage." => "스토리지 ì—러 업로드 ì—°ë½ì²˜.",
+"There is no error, the file uploaded with success" => "ì˜¤ë¥˜ì—†ì´ íŒŒì¼ì—…로드 성공.",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "php.ini 형ì‹ìœ¼ë¡œ 업로드 ëœ ì´ íŒŒì¼ì€ MAX_FILE_SIZE를 초과하였다.",
+"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" => "ìž„ì‹œ í´ë” 분실",
+"Couldn't save temporary image: " => "ìž„ì‹œ ì´ë¯¸ì§€ë¥¼ 저장할 수 없습니다:",
+"Couldn't load temporary image: " => "ìž„ì‹œ ì´ë¯¸ì§€ë¥¼ 불러올 수 없습니다. ",
+"No file was uploaded. Unknown error" => "파ì¼ì´ 업로드 ë˜ì§€ 않았습니다. ì•Œ 수 없는 오류.",
"Contacts" => "ì—°ë½ì²˜",
-"Addressbook not found." => "주소ë¡ì„ ì°¾ì„ ìˆ˜ 없습니다.",
+"Sorry, this functionality has not been implemented yet" => "죄송합니다. ì´ ê¸°ëŠ¥ì€ ì•„ì§ êµ¬í˜„ë˜ì§€ 않았습니다. ",
+"Not implemented" => "구현ë˜ì§€ ì•ŠìŒ",
+"Couldn't get a valid address." => "유효한 주소를 ì–»ì„ ìˆ˜ 없습니다.",
+"Error" => "오류",
+"Couldn't serialize elements." => "요소를 ì§ë ¬í™” í•  수 없습니다.",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty'ê°€ 문서형ì‹ì´ ì—†ì´ ë¶ˆë ¤ì™”ìŠµë‹ˆë‹¤. bugs.owncloud.orgì— ë³´ê³ í•´ì£¼ì„¸ìš”. ",
+"Edit name" => "ì´ë¦„ 편집",
+"No files selected for upload." => "업로드를 위한 파ì¼ì´ ì„ íƒë˜ì§€ 않았습니다. ",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "ì´ íŒŒì¼ì€ ì´ ì„œë²„ íŒŒì¼ ì—…ë¡œë“œ 최대 ìš©ëŸ‰ì„ ì´ˆê³¼ 합니다. ",
+"Select type" => "유형 ì„ íƒ",
+"Result: " => "ê²°ê³¼:",
+" imported, " => "불러오기,",
+" failed." => "실패.",
"This is not your addressbook." => "ë‚´ 주소ë¡ì´ 아닙니다.",
"Contact could not be found." => "ì—°ë½ì²˜ë¥¼ ì°¾ì„ ìˆ˜ 없습니다.",
-"Address" => "주소",
-"Telephone" => "전화 번호",
-"Email" => "ì „ìž ìš°íŽ¸",
-"Organization" => "ì¡°ì§",
"Work" => "ì§ìž¥",
"Home" => "ìžíƒ",
"Mobile" => "휴대í°",
@@ -46,24 +69,24 @@
"Video" => "ì˜ìƒ 번호",
"Pager" => "호출기",
"Internet" => "ì¸í„°ë„·",
+"Birthday" => "ìƒì¼",
"{name}'s Birthday" => "{ì´ë¦„}ì˜ ìƒì¼",
"Contact" => "ì—°ë½ì²˜",
"Add Contact" => "ì—°ë½ì²˜ 추가",
+"Import" => "ìž…ë ¥",
"Addressbooks" => "주소ë¡",
-"Configure Address Books" => "ì£¼ì†Œë¡ êµ¬ì„±",
-"New Address Book" => "새 주소ë¡",
-"Import from VCF" => "VCFì—ì„œ 가져오기",
-"CardDav Link" => "CardDav ë§í¬",
-"Download" => "다운로드",
-"Edit" => "편집",
-"Delete" => "삭제",
-"Download contact" => "ì—°ë½ì²˜ 다운로드",
-"Delete contact" => "ì—°ë½ì²˜ ì‚­ì œ",
+"Close" => "닫기",
"Drop photo to upload" => "Drop photo to upload",
+"Delete current photo" => "현재 사진 삭제",
+"Edit current photo" => "현재 사진 편집",
+"Upload new photo" => "새로운 사진 업로드",
+"Select photo from ownCloud" => "ownCloudì—ì„œ 사진 ì„ íƒ",
+"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Format custom, Short name, Full name, Reverse or Reverse with comma",
"Edit name details" => "ì´ë¦„ ì„¸ë¶€ì‚¬í•­ì„ íŽ¸ì§‘í•©ë‹ˆë‹¤. ",
+"Organization" => "ì¡°ì§",
+"Delete" => "삭제",
"Nickname" => "별명",
"Enter nickname" => "별명 입력",
-"Birthday" => "ìƒì¼",
"dd-mm-yyyy" => "ì¼-ì›”-ë…„",
"Groups" => "그룹",
"Separate groups with commas" => "쉼표로 그룹 구분",
@@ -71,22 +94,62 @@
"Preferred" => "선호함",
"Please specify a valid email address." => "올바른 ì´ë©”ì¼ ì£¼ì†Œë¥¼ 입력하세요.",
"Enter email address" => "ì´ë©”ì¼ ì£¼ì†Œ ìž…ë ¥",
+"Delete email address" => "ì´ë©”ì¼ ì£¼ì†Œ ì‚­ì œ",
+"Enter phone number" => "전화번호 입력",
+"Delete phone number" => "전화번호 삭제",
+"View on map" => "지ë„ì—ì„œ 보기",
+"Edit address details" => "ìƒì„¸ 주소 수정",
+"Add notes here." => "ì—¬ê¸°ì— ë…¸íŠ¸ 추가.",
+"Add field" => "íŒŒì¼ ì¶”ê°€",
"Phone" => "전화 번호",
+"Email" => "ì „ìž ìš°íŽ¸",
+"Address" => "주소",
+"Note" => "노트",
+"Download contact" => "ì—°ë½ì²˜ 다운로드",
+"Delete contact" => "ì—°ë½ì²˜ ì‚­ì œ",
+"The temporary image has been removed from cache." => "ìž„ì‹œ ì´ë¯¸ì§€ê°€ ìºì‹œì—ì„œ 제거 ë˜ì—ˆìŠµë‹ˆë‹¤. ",
+"Edit address" => "주소 수정",
"Type" => "종류",
"PO Box" => "사서함",
"Extended" => "확장",
-"Street" => "거리",
"City" => "ë„ì‹œ",
"Region" => "지역",
"Zipcode" => "우편 번호",
"Country" => "êµ­ê°€",
-"Add" => "추가",
"Addressbook" => "주소ë¡",
-"New Addressbook" => "새 주소ë¡",
-"Edit Addressbook" => "ì£¼ì†Œë¡ íŽ¸ì§‘",
-"Displayname" => "표시 ì´ë¦„",
-"Active" => "활성",
+"Hon. prefixes" => "Hon. prefixes",
+"Miss" => "Miss",
+"Ms" => "Ms",
+"Mr" => "Mr",
+"Sir" => "Sir",
+"Mrs" => "Mrs",
+"Dr" => "Dr",
+"Given name" => "Given name",
+"Additional names" => "추가 ì´ë¦„",
+"Family name" => "성",
+"Hon. suffixes" => "Hon. suffixes",
+"J.D." => "J.D.",
+"M.D." => "M.D.",
+"D.O." => "D.O.",
+"D.C." => "D.C.",
+"Ph.D." => "Ph.D.",
+"Esq." => "Esq.",
+"Jr." => "Jr.",
+"Sn." => "Sn.",
+"Import a contacts file" => "ì—°ë½ì²˜ íŒŒì¼ ìž…ë ¥",
+"Please choose the addressbook" => "주소ë¡ì„ ì„ íƒí•´ 주세요.",
+"create a new addressbook" => "새 ì£¼ì†Œë¡ ë§Œë“¤ê¸°",
+"Name of new addressbook" => "새 ì£¼ì†Œë¡ ì´ë¦„",
+"Importing contacts" => "ì—°ë½ì²˜ ìž…ë ¥",
+"You have no contacts in your addressbook." => "ë‹¹ì‹ ì˜ ì£¼ì†Œë¡ì—는 ì—°ë½ì²˜ê°€ 없습니다. ",
+"Add contact" => "ì—°ë½ì²˜ 추가",
+"CardDAV syncing addresses" => "CardDAV 주소 ë™ê¸°í™”",
+"more info" => "ë” ë§Žì€ ì •ë³´",
+"Primary address (Kontact et al)" => "기본 주소 (Kontact et al)",
+"iOS/OS X" => "iOS/OS X",
+"Download" => "다운로드",
+"Edit" => "편집",
+"New Address Book" => "새 주소ë¡",
"Save" => "저장",
-"Submit" => "보내기",
"Cancel" => "취소"
);
diff --git a/apps/contacts/l10n/lb.php b/apps/contacts/l10n/lb.php
index 361e1cb93e1..22ca20e751b 100644
--- a/apps/contacts/l10n/lb.php
+++ b/apps/contacts/l10n/lb.php
@@ -1,44 +1,86 @@
<?php $TRANSLATIONS = array(
+"Error (de)activating addressbook." => "Fehler beim (de)aktivéieren vum Adressbuch.",
+"id is not set." => "ID ass net gesat.",
+"Error updating addressbook." => "Fehler beim updaten vum Adressbuch.",
+"No ID provided" => "Keng ID uginn",
+"Error setting checksum." => "Fehler beim setzen vun der Checksum.",
+"No categories selected for deletion." => "Keng Kategorien fir ze läschen ausgewielt.",
+"No address books found." => "Keen Adressbuch fonnt.",
+"No contacts found." => "Keng Kontakter fonnt.",
+"There was an error adding the contact." => "Fehler beim bäisetzen vun engem Kontakt.",
+"Cannot add empty property." => "Ka keng eidel Proprietéit bäisetzen.",
+"Trying to add duplicate property: " => "Probéieren duebel Proprietéit bäi ze setzen:",
"Information about vCard is incorrect. Please reload the page." => "Informatioun iwwert vCard ass net richteg. Lued d'Säit wegl nei.",
+"Missing ID" => "ID fehlt",
+"No contact ID was submitted." => "Kontakt ID ass net mat geschéckt ginn.",
+"Error reading contact photo." => "Fehler beim liesen vun der Kontakt Photo.",
+"Error saving temporary file." => "Fehler beim späicheren vum temporäre Fichier.",
+"The loading photo is not valid." => "Déi geluede Photo ass net gülteg.",
+"Contact ID is missing." => "Kontakt ID fehlt.",
+"File doesn't exist:" => "Fichier existéiert net:",
+"Error loading image." => "Fehler beim lueden vum Bild.",
+"No file was uploaded" => "Et ass kee Fichier ropgeluede ginn",
+"Contacts" => "Kontakter",
+"Error" => "Fehler",
+"Result: " => "Resultat: ",
+" imported, " => " importéiert, ",
"This is not your addressbook." => "Dat do ass net däin Adressbuch.",
"Contact could not be found." => "Konnt den Kontakt net fannen.",
-"Address" => "Adress",
-"Telephone" => "Telefon's Nummer",
-"Email" => "Email",
-"Organization" => "Firma",
"Work" => "Aarbecht",
"Home" => "Doheem",
"Mobile" => "GSM",
"Text" => "SMS",
"Voice" => "Voice",
+"Message" => "Message",
"Fax" => "Fax",
"Video" => "Video",
"Pager" => "Pager",
+"Internet" => "Internet",
+"Birthday" => "Gebuertsdag",
+"{name}'s Birthday" => "{name} säi Gebuertsdag",
"Contact" => "Kontakt",
"Add Contact" => "Kontakt bäisetzen",
"Addressbooks" => "Adressbicher ",
-"New Address Book" => "Neit Adressbuch",
-"CardDav Link" => "CardDav Link",
-"Download" => "Download",
-"Edit" => "Editéieren",
+"Close" => "Zoumaachen",
+"Organization" => "Firma",
"Delete" => "Läschen",
-"Delete contact" => "Kontakt läschen",
-"Birthday" => "Gebuertsdag",
+"Nickname" => "Spëtznumm",
+"Enter nickname" => "Gëff e Spëtznumm an",
+"dd-mm-yyyy" => "dd-mm-yyyy",
+"Groups" => "Gruppen",
+"Edit groups" => "Gruppen editéieren",
+"Enter phone number" => "Telefonsnummer aginn",
+"Delete phone number" => "Telefonsnummer läschen",
+"View on map" => "Op da Kaart uweisen",
+"Edit address details" => "Adress Detailer editéieren",
"Phone" => "Telefon",
+"Email" => "Email",
+"Address" => "Adress",
+"Note" => "Note",
+"Download contact" => "Kontakt eroflueden",
+"Delete contact" => "Kontakt läschen",
"Type" => "Typ",
"PO Box" => "Postleetzuel",
"Extended" => "Erweidert",
-"Street" => "Strooss",
"City" => "Staat",
"Region" => "Regioun",
"Zipcode" => "Postleetzuel",
"Country" => "Land",
-"Add" => "Dobäisetzen",
"Addressbook" => "Adressbuch",
-"New Addressbook" => "Neit Adressbuch",
-"Edit Addressbook" => "Adressbuch editéieren",
-"Displayname" => "Ugewisene Numm",
+"Mr" => "M",
+"Sir" => "Sir",
+"Mrs" => "Mme",
+"Dr" => "Dr",
+"Given name" => "Virnumm",
+"Additional names" => "Weider Nimm",
+"Family name" => "Famillje Numm",
+"Ph.D." => "Ph.D.",
+"Jr." => "Jr.",
+"Sn." => "Sn.",
+"iOS/OS X" => "iOS/OS X",
+"Download" => "Download",
+"Edit" => "Editéieren",
+"New Address Book" => "Neit Adressbuch",
"Save" => "Späicheren",
-"Submit" => "Fortschécken",
"Cancel" => "Ofbriechen"
);
diff --git a/apps/contacts/l10n/lt_LT.php b/apps/contacts/l10n/lt_LT.php
index 435927a247c..3b31aa7931e 100644
--- a/apps/contacts/l10n/lt_LT.php
+++ b/apps/contacts/l10n/lt_LT.php
@@ -1,49 +1,53 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Klaida (de)aktyvuojant adresų knygą.",
+"No contacts found." => "Kontaktų nerasta.",
"There was an error adding the contact." => "Pridedant kontaktą įvyko klaida.",
-"Error adding addressbook." => "Klaida pridedant adresų knygą.",
-"Error activating addressbook." => "Klaida aktyvuojant adresų knygą.",
"Information about vCard is incorrect. Please reload the page." => "Informacija apie vCard yra neteisinga. ",
+"Error reading contact photo." => "Klaida skaitant kontakto nuotraukÄ….",
+"The loading photo is not valid." => "Netinkama įkeliama nuotrauka.",
+"File doesn't exist:" => "Failas neegzistuoja:",
+"Error loading image." => "Klaida įkeliant nuotrauką.",
+"There is no error, the file uploaded with success" => "Failas įkeltas sėkmingai, be klaidų",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Įkeliamo failo dydis viršija upload_max_filesize nustatymą php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Įkeliamo failo dydis viršija MAX_FILE_SIZE nustatymą, kuris naudojamas HTML formoje.",
+"The uploaded file was only partially uploaded" => "Failas buvo įkeltas tik dalinai",
+"No file was uploaded" => "Nebuvo įkeltas joks failas",
"Contacts" => "Kontaktai",
"This is not your addressbook." => "Tai ne jūsų adresų knygelė.",
"Contact could not be found." => "Kontaktas nerastas",
-"Address" => "Adresas",
-"Telephone" => "Telefonas",
-"Email" => "El. paštas",
-"Organization" => "Organizacija",
"Work" => "Darbo",
"Home" => "Namų",
"Mobile" => "Mobilusis",
"Text" => "ŽinuÄių",
"Voice" => "Balso",
+"Message" => "Žinutė",
"Fax" => "Faksas",
"Video" => "Vaizdo",
"Pager" => "Pranešimų gaviklis",
+"Internet" => "Internetas",
+"Birthday" => "Gimtadienis",
"Contact" => "Kontaktas",
"Add Contact" => "PridÄ—ti kontaktÄ…",
"Addressbooks" => "Adresų knygos",
-"New Address Book" => "Nauja adresų knyga",
-"CardDav Link" => "CardDAV nuoroda",
-"Download" => "Atsisiųsti",
-"Edit" => "Keisti",
+"Organization" => "Organizacija",
"Delete" => "Trinti",
+"Nickname" => "Slapyvardis",
+"Enter nickname" => "Įveskite slapyvardį",
+"Phone" => "Telefonas",
+"Email" => "El. paštas",
+"Address" => "Adresas",
"Download contact" => "Atsisųsti kontaktą",
"Delete contact" => "IÅ¡trinti kontaktÄ…",
-"Birthday" => "Gimtadienis",
-"Phone" => "Telefonas",
"Type" => "Tipas",
"PO Box" => "Pašto dėžutė",
-"Street" => "GatvÄ—",
"City" => "Miestas",
"Region" => "Regionas",
"Zipcode" => "Pašto indeksas",
"Country" => "Å alis",
-"Add" => "PridÄ—ti",
"Addressbook" => "Adresų knyga",
-"New Addressbook" => "Nauja adresų knyga",
-"Edit Addressbook" => "Redaguoti adresų knygą",
-"Displayname" => "Rodomas vardas",
-"Active" => "Aktyvus",
+"Download" => "Atsisiųsti",
+"Edit" => "Keisti",
+"New Address Book" => "Nauja adresų knyga",
"Save" => "IÅ¡saugoti",
"Cancel" => "Atšaukti"
);
diff --git a/apps/contacts/l10n/mk.php b/apps/contacts/l10n/mk.php
index 2b81a5d877e..dbdd633e519 100644
--- a/apps/contacts/l10n/mk.php
+++ b/apps/contacts/l10n/mk.php
@@ -1,39 +1,39 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Грешка (де)активирање на адреÑарот.",
-"There was an error adding the contact." => "Имаше грешка при додавање на контактот.",
-"Cannot add empty property." => "Ðеможе да Ñе додаде празна вредноÑÑ‚.",
-"At least one of the address fields has to be filled out." => "Барем една од полињата за адреÑа треба да биде пополнето.",
-"Trying to add duplicate property: " => "Се обидовте да внеÑете дупликат вредноÑÑ‚:",
-"Error adding contact property." => "Грешка при додавање на вредноÑÑ‚ за контактот.",
+"id is not set." => "ид не е поÑтавено.",
+"Cannot update addressbook with an empty name." => "Ðеможе да Ñе ажурира адреÑар Ñо празно име.",
+"Error updating addressbook." => "Грешка при ажурирање на адреÑарот.",
"No ID provided" => "Ðема доÑтавено ИД",
"Error setting checksum." => "Грешка во поÑтавување Ñума за проверка.",
"No categories selected for deletion." => "Ðема избрано категории за бришење.",
"No address books found." => "Ðе Ñе најдени адреÑари.",
"No contacts found." => "Ðе Ñе најдени контакти.",
+"There was an error adding the contact." => "Имаше грешка при додавање на контактот.",
+"element name is not set." => "име за елементот не е поÑтавена.",
+"Cannot add empty property." => "Ðеможе да Ñе додаде празна вредноÑÑ‚.",
+"At least one of the address fields has to be filled out." => "Барем една од полињата за адреÑа треба да биде пополнето.",
+"Trying to add duplicate property: " => "Се обидовте да внеÑете дупликат вредноÑÑ‚:",
+"Information about vCard is incorrect. Please reload the page." => "Информацијата за vCard не е точна. Ве молам превчитајте ја Ñтраницава.",
"Missing ID" => "ÐедоÑтаÑува ИД",
"Error parsing VCard for ID: \"" => "Грешка при парÑирање VCard за ИД: \"",
-"Cannot add addressbook with an empty name." => "Ðеможе да Ñе внеÑе адреÑар Ñо празно име.",
-"Error adding addressbook." => "Грешки при додавање на адреÑарот.",
-"Error activating addressbook." => "Грешка при активирање на адреÑарот.",
+"checksum is not set." => "Ñумата за проверка не е поÑтавена.",
+"Information about vCard is incorrect. Please reload the page: " => "Информацијата за vCard не е точна. Ве молам превчитајте ја Ñтраницава:",
+"Something went FUBAR. " => "Ðешто Ñе раÑипа.",
"No contact ID was submitted." => "Ðе беше доÑтавено ИД за контакт.",
"Error reading contact photo." => "Грешка во читање на контакт фотографија.",
"Error saving temporary file." => "Грешка во Ñнимање на привремена датотека.",
"The loading photo is not valid." => "Фотографијата која Ñе вчитува е невалидна.",
-"id is not set." => "ид не е поÑтавено.",
-"Information about vCard is incorrect. Please reload the page." => "Информацијата за vCard не е точна. Ве молам превчитајте ја Ñтраницава.",
-"Error deleting contact property." => "Греш при бришење на вредноÑта за контакт.",
"Contact ID is missing." => "ИД за контакт недоÑтаÑува.",
-"Missing contact id." => "ÐедоÑтаÑува ид за контакт.",
"No photo path was submitted." => "Ðе беше поднеÑена патека за фотографија.",
"File doesn't exist:" => "Ðе поÑтои датотеката:",
"Error loading image." => "Грешка во вчитување на Ñлика.",
-"element name is not set." => "име за елементот не е поÑтавена.",
-"checksum is not set." => "Ñумата за проверка не е поÑтавена.",
-"Information about vCard is incorrect. Please reload the page: " => "Информацијата за vCard не е точна. Ве молам превчитајте ја Ñтраницава:",
-"Something went FUBAR. " => "Ðешто Ñе раÑипа.",
-"Error updating contact property." => "Грешка при ажурирање на вредноÑта за контакт.",
-"Cannot update addressbook with an empty name." => "Ðеможе да Ñе ажурира адреÑар Ñо празно име.",
-"Error updating addressbook." => "Грешка при ажурирање на адреÑарот.",
+"Error getting contact object." => "Грешка при преземањето на контакт објектот,",
+"Error getting PHOTO property." => "Грешка при утврдувањето на карактериÑтиките на фотографијата.",
+"Error saving contact." => "Грешка при Ñнимање на контактите.",
+"Error resizing image" => "Грешка при Ñкалирање на фотографијата",
+"Error cropping image" => "Грешка при Ñечење на фотографијата",
+"Error creating temporary image" => "Грешка при креирањето на привремената фотографија",
+"Error finding image: " => "Грешка при наоѓањето на фотографијата:",
"Error uploading contacts to storage." => "Грешка во Ñнимање на контактите на диÑк.",
"There is no error, the file uploaded with success" => "Датотеката беше уÑпешно подигната.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Големината на датотеката ја надминува upload_max_filesize директивата во php.ini",
@@ -41,15 +41,26 @@
"The uploaded file was only partially uploaded" => "Датотеката беше Ñамо делумно подигната.",
"No file was uploaded" => "Ðе беше подигната датотека.",
"Missing a temporary folder" => "ÐедоÑтаÑува привремена папка",
+"Couldn't save temporary image: " => "Ðе можеше да Ñе Ñними привремената фотографија:",
+"Couldn't load temporary image: " => "Ðе можеше да Ñе вчита привремената фотографија:",
+"No file was uploaded. Unknown error" => "Ðиту еден фајл не Ñе вчита. Ðепозната грешка",
"Contacts" => "Контакти",
-"Drop a VCF file to import contacts." => "Довлечкај VCF датотека да Ñе внеÑат контакти.",
-"Addressbook not found." => "ÐдреÑарот не е најден.",
+"Sorry, this functionality has not been implemented yet" => "Жалам, оваа функционалноÑÑ‚ уште не е имплементирана",
+"Not implemented" => "Ðе е имплементирано",
+"Couldn't get a valid address." => "Ðе можев да добијам иÑправна адреÑа.",
+"Error" => "Грешка",
+"This property has to be non-empty." => "СвојÑтвото не Ñмее да биде празно.",
+"Couldn't serialize elements." => "Ðе може да Ñе Ñеријализираат елементите.",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' повикан без тип на аргументот. Пријавете грешка/проблем на bugs.owncloud.org",
+"Edit name" => "Уреди го името",
+"No files selected for upload." => "Ðиту еден фајл не е избран за вчитување.",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Датотеката која Ñе обидувате да ја префрлите ја надминува макÑималната големина дефинирана за Ð¿Ñ€ÐµÐ½Ð¾Ñ Ð½Ð° овој Ñервер.",
+"Select type" => "Одбери тип",
+"Result: " => "Резултат: ",
+" imported, " => "увезено,",
+" failed." => "неуÑпешно.",
"This is not your addressbook." => "Ова не е во Вашиот адреÑар.",
"Contact could not be found." => "Контактот неможе да биде најден.",
-"Address" => "ÐдреÑа",
-"Telephone" => "Телефон",
-"Email" => "Е-пошта",
-"Organization" => "Организација",
"Work" => "Работа",
"Home" => "Дома",
"Mobile" => "Мобилен",
@@ -60,25 +71,24 @@
"Video" => "Видео",
"Pager" => "Пејџер",
"Internet" => "Интернет",
+"Birthday" => "Роденден",
"{name}'s Birthday" => "Роденден на {name}",
"Contact" => "Контакт",
"Add Contact" => "Додади контакт",
+"Import" => "ВнеÑи",
"Addressbooks" => "ÐдреÑари",
-"Configure Address Books" => "Конфигурирај адреÑар",
-"New Address Book" => "Ðов адреÑар",
-"Import from VCF" => "ВнеÑи од VCF",
-"CardDav Link" => "Ð’Ñ€Ñка за CardDav",
-"Download" => "Преземи",
-"Edit" => "Уреди",
-"Delete" => "Избриши",
-"Download contact" => "Преземи го контактот",
-"Delete contact" => "Избриши го контактот",
+"Close" => "Затвои",
"Drop photo to upload" => "Довлечкај фотографија за да Ñе подигне",
+"Delete current photo" => "Избриши моментална фотографија",
+"Edit current photo" => "Уреди моментална фотографија",
+"Upload new photo" => "Подигни нова фотографија",
+"Select photo from ownCloud" => "Изберете фотографија од ownCloud",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Прилагоден формат, кратко име, цело име, обратно или обратно Ñо запирка",
"Edit name details" => "Уреди детали за име",
+"Organization" => "Организација",
+"Delete" => "Избриши",
"Nickname" => "Прекар",
"Enter nickname" => "ВнеÑи прекар",
-"Birthday" => "Роденден",
"dd-mm-yyyy" => "dd-mm-yyyy",
"Groups" => "Групи",
"Separate groups with commas" => "Одвоете ги групите Ñо запирка",
@@ -94,24 +104,21 @@
"Edit address details" => "Уреди детали за адреÑа",
"Add notes here." => "ВнеÑете забелешки тука.",
"Add field" => "Додади поле",
-"Profile picture" => "Фотографија за профил",
"Phone" => "Телефон",
+"Email" => "Е-пошта",
+"Address" => "ÐдреÑа",
"Note" => "Забелешка",
-"Delete current photo" => "Избриши моментална фотографија",
-"Edit current photo" => "Уреди моментална фотографија",
-"Upload new photo" => "Подигни нова фотографија",
-"Select photo from ownCloud" => "Изберете фотографија од ownCloud",
+"Download contact" => "Преземи го контактот",
+"Delete contact" => "Избриши го контактот",
+"The temporary image has been removed from cache." => "Привремената Ñлика е отÑтранета од кешот.",
"Edit address" => "Уреди адреÑа",
"Type" => "Тип",
"PO Box" => "ПоштенÑки фах",
"Extended" => "Дополнително",
-"Street" => "Улица",
"City" => "Град",
"Region" => "Регион",
"Zipcode" => "ПоштенÑки код",
"Country" => "Држава",
-"Edit categories" => "Уреди категории",
-"Add" => "Додади",
"Addressbook" => "ÐдреÑар",
"Hon. prefixes" => "ПрефикÑи за титула",
"Miss" => "Г-ца",
@@ -132,26 +139,26 @@
"Esq." => "Esq.",
"Jr." => "Помлад.",
"Sn." => "ПоÑтар.",
-"New Addressbook" => "Ðов адреÑар",
-"Edit Addressbook" => "Уреди адреÑар",
-"Displayname" => "Прикажано име",
-"Active" => "Ðктивно",
-"Save" => "Сними",
-"Submit" => "Прати",
-"Cancel" => "Откажи",
"Import a contacts file" => "ВнеÑи датотека Ñо контакти",
"Please choose the addressbook" => "Ве молам изберете адреÑар",
"create a new addressbook" => "креирај нов адреÑар",
"Name of new addressbook" => "Име на новиот адреÑар",
-"Import" => "ВнеÑи",
"Importing contacts" => "ВнеÑување контакти",
+"Contacts imported successfully" => "Контаките беа внеÑени уÑпешно",
+"Close Dialog" => "Дијалог за затварање",
+"Import Addressbook" => "ВнеÑи адреÑар",
"Select address book to import to:" => "Изберете адреÑар да Ñе внеÑе:",
+"Drop a VCF file to import contacts." => "Довлечкај VCF датотека да Ñе внеÑат контакти.",
"Select from HD" => "Изберете од хард диÑк",
"You have no contacts in your addressbook." => "Ðемате контакти во Вашиот адреÑар.",
"Add contact" => "Додади контакт",
-"Configure addressbooks" => "Уреди адреÑари",
"CardDAV syncing addresses" => "ÐдреÑа за Ñинхронизација Ñо CardDAV",
"more info" => "повеќе информации",
"Primary address (Kontact et al)" => "Примарна адреÑа",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Download" => "Преземи",
+"Edit" => "Уреди",
+"New Address Book" => "Ðов адреÑар",
+"Save" => "Сними",
+"Cancel" => "Откажи"
);
diff --git a/apps/contacts/l10n/ms_MY.php b/apps/contacts/l10n/ms_MY.php
index 7d8a4c7d124..3fce9eae5a3 100644
--- a/apps/contacts/l10n/ms_MY.php
+++ b/apps/contacts/l10n/ms_MY.php
@@ -1,58 +1,178 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Ralat nyahaktif buku alamat.",
+"id is not set." => "ID tidak ditetapkan.",
+"Cannot update addressbook with an empty name." => "Tidak boleh kemaskini buku alamat dengan nama yang kosong.",
+"Error updating addressbook." => "Masalah mengemaskini buku alamat.",
+"No ID provided" => "tiada ID diberi",
+"Error setting checksum." => "Ralat menetapkan checksum.",
+"No categories selected for deletion." => "Tiada kategori dipilih untuk dibuang.",
+"No address books found." => "Tiada buku alamat dijumpai.",
+"No contacts found." => "Tiada kenalan dijumpai.",
"There was an error adding the contact." => "Terdapat masalah menambah maklumat.",
+"element name is not set." => "nama elemen tidak ditetapkan.",
"Cannot add empty property." => "Tidak boleh menambah ruang kosong.",
"At least one of the address fields has to be filled out." => "Sekurangnya satu ruangan alamat perlu diisikan.",
-"Error adding contact property." => "Terdapat masalah menambah maklumat.",
-"Error adding addressbook." => "Masalah menambah buku alamat.",
-"Error activating addressbook." => "Masalah mengaktifkan buku alamat.",
+"Trying to add duplicate property: " => "Cuba untuk letak nilai duplikasi:",
"Information about vCard is incorrect. Please reload the page." => "Maklumat vCard tidak tepat. Sila reload semula halaman ini.",
-"Error deleting contact property." => "Masalah memadam maklumat.",
-"Error updating contact property." => "Masalah mengemaskini maklumat.",
-"Error updating addressbook." => "Masalah mengemaskini buku alamat.",
+"Missing ID" => "ID Hilang",
+"Error parsing VCard for ID: \"" => "Ralat VCard untuk ID: \"",
+"checksum is not set." => "checksum tidak ditetapkan.",
+"Information about vCard is incorrect. Please reload the page: " => "Maklumat tentang vCard tidak betul.",
+"Something went FUBAR. " => "Sesuatu tidak betul.",
+"No contact ID was submitted." => "Tiada ID kenalan yang diberi.",
+"Error reading contact photo." => "Ralat pada foto kenalan.",
+"Error saving temporary file." => "Ralat menyimpan fail sementara",
+"The loading photo is not valid." => "Foto muatan tidak sah.",
+"Contact ID is missing." => "ID Kenalan telah hilang.",
+"No photo path was submitted." => "Tiada direktori gambar yang diberi.",
+"File doesn't exist:" => "Fail tidak wujud:",
+"Error loading image." => "Ralat pada muatan imej.",
+"Error getting contact object." => "Ralat mendapatkan objek pada kenalan.",
+"Error getting PHOTO property." => "Ralat mendapatkan maklumat gambar.",
+"Error saving contact." => "Ralat menyimpan kenalan.",
+"Error resizing image" => "Ralat mengubah saiz imej",
+"Error cropping image" => "Ralat memotong imej",
+"Error creating temporary image" => "Ralat mencipta imej sementara",
+"Error finding image: " => "Ralat mencari imej: ",
+"Error uploading contacts to storage." => "Ralat memuatnaik senarai kenalan.",
+"There is no error, the file uploaded with success" => "Tiada ralat berlaku, fail berjaya dimuatnaik",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Saiz fail yang dimuatnaik melebihi upload_max_filesize yang ditetapkan dalam php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Saiz fail yang dimuatnaik melebihi MAX_FILE_SIZE yang ditetapkan dalam borang HTML",
+"The uploaded file was only partially uploaded" => "Fail yang dimuatnaik tidak lengkap",
+"No file was uploaded" => "Tiada fail dimuatnaik",
+"Missing a temporary folder" => "Direktori sementara hilang",
+"Couldn't save temporary image: " => "Tidak boleh menyimpan imej sementara: ",
+"Couldn't load temporary image: " => "Tidak boleh membuka imej sementara: ",
+"No file was uploaded. Unknown error" => "Tiada fail dimuatnaik. Ralat tidak diketahui.",
"Contacts" => "Hubungan-hubungan",
+"Sorry, this functionality has not been implemented yet" => "Maaf, fungsi ini masih belum boleh diguna lagi",
+"Not implemented" => "Tidak digunakan",
+"Couldn't get a valid address." => "Tidak boleh mendapat alamat yang sah.",
+"Error" => "Ralat",
+"This property has to be non-empty." => "Nilai ini tidak boleh kosong.",
+"Couldn't serialize elements." => "Tidak boleh menggabungkan elemen.",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' dipanggil tanpa argumen taip. Sila maklumkan di bugs.owncloud.org",
+"Edit name" => "Ubah nama",
+"No files selected for upload." => "Tiada fail dipilih untuk muatnaik.",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Fail yang ingin dimuatnaik melebihi saiz yang dibenarkan.",
+"Select type" => "PIlih jenis",
+"Result: " => "Hasil: ",
+" imported, " => " import, ",
+" failed." => " gagal.",
+"Addressbook not found: " => "Buku alamat tidak ditemui:",
"This is not your addressbook." => "Ini bukan buku alamat anda.",
"Contact could not be found." => "Hubungan tidak dapat ditemui",
-"Address" => "Alamat",
-"Telephone" => "Telefon",
-"Email" => "Emel",
-"Organization" => "Organisasi",
"Work" => "Kerja",
"Home" => "Rumah",
+"Other" => "Lain",
"Mobile" => "Mudah alih",
"Text" => "Teks",
"Voice" => "Suara",
+"Message" => "Mesej",
"Fax" => "Fax",
"Video" => "Video",
"Pager" => "Alat Kelui",
+"Internet" => "Internet",
+"Birthday" => "Hari lahir",
+"Business" => "Perniagaan",
+"Clients" => "klien",
+"Holidays" => "Hari kelepasan",
+"Ideas" => "Idea",
+"Journey" => "Perjalanan",
+"Jubilee" => "Jubli",
+"Meeting" => "Mesyuarat",
+"Personal" => "Peribadi",
+"Projects" => "Projek",
+"{name}'s Birthday" => "Hari Lahir {name}",
"Contact" => "Hubungan",
"Add Contact" => "Tambah kenalan",
+"Import" => "Import",
+"Settings" => "Tetapan",
"Addressbooks" => "Senarai Buku Alamat",
-"New Address Book" => "Buku Alamat Baru",
-"CardDav Link" => "Sambungan CardDav",
-"Download" => "Muat naik",
-"Edit" => "Sunting",
+"Close" => "Tutup",
+"Next addressbook" => "Buku alamat seterusnya",
+"Previous addressbook" => "Buku alamat sebelumnya",
+"Drop photo to upload" => "Letak foto disini untuk muatnaik",
+"Delete current photo" => "Padam foto semasa",
+"Edit current photo" => "Ubah foto semasa",
+"Upload new photo" => "Muatnaik foto baru",
+"Select photo from ownCloud" => "Pilih foto dari ownCloud",
+"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Format bebas, Nama pendek, Nama penuh, Unduran dengan koma",
+"Edit name details" => "Ubah butiran nama",
+"Organization" => "Organisasi",
"Delete" => "Padam",
-"Download contact" => "Muat turun hubungan",
-"Delete contact" => "Padam hubungan",
-"Birthday" => "Hari lahir",
+"Nickname" => "Nama Samaran",
+"Enter nickname" => "Masukkan nama samaran",
+"dd-mm-yyyy" => "dd-mm-yyyy",
+"Groups" => "Kumpulan",
+"Separate groups with commas" => "Asingkan kumpulan dengan koma",
+"Edit groups" => "Ubah kumpulan",
"Preferred" => "Pilihan",
+"Please specify a valid email address." => "Berikan alamat emel yang sah.",
+"Enter email address" => "Masukkan alamat emel",
+"Mail to address" => "Hantar ke alamat",
+"Delete email address" => "Padam alamat emel",
+"Enter phone number" => "Masukkan nombor telefon",
+"Delete phone number" => "Padam nombor telefon",
+"View on map" => "Lihat pada peta",
+"Edit address details" => "Ubah butiran alamat",
+"Add notes here." => "Letak nota disini.",
+"Add field" => "Letak ruangan",
"Phone" => "Telefon",
+"Email" => "Emel",
+"Address" => "Alamat",
+"Note" => "Nota",
+"Download contact" => "Muat turun hubungan",
+"Delete contact" => "Padam hubungan",
+"The temporary image has been removed from cache." => "Imej sementara telah dibuang dari cache.",
+"Edit address" => "Ubah alamat",
"Type" => "Jenis",
"PO Box" => "Peti surat",
"Extended" => "Sambungan",
-"Street" => "Jalan",
"City" => "bandar",
"Region" => "Wilayah",
"Zipcode" => "Poskod",
"Country" => "Negara",
-"Add" => "Tambah",
"Addressbook" => "Buku alamat",
-"New Addressbook" => "Buku Alamat Baru",
-"Edit Addressbook" => "Kemaskini Buku Alamat",
-"Displayname" => "Paparan nama",
-"Active" => "Aktif",
+"Hon. prefixes" => "Awalan nama",
+"Miss" => "Cik",
+"Ms" => "Cik",
+"Mr" => "Encik",
+"Sir" => "Tuan",
+"Mrs" => "Puan",
+"Dr" => "Dr",
+"Given name" => "Nama diberi",
+"Additional names" => "Nama tambahan",
+"Family name" => "Nama keluarga",
+"Hon. suffixes" => "Awalan nama",
+"J.D." => "J.D.",
+"M.D." => "M.D.",
+"D.O." => "D.O.",
+"D.C." => "D.C.",
+"Ph.D." => "Ph.D.",
+"Esq." => "Esq.",
+"Jr." => "Jr.",
+"Sn." => "Sn.",
+"Import a contacts file" => "Import fail kenalan",
+"Please choose the addressbook" => "Sila pilih buku alamat",
+"create a new addressbook" => "Cipta buku alamat baru",
+"Name of new addressbook" => "Nama buku alamat",
+"Importing contacts" => "Import senarai kenalan",
+"You have no contacts in your addressbook." => "Anda tidak mempunyai sebarang kenalan didalam buku alamat.",
+"Add contact" => "Letak kenalan",
+"Select Address Books" => "Pilih Buku Alamat",
+"Enter name" => "Masukkan nama",
+"Enter description" => "Masukkan keterangan",
+"CardDAV syncing addresses" => "alamat selarian CardDAV",
+"more info" => "maklumat lanjut",
+"Primary address (Kontact et al)" => "Alamat utama",
+"iOS/OS X" => "iOS/OS X",
+"Download" => "Muat naik",
+"Edit" => "Sunting",
+"New Address Book" => "Buku Alamat Baru",
+"Name" => "Nama",
+"Description" => "Keterangan",
"Save" => "Simpan",
-"Submit" => "Hantar",
-"Cancel" => "Batal"
+"Cancel" => "Batal",
+"More..." => "Lagi..."
);
diff --git a/apps/contacts/l10n/nb_NO.php b/apps/contacts/l10n/nb_NO.php
index 3f7731bede8..5f7c49c8b98 100644
--- a/apps/contacts/l10n/nb_NO.php
+++ b/apps/contacts/l10n/nb_NO.php
@@ -1,45 +1,51 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Et problem oppsto med å (de)aktivere adresseboken.",
-"There was an error adding the contact." => "Et problem oppsto med å legge til kontakten.",
-"Cannot add empty property." => "Kan ikke legge til tomt felt.",
-"At least one of the address fields has to be filled out." => "Minst en av adressefeltene må oppgis.",
-"Error adding contact property." => "Et problem oppsto med å legge til kontaktfeltet.",
+"id is not set." => "id er ikke satt.",
+"Cannot update addressbook with an empty name." => "Kan ikke oppdatere adressebøker uten navn.",
+"Error updating addressbook." => "Et problem oppsto med å oppdatere adresseboken.",
"No ID provided" => "Ingen ID angitt",
"No categories selected for deletion." => "Ingen kategorier valgt for sletting.",
"No address books found." => "Ingen adressebok funnet.",
"No contacts found." => "Ingen kontakter funnet.",
+"There was an error adding the contact." => "Et problem oppsto med å legge til kontakten.",
+"Cannot add empty property." => "Kan ikke legge til tomt felt.",
+"At least one of the address fields has to be filled out." => "Minst en av adressefeltene må oppgis.",
+"Information about vCard is incorrect. Please reload the page." => "Informasjonen om vCard-filen er ikke riktig. Last inn siden på nytt.",
"Missing ID" => "Manglende ID",
-"Cannot add addressbook with an empty name." => "Kan ikke legge til en adressebok uten navn.",
-"Error adding addressbook." => "Et problem oppsto med å legge til adresseboken.",
-"Error activating addressbook." => "Et problem oppsto med å aktivere adresseboken.",
+"Something went FUBAR. " => "Noe gikk fryktelig galt.",
"Error reading contact photo." => "Klarte ikke å lese kontaktbilde.",
"Error saving temporary file." => "Klarte ikke å lagre midlertidig fil.",
"The loading photo is not valid." => "Bildet som lastes inn er ikke gyldig.",
-"id is not set." => "id er ikke satt.",
-"Information about vCard is incorrect. Please reload the page." => "Informasjonen om vCard-filen er ikke riktig. Last inn siden på nytt.",
-"Error deleting contact property." => "Et problem oppsto med å fjerne kontaktfeltet.",
-"Missing contact id." => "Mangler kontakt-id.",
+"Contact ID is missing." => "Kontakt-ID mangler.",
"No photo path was submitted." => "Ingen filsti ble lagt inn.",
"File doesn't exist:" => "Filen eksisterer ikke:",
"Error loading image." => "Klarte ikke å laste bilde.",
-"Something went FUBAR. " => "Noe gikk fryktelig galt.",
-"Error updating contact property." => "Et problem oppsto med å legge til kontaktfeltet.",
-"Cannot update addressbook with an empty name." => "Kan ikke oppdatere adressebøker uten navn.",
-"Error updating addressbook." => "Et problem oppsto med å oppdatere adresseboken.",
+"Error saving contact." => "Klarte ikke å lagre kontakt.",
+"Error resizing image" => "Klarte ikke å endre størrelse på bildet",
+"Error cropping image" => "Klarte ikke å beskjære bildet",
+"Error creating temporary image" => "Klarte ikke å lage et midlertidig bilde",
+"Error finding image: " => "Kunne ikke finne bilde:",
+"Error uploading contacts to storage." => "Klarte ikke å laste opp kontakter til lagringsplassen",
"There is no error, the file uploaded with success" => "Pust ut, ingen feil. Filen ble lastet opp problemfritt",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Filen du prøvde å laste opp var større enn grensen upload_max_filesize i php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Filen du prøvde å laste opp var større enn grensen satt i MAX_FILE_SIZE i HTML-skjemaet.",
"The uploaded file was only partially uploaded" => "Filen du prøvde å laste opp ble kun delvis lastet opp",
"No file was uploaded" => "Ingen filer ble lastet opp",
"Missing a temporary folder" => "Mangler midlertidig mappe",
+"Couldn't save temporary image: " => "Kunne ikke lagre midlertidig bilde:",
+"Couldn't load temporary image: " => "Kunne ikke laste midlertidig bilde:",
+"No file was uploaded. Unknown error" => "Ingen filer ble lastet opp. Ukjent feil.",
"Contacts" => "Kontakter",
-"Addressbook not found." => "Adresseboken ble ikke funnet.",
+"Error" => "Feil",
+"Edit name" => "Endre navn",
+"No files selected for upload." => "Ingen filer valgt for opplasting.",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Filen du prøver å laste opp er for stor.",
+"Select type" => "Velg type",
+"Result: " => "Resultat:",
+" imported, " => "importert,",
+" failed." => "feilet.",
"This is not your addressbook." => "Dette er ikke dine adressebok.",
"Contact could not be found." => "Kontakten ble ikke funnet.",
-"Address" => "Adresse",
-"Telephone" => "Telefon",
-"Email" => "E-post",
-"Organization" => "Organisasjon",
"Work" => "Arbeid",
"Home" => "Hjem",
"Mobile" => "Mobil",
@@ -50,24 +56,23 @@
"Video" => "Video",
"Pager" => "Pager",
"Internet" => "Internett",
-"{name}'s Birthday" => "bursdagen til {name}",
+"Birthday" => "Bursdag",
+"{name}'s Birthday" => "{name}s bursdag",
"Contact" => "Kontakt",
"Add Contact" => "Ny kontakt",
+"Import" => "Importer",
"Addressbooks" => "Adressebøker",
-"Configure Address Books" => "Konfigurer adressebok",
-"New Address Book" => "Ny adressebok",
-"Import from VCF" => "Importer fra VDF",
-"CardDav Link" => "CardDAV-lenke",
-"Download" => "Hent ned",
-"Edit" => "Rediger",
-"Delete" => "Slett",
-"Download contact" => "Hend ned kontakten",
-"Delete contact" => "Slett kontakt",
+"Close" => "Lukk",
"Drop photo to upload" => "Dra bilder hit for å laste opp",
+"Delete current photo" => "Fjern nåværende bilde",
+"Edit current photo" => "Rediger nåværende bilde",
+"Upload new photo" => "Last opp nytt bilde",
+"Select photo from ownCloud" => "Velg bilde fra ownCloud",
"Edit name details" => "Endre detaljer rundt navn",
+"Organization" => "Organisasjon",
+"Delete" => "Slett",
"Nickname" => "Kallenavn",
"Enter nickname" => "Skriv inn kallenavn",
-"Birthday" => "Bursdag",
"dd-mm-yyyy" => "dd-mm-åååå",
"Groups" => "Grupper",
"Separate groups with commas" => "Skill gruppene med komma",
@@ -83,25 +88,23 @@
"Edit address details" => "Endre detaljer rundt adresse",
"Add notes here." => "Legg inn notater her.",
"Add field" => "Legg til felt",
-"Profile picture" => "Profilbilde",
"Phone" => "Telefon",
+"Email" => "E-post",
+"Address" => "Adresse",
"Note" => "Notat",
-"Delete current photo" => "Fjern nåværende bilde",
-"Edit current photo" => "Rediger nåværende bilde",
-"Upload new photo" => "Last opp nytt bilde",
-"Select photo from ownCloud" => "Velg bilde fra ownCloud",
+"Download contact" => "Hend ned kontakten",
+"Delete contact" => "Slett kontakt",
+"The temporary image has been removed from cache." => "Det midlertidige bildet er fjernet fra cache.",
"Edit address" => "Endre adresse",
"Type" => "Type",
"PO Box" => "Postboks",
"Extended" => "Utvidet",
-"Street" => "Gate",
"City" => "By",
"Region" => "Området",
"Zipcode" => "Postnummer",
"Country" => "Land",
-"Edit categories" => "Endre kategorier",
-"Add" => "Ny",
"Addressbook" => "Adressebok",
+"Hon. prefixes" => "Ærestitler",
"Miss" => "Frøken",
"Mr" => "Herr",
"Mrs" => "Fru",
@@ -118,18 +121,21 @@
"Displayname" => "Visningsnavn",
"Active" => "Aktiv",
"Save" => "Lagre",
-"Submit" => "Lagre",
+"Submit" => "Send inn",
"Cancel" => "Avbryt",
"Import a contacts file" => "Importer en fil med kontakter.",
"Please choose the addressbook" => "Vennligst velg adressebok",
"create a new addressbook" => "Lag ny adressebok",
"Name of new addressbook" => "Navn på ny adressebok",
-"Import" => "Importer",
"Importing contacts" => "Importerer kontakter",
"You have no contacts in your addressbook." => "Du har ingen kontakter i din adressebok",
"Add contact" => "Ny kontakt",
-"Configure addressbooks" => "Konfigurer adressebøker",
"CardDAV syncing addresses" => "Synkroniseringsadresse for CardDAV",
"more info" => "mer info",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Download" => "Hent ned",
+"Edit" => "Rediger",
+"New Address Book" => "Ny adressebok",
+"Save" => "Lagre",
+"Cancel" => "Avbryt"
);
diff --git a/apps/contacts/l10n/nl.php b/apps/contacts/l10n/nl.php
index fd7e50ba4d5..bcf93c506a9 100644
--- a/apps/contacts/l10n/nl.php
+++ b/apps/contacts/l10n/nl.php
@@ -1,39 +1,32 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Fout bij het (de)activeren van het adresboek.",
-"There was an error adding the contact." => "Er was een fout bij het toevoegen van het contact.",
-"Cannot add empty property." => "Kan geen lege eigenschap toevoegen.",
-"At least one of the address fields has to be filled out." => "Minstens één van de adresvelden moet ingevuld worden.",
-"Trying to add duplicate property: " => "Eigenschap bestaat al: ",
-"Error adding contact property." => "Fout bij het toevoegen van de contacteigenschap.",
+"id is not set." => "id is niet ingesteld.",
+"Cannot update addressbook with an empty name." => "Kan adresboek zonder naam niet wijzigen",
+"Error updating addressbook." => "Fout bij het updaten van het adresboek.",
"No ID provided" => "Geen ID opgegeven",
"Error setting checksum." => "Instellen controlegetal mislukt",
"No categories selected for deletion." => "Geen categorieën geselecteerd om te verwijderen.",
"No address books found." => "Geen adresboek gevonden",
"No contacts found." => "Geen contracten gevonden",
+"There was an error adding the contact." => "Er was een fout bij het toevoegen van het contact.",
+"element name is not set." => "onderdeel naam is niet opgegeven.",
+"Cannot add empty property." => "Kan geen lege eigenschap toevoegen.",
+"At least one of the address fields has to be filled out." => "Minstens één van de adresvelden moet ingevuld worden.",
+"Trying to add duplicate property: " => "Eigenschap bestaat al: ",
+"Information about vCard is incorrect. Please reload the page." => "Informatie over de vCard is onjuist. Herlaad de pagina.",
"Missing ID" => "Ontbrekend ID",
"Error parsing VCard for ID: \"" => "Fout bij inlezen VCard voor ID: \"",
-"Cannot add addressbook with an empty name." => "Kan geen adresboek toevoegen zonder naam.",
-"Error adding addressbook." => "Fout bij het toevoegen van het adresboek.",
-"Error activating addressbook." => "Fout bij het activeren van het adresboek.",
+"checksum is not set." => "controlegetal is niet opgegeven.",
+"Information about vCard is incorrect. Please reload the page: " => "Informatie over vCard is fout. Herlaad de pagina: ",
+"Something went FUBAR. " => "Er ging iets totaal verkeerd. ",
"No contact ID was submitted." => "Geen contact ID opgestuurd.",
"Error reading contact photo." => "Lezen van contact foto mislukt.",
"Error saving temporary file." => "Tijdelijk bestand opslaan mislukt.",
"The loading photo is not valid." => "De geladen foto is niet goed.",
-"id is not set." => "id is niet ingesteld.",
-"Information about vCard is incorrect. Please reload the page." => "Informatie over de vCard is onjuist. Herlaad de pagina.",
-"Error deleting contact property." => "Fout bij het verwijderen van de contacteigenschap.",
"Contact ID is missing." => "Contact ID ontbreekt.",
-"Missing contact id." => "Ontbrekende contact id.",
"No photo path was submitted." => "Geen fotopad opgestuurd.",
"File doesn't exist:" => "Bestand bestaat niet:",
"Error loading image." => "Fout bij laden plaatje.",
-"element name is not set." => "onderdeel naam is niet opgegeven.",
-"checksum is not set." => "controlegetal is niet opgegeven.",
-"Information about vCard is incorrect. Please reload the page: " => "Informatie over vCard is fout. Herlaad de pagina: ",
-"Something went FUBAR. " => "Er ging iets totaal verkeerd. ",
-"Error updating contact property." => "Fout bij het updaten van de contacteigenschap.",
-"Cannot update addressbook with an empty name." => "Kan adresboek zonder naam niet wijzigen",
-"Error updating addressbook." => "Fout bij het updaten van het adresboek.",
"Error uploading contacts to storage." => "Fout bij opslaan van contacten.",
"There is no error, the file uploaded with success" => "De upload van het bestand is goedgegaan.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Het bestand overschrijdt de upload_max_filesize instelling in php.ini",
@@ -42,14 +35,8 @@
"No file was uploaded" => "Er is geen bestand geüpload",
"Missing a temporary folder" => "Er ontbreekt een tijdelijke map",
"Contacts" => "Contacten",
-"Drop a VCF file to import contacts." => "Sleep een VCF bestand om de contacten te importeren.",
-"Addressbook not found." => "Adresboek niet gevonden.",
"This is not your addressbook." => "Dit is niet uw adresboek.",
"Contact could not be found." => "Contact kon niet worden gevonden.",
-"Address" => "Adres",
-"Telephone" => "Telefoon",
-"Email" => "E-mail",
-"Organization" => "Organisatie",
"Work" => "Werk",
"Home" => "Thuis",
"Mobile" => "Mobiel",
@@ -60,25 +47,23 @@
"Video" => "Video",
"Pager" => "Pieper",
"Internet" => "Internet",
+"Birthday" => "Verjaardag",
"{name}'s Birthday" => "{name}'s verjaardag",
"Contact" => "Contact",
"Add Contact" => "Contact toevoegen",
+"Import" => "Importeer",
"Addressbooks" => "Adresboeken",
-"Configure Address Books" => "Instellen adresboeken",
-"New Address Book" => "Nieuw Adresboek",
-"Import from VCF" => "Importeer uit VCF",
-"CardDav Link" => "CardDav Link",
-"Download" => "Download",
-"Edit" => "Bewerken",
-"Delete" => "Verwijderen",
-"Download contact" => "Download contact",
-"Delete contact" => "Verwijder contact",
"Drop photo to upload" => "Verwijder foto uit upload",
+"Delete current photo" => "Verwijdere huidige foto",
+"Edit current photo" => "Wijzig huidige foto",
+"Upload new photo" => "Upload nieuwe foto",
+"Select photo from ownCloud" => "Selecteer foto uit ownCloud",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Formateer aangepast, Korte naam, Volledige naam, Achteruit of Achteruit met komma",
"Edit name details" => "Wijzig naam gegevens",
+"Organization" => "Organisatie",
+"Delete" => "Verwijderen",
"Nickname" => "Roepnaam",
"Enter nickname" => "Voer roepnaam in",
-"Birthday" => "Verjaardag",
"dd-mm-yyyy" => "dd-mm-yyyy",
"Groups" => "Groepen",
"Separate groups with commas" => "Gebruik komma bij meerder groepen",
@@ -94,49 +79,45 @@
"Edit address details" => "Wijzig adres gegevens",
"Add notes here." => "Voeg notitie toe",
"Add field" => "Voeg veld toe",
-"Profile picture" => "Profiel foto",
"Phone" => "Telefoon",
+"Email" => "E-mail",
+"Address" => "Adres",
"Note" => "Notitie",
-"Delete current photo" => "Verwijdere huidige foto",
-"Edit current photo" => "Wijzig huidige foto",
-"Upload new photo" => "Upload nieuwe foto",
-"Select photo from ownCloud" => "Selecteer foto uit ownCloud",
+"Download contact" => "Download contact",
+"Delete contact" => "Verwijder contact",
"Edit address" => "Wijzig adres",
"Type" => "Type",
"PO Box" => "Postbus",
"Extended" => "Uitgebreide",
-"Street" => "Straat",
"City" => "Stad",
"Region" => "Regio",
"Zipcode" => "Postcode",
"Country" => "Land",
-"Edit categories" => "Wijzig categorieën",
-"Add" => "Voeg toe",
"Addressbook" => "Adresboek",
"Hon. prefixes" => "Hon. prefixes",
"Given name" => "Voornaam",
"Additional names" => "Extra namen",
"Family name" => "Achternaam",
-"New Addressbook" => "Nieuw adresboek",
-"Edit Addressbook" => "Wijzig adresboek",
-"Displayname" => "Weergavenaam",
-"Active" => "Actief",
-"Save" => "Opslaan",
-"Submit" => "Opslaan",
-"Cancel" => "Anuleren",
"Import a contacts file" => "Importeer een contacten bestand",
"Please choose the addressbook" => "Kies een adresboek",
"create a new addressbook" => "Maak een nieuw adresboek",
"Name of new addressbook" => "Naam van nieuw adresboek",
-"Import" => "Importeer",
"Importing contacts" => "Importeren van contacten",
+"Contacts imported successfully" => "Contacten zijn geïmporteerd",
+"Close Dialog" => "Sluit venster",
+"Import Addressbook" => "Importeer adresboek",
"Select address book to import to:" => "Selecteer adresboek voor import:",
+"Drop a VCF file to import contacts." => "Sleep een VCF bestand om de contacten te importeren.",
"Select from HD" => "Selecteer van schijf",
"You have no contacts in your addressbook." => "Je hebt geen contacten in je adresboek",
"Add contact" => "Contactpersoon toevoegen",
-"Configure addressbooks" => "Bewerken adresboeken",
"CardDAV syncing addresses" => "CardDAV synchroniseert de adressen",
"more info" => "meer informatie",
"Primary address (Kontact et al)" => "Standaardadres",
-"iOS/OS X" => "IOS/OS X"
+"iOS/OS X" => "IOS/OS X",
+"Download" => "Download",
+"Edit" => "Bewerken",
+"New Address Book" => "Nieuw Adresboek",
+"Save" => "Opslaan",
+"Cancel" => "Anuleren"
);
diff --git a/apps/contacts/l10n/nn_NO.php b/apps/contacts/l10n/nn_NO.php
index 5b3fc5b1ab3..2e3ab16da3e 100644
--- a/apps/contacts/l10n/nn_NO.php
+++ b/apps/contacts/l10n/nn_NO.php
@@ -1,22 +1,13 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Ein feil oppstod ved (de)aktivering av adressebok.",
+"Error updating addressbook." => "Eit problem oppstod ved å oppdatere adresseboka.",
"There was an error adding the contact." => "Det kom ei feilmelding då kontakta vart lagt til.",
"Cannot add empty property." => "Kan ikkje leggja til tomt felt.",
"At least one of the address fields has to be filled out." => "Minst eit av adressefelta må fyllast ut.",
-"Error adding contact property." => "Eit problem oppstod ved å leggja til kontakteltet.",
-"Error adding addressbook." => "Eit problem oppstod ved å leggja til adresseboka.",
-"Error activating addressbook." => "Eit problem oppstod ved aktivering av adresseboka.",
"Information about vCard is incorrect. Please reload the page." => "Informasjonen om vCard-et er feil, ver venleg og last sida på nytt.",
-"Error deleting contact property." => "Eit problem oppstod ved å slette kontaktfeltet.",
-"Error updating contact property." => "Eit problem oppstod ved å endre kontaktfeltet.",
-"Error updating addressbook." => "Eit problem oppstod ved å oppdatere adresseboka.",
"Contacts" => "Kotaktar",
"This is not your addressbook." => "Dette er ikkje di adressebok.",
"Contact could not be found." => "Fann ikkje kontakten.",
-"Address" => "Adresse",
-"Telephone" => "Telefonnummer",
-"Email" => "Epost",
-"Organization" => "Organisasjon",
"Work" => "Arbeid",
"Home" => "Heime",
"Mobile" => "Mobil",
@@ -25,34 +16,29 @@
"Fax" => "Faks",
"Video" => "Video",
"Pager" => "Personsøkjar",
+"Birthday" => "Bursdag",
"Contact" => "Kontakt",
"Add Contact" => "Legg til kontakt",
"Addressbooks" => "Adressebøker",
-"New Address Book" => "Ny adressebok",
-"CardDav Link" => "CardDav lenkje",
-"Download" => "Last ned",
-"Edit" => "Endra",
+"Organization" => "Organisasjon",
"Delete" => "Slett",
-"Download contact" => "Last ned kontakt",
-"Delete contact" => "Slett kontakt",
-"Birthday" => "Bursdag",
"Preferred" => "Føretrekt",
"Phone" => "Telefonnummer",
+"Email" => "Epost",
+"Address" => "Adresse",
+"Download contact" => "Last ned kontakt",
+"Delete contact" => "Slett kontakt",
"Type" => "Skriv",
"PO Box" => "Postboks",
"Extended" => "Utvida",
-"Street" => "Gate",
"City" => "Stad",
"Region" => "Region/fylke",
"Zipcode" => "Postnummer",
"Country" => "Land",
-"Add" => "Legg til",
"Addressbook" => "Adressebok",
-"New Addressbook" => "Ny adressebok",
-"Edit Addressbook" => "Endre adressebok",
-"Displayname" => "Visningsnamn",
-"Active" => "Aktiv",
+"Download" => "Last ned",
+"Edit" => "Endra",
+"New Address Book" => "Ny adressebok",
"Save" => "Lagre",
-"Submit" => "Send",
"Cancel" => "Kanseller"
);
diff --git a/apps/contacts/l10n/pl.php b/apps/contacts/l10n/pl.php
index a99f1906958..924622ebb0f 100644
--- a/apps/contacts/l10n/pl.php
+++ b/apps/contacts/l10n/pl.php
@@ -1,39 +1,40 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Błąd (de)aktywowania książki adresowej.",
-"There was an error adding the contact." => "Wystąpił błąd podczas dodawania kontaktu.",
-"Cannot add empty property." => "Nie można dodać pustego elementu.",
-"At least one of the address fields has to be filled out." => "Należy wypełnić przynajmniej jedno pole adresu.",
-"Trying to add duplicate property: " => "Próba dodania z duplikowanej właściwości:",
-"Error adding contact property." => "BÅ‚Ä…d dodawania elementu.",
+"id is not set." => "id nie ustawione.",
+"Cannot update addressbook with an empty name." => "Nie można zaktualizować książki adresowej z pustą nazwą.",
+"Error updating addressbook." => "Błąd uaktualniania książki adresowej.",
"No ID provided" => "Brak opatrzonego ID ",
"Error setting checksum." => "Błąd ustawień sumy kontrolnej",
"No categories selected for deletion." => "Nie zaznaczono kategorii do usunięcia",
"No address books found." => "Nie znaleziono książek adresowych",
"No contacts found." => "Nie znaleziono kontaktów.",
+"There was an error adding the contact." => "Wystąpił błąd podczas dodawania kontaktu.",
+"element name is not set." => "nazwa elementu nie jest ustawiona.",
+"Could not parse contact: " => "Nie można parsować kontaktu:",
+"Cannot add empty property." => "Nie można dodać pustego elementu.",
+"At least one of the address fields has to be filled out." => "Należy wypełnić przynajmniej jedno pole adresu.",
+"Trying to add duplicate property: " => "Próba dodania z duplikowanej właściwości:",
+"Information about vCard is incorrect. Please reload the page." => "Informacje o vCard są nieprawidłowe. Proszę odświeżyć stronę.",
"Missing ID" => "Brak ID",
"Error parsing VCard for ID: \"" => "Wystąpił błąd podczas przetwarzania VCard ID: \"",
-"Cannot add addressbook with an empty name." => "Nie można dodać książki adresowej z pusta nazwą",
-"Error adding addressbook." => "Błąd dodawania książki adresowej.",
-"Error activating addressbook." => "Błąd aktywowania książki adresowej.",
+"checksum is not set." => "checksum-a nie ustawiona",
+"Information about vCard is incorrect. Please reload the page: " => "Informacje na temat vCard są niepoprawne. Proszę przeładuj stronę:",
+"Something went FUBAR. " => "Gdyby coś poszło FUBAR.",
"No contact ID was submitted." => "ID kontaktu nie został utworzony.",
"Error reading contact photo." => "Błąd odczytu zdjęcia kontaktu.",
"Error saving temporary file." => "Wystąpił błąd podczas zapisywania pliku tymczasowego.",
"The loading photo is not valid." => "Wczytywane zdjęcie nie jest poprawne.",
-"id is not set." => "id nie ustawione.",
-"Information about vCard is incorrect. Please reload the page." => "Informacje o vCard są nieprawidłowe. Proszę odświeżyć stronę.",
-"Error deleting contact property." => "BÅ‚Ä…d usuwania elementu.",
"Contact ID is missing." => "Brak kontaktu id.",
-"Missing contact id." => "Brak kontaktu id.",
"No photo path was submitted." => "Ścieżka do zdjęcia nie została podana.",
"File doesn't exist:" => "Plik nie istnieje:",
"Error loading image." => "BÅ‚Ä…d Å‚adowania obrazu.",
-"element name is not set." => "nazwa elementu nie jest ustawiona.",
-"checksum is not set." => "checksum-a nie ustawiona",
-"Information about vCard is incorrect. Please reload the page: " => "Informacje na temat vCard są niepoprawne. Proszę przeładuj stronę:",
-"Something went FUBAR. " => "Gdyby coś poszło FUBAR.",
-"Error updating contact property." => "BÅ‚Ä…d uaktualniania elementu.",
-"Cannot update addressbook with an empty name." => "Nie można zaktualizować książki adresowej z pustą nazwą.",
-"Error updating addressbook." => "Błąd uaktualniania książki adresowej.",
+"Error getting contact object." => "BÅ‚Ä…d pobrania kontaktu.",
+"Error getting PHOTO property." => "Błąd uzyskiwania właściwości ZDJĘCIA.",
+"Error saving contact." => "BÅ‚Ä…d zapisu kontaktu.",
+"Error resizing image" => "BÅ‚Ä…d zmiany rozmiaru obrazu",
+"Error cropping image" => "BÅ‚Ä…d przycinania obrazu",
+"Error creating temporary image" => "BÅ‚Ä…d utworzenia obrazu tymczasowego",
+"Error finding image: " => "BÅ‚Ä…d znajdowanie obrazu: ",
"Error uploading contacts to storage." => "Wystąpił błąd podczas wysyłania kontaktów do magazynu.",
"There is no error, the file uploaded with success" => "Nie było błędów, plik wyczytano poprawnie.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Załadowany plik przekracza wielkość upload_max_filesize w php.ini ",
@@ -41,17 +42,46 @@
"The uploaded file was only partially uploaded" => "Załadowany plik tylko częściowo został wysłany.",
"No file was uploaded" => "Plik nie został załadowany",
"Missing a temporary folder" => "Brak folderu tymczasowego",
+"Couldn't save temporary image: " => "Nie można zapisać obrazu tymczasowego: ",
+"Couldn't load temporary image: " => "Nie można wczytać obrazu tymczasowego: ",
+"No file was uploaded. Unknown error" => "Plik nie został załadowany. Nieznany błąd",
"Contacts" => "Kontakty",
-"Drop a VCF file to import contacts." => "Upuść plik VCF do importu kontaktów.",
-"Addressbook not found." => "Nie znaleziono książki adresowej",
+"Sorry, this functionality has not been implemented yet" => "Niestety, ta funkcja nie została jeszcze zaimplementowana",
+"Not implemented" => "Nie wdrożono",
+"Couldn't get a valid address." => "Nie można pobrać prawidłowego adresu.",
+"Error" => "BÅ‚Ä…d",
+"This property has to be non-empty." => "Ta właściwość nie może być pusta.",
+"Couldn't serialize elements." => "Nie można serializować elementów.",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "\"deleteProperty' wywołana bez argumentu typu. Proszę raportuj na bugs.owncloud.org",
+"Edit name" => "Zmień nazwę",
+"No files selected for upload." => "Żadne pliki nie zostały zaznaczone do wysłania.",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Plik, który próbujesz wysłać przekracza maksymalny rozmiar pliku przekazywania na tym serwerze.",
+"Error loading profile picture." => "Błąd wczytywania zdjęcia profilu.",
+"Select type" => "Wybierz typ",
+"Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted." => "Niektóre kontakty są zaznaczone do usunięcia, ale nie są usunięte jeszcze. Proszę czekać na ich usunięcie.",
+"Do you want to merge these address books?" => "Czy chcesz scalić te książki adresowe?",
+"Result: " => "Wynik: ",
+" imported, " => " importowane, ",
+" failed." => " nie powiodło się.",
+"Displayname cannot be empty." => "Nazwa nie może być pusta.",
+"Addressbook not found: " => "Nie znaleziono książki adresowej:",
"This is not your addressbook." => "To nie jest Twoja książka adresowa.",
"Contact could not be found." => "Nie można odnaleźć kontaktu.",
-"Address" => "Adres",
-"Telephone" => "Telefon",
-"Email" => "E-mail",
-"Organization" => "Organizacja",
+"Jabber" => "Jabber",
+"AIM" => "AIM",
+"MSN" => "MSN",
+"Twitter" => "Twitter",
+"GoogleTalk" => "GoogleTalk",
+"Facebook" => "Facebook",
+"XMPP" => "XMPP",
+"ICQ" => "ICQ",
+"Yahoo" => "Yahoo",
+"Skype" => "Skype",
+"QQ" => "QQ",
+"GaduGadu" => "GG",
"Work" => "Praca",
"Home" => "Dom",
+"Other" => "Inne",
"Mobile" => "Komórka",
"Text" => "Połączenie tekstowe",
"Voice" => "Połączenie głosowe",
@@ -60,25 +90,52 @@
"Video" => "Połączenie wideo",
"Pager" => "Pager",
"Internet" => "Internet",
+"Birthday" => "Urodziny",
+"Business" => "Biznesowe",
+"Call" => "Wywołanie",
+"Clients" => "Klienci",
+"Deliverer" => "Doręczanie",
+"Holidays" => "Święta",
+"Ideas" => "Pomysły",
+"Journey" => "Podróż",
+"Jubilee" => "Jubileusz",
+"Meeting" => "Spotkanie",
+"Personal" => "Osobiste",
+"Projects" => "Projekty",
+"Questions" => "Pytania",
"{name}'s Birthday" => "{name} Urodzony",
"Contact" => "Kontakt",
"Add Contact" => "Dodaj kontakt",
+"Import" => "Import",
+"Settings" => "Ustawienia",
"Addressbooks" => "Książki adresowe",
-"Configure Address Books" => "Konfiguruj książkę adresową",
-"New Address Book" => "Nowa książka adresowa",
-"Import from VCF" => "Importuj z VFC",
-"CardDav Link" => "Wyświetla odnośnik CardDav",
-"Download" => "Pobiera książkę adresową",
-"Edit" => "Edytuje książkę adresową",
-"Delete" => "Usuwa książkę adresową",
-"Download contact" => "Pobiera kontakt",
-"Delete contact" => "Usuwa kontakt",
+"Close" => "Zamknij",
+"Keyboard shortcuts" => "Skróty klawiatury",
+"Navigation" => "Nawigacja",
+"Next contact in list" => "Następny kontakt na liście",
+"Previous contact in list" => "Poprzedni kontakt na liście",
+"Expand/collapse current addressbook" => "Rozwiń/Zwiń bieżącą książkę adresową",
+"Next addressbook" => "Następna książka adresowa",
+"Previous addressbook" => "Poprzednia książka adresowa",
+"Actions" => "Akcje",
+"Refresh contacts list" => "Odśwież listę kontaktów",
+"Add new contact" => "Dodaj nowy kontakt",
+"Add new addressbook" => "Dodaj nowa książkę adresową",
+"Delete current contact" => "Usuń obecny kontakt",
"Drop photo to upload" => "Upuść fotografię aby załadować",
+"Delete current photo" => "Usuń aktualne zdjęcie",
+"Edit current photo" => "Edytuj aktualne zdjęcie",
+"Upload new photo" => "Wczytaj nowe zdjęcie",
+"Select photo from ownCloud" => "Wybierz zdjęcie z ownCloud",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Format niestandardowy, krótkie nazwy, imię i nazwisko, Odwracać lub Odwrócić z przecinkiem",
"Edit name details" => "Edytuj szczegóły nazwy",
+"Organization" => "Organizacja",
+"Delete" => "Usuwa książkę adresową",
"Nickname" => "Nazwa",
"Enter nickname" => "Wpisz nazwÄ™",
-"Birthday" => "Urodziny",
+"Web site" => "Strona www",
+"http://www.somesite.com" => "http://www.jakasstrona.pl",
+"Go to web site" => "Idż do strony www",
"dd-mm-yyyy" => "dd-mm-rrrr",
"Groups" => "Grupy",
"Separate groups with commas" => "Oddziel grupy przecinkami",
@@ -94,24 +151,26 @@
"Edit address details" => "Edytuj szczegóły adresu",
"Add notes here." => "Dodaj notatkÄ™ tutaj.",
"Add field" => "Dodaj pole",
-"Profile picture" => "Zdjęcie profilu",
"Phone" => "Telefon",
+"Email" => "E-mail",
+"Address" => "Adres",
"Note" => "Uwaga",
-"Delete current photo" => "Usuń aktualne zdjęcie",
-"Edit current photo" => "Edytuj aktualne zdjęcie",
-"Upload new photo" => "Wczytaj nowe zdjęcie",
-"Select photo from ownCloud" => "Wybierz zdjęcie z ownCloud",
+"Download contact" => "Pobiera kontakt",
+"Delete contact" => "Usuwa kontakt",
+"The temporary image has been removed from cache." => "Tymczasowy obraz został usunięty z pamięci podręcznej.",
"Edit address" => "Edytuj adres",
"Type" => "Typ",
"PO Box" => "Skrzynka pocztowa",
+"Street address" => "Ulica",
+"Street and number" => "Ulica i numer",
"Extended" => "Rozszerzony",
-"Street" => "Ulica",
+"Apartment number etc." => "Numer lokalu",
"City" => "Miasto",
"Region" => "Region",
+"E.g. state or province" => "Np. stanu lub prowincji",
"Zipcode" => "Kod pocztowy",
+"Postal code" => "Kod pocztowy",
"Country" => "Kraj",
-"Edit categories" => "Edytuj kategorie",
-"Add" => "Dodaj",
"Addressbook" => "Książka adresowa",
"Hon. prefixes" => "Prefiksy Hon.",
"Miss" => "Panna",
@@ -132,26 +191,29 @@
"Esq." => "Esq.",
"Jr." => "Jr.",
"Sn." => "Sn.",
-"New Addressbook" => "Nowa książka adresowa",
-"Edit Addressbook" => "Edytowanie książki adresowej",
-"Displayname" => "Wyświetlana nazwa",
-"Active" => "Aktywna",
-"Save" => "Zapisz",
-"Submit" => "Potwierdź",
-"Cancel" => "Anuluj",
"Import a contacts file" => "Importuj plik z kontaktami",
"Please choose the addressbook" => "Proszę wybrać książkę adresową",
"create a new addressbook" => "utwórz nową książkę adresową",
"Name of new addressbook" => "Nazwa nowej książki adresowej",
-"Import" => "Import",
"Importing contacts" => "importuj kontakty",
-"Select address book to import to:" => "Zaznacz książkę adresową do importu do:",
-"Select from HD" => "Wybierz z HD",
"You have no contacts in your addressbook." => "Nie masz żadnych kontaktów w swojej książce adresowej.",
"Add contact" => "Dodaj kontakt",
-"Configure addressbooks" => "Konfiguruj książkę adresową",
+"Select Address Books" => "Wybierz książki adresowe",
+"Enter name" => "Wpisz nazwÄ™",
+"Enter description" => "Wprowadź opis",
"CardDAV syncing addresses" => "adres do synchronizacji CardDAV",
"more info" => "więcej informacji",
"Primary address (Kontact et al)" => "Pierwszy adres",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Show CardDav link" => "Pokaż link CardDAV",
+"Show read-only VCF link" => "Pokaż tylko do odczytu łącze VCF",
+"Share" => "Udostępnij",
+"Download" => "Pobiera książkę adresową",
+"Edit" => "Edytuje książkę adresową",
+"New Address Book" => "Nowa książka adresowa",
+"Name" => "Nazwa",
+"Description" => "Opis",
+"Save" => "Zapisz",
+"Cancel" => "Anuluj",
+"More..." => "Więcej..."
);
diff --git a/apps/contacts/l10n/pt_BR.php b/apps/contacts/l10n/pt_BR.php
index e0da0a771a5..de43e6cbb0f 100644
--- a/apps/contacts/l10n/pt_BR.php
+++ b/apps/contacts/l10n/pt_BR.php
@@ -1,39 +1,39 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Erro ao (des)ativar agenda.",
-"There was an error adding the contact." => "Ocorreu um erro ao adicionar o contato.",
-"Cannot add empty property." => "Não é possível adicionar propriedade vazia.",
-"At least one of the address fields has to be filled out." => "Pelo menos um dos campos de endereço tem que ser preenchido.",
-"Trying to add duplicate property: " => "Tentando adiciona propriedade duplicada:",
-"Error adding contact property." => "Erro ao adicionar propriedade de contato.",
+"id is not set." => "ID não definido.",
+"Cannot update addressbook with an empty name." => "Não é possível atualizar sua agenda com um nome em branco.",
+"Error updating addressbook." => "Erro ao atualizar agenda.",
"No ID provided" => "Nenhum ID fornecido",
"Error setting checksum." => "Erro ajustando checksum.",
"No categories selected for deletion." => "Nenhum categoria selecionada para remoção.",
"No address books found." => "Nenhuma agenda de endereços encontrada.",
"No contacts found." => "Nenhum contato encontrado.",
+"There was an error adding the contact." => "Ocorreu um erro ao adicionar o contato.",
+"element name is not set." => "nome do elemento não definido.",
+"Cannot add empty property." => "Não é possível adicionar propriedade vazia.",
+"At least one of the address fields has to be filled out." => "Pelo menos um dos campos de endereço tem que ser preenchido.",
+"Trying to add duplicate property: " => "Tentando adiciona propriedade duplicada:",
+"Information about vCard is incorrect. Please reload the page." => "Informações sobre vCard é incorreta. Por favor, recarregue a página.",
"Missing ID" => "Faltando ID",
"Error parsing VCard for ID: \"" => "Erro de identificação VCard para ID:",
-"Cannot add addressbook with an empty name." => "Não é possivel adicionar uma agenda de endereços com o nome em branco.",
-"Error adding addressbook." => "Erro ao adicionar agenda.",
-"Error activating addressbook." => "Erro ao ativar agenda.",
+"checksum is not set." => "checksum não definido.",
+"Information about vCard is incorrect. Please reload the page: " => "Informação sobre vCard incorreto. Por favor, recarregue a página:",
+"Something went FUBAR. " => "Something went FUBAR. ",
"No contact ID was submitted." => "Nenhum ID do contato foi submetido.",
"Error reading contact photo." => "Erro de leitura na foto do contato.",
"Error saving temporary file." => "Erro ao salvar arquivo temporário.",
"The loading photo is not valid." => "Foto carregada não é válida.",
-"id is not set." => "ID não definido.",
-"Information about vCard is incorrect. Please reload the page." => "Informações sobre vCard é incorreta. Por favor, recarregue a página.",
-"Error deleting contact property." => "Erro ao excluir propriedade de contato.",
"Contact ID is missing." => "ID do contato está faltando.",
-"Missing contact id." => "Faltando ID do contato.",
"No photo path was submitted." => "Nenhum caminho para foto foi submetido.",
"File doesn't exist:" => "Arquivo não existe:",
"Error loading image." => "Erro ao carregar imagem.",
-"element name is not set." => "nome do elemento não definido.",
-"checksum is not set." => "checksum não definido.",
-"Information about vCard is incorrect. Please reload the page: " => "Informação sobre vCard incorreto. Por favor, recarregue a página:",
-"Something went FUBAR. " => "Something went FUBAR. ",
-"Error updating contact property." => "Erro ao atualizar propriedades do contato.",
-"Cannot update addressbook with an empty name." => "Não é possível atualizar sua agenda com um nome em branco.",
-"Error updating addressbook." => "Erro ao atualizar agenda.",
+"Error getting contact object." => "Erro ao obter propriedade de contato.",
+"Error getting PHOTO property." => "Erro ao obter propriedade da FOTO.",
+"Error saving contact." => "Erro ao salvar contato.",
+"Error resizing image" => "Erro ao modificar tamanho da imagem",
+"Error cropping image" => "Erro ao recortar imagem",
+"Error creating temporary image" => "Erro ao criar imagem temporária",
+"Error finding image: " => "Erro ao localizar imagem:",
"Error uploading contacts to storage." => "Erro enviando contatos para armazenamento.",
"There is no error, the file uploaded with success" => "Arquivo enviado com sucesso",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "O arquivo enviado excede a diretiva upload_max_filesize em php.ini",
@@ -41,15 +41,26 @@
"The uploaded file was only partially uploaded" => "O arquivo foi parcialmente carregado",
"No file was uploaded" => "Nenhum arquivo carregado",
"Missing a temporary folder" => "Diretório temporário não encontrado",
+"Couldn't save temporary image: " => "Não foi possível salvar a imagem temporária:",
+"Couldn't load temporary image: " => "Não foi possível carregar a imagem temporária:",
+"No file was uploaded. Unknown error" => "Nenhum arquivo foi transferido. Erro desconhecido",
"Contacts" => "Contatos",
-"Drop a VCF file to import contacts." => "Arraste um arquivo VCF para importar contatos.",
-"Addressbook not found." => "Lista de endereços não encontrado.",
+"Sorry, this functionality has not been implemented yet" => "Desculpe, esta funcionalidade não foi implementada ainda",
+"Not implemented" => "não implementado",
+"Couldn't get a valid address." => "Não foi possível obter um endereço válido.",
+"Error" => "Erro",
+"This property has to be non-empty." => "Esta propriedade não pode estar vazia.",
+"Couldn't serialize elements." => "Não foi possível serializar elementos.",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "\"deleteProperty\" chamado sem argumento de tipo. Por favor, informe a bugs.owncloud.org",
+"Edit name" => "Editar nome",
+"No files selected for upload." => "Nenhum arquivo selecionado para carregar.",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "O arquivo que você está tentando carregar excede o tamanho máximo para este servidor.",
+"Select type" => "Selecione o tipo",
+"Result: " => "Resultado:",
+" imported, " => "importado,",
+" failed." => "falhou.",
"This is not your addressbook." => "Esta não é a sua agenda de endereços.",
"Contact could not be found." => "Contato não pôde ser encontrado.",
-"Address" => "Endereço",
-"Telephone" => "Telefone",
-"Email" => "E-mail",
-"Organization" => "Organização",
"Work" => "Trabalho",
"Home" => "Home",
"Mobile" => "Móvel",
@@ -60,25 +71,24 @@
"Video" => "Vídeo",
"Pager" => "Pager",
"Internet" => "Internet",
+"Birthday" => "Aniversário",
"{name}'s Birthday" => "Aniversário de {name}",
"Contact" => "Contato",
"Add Contact" => "Adicionar Contato",
+"Import" => "Importar",
"Addressbooks" => "Agendas de Endereço",
-"Configure Address Books" => "Configurar Livro de Endereços",
-"New Address Book" => "Nova agenda",
-"Import from VCF" => "Importar de VCF",
-"CardDav Link" => "Link CardDav",
-"Download" => "Baixar",
-"Edit" => "Editar",
-"Delete" => "Excluir",
-"Download contact" => "Baixar contato",
-"Delete contact" => "Apagar contato",
+"Close" => "Fechar.",
"Drop photo to upload" => "Arraste a foto para ser carregada",
+"Delete current photo" => "Deletar imagem atual",
+"Edit current photo" => "Editar imagem atual",
+"Upload new photo" => "Carregar nova foto",
+"Select photo from ownCloud" => "Selecionar foto do OwnCloud",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Formato personalizado, Nome curto, Nome completo, Inverter ou Inverter com vírgula",
"Edit name details" => "Editar detalhes do nome",
+"Organization" => "Organização",
+"Delete" => "Excluir",
"Nickname" => "Apelido",
"Enter nickname" => "Digite o apelido",
-"Birthday" => "Aniversário",
"dd-mm-yyyy" => "dd-mm-aaaa",
"Groups" => "Grupos",
"Separate groups with commas" => "Separe grupos por virgula",
@@ -94,24 +104,21 @@
"Edit address details" => "Editar detalhes de endereço",
"Add notes here." => "Adicionar notas",
"Add field" => "Adicionar campo",
-"Profile picture" => "Imagem do Perfil",
"Phone" => "Telefone",
+"Email" => "E-mail",
+"Address" => "Endereço",
"Note" => "Nota",
-"Delete current photo" => "Deletar imagem atual",
-"Edit current photo" => "Editar imagem atual",
-"Upload new photo" => "Carregar nova foto",
-"Select photo from ownCloud" => "Selecionar foto do OwnCloud",
+"Download contact" => "Baixar contato",
+"Delete contact" => "Apagar contato",
+"The temporary image has been removed from cache." => "A imagem temporária foi removida cache.",
"Edit address" => "Editar endereço",
"Type" => "Digite",
"PO Box" => "Caixa Postal",
"Extended" => "Estendido",
-"Street" => "Rua",
"City" => "Cidade",
"Region" => "Região",
"Zipcode" => "CEP",
"Country" => "País",
-"Edit categories" => "Editar categorias",
-"Add" => "Adicionar",
"Addressbook" => "Agenda de Endereço",
"Hon. prefixes" => "Exmo. Prefixos ",
"Miss" => "Senhorita",
@@ -132,26 +139,20 @@
"Esq." => "Esq.",
"Jr." => "Jr.",
"Sn." => "Sn.",
-"New Addressbook" => "Nova Agenda de Endereço",
-"Edit Addressbook" => "Editar Agenda de Endereço",
-"Displayname" => "Nome de exibição",
-"Active" => "Ativo",
-"Save" => "Salvar",
-"Submit" => "Enviar",
-"Cancel" => "Cancelar",
"Import a contacts file" => "Importar arquivos de contato.",
"Please choose the addressbook" => "Por favor, selecione uma agenda de endereços",
"create a new addressbook" => "Criar nova agenda de endereços",
"Name of new addressbook" => "Nome da nova agenda de endereços",
-"Import" => "Importar",
"Importing contacts" => "Importar contatos",
-"Select address book to import to:" => "Selecione agenda de endereços para importar ao destino:",
-"Select from HD" => "Selecione do disco rigído",
"You have no contacts in your addressbook." => "Voce não tem contatos em sua agenda de endereços.",
"Add contact" => "Adicionar contatos",
-"Configure addressbooks" => "Configurar agenda de endereços",
"CardDAV syncing addresses" => "Sincronizando endereços CardDAV",
"more info" => "leia mais",
"Primary address (Kontact et al)" => "Endereço primário(Kontact et al)",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Download" => "Baixar",
+"Edit" => "Editar",
+"New Address Book" => "Nova agenda",
+"Save" => "Salvar",
+"Cancel" => "Cancelar"
);
diff --git a/apps/contacts/l10n/pt_PT.php b/apps/contacts/l10n/pt_PT.php
index 7a4861abf9d..38708c86206 100644
--- a/apps/contacts/l10n/pt_PT.php
+++ b/apps/contacts/l10n/pt_PT.php
@@ -1,52 +1,89 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Erro a (des)ativar o livro de endereços",
-"There was an error adding the contact." => "Erro ao adicionar contato",
-"Cannot add empty property." => "Não é possivel adicionar uma propriedade vazia",
-"At least one of the address fields has to be filled out." => "Pelo menos um dos campos de endereço precisa de estar preenchido",
-"Trying to add duplicate property: " => "A tentar adicionar propriedade duplicada: ",
-"Error adding contact property." => "Erro ao adicionar propriedade do contato",
+"id is not set." => "id não está definido",
+"Cannot update addressbook with an empty name." => "Não é possivel actualizar o livro de endereços com o nome vazio.",
+"Error updating addressbook." => "Erro a atualizar o livro de endereços",
"No ID provided" => "Nenhum ID inserido",
"Error setting checksum." => "Erro a definir checksum.",
"No categories selected for deletion." => "Nenhuma categoria selecionada para eliminar.",
"No address books found." => "Nenhum livro de endereços encontrado.",
"No contacts found." => "Nenhum contacto encontrado.",
+"There was an error adding the contact." => "Erro ao adicionar contato",
+"element name is not set." => "o nome do elemento não está definido.",
+"Could not parse contact: " => "Incapaz de processar contacto",
+"Cannot add empty property." => "Não é possivel adicionar uma propriedade vazia",
+"At least one of the address fields has to be filled out." => "Pelo menos um dos campos de endereço precisa de estar preenchido",
+"Trying to add duplicate property: " => "A tentar adicionar propriedade duplicada: ",
+"Missing IM parameter." => "Falta o parâmetro de mensagens instantâneas (IM)",
+"Unknown IM: " => "Mensagens instantâneas desconhecida (IM)",
+"Information about vCard is incorrect. Please reload the page." => "A informação sobre o vCard está incorreta. Por favor refresque a página",
"Missing ID" => "Falta ID",
"Error parsing VCard for ID: \"" => "Erro a analisar VCard para o ID: \"",
-"Cannot add addressbook with an empty name." => "Não é possivel adicionar Livro de endereços com nome vazio.",
-"Error adding addressbook." => "Erro ao adicionar livro de endereços",
-"Error activating addressbook." => "Erro ao ativar livro de endereços",
+"checksum is not set." => "Checksum não está definido.",
+"Information about vCard is incorrect. Please reload the page: " => "A informação sobre o VCard está incorrecta. Por favor refresque a página: ",
+"Something went FUBAR. " => "Algo provocou um FUBAR. ",
"No contact ID was submitted." => "Nenhum ID de contacto definido.",
"Error reading contact photo." => "Erro a ler a foto do contacto.",
"Error saving temporary file." => "Erro a guardar ficheiro temporário.",
"The loading photo is not valid." => "A foto carregada não é valida.",
-"id is not set." => "id não está definido",
-"Information about vCard is incorrect. Please reload the page." => "A informação sobre o vCard está incorreta. Por favor refresque a página",
-"Error deleting contact property." => "Erro ao apagar propriedade do contato",
"Contact ID is missing." => "Falta o ID do contacto.",
-"Missing contact id." => "Falta o ID do contacto.",
"No photo path was submitted." => "Nenhum caminho da foto definido.",
"File doesn't exist:" => "O ficheiro não existe:",
"Error loading image." => "Erro a carregar a imagem.",
-"element name is not set." => "o nome do elemento não está definido.",
-"checksum is not set." => "Checksum não está definido.",
-"Information about vCard is incorrect. Please reload the page: " => "A informação sobre o VCard está incorrecta. Por favor refresque a página: ",
-"Something went FUBAR. " => "Algo provocou um FUBAR. ",
-"Error updating contact property." => "Erro ao atualizar propriedade do contato",
-"Cannot update addressbook with an empty name." => "Não é possivel actualizar o livro de endereços com o nome vazio.",
-"Error updating addressbook." => "Erro a atualizar o livro de endereços",
+"Error getting contact object." => "Erro a obter o objecto dos contactos",
+"Error getting PHOTO property." => "Erro a obter a propriedade Foto",
+"Error saving contact." => "Erro a guardar o contacto.",
+"Error resizing image" => "Erro a redimensionar a imagem",
+"Error cropping image" => "Erro a recorar a imagem",
+"Error creating temporary image" => "Erro a criar a imagem temporária",
+"Error finding image: " => "Erro enquanto pesquisava pela imagem: ",
"Error uploading contacts to storage." => "Erro a carregar os contactos para o armazenamento.",
"There is no error, the file uploaded with success" => "Não ocorreu erros, o ficheiro foi submetido com sucesso",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "O tamanho do ficheiro carregado excede o parametro upload_max_filesize em php.ini",
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "O tamanho do ficheiro carregado ultrapassa o valor MAX_FILE_SIZE definido no formulário HTML",
+"The uploaded file was only partially uploaded" => "O ficheiro seleccionado foi apenas carregado parcialmente",
"No file was uploaded" => "Nenhum ficheiro foi submetido",
+"Missing a temporary folder" => "Está a faltar a pasta temporária",
+"Couldn't save temporary image: " => "Não foi possível guardar a imagem temporária: ",
+"Couldn't load temporary image: " => "Não é possível carregar a imagem temporária: ",
+"No file was uploaded. Unknown error" => "Nenhum ficheiro foi carregado. Erro desconhecido",
"Contacts" => "Contactos",
-"Addressbook not found." => "Livro de endereços não encontrado.",
+"Sorry, this functionality has not been implemented yet" => "Desculpe, esta funcionalidade ainda não está implementada",
+"Not implemented" => "Não implementado",
+"Couldn't get a valid address." => "Não foi possível obter um endereço válido.",
+"Error" => "Erro",
+"This property has to be non-empty." => "Esta propriedade não pode estar vazia.",
+"Couldn't serialize elements." => "Não foi possivel serializar os elementos",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' chamada sem argumento definido. Por favor report o problema em bugs.owncloud.org",
+"Edit name" => "Editar nome",
+"No files selected for upload." => "Nenhum ficheiro seleccionado para enviar.",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "O tamanho do ficheiro que está a tentar carregar ultrapassa o limite máximo definido para ficheiros no servidor.",
+"Error loading profile picture." => "Erro ao carregar imagem de perfil.",
+"Select type" => "Seleccionar tipo",
+"Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted." => "Alguns contactos forma marcados para apagar, mas ainda não foram apagados. Por favor espere que ele sejam apagados.",
+"Do you want to merge these address books?" => "Quer fundir estes Livros de endereços?",
+"Result: " => "Resultado: ",
+" imported, " => " importado, ",
+" failed." => " falhou.",
+"Displayname cannot be empty." => "Displayname não pode ser vazio",
+"Addressbook not found: " => "Livro de endereços não encontrado.",
"This is not your addressbook." => "Esta não é a sua lista de contactos",
"Contact could not be found." => "O contacto não foi encontrado",
-"Address" => "Morada",
-"Telephone" => "Telefone",
-"Email" => "Email",
-"Organization" => "Organização",
+"Jabber" => "Jabber",
+"AIM" => "AIM",
+"MSN" => "MSN",
+"Twitter" => "Twitter",
+"GoogleTalk" => "GoogleTalk",
+"Facebook" => "Facebook",
+"XMPP" => "XMPP",
+"ICQ" => "ICQ",
+"Yahoo" => "Yahoo",
+"Skype" => "Skype",
+"QQ" => "QQ",
+"GaduGadu" => "GaduGadu",
"Work" => "Emprego",
"Home" => "Casa",
+"Other" => "Outro",
"Mobile" => "Telemovel",
"Text" => "Texto",
"Voice" => "Voz",
@@ -55,23 +92,52 @@
"Video" => "Vídeo",
"Pager" => "Pager",
"Internet" => "Internet",
+"Birthday" => "Aniversário",
+"Business" => "Empresa",
+"Call" => "Telefonar",
+"Clients" => "Clientes",
+"Deliverer" => "Fornecedor",
+"Holidays" => "Férias",
+"Ideas" => "Ideias",
+"Journey" => "Viagem",
+"Jubilee" => "Jubileu",
+"Meeting" => "Encontro",
+"Personal" => "Pessoal",
+"Projects" => "Projectos",
+"Questions" => "Questões",
"{name}'s Birthday" => "Aniversário de {name}",
"Contact" => "Contacto",
"Add Contact" => "Adicionar Contacto",
+"Import" => "Importar",
+"Settings" => "Configurações",
"Addressbooks" => "Livros de endereços",
-"Configure Address Books" => "Configurar livros de endereços",
-"New Address Book" => "Novo livro de endereços",
-"Import from VCF" => "Importar de VCF",
-"CardDav Link" => "Endereço CardDav",
-"Download" => "Transferir",
-"Edit" => "Editar",
-"Delete" => "Apagar",
-"Download contact" => "Transferir contacto",
-"Delete contact" => "Apagar contato",
+"Close" => "Fechar",
+"Keyboard shortcuts" => "Atalhos de teclado",
+"Navigation" => "Navegação",
+"Next contact in list" => "Próximo contacto na lista",
+"Previous contact in list" => "Contacto anterior na lista",
+"Expand/collapse current addressbook" => "Expandir/encolher o livro de endereços atual",
+"Next addressbook" => "Próximo livro de endereços",
+"Previous addressbook" => "Livro de endereços anterior",
+"Actions" => "Ações",
+"Refresh contacts list" => "Recarregar lista de contactos",
+"Add new contact" => "Adicionar novo contacto",
+"Add new addressbook" => "Adicionar novo Livro de endereços",
+"Delete current contact" => "Apagar o contacto atual",
+"Drop photo to upload" => "Arraste e solte fotos para carregar",
+"Delete current photo" => "Eliminar a foto actual",
+"Edit current photo" => "Editar a foto actual",
+"Upload new photo" => "Carregar nova foto",
+"Select photo from ownCloud" => "Selecionar uma foto da ownCloud",
+"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Formate personalizado, Nome curto, Nome completo, Reverso ou Reverso com virgula",
"Edit name details" => "Editar detalhes do nome",
+"Organization" => "Organização",
+"Delete" => "Apagar",
"Nickname" => "Alcunha",
"Enter nickname" => "Introduza alcunha",
-"Birthday" => "Aniversário",
+"Web site" => "Página web",
+"http://www.somesite.com" => "http://www.somesite.com",
+"Go to web site" => "Ir para página web",
"dd-mm-yyyy" => "dd-mm-aaaa",
"Groups" => "Grupos",
"Separate groups with commas" => "Separe os grupos usando virgulas",
@@ -83,47 +149,76 @@
"Delete email address" => "Eliminar o endereço de correio",
"Enter phone number" => "Insira o número de telefone",
"Delete phone number" => "Eliminar o número de telefone",
+"Instant Messenger" => "Mensageiro instantâneo",
+"Delete IM" => "Apagar mensageiro instantâneo (IM)",
"View on map" => "Ver no mapa",
"Edit address details" => "Editar os detalhes do endereço",
"Add notes here." => "Insira notas aqui.",
"Add field" => "Adicionar campo",
-"Profile picture" => "Foto do perfil",
"Phone" => "Telefone",
+"Email" => "Email",
+"Instant Messaging" => "Mensagens Instantâneas",
+"Address" => "Morada",
"Note" => "Nota",
-"Delete current photo" => "Eliminar a foto actual",
-"Edit current photo" => "Editar a foto actual",
-"Select photo from ownCloud" => "Selecionar uma foto da ownCloud",
+"Download contact" => "Transferir contacto",
+"Delete contact" => "Apagar contato",
+"The temporary image has been removed from cache." => "A imagem temporária foi retirada do cache.",
"Edit address" => "Editar endereço",
"Type" => "Tipo",
"PO Box" => "Apartado",
+"Street address" => "Endereço da Rua",
+"Street and number" => "Rua e número",
"Extended" => "Extendido",
-"Street" => "Rua",
+"Apartment number etc." => "Número de Apartamento, etc.",
"City" => "Cidade",
"Region" => "Região",
+"E.g. state or province" => "Por Ex. Estado ou província",
"Zipcode" => "Código Postal",
+"Postal code" => "Código Postal",
"Country" => "País",
-"Edit categories" => "Editar categorias",
-"Add" => "Adicionar",
"Addressbook" => "Livro de endereços",
+"Hon. prefixes" => "Prefixos honoráveis",
+"Miss" => "Menina",
"Ms" => "Sra",
"Mr" => "Sr",
"Sir" => "Sr",
+"Mrs" => "Senhora",
"Dr" => "Dr",
+"Given name" => "Nome introduzido",
"Additional names" => "Nomes adicionais",
"Family name" => "Nome de familia",
-"New Addressbook" => "Novo livro de endereços",
-"Edit Addressbook" => "Editar livro de endereços",
-"Displayname" => "Nome de exibição",
-"Active" => "Ativo",
-"Save" => "Guardar",
-"Submit" => "Submeter",
-"Cancel" => "Cancelar",
+"Hon. suffixes" => "Sufixos Honoráveis",
+"J.D." => "D.J.",
+"M.D." => "D.M.",
+"D.O." => "Dr.",
+"D.C." => "Dr.",
+"Ph.D." => "Dr.",
+"Esq." => "Esq.",
+"Jr." => "Jr.",
+"Sn." => "r.",
"Import a contacts file" => "Importar um ficheiro de contactos",
"Please choose the addressbook" => "Por favor seleccione o livro de endereços",
"create a new addressbook" => "Criar um novo livro de endereços",
-"Import" => "Importar",
+"Name of new addressbook" => "Nome do novo livro de endereços",
"Importing contacts" => "A importar os contactos",
+"You have no contacts in your addressbook." => "Não tem contactos no seu livro de endereços.",
"Add contact" => "Adicionar contacto",
+"Select Address Books" => "Selecionar Livros de contactos",
+"Enter name" => "Introduzir nome",
+"Enter description" => "Introduzir descrição",
+"CardDAV syncing addresses" => "CardDAV a sincronizar endereços",
"more info" => "mais informação",
-"iOS/OS X" => "iOS/OS X"
+"Primary address (Kontact et al)" => "Endereço primario (Kontact et al)",
+"iOS/OS X" => "iOS/OS X",
+"Show CardDav link" => "Mostrar ligação CardDAV",
+"Show read-only VCF link" => "Mostrar ligações VCF só de leitura",
+"Share" => "Partilhar",
+"Download" => "Transferir",
+"Edit" => "Editar",
+"New Address Book" => "Novo livro de endereços",
+"Name" => "Nome",
+"Description" => "Descrição",
+"Save" => "Guardar",
+"Cancel" => "Cancelar",
+"More..." => "Mais..."
);
diff --git a/apps/contacts/l10n/ro.php b/apps/contacts/l10n/ro.php
index 01609756718..291e8d54f7b 100644
--- a/apps/contacts/l10n/ro.php
+++ b/apps/contacts/l10n/ro.php
@@ -1,42 +1,31 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "(Dez)activarea agendei a întâmpinat o eroare.",
-"There was an error adding the contact." => "O eroare a împiedicat adăugarea contactului.",
-"Cannot add empty property." => "Nu se poate adăuga un câmp gol.",
-"At least one of the address fields has to be filled out." => "Cel puțin unul din câmpurile adresei trebuie completat.",
-"Error adding contact property." => "Contactul nu a putut fi adăugat.",
+"id is not set." => "ID-ul nu este stabilit",
+"Error updating addressbook." => "Eroare la actualizarea agendei.",
"No ID provided" => "Nici un ID nu a fost furnizat",
"Error setting checksum." => "Eroare la stabilirea sumei de control",
"No categories selected for deletion." => "Nici o categorie selectată pentru ștergere",
"No address books found." => "Nici o carte de adrese găsită",
"No contacts found." => "Nici un contact găsit",
+"There was an error adding the contact." => "O eroare a împiedicat adăugarea contactului.",
+"element name is not set." => "numele elementului nu este stabilit.",
+"Cannot add empty property." => "Nu se poate adăuga un câmp gol.",
+"At least one of the address fields has to be filled out." => "Cel puțin unul din câmpurile adresei trebuie completat.",
+"Information about vCard is incorrect. Please reload the page." => "Informațiile cărții de vizită sunt incorecte. Te rog reîncarcă pagina.",
"Missing ID" => "ID lipsă",
"Error parsing VCard for ID: \"" => "Eroare la prelucrarea VCard-ului pentru ID:\"",
-"Cannot add addressbook with an empty name." => "Nu e posibil de adăugat o carte de adrese fără nume",
-"Error adding addressbook." => "Agenda nu a putut fi adăugată.",
-"Error activating addressbook." => "Eroare la activarea agendei.",
+"checksum is not set." => "suma de control nu este stabilită.",
"No contact ID was submitted." => "Nici un ID de contact nu a fost transmis",
"Error reading contact photo." => "Eroare la citerea fotografiei de contact",
"Error saving temporary file." => "Eroare la salvarea fișierului temporar.",
"The loading photo is not valid." => "Fotografia care se încarcă nu este validă.",
-"id is not set." => "ID-ul nu este stabilit",
-"Information about vCard is incorrect. Please reload the page." => "Informațiile cărții de vizită sunt incorecte. Te rog reîncarcă pagina.",
-"Error deleting contact property." => "Eroare la ștergerea proprietăților contactului.",
"Contact ID is missing." => "ID-ul de contact lipsește.",
-"Missing contact id." => "ID de contact lipsă.",
"No photo path was submitted." => "Nici o adresă către fotografie nu a fost transmisă",
"File doesn't exist:" => "Fișierul nu există:",
"Error loading image." => "Eroare la încărcarea imaginii.",
-"element name is not set." => "numele elementului nu este stabilit.",
-"checksum is not set." => "suma de control nu este stabilită.",
-"Error updating contact property." => "Eroare la actualizarea proprietăților contactului.",
-"Error updating addressbook." => "Eroare la actualizarea agendei.",
"Contacts" => "Contacte",
"This is not your addressbook." => "Nu se găsește în agendă.",
"Contact could not be found." => "Contactul nu a putut fi găsit.",
-"Address" => "Adresă",
-"Telephone" => "Telefon",
-"Email" => "Email",
-"Organization" => "Organizație",
"Work" => "Servicu",
"Home" => "Acasă",
"Mobile" => "Mobil",
@@ -47,21 +36,16 @@
"Video" => "Video",
"Pager" => "Pager",
"Internet" => "Internet",
+"Birthday" => "Zi de naștere",
"{name}'s Birthday" => "Ziua de naștere a {name}",
"Contact" => "Contact",
"Add Contact" => "Adaugă contact",
"Addressbooks" => "Agende",
-"New Address Book" => "Agendă nouă",
-"CardDav Link" => "Legătură CardDev",
-"Download" => "Descarcă",
-"Edit" => "Editează",
-"Delete" => "Șterge",
-"Download contact" => "Descarcă acest contact",
-"Delete contact" => "Șterge contact",
"Edit name details" => "Introdu detalii despre nume",
+"Organization" => "Organizație",
+"Delete" => "Șterge",
"Nickname" => "Pseudonim",
"Enter nickname" => "Introdu pseudonim",
-"Birthday" => "Zi de naștere",
"dd-mm-yyyy" => "zz-ll-aaaa",
"Groups" => "Grupuri",
"Separate groups with commas" => "Separă grupurile cu virgule",
@@ -72,21 +56,21 @@
"Mail to address" => "Trimite mesaj la e-mail",
"Delete email address" => "Șterge e-mail",
"Phone" => "Telefon",
+"Email" => "Email",
+"Address" => "Adresă",
+"Download contact" => "Descarcă acest contact",
+"Delete contact" => "Șterge contact",
"Type" => "Tip",
"PO Box" => "CP",
"Extended" => "Extins",
-"Street" => "Stradă",
"City" => "OraÈ™",
"Region" => "Regiune",
"Zipcode" => "Cod poștal",
"Country" => "Țară",
-"Add" => "Adaugă",
"Addressbook" => "Agendă",
-"New Addressbook" => "Agendă nouă",
-"Edit Addressbook" => "Modifică agenda",
-"Displayname" => "Nume afișat",
-"Active" => "Activ",
+"Download" => "Descarcă",
+"Edit" => "Editează",
+"New Address Book" => "Agendă nouă",
"Save" => "Salvează",
-"Submit" => "Trimite",
"Cancel" => "Anulează"
);
diff --git a/apps/contacts/l10n/ru.php b/apps/contacts/l10n/ru.php
index 01a0e2642b9..010c4507f4e 100644
--- a/apps/contacts/l10n/ru.php
+++ b/apps/contacts/l10n/ru.php
@@ -1,34 +1,41 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Ошибка (де)активации адреÑной книги.",
-"There was an error adding the contact." => "Произошла ошибка при добавлении контакта.",
-"Cannot add empty property." => "Ðевозможно добавить пуÑтой параметр.",
-"At least one of the address fields has to be filled out." => "Как минимум одно поле адреÑа должно быть заполнено.",
-"Error adding contact property." => "Ошибка Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ к контакту.",
+"id is not set." => "id не уÑтановлен.",
+"Cannot update addressbook with an empty name." => "ÐÐµÐ»ÑŒÐ·Ñ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ адреÑную книгу Ñ Ð¿ÑƒÑтым именем.",
+"Error updating addressbook." => "Ошибка Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð°Ð´Ñ€ÐµÑной книги.",
"No ID provided" => "ID не предоÑтавлен",
"Error setting checksum." => "Ошибка уÑтановки контрольной Ñуммы.",
"No categories selected for deletion." => "Категории Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð½Ðµ уÑтановлены.",
"No address books found." => "ÐдреÑные книги не найдены.",
"No contacts found." => "Контакты не найдены.",
+"There was an error adding the contact." => "Произошла ошибка при добавлении контакта.",
+"element name is not set." => "Ð¸Ð¼Ñ Ñлемента не уÑтановлено.",
+"Could not parse contact: " => "Ðевозможно раÑпознать контакт:",
+"Cannot add empty property." => "Ðевозможно добавить пуÑтой параметр.",
+"At least one of the address fields has to be filled out." => "Как минимум одно поле адреÑа должно быть заполнено.",
+"Trying to add duplicate property: " => "При попытке добавить дубликат:",
+"Unknown IM: " => "ÐеизвеÑтный IM:",
+"Information about vCard is incorrect. Please reload the page." => "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ vCard некорректна. ПожалуйÑта, обновите Ñтраницу.",
"Missing ID" => "ОтÑутÑтвует ID",
"Error parsing VCard for ID: \"" => "Ошибка обработки VCard Ð´Ð»Ñ ID: \"",
-"Cannot add addressbook with an empty name." => "ÐÐµÐ»ÑŒÐ·Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ адреÑную книгу без имени.",
-"Error adding addressbook." => "Ошибка Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð°Ð´Ñ€ÐµÑной книги.",
-"Error activating addressbook." => "Ошибка активации адреÑной книги.",
+"checksum is not set." => "ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñумма не уÑтановлена.",
+"Information about vCard is incorrect. Please reload the page: " => "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ vCard не корректна. Перезагрузите Ñтраницу: ",
+"Something went FUBAR. " => "Что-то пошло FUBAR.",
+"No contact ID was submitted." => "Ðет контакта ID",
"Error reading contact photo." => "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ„Ð¾Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ð¸ контакта.",
"Error saving temporary file." => "Ошибка ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð³Ð¾ файла.",
"The loading photo is not valid." => "Ð—Ð°Ð³Ñ€ÑƒÐ¶Ð°ÐµÐ¼Ð°Ñ Ñ„Ð¾Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ Ð¸Ñпорчена.",
-"id is not set." => "id не уÑтановлен.",
-"Information about vCard is incorrect. Please reload the page." => "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ vCard некорректна. ПожалуйÑта, обновите Ñтраницу.",
-"Error deleting contact property." => "Ошибка ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ из контакта.",
"Contact ID is missing." => "ID контакта отÑутÑтвует.",
+"No photo path was submitted." => "Ðет фото по адреÑу.",
"File doesn't exist:" => "Файл не ÑущеÑтвует:",
"Error loading image." => "Ошибка загрузки картинки.",
-"element name is not set." => "Ð¸Ð¼Ñ Ñлемента не уÑтановлено.",
-"checksum is not set." => "ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñумма не уÑтановлена.",
-"Information about vCard is incorrect. Please reload the page: " => "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ vCard не корректна. Перезагрузите Ñтраницу: ",
-"Error updating contact property." => "Ошибка Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ контакта.",
-"Cannot update addressbook with an empty name." => "ÐÐµÐ»ÑŒÐ·Ñ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ адреÑную книгу Ñ Ð¿ÑƒÑтым именем.",
-"Error updating addressbook." => "Ошибка Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð°Ð´Ñ€ÐµÑной книги.",
+"Error getting contact object." => "Ошибка при получении контактов",
+"Error getting PHOTO property." => "Ошибка при получении ФОТО.",
+"Error saving contact." => "Ошибка при Ñохранении контактов.",
+"Error resizing image" => "Ошибка Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° изображений",
+"Error cropping image" => "Ошибка обрезки изображений",
+"Error creating temporary image" => "Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ñ… изображений",
+"Error finding image: " => "Ошибка поиÑка изображений:",
"Error uploading contacts to storage." => "Ошибка загрузки контактов в хранилище.",
"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",
@@ -36,16 +43,46 @@
"The uploaded file was only partially uploaded" => "Файл загружен чаÑтично",
"No file was uploaded" => "Файл не был загружен",
"Missing a temporary folder" => "ОтÑутÑтвует Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°",
+"Couldn't save temporary image: " => "Ðе удалоÑÑŒ Ñохранить временное изображение:",
+"Couldn't load temporary image: " => "Ðе удалоÑÑŒ загрузить временное изображение:",
+"No file was uploaded. Unknown error" => "Файл не был загружен. ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°",
"Contacts" => "Контакты",
-"Addressbook not found." => "ÐдреÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð° не найдена.",
+"Sorry, this functionality has not been implemented yet" => "К Ñожалению, Ñта Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð½Ðµ была реализована",
+"Not implemented" => "Ðе реализовано",
+"Couldn't get a valid address." => "Ðе удалоÑÑŒ получить адреÑ.",
+"Error" => "Ошибка",
+"This property has to be non-empty." => "Это ÑвойÑтво должно быть не пуÑтым.",
+"Couldn't serialize elements." => "Ðе удалоÑÑŒ Ñериализовать Ñлементы.",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' called without type argument. Please report at bugs.owncloud.org",
+"Edit name" => "Изменить имÑ",
+"No files selected for upload." => "Ðет выбранных файлов Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸.",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Файл, который вы пытаетеÑÑŒ загрузить превышать макÑимальный размер загружаемых файлов на Ñтом Ñервере.",
+"Error loading profile picture." => "Ошибка загрузки Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ.",
+"Select type" => "Выберите тип",
+"Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted." => "Ðекоторые контакты помечены на удаление, но ещё не удалены. Подождите, пока они удалÑÑŽÑ‚ÑÑ.",
+"Do you want to merge these address books?" => "Ð’Ñ‹ хотите Ñоединить Ñти адреÑные книги?",
+"Result: " => "Результат:",
+" imported, " => "импортировано, ",
+" failed." => "не удалоÑÑŒ.",
+"Displayname cannot be empty." => "Отображаемое Ð¸Ð¼Ñ Ð½Ðµ может быть пуÑтым.",
+"Addressbook not found: " => "ÐдреÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð° не найдена:",
"This is not your addressbook." => "Это не ваша адреÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°.",
"Contact could not be found." => "Контакт не найден.",
-"Address" => "ÐдреÑ",
-"Telephone" => "Телефон",
-"Email" => "Ящик Ñл. почты",
-"Organization" => "ОрганизациÑ",
+"Jabber" => "Jabber",
+"AIM" => "AIM",
+"MSN" => "MSN",
+"Twitter" => "Twitter",
+"GoogleTalk" => "GoogleTalk",
+"Facebook" => "Facebook",
+"XMPP" => "XMPP",
+"ICQ" => "ICQ",
+"Yahoo" => "Yahoo",
+"Skype" => "Skype",
+"QQ" => "QQ",
+"GaduGadu" => "GaduGadu",
"Work" => "Рабочий",
"Home" => "Домашний",
+"Other" => "Другое",
"Mobile" => "Мобильный",
"Text" => "ТекÑÑ‚",
"Voice" => "ГолоÑ",
@@ -54,25 +91,54 @@
"Video" => "Видео",
"Pager" => "Пейджер",
"Internet" => "Интернет",
+"Birthday" => "День рождениÑ",
+"Business" => "БизнеÑ",
+"Call" => "Вызов",
+"Clients" => "Клиенты",
+"Holidays" => "Праздники",
+"Ideas" => "Идеи",
+"Journey" => "Поездка",
+"Jubilee" => "Юбилей",
+"Meeting" => "Ð’Ñтреча",
+"Personal" => "Личный",
+"Projects" => "Проекты",
+"Questions" => "ВопроÑÑ‹",
"{name}'s Birthday" => "День Ñ€Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ {name}",
"Contact" => "Контакт",
"Add Contact" => "Добавить Контакт",
+"Import" => "Импорт",
+"Settings" => "ÐаÑтройки",
"Addressbooks" => "ÐдреÑные книги",
-"Configure Address Books" => "ÐаÑтроить ÐдреÑную книгу",
-"New Address Book" => "ÐÐ¾Ð²Ð°Ñ Ð°Ð´Ñ€ÐµÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°",
-"Import from VCF" => "Импортировать из VCF",
-"CardDav Link" => "СÑылка CardDAV",
-"Download" => "Скачать",
-"Edit" => "Редактировать",
-"Delete" => "Удалить",
-"Download contact" => "Скачать контакт",
-"Delete contact" => "Удалить контакт",
+"Close" => "Закрыть",
+"Keyboard shortcuts" => "ГорÑчие клавиши",
+"Navigation" => "ÐавигациÑ",
+"Next contact in list" => "Следующий контакт в ÑпиÑке",
+"Previous contact in list" => "Предыдущий контакт в ÑпиÑке",
+"Expand/collapse current addressbook" => "Развернуть/Ñвернуть текущую адреÑную книгу",
+"Next addressbook" => "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð°Ð´Ñ€ÐµÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°",
+"Previous addressbook" => "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð°Ð´Ñ€ÐµÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°",
+"Actions" => "ДейÑтвиÑ",
+"Refresh contacts list" => "Обновить ÑпиÑок контактов",
+"Add new contact" => "Добавить новый контакт",
+"Add new addressbook" => "Добавить новую адреÑную книгу",
+"Delete current contact" => "Удалить текущий контакт",
"Drop photo to upload" => "ПеретÑните фотографии Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸",
+"Delete current photo" => "Удалить текущую фотографию",
+"Edit current photo" => "Редактировать текущую фотографию",
+"Upload new photo" => "Загрузить новую фотографию",
+"Select photo from ownCloud" => "Выбрать фотографию из ownCloud",
+"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Формат Краткое имÑ, Полное имÑ",
+"Edit name details" => "Изменить детали имени",
+"Organization" => "ОрганизациÑ",
+"Delete" => "Удалить",
"Nickname" => "ПÑевдоним",
"Enter nickname" => "Введите пÑевдоним",
-"Birthday" => "День рождениÑ",
+"Web site" => "Веб-Ñайт",
+"http://www.somesite.com" => "http://www.somesite.com",
+"Go to web site" => "Перейти на веб-Ñайт",
"dd-mm-yyyy" => "dd-mm-yyyy",
"Groups" => "Группы",
+"Separate groups with commas" => "Разделить группы запÑтыми",
"Edit groups" => "Редактировать группы",
"Preferred" => "Предпочитаемый",
"Please specify a valid email address." => "Укажите дейÑтвительный Ð°Ð´Ñ€ÐµÑ Ñлектронной почты.",
@@ -81,47 +147,71 @@
"Delete email address" => "Удалить Ð°Ð´Ñ€ÐµÑ Ñлектронной почты",
"Enter phone number" => "ВвеÑти номер телефона",
"Delete phone number" => "Удалить номер телефона",
+"Delete IM" => "Удалить IM",
"View on map" => "Показать на карте",
"Edit address details" => "ВвеÑти детали адреÑа",
"Add notes here." => "Добавьте заметки здеÑÑŒ.",
"Add field" => "Добавить поле",
-"Profile picture" => "Фото профилÑ",
"Phone" => "Телефон",
+"Email" => "Ящик Ñл. почты",
+"Address" => "ÐдреÑ",
"Note" => "Заметка",
-"Delete current photo" => "Удалить текущую фотографию",
-"Edit current photo" => "Редактировать текущую фотографию",
-"Upload new photo" => "Загрузить новую фотографию",
-"Select photo from ownCloud" => "Выбрать фотографию из ownCloud",
+"Download contact" => "Скачать контакт",
+"Delete contact" => "Удалить контакт",
+"The temporary image has been removed from cache." => "Временный образ был удален из кÑша.",
"Edit address" => "Редактировать адреÑ",
"Type" => "Тип",
"PO Box" => "ÐО",
+"Street address" => "Улица",
+"Street and number" => "Улица и дом",
"Extended" => "РаÑширенный",
-"Street" => "Улица",
+"Apartment number etc." => "Ðомер квартиры и Ñ‚.д.",
"City" => "Город",
"Region" => "ОблаÑÑ‚ÑŒ",
+"E.g. state or province" => "Ðапример, облаÑÑ‚ÑŒ или район",
"Zipcode" => "Почтовый индекÑ",
+"Postal code" => "Почтовый индекÑ",
"Country" => "Страна",
-"Edit categories" => "Редактировать категрии",
-"Add" => "Добавить",
"Addressbook" => "ÐдреÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°",
+"Hon. prefixes" => "Уважительные префикÑÑ‹",
+"Miss" => "МиÑÑ",
+"Ms" => "Г-жа",
+"Mr" => "Г-н",
+"Sir" => "СÑÑ€",
+"Mrs" => "Г-жа",
+"Dr" => "Доктор",
"Given name" => "ИмÑ",
"Additional names" => "Дополнительные имена (отчеÑтво)",
"Family name" => "ФамилиÑ",
-"New Addressbook" => "ÐÐ¾Ð²Ð°Ñ Ð°Ð´Ñ€ÐµÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°",
-"Edit Addressbook" => "Редактировать адреÑную книгу",
-"Displayname" => "Отображаемое имÑ",
-"Active" => "Ðктивно",
-"Save" => "Сохранить",
-"Submit" => "Отправить",
-"Cancel" => "Отменить",
+"Hon. suffixes" => "Hon. suffixes",
+"J.D." => "Уважительные ÑуффикÑÑ‹",
+"M.D." => "M.D.",
+"D.O." => "D.O.",
+"D.C." => "D.C.",
+"Ph.D." => "Ph.D.",
+"Esq." => "Esq.",
+"Jr." => "Jr.",
+"Sn." => "Sn.",
"Import a contacts file" => "Загрузить файл контактов",
"Please choose the addressbook" => "Выберите адреÑную книгу",
"create a new addressbook" => "Ñоздать новую адреÑную книгу",
"Name of new addressbook" => "Ð˜Ð¼Ñ Ð½Ð¾Ð²Ð¾Ð¹ адреÑной книги",
-"Import" => "Импорт",
"Importing contacts" => "Импорт контактов",
-"You have no contacts in your addressbook." => "Ð’ адреÑной книге еÑÑ‚ÑŒ контакты.",
+"You have no contacts in your addressbook." => "Ð’ адреÑной книге нет контактов.",
"Add contact" => "Добавить контакт",
-"Configure addressbooks" => "ÐаÑтроить адреÑную книгу",
-"more info" => "Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ"
+"Select Address Books" => "Выбрать адреÑную книгу",
+"Enter name" => "Введите имÑ",
+"Enter description" => "Ввдите опиÑание",
+"CardDAV syncing addresses" => "CardDAV Ñинхронизации адреÑов",
+"more info" => "Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ",
+"Primary address (Kontact et al)" => "Первичный Ð°Ð´Ñ€ÐµÑ (Kontact и др.)",
+"iOS/OS X" => "iOS/OS X",
+"Download" => "Скачать",
+"Edit" => "Редактировать",
+"New Address Book" => "ÐÐ¾Ð²Ð°Ñ Ð°Ð´Ñ€ÐµÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°",
+"Name" => "ИмÑ",
+"Description" => "ОпиÑание",
+"Save" => "Сохранить",
+"Cancel" => "Отменить",
+"More..." => "Ещё..."
);
diff --git a/apps/contacts/l10n/sk_SK.php b/apps/contacts/l10n/sk_SK.php
index 6e5ebe3bd3c..54ae324d93c 100644
--- a/apps/contacts/l10n/sk_SK.php
+++ b/apps/contacts/l10n/sk_SK.php
@@ -1,39 +1,39 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Chyba (de)aktivácie adresára.",
-"There was an error adding the contact." => "Vyskytla sa chyba pri pridávaní kontaktu.",
-"Cannot add empty property." => "Nemôžem pridať prázdny údaj.",
-"At least one of the address fields has to be filled out." => "Musí byť uvedený aspoň jeden adresný údaj.",
-"Trying to add duplicate property: " => "Pokúšate sa pridať rovnaký atribút:",
-"Error adding contact property." => "Chyba pridania údaju kontaktu",
+"id is not set." => "ID nie je nastavené.",
+"Cannot update addressbook with an empty name." => "Nedá sa upraviť adresár s prázdnym menom.",
+"Error updating addressbook." => "Chyba aktualizácie adresára.",
"No ID provided" => "ID nezadané",
"Error setting checksum." => "Chyba pri nastavovaní kontrolného súÄtu.",
"No categories selected for deletion." => "Žiadne kategórie neboli vybraté na odstránenie.",
"No address books found." => "Žiadny adresár nenájdený.",
"No contacts found." => "Žiadne kontakty nenájdené.",
+"There was an error adding the contact." => "Vyskytla sa chyba pri pridávaní kontaktu.",
+"element name is not set." => "meno elementu nie je nastavené.",
+"Cannot add empty property." => "Nemôžem pridať prázdny údaj.",
+"At least one of the address fields has to be filled out." => "Musí byť uvedený aspoň jeden adresný údaj.",
+"Trying to add duplicate property: " => "Pokúšate sa pridať rovnaký atribút:",
+"Information about vCard is incorrect. Please reload the page." => "Informácie o vCard sú neplatné. Prosím obnovte stránku.",
"Missing ID" => "Chýba ID",
"Error parsing VCard for ID: \"" => "Chyba pri vyňatí ID z VCard:",
-"Cannot add addressbook with an empty name." => "Nedá sa pridať adresár s prázdnym menom.",
-"Error adding addressbook." => "Chyba poÄas pridávania adresára.",
-"Error activating addressbook." => "Chyba aktivovania adresára.",
+"checksum is not set." => "kontrolný súÄet nie je nastavený.",
+"Information about vCard is incorrect. Please reload the page: " => "Informácia o vCard je nesprávna. Obnovte stránku, prosím.",
+"Something went FUBAR. " => "NieÄo sa pokazilo.",
"No contact ID was submitted." => "Nebolo nastavené ID kontaktu.",
"Error reading contact photo." => "Chyba pri Äítaní fotky kontaktu.",
"Error saving temporary file." => "Chyba pri ukladaní doÄasného súboru.",
"The loading photo is not valid." => "NaÄítaná fotka je vadná.",
-"id is not set." => "ID nie je nastavené.",
-"Information about vCard is incorrect. Please reload the page." => "Informácie o vCard sú neplatné. Prosím obnovte stránku.",
-"Error deleting contact property." => "Chyba odstránenia údaju kontaktu.",
"Contact ID is missing." => "Chýba ID kontaktu.",
-"Missing contact id." => "Chýba ID kontaktu.",
"No photo path was submitted." => "Žiadna fotka nebola poslaná.",
"File doesn't exist:" => "Súbor neexistuje:",
"Error loading image." => "Chyba pri nahrávaní obrázka.",
-"element name is not set." => "meno elementu nie je nastavené.",
-"checksum is not set." => "kontrolný súÄet nie je nastavený.",
-"Information about vCard is incorrect. Please reload the page: " => "Informácia o vCard je nesprávna. Obnovte stránku, prosím.",
-"Something went FUBAR. " => "NieÄo sa pokazilo.",
-"Error updating contact property." => "Chyba aktualizovania údaju kontaktu.",
-"Cannot update addressbook with an empty name." => "Nedá sa upraviť adresár s prázdnym menom.",
-"Error updating addressbook." => "Chyba aktualizácie adresára.",
+"Error getting contact object." => "Chyba poÄas prevzatia objektu kontakt.",
+"Error getting PHOTO property." => "Chyba poÄas získavania fotky.",
+"Error saving contact." => "Chyba poÄas ukladania kontaktu.",
+"Error resizing image" => "Chyba poÄas zmeny obrázku.",
+"Error cropping image" => "Chyba poÄas orezania obrázku.",
+"Error creating temporary image" => "Chyba poÄas vytvárania doÄasného obrázku.",
+"Error finding image: " => "Chyba vyhľadania obrázku: ",
"Error uploading contacts to storage." => "Chyba pri ukladaní kontaktov na úložisko.",
"There is no error, the file uploaded with success" => "Nevyskytla sa žiadna chyba, súbor úspešne uložené.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Ukladaný súbor prekraÄuje nastavenie upload_max_filesize v php.ini",
@@ -41,17 +41,29 @@
"The uploaded file was only partially uploaded" => "Ukladaný súbor sa nahral len ÄiastoÄne",
"No file was uploaded" => "Žiadny súbor nebol uložený",
"Missing a temporary folder" => "Chýba doÄasný prieÄinok",
+"Couldn't save temporary image: " => "Nemôžem uložiÅ¥ doÄasný obrázok: ",
+"Couldn't load temporary image: " => "Nemôžem naÄítaÅ¥ doÄasný obrázok: ",
+"No file was uploaded. Unknown error" => "Žiaden súbor nebol odoslaný. Neznáma chyba",
"Contacts" => "Kontakty",
-"Drop a VCF file to import contacts." => "Pretiahnite VCF súbor pre import kontaktov.",
-"Addressbook not found." => "Adresár sa nenašiel.",
+"Sorry, this functionality has not been implemented yet" => "Bohužiaľ, táto funkcia ešte nebola implementovaná",
+"Not implemented" => "Neimplementované",
+"Couldn't get a valid address." => "Nemôžem získať platnú adresu.",
+"Error" => "Chyba",
+"This property has to be non-empty." => "Tento parameter nemôže byť prázdny.",
+"Couldn't serialize elements." => "Nemôžem previesť prvky.",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' zavolané bez argument. Prosím oznámte chybu na bugs.owncloud.org",
+"Edit name" => "Upraviť meno",
+"No files selected for upload." => "Žiadne súbory neboli vybrané k nahratiu",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Súbor, ktorý sa pokúšate nahrať, presahuje maximálnu povolenú veľkosť.",
+"Select type" => "Vybrať typ",
+"Result: " => "Výsledok: ",
+" imported, " => " importovaných, ",
+" failed." => " zlyhaných.",
"This is not your addressbook." => "Toto nie je váš adresár.",
"Contact could not be found." => "Kontakt nebol nájdený.",
-"Address" => "Adresa",
-"Telephone" => "Telefón",
-"Email" => "E-mail",
-"Organization" => "Organizácia",
"Work" => "Práca",
"Home" => "Domov",
+"Other" => "Iné",
"Mobile" => "Mobil",
"Text" => "SMS",
"Voice" => "Odkazová schránka",
@@ -60,25 +72,39 @@
"Video" => "Video",
"Pager" => "Pager",
"Internet" => "Internet",
+"Birthday" => "Narodeniny",
+"Business" => "Biznis",
+"Clients" => "Klienti",
+"Holidays" => "Prázdniny",
+"Meeting" => "Stretnutie",
+"Projects" => "Projekty",
+"Questions" => "Otázky",
"{name}'s Birthday" => "Narodeniny {name}",
"Contact" => "Kontakt",
"Add Contact" => "Pridať Kontakt.",
+"Import" => "Importovať",
"Addressbooks" => "Adresáre",
-"Configure Address Books" => "Nastaviť adresáre",
-"New Address Book" => "Nový adresár",
-"Import from VCF" => "Importovať z VCF",
-"CardDav Link" => "CardDav odkaz",
-"Download" => "Stiahnuť",
-"Edit" => "Upraviť",
-"Delete" => "Odstrániť",
-"Download contact" => "Stiahnuť kontakt",
-"Delete contact" => "Odstrániť kontakt",
+"Close" => "Zatvoriť",
+"Keyboard shortcuts" => "Klávesové skratky",
+"Navigation" => "Navigácia",
+"Next contact in list" => "Ďalší kontakt v zozname",
+"Previous contact in list" => "Predchádzajúci kontakt v zozname",
+"Actions" => "Akcie",
+"Refresh contacts list" => "Obnov zoznam kontaktov",
+"Add new contact" => "Pridaj nový kontakt",
+"Add new addressbook" => "Pridaj nový adresár",
+"Delete current contact" => "Vymaž súÄasný kontakt",
"Drop photo to upload" => "Pretiahnite sem fotku pre nahratie",
+"Delete current photo" => "OdstrániÅ¥ súÄasnú fotku",
+"Edit current photo" => "UpraviÅ¥ súÄasnú fotku",
+"Upload new photo" => "Nahrať novú fotku",
+"Select photo from ownCloud" => "Vybrať fotku z ownCloud",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Formát vlastný, krátke meno, celé meno, obrátené alebo obrátené s Äiarkami",
"Edit name details" => "Upraviť podrobnosti mena",
+"Organization" => "Organizácia",
+"Delete" => "Odstrániť",
"Nickname" => "Prezývka",
"Enter nickname" => "Zadajte prezývku",
-"Birthday" => "Narodeniny",
"dd-mm-yyyy" => "dd. mm. yyyy",
"Groups" => "Skupiny",
"Separate groups with commas" => "Oddelte skupiny Äiarkami",
@@ -94,24 +120,24 @@
"Edit address details" => "Upraviť podrobnosti adresy",
"Add notes here." => "Tu môžete pridať poznámky.",
"Add field" => "Pridať pole",
-"Profile picture" => "Profilová fotka",
"Phone" => "Telefón",
+"Email" => "E-mail",
+"Address" => "Adresa",
"Note" => "Poznámka",
-"Delete current photo" => "OdstrániÅ¥ súÄasnú fotku",
-"Edit current photo" => "UpraviÅ¥ súÄasnú fotku",
-"Upload new photo" => "Nahrať novú fotku",
-"Select photo from ownCloud" => "Vybrať fotku z ownCloud",
+"Download contact" => "Stiahnuť kontakt",
+"Delete contact" => "Odstrániť kontakt",
+"The temporary image has been removed from cache." => "DoÄasný obrázok bol odstránený z cache.",
"Edit address" => "Upraviť adresu",
"Type" => "Typ",
"PO Box" => "PO Box",
+"Street address" => "Ulica",
+"Street and number" => "Ulica a Äíslo",
"Extended" => "Rozšírené",
-"Street" => "Ulica",
"City" => "Mesto",
"Region" => "Región",
"Zipcode" => "PSČ",
+"Postal code" => "PSČ",
"Country" => "Krajina",
-"Edit categories" => "Upraviť kategórie",
-"Add" => "Pridať",
"Addressbook" => "Adresár",
"Hon. prefixes" => "Tituly pred",
"Miss" => "SleÄna",
@@ -126,30 +152,33 @@
"Hon. suffixes" => "Tituly za",
"J.D." => "JUDr.",
"M.D." => "MUDr.",
+"D.O." => "D.O.",
+"D.C." => "D.C.",
"Ph.D." => "Ph.D.",
"Esq." => "Esq.",
"Jr." => "ml.",
"Sn." => "st.",
-"New Addressbook" => "Nový Adresár",
-"Edit Addressbook" => "Upraviť Adresár",
-"Displayname" => "Zobrazené meno",
-"Active" => "Aktívny",
-"Save" => "Uložiť",
-"Submit" => "Odoslať",
-"Cancel" => "Zrušiť",
"Import a contacts file" => "Importovať súbor kontaktu",
"Please choose the addressbook" => "Prosím zvolte adresár",
"create a new addressbook" => "vytvoriť nový adresár",
"Name of new addressbook" => "Meno nového adresára",
-"Import" => "Importovať",
"Importing contacts" => "Importovanie kontaktov",
+"Contacts imported successfully" => "Kontakty úspešne importované",
+"Close Dialog" => "Zatvoriť ponuku",
+"Import Addressbook" => "Importovanie adresára",
"Select address book to import to:" => "Vyberte adresár, do ktorého chcete importovať:",
+"Drop a VCF file to import contacts." => "Pretiahnite VCF súbor pre import kontaktov.",
"Select from HD" => "Vyberte z pevného disku",
"You have no contacts in your addressbook." => "Nemáte žiadne kontakty v adresári.",
"Add contact" => "Pridať kontakt",
-"Configure addressbooks" => "Nastaviť adresáre",
+"Enter name" => "Zadaj meno",
"CardDAV syncing addresses" => "Adresy pre synchronizáciu s CardDAV",
"more info" => "viac informácií",
"Primary address (Kontact et al)" => "Predvolená adresa (Kontakt etc)",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Download" => "Stiahnuť",
+"Edit" => "Upraviť",
+"New Address Book" => "Nový adresár",
+"Save" => "Uložiť",
+"Cancel" => "Zrušiť"
);
diff --git a/apps/contacts/l10n/sl.php b/apps/contacts/l10n/sl.php
index bfba23fabcf..e404b7a5e94 100644
--- a/apps/contacts/l10n/sl.php
+++ b/apps/contacts/l10n/sl.php
@@ -1,39 +1,42 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Napaka med (de)aktivacijo imenika.",
-"There was an error adding the contact." => "Med dodajanjem stika je prišlo do napake",
-"Cannot add empty property." => "Ne morem dodati prazne lastnosti.",
-"At least one of the address fields has to be filled out." => "Vsaj eno izmed polj je Å¡e potrebno izpolniti.",
-"Trying to add duplicate property: " => "Poskušam dodati podvojeno lastnost:",
-"Error adding contact property." => "Napaka pri dodajanju informacije o stiku.",
+"id is not set." => "id ni nastavljen.",
+"Cannot update addressbook with an empty name." => "Ne morem posodobiti imenika s praznim imenom.",
+"Error updating addressbook." => "Napaka pri posodabljanju imenika.",
"No ID provided" => "ID ni bil podan",
"Error setting checksum." => "Napaka pri nastavljanju nadzorne vsote.",
"No categories selected for deletion." => "Nobena kategorija ni bila izbrana za izbris.",
"No address books found." => "Ni bilo najdenih imenikov.",
"No contacts found." => "Ni bilo najdenih stikov.",
+"There was an error adding the contact." => "Med dodajanjem stika je prišlo do napake",
+"element name is not set." => "ime elementa ni nastavljeno.",
+"Could not parse contact: " => "Ne morem razÄleniti stika:",
+"Cannot add empty property." => "Ne morem dodati prazne lastnosti.",
+"At least one of the address fields has to be filled out." => "Vsaj eno izmed polj je Å¡e potrebno izpolniti.",
+"Trying to add duplicate property: " => "Poskušam dodati podvojeno lastnost:",
+"Missing IM parameter." => "ManjkajoÄ IM parameter.",
+"Unknown IM: " => "Neznan IM:",
+"Information about vCard is incorrect. Please reload the page." => "Informacije o vCard niso pravilne. Prosimo, Äe ponovno naložite stran.",
"Missing ID" => "ManjkajoÄ ID",
"Error parsing VCard for ID: \"" => "Napaka pri razÄlenjevanju VCard za ID: \"",
-"Cannot add addressbook with an empty name." => "Ne morem dodati imenika s praznim imenom.",
-"Error adding addressbook." => "Napaka pri dodajanju imenika.",
-"Error activating addressbook." => "Napaka pri aktiviranju imenika.",
+"checksum is not set." => "nadzorna vsota ni nastavljena.",
+"Information about vCard is incorrect. Please reload the page: " => "Informacija o vCard je napaÄna. Prosimo, Äe ponovno naložite stran: ",
+"Something went FUBAR. " => "Nekaj je šlo v franže. ",
"No contact ID was submitted." => "ID stika ni bil poslan.",
"Error reading contact photo." => "Napaka pri branju slike stika.",
"Error saving temporary file." => "Napaka pri shranjevanju zaÄasne datoteke.",
"The loading photo is not valid." => "Slika, ki se nalaga ni veljavna.",
-"id is not set." => "id ni nastavljen.",
-"Information about vCard is incorrect. Please reload the page." => "Informacije o vCard niso pravilne. Prosimo, Äe ponovno naložite stran.",
-"Error deleting contact property." => "Napaka pri brisanju lastnosti stika.",
"Contact ID is missing." => "Manjka ID stika.",
-"Missing contact id." => "Manjka id stika.",
"No photo path was submitted." => "Pot slike ni bila poslana.",
"File doesn't exist:" => "Datoteka ne obstaja:",
"Error loading image." => "Napaka pri nalaganju slike.",
-"element name is not set." => "ime elementa ni nastavljeno.",
-"checksum is not set." => "nadzorna vsota ni nastavljena.",
-"Information about vCard is incorrect. Please reload the page: " => "Informacija o vCard je napaÄna. Prosimo, Äe ponovno naložite stran: ",
-"Something went FUBAR. " => "Nekaj je šlo v franže. ",
-"Error updating contact property." => "Napaka pri posodabljanju lastnosti stika.",
-"Cannot update addressbook with an empty name." => "Ne morem posodobiti imenika s praznim imenom.",
-"Error updating addressbook." => "Napaka pri posodabljanju imenika.",
+"Error getting contact object." => "Napaka pri pridobivanju kontakta predmeta.",
+"Error getting PHOTO property." => "Napaka pri pridobivanju lastnosti fotografije.",
+"Error saving contact." => "Napaka pri shranjevanju stika.",
+"Error resizing image" => "Napaka pri spreminjanju velikosti slike",
+"Error cropping image" => "Napaka pri obrezovanju slike",
+"Error creating temporary image" => "Napaka pri ustvarjanju zaÄasne slike",
+"Error finding image: " => "Napaka pri iskanju datoteke: ",
"Error uploading contacts to storage." => "Napaka pri nalaganju stikov v hrambo.",
"There is no error, the file uploaded with success" => "Datoteka je bila uspešno naložena.",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Naložena datoteka presega velikost, ki jo doloÄa parameter upload_max_filesize v datoteki php.ini",
@@ -41,17 +44,46 @@
"The uploaded file was only partially uploaded" => "Datoteka je bila le delno naložena",
"No file was uploaded" => "Nobena datoteka ni bila naložena",
"Missing a temporary folder" => "Manjka zaÄasna mapa",
+"Couldn't save temporary image: " => "ZaÄasne slike ni bilo mogoÄe shraniti: ",
+"Couldn't load temporary image: " => "ZaÄasne slike ni bilo mogoÄe naložiti: ",
+"No file was uploaded. Unknown error" => "Nobena datoteka ni bila naložena. Neznana napaka",
"Contacts" => "Stiki",
-"Drop a VCF file to import contacts." => "Za uvoz stikov spustite VCF datoteko tukaj.",
-"Addressbook not found." => "Imenik ni bil najden.",
+"Sorry, this functionality has not been implemented yet" => "Žal ta funkcionalnost še ni podprta",
+"Not implemented" => "Ni podprto",
+"Couldn't get a valid address." => "Ne morem dobiti veljavnega naslova.",
+"Error" => "Napaka",
+"This property has to be non-empty." => "Ta lastnost ne sme biti prazna",
+"Couldn't serialize elements." => "Predmetov ni bilo mogoÄe dati v zaporedje.",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "\"deleteProperty\" je bila klicana brez vrste argumenta. Prosimo, Äe oddate poroÄilo o napaki na bugs.owncloud.org",
+"Edit name" => "Uredi ime",
+"No files selected for upload." => "Nobena datoteka ni bila izbrana za nalaganje.",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteka, ki jo poskuÅ¡ate naložiti, presega najveÄjo dovoljeno velikost za nalaganje na tem strežniku.",
+"Error loading profile picture." => "Napaka pri nalaganju slike profila.",
+"Select type" => "Izberite vrsto",
+"Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted." => "Nekateri stiki so oznaÄeni za izbris, vendar Å¡e niso izbrisani. Prosimo, Äe poÄakate na njihov izbris.",
+"Do you want to merge these address books?" => "Ali želite združiti adresarje?",
+"Result: " => "Rezultati: ",
+" imported, " => " uvoženih, ",
+" failed." => " je spodletelo.",
+"Displayname cannot be empty." => "Ime za prikaz ne more biti prazno.",
+"Addressbook not found: " => "Adresar ni bil najden:",
"This is not your addressbook." => "To ni vaš imenik.",
"Contact could not be found." => "Stika ni bilo mogoÄe najti.",
-"Address" => "Naslov",
-"Telephone" => "Telefon",
-"Email" => "E-pošta",
-"Organization" => "Organizacija",
+"Jabber" => "Jabber",
+"AIM" => "AIM",
+"MSN" => "MSN",
+"Twitter" => "Twitter",
+"GoogleTalk" => "GoogleTalk",
+"Facebook" => "Facebook",
+"XMPP" => "XMPP",
+"ICQ" => "ICQ",
+"Yahoo" => "Yahoo",
+"Skype" => "Skype",
+"QQ" => "QQ",
+"GaduGadu" => "GaduGadu",
"Work" => "Delo",
"Home" => "Doma",
+"Other" => "Drugo",
"Mobile" => "Mobilni telefon",
"Text" => "Besedilo",
"Voice" => "Glas",
@@ -60,25 +92,52 @@
"Video" => "Video",
"Pager" => "Pozivnik",
"Internet" => "Internet",
+"Birthday" => "Rojstni dan",
+"Business" => "Poslovno",
+"Call" => "Klic",
+"Clients" => "Stranka",
+"Deliverer" => "Dostavljalec",
+"Holidays" => "Prazniki",
+"Ideas" => "Ideje",
+"Journey" => "Potovanje",
+"Jubilee" => "Jubilej",
+"Meeting" => "Sestanek",
+"Personal" => "Osebno",
+"Projects" => "Projekti",
+"Questions" => "Vprašanja",
"{name}'s Birthday" => "{name} - rojstni dan",
"Contact" => "Stik",
"Add Contact" => "Dodaj stik",
+"Import" => "Uvozi",
+"Settings" => "Nastavitve",
"Addressbooks" => "Imeniki",
-"Configure Address Books" => "Nastavi imenike",
-"New Address Book" => "Nov imenik",
-"Import from VCF" => "Uvozi iz VCF",
-"CardDav Link" => "CardDav povezava",
-"Download" => "Prenesi",
-"Edit" => "Uredi",
-"Delete" => "Izbriši",
-"Download contact" => "Prenesi stik",
-"Delete contact" => "Izbriši stik",
+"Close" => "Zapri",
+"Keyboard shortcuts" => "Bližnjice na tipkovnici",
+"Navigation" => "Krmarjenje",
+"Next contact in list" => "Naslednji stik na seznamu",
+"Previous contact in list" => "Predhodni stik na seznamu",
+"Expand/collapse current addressbook" => "RazÅ¡iri/skrÄi trenutni adresar",
+"Next addressbook" => "Naslednji adresar",
+"Previous addressbook" => "Predhodni adresar",
+"Actions" => "Dejanja",
+"Refresh contacts list" => "Osveži seznam stikov",
+"Add new contact" => "Dodaj nov stik",
+"Add new addressbook" => "Dodaj nov adresar",
+"Delete current contact" => "Izbriši trenutni stik",
"Drop photo to upload" => "Spustite sliko tukaj, da bi jo naložili",
+"Delete current photo" => "Izbriši trenutno sliko",
+"Edit current photo" => "Uredi trenutno sliko",
+"Upload new photo" => "Naloži novo sliko",
+"Select photo from ownCloud" => "Izberi sliko iz ownCloud",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Format po meri, Kratko ime, Polno ime, Obratno ali Obratno z vejico",
"Edit name details" => "Uredite podrobnosti imena",
+"Organization" => "Organizacija",
+"Delete" => "Izbriši",
"Nickname" => "Vzdevek",
"Enter nickname" => "Vnesite vzdevek",
-"Birthday" => "Rojstni dan",
+"Web site" => "Spletna stran",
+"http://www.somesite.com" => "http://www.nekastran.si",
+"Go to web site" => "Pojdi na spletno stran",
"dd-mm-yyyy" => "dd. mm. yyyy",
"Groups" => "Skupine",
"Separate groups with commas" => "Skupine loÄite z vejicami",
@@ -90,28 +149,33 @@
"Delete email address" => "Izbriši e-poštni naslov",
"Enter phone number" => "Vpiši telefonsko številko",
"Delete phone number" => "Izbriši telefonsko številko",
+"Instant Messenger" => "TakojÅ¡ni sporoÄilnik",
+"Delete IM" => "Izbriši IM",
"View on map" => "Prikaz na zemljevidu",
"Edit address details" => "Uredi podrobnosti",
"Add notes here." => "Opombe dodajte tukaj.",
"Add field" => "Dodaj polje",
-"Profile picture" => "Slika profila",
"Phone" => "Telefon",
+"Email" => "E-pošta",
+"Instant Messaging" => "Neposredno sporoÄanje",
+"Address" => "Naslov",
"Note" => "Opomba",
-"Delete current photo" => "Izbriši trenutno sliko",
-"Edit current photo" => "Uredi trenutno sliko",
-"Upload new photo" => "Naloži novo sliko",
-"Select photo from ownCloud" => "Izberi sliko iz ownCloud",
+"Download contact" => "Prenesi stik",
+"Delete contact" => "Izbriši stik",
+"The temporary image has been removed from cache." => "ZaÄasna slika je bila odstranjena iz predpomnilnika.",
"Edit address" => "Uredi naslov",
"Type" => "Vrsta",
"PO Box" => "Poštni predal",
+"Street address" => "UliÄni naslov",
+"Street and number" => "Ulica in Å¡telika",
"Extended" => "Razširjeno",
-"Street" => "Ulica",
+"Apartment number etc." => "Å tevilka stanovanja itd.",
"City" => "Mesto",
"Region" => "Regija",
+"E.g. state or province" => "Npr. dežela ali pokrajina",
"Zipcode" => "Poštna št.",
+"Postal code" => "Poštna številka",
"Country" => "Dežela",
-"Edit categories" => "Uredi kategorije",
-"Add" => "Dodaj",
"Addressbook" => "Imenik",
"Hon. prefixes" => "Predpone",
"Miss" => "gdÄ.",
@@ -132,26 +196,35 @@
"Esq." => "Esq.",
"Jr." => "mlajši",
"Sn." => "starejši",
-"New Addressbook" => "Nov imenik",
-"Edit Addressbook" => "Uredi imenik",
-"Displayname" => "Ime za prikaz",
-"Active" => "Aktiven",
-"Save" => "Shrani",
-"Submit" => "Potrdi",
-"Cancel" => "PrekliÄi",
"Import a contacts file" => "Uvozi datoteko s stiki",
"Please choose the addressbook" => "Prosimo, Äe izberete imenik",
"create a new addressbook" => "Ustvari nov imenik",
"Name of new addressbook" => "Ime novega imenika",
-"Import" => "Uvozi",
"Importing contacts" => "Uvažam stike",
+"Contacts imported successfully" => "Stiki so bili uspešno uvoženi",
+"Close Dialog" => "Zapri dialog",
+"Import Addressbook" => "Uvozi imenik",
"Select address book to import to:" => "Izberite imenik v katerega boste uvažali:",
+"Drop a VCF file to import contacts." => "Za uvoz stikov spustite VCF datoteko tukaj.",
"Select from HD" => "Izberi iz HD",
"You have no contacts in your addressbook." => "V vašem imeniku ni stikov.",
"Add contact" => "Dodaj stik",
-"Configure addressbooks" => "Nastavi imenike",
+"Select Address Books" => "Izberite adresarje",
+"Enter name" => "Vnesite ime",
+"Enter description" => "Vnesite opis",
"CardDAV syncing addresses" => "CardDAV naslovi za sinhronizacijo",
"more info" => "veÄ informacij",
"Primary address (Kontact et al)" => "Primarni naslov (za kontakt et al)",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Show CardDav link" => "Pokaži CardDav povezavo",
+"Show read-only VCF link" => "Pokaži VCF povezavo samo za branje",
+"Share" => "Souporaba",
+"Download" => "Prenesi",
+"Edit" => "Uredi",
+"New Address Book" => "Nov imenik",
+"Name" => "Ime",
+"Description" => "Opis",
+"Save" => "Shrani",
+"Cancel" => "PrekliÄi",
+"More..." => "VeÄ..."
);
diff --git a/apps/contacts/l10n/sr.php b/apps/contacts/l10n/sr.php
index aad88f3603c..f54741c182f 100644
--- a/apps/contacts/l10n/sr.php
+++ b/apps/contacts/l10n/sr.php
@@ -3,10 +3,6 @@
"Contacts" => "Контакти",
"This is not your addressbook." => "Ово није ваш адреÑар.",
"Contact could not be found." => "Контакт Ñе не може наћи.",
-"Address" => "ÐдреÑа",
-"Telephone" => "Телефон",
-"Email" => "Е-маил",
-"Organization" => "Организација",
"Work" => "ПоÑао",
"Home" => "Кућа",
"Mobile" => "Мобилни",
@@ -15,33 +11,29 @@
"Fax" => "ФакÑ",
"Video" => "Видео",
"Pager" => "Пејџер",
+"Birthday" => "Рођендан",
"Contact" => "Контакт",
"Add Contact" => "Додај контакт",
"Addressbooks" => "ÐдреÑар",
-"New Address Book" => "Ðови адреÑар",
-"Download" => "Преузимање",
-"Edit" => "Уреди",
+"Organization" => "Организација",
"Delete" => "Обриши",
-"Download contact" => "Преузми контакт",
-"Delete contact" => "Обриши контакт",
-"Birthday" => "Рођендан",
"Preferred" => "Пожељан",
"Phone" => "Телефон",
+"Email" => "Е-маил",
+"Address" => "ÐдреÑа",
+"Download contact" => "Преузми контакт",
+"Delete contact" => "Обриши контакт",
"Type" => "Тип",
"PO Box" => "ПоштанÑки број",
"Extended" => "Прошири",
-"Street" => "Улица",
"City" => "Град",
"Region" => "Регија",
"Zipcode" => "Зип код",
"Country" => "Земља",
-"Add" => "Додај",
"Addressbook" => "ÐдреÑар",
-"New Addressbook" => "Ðови адреÑар",
-"Edit Addressbook" => "Уреди адреÑар",
-"Displayname" => "Приказано име",
-"Active" => "Ðктиван",
+"Download" => "Преузимање",
+"Edit" => "Уреди",
+"New Address Book" => "Ðови адреÑар",
"Save" => "Сними",
-"Submit" => "Пошаљи",
"Cancel" => "Откажи"
);
diff --git a/apps/contacts/l10n/sr@latin.php b/apps/contacts/l10n/sr@latin.php
index a76c1047907..f06539ab43e 100644
--- a/apps/contacts/l10n/sr@latin.php
+++ b/apps/contacts/l10n/sr@latin.php
@@ -2,10 +2,6 @@
"Information about vCard is incorrect. Please reload the page." => "Podaci o vKarti su neispravni. Ponovo uÄitajte stranicu.",
"This is not your addressbook." => "Ovo nije vaš adresar.",
"Contact could not be found." => "Kontakt se ne može naći.",
-"Address" => "Adresa",
-"Telephone" => "Telefon",
-"Email" => "E-mail",
-"Organization" => "Organizacija",
"Work" => "Posao",
"Home" => "Kuća",
"Mobile" => "Mobilni",
@@ -14,16 +10,18 @@
"Fax" => "Faks",
"Video" => "Video",
"Pager" => "Pejdžer",
+"Birthday" => "Rođendan",
"Add Contact" => "Dodaj kontakt",
-"Edit" => "Uredi",
+"Organization" => "Organizacija",
"Delete" => "Obriši",
-"Birthday" => "Rođendan",
"Phone" => "Telefon",
+"Email" => "E-mail",
+"Address" => "Adresa",
"PO Box" => "Poštanski broj",
"Extended" => "Proširi",
-"Street" => "Ulica",
"City" => "Grad",
"Region" => "Regija",
"Zipcode" => "Zip kod",
-"Country" => "Zemlja"
+"Country" => "Zemlja",
+"Edit" => "Uredi"
);
diff --git a/apps/contacts/l10n/sv.php b/apps/contacts/l10n/sv.php
index 8d5d37d2484..a7721753b4b 100644
--- a/apps/contacts/l10n/sv.php
+++ b/apps/contacts/l10n/sv.php
@@ -1,35 +1,42 @@
<?php $TRANSLATIONS = array(
-"Error (de)activating addressbook." => "Fel när (av)aktivera adressbok",
-"There was an error adding the contact." => "Det uppstod ett fel när kontakt skulle läggas till",
-"Cannot add empty property." => "Kan inte lägga till en tom egenskap",
-"At least one of the address fields has to be filled out." => "Minst ett fält måste fyllas i",
-"Error adding contact property." => "Fel när kontaktegenskap skulle läggas till",
+"Error (de)activating addressbook." => "Fel (av)aktivera adressbok.",
+"id is not set." => "ID är inte satt.",
+"Cannot update addressbook with an empty name." => "Kan inte uppdatera adressboken med ett tomt namn.",
+"Error updating addressbook." => "Fel uppstod när adressbok skulle uppdateras.",
"No ID provided" => "Inget ID angett",
"Error setting checksum." => "Fel uppstod när kontrollsumma skulle sättas.",
"No categories selected for deletion." => "Inga kategorier valda för borttaging",
"No address books found." => "Ingen adressbok funnen.",
"No contacts found." => "Inga kontakter funna.",
+"There was an error adding the contact." => "Det uppstod ett fel när kontakten skulle läggas till.",
+"element name is not set." => "elementnamn ej angett.",
+"Could not parse contact: " => "Kunde inte läsa kontakt:",
+"Cannot add empty property." => "Kan inte lägga till en tom egenskap.",
+"At least one of the address fields has to be filled out." => "Minst ett fält måste fyllas i.",
+"Trying to add duplicate property: " => "Försöker lägga till dubblett:",
+"Missing IM parameter." => "IM parameter saknas.",
+"Unknown IM: " => "Okänt IM:",
+"Information about vCard is incorrect. Please reload the page." => "Information om vCard är felaktigt. Vänligen ladda om sidan.",
"Missing ID" => "ID saknas",
-"Cannot add addressbook with an empty name." => "Kan inte lägga till adressbok med ett tomt namn.",
-"Error adding addressbook." => "Fel när adressbok skulle läggas till",
-"Error activating addressbook." => "Fel uppstod när adressbok skulle aktiveras",
+"Error parsing VCard for ID: \"" => "Fel vid läsning av VCard för ID: \"",
+"checksum is not set." => "kontrollsumma är inte satt.",
+"Information about vCard is incorrect. Please reload the page: " => "Informationen om vCard är fel. Ladda om sidan:",
+"Something went FUBAR. " => "NÃ¥got gick fel.",
"No contact ID was submitted." => "Inget kontakt-ID angavs.",
-"Error reading contact photo." => "Fel uppstod när ",
+"Error reading contact photo." => "Fel uppstod vid läsning av kontaktfoto.",
"Error saving temporary file." => "Fel uppstod när temporär fil skulle sparas.",
"The loading photo is not valid." => "Det laddade fotot är inte giltigt.",
-"id is not set." => "ID är inte satt.",
-"Information about vCard is incorrect. Please reload the page." => "Information om vCard är felaktigt. Vänligen ladda om sidan.",
-"Error deleting contact property." => "Fel uppstod när kontaktegenskap skulle tas bort",
"Contact ID is missing." => "Kontakt-ID saknas.",
-"Missing contact id." => "Saknar kontakt-ID.",
"No photo path was submitted." => "Ingen sökväg till foto angavs.",
"File doesn't exist:" => "Filen existerar inte.",
"Error loading image." => "Fel uppstod när bild laddades.",
-"checksum is not set." => "kontrollsumma är inte satt.",
-"Information about vCard is incorrect. Please reload the page: " => "Informationen om vCard är fel. Ladda om sidan:",
-"Error updating contact property." => "Fel uppstod när kontaktegenskap skulle uppdateras",
-"Cannot update addressbook with an empty name." => "Kan inte uppdatera adressboken med ett tomt namn.",
-"Error updating addressbook." => "Fel uppstod när adressbok skulle uppdateras",
+"Error getting contact object." => "Fel vid hämtning av kontakt.",
+"Error getting PHOTO property." => "Fel vid hämtning av egenskaper för FOTO.",
+"Error saving contact." => "Fel vid sparande av kontakt.",
+"Error resizing image" => "Fel vid storleksförändring av bilden",
+"Error cropping image" => "Fel vid beskärning av bilden",
+"Error creating temporary image" => "Fel vid skapande av tillfällig bild",
+"Error finding image: " => "Kunde inte hitta bild:",
"Error uploading contacts to storage." => "Fel uppstod när kontakt skulle lagras.",
"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 i php.ini",
@@ -37,17 +44,46 @@
"The uploaded file was only partially uploaded" => "Den uppladdade filen var bara delvist uppladdad",
"No file was uploaded" => "Ingen fil laddades upp",
"Missing a temporary folder" => "En temporär mapp saknas",
+"Couldn't save temporary image: " => "Kunde inte spara tillfällig bild:",
+"Couldn't load temporary image: " => "Kunde inte ladda tillfällig bild:",
+"No file was uploaded. Unknown error" => "Ingen fil uppladdad. Okänt fel",
"Contacts" => "Kontakter",
-"Drop a VCF file to import contacts." => "Släpp en VCF-fil för att importera kontakter.",
-"Addressbook not found." => "Hittade inte adressboken",
+"Sorry, this functionality has not been implemented yet" => "Tyvärr är denna funktion inte införd än",
+"Not implemented" => "Inte införd",
+"Couldn't get a valid address." => "Kunde inte hitta en giltig adress.",
+"Error" => "Fel",
+"This property has to be non-empty." => "Denna egenskap får inte vara tom.",
+"Couldn't serialize elements." => "Kunde inte serialisera element.",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "\"deleteProperty\" anropades utan typargument. Vänligen rapportera till bugs.owncloud.org",
+"Edit name" => "Ändra namn",
+"No files selected for upload." => "Inga filer valda för uppladdning",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Filen du försöker ladda upp är större än den maximala storleken för filuppladdning på denna server.",
+"Error loading profile picture." => "Fel vid hämtning av profilbild.",
+"Select type" => "Välj typ",
+"Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted." => "Vissa kontakter är markerade för radering, men är inte raderade än. Vänta tills dom är raderade.",
+"Do you want to merge these address books?" => "Vill du slå samman dessa adressböcker?",
+"Result: " => "Resultat:",
+" imported, " => "importerad,",
+" failed." => "misslyckades.",
+"Displayname cannot be empty." => "Visningsnamn får inte vara tomt.",
+"Addressbook not found: " => "Adressboken hittades inte:",
"This is not your addressbook." => "Det här är inte din adressbok.",
"Contact could not be found." => "Kontakt kunde inte hittas.",
-"Address" => "Adress",
-"Telephone" => "Telefon",
-"Email" => "E-post",
-"Organization" => "Organisation",
+"Jabber" => "Jabber",
+"AIM" => "AIM",
+"MSN" => "MSN",
+"Twitter" => "Twitter",
+"GoogleTalk" => "GoogleTalk",
+"Facebook" => "Facebook",
+"XMPP" => "XMPP",
+"ICQ" => "ICQ",
+"Yahoo" => "Yahoo",
+"Skype" => "Skype",
+"QQ" => "QQ",
+"GaduGadu" => "GaduGadu",
"Work" => "Arbete",
"Home" => "Hem",
+"Other" => "Annat",
"Mobile" => "Mobil",
"Text" => "Text",
"Voice" => "Röst",
@@ -56,88 +92,133 @@
"Video" => "Video",
"Pager" => "Personsökare",
"Internet" => "Internet",
+"Birthday" => "Födelsedag",
+"Business" => "Företag",
+"Call" => "Ring",
+"Clients" => "Kunder",
+"Deliverer" => "Leverera",
+"Holidays" => "Helgdagar",
+"Ideas" => "Idéer",
+"Journey" => "Resa",
+"Jubilee" => "Jubileum",
+"Meeting" => "Möte",
+"Personal" => "Privat",
+"Projects" => "Projekt",
+"Questions" => "Frågor",
"{name}'s Birthday" => "{name}'s födelsedag",
"Contact" => "Kontakt",
"Add Contact" => "Lägg till kontakt",
+"Import" => "Importera",
+"Settings" => "Inställningar",
"Addressbooks" => "Adressböcker",
-"Configure Address Books" => "Konfigurera adressböcker",
-"New Address Book" => "Ny adressbok",
-"Import from VCF" => "Importera från VCF",
-"CardDav Link" => "CardDAV länk",
-"Download" => "Nedladdning",
-"Edit" => "Redigera",
-"Delete" => "Radera",
-"Download contact" => "Ladda ner kontakt",
-"Delete contact" => "Radera kontakt",
+"Close" => "Stäng",
+"Keyboard shortcuts" => "Kortkommandon",
+"Navigation" => "Navigering",
+"Next contact in list" => "Nästa kontakt i listan",
+"Previous contact in list" => "Föregående kontakt i listan",
+"Expand/collapse current addressbook" => "Visa/dölj aktuell adressbok",
+"Next addressbook" => "Nästa adressbok",
+"Previous addressbook" => "Föregående adressbok",
+"Actions" => "Åtgärder",
+"Refresh contacts list" => "Uppdatera kontaktlistan",
+"Add new contact" => "Lägg till ny kontakt",
+"Add new addressbook" => "Lägg till ny adressbok",
+"Delete current contact" => "Radera denna kontakt",
"Drop photo to upload" => "Släpp foto för att ladda upp",
+"Delete current photo" => "Ta bort aktuellt foto",
+"Edit current photo" => "Redigera aktuellt foto",
+"Upload new photo" => "Ladda upp ett nytt foto",
+"Select photo from ownCloud" => "Välj foto från ownCloud",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => " anpassad, korta namn, hela namn, bakåt eller bakåt med komma",
"Edit name details" => "Redigera detaljer för namn",
+"Organization" => "Organisation",
+"Delete" => "Radera",
"Nickname" => "Smeknamn",
"Enter nickname" => "Ange smeknamn",
-"Birthday" => "Födelsedag",
+"Web site" => "Webbplats",
+"http://www.somesite.com" => "http://www.somesite.com",
+"Go to web site" => "GÃ¥ till webbplats",
"dd-mm-yyyy" => "dd-mm-åååå",
"Groups" => "Grupper",
"Separate groups with commas" => "Separera grupperna med kommatecken",
"Edit groups" => "Editera grupper",
"Preferred" => "Föredragen",
-"Please specify a valid email address." => "Vänligen ange en giltig e-postadress",
+"Please specify a valid email address." => "Vänligen ange en giltig e-postadress.",
"Enter email address" => "Ange e-postadress",
"Mail to address" => "Posta till adress.",
"Delete email address" => "Ta bort e-postadress",
-"Enter phone number" => "Ange ett telefonnummer",
+"Enter phone number" => "Ange telefonnummer",
"Delete phone number" => "Ta bort telefonnummer",
+"Instant Messenger" => "Instant Messenger",
+"Delete IM" => "Radera IM",
"View on map" => "Visa på karta",
"Edit address details" => "Redigera detaljer för adress",
"Add notes here." => "Lägg till noteringar här.",
"Add field" => "Lägg till fält",
-"Profile picture" => "Profilbild",
"Phone" => "Telefon",
+"Email" => "E-post",
+"Instant Messaging" => "Instant Messaging",
+"Address" => "Adress",
"Note" => "Notering",
-"Delete current photo" => "Ta bort aktuellt foto",
-"Edit current photo" => "Redigera aktuellt foto",
-"Upload new photo" => "Ladda upp ett nytt foto",
-"Select photo from ownCloud" => "Välj foto från ownCloud",
+"Download contact" => "Ladda ner kontakt",
+"Delete contact" => "Radera kontakt",
+"The temporary image has been removed from cache." => "Den tillfälliga bilden har raderats från cache.",
"Edit address" => "Editera adress",
"Type" => "Typ",
"PO Box" => "Postbox",
+"Street address" => "Gatuadress",
+"Street and number" => "Gata och nummer",
"Extended" => "Utökad",
-"Street" => "Gata",
+"Apartment number etc." => "Lägenhetsnummer",
"City" => "Stad",
"Region" => "Län",
+"E.g. state or province" => "T.ex. stat eller provins",
"Zipcode" => "Postnummer",
+"Postal code" => "Postnummer",
"Country" => "Land",
-"Edit categories" => "Editera kategorier",
-"Add" => "Ny",
"Addressbook" => "Adressbok",
-"Miss" => "Herr",
-"Ms" => "Ingen adressbok funnen.",
-"Mr" => "Fru",
-"Mrs" => "Fröken",
-"Dr" => "Dr",
+"Hon. prefixes" => "Ledande titlar",
+"Miss" => "Fröken",
+"Ms" => "Fru",
+"Mr" => "Herr",
+"Sir" => "Herr",
+"Mrs" => "Fru",
+"Dr" => "Dr.",
"Given name" => "Förnamn",
"Additional names" => "Mellannamn",
"Family name" => "Efternamn",
+"Hon. suffixes" => "Efterställda titlar",
+"J.D." => "Kand. Jur.",
+"M.D." => "M.D.",
+"D.O." => "D.O.",
+"D.C." => "D.C.",
"Ph.D." => "Fil.dr.",
-"New Addressbook" => "Ny adressbok",
-"Edit Addressbook" => "Redigera adressbok",
-"Displayname" => "Visningsnamn",
-"Active" => "Aktiv",
-"Save" => "Spara",
-"Submit" => "Skicka in",
-"Cancel" => "Avbryt",
+"Esq." => "Esq.",
+"Jr." => "Jr.",
+"Sn." => "Sn.",
"Import a contacts file" => "Importera en kontaktfil",
"Please choose the addressbook" => "Vänligen välj adressboken",
"create a new addressbook" => "skapa en ny adressbok",
"Name of new addressbook" => "Namn för ny adressbok",
-"Import" => "Importera",
"Importing contacts" => "Importerar kontakter",
-"Select address book to import to:" => "Importera till adressbok:",
-"Select from HD" => "Välj från hårddisk",
"You have no contacts in your addressbook." => "Du har inga kontakter i din adressbok.",
"Add contact" => "Lägg till en kontakt",
-"Configure addressbooks" => "Konfigurera adressböcker",
+"Select Address Books" => "Välj adressböcker",
+"Enter name" => "Ange namn",
+"Enter description" => "Ange beskrivning",
"CardDAV syncing addresses" => "CardDAV synkningsadresser",
-"more info" => "mera information",
+"more info" => "mer information",
"Primary address (Kontact et al)" => "Primär adress (Kontakt o.a.)",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Show CardDav link" => "Visa CardDav-länk",
+"Show read-only VCF link" => "Visa skrivskyddad VCF-länk",
+"Share" => "Dela",
+"Download" => "Nedladdning",
+"Edit" => "Redigera",
+"New Address Book" => "Ny adressbok",
+"Name" => "Namn",
+"Description" => "Beskrivning",
+"Save" => "Spara",
+"Cancel" => "Avbryt",
+"More..." => "Mer..."
);
diff --git a/apps/contacts/l10n/th_TH.php b/apps/contacts/l10n/th_TH.php
index acf382c6a43..6afc64e61d3 100644
--- a/apps/contacts/l10n/th_TH.php
+++ b/apps/contacts/l10n/th_TH.php
@@ -1,39 +1,40 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "เà¸à¸´à¸”ข้อผิดพลาดใน (ยà¸à¹€à¸¥à¸´à¸)à¸à¸²à¸£à¹€à¸›à¸´à¸”ใช้งานสมุดบันทึà¸à¸—ี่อยู่",
-"There was an error adding the contact." => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸­à¸œà¸¹à¹‰à¸•à¸´à¸”ต่อใหม่",
-"Cannot add empty property." => "ไม่สามารถเพิ่มรายละเอียดที่ไม่มีข้อมูลได้",
-"At least one of the address fields has to be filled out." => "อย่างน้อยที่สุดช่องข้อมูลที่อยู่จะต้องถูà¸à¸à¸£à¸­à¸à¸¥à¸‡à¹„ป",
-"Trying to add duplicate property: " => "พยายามที่จะเพิ่มทรัพยาà¸à¸£à¸—ี่ซ้ำซ้อนà¸à¸±à¸™: ",
-"Error adding contact property." => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸£à¸²à¸¢à¸¥à¸°à¹€à¸­à¸µà¸¢à¸”à¸à¸²à¸£à¸•à¸´à¸”ต่อ",
+"id is not set." => "ยังไม่ได้à¸à¸³à¸«à¸™à¸”รหัส",
+"Cannot update addressbook with an empty name." => "ไม่สามารถอัพเดทสมุดบันทึà¸à¸—ี่อยู่โดยไม่มีชื่อได้",
+"Error updating addressbook." => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸­à¸±à¸žà¹€à¸”ทสมุดบันทึà¸à¸—ี่อยู่",
"No ID provided" => "ยังไม่ได้ใส่รหัส",
"Error setting checksum." => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่า checksum",
"No categories selected for deletion." => "ยังไม่ได้เลือà¸à¸«à¸¡à¸§à¸”หมู่ที่ต้องà¸à¸²à¸£à¸¥à¸š",
"No address books found." => "ไม่พบสมุดบันทึà¸à¸—ี่อยู่ที่ต้องà¸à¸²à¸£",
"No contacts found." => "ไม่พบข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อที่ต้องà¸à¸²à¸£",
+"There was an error adding the contact." => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸­à¸œà¸¹à¹‰à¸•à¸´à¸”ต่อใหม่",
+"element name is not set." => "ยังไม่ได้à¸à¸³à¸«à¸™à¸”ชื่อ",
+"Could not parse contact: " => "ไม่สามารถà¹à¸ˆà¸à¹à¸ˆà¸‡à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸­à¸œà¸¹à¹‰à¸•à¸´à¸”ต่อได้",
+"Cannot add empty property." => "ไม่สามารถเพิ่มรายละเอียดที่ไม่มีข้อมูลได้",
+"At least one of the address fields has to be filled out." => "อย่างน้อยที่สุดช่องข้อมูลที่อยู่จะต้องถูà¸à¸à¸£à¸­à¸à¸¥à¸‡à¹„ป",
+"Trying to add duplicate property: " => "พยายามที่จะเพิ่มทรัพยาà¸à¸£à¸—ี่ซ้ำซ้อนà¸à¸±à¸™: ",
+"Information about vCard is incorrect. Please reload the page." => "ข้อมูลเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸š vCard ไม่ถูà¸à¸•à¹‰à¸­à¸‡ à¸à¸£à¸¸à¸“าโหลดหน้าเวปใหม่อีà¸à¸„รั้ง",
"Missing ID" => "รหัสสูà¸à¸«à¸²à¸¢",
"Error parsing VCard for ID: \"" => "พบข้อผิดพลาดในà¸à¸²à¸£à¹à¸¢à¸à¸£à¸«à¸±à¸ª VCard:\"",
-"Cannot add addressbook with an empty name." => "ไม่สามารถเพิ่มสมุดบันทึà¸à¸—ี่อยู่โดยไม่มีชื่อได้",
-"Error adding addressbook." => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸ªà¸¡à¸¸à¸”บันทึà¸à¸—ี่อยู่ใหม่",
-"Error activating addressbook." => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¹€à¸›à¸´à¸”ใช้งานสมุดบันทึà¸à¸—ี่อยู่",
+"checksum is not set." => "ยังไม่ได้à¸à¸³à¸«à¸™à¸”ค่า checksum",
+"Information about vCard is incorrect. Please reload the page: " => "ข้อมูล vCard ไม่ถูà¸à¸•à¹‰à¸­à¸‡ à¸à¸£à¸¸à¸“าโหลดหน้าเว็บใหม่อีà¸à¸„รั้ง: ",
+"Something went FUBAR. " => "มีบางอย่างเà¸à¸´à¸”à¸à¸²à¸£ FUBAR. ",
"No contact ID was submitted." => "ไม่มีรหัสข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อถูà¸à¸ªà¹ˆà¸‡à¸¡à¸²",
"Error reading contact photo." => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸­à¹ˆà¸²à¸™à¸£à¸¹à¸›à¸ à¸²à¸žà¸‚องข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ",
"Error saving temporary file." => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¹„ฟล์ชั่วคราว",
"The loading photo is not valid." => "โหลดรูปภาพไม่ถูà¸à¸•à¹‰à¸­à¸‡",
-"id is not set." => "ยังไม่ได้à¸à¸³à¸«à¸™à¸”รหัส",
-"Information about vCard is incorrect. Please reload the page." => "ข้อมูลเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸š vCard ไม่ถูà¸à¸•à¹‰à¸­à¸‡ à¸à¸£à¸¸à¸“าโหลดหน้าเวปใหม่อีà¸à¸„รั้ง",
-"Error deleting contact property." => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸¥à¸šà¸£à¸²à¸¢à¸¥à¸°à¹€à¸­à¸µà¸¢à¸”à¸à¸²à¸£à¸•à¸´à¸”ต่อ",
"Contact ID is missing." => "รหัสข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อเà¸à¸´à¸”à¸à¸²à¸£à¸ªà¸¹à¸à¸«à¸²à¸¢",
-"Missing contact id." => "รหัสข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อเà¸à¸´à¸”à¸à¸²à¸£à¸ªà¸¹à¸à¸«à¸²à¸¢",
"No photo path was submitted." => "ไม่พบตำà¹à¸«à¸™à¹ˆà¸‡à¸žà¸²à¸˜à¸‚องรูปภาพ",
"File doesn't exist:" => "ไม่มีไฟล์ดังà¸à¸¥à¹ˆà¸²à¸§",
"Error loading image." => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¹‚หลดรูปภาพ",
-"element name is not set." => "ยังไม่ได้à¸à¸³à¸«à¸™à¸”ชื่อ",
-"checksum is not set." => "ยังไม่ได้à¸à¸³à¸«à¸™à¸”ค่า checksum",
-"Information about vCard is incorrect. Please reload the page: " => "ข้อมูล vCard ไม่ถูà¸à¸•à¹‰à¸­à¸‡ à¸à¸£à¸¸à¸“าโหลดหน้าเว็บใหม่อีà¸à¸„รั้ง: ",
-"Something went FUBAR. " => "มีบางอย่างเà¸à¸´à¸”à¸à¸²à¸£ FUBAR. ",
-"Error updating contact property." => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸­à¸±à¸žà¹€à¸”ทข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ",
-"Cannot update addressbook with an empty name." => "ไม่สามารถอัพเดทสมุดบันทึà¸à¸—ี่อยู่โดยไม่มีชื่อได้",
-"Error updating addressbook." => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸­à¸±à¸žà¹€à¸”ทสมุดบันทึà¸à¸—ี่อยู่",
+"Error getting contact object." => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸”ึงข้อมูลติดต่อ",
+"Error getting PHOTO property." => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸”ึงคุณสมบัติของรูปภาพ",
+"Error saving contact." => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¸‚้อมูลผู้ติดต่อ",
+"Error resizing image" => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸›à¸£à¸±à¸šà¸‚นาดรูปภาพ",
+"Error cropping image" => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸„รอบตัดภาพ",
+"Error creating temporary image" => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸£à¸¹à¸›à¸ à¸²à¸žà¸Šà¸±à¹ˆà¸§à¸„ราว",
+"Error finding image: " => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸„้นหารูปภาพ: ",
"Error uploading contacts to storage." => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸­à¸±à¸žà¹‚หลดข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อไปยังพื้นที่จัดเà¸à¹‡à¸šà¸‚้อมูล",
"There is no error, the file uploaded with success" => "ไม่พบข้อผิดพลาดใดๆ, ไฟล์ถูà¸à¸­à¸±à¸žà¹‚หลดเรียบร้อยà¹à¸¥à¹‰à¸§",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "ไฟล์ที่อัพโหลดมีขนาดไฟล์ใหà¸à¹ˆà¹€à¸à¸´à¸™à¸ˆà¸³à¸™à¸§à¸™à¸—ี่à¸à¸³à¸«à¸™à¸”ไว้ในคำสั่ง upload_max_filesize ที่อยู่ในไฟล์ php.ini",
@@ -41,17 +42,34 @@
"The uploaded file was only partially uploaded" => "ไฟล์ถูà¸à¸­à¸±à¸žà¹‚หลดได้เพียงบางส่วนเท่านั้น",
"No file was uploaded" => "ไม่มีไฟล์ที่ถูà¸à¸­à¸±à¸žà¹‚หลด",
"Missing a temporary folder" => "โฟลเดอร์ชั่วคราวเà¸à¸´à¸”à¸à¸²à¸£à¸ªà¸¹à¸à¸«à¸²à¸¢",
+"Couldn't save temporary image: " => "ไม่สามารถบันทึà¸à¸£à¸¹à¸›à¸ à¸²à¸žà¸Šà¸±à¹ˆà¸§à¸„ราวได้: ",
+"Couldn't load temporary image: " => "ไม่สามารถโหลดรูปภาพชั่วคราวได้: ",
+"No file was uploaded. Unknown error" => "ยังไม่มีไฟล์ใดที่ถูà¸à¸­à¸±à¸žà¹‚หลด เà¸à¸´à¸”ข้อผิดพลาดที่ไม่ทราบสาเหตุ",
"Contacts" => "ข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ",
-"Drop a VCF file to import contacts." => "วางไฟล์ VCF ที่ต้องà¸à¸²à¸£à¸™à¸³à¹€à¸‚้าข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ",
-"Addressbook not found." => "ไม่พบสมุดบันทึà¸à¸—ี่อยู่ที่ต้องà¸à¸²à¸£",
+"Sorry, this functionality has not been implemented yet" => "ขออภัย, ฟังà¸à¹Œà¸Šà¸±à¹ˆà¸™à¸à¸²à¸£à¸—ำงานนี้ยังไม่ได้ถูà¸à¸”ำเนินà¸à¸²à¸£",
+"Not implemented" => "ยังไม่ได้ถูà¸à¸”ำเนินà¸à¸²à¸£",
+"Couldn't get a valid address." => "ไม่สามารถดึงที่อยู่ที่ถูà¸à¸•à¹‰à¸­à¸‡à¹„ด้",
+"Error" => "พบข้อผิดพลาด",
+"This property has to be non-empty." => "คุณสมบัตินี้ต้องไม่มีข้อมูลว่างอยู่",
+"Couldn't serialize elements." => "ไม่สามารถทำสัà¸à¸¥à¸±à¸à¸©à¸“์องค์ประà¸à¸­à¸šà¸•à¹ˆà¸²à¸‡à¹†à¹ƒà¸«à¹‰à¹€à¸›à¹‡à¸™à¸•à¸±à¸§à¹€à¸¥à¸‚ตามลำดับได้",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' ถูà¸à¹€à¸£à¸µà¸¢à¸à¹ƒà¸Šà¹‰à¹‚ดยไม่มีอาร์à¸à¸´à¸§à¹€à¸¡à¸™à¸•à¹Œ à¸à¸£à¸¸à¸“าà¹à¸ˆà¹‰à¸‡à¹„ด้ที่ bugs.owncloud.org",
+"Edit name" => "à¹à¸à¹‰à¹„ขชื่อ",
+"No files selected for upload." => "ยังไม่ได้เลือà¸à¹„ฟล์ำสำหรับอัพโหลด",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "ไฟล์ที่คุณà¸à¸³à¸¥à¸±à¸‡à¸žà¸¢à¸²à¸¢à¸²à¸¡à¸—ี่จะอัพโหลดมีขนาดเà¸à¸´à¸™à¸ˆà¸³à¸™à¸§à¸™à¸ªà¸¹à¸‡à¸ªà¸¸à¸”ที่สามารถอัพโหลดได้สำหรับเซิร์ฟเวอร์นี้",
+"Error loading profile picture." => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¹‚หลดรูปภาพประจำตัว",
+"Select type" => "เลือà¸à¸Šà¸™à¸´à¸”",
+"Some contacts are marked for deletion, but not deleted yet. Please wait for them to be deleted." => "ข้อมูลผู้ติดต่อบางรายà¸à¸²à¸£à¹„ด้ถูà¸à¸—ำเครื่องหมายสำหรับลบทิ้งเอาไว้, à¹à¸•à¹ˆà¸¢à¸±à¸‡à¹„ม่ได้ถูà¸à¸¥à¸šà¸—ิ้ง, à¸à¸£à¸¸à¸“ารอให้รายà¸à¸²à¸£à¸”ังà¸à¸¥à¹ˆà¸²à¸§à¸–ูà¸à¸¥à¸šà¸—ิ้งเสียà¸à¹ˆà¸­à¸™",
+"Do you want to merge these address books?" => "คุณต้องà¸à¸²à¸£à¸œà¸ªà¸²à¸™à¸‚้อมูลสมุดบันทึà¸à¸—ี่อยู่เหล่านี้หรือไม่?",
+"Result: " => "ผลลัพธ์: ",
+" imported, " => " นำเข้าข้อมูลà¹à¸¥à¹‰à¸§, ",
+" failed." => " ล้มเหลว.",
+"Displayname cannot be empty." => "ชื่อที่ใช้à¹à¸ªà¸”งไม่สามารถเว้นว่างได้",
+"Addressbook not found: " => "ไม่พบสมุดบันทึà¸à¸—ี่อยู่ที่ต้องà¸à¸²à¸£",
"This is not your addressbook." => "นี่ไม่ใช่สมุดบันทึà¸à¸—ี่อยู่ของคุณ",
"Contact could not be found." => "ไม่พบข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ",
-"Address" => "ที่อยู่",
-"Telephone" => "โทรศัพท์",
-"Email" => "อีเมล์",
-"Organization" => "หน่วยงาน",
"Work" => "ที่ทำงาน",
"Home" => "บ้าน",
+"Other" => "อื่นๆ",
"Mobile" => "มือถือ",
"Text" => "ข้อความ",
"Voice" => "เสียงพูด",
@@ -60,25 +78,52 @@
"Video" => "วีดีโอ",
"Pager" => "เพจเจอร์",
"Internet" => "อินเทอร์เน็ต",
+"Birthday" => "วันเà¸à¸´à¸”",
+"Business" => "ธุรà¸à¸´à¸ˆ",
+"Call" => "โทร",
+"Clients" => "ลูà¸à¸„้า",
+"Deliverer" => "ผู้จัดส่ง",
+"Holidays" => "วันหยุด",
+"Ideas" => "ไอเดีย",
+"Journey" => "à¸à¸²à¸£à¹€à¸”ินทาง",
+"Jubilee" => "งานเฉลิมฉลอง",
+"Meeting" => "ประชุม",
+"Personal" => "ส่วนตัว",
+"Projects" => "โปรเจค",
+"Questions" => "คำถาม",
"{name}'s Birthday" => "วันเà¸à¸´à¸”ของ {name}",
"Contact" => "ข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ",
"Add Contact" => "เพิ่มรายชื่อผู้ติดต่อใหม่",
+"Import" => "นำเข้า",
+"Settings" => "ตั้งค่า",
"Addressbooks" => "สมุดบันทึà¸à¸—ี่อยู่",
-"Configure Address Books" => "à¸à¸³à¸«à¸™à¸”ค่าสมุดบันทึà¸à¸—ี่อยู่",
-"New Address Book" => "สร้างสมุดบันทึà¸à¸‚้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อใหม่",
-"Import from VCF" => "นำเข้าจาภVCF",
-"CardDav Link" => "ลิงค์ CardDav",
-"Download" => "ดาวน์โหลด",
-"Edit" => "à¹à¸à¹‰à¹„ข",
-"Delete" => "ลบ",
-"Download contact" => "ดาวน์โหลดข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ",
-"Delete contact" => "ลบข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ",
+"Close" => "ปิด",
+"Keyboard shortcuts" => "ปุ่มลัด",
+"Navigation" => "ระบบเมนู",
+"Next contact in list" => "ข้อมูลผู้ติดต่อถัดไปในรายà¸à¸²à¸£",
+"Previous contact in list" => "ข้อมูลผู้ติดต่อà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¹ƒà¸™à¸£à¸²à¸¢à¸à¸²à¸£",
+"Expand/collapse current addressbook" => "ขยาย/ย่อ สมุดบันทึà¸à¸—ี่อยู่ปัจจุบัน",
+"Next addressbook" => "สมุดบันทึà¸à¸—ี่อยู่ถัดไป",
+"Previous addressbook" => "สมุดบันทึà¸à¸—ี่อยู่à¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²",
+"Actions" => "à¸à¸²à¸£à¸à¸£à¸°à¸—ำ",
+"Refresh contacts list" => "รีเฟรชรายชื่อผู้ติดต่อใหม่",
+"Add new contact" => "เพิ่มข้อมูลผู้ติดต่อใหม่",
+"Add new addressbook" => "เพิ่มสมุดบันทึà¸à¸—ี่อยู่ใหม่",
+"Delete current contact" => "ลบข้อมูลผู้ติดต่อปัจจุบัน",
"Drop photo to upload" => "วางรูปภาพที่ต้องà¸à¸²à¸£à¸­à¸±à¸žà¹‚หลด",
+"Delete current photo" => "ลบรูปภาพปัจจุบัน",
+"Edit current photo" => "à¹à¸à¹‰à¹„ขรูปภาพปัจจุบัน",
+"Upload new photo" => "อัพโหลดรูปภาพใหม่",
+"Select photo from ownCloud" => "เลือà¸à¸£à¸¹à¸›à¸ à¸²à¸žà¸ˆà¸²à¸ ownCloud",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "à¸à¸³à¸«à¸™à¸”รูปà¹à¸šà¸šà¸‚องชื่อย่อ, ชื่อจริง, ย้อนค่าà¸à¸¥à¸±à¸µà¸šà¸”้วยคอมม่าเอง",
"Edit name details" => "à¹à¸à¹‰à¹„ขรายละเอียดของชื่อ",
+"Organization" => "หน่วยงาน",
+"Delete" => "ลบ",
"Nickname" => "ชื่อเล่น",
"Enter nickname" => "à¸à¸£à¸­à¸à¸Šà¸·à¹ˆà¸­à¹€à¸¥à¹ˆà¸™",
-"Birthday" => "วันเà¸à¸´à¸”",
+"Web site" => "เว็บไซต์",
+"http://www.somesite.com" => "http://www.somesite.com",
+"Go to web site" => "ไปที่เว็บไซต์",
"dd-mm-yyyy" => "dd-mm-yyyy",
"Groups" => "à¸à¸¥à¸¸à¹ˆà¸¡",
"Separate groups with commas" => "คั่นระหว่างรายชื่อà¸à¸¥à¸¸à¹ˆà¸¡à¸”้วยเครื่องหมายจุลภาีคหรือคอมม่า",
@@ -94,24 +139,26 @@
"Edit address details" => "à¹à¸à¹‰à¹„ขรายละเอียดที่อยู่",
"Add notes here." => "เพิ่มหมายเหตุà¸à¸³à¸à¸±à¸šà¹„ว้ที่นี่",
"Add field" => "เพิ่มช่องรับข้อมูล",
-"Profile picture" => "รูปภาพโปรไฟล์",
"Phone" => "โทรศัพท์",
+"Email" => "อีเมล์",
+"Address" => "ที่อยู่",
"Note" => "หมายเหตุ",
-"Delete current photo" => "ลบรูปภาพปัจจุบัน",
-"Edit current photo" => "à¹à¸à¹‰à¹„ขรูปภาพปัจจุบัน",
-"Upload new photo" => "อัพโหลดรูปภาพใหม่",
-"Select photo from ownCloud" => "เลือà¸à¸£à¸¹à¸›à¸ à¸²à¸žà¸ˆà¸²à¸ ownCloud",
+"Download contact" => "ดาวน์โหลดข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ",
+"Delete contact" => "ลบข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ",
+"The temporary image has been removed from cache." => "รูปภาพชั่วคราวดังà¸à¸¥à¹ˆà¸²à¸§à¹„ด้ถูà¸à¸¥à¸šà¸­à¸­à¸à¸ˆà¸²à¸à¸«à¸™à¹ˆà¸§à¸¢à¸„วามจำà¹à¸„ชà¹à¸¥à¹‰à¸§",
"Edit address" => "à¹à¸à¹‰à¹„ขที่อยู่",
"Type" => "ประเภท",
"PO Box" => "ตู้ ปณ.",
+"Street address" => "ที่อยู่",
+"Street and number" => "ถนนà¹à¸¥à¸°à¸«à¸¡à¸²à¸¢à¹€à¸¥à¸‚",
"Extended" => "เพิ่ม",
-"Street" => "ถนน",
+"Apartment number etc." => "หมายเลขอพาร์ทเมนต์ ฯลฯ",
"City" => "เมือง",
"Region" => "ภูมิภาค",
+"E.g. state or province" => "เช่น รัภหรือ จังหวัด",
"Zipcode" => "รหัสไปรษณีย์",
+"Postal code" => "รหัสไปรษณีย์",
"Country" => "ประเทศ",
-"Edit categories" => "à¹à¸à¹‰à¹„ขหมวดหมู่",
-"Add" => "เพิ่ม",
"Addressbook" => "สมุดบันทึà¸à¸—ี่อยู่",
"Hon. prefixes" => "คำนำหน้าชื่อคนรัà¸",
"Miss" => "นางสาว",
@@ -132,26 +179,35 @@
"Esq." => "Esq.",
"Jr." => "จูเนียร์",
"Sn." => "ซีเนียร์",
-"New Addressbook" => "สร้างสมุดบันทึà¸à¸—ี่อยู่ใหม่",
-"Edit Addressbook" => "à¹à¸à¹‰à¹„ขสมุดบันทึà¸à¸—ี่อยู่",
-"Displayname" => "ชื่อที่ต้องà¸à¸²à¸£à¹ƒà¸«à¹‰à¹à¸ªà¸”ง",
-"Active" => "เปิดใช้",
-"Save" => "บันทึà¸",
-"Submit" => "ส่งข้อมูล",
-"Cancel" => "ยà¸à¹€à¸¥à¸´à¸",
"Import a contacts file" => "นำเข้าไฟล์ข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ",
"Please choose the addressbook" => "à¸à¸£à¸¸à¸“าเลือà¸à¸ªà¸¡à¸¸à¸”บันทึà¸à¸—ี่อยู่",
"create a new addressbook" => "สร้างสมุดบันทึà¸à¸—ี่อยู่ใหม่",
"Name of new addressbook" => "à¸à¸³à¸«à¸™à¸”ชื่อของสมุดที่อยู่ที่สร้างใหม่",
-"Import" => "นำเข้า",
"Importing contacts" => "นำเข้าข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ",
+"Contacts imported successfully" => "ข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อถูà¸à¸™à¸³à¹€à¸‚้าข้อมูลเรียบร้อยà¹à¸¥à¹‰à¸§",
+"Close Dialog" => "ปิดà¸à¸¥à¹ˆà¸­à¸‡à¸‚้อความ",
+"Import Addressbook" => "นำเข้าข้อมูลสมุดบันทึà¸à¸—ี่อยู่",
"Select address book to import to:" => "เลือà¸à¸ªà¸¡à¸¸à¸”บันทึà¸à¸—ี่อยู่ที่ต้องà¸à¸²à¸£à¸™à¸³à¹€à¸‚้า:",
+"Drop a VCF file to import contacts." => "วางไฟล์ VCF ที่ต้องà¸à¸²à¸£à¸™à¸³à¹€à¸‚้าข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ",
"Select from HD" => "เลือà¸à¸ˆà¸²à¸à¸®à¸²à¸£à¹Œà¸”ดิส",
"You have no contacts in your addressbook." => "คุณยังไม่มีข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อใดๆในสมุดบันทึà¸à¸—ี่อยู่ของคุณ",
"Add contact" => "เพิ่มชื่อผู้ติดต่อ",
-"Configure addressbooks" => "à¸à¸³à¸«à¸™à¸”ค่าสมุดบันทึà¸à¸—ี่อยู่",
+"Select Address Books" => "เลือà¸à¸ªà¸¡à¸¸à¸”บันทึà¸à¸—ี่อยู่",
+"Enter name" => "à¸à¸£à¸­à¸à¸Šà¸·à¹ˆà¸­",
+"Enter description" => "à¸à¸£à¸­à¸à¸„ำอธิบาย",
"CardDAV syncing addresses" => "ที่อยู่ที่ใช้เชื่อมข้อมูลà¸à¸±à¸š CardDAV",
"more info" => "ข้อมูลเพิ่มเติม",
"Primary address (Kontact et al)" => "ที่อยู่หลัภ(สำหรับติดต่อ)",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Show CardDav link" => "à¹à¸ªà¸”งลิงà¸à¹Œ CardDav",
+"Show read-only VCF link" => "à¹à¸ªà¸”งลิงà¸à¹Œ VCF สำหรับอ่านเท่านั้น",
+"Share" => "à¹à¸Šà¸£à¹Œ",
+"Download" => "ดาวน์โหลด",
+"Edit" => "à¹à¸à¹‰à¹„ข",
+"New Address Book" => "สร้างสมุดบันทึà¸à¸‚้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อใหม่",
+"Name" => "ชื่อ",
+"Description" => "คำอธิบาย",
+"Save" => "บันทึà¸",
+"Cancel" => "ยà¸à¹€à¸¥à¸´à¸",
+"More..." => "เพิ่มเติม..."
);
diff --git a/apps/contacts/l10n/tr.php b/apps/contacts/l10n/tr.php
index 65e8e34c305..e2a769410f1 100644
--- a/apps/contacts/l10n/tr.php
+++ b/apps/contacts/l10n/tr.php
@@ -1,39 +1,40 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "Adres defteri etkisizleÅŸtirilirken hata oluÅŸtu.",
-"There was an error adding the contact." => "KiÅŸi eklenirken hata oluÅŸtu.",
-"Cannot add empty property." => "Boş özellik eklenemiyor.",
-"At least one of the address fields has to be filled out." => "En az bir adres alanı doldurulmalı.",
-"Trying to add duplicate property: " => "Yinelenen özellik eklenmeye çalışılıyor: ",
-"Error adding contact property." => "Kişi özelliği eklenirken hata oluştu.",
+"id is not set." => "id atanmamış.",
+"Cannot update addressbook with an empty name." => "Adres defterini boş bir isimle güncelleyemezsiniz.",
+"Error updating addressbook." => "Adres defteri güncellenirken hata oluştu.",
"No ID provided" => "ID verilmedi",
"Error setting checksum." => "Ä°mza oluÅŸturulurken hata.",
"No categories selected for deletion." => "Silmek için bir kategori seçilmedi.",
"No address books found." => "Adres defteri bulunamadı.",
"No contacts found." => "Bağlantı bulunamadı.",
+"There was an error adding the contact." => "KiÅŸi eklenirken hata oluÅŸtu.",
+"element name is not set." => "eleman ismi atanmamış.",
+"Could not parse contact: " => "Kişi bilgisi ayrıştırılamadı.",
+"Cannot add empty property." => "Boş özellik eklenemiyor.",
+"At least one of the address fields has to be filled out." => "En az bir adres alanı doldurulmalı.",
+"Trying to add duplicate property: " => "Yinelenen özellik eklenmeye çalışılıyor: ",
+"Information about vCard is incorrect. Please reload the page." => "vCard bilgileri doğru değil. Lütfen sayfayı yenileyin.",
"Missing ID" => "Eksik ID",
"Error parsing VCard for ID: \"" => "ID için VCard ayrıştırılamadı:\"",
-"Cannot add addressbook with an empty name." => "Adres defterini isimsiz ekleyemezsiniz.",
-"Error adding addressbook." => "Adres defteri eklenirken hata oluÅŸtu.",
-"Error activating addressbook." => "Adres defteri etkinleÅŸtirilirken hata oluÅŸtu.",
+"checksum is not set." => "checksum atanmamış.",
+"Information about vCard is incorrect. Please reload the page: " => "vCard hakkındaki bilgi hatalı. Lütfen sayfayı yeniden yükleyin: ",
+"Something went FUBAR. " => "Bir ÅŸey FUBAR gitti.",
"No contact ID was submitted." => "Bağlantı ID'si girilmedi.",
"Error reading contact photo." => "Bağlantı fotoğrafı okunamadı.",
"Error saving temporary file." => "Geçici dosya kaydetme hatası.",
"The loading photo is not valid." => "Yüklenecek fotograf geçerli değil.",
-"id is not set." => "id atanmamış.",
-"Information about vCard is incorrect. Please reload the page." => "vCard bilgileri doğru değil. Lütfen sayfayı yenileyin.",
-"Error deleting contact property." => "Kişi özelliği silinirken hata oluştu.",
"Contact ID is missing." => "Bağlantı ID'si eksik.",
-"Missing contact id." => "Eksik bağlantı id'si.",
"No photo path was submitted." => "FotoÄŸraf girilmedi.",
"File doesn't exist:" => "Dosya mevcut deÄŸil:",
"Error loading image." => "İmaj yükleme hatası.",
-"element name is not set." => "eleman ismi atanmamış.",
-"checksum is not set." => "checksum atanmamış.",
-"Information about vCard is incorrect. Please reload the page: " => "vCard hakkındaki bilgi hatalı. Lütfen sayfayı yeniden yükleyin: ",
-"Something went FUBAR. " => "Bir ÅŸey FUBAR gitti.",
-"Error updating contact property." => "Kişi özelliği güncellenirken hata oluştu.",
-"Cannot update addressbook with an empty name." => "Adres defterini boş bir isimle güncelleyemezsiniz.",
-"Error updating addressbook." => "Adres defteri güncellenirken hata oluştu.",
+"Error getting contact object." => "Bağlantı nesnesini kaydederken hata.",
+"Error getting PHOTO property." => "Resim özelleğini alırken hata oluştu.",
+"Error saving contact." => "Bağlantıyı kaydederken hata",
+"Error resizing image" => "Görüntü yeniden boyutlandırılamadı.",
+"Error cropping image" => "Görüntü kırpılamadı.",
+"Error creating temporary image" => "Geçici resim oluştururken hata oluştu",
+"Error finding image: " => "Resim ararken hata oluÅŸtu:",
"Error uploading contacts to storage." => "Bağlantıları depoya yükleme hatası",
"There is no error, the file uploaded with success" => "Dosya başarıyla yüklendi, hata oluşmadı",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" => "Dosyanın boyutu php.ini dosyasındaki upload_max_filesize limitini aşıyor",
@@ -41,17 +42,29 @@
"The uploaded file was only partially uploaded" => "Dosya kısmen karşıya yüklenebildi",
"No file was uploaded" => "Hiç dosya gönderilmedi",
"Missing a temporary folder" => "Geçici dizin eksik",
+"Couldn't save temporary image: " => "Geçici resmi saklayamadı : ",
+"Couldn't load temporary image: " => "Geçici resmi yükleyemedi :",
+"No file was uploaded. Unknown error" => "Dosya yüklenmedi. Bilinmeyen hata",
"Contacts" => "KiÅŸiler",
-"Drop a VCF file to import contacts." => "Bağlantıları içe aktarmak için bir VCF dosyası bırakın.",
-"Addressbook not found." => "Adres defteri bulunamadı.",
+"Sorry, this functionality has not been implemented yet" => "Üzgünüz, bu özellik henüz tamamlanmadı.",
+"Not implemented" => "Tamamlanmadı.",
+"Couldn't get a valid address." => "Geçerli bir adres alınamadı.",
+"Error" => "Hata",
+"This property has to be non-empty." => "Bu özellik boş bırakılmamalı.",
+"Couldn't serialize elements." => "Öğeler seri hale getiremedi",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' tip argümanı olmadan çağrıldı. Lütfen bugs.owncloud.org a rapor ediniz.",
+"Edit name" => "İsmi düzenle",
+"No files selected for upload." => "Yükleme için dosya seçilmedi.",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "Yüklemeye çalıştığınız dosya sunucudaki dosya yükleme maksimum boyutunu aşmaktadır. ",
+"Select type" => "Tür seç",
+"Result: " => "Sonuç: ",
+" imported, " => " içe aktarıldı, ",
+" failed." => " hatalı.",
"This is not your addressbook." => "Bu sizin adres defteriniz deÄŸil.",
"Contact could not be found." => "Kişi bulunamadı.",
-"Address" => "Adres",
-"Telephone" => "Telefon",
-"Email" => "Eposta",
-"Organization" => "Organizasyon",
"Work" => "Ä°ÅŸ",
"Home" => "Ev",
+"Other" => "DiÄŸer",
"Mobile" => "Mobil",
"Text" => "Metin",
"Voice" => "Ses",
@@ -60,25 +73,49 @@
"Video" => "Video",
"Pager" => "Sayfalayıcı",
"Internet" => "Ä°nternet",
+"Birthday" => "Doğum günü",
+"Business" => "Ä°ÅŸ",
+"Call" => "Çağrı",
+"Clients" => "Müşteriler",
+"Deliverer" => "Dağıtıcı",
+"Holidays" => "Tatiller",
+"Ideas" => "Fikirler",
+"Journey" => "Seyahat",
+"Jubilee" => "Yıl Dönümü",
+"Meeting" => "Toplantı",
+"Personal" => "KiÅŸisel",
+"Projects" => "Projeler",
+"Questions" => "Sorular",
"{name}'s Birthday" => "{name}'nin Doğumgünü",
"Contact" => "KiÅŸi",
"Add Contact" => "KiÅŸi Ekle",
+"Import" => "İçe aktar",
"Addressbooks" => "Adres defterleri",
-"Configure Address Books" => "Adres Defterlerini Yapılandır",
-"New Address Book" => "Yeni Adres Defteri",
-"Import from VCF" => "VCF'den içeri aktar",
-"CardDav Link" => "CardDav Bağlantısı",
-"Download" => "Ä°ndir",
-"Edit" => "Düzenle",
-"Delete" => "Sil",
-"Download contact" => "KiÅŸiyi indir",
-"Delete contact" => "KiÅŸiyi sil",
+"Close" => "Kapat",
+"Keyboard shortcuts" => "Klavye kısayolları",
+"Navigation" => "Dolaşım",
+"Next contact in list" => "Listedeki sonraki kiÅŸi",
+"Previous contact in list" => "Listedeki önceki kişi",
+"Expand/collapse current addressbook" => "Åžuanki adres defterini geniÅŸlet/daralt",
+"Actions" => "Eylemler",
+"Refresh contacts list" => "KiÅŸi listesini tazele",
+"Add new contact" => "Yeni kiÅŸi ekle",
+"Add new addressbook" => "Yeni adres defteri ekle",
+"Delete current contact" => "Åžuanki kiÅŸiyi sil",
"Drop photo to upload" => "Fotoğrafı yüklenmesi için bırakın",
+"Delete current photo" => "Mevcut fotoğrafı sil",
+"Edit current photo" => "Mevcut fotoğrafı düzenle",
+"Upload new photo" => "Yeni fotoğraf yükle",
+"Select photo from ownCloud" => "ownCloud'dan bir fotoğraf seç",
"Format custom, Short name, Full name, Reverse or Reverse with comma" => "Biçin özel, Kısa isim, Tam isim, Ters veya noktalı ters",
"Edit name details" => "İsim detaylarını düzenle",
+"Organization" => "Organizasyon",
+"Delete" => "Sil",
"Nickname" => "Takma ad",
"Enter nickname" => "Takma adı girin",
-"Birthday" => "Doğum günü",
+"Web site" => "Web sitesi",
+"http://www.somesite.com" => "http://www.somesite.com",
+"Go to web site" => "Web sitesine git",
"dd-mm-yyyy" => "gg-aa-yyyy",
"Groups" => "Gruplar",
"Separate groups with commas" => "Grupları birbirinden virgülle ayırın",
@@ -94,24 +131,26 @@
"Edit address details" => "Adres detaylarını düzenle",
"Add notes here." => "Notları buraya ekleyin.",
"Add field" => "Alan ekle",
-"Profile picture" => "Profil resmi",
"Phone" => "Telefon",
+"Email" => "Eposta",
+"Address" => "Adres",
"Note" => "Not",
-"Delete current photo" => "Mevcut fotoğrafı sil",
-"Edit current photo" => "Mevcut fotoğrafı düzenle",
-"Upload new photo" => "Yeni fotoğraf yükle",
-"Select photo from ownCloud" => "ownCloud'dan bir fotoğraf seç",
+"Download contact" => "KiÅŸiyi indir",
+"Delete contact" => "KiÅŸiyi sil",
+"The temporary image has been removed from cache." => "Geçici resim ön bellekten silinmiştir.",
"Edit address" => "Adresi düzenle",
"Type" => "Tür",
"PO Box" => "Posta Kutusu",
+"Street address" => "Sokak adresi",
+"Street and number" => "Sokak ve Numara",
"Extended" => "Uzatılmış",
-"Street" => "Sokak",
+"Apartment number etc." => "Apartman numarası vb.",
"City" => "Åžehir",
"Region" => "Bölge",
+"E.g. state or province" => "Örn. eyalet veya il",
"Zipcode" => "Posta kodu",
+"Postal code" => "Posta kodu",
"Country" => "Ãœlke",
-"Edit categories" => "Kategorileri düzenle",
-"Add" => "Ekle",
"Addressbook" => "Adres defteri",
"Hon. prefixes" => "Kısaltmalar",
"Miss" => "Bayan",
@@ -132,26 +171,29 @@
"Esq." => "Esq.",
"Jr." => "Jr.",
"Sn." => "Sn.",
-"New Addressbook" => "Yeni Adres defteri",
-"Edit Addressbook" => "Adres Defterini Düzenle",
-"Displayname" => "Görünen adı",
-"Active" => "Aktif",
-"Save" => "Kaydet",
-"Submit" => "Gönder",
-"Cancel" => "Ä°ptal",
"Import a contacts file" => "Bağlantı dosyasını içeri aktar",
"Please choose the addressbook" => "Yeni adres defterini seç",
"create a new addressbook" => "Yeni adres defteri oluÅŸtur",
"Name of new addressbook" => "Yeni adres defteri için isim",
-"Import" => "İçe aktar",
"Importing contacts" => "Bağlantıları içe aktar",
+"Contacts imported successfully" => "Bağlantılar başarıyla içe aktarıldı",
+"Close Dialog" => "DiyaloÄŸu kapat",
+"Import Addressbook" => "Adres defterini içeri aktar",
"Select address book to import to:" => "İçe aktarılacak adres defterini seçin:",
+"Drop a VCF file to import contacts." => "Bağlantıları içe aktarmak için bir VCF dosyası bırakın.",
"Select from HD" => "HD'den seç",
"You have no contacts in your addressbook." => "Adres defterinizde hiç bağlantı yok.",
"Add contact" => "Bağlatı ekle",
-"Configure addressbooks" => "Adres defterini yapılandır",
+"Select Address Books" => "Adres deftelerini seçiniz",
+"Enter name" => "Ä°sim giriniz",
+"Enter description" => "Tanım giriniz",
"CardDAV syncing addresses" => "CardDAV adresleri eşzamanlıyor",
"more info" => "daha fazla bilgi",
"Primary address (Kontact et al)" => "Birincil adres (Bağlantı ve arkadaşları)",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Download" => "Ä°ndir",
+"Edit" => "Düzenle",
+"New Address Book" => "Yeni Adres Defteri",
+"Save" => "Kaydet",
+"Cancel" => "Ä°ptal"
);
diff --git a/apps/contacts/l10n/uk.php b/apps/contacts/l10n/uk.php
index 4c27acf543e..dcd9efff344 100644
--- a/apps/contacts/l10n/uk.php
+++ b/apps/contacts/l10n/uk.php
@@ -1,29 +1,24 @@
<?php $TRANSLATIONS = array(
"At least one of the address fields has to be filled out." => "Має бути заповнено щонайменше одне поле.",
-"Error adding addressbook." => "Помилка при додаванні адреÑної книги.",
"This is not your addressbook." => "Це не ваша адреÑна книга.",
-"Address" => "ÐдреÑа",
-"Telephone" => "Телефон",
-"Email" => "Ел.пошта",
-"Organization" => "ОрганізаціÑ",
"Mobile" => "Мобільний",
"Text" => "ТекÑÑ‚",
"Voice" => "ГолоÑ",
"Fax" => "ФакÑ",
"Video" => "Відео",
"Pager" => "Пейджер",
+"Birthday" => "День народженнÑ",
"Add Contact" => "Додати контакт",
-"New Address Book" => "Ðова адреÑна книга",
-"Download" => "Завантажити",
+"Organization" => "ОрганізаціÑ",
"Delete" => "Видалити",
-"Delete contact" => "Видалити контакт",
-"Birthday" => "День народженнÑ",
"Phone" => "Телефон",
+"Email" => "Ел.пошта",
+"Address" => "ÐдреÑа",
+"Delete contact" => "Видалити контакт",
"Extended" => "Розширено",
-"Street" => "ВулицÑ",
"City" => "МіÑто",
"Zipcode" => "Поштовий індекÑ",
"Country" => "Країна",
-"Add" => "Додати",
-"Displayname" => "Відображуване ім'Ñ"
+"Download" => "Завантажити",
+"New Address Book" => "Ðова адреÑна книга"
);
diff --git a/apps/contacts/l10n/vi.php b/apps/contacts/l10n/vi.php
new file mode 100644
index 00000000000..d484fb405ca
--- /dev/null
+++ b/apps/contacts/l10n/vi.php
@@ -0,0 +1,41 @@
+<?php $TRANSLATIONS = array(
+"id is not set." => "id không được thiết lập.",
+"No ID provided" => "Không có ID được cung cấp",
+"No address books found." => "Không tìm thấy sổ địa chỉ.",
+"No contacts found." => "Không tìm thấy danh sách",
+"element name is not set." => "tên phần tử không được thiết lập.",
+"Missing ID" => "Missing ID",
+"Error reading contact photo." => "Lá»—i Ä‘á»c liên lạc hình ảnh.",
+"The loading photo is not valid." => "Các hình ảnh tải không hợp lệ.",
+"File doesn't exist:" => "Tập tin không tồn tại",
+"Error loading image." => "Lỗi khi tải hình ảnh.",
+"Error uploading contacts to storage." => "Lỗi tải lên danh sách địa chỉ để lưu trữ.",
+"There is no error, the file uploaded with success" => "Không có lỗi, các tập tin tải lên thành công",
+"Contacts" => "Liên lạc",
+"Work" => "Công việc",
+"Home" => "Nhà",
+"Mobile" => "Di Ä‘á»™ng",
+"Fax" => "Fax",
+"Video" => "Video",
+"Pager" => "số trang",
+"Birthday" => "Ngày sinh nhật",
+"Contact" => "Danh sách",
+"Add Contact" => "Thêm liên lạc",
+"Addressbooks" => "Sổ địa chỉ",
+"Organization" => "Tổ chức",
+"Delete" => "Xóa",
+"Phone" => "Äiện thoại",
+"Email" => "Email",
+"Address" => "Äịa chỉ",
+"Delete contact" => "Xóa liên lạc",
+"PO Box" => "Hòm thư bưu điện",
+"City" => "Thành phố",
+"Region" => "Vùng/miá»n",
+"Zipcode" => "Mã bưu điện",
+"Country" => "Quốc gia",
+"Addressbook" => "Sổ địa chỉ",
+"Download" => "Tải vá»",
+"Edit" => "Sá»­a",
+"Save" => "LÆ°u",
+"Cancel" => "Hủy"
+);
diff --git a/apps/contacts/l10n/zh_CN.php b/apps/contacts/l10n/zh_CN.php
index dcf9b99bc8b..b3bac7aedfb 100644
--- a/apps/contacts/l10n/zh_CN.php
+++ b/apps/contacts/l10n/zh_CN.php
@@ -1,46 +1,66 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "(å–消)激活地å€ç°¿é”™è¯¯ã€‚",
-"There was an error adding the contact." => "添加è”系人时出错。",
-"Cannot add empty property." => "无法添加空属性。",
-"At least one of the address fields has to be filled out." => "至少需è¦å¡«å†™ä¸€é¡¹åœ°å€ã€‚",
-"Trying to add duplicate property: " => "试图添加é‡å¤å±žæ€§ï¼š ",
-"Error adding contact property." => "添加è”系人属性错误。",
+"id is not set." => "没有设置 id。",
+"Cannot update addressbook with an empty name." => "无法使用一个空å称更新地å€ç°¿",
+"Error updating addressbook." => "更新地å€ç°¿é”™è¯¯",
"No ID provided" => "未æä¾› ID",
"Error setting checksum." => "设置校验值错误。",
"No categories selected for deletion." => "未选中è¦åˆ é™¤çš„分类。",
"No address books found." => "找ä¸åˆ°åœ°å€ç°¿ã€‚",
"No contacts found." => "找ä¸åˆ°è”系人。",
+"There was an error adding the contact." => "添加è”系人时出错。",
+"element name is not set." => "元素å称未设置",
+"Cannot add empty property." => "无法添加空属性。",
+"At least one of the address fields has to be filled out." => "至少需è¦å¡«å†™ä¸€é¡¹åœ°å€ã€‚",
+"Trying to add duplicate property: " => "试图添加é‡å¤å±žæ€§ï¼š ",
+"Information about vCard is incorrect. Please reload the page." => "vCard çš„ä¿¡æ¯ä¸æ­£ç¡®ã€‚请é‡æ–°åŠ è½½é¡µé¢ã€‚",
"Missing ID" => "缺少 ID",
"Error parsing VCard for ID: \"" => "无法解æžå¦‚下IDçš„ VCard:“",
-"Cannot add addressbook with an empty name." => "无法无姓å的地å€ç°¿ã€‚",
-"Error adding addressbook." => "添加地å€ç°¿é”™è¯¯ã€‚",
-"Error activating addressbook." => "激活地å€ç°¿é”™è¯¯ã€‚",
+"checksum is not set." => "未设置校验值。",
+"Information about vCard is incorrect. Please reload the page: " => "vCard ä¿¡æ¯ä¸æ­£ç¡®ã€‚请刷新页é¢: ",
+"Something went FUBAR. " => "有一些信æ¯æ— æ³•è¢«å¤„ç†ã€‚",
"No contact ID was submitted." => "未æ交è”系人 ID。",
"Error reading contact photo." => "读å–è”系人照片错误。",
"Error saving temporary file." => "ä¿å­˜ä¸´æ—¶æ–‡ä»¶é”™è¯¯ã€‚",
"The loading photo is not valid." => "装入的照片ä¸æ­£ç¡®ã€‚",
-"id is not set." => "没有设置 id。",
-"Information about vCard is incorrect. Please reload the page." => "vCard çš„ä¿¡æ¯ä¸æ­£ç¡®ã€‚请é‡æ–°åŠ è½½é¡µé¢ã€‚",
-"Error deleting contact property." => "删除è”系人属性错误。",
"Contact ID is missing." => "缺少è”系人 ID。",
-"Missing contact id." => "缺少è”系人 ID。",
"No photo path was submitted." => "未æ供照片路径。",
"File doesn't exist:" => "文件ä¸å­˜åœ¨:",
"Error loading image." => "加载图片错误。",
-"checksum is not set." => "未设置校验值。",
-"Error updating contact property." => "æ›´æ–°è”系人属性错误。",
-"Error updating addressbook." => "更新地å€ç°¿é”™è¯¯",
+"Error getting contact object." => "获å–è”系人目标时出错。",
+"Error getting PHOTO property." => "获å–照片属性时出错。",
+"Error saving contact." => "ä¿å­˜è”系人时出错。",
+"Error resizing image" => "缩放图åƒæ—¶å‡ºé”™",
+"Error cropping image" => "è£åˆ‡å›¾åƒæ—¶å‡ºé”™",
+"Error creating temporary image" => "创建临时图åƒæ—¶å‡ºé”™",
+"Error finding image: " => "查找图åƒæ—¶å‡ºé”™: ",
+"Error uploading contacts to storage." => "上传è”系人到存储空间时出错",
+"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" => "已上传文件åªä¸Šä¼ äº†éƒ¨åˆ†",
"No file was uploaded" => "没有文件被上传",
"Missing a temporary folder" => "缺少临时目录",
+"Couldn't save temporary image: " => "无法ä¿å­˜ä¸´æ—¶å›¾åƒ: ",
+"Couldn't load temporary image: " => "无法加载临时图åƒ: ",
+"No file was uploaded. Unknown error" => "没有文件被上传。未知错误",
"Contacts" => "è”系人",
-"Addressbook not found." => "未找到地å€ç°¿ã€‚",
+"Sorry, this functionality has not been implemented yet" => "抱歉,这个功能暂时还没有被实现",
+"Not implemented" => "未实现",
+"Couldn't get a valid address." => "无法获å–一个åˆæ³•çš„地å€ã€‚",
+"Error" => "错误",
+"This property has to be non-empty." => "这个属性必须是éžç©ºçš„",
+"Couldn't serialize elements." => "无法åºåˆ—化元素",
+"'deleteProperty' called without type argument. Please report at bugs.owncloud.org" => "'deleteProperty' 调用时没有类型声明。请到 bugs.owncloud.org 汇报错误",
+"Edit name" => "编辑å称",
+"No files selected for upload." => "没有选择文件以上传",
+"The file you are trying to upload exceed the maximum size for file uploads on this server." => "您试图上传的文件超出了该æœåŠ¡å™¨çš„最大文件é™åˆ¶",
+"Select type" => "选择类型",
+"Result: " => "结果: ",
+" imported, " => " 已导入, ",
+" failed." => " 失败。",
"This is not your addressbook." => "è¿™ä¸æ˜¯æ‚¨çš„地å€ç°¿ã€‚",
"Contact could not be found." => "无法找到è”系人。",
-"Address" => "地å€",
-"Telephone" => "电è¯",
-"Email" => "电å­é‚®ä»¶",
-"Organization" => "组织",
"Work" => "工作",
"Home" => "家庭",
"Mobile" => "移动电è¯",
@@ -51,24 +71,24 @@
"Video" => "视频",
"Pager" => "传呼机",
"Internet" => "互è”网",
+"Birthday" => "生日",
"{name}'s Birthday" => "{name} 的生日",
"Contact" => "è”系人",
"Add Contact" => "添加è”系人",
+"Import" => "导入",
"Addressbooks" => "地å€ç°¿",
-"Configure Address Books" => "é…置地å€ç°¿",
-"New Address Book" => "新建地å€ç°¿",
-"Import from VCF" => "从 VCF 导入",
-"CardDav Link" => "CardDav 链接",
-"Download" => "下载",
-"Edit" => "编辑",
-"Delete" => "删除",
-"Download contact" => "下载è”系人",
-"Delete contact" => "删除è”系人",
+"Close" => "关闭",
"Drop photo to upload" => "拖拽图片进行上传",
+"Delete current photo" => "删除当å‰ç…§ç‰‡",
+"Edit current photo" => "编辑当å‰ç…§ç‰‡",
+"Upload new photo" => "上传新照片",
+"Select photo from ownCloud" => "从 ownCloud 选择照片",
+"Format custom, Short name, Full name, Reverse or Reverse with comma" => "自定义格å¼ï¼Œç®€ç§°ï¼Œå…¨å,姓在å‰ï¼Œå§“在å‰å¹¶ç”¨é€—å·åˆ†å‰²",
"Edit name details" => "编辑å称详情",
+"Organization" => "组织",
+"Delete" => "删除",
"Nickname" => "昵称",
"Enter nickname" => "输入昵称",
-"Birthday" => "生日",
"dd-mm-yyyy" => "yyyy-mm-dd",
"Groups" => "分组",
"Separate groups with commas" => "用逗å·éš”开分组",
@@ -84,44 +104,55 @@
"Edit address details" => "编辑地å€ç»†èŠ‚。",
"Add notes here." => "添加注释。",
"Add field" => "添加字段",
-"Profile picture" => "è”系人图片",
"Phone" => "电è¯",
+"Email" => "电å­é‚®ä»¶",
+"Address" => "地å€",
"Note" => "注释",
-"Delete current photo" => "删除当å‰ç…§ç‰‡",
-"Edit current photo" => "编辑当å‰ç…§ç‰‡",
-"Upload new photo" => "上传新照片",
-"Select photo from ownCloud" => "从 ownCloud 选择照片",
+"Download contact" => "下载è”系人",
+"Delete contact" => "删除è”系人",
+"The temporary image has been removed from cache." => "临时图åƒæ–‡ä»¶å·²ä»Žç¼“存中删除",
"Edit address" => "编辑地å€",
"Type" => "类型",
"PO Box" => "邮箱",
"Extended" => "扩展",
-"Street" => "è¡—é“",
"City" => "城市",
"Region" => "地区",
"Zipcode" => "邮编",
"Country" => "国家",
-"Edit categories" => "编辑分类",
-"Add" => "添加",
"Addressbook" => "地å€ç°¿",
+"Hon. prefixes" => "å誉字首",
+"Miss" => "å°å§",
+"Ms" => "女士",
+"Mr" => "先生",
+"Sir" => "先生",
+"Mrs" => "夫人",
+"Dr" => "åšå£«",
"Given name" => "å",
+"Additional names" => "其他å称",
"Family name" => "姓",
-"New Addressbook" => "新建地å€ç°¿",
-"Edit Addressbook" => "编辑地å€ç°¿",
-"Displayname" => "显示å称",
-"Active" => "激活",
-"Save" => "ä¿å­˜",
-"Submit" => "æ交",
-"Cancel" => "å–消",
+"Hon. suffixes" => "å誉åŽç¼€",
+"J.D." => "法律åšå£«",
+"M.D." => "医学åšå£«",
+"D.O." => "骨科医学åšå£«",
+"D.C." => "教育学åšå£«",
+"Ph.D." => "哲学åšå£«",
+"Esq." => "先生",
+"Jr." => "å°",
+"Sn." => "è€",
"Import a contacts file" => "导入è”系人文件",
"Please choose the addressbook" => "请选择地å€ç°¿",
"create a new addressbook" => "创建新地å€ç°¿",
"Name of new addressbook" => "新地å€ç°¿å称",
-"Import" => "导入",
"Importing contacts" => "导入è”系人",
+"You have no contacts in your addressbook." => "您的地å€ç°¿ä¸­æ²¡æœ‰è”系人。",
"Add contact" => "添加è”系人",
-"Configure addressbooks" => "é…置地å€ç°¿",
"CardDAV syncing addresses" => "CardDAV åŒæ­¥åœ°å€",
"more info" => "更多信æ¯",
"Primary address (Kontact et al)" => "é¦–é€‰åœ°å€ (Kontact ç­‰)",
-"iOS/OS X" => "iOS/OS X"
+"iOS/OS X" => "iOS/OS X",
+"Download" => "下载",
+"Edit" => "编辑",
+"New Address Book" => "新建地å€ç°¿",
+"Save" => "ä¿å­˜",
+"Cancel" => "å–消"
);
diff --git a/apps/contacts/l10n/zh_TW.php b/apps/contacts/l10n/zh_TW.php
index d4c2efc47aa..0d007ef9c82 100644
--- a/apps/contacts/l10n/zh_TW.php
+++ b/apps/contacts/l10n/zh_TW.php
@@ -1,27 +1,21 @@
<?php $TRANSLATIONS = array(
"Error (de)activating addressbook." => "在啟用或關閉電話簿時發生錯誤",
+"Error updating addressbook." => "電話簿更新中發生錯誤",
+"No ID provided" => "未æä¾› ID",
+"No contacts found." => "沒有找到è¯çµ¡äºº",
"There was an error adding the contact." => "添加通訊錄發生錯誤",
"Cannot add empty property." => "ä¸å¯æ·»åŠ ç©ºç™½å…§å®¹",
"At least one of the address fields has to be filled out." => "至少必須填寫一欄地å€",
"Error adding contact property." => "添加通訊錄內容中發生錯誤",
"No ID provided" => "未æä¾› ID",
-"No contacts found." => "沒有找到è¯çµ¡äºº",
-"Missing ID" => "éºå¤±ID",
"Error adding addressbook." => "添加電話簿中發生錯誤",
"Error activating addressbook." => "啟用電話簿中發生錯誤",
"Information about vCard is incorrect. Please reload the page." => "有關 vCard 的資訊ä¸æ­£ç¢ºï¼Œè«‹é‡æ–°è¼‰å…¥æ­¤é ã€‚",
-"Error deleting contact property." => "刪除通訊錄內容中發生錯誤",
-"Error updating contact property." => "更新通訊錄內容中發生錯誤",
-"Error updating addressbook." => "電話簿更新中發生錯誤",
+"Missing ID" => "éºå¤±ID",
"No file was uploaded" => "沒有已上傳的檔案",
"Contacts" => "通訊錄",
-"Addressbook not found." => "找ä¸åˆ°é€šè¨ŠéŒ„",
"This is not your addressbook." => "這ä¸æ˜¯ä½ çš„電話簿",
"Contact could not be found." => "通訊錄未發ç¾",
-"Address" => "地å€",
-"Telephone" => "電話",
-"Email" => "é›»å­éƒµä»¶",
-"Organization" => "組織",
"Work" => "å…¬å¸",
"Home" => "ä½å®…",
"Mobile" => "行動電話",
@@ -32,23 +26,16 @@
"Video" => "影片",
"Pager" => "呼å«å™¨",
"Internet" => "網際網路",
+"Birthday" => "生日",
"{name}'s Birthday" => "{name}的生日",
"Contact" => "通訊錄",
"Add Contact" => "添加通訊錄",
"Addressbooks" => "電話簿",
-"Configure Address Books" => "設定通訊錄",
-"New Address Book" => "新電話簿",
-"Import from VCF" => "從VCF匯入",
-"CardDav Link" => "CardDav è¯çµ",
-"Download" => "下載",
-"Edit" => "編輯",
-"Delete" => "刪除",
-"Download contact" => "下載通訊錄",
-"Delete contact" => "刪除通訊錄",
"Edit name details" => "編輯姓å詳細資訊",
+"Organization" => "組織",
+"Delete" => "刪除",
"Nickname" => "綽號",
"Enter nickname" => "輸入綽號",
-"Birthday" => "生日",
"dd-mm-yyyy" => "dd-mm-yyyy",
"Groups" => "群組",
"Separate groups with commas" => "用逗號分隔群組",
@@ -63,18 +50,19 @@
"Edit address details" => "é›»å­éƒµä»¶ä½å€è©³ç´°è³‡è¨Š",
"Add notes here." => "在這裡新增註解",
"Add field" => "新增欄ä½",
-"Profile picture" => "個人資料照片",
"Phone" => "電話",
+"Email" => "é›»å­éƒµä»¶",
+"Address" => "地å€",
"Note" => "註解",
+"Download contact" => "下載通訊錄",
+"Delete contact" => "刪除通訊錄",
"Type" => "é¡žåž‹",
"PO Box" => "通訊地å€",
"Extended" => "分機",
-"Street" => "è¡—é“",
"City" => "城市",
"Region" => "地å€",
"Zipcode" => "郵éžå€è™Ÿ",
"Country" => "國家",
-"Add" => "添加",
"Addressbook" => "電話簿",
"Mr" => "先生",
"Sir" => "先生",
@@ -83,11 +71,9 @@
"Given name" => "給定å(å)",
"Additional names" => "é¡å¤–å",
"Family name" => "家æ—å(姓)",
-"New Addressbook" => "新電話簿",
-"Edit Addressbook" => "編輯電話簿",
-"Displayname" => "顯示å稱",
-"Active" => "作用中",
+"Download" => "下載",
+"Edit" => "編輯",
+"New Address Book" => "新電話簿",
"Save" => "儲存",
-"Submit" => "æ出",
"Cancel" => "å–消"
);
diff --git a/apps/contacts/lib/addressbook.php b/apps/contacts/lib/addressbook.php
index 974ecb4047d..b487260d327 100644
--- a/apps/contacts/lib/addressbook.php
+++ b/apps/contacts/lib/addressbook.php
@@ -37,25 +37,68 @@
/**
* This class manages our addressbooks.
*/
-class OC_Contacts_Addressbook{
+class OC_Contacts_Addressbook {
/**
* @brief Returns the list of addressbooks for a specific user.
* @param string $uid
- * @return array
+ * @param boolean $active Only return addressbooks with this $active state, default(=false) is don't care
+ * @return array or false.
*/
- public static function all($uid){
- $stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*contacts_addressbooks` WHERE `userid` = ? ORDER BY `displayname`' );
- $result = $stmt->execute(array($uid));
+ public static function all($uid, $active=false) {
+ $values = array($uid);
+ $active_where = '';
+ if ($active) {
+ $active_where = ' AND `active` = ?';
+ $values[] = 1;
+ }
+ try {
+ $stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*contacts_addressbooks` WHERE `userid` = ? ' . $active_where . ' ORDER BY `displayname`' );
+ $result = $stmt->execute($values);
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.' exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.' uid: '.$uid, OCP\Util::DEBUG);
+ return false;
+ }
$addressbooks = array();
- while( $row = $result->fetchRow()){
+ while( $row = $result->fetchRow()) {
$addressbooks[] = $row;
}
-
+ $addressbooks = array_merge($addressbooks, OCP\Share::getItemsSharedWith('addressbook', OC_Share_Backend_Addressbook::FORMAT_ADDRESSBOOKS));
+ if(!$active && !count($addressbooks)) {
+ $id = self::addDefault($uid);
+ return array(self::find($id),);
+ }
return $addressbooks;
}
/**
+ * @brief Get active addressbook IDs for a user.
+ * @param integer $uid User id. If null current user will be used.
+ * @return array
+ */
+ public static function activeIds($uid = null) {
+ if(is_null($uid)) {
+ $uid = OCP\USER::getUser();
+ }
+ $activeaddressbooks = self::all($uid, true);
+ $ids = array();
+ foreach($activeaddressbooks as $addressbook) {
+ $ids[] = $addressbook['id'];
+ }
+ return $ids;
+ }
+
+ /**
+ * @brief Returns the list of active addressbooks for a specific user.
+ * @param string $uid
+ * @return array
+ */
+ public static function active($uid) {
+ return self::all($uid, true);
+ }
+
+ /**
* @brief Returns the list of addressbooks for a principal (DAV term of user)
* @param string $principaluri
* @return array
@@ -68,9 +111,9 @@ class OC_Contacts_Addressbook{
/**
* @brief Gets the data of one address book
* @param integer $id
- * @return associative array
+ * @return associative array or false.
*/
- public static function find($id){
+ public static function find($id) {
try {
$stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*contacts_addressbooks` WHERE `id` = ?' );
$result = $stmt->execute(array($id));
@@ -80,6 +123,23 @@ class OC_Contacts_Addressbook{
OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', id: '.$id, OCP\Util::DEBUG);
return false;
}
+
+ return $result->fetchRow();
+ }
+
+ /**
+ * @brief Adds default address book
+ * @return $id ID of the newly created addressbook or false on error.
+ */
+ public static function addDefault($uid = null) {
+ if(is_null($uid)) {
+ $uid = OCP\USER::getUser();
+ }
+ $id = self::add($uid, 'Contacts', 'Default Address Book');
+ if($id !== false) {
+ self::setActive($id, true);
+ }
+ return $id;
}
/**
@@ -89,17 +149,29 @@ class OC_Contacts_Addressbook{
* @param string $description
* @return insertid
*/
- public static function add($userid,$name,$description=''){
- $all = self::all($userid);
+ public static function add($uid,$name,$description='') {
+ try {
+ $stmt = OCP\DB::prepare( 'SELECT `uri` FROM `*PREFIX*contacts_addressbooks` WHERE `userid` = ? ' );
+ $result = $stmt->execute(array($uid));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.' exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.' uid: '.$uid, OCP\Util::DEBUG);
+ return false;
+ }
$uris = array();
- foreach($all as $i){
- $uris[] = $i['uri'];
+ while($row = $result->fetchRow()){
+ $uris[] = $row['uri'];
}
$uri = self::createURI($name, $uris );
-
- $stmt = OCP\DB::prepare( 'INSERT INTO `*PREFIX*contacts_addressbooks` (`userid`,`displayname`,`uri`,`description`,`ctag`) VALUES(?,?,?,?,?)' );
- $result = $stmt->execute(array($userid,$name,$uri,$description,1));
+ try {
+ $stmt = OCP\DB::prepare( 'INSERT INTO `*PREFIX*contacts_addressbooks` (`userid`,`displayname`,`uri`,`description`,`ctag`) VALUES(?,?,?,?,?)' );
+ $result = $stmt->execute(array($uid,$name,$uri,$description,1));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', uid: '.$uid, OCP\Util::DEBUG);
+ return false;
+ }
return OCP\DB::insertid('*PREFIX*contacts_addressbooks');
}
@@ -110,13 +182,20 @@ class OC_Contacts_Addressbook{
* @param string $uri
* @param string $name
* @param string $description
- * @return insertid
+ * @return insertid or false
*/
- public static function addFromDAVData($principaluri,$uri,$name,$description){
- $userid = self::extractUserID($principaluri);
+ public static function addFromDAVData($principaluri,$uri,$name,$description) {
+ $uid = self::extractUserID($principaluri);
- $stmt = OCP\DB::prepare( 'INSERT INTO `*PREFIX*contacts_addressbooks` (`userid`,`displayname`,`uri`,`description`,`ctag`) VALUES(?,?,?,?,?)' );
- $result = $stmt->execute(array($userid,$name,$uri,$description,1));
+ try {
+ $stmt = OCP\DB::prepare('INSERT INTO `*PREFIX*contacts_addressbooks` (`userid`,`displayname`,`uri`,`description`,`ctag`) VALUES(?,?,?,?,?)');
+ $result = $stmt->execute(array($uid,$name,$uri,$description,1));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', uid: '.$uid, OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', uri: '.$uri, OCP\Util::DEBUG);
+ return false;
+ }
return OCP\DB::insertid('*PREFIX*contacts_addressbooks');
}
@@ -128,134 +207,51 @@ class OC_Contacts_Addressbook{
* @param string $description
* @return boolean
*/
- public static function edit($id,$name,$description){
+ public static function edit($id,$name,$description) {
// Need these ones for checking uri
$addressbook = self::find($id);
-
- if(is_null($name)){
- $name = $addressbook['name'];
- }
- if(is_null($description)){
- $description = $addressbook['description'];
- }
-
- $stmt = OCP\DB::prepare( 'UPDATE `*PREFIX*contacts_addressbooks` SET `displayname`=?,`description`=?, `ctag`=`ctag`+1 WHERE `id`=?' );
- $result = $stmt->execute(array($name,$description,$id));
-
- return true;
- }
-
- public static function cleanArray($array, $remove_null_number = true){
- $new_array = array();
-
- $null_exceptions = array();
-
- foreach ($array as $key => $value){
- $value = trim($value);
-
- if($remove_null_number){
- $null_exceptions[] = '0';
- }
-
- if(!in_array($value, $null_exceptions) && $value != "") {
- $new_array[] = $value;
+ if ($addressbook['userid'] != OCP\User::getUser()) {
+ $sharedAddressbook = OCP\Share::getItemSharedWithBySource('addressbook', $id);
+ if (!$sharedAddressbook || !($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_UPDATE)) {
+ return false;
}
}
- return $new_array;
- }
-
- /**
- * @brief Get active addressbooks for a user.
- * @param integer $uid User id. If null current user will be used.
- * @return array
- */
- public static function activeIds($uid = null){
- if(is_null($uid)){
- $uid = OCP\USER::getUser();
- }
- $prefbooks = OCP\Config::getUserValue($uid,'contacts','openaddressbooks',null);
- $prefbooks = explode(';',$prefbooks);
- for ($i = 0; $i < count($prefbooks); $i++) {
- if(!$prefbooks[$i] || !self::find($prefbooks[$i])) {
- unset($prefbooks[$i]);
- }
+ if(is_null($name)) {
+ $name = $addressbook['name'];
}
- if(!$prefbooks){
- OCP\Util::writeLog('contacts','OC_Contacts_Addressbook:activeIds:, No active addressbooks',OCP\Util::DEBUG);
- $addressbooks = OC_Contacts_Addressbook::all($uid);
- if(count($addressbooks) == 0){
- OCP\Util::writeLog('contacts','OC_Contacts_Addressbook:activeIds:, No addressbooks',OCP\Util::DEBUG);
- $id = self::add($uid,'default','Default Address Book');
- OCP\Util::writeLog('contacts','OC_Contacts_Addressbook:activeIds:, Created addressbook: '.$id,OCP\Util::DEBUG);
- self::setActive($id, true);
- $addressbooks = OC_Contacts_Addressbook::all($uid);
- }
- $prefbooks[] = $addressbooks[0]['id'];
- OCP\Config::setUserValue($uid,'contacts','openaddressbooks',implode(';',$prefbooks));
+ if(is_null($description)) {
+ $description = $addressbook['description'];
}
- return $prefbooks;
- }
- /**
- * @brief Returns the list of active addressbooks for a specific user.
- * @param string $uid
- * @return array
- */
- public static function active($uid){
- $active = self::activeIds($uid);
- $addressbooks = array();
- if(!$active) {
- return $addressbooks;
- }
- $ids_sql = join(',', array_fill(0, count($active), '?'));
- $prep = 'SELECT * FROM `*PREFIX*contacts_addressbooks` WHERE `id` IN ('.$ids_sql.') ORDER BY `displayname`';
try {
- $stmt = OCP\DB::prepare( $prep );
- $result = $stmt->execute($active);
- while( $row = $result->fetchRow()){
- $addressbooks[] = $row;
- }
+ $stmt = OCP\DB::prepare('UPDATE `*PREFIX*contacts_addressbooks` SET `displayname`=?,`description`=?, `ctag`=`ctag`+1 WHERE `id`=?');
+ $result = $stmt->execute(array($name,$description,$id));
} catch(Exception $e) {
- OCP\Util::writeLog('contacts','OC_Contacts_Addressbook:active:, exception: '.$e->getMessage(),OCP\Util::DEBUG);
- OCP\Util::writeLog('contacts','OC_Contacts_Addressbook:active, ids: '.join(',', $active),OCP\Util::DEBUG);
- OCP\Util::writeLog('contacts','OC_Contacts_Addressbook::active, SQL:'.$prep,OCP\Util::DEBUG);
- return array();
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', id: '.$id, OCP\Util::DEBUG);
+ return false;
}
- return $addressbooks;
+ return true;
}
/**
* @brief Activates an addressbook
* @param integer $id
- * @param integer $name
+ * @param boolean $active
* @return boolean
*/
- public static function setActive($id,$active=true){
- // Need these ones for checking uri
- //$addressbook = self::find($id);
-
- if(is_null($id)){
- $id = 0;
- }
-
- $openaddressbooks = self::activeIds();
- if($active) {
- if(!in_array($id, $openaddressbooks)) {
- $openaddressbooks[] = $id;
- }
- } else {
- if(in_array($id, $openaddressbooks)) {
- unset($openaddressbooks[array_search($id, $openaddressbooks)]);
- }
+ public static function setActive($id,$active) {
+ $sql = 'UPDATE `*PREFIX*contacts_addressbooks` SET `active` = ? WHERE `id` = ?';
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', id: '.$id.', active: '.intval($active), OCP\Util::ERROR);
+ try {
+ $stmt = OCP\DB::prepare($sql);
+ $stmt->execute(array(intval($active), $id));
+ return true;
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', exception for '.$id.': '.$e->getMessage(), OCP\Util::ERROR);
+ return false;
}
- // NOTE: Ugly hack...
- $openaddressbooks = self::cleanArray($openaddressbooks, false);
- sort($openaddressbooks, SORT_NUMERIC);
- // FIXME: I alway end up with a ';' prepending when imploding the array..?
- OCP\Config::setUserValue(OCP\USER::getUser(),'contacts','openaddressbooks',implode(';', $openaddressbooks));
-
- return true;
}
/**
@@ -263,9 +259,16 @@ class OC_Contacts_Addressbook{
* @param integer $id ID of the address book.
* @return boolean
*/
- public static function isActive($id){
- //OCP\Util::writeLog('contacts','OC_Contacts_Addressbook::isActive('.$id.'):'.in_array($id, self::activeIds()), OCP\Util::DEBUG);
- return in_array($id, self::activeIds());
+ public static function isActive($id) {
+ $sql = 'SELECT `active` FROM `*PREFIX*contacts_addressbooks` WHERE `id` = ?';
+ try {
+ $stmt = OCP\DB::prepare( $sql );
+ $result = $stmt->execute(array($id));
+ $row = $result->fetchRow();
+ return (bool)$row['active'];
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ }
}
/**
@@ -273,11 +276,22 @@ class OC_Contacts_Addressbook{
* @param integer $id
* @return boolean
*/
- public static function delete($id){
- // FIXME: There's no error checking at all.
+ public static function delete($id) {
+ $addressbook = self::find($id);
+ if ($addressbook['userid'] != OCP\User::getUser()) {
+ $sharedAddressbook = OCP\Share::getItemSharedWithBySource('addressbook', $id);
+ if (!$sharedAddressbook || !($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_DELETE)) {
+ return false;
+ }
+ }
self::setActive($id, false);
- $stmt = OCP\DB::prepare( 'DELETE FROM `*PREFIX*contacts_addressbooks` WHERE `id` = ?' );
- $stmt->execute(array($id));
+ try {
+ $stmt = OCP\DB::prepare( 'DELETE FROM `*PREFIX*contacts_addressbooks` WHERE `id` = ?' );
+ $stmt->execute(array($id));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __CLASS__.'::'.__METHOD__.', exception for '.$id.': '.$e->getMessage(), OCP\Util::ERROR);
+ return false;
+ }
$cards = OC_Contacts_VCard::all($id);
foreach($cards as $card){
@@ -292,7 +306,7 @@ class OC_Contacts_Addressbook{
* @param integer $id
* @return boolean
*/
- public static function touch($id){
+ public static function touch($id) {
$stmt = OCP\DB::prepare( 'UPDATE `*PREFIX*contacts_addressbooks` SET `ctag` = `ctag` + 1 WHERE `id` = ?' );
$stmt->execute(array($id));
@@ -305,11 +319,11 @@ class OC_Contacts_Addressbook{
* @param array $existing existing addressbook URIs
* @return string new name
*/
- public static function createURI($name,$existing){
- $name = strtolower($name);
+ public static function createURI($name,$existing) {
+ $name = str_replace(' ', '_', strtolower($name));
$newname = $name;
$i = 1;
- while(in_array($newname,$existing)){
+ while(in_array($newname, $existing)) {
$newname = $name.$i;
$i = $i + 1;
}
@@ -320,8 +334,8 @@ class OC_Contacts_Addressbook{
* @brief gets the userid from a principal path
* @return string
*/
- public static function extractUserID($principaluri){
- list($prefix,$userid) = Sabre_DAV_URLUtil::splitPath($principaluri);
+ public static function extractUserID($principaluri) {
+ list($prefix, $userid) = Sabre_DAV_URLUtil::splitPath($principaluri);
return $userid;
}
}
diff --git a/apps/contacts/lib/app.php b/apps/contacts/lib/app.php
index 29428763d60..e8e1937404f 100644
--- a/apps/contacts/lib/app.php
+++ b/apps/contacts/lib/app.php
@@ -10,7 +10,6 @@
* This class manages our app actions
*/
OC_Contacts_App::$l10n = OC_L10N::get('contacts');
-OC_Contacts_App::$categories = new OC_VCategories('contacts');
class OC_Contacts_App {
/*
* @brief language object for calendar app
@@ -23,17 +22,39 @@ class OC_Contacts_App {
public static $categories = null;
public static function getAddressbook($id) {
+ // TODO: Throw an exception instead of returning json.
$addressbook = OC_Contacts_Addressbook::find( $id );
- if( $addressbook === false || $addressbook['userid'] != OCP\USER::getUser()) {
+ if($addressbook === false || $addressbook['userid'] != OCP\USER::getUser()) {
if ($addressbook === false) {
- OCP\Util::writeLog('contacts', 'Addressbook not found: '. $id, OCP\Util::ERROR);
- OCP\JSON::error(array('data' => array( 'message' => self::$l10n->t('Addressbook not found.'))));
- }
- else {
- OCP\Util::writeLog('contacts', 'Addressbook('.$id.') is not from '.OCP\USER::getUser(), OCP\Util::ERROR);
- OCP\JSON::error(array('data' => array( 'message' => self::$l10n->t('This is not your addressbook.'))));
+ OCP\Util::writeLog('contacts',
+ 'Addressbook not found: '. $id,
+ OCP\Util::ERROR);
+ //throw new Exception('Addressbook not found: '. $id);
+ OCP\JSON::error(
+ array(
+ 'data' => array(
+ 'message' => self::$l10n->t('Addressbook not found: ' . $id)
+ )
+ )
+ );
+ } else {
+ $sharedAddressbook = OCP\Share::getItemSharedWithBySource('addressbook', $id, OC_Share_Backend_Addressbook::FORMAT_ADDRESSBOOKS);
+ if ($sharedAddressbook) {
+ return $sharedAddressbook;
+ } else {
+ OCP\Util::writeLog('contacts',
+ 'Addressbook('.$id.') is not from '.OCP\USER::getUser(),
+ OCP\Util::ERROR);
+ //throw new Exception('This is not your addressbook.');
+ OCP\JSON::error(
+ array(
+ 'data' => array(
+ 'message' => self::$l10n->t('This is not your addressbook.')
+ )
+ )
+ );
+ }
}
- exit();
}
return $addressbook;
}
@@ -41,8 +62,17 @@ class OC_Contacts_App {
public static function getContactObject($id) {
$card = OC_Contacts_VCard::find( $id );
if( $card === false ) {
- OCP\Util::writeLog('contacts', 'Contact could not be found: '.$id, OCP\Util::ERROR);
- OCP\JSON::error(array('data' => array( 'message' => self::$l10n->t('Contact could not be found.').' '.$id)));
+ OCP\Util::writeLog('contacts',
+ 'Contact could not be found: '.$id,
+ OCP\Util::ERROR);
+ OCP\JSON::error(
+ array(
+ 'data' => array(
+ 'message' => self::$l10n->t('Contact could not be found.')
+ .' '.print_r($id, true)
+ )
+ )
+ );
exit();
}
@@ -58,22 +88,6 @@ class OC_Contacts_App {
$card = self::getContactObject( $id );
$vcard = OC_VObject::parse($card['carddata']);
- // Try to fix cards with missing 'N' field from pre ownCloud 4. Hot damn, this is ugly...
- if(!is_null($vcard) && !$vcard->__isset('N')) {
- $version = OCP\App::getAppVersion('contacts');
- if($version >= 5) {
- OCP\Util::writeLog('contacts','OC_Contacts_App::getContactVCard. Deprecated check for missing N field', OCP\Util::DEBUG);
- }
- OCP\Util::writeLog('contacts','getContactVCard, Missing N field', OCP\Util::DEBUG);
- if($vcard->__isset('FN')) {
- OCP\Util::writeLog('contacts','getContactVCard, found FN field: '.$vcard->__get('FN'), OCP\Util::DEBUG);
- $n = implode(';', array_reverse(array_slice(explode(' ', $vcard->__get('FN')), 0, 2))).';;;';
- $vcard->setString('N', $n);
- OC_Contacts_VCard::edit( $id, $vcard);
- } else { // Else just add an empty 'N' field :-P
- $vcard->setString('N', 'Unknown;Name;;;');
- }
- }
if (!is_null($vcard) && !isset($vcard->REV)) {
$rev = new DateTime('@'.$card['lastmodified']);
$vcard->setString('REV', $rev->format(DateTime::W3C));
@@ -95,14 +109,77 @@ class OC_Contacts_App {
/**
* @return array of vcard prop => label
*/
- public static function getAddPropertyOptions() {
+ public static function getIMOptions($im = null) {
$l10n = self::$l10n;
- return array(
- 'ADR' => $l10n->t('Address'),
- 'TEL' => $l10n->t('Telephone'),
- 'EMAIL' => $l10n->t('Email'),
- 'ORG' => $l10n->t('Organization'),
- );
+ $ims = array(
+ 'jabber' => array(
+ 'displayname' => (string)$l10n->t('Jabber'),
+ 'xname' => 'X-JABBER',
+ 'protocol' => 'xmpp',
+ ),
+ 'aim' => array(
+ 'displayname' => (string)$l10n->t('AIM'),
+ 'xname' => 'X-AIM',
+ 'protocol' => 'aim',
+ ),
+ 'msn' => array(
+ 'displayname' => (string)$l10n->t('MSN'),
+ 'xname' => 'X-MSN',
+ 'protocol' => 'msn',
+ ),
+ 'twitter' => array(
+ 'displayname' => (string)$l10n->t('Twitter'),
+ 'xname' => 'X-TWITTER',
+ 'protocol' => null,
+ ),
+ 'googletalk' => array(
+ 'displayname' => (string)$l10n->t('GoogleTalk'),
+ 'xname' => null,
+ 'protocol' => 'xmpp',
+ ),
+ 'facebook' => array(
+ 'displayname' => (string)$l10n->t('Facebook'),
+ 'xname' => null,
+ 'protocol' => 'xmpp',
+ ),
+ 'xmpp' => array(
+ 'displayname' => (string)$l10n->t('XMPP'),
+ 'xname' => null,
+ 'protocol' => 'xmpp',
+ ),
+ 'icq' => array(
+ 'displayname' => (string)$l10n->t('ICQ'),
+ 'xname' => 'X-ICQ',
+ 'protocol' => 'icq',
+ ),
+ 'yahoo' => array(
+ 'displayname' => (string)$l10n->t('Yahoo'),
+ 'xname' => 'X-YAHOO',
+ 'protocol' => 'ymsgr',
+ ),
+ 'skype' => array(
+ 'displayname' => (string)$l10n->t('Skype'),
+ 'xname' => 'X-SKYPE',
+ 'protocol' => 'skype',
+ ),
+ 'qq' => array(
+ 'displayname' => (string)$l10n->t('QQ'),
+ 'xname' => 'X-SKYPE',
+ 'protocol' => 'x-apple',
+ ),
+ 'gadugadu' => array(
+ 'displayname' => (string)$l10n->t('GaduGadu'),
+ 'xname' => 'X-SKYPE',
+ 'protocol' => 'x-apple',
+ ),
+ );
+ if(is_null($im)) {
+ return $ims;
+ } else {
+ $ims['ymsgr'] = $ims['yahoo'];
+ $ims['gtalk'] = $ims['googletalk'];
+ return isset($ims[$im]) ? $ims[$im] : null;
+ }
}
/**
@@ -111,54 +188,83 @@ class OC_Contacts_App {
public static function getTypesOfProperty($prop) {
$l = self::$l10n;
switch($prop) {
- case 'ADR':
- return array(
- 'WORK' => $l->t('Work'),
- 'HOME' => $l->t('Home'),
- );
- case 'TEL':
- return array(
- 'HOME' => $l->t('Home'),
- 'CELL' => $l->t('Mobile'),
- 'WORK' => $l->t('Work'),
- 'TEXT' => $l->t('Text'),
- 'VOICE' => $l->t('Voice'),
- 'MSG' => $l->t('Message'),
- 'FAX' => $l->t('Fax'),
- 'VIDEO' => $l->t('Video'),
- 'PAGER' => $l->t('Pager'),
- );
- case 'EMAIL':
- return array(
- 'WORK' => $l->t('Work'),
- 'HOME' => $l->t('Home'),
- 'INTERNET' => $l->t('Internet'),
- );
+ case 'ADR':
+ case 'IMPP':
+ return array(
+ 'WORK' => $l->t('Work'),
+ 'HOME' => $l->t('Home'),
+ 'OTHER' => $l->t('Other'),
+ );
+ case 'TEL':
+ return array(
+ 'HOME' => $l->t('Home'),
+ 'CELL' => $l->t('Mobile'),
+ 'WORK' => $l->t('Work'),
+ 'TEXT' => $l->t('Text'),
+ 'VOICE' => $l->t('Voice'),
+ 'MSG' => $l->t('Message'),
+ 'FAX' => $l->t('Fax'),
+ 'VIDEO' => $l->t('Video'),
+ 'PAGER' => $l->t('Pager'),
+ 'OTHER' => $l->t('Other'),
+ );
+ case 'EMAIL':
+ return array(
+ 'WORK' => $l->t('Work'),
+ 'HOME' => $l->t('Home'),
+ 'INTERNET' => $l->t('Internet'),
+ );
}
}
- /*
+ /**
* @brief returns the vcategories object of the user
* @return (object) $vcategories
*/
protected static function getVCategories() {
if (is_null(self::$categories)) {
- self::$categories = new OC_VCategories('contacts');
+ self::$categories = new OC_VCategories('contacts',
+ null,
+ self::getDefaultCategories());
}
return self::$categories;
}
-
- /*
+
+ /**
* @brief returns the categories for the user
* @return (Array) $categories
*/
public static function getCategories() {
- $categories = self::$categories->categories();
+ $categories = self::getVCategories()->categories();
if(count($categories) == 0) {
self::scanCategories();
$categories = self::$categories->categories();
}
- return $categories;
+ return ($categories ? $categories : self::getDefaultCategories());
+ }
+
+ /**
+ * @brief returns the default categories of ownCloud
+ * @return (array) $categories
+ */
+ public static function getDefaultCategories(){
+ return array(
+ (string)self::$l10n->t('Birthday'),
+ (string)self::$l10n->t('Business'),
+ (string)self::$l10n->t('Call'),
+ (string)self::$l10n->t('Clients'),
+ (string)self::$l10n->t('Deliverer'),
+ (string)self::$l10n->t('Holidays'),
+ (string)self::$l10n->t('Ideas'),
+ (string)self::$l10n->t('Journey'),
+ (string)self::$l10n->t('Jubilee'),
+ (string)self::$l10n->t('Meeting'),
+ (string)self::$l10n->t('Other'),
+ (string)self::$l10n->t('Personal'),
+ (string)self::$l10n->t('Projects'),
+ (string)self::$l10n->t('Questions'),
+ (string)self::$l10n->t('Work'),
+ );
}
/**
@@ -173,16 +279,25 @@ class OC_Contacts_App {
foreach($vcaddressbooks as $vcaddressbook) {
$vcaddressbookids[] = $vcaddressbook['id'];
}
- $vccontacts = OC_Contacts_VCard::all($vcaddressbookids);
- }
- }
- if(is_array($vccontacts) && count($vccontacts) > 0) {
- $cards = array();
- foreach($vccontacts as $vccontact) {
- $cards[] = $vccontact['carddata'];
+ $start = 0;
+ $batchsize = 10;
+ while($vccontacts =
+ OC_Contacts_VCard::all($vcaddressbookids, $start, $batchsize)) {
+ $cards = array();
+ foreach($vccontacts as $vccontact) {
+ $cards[] = $vccontact['carddata'];
+ }
+ OCP\Util::writeLog('contacts',
+ __CLASS__.'::'.__METHOD__
+ .', scanning: '.$batchsize.' starting from '.$start,
+ OCP\Util::DEBUG);
+ // only reset on first batch.
+ self::getVCategories()->rescan($cards,
+ true,
+ ($start == 0 ? true : false));
+ $start += $batchsize;
+ }
}
-
- self::$categories->rescan($cards);
}
}
@@ -194,6 +309,18 @@ class OC_Contacts_App {
self::getVCategories()->loadFromVObject($contact, true);
}
+ /**
+ * @brief Get the last modification time.
+ * @param $vcard OC_VObject
+ * $return DateTime | null
+ */
+ public static function lastModified($vcard) {
+ $rev = $vcard->getAsString('REV');
+ if ($rev) {
+ return DateTime::createFromFormat(DateTime::W3C, $rev);
+ }
+ }
+
public static function setLastModifiedHeader($contact) {
$rev = $contact->getAsString('REV');
if ($rev) {
diff --git a/apps/contacts/lib/hooks.php b/apps/contacts/lib/hooks.php
index 3afad1ef7d3..8b7adc60f27 100644
--- a/apps/contacts/lib/hooks.php
+++ b/apps/contacts/lib/hooks.php
@@ -21,6 +21,15 @@
*/
/**
+ * The following signals are being emitted:
+ *
+ * OC_Contacts_VCard::post_moveToAddressbook(array('aid' => $aid, 'id' => $id))
+ * OC_Contacts_VCard::pre_deleteVCard(array('aid' => $aid, 'id' => $id, 'uri' = $uri)); (NOTE: the values can be null depending on which method emits them)
+ * OC_Contacts_VCard::post_updateVCard($id)
+ * OC_Contacts_VCard::post_createVCard($newid)
+ */
+
+/**
* This class contains all hooks.
*/
class OC_Contacts_Hooks{
@@ -30,7 +39,7 @@ class OC_Contacts_Hooks{
* @return array
*/
static public function createUser($parameters) {
- OC_Contacts_Addressbook::add($parameters['uid'],'default','Default Address Book');
+ OC_Contacts_Addressbook::addDefault($parameters['uid']);
return true;
}
@@ -52,8 +61,8 @@ class OC_Contacts_Hooks{
static public function getCalenderSources($parameters) {
$base_url = OCP\Util::linkTo('calendar', 'ajax/events.php').'?calendar_id=';
foreach(OC_Contacts_Addressbook::all(OCP\USER::getUser()) as $addressbook) {
- $parameters['sources'][] =
- array(
+ $parameters['sources'][]
+ = array(
'url' => $base_url.'birthday_'. $addressbook['id'],
'backgroundColor' => '#cccccc',
'borderColor' => '#888',
@@ -66,7 +75,7 @@ class OC_Contacts_Hooks{
static public function getBirthdayEvents($parameters) {
$name = $parameters['calendar_id'];
- if (strpos('birthday_', $name) != 0) {
+ if (strpos($name, 'birthday_') != 0) {
return;
}
$info = explode('_', $name);
@@ -81,17 +90,25 @@ class OC_Contacts_Hooks{
if ($birthday) {
$date = new DateTime($birthday);
$vevent = new OC_VObject('VEVENT');
- $vevent->setDateTime('LAST-MODIFIED', new DateTime($vcard->REV));
- $vevent->setDateTime('DTSTART', $date, Sabre_VObject_Element_DateTime::DATE);
+ //$vevent->setDateTime('LAST-MODIFIED', new DateTime($vcard->REV));
+ $vevent->setDateTime('DTSTART', $date,
+ Sabre_VObject_Element_DateTime::DATE);
$vevent->setString('DURATION', 'P1D');
+ $vevent->setString('UID', substr(md5(rand().time()), 0, 10));
// DESCRIPTION?
$vevent->setString('RRULE', 'FREQ=YEARLY');
- $title = str_replace('{name}', $vcard->getAsString('FN'), OC_Contacts_App::$l10n->t('{name}\'s Birthday'));
+ $title = str_replace('{name}',
+ $vcard->getAsString('FN'),
+ OC_Contacts_App::$l10n->t('{name}\'s Birthday'));
$parameters['events'][] = array(
'id' => 0,//$card['id'],
'vevent' => $vevent,
'repeating' => true,
'summary' => $title,
+ 'calendardata' => "BEGIN:VCALENDAR\nVERSION:2.0\n"
+ . "PRODID:ownCloud Contacts "
+ . OCP\App::getAppVersion('contacts') . "\n"
+ . $vevent->serialize() . "END:VCALENDAR"
);
}
}
diff --git a/apps/contacts/lib/sabre/addressbook.php b/apps/contacts/lib/sabre/addressbook.php
new file mode 100644
index 00000000000..e9eb77472b6
--- /dev/null
+++ b/apps/contacts/lib/sabre/addressbook.php
@@ -0,0 +1,128 @@
+<?php
+/**
+ * ownCloud - Addressbook
+ *
+ * @author Thomas Tanghus
+ * @copyright 2012 Thomas Tanghus (thomas@tanghus.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/>.
+ *
+ */
+
+/**
+ * This class overrides __construct to get access to $addressBookInfo and
+ * $carddavBackend, Sabre_CardDAV_AddressBook::getACL() to return read/write
+ * permissions based on user and shared state and it overrides
+ * Sabre_CardDAV_AddressBook::getChild() and Sabre_CardDAV_AddressBook::getChildren()
+ * to instantiate OC_Connector_Sabre_CardDAV_Cards.
+*/
+class OC_Connector_Sabre_CardDAV_AddressBook extends Sabre_CardDAV_AddressBook {
+
+ /**
+ * CardDAV backend
+ *
+ * @var Sabre_CardDAV_Backend_Abstract
+ */
+ private $carddavBackend;
+
+ /**
+ * Constructor
+ *
+ * @param Sabre_CardDAV_Backend_Abstract $carddavBackend
+ * @param array $addressBookInfo
+ */
+ public function __construct(
+ Sabre_CardDAV_Backend_Abstract $carddavBackend,
+ array $addressBookInfo) {
+
+ $this->carddavBackend = $carddavBackend;
+ $this->addressBookInfo = $addressBookInfo;
+ parent::__construct($carddavBackend, $addressBookInfo);
+
+ }
+
+ /**
+ * Returns a list of ACE's for this node.
+ *
+ * Each ACE has the following properties:
+ * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are
+ * currently the only supported privileges
+ * * 'principal', a url to the principal who owns the node
+ * * 'protected' (optional), indicating that this ACE is not allowed to
+ * be updated.
+ *
+ * @return array
+ */
+ public function getACL() {
+
+ $readprincipal = $this->getOwner();
+ $writeprincipal = $this->getOwner();
+ $uid = OC_Contacts_Addressbook::extractUserID($this->getOwner());
+
+ if($uid != OCP\USER::getUser()) {
+ $sharedAddressbook = OCP\Share::getItemSharedWithBySource('addressbook', $this->addressBookInfo['id']);
+ if ($sharedAddressbook && ($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_READ)) {
+ $readprincipal = 'principals/' . OCP\USER::getUser();
+ }
+ if ($sharedAddressbook && ($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_UPDATE)) {
+ $writeprincipal = 'principals/' . OCP\USER::getUser();
+ }
+ }
+
+ return array(
+ array(
+ 'privilege' => '{DAV:}read',
+ 'principal' => $readprincipal,
+ 'protected' => true,
+ ),
+ array(
+ 'privilege' => '{DAV:}write',
+ 'principal' => $writeprincipal,
+ 'protected' => true,
+ ),
+
+ );
+
+ }
+
+ /**
+ * Returns a card
+ *
+ * @param string $name
+ * @return OC_Connector_Sabre_DAV_Card
+ */
+ public function getChild($name) {
+
+ $obj = $this->carddavBackend->getCard($this->addressBookInfo['id'],$name);
+ if (!$obj) throw new Sabre_DAV_Exception_NotFound('Card not found');
+ return new OC_Connector_Sabre_CardDAV_Card($this->carddavBackend,$this->addressBookInfo,$obj);
+
+ }
+
+ /**
+ * Returns the full list of cards
+ *
+ * @return array
+ */
+ public function getChildren() {
+
+ $objs = $this->carddavBackend->getCards($this->addressBookInfo['id']);
+ $children = array();
+ foreach($objs as $obj) {
+ $children[] = new OC_Connector_Sabre_CardDAV_Card($this->carddavBackend,$this->addressBookInfo,$obj);
+ }
+ return $children;
+
+ }
+} \ No newline at end of file
diff --git a/apps/contacts/lib/sabre/addressbookroot.php b/apps/contacts/lib/sabre/addressbookroot.php
new file mode 100644
index 00000000000..69cd6021284
--- /dev/null
+++ b/apps/contacts/lib/sabre/addressbookroot.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * ownCloud - Addressbook
+ *
+ * @author Thomas Tanghus
+ * @copyright 2012 Thomas Tanghus (thomas@tanghus.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/>.
+ *
+ */
+
+/**
+ * This class overrides Sabre_CardDAV_AddressBookRoot::getChildForPrincipal()
+ * to instantiate OC_Connector_CardDAV_UserAddressBooks.
+*/
+class OC_Connector_Sabre_CardDAV_AddressBookRoot extends Sabre_CardDAV_AddressBookRoot {
+
+ /**
+ * This method returns a node for a principal.
+ *
+ * The passed array contains principal information, and is guaranteed to
+ * at least contain a uri item. Other properties may or may not be
+ * supplied by the authentication backend.
+ *
+ * @param array $principal
+ * @return Sabre_DAV_INode
+ */
+ public function getChildForPrincipal(array $principal) {
+
+ return new OC_Connector_Sabre_CardDAV_UserAddressBooks($this->carddavBackend, $principal['uri']);
+
+ }
+
+} \ No newline at end of file
diff --git a/apps/contacts/lib/connector_sabre.php b/apps/contacts/lib/sabre/backend.php
index c967e906601..04737eb3ab4 100644
--- a/apps/contacts/lib/connector_sabre.php
+++ b/apps/contacts/lib/sabre/backend.php
@@ -40,7 +40,8 @@ class OC_Connector_Sabre_CardDAV extends Sabre_CardDAV_Backend_Abstract {
'uri' => $i['uri'],
'principaluri' => 'principals/'.$i['userid'],
'{DAV:}displayname' => $i['displayname'],
- '{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}addressbook-description' => $i['description'],
+ '{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}addressbook-description'
+ => $i['description'],
'{http://calendarserver.org/ns/}getctag' => $i['ctag'],
);
}
@@ -69,7 +70,8 @@ class OC_Connector_Sabre_CardDAV extends Sabre_CardDAV_Backend_Abstract {
case '{DAV:}displayname' :
$name = $newvalue;
break;
- case '{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}addressbook-description' :
+ case '{' . Sabre_CardDAV_Plugin::NS_CARDDAV
+ . '}addressbook-description' :
$description = $newvalue;
break;
default :
@@ -79,7 +81,7 @@ class OC_Connector_Sabre_CardDAV extends Sabre_CardDAV_Backend_Abstract {
}
}
- OC_Contacts_Addressbook::edit($addressbookid,$name,$description);
+ OC_Contacts_Addressbook::edit($addressbookid, $name, $description);
return true;
@@ -104,16 +106,23 @@ class OC_Connector_Sabre_CardDAV extends Sabre_CardDAV_Backend_Abstract {
case '{DAV:}displayname' :
$displayname = $newvalue;
break;
- case '{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}addressbook-description' :
+ case '{' . Sabre_CardDAV_Plugin::NS_CARDDAV
+ . '}addressbook-description' :
$description = $newvalue;
break;
default :
- throw new Sabre_DAV_Exception_BadRequest('Unknown property: ' . $property);
+ throw new Sabre_DAV_Exception_BadRequest('Unknown property: '
+ . $property);
}
}
- OC_Contacts_Addressbook::addFromDAVData($principaluri,$url,$name,$description);
+ OC_Contacts_Addressbook::addFromDAVData(
+ $principaluri,
+ $url,
+ $name,
+ $description
+ );
}
/**
@@ -136,9 +145,12 @@ class OC_Connector_Sabre_CardDAV extends Sabre_CardDAV_Backend_Abstract {
$data = OC_Contacts_VCard::all($addressbookid);
$cards = array();
foreach($data as $i){
+ //OCP\Util::writeLog('contacts', __METHOD__.', uri: ' . $i['uri'], OCP\Util::DEBUG);
$cards[] = array(
'id' => $i['id'],
- 'carddata' => $i['carddata'],
+ //'carddata' => $i['carddata'],
+ 'size' => strlen($i['carddata']),
+ 'etag' => md5($i['carddata']),
'uri' => $i['uri'],
'lastmodified' => $i['lastmodified'] );
}
@@ -154,7 +166,7 @@ class OC_Connector_Sabre_CardDAV extends Sabre_CardDAV_Backend_Abstract {
* @return array
*/
public function getCard($addressbookid, $carduri) {
- return OC_Contacts_VCard::findWhereDAVDataIs($addressbookid,$carduri);
+ return OC_Contacts_VCard::findWhereDAVDataIs($addressbookid, $carduri);
}
@@ -180,7 +192,9 @@ class OC_Connector_Sabre_CardDAV extends Sabre_CardDAV_Backend_Abstract {
* @return bool
*/
public function updateCard($addressbookid, $carduri, $carddata) {
- return OC_Contacts_VCard::editFromDAVData($addressbookid, $carduri, $carddata);
+ return OC_Contacts_VCard::editFromDAVData(
+ $addressbookid, $carduri, $carddata
+ );
}
/**
diff --git a/apps/contacts/lib/sabre/card.php b/apps/contacts/lib/sabre/card.php
new file mode 100644
index 00000000000..f4414a25f7c
--- /dev/null
+++ b/apps/contacts/lib/sabre/card.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * ownCloud - Addressbook
+ *
+ * @author Thomas Tanghus
+ * @copyright 2012 Thomas Tanghus (thomas@tanghus.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/>.
+ *
+ */
+
+/**
+ * This class overrides Sabre_CardDAV_Card::getACL()
+ * to return read/write permissions based on user and shared state.
+*/
+class OC_Connector_Sabre_CardDAV_Card extends Sabre_CardDAV_Card {
+
+ /**
+ * Array with information about the containing addressbook
+ *
+ * @var array
+ */
+ private $addressBookInfo;
+
+ /**
+ * Constructor
+ *
+ * @param Sabre_CardDAV_Backend_Abstract $carddavBackend
+ * @param array $addressBookInfo
+ * @param array $cardData
+ */
+ public function __construct(Sabre_CardDAV_Backend_Abstract $carddavBackend, array $addressBookInfo, array $cardData) {
+
+ $this->addressBookInfo = $addressBookInfo;
+ parent::__construct($carddavBackend, $addressBookInfo, $cardData);
+
+ }
+
+ /**
+ * Returns a list of ACE's for this node.
+ *
+ * Each ACE has the following properties:
+ * * 'privilege', a string such as {DAV:}read or {DAV:}write. These are
+ * currently the only supported privileges
+ * * 'principal', a url to the principal who owns the node
+ * * 'protected' (optional), indicating that this ACE is not allowed to
+ * be updated.
+ *
+ * @return array
+ */
+ public function getACL() {
+
+ $readprincipal = $this->getOwner();
+ $writeprincipal = $this->getOwner();
+ $uid = OC_Contacts_Addressbook::extractUserID($this->getOwner());
+
+ if($uid != OCP\USER::getUser()) {
+ $sharedAddressbook = OCP\Share::getItemSharedWithBySource('addressbook', $this->addressBookInfo['id']);
+ if ($sharedAddressbook && ($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_READ)) {
+ $readprincipal = 'principals/' . OCP\USER::getUser();
+ }
+ if ($sharedAddressbook && ($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_UPDATE)) {
+ $writeprincipal = 'principals/' . OCP\USER::getUser();
+ }
+ }
+
+ return array(
+ array(
+ 'privilege' => '{DAV:}read',
+ 'principal' => $readprincipal,
+ 'protected' => true,
+ ),
+ array(
+ 'privilege' => '{DAV:}write',
+ 'principal' => $writeprincipal,
+ 'protected' => true,
+ ),
+
+ );
+
+ }
+
+} \ No newline at end of file
diff --git a/apps/contacts/lib/sabre/useraddressbooks.php b/apps/contacts/lib/sabre/useraddressbooks.php
new file mode 100644
index 00000000000..328b433bd6e
--- /dev/null
+++ b/apps/contacts/lib/sabre/useraddressbooks.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * ownCloud - Addressbook
+ *
+ * @author Thomas Tanghus
+ * @copyright 2012 Thomas Tanghus (thomas@tanghus.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/>.
+ *
+ */
+
+/**
+ * This class overrides Sabre_CardDAV_UserAddressBooks::getChildren()
+ * to instantiate OC_Connector_Sabre_CardDAV_AddressBooks.
+*/
+class OC_Connector_Sabre_CardDAV_UserAddressBooks extends Sabre_CardDAV_UserAddressBooks {
+
+ /**
+ * Returns a list of addressbooks
+ *
+ * @return array
+ */
+ public function getChildren() {
+
+ $addressbooks = $this->carddavBackend->getAddressbooksForUser($this->principalUri);
+ $objs = array();
+ foreach($addressbooks as $addressbook) {
+ $objs[] = new OC_Connector_Sabre_CardDAV_AddressBook($this->carddavBackend, $addressbook);
+ }
+ return $objs;
+
+ }
+
+} \ No newline at end of file
diff --git a/apps/contacts/lib/sabre/vcfexportplugin.php b/apps/contacts/lib/sabre/vcfexportplugin.php
new file mode 100644
index 00000000000..f0ba60b303f
--- /dev/null
+++ b/apps/contacts/lib/sabre/vcfexportplugin.php
@@ -0,0 +1,100 @@
+<?php
+
+/**
+ * VCF Exporter
+ *
+ * This plugin adds the ability to export entire address books as .vcf files.
+ * This is useful for clients that don't support CardDAV yet. They often do
+ * support vcf files.
+ *
+ * @package Sabre
+ * @subpackage CardDAV
+ * @copyright Copyright (C) 2007-2012 Rooftop Solutions. All rights reserved.
+ * @author Evert Pot (http://www.rooftopsolutions.nl/)
+ * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
+ */
+class OC_Connector_Sabre_CardDAV_VCFExportPlugin extends Sabre_DAV_ServerPlugin {
+
+ /**
+ * Reference to Server class
+ *
+ * @var Sabre_DAV_Server
+ */
+ private $server;
+
+ /**
+ * Initializes the plugin and registers event handlers
+ *
+ * @param Sabre_DAV_Server $server
+ * @return void
+ */
+ public function initialize(Sabre_DAV_Server $server) {
+
+ $this->server = $server;
+ $this->server->subscribeEvent('beforeMethod', array($this,'beforeMethod'), 90);
+
+ }
+
+ /**
+ * 'beforeMethod' event handles. This event handles intercepts GET requests ending
+ * with ?export
+ *
+ * @param string $method
+ * @param string $uri
+ * @return bool
+ */
+ public function beforeMethod($method, $uri) {
+
+ if ($method!='GET') return;
+ if ($this->server->httpRequest->getQueryString()!='export') return;
+
+ // splitting uri
+ list($uri) = explode('?', $uri, 2);
+
+ $node = $this->server->tree->getNodeForPath($uri);
+
+ if (!($node instanceof Sabre_CardDAV_IAddressBook)) return;
+
+ // Checking ACL, if available.
+ if ($aclPlugin = $this->server->getPlugin('acl')) {
+ $aclPlugin->checkPrivileges($uri, '{DAV:}read');
+ }
+
+ $this->server->httpResponse->setHeader('Content-Type', 'text/directory');
+ $this->server->httpResponse->sendStatus(200);
+
+ $nodes = $this->server->getPropertiesForPath($uri, array(
+ '{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}address-data',
+ ), 1);
+
+ $this->server->httpResponse->sendBody($this->generateVCF($nodes));
+
+ // Returning false to break the event chain
+ return false;
+
+ }
+
+ /**
+ * Merges all vcard objects, and builds one big vcf export
+ *
+ * @param array $nodes
+ * @return string
+ */
+ public function generateVCF(array $nodes) {
+ $objects = array();
+
+ foreach($nodes as $node) {
+
+ if (!isset($node[200]['{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}address-data'])) {
+ continue;
+ }
+ $nodeData = $node[200]['{' . Sabre_CardDAV_Plugin::NS_CARDDAV . '}address-data'];
+ $objects[] = $nodeData;
+
+ }
+
+ return implode("\r\n", $objects);
+
+ }
+
+}
diff --git a/apps/contacts/lib/search.php b/apps/contacts/lib/search.php
index 144138a7c2c..53aa2b48496 100644
--- a/apps/contacts/lib/search.php
+++ b/apps/contacts/lib/search.php
@@ -2,24 +2,17 @@
class OC_Search_Provider_Contacts extends OC_Search_Provider{
function search($query){
$addressbooks = OC_Contacts_Addressbook::all(OCP\USER::getUser(), 1);
-// if(count($calendars)==0 || !OCP\App::isEnabled('contacts')){
-// //return false;
-// }
- // NOTE: Does the following do anything
- $results=array();
- $searchquery=array();
- if(substr_count($query, ' ') > 0){
- $searchquery = explode(' ', $query);
- }else{
- $searchquery[] = $query;
+ if(count($addressbooks)==0 || !OCP\App::isEnabled('contacts')) {
+ return array();
}
+ $results=array();
$l = new OC_l10n('contacts');
foreach($addressbooks as $addressbook){
$vcards = OC_Contacts_VCard::all($addressbook['id']);
foreach($vcards as $vcard){
- if(substr_count(strtolower($vcard['fullname']), strtolower($query)) > 0){
- $link = OCP\Util::linkTo('contacts', 'index.php').'?id='.urlencode($vcard['id']);
- $results[]=new OC_Search_Result($vcard['fullname'],'', $link,$l->t('Contact'));//$name,$text,$link,$type
+ if(substr_count(strtolower($vcard['fullname']), strtolower($query)) > 0) {
+ $link = OCP\Util::linkTo('contacts', 'index.php').'&id='.urlencode($vcard['id']);
+ $results[]=new OC_Search_Result($vcard['fullname'], '', $link, (string)$l->t('Contact'));//$name,$text,$link,$type
}
}
}
diff --git a/apps/contacts/lib/share/addressbook.php b/apps/contacts/lib/share/addressbook.php
new file mode 100644
index 00000000000..d35f0ce9aea
--- /dev/null
+++ b/apps/contacts/lib/share/addressbook.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class OC_Share_Backend_Addressbook implements OCP\Share_Backend_Collection {
+ const FORMAT_ADDRESSBOOKS = 1;
+
+ /**
+ * @brief Get the source of the item to be stored in the database
+ * @param string Item
+ * @param string Owner of the item
+ * @return mixed|array|false Source
+ *
+ * Return an array if the item is file dependent, the array needs two keys: 'item' and 'file'
+ * Return false if the item does not exist for the user
+ *
+ * The formatItems() function will translate the source returned back into the item
+ */
+ public function isValidSource($itemSource, $uidOwner) {
+ $addressbook = OC_Contacts_Addressbook::find( $itemSource );
+ if( $addressbook === false || $addressbook['userid'] != $uidOwner) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * @brief Get a unique name of the item for the specified user
+ * @param string Item
+ * @param string|false User the item is being shared with
+ * @param array|null List of similar item names already existing as shared items
+ * @return string Target name
+ *
+ * This function needs to verify that the user does not already have an item with this name.
+ * If it does generate a new name e.g. name_#
+ */
+ public function generateTarget($itemSource, $shareWith, $exclude = null) {
+ $addressbook = OC_Contacts_Addressbook::find( $itemSource );
+ $user_addressbooks = array();
+ foreach(OC_Contacts_Addressbook::all($shareWith) as $user_addressbook) {
+ $user_addressbooks[] = $user_addressbook['displayname'];
+ }
+ $name = $addressbook['userid']."'s ".$addressbook['displayname'];
+ $suffix = '';
+ while (in_array($name.$suffix, $user_addressbooks)) {
+ $suffix++;
+ }
+
+ return $name.$suffix;
+ }
+
+ /**
+ * @brief Converts the shared item sources back into the item in the specified format
+ * @param array Shared items
+ * @param int Format
+ * @return ?
+ *
+ * The items array is a 3-dimensional array with the item_source as the first key and the share id as the second key to an array with the share info.
+ * The key/value pairs included in the share info depend on the function originally called:
+ * If called by getItem(s)Shared: id, item_type, item, item_source, share_type, share_with, permissions, stime, file_source
+ * If called by getItem(s)SharedWith: id, item_type, item, item_source, item_target, share_type, share_with, permissions, stime, file_source, file_target
+ * This function allows the backend to control the output of shared items with custom formats.
+ * It is only called through calls to the public getItem(s)Shared(With) functions.
+ */
+ public function formatItems($items, $format, $parameters = null) {
+ $addressbooks = array();
+ if ($format == self::FORMAT_ADDRESSBOOKS) {
+ foreach ($items as $item) {
+ $addressbook = OC_Contacts_Addressbook::find($item['item_source']);
+ if ($addressbook) {
+ $addressbook['displayname'] = $item['item_target'];
+ $addressbook['permissions'] = $item['permissions'];
+ $addressbooks[] = $addressbook;
+ }
+ }
+ }
+ return $addressbooks;
+ }
+
+ public function getChildren($itemSource) {
+ $query = OCP\DB::prepare('SELECT id FROM *PREFIX*contacts_cards WHERE addressbookid = ?');
+ $result = $query->execute(array($itemSource));
+ $sources = array();
+ while ($contact = $result->fetchRow()) {
+ $sources[] = $contact['id'];
+ }
+ return $sources;
+ }
+
+}
diff --git a/apps/contacts/lib/share/contact.php b/apps/contacts/lib/share/contact.php
new file mode 100644
index 00000000000..718c8f9025f
--- /dev/null
+++ b/apps/contacts/lib/share/contact.php
@@ -0,0 +1,53 @@
+<?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/>.
+*/
+
+class OC_Share_Backend_Contact implements OCP\Share_Backend {
+
+ const FORMAT_CONTACT = 0;
+
+ private static $contact;
+
+ public function isValidSource($itemSource, $uidOwner) {
+ self::$contact = OC_Contacts_VCard::find($itemSource);
+ if (self::$contact) {
+ return true;
+ }
+ return false;
+ }
+
+ public function generateTarget($itemSource, $shareWith, $exclude = null) {
+ // TODO Get default addressbook and check for conflicts
+ return self::$contact['fullname'];
+ }
+
+ public function formatItems($items, $format, $parameters = null) {
+ $contacts = array();
+ if ($format == self::FORMAT_CONTACT) {
+ foreach ($items as $item) {
+ $contact = OC_Contacts_VCard::find($item['item_source']);
+ $contact['fullname'] = $item['item_target'];
+ $contacts[] = $contact;
+ }
+ }
+ return $contacts;
+ }
+
+} \ No newline at end of file
diff --git a/apps/contacts/lib/vcard.php b/apps/contacts/lib/vcard.php
index a0491c6323c..fbb1c734f64 100644
--- a/apps/contacts/lib/vcard.php
+++ b/apps/contacts/lib/vcard.php
@@ -38,45 +38,50 @@
/**
* This class manages our vCards
*/
-class OC_Contacts_VCard{
+class OC_Contacts_VCard {
/**
* @brief Returns all cards of an address book
* @param integer $id
- * @return array
+ * @return array|false
*
* The cards are associative arrays. You'll find the original vCard in
* ['carddata']
*/
- public static function all($id){
+ public static function all($id, $start=null, $num=null){
+ //FIXME jfd: use limit & offset as OC_DB::prepare parameters for oracle support
+ $limitsql = '';
+ if(!is_null($num)) {
+ $limitsql = ' LIMIT '.$num;
+ }
+ if(!is_null($start) && !is_null($num)) {
+ $limitsql .= ' OFFSET '.$start.' ';
+ }
$result = null;
- if(is_array($id) && count($id) > 1) {
+ if(is_array($id) && count($id)) {
$id_sql = join(',', array_fill(0, count($id), '?'));
- $prep = 'SELECT * FROM `*PREFIX*contacts_cards` WHERE `addressbookid` IN ('.$id_sql.') ORDER BY `fullname`';
+ $prep = 'SELECT * FROM `*PREFIX*contacts_cards` WHERE `addressbookid` IN ('.$id_sql.') ORDER BY `fullname`'.$limitsql;
try {
$stmt = OCP\DB::prepare( $prep );
$result = $stmt->execute($id);
} catch(Exception $e) {
- OCP\Util::writeLog('contacts','OC_Contacts_VCard:all:, exception: '.$e->getMessage(),OCP\Util::ERROR);
- OCP\Util::writeLog('contacts','OC_Contacts_VCard:all, ids: '.count($id).' '.join(',', $id),OCP\Util::DEBUG);
- OCP\Util::writeLog('contacts','SQL:'.$prep,OCP\Util::DEBUG);
- }
- } elseif($id) {
- if(is_array($id)) {
- if(count($id) == 0) {
- return array();
- }
- $id = $id[0];
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', ids: '.join(',', $id), OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts', __METHOD__.'SQL:'.$prep, OCP\Util::DEBUG);
+ return false;
}
+ } elseif(is_int($id) || is_string($id)) {
try {
- $stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*contacts_cards` WHERE `addressbookid` = ? ORDER BY `fullname`' );
+ $sql = 'SELECT * FROM `*PREFIX*contacts_cards` WHERE `addressbookid` = ? ORDER BY `fullname`'.$limitsql;
+ $stmt = OCP\DB::prepare( $sql );
$result = $stmt->execute(array($id));
} catch(Exception $e) {
- OCP\Util::writeLog('contacts','OC_Contacts_VCard:all:, exception: '.$e->getMessage(),OCP\Util::ERROR);
- OCP\Util::writeLog('contacts','OC_Contacts_VCard:all, id: '. $id,OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', ids: '. $id, OCP\Util::DEBUG);
+ return false;
}
} else {
- OCP\Util::writeLog('contacts','OC_Contacts_VCard:all: No ID given.',OCP\Util::ERROR);
- return array();
+ OCP\Util::writeLog('contacts', __METHOD__.'. Addressbook id(s) argument is empty: '. print_r($id, true), OCP\Util::DEBUG);
+ return false;
}
$cards = array();
if(!is_null($result)) {
@@ -91,11 +96,17 @@ class OC_Contacts_VCard{
/**
* @brief Returns a card
* @param integer $id
- * @return associative array
+ * @return associative array or false.
*/
public static function find($id){
- $stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*contacts_cards` WHERE `id` = ?' );
- $result = $stmt->execute(array($id));
+ try {
+ $stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*contacts_cards` WHERE `id` = ?' );
+ $result = $stmt->execute(array($id));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', id: '. $id, OCP\Util::DEBUG);
+ return false;
+ }
return $result->fetchRow();
}
@@ -104,11 +115,17 @@ class OC_Contacts_VCard{
* @brief finds a card by its DAV Data
* @param integer $aid Addressbook id
* @param string $uri the uri ('filename')
- * @return associative array
+ * @return associative array or false.
*/
public static function findWhereDAVDataIs($aid,$uri){
- $stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*contacts_cards` WHERE `addressbookid` = ? AND `uri` = ?' );
- $result = $stmt->execute(array($aid,$uri));
+ try {
+ $stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*contacts_cards` WHERE `addressbookid` = ? AND `uri` = ?' );
+ $result = $stmt->execute(array($aid,$uri));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', aid: '.$aid.' uri'.$uri, OCP\Util::DEBUG);
+ return false;
+ }
return $result->fetchRow();
}
@@ -158,13 +175,19 @@ class OC_Contacts_VCard{
protected static function trueUID($aid, &$uid) {
$stmt = OCP\DB::prepare( 'SELECT * FROM `*PREFIX*contacts_cards` WHERE `addressbookid` = ? AND `uri` = ?' );
$uri = $uid.'.vcf';
- $result = $stmt->execute(array($aid,$uri));
- if($result->numRows() > 0){
+ try {
+ $result = $stmt->execute(array($aid,$uri));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', aid: '.$aid.' uid'.$uid, OCP\Util::DEBUG);
+ return false;
+ }
+ if($result->numRows() > 0) {
while(true) {
- $tmpuid = substr(md5(rand().time()),0,10);
+ $tmpuid = substr(md5(rand().time()), 0, 10);
$uri = $tmpuid.'.vcf';
- $result = $stmt->execute(array($aid,$uri));
- if($result->numRows() > 0){
+ $result = $stmt->execute(array($aid, $uri));
+ if($result->numRows() > 0) {
continue;
} else {
$uid = $tmpuid;
@@ -190,7 +213,7 @@ class OC_Contacts_VCard{
// Add version if needed
if($version && $version < '3.0') {
$upgrade = true;
- OCP\Util::writeLog('contacts','OC_Contacts_VCard::updateValuesFromAdd. Updating from version: '.$version,OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts', 'OC_Contacts_VCard::updateValuesFromAdd. Updating from version: '.$version, OCP\Util::DEBUG);
}
foreach($vcard->children as &$property){
// Decode string properties and remove obsolete properties.
@@ -203,29 +226,29 @@ class OC_Contacts_VCard{
}
// Fix format of type parameters.
if($upgrade && in_array($property->name, $typeprops)) {
- OCP\Util::writeLog('contacts','OC_Contacts_VCard::updateValuesFromAdd. before: '.$property->serialize(),OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts', 'OC_Contacts_VCard::updateValuesFromAdd. before: '.$property->serialize(), OCP\Util::DEBUG);
self::formatPropertyTypes($property);
- OCP\Util::writeLog('contacts','OC_Contacts_VCard::updateValuesFromAdd. after: '.$property->serialize(),OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts', 'OC_Contacts_VCard::updateValuesFromAdd. after: '.$property->serialize(), OCP\Util::DEBUG);
}
- if($property->name == 'FN'){
+ if($property->name == 'FN') {
$fn = $property->value;
}
- if($property->name == 'N'){
+ if($property->name == 'N') {
$n = $property->value;
}
- if($property->name == 'UID'){
+ if($property->name == 'UID') {
$uid = $property->value;
}
- if($property->name == 'ORG'){
+ if($property->name == 'ORG') {
$org = $property->value;
}
- if($property->name == 'EMAIL' && is_null($email)){ // only use the first email as substitute for missing N or FN.
+ if($property->name == 'EMAIL' && is_null($email)) { // only use the first email as substitute for missing N or FN.
$email = $property->value;
}
}
// Check for missing 'N', 'FN' and 'UID' properties
if(!$fn) {
- if($n && $n != ';;;;'){
+ if($n && $n != ';;;;') {
$fn = join(' ', array_reverse(array_slice(explode(';', $n), 0, 2)));
} elseif($email) {
$fn = $email;
@@ -235,21 +258,21 @@ class OC_Contacts_VCard{
$fn = 'Unknown Name';
}
$vcard->setString('FN', $fn);
- OCP\Util::writeLog('contacts','OC_Contacts_VCard::updateValuesFromAdd. Added missing \'FN\' field: '.$fn,OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts', 'OC_Contacts_VCard::updateValuesFromAdd. Added missing \'FN\' field: '.$fn, OCP\Util::DEBUG);
}
- if(!$n || $n == ';;;;'){ // Fix missing 'N' field. Ugly hack ahead ;-)
+ if(!$n || $n == ';;;;') { // Fix missing 'N' field. Ugly hack ahead ;-)
$slice = array_reverse(array_slice(explode(' ', $fn), 0, 2)); // Take 2 first name parts of 'FN' and reverse.
if(count($slice) < 2) { // If not enought, add one more...
$slice[] = "";
}
$n = implode(';', $slice).';;;';
$vcard->setString('N', $n);
- OCP\Util::writeLog('contacts','OC_Contacts_VCard::updateValuesFromAdd. Added missing \'N\' field: '.$n,OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts', 'OC_Contacts_VCard::updateValuesFromAdd. Added missing \'N\' field: '.$n, OCP\Util::DEBUG);
}
if(!$uid) {
$vcard->setUID();
$uid = $vcard->getAsString('UID');
- OCP\Util::writeLog('contacts','OC_Contacts_VCard::updateValuesFromAdd. Added missing \'UID\' field: '.$uid,OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts', 'OC_Contacts_VCard::updateValuesFromAdd. Added missing \'UID\' field: '.$uid, OCP\Util::DEBUG);
}
if(self::trueUID($aid, $uid)) {
$vcard->setString('UID', $uid);
@@ -260,23 +283,29 @@ class OC_Contacts_VCard{
/**
* @brief Adds a card
- * @param integer $aid Addressbook id
- * @param OC_VObject $card vCard file
- * @param string $uri the uri of the card, default based on the UID
- * @return insertid on success or null if no card.
+ * @param $aid integer Addressbook id
+ * @param $card OC_VObject vCard file
+ * @param $uri string the uri of the card, default based on the UID
+ * @param $isChecked boolean If the vCard should be checked for validity and version.
+ * @return insertid on success or false.
*/
- public static function add($aid, OC_VObject $card, $uri=null, $isnew=false){
- if(is_null($card)){
- OCP\Util::writeLog('contacts','OC_Contacts_VCard::add. No vCard supplied', OCP\Util::ERROR);
+ public static function add($aid, OC_VObject $card, $uri=null, $isChecked=false){
+ if(is_null($card)) {
+ OCP\Util::writeLog('contacts', 'OC_Contacts_VCard::add. No vCard supplied', OCP\Util::ERROR);
return null;
};
-
- if(!$isnew) {
+ $addressbook = OC_Contacts_Addressbook::find($aid);
+ if ($addressbook['userid'] != OCP\User::getUser()) {
+ $sharedAddressbook = OCP\Share::getItemSharedWithBySource('addressbook', $aid);
+ if (!$sharedAddressbook || !($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_CREATE)) {
+ return false;
+ }
+ }
+ if(!$isChecked) {
OC_Contacts_App::loadCategoriesFromVCard($card);
self::updateValuesFromAdd($aid, $card);
}
-
- $card->setString('VERSION','3.0');
+ $card->setString('VERSION', '3.0');
// Add product ID is missing.
$prodid = trim($card->getAsString('PRODID'));
if(!$prodid) {
@@ -298,11 +327,17 @@ class OC_Contacts_VCard{
$data = $card->serialize();
$stmt = OCP\DB::prepare( 'INSERT INTO `*PREFIX*contacts_cards` (`addressbookid`,`fullname`,`carddata`,`uri`,`lastmodified`) VALUES(?,?,?,?,?)' );
- $result = $stmt->execute(array($aid,$fn,$data,$uri,time()));
+ try {
+ $result = $stmt->execute(array($aid,$fn,$data,$uri,time()));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', aid: '.$aid.' uri'.$uri, OCP\Util::DEBUG);
+ return false;
+ }
$newid = OCP\DB::insertid('*PREFIX*contacts_cards');
OC_Contacts_Addressbook::touch($aid);
-
+ OC_Hook::emit('OC_Contacts_VCard', 'post_createVCard', $newid);
return $newid;
}
@@ -327,15 +362,26 @@ class OC_Contacts_VCard{
$now = new DateTime;
foreach($objects as $object) {
$vcard = OC_VObject::parse($object[1]);
- if(!is_null($vcard)){
+ if(!is_null($vcard)) {
+ $oldcard = self::find($object[0]);
+ if (!$oldcard) {
+ return false;
+ }
+ $addressbook = OC_Contacts_Addressbook::find($oldcard['addressbookid']);
+ if ($addressbook['userid'] != OCP\User::getUser()) {
+ $sharedContact = OCP\Share::getItemSharedWithBySource('contact', $object[0], OCP\Share::FORMAT_NONE, null, true);
+ if (!$sharedContact || !($sharedContact['permissions'] & OCP\Share::PERMISSION_UPDATE)) {
+ return false;
+ }
+ }
$vcard->setString('REV', $now->format(DateTime::W3C));
$data = $vcard->serialize();
try {
$result = $stmt->execute(array($data,time(),$object[0]));
//OCP\Util::writeLog('contacts','OC_Contacts_VCard::updateDataByID, id: '.$object[0].': '.$object[1],OCP\Util::DEBUG);
} catch(Exception $e) {
- OCP\Util::writeLog('contacts','OC_Contacts_VCard::updateDataByID:, exception: '.$e->getMessage(),OCP\Util::DEBUG);
- OCP\Util::writeLog('contacts','OC_Contacts_VCard::updateDataByID, id: '.$object[0],OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', id: '.$object[0], OCP\Util::DEBUG);
}
}
}
@@ -349,11 +395,20 @@ class OC_Contacts_VCard{
*/
public static function edit($id, OC_VObject $card){
$oldcard = self::find($id);
-
+ if (!$oldcard) {
+ return false;
+ }
if(is_null($card)) {
return false;
}
-
+ // NOTE: Owner checks are being made in the ajax files, which should be done inside the lib files to prevent any redundancies with sharing checks
+ $addressbook = OC_Contacts_Addressbook::find($oldcard['addressbookid']);
+ if ($addressbook['userid'] != OCP\User::getUser()) {
+ $sharedContact = OCP\Share::getItemSharedWithBySource('contact', $id, OCP\Share::FORMAT_NONE, null, true);
+ if (!$sharedContact || !($sharedContact['permissions'] & OCP\Share::PERMISSION_UPDATE)) {
+ throw new Exception(OC_Contacts_App::$l10n->t('You do not have the permissions to edit this contact.'));
+ }
+ }
OC_Contacts_App::loadCategoriesFromVCard($card);
$fn = $card->getAsString('FN');
@@ -366,10 +421,17 @@ class OC_Contacts_VCard{
$data = $card->serialize();
$stmt = OCP\DB::prepare( 'UPDATE `*PREFIX*contacts_cards` SET `fullname` = ?,`carddata` = ?, `lastmodified` = ? WHERE `id` = ?' );
- $result = $stmt->execute(array($fn,$data,time(),$id));
+ try {
+ $result = $stmt->execute(array($fn,$data,time(),$id));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '
+ . $e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', id'.$id, OCP\Util::DEBUG);
+ return false;
+ }
OC_Contacts_Addressbook::touch($oldcard['addressbookid']);
-
+ OC_Hook::emit('OC_Contacts_VCard', 'post_updateVCard', $id);
return true;
}
@@ -380,14 +442,25 @@ class OC_Contacts_VCard{
* @param string $data vCard file
* @return boolean
*/
- public static function editFromDAVData($aid,$uri,$data){
- $oldcard = self::findWhereDAVDataIs($aid,$uri);
+ public static function editFromDAVData($aid, $uri, $data){
+ $oldcard = self::findWhereDAVDataIs($aid, $uri);
$card = OC_VObject::parse($data);
if(!$card) {
- OCP\Util::writeLog('contacts','OC_Contacts_VCard::editFromDAVData. Unable to parse VCARD, uri: '.$uri,OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.
+ ', Unable to parse VCARD, uri: '.$uri, OCP\Util::ERROR);
+ return false;
+ }
+ try {
+ self::edit($oldcard['id'], $card);
+ return true;
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '
+ . $e->getMessage() . ', '
+ . OCP\USER::getUser(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', uri'
+ . $uri, OCP\Util::DEBUG);
return false;
}
- return self::edit($oldcard['id'], $card);
}
/**
@@ -396,9 +469,36 @@ class OC_Contacts_VCard{
* @return boolean
*/
public static function delete($id){
- // FIXME: Add error checking.
- $stmt = OCP\DB::prepare( 'DELETE FROM `*PREFIX*contacts_cards` WHERE `id` = ?' );
- $stmt->execute(array($id));
+ $card = self::find($id);
+ if (!$card) {
+ return false;
+ }
+ $addressbook = OC_Contacts_Addressbook::find($card['addressbookid']);
+ if ($addressbook['userid'] != OCP\User::getUser()) {
+ $sharedContact = OCP\Share::getItemSharedWithBySource('contact',
+ $id, OCP\Share::FORMAT_NONE, null, true);
+ if (!$sharedContact
+ || !($sharedContact['permissions'] & OCP\Share::PERMISSION_DELETE)) {
+ throw new Exception(
+ OC_Contacts_App::$l10n->t(
+ 'You do not have the permissions to delete this contact.'
+ )
+ );
+ }
+ }
+ OC_Hook::emit('OC_Contacts_VCard', 'pre_deleteVCard',
+ array('aid' => null, 'id' => $id, 'uri' => null)
+ );
+ $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*contacts_cards` WHERE `id` = ?');
+ try {
+ $stmt->execute(array($id));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __METHOD__.
+ ', exception: ' . $e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', id: '
+ . $id, OCP\Util::DEBUG);
+ return false;
+ }
return true;
}
@@ -410,9 +510,27 @@ class OC_Contacts_VCard{
* @return boolean
*/
public static function deleteFromDAVData($aid,$uri){
- // FIXME: Add error checking. Deleting a card gives an Kontact/Akonadi error.
+ $addressbook = OC_Contacts_Addressbook::find($aid);
+ if ($addressbook['userid'] != OCP\User::getUser()) {
+ $query = OCP\DB::prepare( 'SELECT id FROM *PREFIX*contacts_cards WHERE addressbookid = ? AND uri = ?' );
+ $id = $query->execute(array($aid, $uri))->fetchOne();
+ if (!$id) {
+ return false;
+ }
+ $sharedContact = OCP\Share::getItemSharedWithBySource('contact', $id, OCP\Share::FORMAT_NONE, null, true);
+ if (!$sharedContact || !($sharedContact['permissions'] & OCP\Share::PERMISSION_DELETE)) {
+ return false;
+ }
+ }
+ OC_Hook::emit('OC_Contacts_VCard', 'pre_deleteVCard', array('aid' => $aid, 'id' => null, 'uri' => $uri));
$stmt = OCP\DB::prepare( 'DELETE FROM `*PREFIX*contacts_cards` WHERE `addressbookid` = ? AND `uri`=?' );
- $stmt->execute(array($aid,$uri));
+ try {
+ $stmt->execute(array($aid,$uri));
+ } catch(Exception $e) {
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', aid: '.$aid.' uri: '.$uri, OCP\Util::DEBUG);
+ return false;
+ }
OC_Contacts_Addressbook::touch($aid);
return true;
@@ -439,14 +557,14 @@ class OC_Contacts_VCard{
* @return array
*/
public static function unescapeDelimiters($value, $delimiter=';') {
- $array = explode($delimiter,$value);
+ $array = explode($delimiter, $value);
for($i=0;$i<count($array);$i++) {
- if(substr($array[$i],-1,1)=="\\") {
+ if(substr($array[$i], -1, 1)=="\\") {
if(isset($array[$i+1])) {
- $array[$i] = substr($array[$i],0,count($array[$i])-2).$delimiter.$array[$i+1];
+ $array[$i] = substr($array[$i], 0, count($array[$i])-2).$delimiter.$array[$i+1];
unset($array[$i+1]);
} else {
- $array[$i] = substr($array[$i],0,count($array[$i])-2).$delimiter;
+ $array[$i] = substr($array[$i], 0, count($array[$i])-2).$delimiter;
}
$i = $i - 1;
}
@@ -462,16 +580,25 @@ class OC_Contacts_VCard{
*
* look at code ...
*/
- public static function structureContact($object){
+ public static function structureContact($object) {
$details = array();
- foreach($object->children as $property){
+
+ foreach($object->children as $property) {
+ $pname = $property->name;
$temp = self::structureProperty($property);
if(!is_null($temp)) {
- if(array_key_exists($property->name,$details)){
- $details[$property->name][] = $temp;
+ // Get Apple X-ABLabels
+ if(isset($object->{$property->group . '.X-ABLABEL'})) {
+ $temp['label'] = $object->{$property->group . '.X-ABLABEL'}->value;
+ if($temp['label'] == '_$!<Other>!$_') {
+ $temp['label'] = OC_Contacts_App::$l10n->t('Other');
+ }
+ }
+ if(array_key_exists($pname, $details)) {
+ $details[$pname][] = $temp;
}
else{
- $details[$property->name] = array($temp);
+ $details[$pname] = array($temp);
}
}
}
@@ -491,10 +618,10 @@ class OC_Contacts_VCard{
* NOTE: $value is not escaped anymore. It shouldn't make any difference
* but we should look out for any problems.
*/
- public static function structureProperty($property){
+ public static function structureProperty($property) {
$value = $property->value;
//$value = htmlspecialchars($value);
- if($property->name == 'ADR' || $property->name == 'N'){
+ if($property->name == 'ADR' || $property->name == 'N') {
$value = self::unescapeDelimiters($value);
} elseif($property->name == 'BDAY') {
if(strpos($value, '-') === false) {
@@ -505,6 +632,9 @@ class OC_Contacts_VCard{
}
}
}
+ if(is_string($value)) {
+ $value = strtr($value, array('\,' => ',', '\;' => ';'));
+ }
$temp = array(
'name' => $property->name,
'value' => $value,
@@ -514,17 +644,17 @@ class OC_Contacts_VCard{
// Faulty entries by kaddressbook
// Actually TYPE=PREF is correct according to RFC 2426
// but this way is more handy in the UI. Tanghus.
- if($parameter->name == 'TYPE' && $parameter->value == 'PREF'){
+ if($parameter->name == 'TYPE' && strtoupper($parameter->value) == 'PREF') {
$parameter->name = 'PREF';
$parameter->value = '1';
}
// NOTE: Apparently Sabre_VObject_Reader can't always deal with value list parameters
// like TYPE=HOME,CELL,VOICE. Tanghus.
- if (in_array($property->name, array('TEL', 'EMAIL')) && $parameter->name == 'TYPE'){
- if (isset($temp['parameters'][$parameter->name])){
+ if (in_array($property->name, array('TEL', 'EMAIL')) && $parameter->name == 'TYPE') {
+ if (isset($temp['parameters'][$parameter->name])) {
$temp['parameters'][$parameter->name][] = $parameter->value;
}
- else{
+ else {
$temp['parameters'][$parameter->name] = array($parameter->value);
}
}
@@ -542,9 +672,29 @@ class OC_Contacts_VCard{
* @return boolean
*
*/
- public static function moveToAddressBook($aid, $id){
+ public static function moveToAddressBook($aid, $id, $isAddressbook = false) {
OC_Contacts_App::getAddressbook($aid); // check for user ownership.
+ $addressbook = OC_Contacts_Addressbook::find($aid);
+ if ($addressbook['userid'] != OCP\User::getUser()) {
+ $sharedAddressbook = OCP\Share::getItemSharedWithBySource('addressbook', $aid);
+ if (!$sharedAddressbook || !($sharedAddressbook['permissions'] & OCP\Share::PERMISSION_CREATE)) {
+ return false;
+ }
+ }
if(is_array($id)) {
+ foreach ($id as $index => $cardId) {
+ $card = self::find($cardId);
+ if (!$card) {
+ unset($id[$index]);
+ }
+ $oldAddressbook = OC_Contacts_Addressbook::find($card['addressbookid']);
+ if ($oldAddressbook['userid'] != OCP\User::getUser()) {
+ $sharedContact = OCP\Share::getItemSharedWithBySource('contact', $cardId, OCP\Share::FORMAT_NONE, null, true);
+ if (!$sharedContact || !($sharedContact['permissions'] & OCP\Share::PERMISSION_DELETE)) {
+ unset($id[$index]);
+ }
+ }
+ }
$id_sql = join(',', array_fill(0, count($id), '?'));
$prep = 'UPDATE `*PREFIX*contacts_cards` SET `addressbookid` = ? WHERE `id` IN ('.$id_sql.')';
try {
@@ -553,24 +703,39 @@ class OC_Contacts_VCard{
$vals = array_merge((array)$aid, $id);
$result = $stmt->execute($vals);
} catch(Exception $e) {
- OCP\Util::writeLog('contacts','OC_Contacts_VCard::moveToAddressBook:, exception: '.$e->getMessage(),OCP\Util::DEBUG);
- OCP\Util::writeLog('contacts','OC_Contacts_VCard::moveToAddressBook, ids: '.join(',', $vals),OCP\Util::DEBUG);
- OCP\Util::writeLog('contacts','SQL:'.$prep,OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '.$e->getMessage(), OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts', __METHOD__.', ids: '.join(',', $vals), OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts', __METHOD__.', SQL:'.$prep, OCP\Util::DEBUG);
return false;
}
} else {
- try {
+ $stmt = null;
+ if($isAddressbook) {
+ $stmt = OCP\DB::prepare( 'UPDATE `*PREFIX*contacts_cards` SET `addressbookid` = ? WHERE `addressbookid` = ?' );
+ } else {
+ $card = self::find($id);
+ if (!$card) {
+ return false;
+ }
+ $oldAddressbook = OC_Contacts_Addressbook::find($card['addressbookid']);
+ if ($oldAddressbook['userid'] != OCP\User::getUser()) {
+ $sharedContact = OCP\Share::getItemSharedWithBySource('contact', $id, OCP\Share::FORMAT_NONE, null, true);
+ if (!$sharedContact || !($sharedContact['permissions'] & OCP\Share::PERMISSION_DELETE)) {
+ return false;
+ }
+ }
$stmt = OCP\DB::prepare( 'UPDATE `*PREFIX*contacts_cards` SET `addressbookid` = ? WHERE `id` = ?' );
+ }
+ try {
$result = $stmt->execute(array($aid, $id));
} catch(Exception $e) {
- OCP\Util::writeLog('contacts','OC_Contacts_VCard::moveToAddressBook:, exception: '.$e->getMessage(),OCP\Util::DEBUG);
- OCP\Util::writeLog('contacts','OC_Contacts_VCard::moveToAddressBook, id: '.$id,OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts', __METHOD__.', exception: '.$e->getMessage(), OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts', __METHOD__.' id: '.$id, OCP\Util::DEBUG);
return false;
}
}
-
+ OC_Hook::emit('OC_Contacts_VCard', 'post_moveToAddressbook', array('aid' => $aid, 'id' => $id));
OC_Contacts_Addressbook::touch($aid);
return true;
}
-
}
diff --git a/apps/contacts/photo.php b/apps/contacts/photo.php
index 4660d61f618..f5c8e6fe4bd 100644
--- a/apps/contacts/photo.php
+++ b/apps/contacts/photo.php
@@ -13,51 +13,63 @@
OCP\User::checkLoggedIn();
OCP\App::checkAppEnabled('contacts');
-function getStandardImage(){
+function getStandardImage() {
//OCP\Response::setExpiresHeader('P10D');
OCP\Response::enableCaching();
OCP\Response::redirect(OCP\Util::imagePath('contacts', 'person_large.png'));
}
$id = isset($_GET['id']) ? $_GET['id'] : null;
-$caching = isset($_GET['refresh']) ? 0 : null;
+$etag = null;
+$caching = null;
if(is_null($id)) {
getStandardImage();
}
if(!extension_loaded('gd') || !function_exists('gd_info')) {
- OCP\Util::writeLog('contacts','photo.php. GD module not installed',OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts',
+ 'photo.php. GD module not installed', OCP\Util::DEBUG);
getStandardImage();
}
$contact = OC_Contacts_App::getContactVCard($id);
$image = new OC_Image();
-if(!$image) {
+if (!$image) {
getStandardImage();
}
// invalid vcard
-if( is_null($contact)) {
- OCP\Util::writeLog('contacts','photo.php. The VCard for ID '.$id.' is not RFC compatible',OCP\Util::ERROR);
+if (is_null($contact)) {
+ OCP\Util::writeLog('contacts',
+ 'photo.php. The VCard for ID ' . $id . ' is not RFC compatible',
+ OCP\Util::ERROR);
} else {
- OCP\Response::enableCaching($caching);
- OC_Contacts_App::setLastModifiedHeader($contact);
-
// Photo :-)
- if($image->loadFromBase64($contact->getAsString('PHOTO'))) {
+ if ($image->loadFromBase64($contact->getAsString('PHOTO'))) {
// OK
- OCP\Response::setETagHeader(md5($contact->getAsString('PHOTO')));
+ $etag = md5($contact->getAsString('PHOTO'));
}
else
// Logo :-/
- if($image->loadFromBase64($contact->getAsString('LOGO'))) {
+ if ($image->loadFromBase64($contact->getAsString('LOGO'))) {
// OK
- OCP\Response::setETagHeader(md5($contact->getAsString('LOGO')));
+ $etag = md5($contact->getAsString('LOGO'));
}
if ($image->valid()) {
+ $modified = OC_Contacts_App::lastModified($contact);
+ // Force refresh if modified within the last minute.
+ if(!is_null($modified)) {
+ $caching = (time() - $modified->format('U') > 60) ? null : 0;
+ }
+ OCP\Response::enableCaching($caching);
+ if(!is_null($modified)) {
+ OCP\Response::setLastModifiedHeader($modified);
+ }
+ if($etag) {
+ OCP\Response::setETagHeader($etag);
+ }
$max_size = 200;
- if($image->width() > $max_size ||
- $image->height() > $max_size) {
+ if ($image->width() > $max_size || $image->height() > $max_size) {
$image->resize($max_size);
}
}
@@ -65,8 +77,7 @@ if( is_null($contact)) {
if (!$image->valid()) {
// Not found :-(
getStandardImage();
- //$image->loadFromFile('img/person_large.png');
}
header('Content-Type: '.$image->mimeType());
$image->show();
-//echo OC_Contacts_App::$l10n->t('This card does not contain a photo.');
+
diff --git a/apps/contacts/settings.php b/apps/contacts/settings.php
index c88fed0b4d6..5f639399c95 100644
--- a/apps/contacts/settings.php
+++ b/apps/contacts/settings.php
@@ -1,6 +1,6 @@
<?php
$tmpl = new OCP\Template( 'contacts', 'settings');
+$tmpl->assign('addressbooks', OC_Contacts_Addressbook::all(OCP\USER::getUser()), false);
-return $tmpl->fetchPage();
-?>
+$tmpl->printPage();
diff --git a/apps/contacts/templates/index.php b/apps/contacts/templates/index.php
index 7d212e71ba8..744381026ab 100644
--- a/apps/contacts/templates/index.php
+++ b/apps/contacts/templates/index.php
@@ -1,29 +1,74 @@
+<div id='notification'></div>
<script type='text/javascript'>
var totalurl = '<?php echo OCP\Util::linkToRemote('carddav'); ?>addressbooks';
var categories = <?php echo json_encode($_['categories']); ?>;
+ var id = '<?php echo $_['id']; ?>';
var lang = '<?php echo OCP\Config::getUserValue(OCP\USER::getUser(), 'core', 'lang', 'en'); ?>';
</script>
-<div id="leftcontent" class="leftcontent">
- <ul id="contacts">
- <?php echo $this->inc("part.contacts"); ?>
- </ul>
-</div>
-<div id="bottomcontrols">
- <form>
- <button class="svg" id="contacts_newcontact" title="<?php echo $l->t('Add Contact'); ?>"><img class="svg" src="<?php echo OCP\Util::linkTo('contacts', 'img/contact-new.svg'); ?>" alt="<?php echo $l->t('Add Contact'); ?>" /></button>
- <button class="svg" id="chooseaddressbook" title="<?php echo $l->t('Addressbooks'); ?>"><img class="svg" src="core/img/actions/settings.svg" alt="<?php echo $l->t('Addressbooks'); ?>" /></button>
- </form>
+<div id="leftcontent">
+ <div class="hidden" id="statusbar"></div>
+ <div id="contacts">
+ </div>
+ <div id="uploadprogressbar"></div>
+ <div id="bottomcontrols">
+ <button class="svg" id="contacts_newcontact" title="<?php echo $l->t('Add Contact'); ?>"><img class="svg" src="<?php echo OCP\Util::imagePath('contacts', 'contact-new.svg'); ?>" alt="<?php echo $l->t('Add Contact'); ?>" /></button>
+ <button class="svg import tip" title="<?php echo $l->t('Import'); ?>">
+ <img class="svg" src="<?php echo OCP\Util::imagePath('core', 'actions/upload.svg') ?>" alt="<?php echo $l->t('Import'); ?>" />
+ </button>
+ <button class="svg settings tip" title="<?php echo $l->t('Settings'); ?>"><img class="svg" src="<?php echo OCP\Util::imagePath('core', 'actions/settings.svg') ?>" alt="<?php echo $l->t('Addressbooks'); ?>" /></button>
+ <form id="import_upload_form" action="<?php echo OCP\Util::linkTo('contacts', 'ajax/uploadimport.php'); ?>" method="post" enctype="multipart/form-data" target="import_upload_target">
+ <input class="float" id="import_upload_start" type="file" accept="text/directory,text/vcard,text/x-vcard" name="importfile" />
+ <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $_['uploadMaxFilesize'] ?>" id="max_upload">
+ </form>
+ <iframe name="import_upload_target" id='import_upload_target' src=""></iframe>
+ </div>
</div>
<div id="rightcontent" class="rightcontent" data-id="<?php echo $_['id']; ?>">
<?php
- if ($_['id']){
+ if($_['has_contacts']) {
echo $this->inc('part.contact');
}
else{
echo $this->inc('part.no_contacts');
}
?>
+ <div class="hidden popup" id="ninjahelp">
+ <a class="close" tabindex="0" role="button" title="<?php echo $l->t('Close'); ?>"></a>
+ <h2><?php echo $l->t('Keyboard shortcuts'); ?></h2>
+ <div class="help-section">
+ <h3><?php echo $l->t('Navigation'); ?></h3>
+ <dl>
+ <dt>j/Down</dt>
+ <dd><?php echo $l->t('Next contact in list'); ?></dd>
+ <dt>k/Up</dt>
+ <dd><?php echo $l->t('Previous contact in list'); ?></dd>
+ <dt>o</dt>
+ <dd><?php echo $l->t('Expand/collapse current addressbook'); ?></dd>
+ <dt>n/PageDown</dt>
+ <dd><?php echo $l->t('Next addressbook'); ?></dd>
+ <dt>p/PageUp</dt>
+ <dd><?php echo $l->t('Previous addressbook'); ?></dd>
+ </dl>
+ </div>
+ <div class="help-section">
+ <h3><?php echo $l->t('Actions'); ?></h3>
+ <dl>
+ <dt>r</dt>
+ <dd><?php echo $l->t('Refresh contacts list'); ?></dd>
+ <dt>a</dt>
+ <dd><?php echo $l->t('Add new contact'); ?></dd>
+ <!-- dt>Shift-a</dt>
+ <dd><?php echo $l->t('Add new addressbook'); ?></dd -->
+ <dt>Shift-Delete</dt>
+ <dd><?php echo $l->t('Delete current contact'); ?></dd>
+ </dl>
+ </div>
+ </div>
</div>
<!-- Dialogs -->
<div id="dialog_holder"></div>
<!-- End of Dialogs -->
+<menu type="context" id="addressbookmenu">
+ <menuitem label="Delete" icon="<?php echo OCP\Util::imagePath('core', 'actions/delete.svg') ?>" onclick="alert('Really? ' + $(this).attr('data-id'))"></menuitem>
+ <menuitem label="Rename" icon="<?php echo OCP\Util::imagePath('core', 'actions/rename.svg') ?>" onclick="alert('Can\'t do that')"></menuitem>
+</menu>
diff --git a/apps/contacts/templates/part.chooseaddressbook.php b/apps/contacts/templates/part.chooseaddressbook.php
deleted file mode 100644
index a0ec053ab91..00000000000
--- a/apps/contacts/templates/part.chooseaddressbook.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<div id="chooseaddressbook_dialog" title="<?php echo $l->t("Configure Address Books"); ?>">
-<table width="100%" style="border: 0;">
-<?php
-$option_addressbooks = OC_Contacts_Addressbook::all(OCP\USER::getUser());
-for($i = 0; $i < count($option_addressbooks); $i++){
- echo "<tr>";
- $tmpl = new OCP\Template('contacts', 'part.chooseaddressbook.rowfields');
- $tmpl->assign('addressbook', $option_addressbooks[$i]);
- $tmpl->assign('active', OC_Contacts_Addressbook::isActive($option_addressbooks[$i]['id']));
- $tmpl->printpage();
- echo "</tr>";
-}
-?>
-<tr>
- <td colspan="5" style="padding: 0.5em;">
- <a class="button" href="#" onclick="Contacts.UI.Addressbooks.newAddressbook(this);"><?php echo $l->t('New Address Book') ?></a>
- <a class="button" href="#" onclick="Contacts.UI.Addressbooks.importAddressbook(this);"><?php echo $l->t('Import from VCF') ?></a>
- </td>
-</tr>
-<tr>
- <td colspan="5">
- <p style="margin: 0 auto;width: 90%;"><input style="display:none;width: 90%;float: left;" type="text" id="carddav_url" onmouseover="$('#carddav_url').select();" title="<?php echo $l->t("CardDav Link"); ?>"><a class="action delete" id="carddav_url_close" style="height: 20px;vertical-align: middle;display: none;" title="close" onclick="$('#carddav_url').hide();$('#carddav_url_close').hide();"/></a></p>
- </td>
-</tr>
-</table>
diff --git a/apps/contacts/templates/part.chooseaddressbook.rowfields.php b/apps/contacts/templates/part.chooseaddressbook.rowfields.php
deleted file mode 100644
index 780920ea3c2..00000000000
--- a/apps/contacts/templates/part.chooseaddressbook.rowfields.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<td width="20px">
- <input id="active_<?php echo $_['addressbook']["id"]; ?>" type="checkbox" onClick="Contacts.UI.Addressbooks.activation(this, <?php echo $_['addressbook']["id"]; ?>)" <?php echo (OC_Contacts_Addressbook::isActive($_['addressbook']["id"]) ? ' checked="checked"' : ''); ?>>
-</td>
-<td>
- <label for="active_<?php echo $_['addressbook']["id"]; ?>"><?php echo htmlspecialchars($_['addressbook']["displayname"]); ?></label>
-</td>
-<td width="20px">
- <a onclick="Contacts.UI.showCardDAVUrl('<?php echo OCP\USER::getUser(); ?>', '<?php echo rawurlencode($_['addressbook']["uri"]); ?>');" title="<?php echo $l->t("CardDav Link"); ?>" class="svg action globe"></a>
-</td>
-<td width="20px">
- <a href="<?php echo OCP\Util::linkTo('contacts', 'export.php'); ?>?bookid=<?php echo $_['addressbook']["id"]; ?>" title="<?php echo $l->t("Download"); ?>" class="svg action download"></a>
-</td>
-<td width="20px">
- <a title="<?php echo $l->t("Edit"); ?>" class="svg action edit" onclick="Contacts.UI.Addressbooks.editAddressbook(this, <?php echo $_['addressbook']["id"]; ?>);"></a>
-</td>
-<td width="20px">
- <a onclick="Contacts.UI.Addressbooks.deleteAddressbook(this, <?php echo $_['addressbook']["id"]; ?>);" title="<?php echo $l->t("Delete"); ?>" class="svg action delete"></a>
-</td>
diff --git a/apps/contacts/templates/part.contact.php b/apps/contacts/templates/part.contact.php
index 5b07ba3c337..87ed07c0ec8 100644
--- a/apps/contacts/templates/part.contact.php
+++ b/apps/contacts/templates/part.contact.php
@@ -1,25 +1,34 @@
+<div id="appsettings" class="popup bottomleft hidden"></div>
<?php
$id = isset($_['id']) ? $_['id'] : '';
?>
<div id="card">
<form class="float" id="file_upload_form" action="<?php echo OCP\Util::linkTo('contacts', 'ajax/uploadphoto.php'); ?>" method="post" enctype="multipart/form-data" target="file_upload_target">
- <input type="hidden" name="id" value="<?php echo $_['id'] ?>">
<input type="hidden" name="requesttoken" value="<?php echo $_['requesttoken'] ?>">
+ <input type="hidden" name="id" value="<?php echo $_['id'] ?>">
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $_['uploadMaxFilesize'] ?>" id="max_upload">
<input type="hidden" class="max_human_file_size" value="(max <?php echo $_['uploadMaxHumanFilesize']; ?>)">
<input id="file_upload_start" type="file" accept="image/*" name="imagefile" />
</form>
- <div id="contact_photo" class="contactsection">
+ <div id="contact_photo">
<iframe name="file_upload_target" id='file_upload_target' src=""></iframe>
<div class="tip propertycontainer" id="contacts_details_photo_wrapper" title="<?php echo $l->t('Drop photo to upload'); ?> (max <?php echo $_['uploadMaxHumanFilesize']; ?>)" data-element="PHOTO">
+ <ul id="phototools" class="transparent hidden">
+ <li><a class="svg delete" title="<?php echo $l->t('Delete current photo'); ?>"></a></li>
+ <li><a class="svg edit" title="<?php echo $l->t('Edit current photo'); ?>"></a></li>
+ <li><a class="svg upload" title="<?php echo $l->t('Upload new photo'); ?>"></a></li>
+ <li><a class="svg cloud" title="<?php echo $l->t('Select photo from ownCloud'); ?>"></a></li>
+ </ul>
</div>
</div> <!-- contact_photo -->
- <div id="contact_identity" class="contactsection">
<form method="post">
+
+ <div id="contact_identity">
<input type="hidden" name="id" value="<?php echo $_['id'] ?>">
+ <input type="hidden" name="requesttoken" value="<?php echo $_['requesttoken'] ?>">
<fieldset id="ident" class="contactpart">
<span class="propertycontainer" data-element="N"><input type="hidden" id="n" class="contacts_property" name="value" value="" /></span>
<span id="name" class="propertycontainer" data-element="FN">
@@ -31,6 +40,8 @@ $id = isset($_['id']) ? $_['id'] : '';
<dd class="propertycontainer hidden" id="org_value" data-element="ORG"><input id="org" required="required" type="text" class="contacts_property big" name="value" value="" placeholder="<?php echo $l->t('Organization'); ?>" /><a role="button" class="action delete" title="<?php echo $l->t('Delete'); ?>"></a></dd>
<dt class="hidden" id="nickname_label" data-element="NICKNAME"><label for="nickname"><?php echo $l->t('Nickname'); ?></label></dt>
<dd class="propertycontainer hidden" id="nickname_value" data-element="NICKNAME"><input id="nickname" required="required" type="text" class="contacts_property big" name="value" value="" placeholder="<?php echo $l->t('Enter nickname'); ?>" /><a role="button" class="action delete" title="<?php echo $l->t('Delete'); ?>"></a></dd>
+ <dt class="hidden" id="url_label" data-element="URL"><label for="url"><?php echo $l->t('Web site'); ?></label></dt>
+ <dd class="propertycontainer hidden" id="url_value" data-element="URL"><input id="url" required="required" type="url" class="contacts_property big" name="value" value="" placeholder="<?php echo $l->t('http://www.somesite.com'); ?>" /><a role="button" class="action globe" title="<?php echo $l->t('Go to web site'); ?>"><a role="button" class="action delete" title="<?php echo $l->t('Delete'); ?>"></a></dd>
<dt class="hidden" id="bday_label" data-element="BDAY"><label for="bday"><?php echo $l->t('Birthday'); ?></label></dt>
<dd class="propertycontainer hidden" id="bday_value" data-element="BDAY"><input id="bday" required="required" name="value" type="text" class="contacts_property big" value="" placeholder="<?php echo $l->t('dd-mm-yyyy'); ?>" /><a role="button" class="action delete" title="<?php echo $l->t('Delete'); ?>"></a></dd>
<dt class="hidden" id="categories_label" data-element="CATEGORIES"><label for="categories"><?php echo $l->t('Groups'); ?></label></dt>
@@ -39,73 +50,88 @@ $id = isset($_['id']) ? $_['id'] : '';
<a role="button" class="action delete" title="<?php echo $l->t('Delete'); ?>"></a><a role="button" class="action edit" title="<?php echo $l->t('Edit groups'); ?>"></a></dd>
</dl>
</fieldset>
- </form>
</div> <!-- contact_identity -->
- <!-- div class="delimiter"></div -->
- <div id="contact_communication" class="contactsection">
- <form method="post">
- <!-- email addresses -->
- <div id="emails">
- <ul id="emaillist" class="propertylist">
- <li class="template hidden" data-element="EMAIL">
- <input type="checkbox" class="contacts_property tip" name="parameters[TYPE][]" value="PREF" title="<?php echo $l->t('Preferred'); ?>" />
- <input type="email" required="required" class="nonempty contacts_property" name="value" value="" x-moz-errormessage="<?php echo $l->t('Please specify a valid email address.'); ?>" placeholder="<?php echo $l->t('Enter email address'); ?>" />
- <select class="hidden" multiple="multiple" name="parameters[TYPE][]">
- <?php echo OCP\html_select_options($_['email_types'], array()) ?>
- </select>
- <span class="listactions"><a class="action mail" title="<?php echo $l->t('Mail to address'); ?>"></a>
- <a role="button" class="action delete" title="<?php echo $l->t('Delete email address'); ?>"></a></span></li>
- </ul>
- </div> <!-- email addresses-->
+ <!-- email addresses -->
+ <div id="emails" class="hidden contactsection">
+ <ul id="emaillist" class="propertylist">
+ <li class="template hidden" data-element="EMAIL">
+ <input type="checkbox" class="contacts_property tip" name="parameters[TYPE][]" value="PREF" title="<?php echo $l->t('Preferred'); ?>" />
+ <input type="email" required="required" class="nonempty contacts_property" name="value" value="" x-moz-errormessage="<?php echo $l->t('Please specify a valid email address.'); ?>" placeholder="<?php echo $l->t('Enter email address'); ?>" />
+ <select multiple="multiple" name="parameters[TYPE][]">
+ <?php echo OCP\html_select_options($_['email_types'], array()) ?>
+ </select>
+ <span class="listactions"><a class="action mail" title="<?php echo $l->t('Mail to address'); ?>"></a>
+ <a role="button" class="action delete" title="<?php echo $l->t('Delete email address'); ?>"></a></span></li>
+ </ul>
+ </div> <!-- email addresses-->
- <!-- Phone numbers -->
- <div id="phones">
- <ul id="phonelist" class="propertylist">
- <li class="template hidden" data-element="TEL">
- <input type="checkbox" class="contacts_property tip" name="parameters[TYPE][]" value="PREF" title="<?php echo $l->t('Preferred'); ?>" />
- <input type="text" required="required" class="nonempty contacts_property" name="value" value="" placeholder="<?php echo $l->t('Enter phone number'); ?>" />
- <select multiple="multiple" name="parameters[TYPE][]">
- <?php echo OCP\html_select_options($_['phone_types'], array()) ?>
- </select>
- <a role="button" class="action delete" title="<?php echo $l->t('Delete phone number'); ?>"></a></li>
- </ul>
- </div> <!-- Phone numbers -->
+ <!-- Phone numbers -->
+ <div id="phones" class="hidden contactsection">
+ <ul id="phonelist" class="propertylist">
+ <li class="template hidden" data-element="TEL">
+ <input type="checkbox" class="contacts_property tip" name="parameters[TYPE][]" value="PREF" title="<?php echo $l->t('Preferred'); ?>" />
+ <input type="text" required="required" class="nonempty contacts_property" name="value" value=""
+ placeholder="<?php echo $l->t('Enter phone number'); ?>" />
+ <select multiple="multiple" name="parameters[TYPE][]">
+ <?php echo OCP\html_select_options($_['phone_types'], array()) ?>
+ </select>
+ <a role="button" class="action delete" title="<?php echo $l->t('Delete phone number'); ?>"></a></li>
+ </ul>
+ </div> <!-- Phone numbers -->
- <!-- Addresses -->
- <div id="addresses" class="hidden">
- <div id="addressdisplay">
- <dl class="addresscard template hidden" data-element="ADR"><dt>
- <input class="adr contacts_property" name="value" type="hidden" value="" />
- <input type="hidden" class="adr_type contacts_property" name="parameters[TYPE][]" value="" />
- <span class="adr_type_label"></span><a class="action globe" title="<?php echo $l->t('View on map'); ?>"></a><a class="action edit" title="<?php echo $l->t('Edit address details'); ?>"></a><a role="button" class="action delete" title="Delete address"></a>
- </dt><dd><ul class="addresslist"></ul></dd></dl>
+ <!-- IMPP -->
+ <div id="ims" class="hidden contactsection">
+ <ul id="imlist" class="propertylist">
+ <li class="template hidden" data-element="IMPP">
+ <div class="select_wrapper">
+ <select class="impp" name="parameters[X-SERVICE-TYPE]">
+ <?php echo OCP\html_select_options($_['im_protocols'], array()) ?>
+ </select>
+ </div>
+ <div class="select_wrapper">
+ <select class="types" name="parameters[TYPE][]">
+ <option></option>
+ <?php echo OCP\html_select_options($_['impp_types'], array()) ?>
+ </select>
+ </div>
+ <input type="checkbox" class="contacts_property impp tip" name="parameters[TYPE][]" value="PREF" title="<?php echo $l->t('Preferred'); ?>" />
+ <input type="text" required="required" class="nonempty contacts_property" name="value" value=""
+ placeholder="<?php echo $l->t('Instant Messenger'); ?>" />
+ <a role="button" class="action delete" title="<?php echo $l->t('Delete IM'); ?>"></a></li>
+ </ul>
+ </div> <!-- IMPP -->
- </div> <!-- addressdisplay -->
- </div> <!-- Addresses -->
- </form>
- </div> <!-- contact_communication -->
+ <!-- Addresses -->
+ <div id="addresses" class="hidden contactsection">
+ <dl class="addresscard template hidden" data-element="ADR"><dt>
+ <input class="adr contacts_property" name="value" type="hidden" value="" />
+ <input type="hidden" class="adr_type contacts_property" name="parameters[TYPE][]" value="" />
+ <span class="adr_type_label"></span><a class="action globe" title="<?php echo $l->t('View on map'); ?>"></a><a class="action edit" title="<?php echo $l->t('Edit address details'); ?>"></a><a role="button" class="action delete" title="Delete address"></a>
+ </dt><dd><ul class="addresslist"></ul></dd></dl>
+ </div> <!-- Addresses -->
- <div id="contact_note" class="contactsection">
- <form class="float" method="post">
+ <div id="contact_note" class="hidden contactsection">
<div id="note" class="propertycontainer" data-element="NOTE">
<textarea class="contacts_property" name="value" required="required" placeholder="<?php echo $l->t('Add notes here.'); ?>" cols="60" wrap="hard"></textarea>
</div>
- </form>
</div> <!-- contact_note -->
+ </form>
+
<div id="actionbar">
<div id="contacts_propertymenu">
<button class="button" id="contacts_propertymenu_button"><?php echo $l->t('Add field'); ?></button>
<ul id="contacts_propertymenu_dropdown" role="menu" class="hidden">
- <li><a role="menuitem" data-type="PHOTO"><?php echo $l->t('Profile picture'); ?></a></li>
<li><a role="menuitem" data-type="ORG"><?php echo $l->t('Organization'); ?></a></li>
<li><a role="menuitem" data-type="NICKNAME"><?php echo $l->t('Nickname'); ?></a></li>
<li><a role="menuitem" data-type="BDAY"><?php echo $l->t('Birthday'); ?></a></li>
<li><a role="menuitem" data-type="TEL"><?php echo $l->t('Phone'); ?></a></li>
<li><a role="menuitem" data-type="EMAIL"><?php echo $l->t('Email'); ?></a></li>
+ <li><a role="menuitem" data-type="IMPP"><?php echo $l->t('Instant Messaging'); ?></a></li>
<li><a role="menuitem" data-type="ADR"><?php echo $l->t('Address'); ?></a></li>
<li><a role="menuitem" data-type="NOTE"><?php echo $l->t('Note'); ?></a></li>
+ <li><a role="menuitem" data-type="URL"><?php echo $l->t('Web site'); ?></a></li>
<li><a role="menuitem" data-type="CATEGORIES"><?php echo $l->t('Groups'); ?></a></li>
</ul>
</div>
@@ -117,19 +143,3 @@ $id = isset($_['id']) ? $_['id'] : '';
<div id="edit_photo_dialog" title="Edit photo">
<div id="edit_photo_dialog_img"></div>
</div>
-<script type="text/javascript">
-$(document).ready(function(){
- if('<?php echo $id; ?>'!='') {
- $.getJSON(OC.filePath('contacts', 'ajax', 'contactdetails.php'),{'id':'<?php echo $id; ?>'},function(jsondata){
- if(jsondata.status == 'success'){
- $('#leftcontent li[data-id="<?php echo $id; ?>"]').addClass('active');
- Contacts.UI.Card.loadContact(jsondata.data);
- Contacts.UI.loadHandlers();
- }
- else{
- OC.dialogs.alert(jsondata.data.message, t('contacts', 'Error'));
- }
- });
- }
-});
-</script>
diff --git a/apps/contacts/templates/part.contactphoto.php b/apps/contacts/templates/part.contactphoto.php
deleted file mode 100644
index bddf4cc8a81..00000000000
--- a/apps/contacts/templates/part.contactphoto.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-$id = $_['id'];
-$wattr = isset($_['width'])?'width="'.$_['width'].'"':'';
-$hattr = isset($_['height'])?'height="'.$_['height'].'"':'';
-$rand = isset($_['refresh'])?'&refresh='.rand():'';
-?>
-<ul id="phototools" class="transparent hidden">
- <li><a class="svg delete" title="<?php echo $l->t('Delete current photo'); ?>"></a></li>
- <li><a class="svg edit" title="<?php echo $l->t('Edit current photo'); ?>"></a></li>
- <li><a class="svg upload" title="<?php echo $l->t('Upload new photo'); ?>"></a></li>
- <li><a class="svg cloud" title="<?php echo $l->t('Select photo from ownCloud'); ?>"></a></li>
-</ul>
-<img class="loading" id="contacts_details_photo" <?php echo $wattr; ?> <?php echo $hattr; ?> src="<?php echo OCP\Util::linkToAbsolute('contacts', 'photo.php'); ?>?id=<?php echo $id.$rand; ?>" />
-<progress id="contacts_details_photo_progress" style="display:none;" value="0" max="100">0 %</progress>
-
-
diff --git a/apps/contacts/templates/part.contacts.php b/apps/contacts/templates/part.contacts.php
deleted file mode 100644
index 57517505405..00000000000
--- a/apps/contacts/templates/part.contacts.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php foreach( $_['contacts'] as $contact ):
- $display = trim($contact['fullname']);
- if(!$display) {
- $vcard = OC_Contacts_App::getContactVCard($contact['id']);
- if(!is_null($vcard)) {
- $struct = OC_Contacts_VCard::structureContact($vcard);
- $display = isset($struct['EMAIL'][0])?$struct['EMAIL'][0]['value']:'[UNKNOWN]';
- }
- }
-?>
- <li role="button" book-id="<?php echo $contact['addressbookid']; ?>" data-id="<?php echo $contact['id']; ?>"><a href="index.php?id=<?php echo $contact['id']; ?>"><?php echo htmlspecialchars($display); ?></a></li>
-<?php endforeach; ?>
diff --git a/apps/contacts/templates/part.cropphoto.php b/apps/contacts/templates/part.cropphoto.php
index e1072179130..3f5817622b2 100644
--- a/apps/contacts/templates/part.cropphoto.php
+++ b/apps/contacts/templates/part.cropphoto.php
@@ -1,10 +1,9 @@
<?php
$id = $_['id'];
-$tmp_path = $_['tmp_path'];
+$tmpkey = $_['tmpkey'];
$requesttoken = $_['requesttoken'];
-OCP\Util::writeLog('contacts','templates/part.cropphoto.php: tmp_path: '.$tmp_path.', exists: '.file_exists($tmp_path), OCP\Util::DEBUG);
?>
-<script language="Javascript">
+<script type="text/javascript">
jQuery(function($) {
$('#cropbox').Jcrop({
onChange: showCoords,
@@ -39,7 +38,8 @@ OCP\Util::writeLog('contacts','templates/part.cropphoto.php: tmp_path: '.$tmp_pa
return true;
});*/
</script>
-<img id="cropbox" src="<?php echo OCP\Util::linkToAbsolute('contacts', 'dynphoto.php'); ?>?tmp_path=<?php echo urlencode($tmp_path); ?>" />
+<?php if(OC_Cache::hasKey($tmpkey)) { ?>
+<img id="cropbox" src="<?php echo OCP\Util::linkToAbsolute('contacts', 'tmpphoto.php'); ?>?tmpkey=<?php echo $tmpkey; ?>" />
<form id="cropform"
class="coords"
method="post"
@@ -48,8 +48,8 @@ OCP\Util::writeLog('contacts','templates/part.cropphoto.php: tmp_path: '.$tmp_pa
action="<?php echo OCP\Util::linkToAbsolute('contacts', 'ajax/savecrop.php'); ?>">
<input type="hidden" id="id" name="id" value="<?php echo $id; ?>" />
- <input type="hidden" id="requesttoken" name="requesttoken" value="<?php echo $requesttoken; ?>" />
- <input type="hidden" id="tmp_path" name="tmp_path" value="<?php echo $tmp_path; ?>" />
+ <input type="hidden" name="requesttoken" value="<?php echo $requesttoken; ?>">
+ <input type="hidden" id="tmpkey" name="tmpkey" value="<?php echo $tmpkey; ?>" />
<fieldset id="coords">
<input type="hidden" id="x1" name="x1" value="" />
<input type="hidden" id="y1" name="y1" value="" />
@@ -60,5 +60,8 @@ OCP\Util::writeLog('contacts','templates/part.cropphoto.php: tmp_path: '.$tmp_pa
</fieldset>
<iframe name="crop_target" id='crop_target' src=""></iframe>
</form>
-
-
+<?php
+} else {
+ echo $l->t('The temporary image has been removed from cache.');
+}
+?>
diff --git a/apps/contacts/templates/part.edit_address_dialog.php b/apps/contacts/templates/part.edit_address_dialog.php
index 8b3425033cc..81e24ba4d0e 100644
--- a/apps/contacts/templates/part.edit_address_dialog.php
+++ b/apps/contacts/templates/part.edit_address_dialog.php
@@ -1,13 +1,9 @@
<?php
$adr = isset($_['adr'])?$_['adr']:array();
-$id = $_['id'];
-$types = array();
-foreach(isset($adr['parameters']['TYPE'])?array($adr['parameters']['TYPE']):array() as $type) {
- $types[] = strtoupper($type);
-}
+$id = isset($_['id'])?$_['id']:array();
+$types = isset($_['types'])?$_['types']:array();
?>
<div id="edit_address_dialog" title="<?php echo $l->t('Edit address'); ?>">
-<!-- ?php print_r($types); ? -->
<fieldset id="address">
<dl class="form">
<dt>
@@ -22,46 +18,46 @@ foreach(isset($adr['parameters']['TYPE'])?array($adr['parameters']['TYPE']):arra
<label class="label" for="adr_pobox"><?php echo $l->t('PO Box'); ?></label>
</dt>
<dd>
- <input type="text" id="adr_pobox" name="value[ADR][0]" placeholder="<?php echo $l->t('PO Box'); ?>" value="<?php echo isset($adr['value'][0])?$adr['value'][0]:''; ?>">
+ <input type="text" id="adr_pobox" name="value[ADR][0]" placeholder="<?php echo $l->t('PO Box'); ?>" value="<?php echo isset($adr[0])?$adr[0]:''; ?>">
</dd>
- <dd>
<dt>
- <label class="label" for="adr_extended"><?php echo $l->t('Extended'); ?></label>
+ <label class="label" for="adr_street"><?php echo $l->t('Street address'); ?></label>
</dt>
<dd>
- <input type="text" id="adr_extended" name="value[ADR][1]" placeholder="<?php echo $l->t('Extended'); ?>" value="<?php echo isset($adr['value'][1])?$adr['value'][1]:''; ?>">
+ <input type="text" id="adr_street" name="value[ADR][2]" placeholder="<?php echo $l->t('Street and number'); ?>" value="<?php echo isset($adr[2])?$adr[2]:''; ?>">
</dd>
<dt>
- <label class="label" for="adr_street"><?php echo $l->t('Street'); ?></label>
+ <label class="label" for="adr_extended"><?php echo $l->t('Extended'); ?></label>
</dt>
<dd>
- <input type="text" id="adr_street" name="value[ADR][2]" placeholder="<?php echo $l->t('Street'); ?>" value="<?php echo isset($adr['value'][2])?$adr['value'][2]:''; ?>">
+ <input type="text" id="adr_extended" name="value[ADR][1]" placeholder="<?php echo $l->t('Apartment number etc.'); ?>" value="<?php echo isset($adr[1])?$adr[1]:''; ?>">
</dd>
<dt>
<label class="label" for="adr_city"><?php echo $l->t('City'); ?></label>
</dt>
<dd>
- <input type="text" id="adr_city" name="value[ADR][3]" placeholder="<?php echo $l->t('City'); ?>" value="<?php echo isset($adr['value'][3])?$adr['value'][3]:''; ?>">
+ <input type="text" id="adr_city" name="value[ADR][3]" placeholder="<?php echo $l->t('City'); ?>" value="<?php echo isset($adr[3])?$adr[3]:''; ?>">
</dd>
<dt>
<label class="label" for="adr_region"><?php echo $l->t('Region'); ?></label>
</dt>
<dd>
- <input type="text" id="adr_region" name="value[ADR][4]" placeholder="<?php echo $l->t('Region'); ?>" value="<?php echo isset($adr['value'][4])?$adr['value'][4]:''; ?>">
+ <input type="text" id="adr_region" name="value[ADR][4]" placeholder="<?php echo $l->t('E.g. state or province'); ?>" value="<?php echo isset($adr[4])?$adr[4]:''; ?>">
</dd>
<dt>
<label class="label" for="adr_zipcode"><?php echo $l->t('Zipcode'); ?></label>
</dt>
<dd>
- <input type="text" id="adr_zipcode" name="value[ADR][5]" placeholder="<?php echo $l->t('Zipcode'); ?>" value="<?php echo isset($adr['value'][5])?$adr['value'][5]:''; ?>">
+ <input type="text" id="adr_zipcode" name="value[ADR][5]" placeholder="<?php echo $l->t('Postal code'); ?>" value="<?php echo isset($adr[5])?$adr[5]:''; ?>">
</dd>
<dt>
<label class="label" for="adr_country"><?php echo $l->t('Country'); ?></label>
</dt>
<dd>
- <input type="text" id="adr_country" name="value[ADR][6]" placeholder="<?php echo $l->t('Country'); ?>" value="<?php echo isset($adr['value'][6])?$adr['value'][6]:''; ?>">
+ <input type="text" id="adr_country" name="value[ADR][6]" placeholder="<?php echo $l->t('Country'); ?>" value="<?php echo isset($adr[6])?$adr[6]:''; ?>">
</dd>
</dl>
+ <div style="width: 100%; text-align:center;">Powered by <a href="http://geonames.org/" target="_blank">geonames.org</a></div>
</fieldset>
</form>
</div>
diff --git a/apps/contacts/templates/part.edit_categories_dialog.php b/apps/contacts/templates/part.edit_categories_dialog.php
deleted file mode 100644
index 8997fa586bd..00000000000
--- a/apps/contacts/templates/part.edit_categories_dialog.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-$categories = isset($_['categories'])?$_['categories']:array();
-?>
-<div id="edit_categories_dialog" title="<?php echo $l->t('Edit categories'); ?>">
-<!-- ?php print_r($types); ? -->
- <form method="post" id="categoryform">
- <div class="scrollarea">
- <ul id="categorylist">
- <?php foreach($categories as $category) { ?>
- <li><input type="checkbox" name="categories[]" value="<?php echo $category; ?>" /><?php echo $category; ?></li>
- <?php } ?>
- </ul>
- </div>
- <div class="bottombuttons"><input type="text" id="category_addinput" name="category" /><button id="category_addbutton" disabled="disabled"><?php echo $l->t('Add'); ?></button></div>
- </form>
-</div>
diff --git a/apps/contacts/templates/part.edit_name_dialog.php b/apps/contacts/templates/part.edit_name_dialog.php
index be45f9a5b06..f984c232a30 100644
--- a/apps/contacts/templates/part.edit_name_dialog.php
+++ b/apps/contacts/templates/part.edit_name_dialog.php
@@ -22,7 +22,7 @@ $addressbooks = isset($_['addressbooks'])?$_['addressbooks']:null;
<?php }} ?>
<dt><label for="pre"><?php echo $l->t('Hon. prefixes'); ?></label></dt>
<dd>
- <input name="pre" id="pre" value="<?php echo isset($name['value'][3]) ? $name['value'][3] : ''; ?>" type="text" list="prefixes" />
+ <input name="pre" id="pre" value="<?php echo isset($name[3]) ? $name[3] : ''; ?>" type="text" list="prefixes" />
<datalist id="prefixes">
<option value="<?php echo $l->t('Miss'); ?>">
<option value="<?php echo $l->t('Ms'); ?>">
@@ -33,14 +33,14 @@ $addressbooks = isset($_['addressbooks'])?$_['addressbooks']:null;
</datalist>
</dd>
<dt><label for="giv"><?php echo $l->t('Given name'); ?></label></dt>
- <dd><input name="giv" id="giv" value="<?php echo isset($name['value'][1]) ? $name['value'][1] : ''; ?>" type="text" /></dd>
+ <dd><input name="giv" id="giv" value="<?php echo isset($name[1]) ? $name[1] : ''; ?>" type="text" /></dd>
<dt><label for="add"><?php echo $l->t('Additional names'); ?></label></dt>
- <dd><input name="add" id="add" value="<?php echo isset($name['value'][2]) ? $name['value'][2] : ''; ?>" type="text" /></dd>
+ <dd><input name="add" id="add" value="<?php echo isset($name[2]) ? $name[2] : ''; ?>" type="text" /></dd>
<dt><label for="fam"><?php echo $l->t('Family name'); ?></label></dt>
- <dd><input name="fam" id="fam" value="<?php echo isset($name['value'][0]) ? $name['value'][0] : ''; ?>" type="text" /></dd>
+ <dd><input name="fam" id="fam" value="<?php echo isset($name[0]) ? $name[0] : ''; ?>" type="text" /></dd>
<dt><label for="suf"><?php echo $l->t('Hon. suffixes'); ?></label></dt>
<dd>
- <input name="suf" id="suf" value="<?php echo isset($name['value'][4]) ? $name['value'][4] : ''; ?>" type="text" list="suffixes" />
+ <input name="suf" id="suf" value="<?php echo isset($name[4]) ? $name[4] : ''; ?>" type="text" list="suffixes" />
<datalist id="suffixes">
<option value="<?php echo $l->t('J.D.'); ?>">
<option value="<?php echo $l->t('M.D.'); ?>">
diff --git a/apps/contacts/templates/part.editaddressbook.php b/apps/contacts/templates/part.editaddressbook.php
deleted file mode 100644
index c1c585687c4..00000000000
--- a/apps/contacts/templates/part.editaddressbook.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-/**
- * Copyright (c) 2011 Bart Visscher <bartv@thisnet.nl>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-?>
-<td id="<?php echo $_['new'] ? 'new' : 'edit' ?>addressbook_dialog" title="<?php echo $_['new'] ? $l->t("New Addressbook") : $l->t("Edit Addressbook"); ?>" colspan="6">
-<table width="100%" style="border: 0;">
-<tr>
- <th><?php echo $l->t('Displayname') ?></th>
- <td>
- <input id="displayname_<?php echo $_['addressbook']['id'] ?>" type="text" value="<?php echo htmlspecialchars($_['addressbook']['displayname']) ?>">
- </td>
-</tr>
-<?php if (!$_['new']): ?>
-<tr>
- <td></td>
- <td>
- <input id="edit_active_<?php echo $_['addressbook']['id'] ?>" type="checkbox"<?php echo OC_Contacts_Addressbook::isActive($_['addressbook']['id']) ? ' checked="checked"' : '' ?>>
- <label for="edit_active_<?php echo $_['addressbook']['id'] ?>">
- <?php echo $l->t('Active') ?>
- </label>
- </td>
-</tr>
-<?php endif; ?>
-</table>
-<input style="float: left;" type="button" onclick="Contacts.UI.Addressbooks.submit(this, <?php echo $_['new'] ? "'new'" : $_['addressbook']['id'] ?>);" value="<?php echo $_['new'] ? $l->t("Save") : $l->t("Submit"); ?>">
-<input style="float: left;" type="button" onclick="Contacts.UI.Addressbooks.cancel(this, <?php echo $_['new'] ? "'new'" : $_['addressbook']['id'] ?>);" value="<?php echo $l->t("Cancel"); ?>">
-</td>
diff --git a/apps/contacts/templates/part.import.php b/apps/contacts/templates/part.import.php
index b8793042997..32c8dc50dd6 100644
--- a/apps/contacts/templates/part.import.php
+++ b/apps/contacts/templates/part.import.php
@@ -2,7 +2,7 @@
<div id="form_container">
<input type="hidden" id="filename" value="<?php echo $_['filename'];?>">
<input type="hidden" id="path" value="<?php echo $_['path'];?>">
- <input type="hidden" id="progressfile" value="<?php echo md5(session_id()) . '.txt';?>">
+ <input type="hidden" id="progresskey" value="<?php echo rand() ?>">
<p class="bold" style="text-align:center;"><?php echo $l->t('Please choose the addressbook'); ?></p>
<select style="width:100%;" id="contacts" name="contacts">
<?php
diff --git a/apps/contacts/templates/part.importaddressbook.php b/apps/contacts/templates/part.importaddressbook.php
deleted file mode 100644
index c7c6555f680..00000000000
--- a/apps/contacts/templates/part.importaddressbook.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-/**
- * Copyright (c) 2012 Thomas Tanghus <thomas@tanghus.net>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-?>
-<td id="importaddressbook_dialog" colspan="6">
-<table>
-<tr>
- <th><?php echo $l->t('Select address book to import to:') ?></th>
- <td>
- <form id="import_upload_form" action="<?php echo OCP\Util::linkTo('contacts', 'ajax/uploadimport.php'); ?>" method="post" enctype="multipart/form-data" target="import_upload_target">
- <input type="hidden" name="requesttoken" value="<?php echo $_['requesttoken'] ?>">
- <select id="book" name="book" class="float">
- <?php
- $contacts_options = OC_Contacts_Addressbook::all(OCP\USER::getUser());
- echo OCP\html_select_options($contacts_options, $contacts_options[0]['id'], array('value'=>'id', 'label'=>'displayname'));
- ?>
- </select>
- <span id="import_drop_target" class="droptarget float"><?php echo $l->t("Drop a VCF file<br />to import contacts."); ?> (Max. <?php echo $_['uploadMaxHumanFilesize']; ?>)</span>
- <a class="svg upload float" title="<?php echo $l->t('Select from HD'); ?>">
- <input class="float" id="import_upload_start" type="file" accept="text/*" name="importfile" /></a>
- <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $_['uploadMaxFilesize'] ?>" id="max_upload">
- </form>
- </td>
-</tr>
-</table>
-
-<input id="close_button" style="float: left;" type="button" onclick="Contacts.UI.Addressbooks.cancel(this);" value="<?php echo $l->t("Cancel"); ?>">
-<iframe name="import_upload_target" id='import_upload_target' src=""></iframe>
-</td>
-<script type="text/javascript">
-Contacts.UI.Addressbooks.loadImportHandlers();
-</script> \ No newline at end of file
diff --git a/apps/contacts/templates/part.no_contacts.php b/apps/contacts/templates/part.no_contacts.php
index 5faa481bc3c..1802939483b 100644
--- a/apps/contacts/templates/part.no_contacts.php
+++ b/apps/contacts/templates/part.no_contacts.php
@@ -1,7 +1,7 @@
+<div id="appsettings" class="popup bottomleft hidden"></div>
<div id="firstrun">
<?php echo $l->t('You have no contacts in your addressbook.') ?>
<div id="selections">
- <input type="button" value="<?php echo $l->t('Add contact') ?>" onclick="Contacts.UI.Card.editNew()" />
- <input type="button" value="<?php echo $l->t('Configure addressbooks') ?>" onclick="Contacts.UI.Addressbooks.overview()" />
+ <input type="button" value="<?php echo $l->t('Add contact') ?>" onclick="OC.Contacts.Card.editNew()" />
</div>
</div>
diff --git a/apps/contacts/templates/part.selectaddressbook.php b/apps/contacts/templates/part.selectaddressbook.php
index 4b152a6e1d3..812a3b891ff 100644
--- a/apps/contacts/templates/part.selectaddressbook.php
+++ b/apps/contacts/templates/part.selectaddressbook.php
@@ -1,16 +1,33 @@
<div id="selectaddressbook_dialog" title="<?php echo $l->t("Select Address Books"); ?>">
+<script type="text/javascript">
+$(document).ready(function() {
+ $('input.name,input.desc').on('focus', function(e) {
+ $('#book_new').prop('checked', true);
+ });
+});
+</script>
<form>
-<table>
+<table style="width: 100%">
<?php foreach($_['addressbooks'] as $idx => $addressbook) { ?>
<tr>
<td>
<input id="book_<?php echo $addressbook['id']; ?>" name="book" type="radio" value="<?php echo $addressbook['id']; ?>" <?php echo ($idx==0?'checked="checked"':'')?>>
</td>
<td>
- <label for="book_<?php echo $addressbook['id']; ?>"><?php echo $addressbook['name']; ?></label>
+ <label for="book_<?php echo $addressbook['id']; ?>"><?php echo $addressbook['displayname']; ?></label>
</td>
+ <td><?php echo $addressbook['description']; ?></td>
</tr>
<?php } ?>
+ <tr>
+ <td>
+ <input id="book_new" name="book" type="radio" value="new">
+ </td>
+ <th>
+ <input type="text" class="name" name="displayname" placeholder="<?php echo $l->t("Enter name"); ?>" />
+ </th>
+ <td><input type="text" class="desc" name="description" placeholder="<?php echo $l->t("Enter description"); ?>" /></td>
+ </tr>
</table>
</form>
</div>
diff --git a/apps/contacts/templates/settings.php b/apps/contacts/templates/settings.php
index 216003b6c69..e3536c7b461 100644
--- a/apps/contacts/templates/settings.php
+++ b/apps/contacts/templates/settings.php
@@ -1,13 +1,55 @@
-<form id="contacts">
+<form id="contacts-settings">
<fieldset class="personalblock">
- <legend><?php echo $l->t('Contacts'); ?></legend>
<?php echo $l->t('CardDAV syncing addresses'); ?> (<a href="http://owncloud.org/synchronisation/" target="_blank"><?php echo $l->t('more info'); ?></a>)
<dl>
<dt><?php echo $l->t('Primary address (Kontact et al)'); ?></dt>
<dd><code><?php echo OCP\Util::linkToRemote('carddav'); ?></code></dd>
<dt><?php echo $l->t('iOS/OS X'); ?></dt>
<dd><code><?php echo OCP\Util::linkToRemote('carddav'); ?>principals/<?php echo OCP\USER::getUser(); ?></code>/</dd>
+ <dt class="hidden"><?php echo $l->t('Addressbooks'); ?></dt>
+ <dd class="addressbooks-settings hidden">
+ <table>
+ <?php foreach($_['addressbooks'] as $addressbook) { ?>
+ <tr class="addressbook" data-id="<?php echo $addressbook['id'] ?>" data-uri="<?php echo $addressbook['uri'] ?>">
+ <td class="active">
+ <input type="checkbox" <?php echo (($addressbook['active']) == '1' ? ' checked="checked"' : ''); ?> />
+ </td>
+ <td class="name"><?php echo $addressbook['displayname'] ?></td>
+ <td class="description"><?php echo $addressbook['description'] ?></td>
+ <td class="action">
+ <a class="svg action globe" title="<?php echo $l->t('Show CardDav link'); ?>"></a>
+ </td>
+ <td class="action">
+ <a class="svg action cloud" title="<?php echo $l->t('Show read-only VCF link'); ?>"></a>
+ </td>
+ <td class="action">
+ <a class="svg action share" data-item-type="addressbook" data-item="<?php echo $addressbook['id'] ?>" title="<?php echo $l->t("Share"); ?>"></a>
+ </td>
+ <td class="action">
+ <a class="svg action download" title="<?php echo $l->t('Download'); ?>"
+ href="<?php echo OCP\Util::linkToAbsolute('contacts', 'export.php'); ?>?bookid=<?php echo $addressbook['id'] ?>"></a>
+ </td>
+ <td class="action">
+ <a class="svg action edit" title="<?php echo $l->t("Edit"); ?>"></a>
+ </td>
+ <td class="action">
+ <a class="svg action delete" title="<?php echo $l->t("Delete"); ?>"></a>
+ </td>
+ </tr>
+ <?php } ?>
+ </table>
+ <div class="actions" style="width: 100%;">
+ <input class="active hidden" type="checkbox" />
+ <button class="new"><?php echo $l->t('New Address Book') ?></button>
+ <input class="name hidden" type="text" autofocus="autofocus" placeholder="<?php echo $l->t('Name'); ?>" />
+ <input class="description hidden" type="text" placeholder="<?php echo $l->t('Description'); ?>" />
+ <button class="save hidden"><?php echo $l->t('Save') ?></button>
+ <button class="cancel hidden"><?php echo $l->t('Cancel') ?></button>
+ </div>
+ </dd>
</dl>
- Powered by <a href="http://geonames.org/" target="_blank">geonames.org webservice</a>
+ <div style="width: 100%; clear: both;">
+ <button class="moreless"><?php echo $l->t('More...') ?></button>
+ </div>
</fieldset>
</form>
diff --git a/apps/contacts/thumbnail.php b/apps/contacts/thumbnail.php
index a64b09b6711..1e3714ae6c6 100644
--- a/apps/contacts/thumbnail.php
+++ b/apps/contacts/thumbnail.php
@@ -20,32 +20,33 @@
*
*/
-// Init owncloud
-
OCP\JSON::checkLoggedIn();
//OCP\User::checkLoggedIn();
OCP\App::checkAppEnabled('contacts');
+session_write_close();
-function getStandardImage(){
- //OCP\Response::setExpiresHeader('P10D');
+function getStandardImage() {
OCP\Response::enableCaching();
OCP\Response::redirect(OCP\Util::imagePath('contacts', 'person.png'));
}
if(!extension_loaded('gd') || !function_exists('gd_info')) {
- OCP\Util::writeLog('contacts','thumbnail.php. GD module not installed',OCP\Util::DEBUG);
+ OCP\Util::writeLog('contacts',
+ 'thumbnail.php. GD module not installed', OCP\Util::DEBUG);
getStandardImage();
exit();
}
$id = $_GET['id'];
-$caching = isset($_GET['refresh']) ? 0 : null;
+$caching = null;
$contact = OC_Contacts_App::getContactVCard($id);
// invalid vcard
-if(is_null($contact)){
- OCP\Util::writeLog('contacts','thumbnail.php. The VCard for ID '.$id.' is not RFC compatible',OCP\Util::ERROR);
+if(is_null($contact)) {
+ OCP\Util::writeLog('contacts',
+ 'thumbnail.php. The VCard for ID ' . $id . ' is not RFC compatible',
+ OCP\Util::ERROR);
getStandardImage();
exit();
}
@@ -58,25 +59,40 @@ $thumbnail_size = 23;
$image = new OC_Image();
$photo = $contact->getAsString('PHOTO');
if($photo) {
- OCP\Response::setETagHeader(md5($photo));
-
if($image->loadFromBase64($photo)) {
if($image->centerCrop()) {
if($image->resize($thumbnail_size)) {
+ $modified = OC_Contacts_App::lastModified($contact);
+ // Force refresh if modified within the last minute.
+ if(!is_null($modified)) {
+ $caching = (time() - $modified->format('U') > 60) ? null : 0;
+ }
+ OCP\Response::enableCaching($caching);
+ if(!is_null($modified)) {
+ OCP\Response::setLastModifiedHeader($modified);
+ }
+ OCP\Response::setETagHeader(md5($photo));
if($image->show()) {
- // done
exit();
} else {
- OCP\Util::writeLog('contacts','thumbnail.php. Couldn\'t display thumbnail for ID '.$id,OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts',
+ 'thumbnail.php. Couldn\'t display thumbnail for ID ' . $id,
+ OCP\Util::ERROR);
}
} else {
- OCP\Util::writeLog('contacts','thumbnail.php. Couldn\'t resize thumbnail for ID '.$id,OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts',
+ 'thumbnail.php. Couldn\'t resize thumbnail for ID ' . $id,
+ OCP\Util::ERROR);
}
}else{
- OCP\Util::writeLog('contacts','thumbnail.php. Couldn\'t crop thumbnail for ID '.$id,OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts',
+ 'thumbnail.php. Couldn\'t crop thumbnail for ID ' . $id,
+ OCP\Util::ERROR);
}
} else {
- OCP\Util::writeLog('contacts','thumbnail.php. Couldn\'t load image string for ID '.$id,OCP\Util::ERROR);
+ OCP\Util::writeLog('contacts',
+ 'thumbnail.php. Couldn\'t load image string for ID ' . $id,
+ OCP\Util::ERROR);
}
}
getStandardImage();
diff --git a/apps/contacts/dynphoto.php b/apps/contacts/tmpphoto.php
index ea6cef227e1..156d5c80308 100644
--- a/apps/contacts/dynphoto.php
+++ b/apps/contacts/tmpphoto.php
@@ -20,15 +20,14 @@
*
*/
-// Init owncloud
-
-$tmp_path = $_GET['tmp_path'];
+$tmpkey = $_GET['tmpkey'];
$maxsize = isset($_GET['maxsize']) ? $_GET['maxsize'] : -1;
header("Cache-Control: no-cache, no-store, must-revalidate");
-OCP\Util::writeLog('contacts','dynphoto.php: tmp_path: '.$tmp_path.', exists: '.file_exists($tmp_path), OCP\Util::DEBUG);
+OCP\Util::writeLog('contacts', 'tmpphoto.php: tmpkey: '.$tmpkey, OCP\Util::DEBUG);
-$image = new OC_Image($tmp_path);
+$image = new OC_Image();
+$image->loadFromData(OC_Cache::get($tmpkey));
if($maxsize != -1) {
$image->resize($maxsize);
}
diff --git a/apps/external/ajax/setsites.php b/apps/external/ajax/setsites.php
index 0dbac3abb29..0f9e061d0e0 100644
--- a/apps/external/ajax/setsites.php
+++ b/apps/external/ajax/setsites.php
@@ -1,7 +1,7 @@
<?php
/**
- * Copyright (c) 2011, Frank Karlitschek <karlitschek@kde.org>
+ * 2012 Frank Karlitschek frank@owncloud.org
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
@@ -23,4 +23,3 @@ else
OCP\Config::setAppValue('external', 'sites', json_encode($sites));
echo 'true';
-?>
diff --git a/apps/external/appinfo/app.php b/apps/external/appinfo/app.php
index b569fc305ba..1a02f3a1be8 100644
--- a/apps/external/appinfo/app.php
+++ b/apps/external/appinfo/app.php
@@ -4,7 +4,7 @@
* ownCloud - External plugin
*
* @author Frank Karlitschek
- * @copyright 2011 Frank Karlitschek karlitschek@kde.org
+ * @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
@@ -26,8 +26,6 @@ OCP\Util::addStyle( 'external', 'style');
OCP\App::registerAdmin('external', 'settings');
-OCP\App::register(array('order' => 70, 'id' => 'external', 'name' => 'External'));
-
$sites = OC_External::getSites();
for ($i = 0; $i < sizeof($sites); $i++) {
OCP\App::addNavigationEntry(
diff --git a/apps/external/img/external.png b/apps/external/img/external.png
index 75d1366326b..9e56f2919fd 100644
--- a/apps/external/img/external.png
+++ b/apps/external/img/external.png
Binary files differ
diff --git a/apps/external/index.php b/apps/external/index.php
index d63be3ad1d5..3b6f06e1bff 100644
--- a/apps/external/index.php
+++ b/apps/external/index.php
@@ -4,7 +4,7 @@
* ownCloud - External plugin
*
* @author Frank Karlitschek
- * @copyright 2011 Frank Karlitschek karlitschek@kde.org
+ * @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
@@ -40,4 +40,3 @@ if (isset($_GET['id'])) {
$tmpl->printPage();
}
}
-?>
diff --git a/apps/external/lib/external.php b/apps/external/lib/external.php
index 9fff5d5569a..d13a7cf6dd7 100644
--- a/apps/external/lib/external.php
+++ b/apps/external/lib/external.php
@@ -32,5 +32,3 @@ class OC_External {
}
}
-
-?>
diff --git a/apps/external/settings.php b/apps/external/settings.php
index c109733e548..488444c119a 100644
--- a/apps/external/settings.php
+++ b/apps/external/settings.php
@@ -7,4 +7,3 @@ OCP\Util::addscript( "external", "admin" );
$tmpl = new OCP\Template( 'external', 'settings');
return $tmpl->fetchPage();
-?>
diff --git a/apps/files/admin.php b/apps/files/admin.php
index b0c2b35c696..d05eb7267b7 100644
--- a/apps/files/admin.php
+++ b/apps/files/admin.php
@@ -51,8 +51,10 @@ $allowZipDownload = intval(OCP\Config::getSystemValue('allowZipDownload', true))
OCP\App::setActiveNavigationEntry( "files_administration" );
+$htaccessWritable=is_writable(OC::$SERVERROOT.'/.htaccess');
+
$tmpl = new OCP\Template( 'files', 'admin' );
-$tmpl->assign( 'htaccessWorking', $htaccessWorking );
+$tmpl->assign( 'uploadChangable', $htaccessWorking and $htaccessWritable );
$tmpl->assign( 'uploadMaxFilesize', $maxUploadFilesize);
$tmpl->assign( 'maxPossibleUploadSize', OCP\Util::humanFileSize(PHP_INT_MAX));
$tmpl->assign( 'allowZipDownload', $allowZipDownload);
diff --git a/apps/files/ajax/autocomplete.php b/apps/files/ajax/autocomplete.php
index 7ff34da96b3..e504bb24bf8 100644
--- a/apps/files/ajax/autocomplete.php
+++ b/apps/files/ajax/autocomplete.php
@@ -52,5 +52,3 @@ if(OC_Filesystem::file_exists($base) and OC_Filesystem::is_dir($base)){
}
}
OCP\JSON::encodedPrint($files);
-
-?>
diff --git a/apps/files/ajax/delete.php b/apps/files/ajax/delete.php
index 161d820f735..695f803884e 100644
--- a/apps/files/ajax/delete.php
+++ b/apps/files/ajax/delete.php
@@ -26,5 +26,3 @@ if($success) {
} else {
OCP\JSON::error(array("data" => array( "message" => "Could not delete:\n" . $filesWithError )));
}
-
-?>
diff --git a/apps/files/ajax/download.php b/apps/files/ajax/download.php
index e9373f5f6ac..b9a4ddaf5e7 100644
--- a/apps/files/ajax/download.php
+++ b/apps/files/ajax/download.php
@@ -34,4 +34,3 @@ $files = $_GET["files"];
$dir = $_GET["dir"];
OC_Files::get($dir, $files, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
-?>
diff --git a/apps/files/ajax/list.php b/apps/files/ajax/list.php
index ceb8d158580..dae0c1a828d 100644
--- a/apps/files/ajax/list.php
+++ b/apps/files/ajax/list.php
@@ -38,9 +38,7 @@ foreach( OC_Files::getdirectorycontent( $dir ) as $i ){
}
$list = new OCP\Template( "files", "part.list", "" );
-$list->assign( "files", $files );
+$list->assign( "files", $files, false );
$data = array('files' => $list->fetchPage());
OCP\JSON::success(array('data' => $data));
-
-?>
diff --git a/apps/files/ajax/mimeicon.php b/apps/files/ajax/mimeicon.php
index 57898cd82d9..dbb8b60112a 100644
--- a/apps/files/ajax/mimeicon.php
+++ b/apps/files/ajax/mimeicon.php
@@ -1,11 +1,3 @@
<?php
-// no need for apps
-$RUNTIME_NOAPPS=false;
-
-// Init owncloud
-
-
print OC_Helper::mimetypeIcon($_GET['mime']);
-
-?>
diff --git a/apps/files/ajax/move.php b/apps/files/ajax/move.php
index 56171dd0ed3..3d4003a8edc 100644
--- a/apps/files/ajax/move.php
+++ b/apps/files/ajax/move.php
@@ -17,5 +17,3 @@ if(OC_Files::move($dir,$file,$target,$file)){
}else{
OCP\JSON::error(array("data" => array( "message" => "Could not move $file" )));
}
-
-?>
diff --git a/apps/files/ajax/newfile.php b/apps/files/ajax/newfile.php
index 7236deb65c9..cc9208ad08f 100644
--- a/apps/files/ajax/newfile.php
+++ b/apps/files/ajax/newfile.php
@@ -1,16 +1,25 @@
<?php
// Init owncloud
+global $eventSource;
+if(!OC_User::isLoggedIn()){
+ exit;
+}
-OCP\JSON::checkLoggedIn();
-OCP\JSON::callCheck();
+session_write_close();
// Get the params
-$dir = isset( $_POST['dir'] ) ? stripslashes($_POST['dir']) : '';
-$filename = isset( $_POST['filename'] ) ? stripslashes($_POST['filename']) : '';
-$content = isset( $_POST['content'] ) ? $_POST['content'] : '';
-$source = isset( $_POST['source'] ) ? stripslashes($_POST['source']) : '';
+$dir = isset( $_REQUEST['dir'] ) ? stripslashes($_REQUEST['dir']) : '';
+$filename = isset( $_REQUEST['filename'] ) ? stripslashes($_REQUEST['filename']) : '';
+$content = isset( $_REQUEST['content'] ) ? $_REQUEST['content'] : '';
+$source = isset( $_REQUEST['source'] ) ? stripslashes($_REQUEST['source']) : '';
+
+if($source){
+ $eventSource=new OC_EventSource();
+}else{
+ OC_JSON::callCheck();
+}
if($filename == '') {
OCP\JSON::error(array("data" => array( "message" => "Empty Filename" )));
@@ -21,22 +30,49 @@ if(strpos($filename,'/')!==false){
exit();
}
+function progress($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max){
+ static $filesize = 0;
+ static $lastsize = 0;
+ global $eventSource;
+
+ switch($notification_code) {
+ case STREAM_NOTIFY_FILE_SIZE_IS:
+ $filesize = $bytes_max;
+ break;
+
+ case STREAM_NOTIFY_PROGRESS:
+ if ($bytes_transferred > 0) {
+ if (!isset($filesize)) {
+ } else {
+ $progress = (int)(($bytes_transferred/$filesize)*100);
+ if($progress>$lastsize){//limit the number or messages send
+ $eventSource->send('progress',$progress);
+ }
+ $lastsize=$progress;
+ }
+ }
+ break;
+ }
+}
+
if($source){
if(substr($source,0,8)!='https://' and substr($source,0,7)!='http://'){
OCP\JSON::error(array("data" => array( "message" => "Not a valid source" )));
exit();
}
- $sourceStream=fopen($source,'rb');
+
+ $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);
if($result){
$mime=OC_Filesystem::getMimetype($target);
- OCP\JSON::success(array("data" => array('mime'=>$mime)));
- exit();
+ $eventSource->send('success',$mime);
}else{
- OCP\JSON::error(array("data" => array( "message" => "Error while downloading ".$source. ' to '.$target )));
- exit();
+ $eventSource->send('error',"Error while downloading ".$source. ' to '.$target);
}
+ $eventSource->close();
+ exit();
}else{
if($content){
if(OC_Filesystem::file_put_contents($dir.'/'.$filename,$content)){
diff --git a/apps/files/ajax/rawlist.php b/apps/files/ajax/rawlist.php
index 7cb02f79673..d159f6e152f 100644
--- a/apps/files/ajax/rawlist.php
+++ b/apps/files/ajax/rawlist.php
@@ -22,5 +22,3 @@ foreach( OC_Files::getdirectorycontent( $dir, $mimetype ) as $i ){
}
OCP\JSON::success(array('data' => $files));
-
-?>
diff --git a/apps/files/ajax/rename.php b/apps/files/ajax/rename.php
index 8e98308eb5c..45448279fa1 100644
--- a/apps/files/ajax/rename.php
+++ b/apps/files/ajax/rename.php
@@ -18,5 +18,3 @@ if( OC_Files::move( $dir, $file, $dir, $newname )) {
else{
OCP\JSON::error(array("data" => array( "message" => "Unable to rename file" )));
}
-
-?>
diff --git a/apps/files/ajax/scan.php b/apps/files/ajax/scan.php
index d695ce81617..eef38858516 100644
--- a/apps/files/ajax/scan.php
+++ b/apps/files/ajax/scan.php
@@ -10,11 +10,17 @@ if(!$checkOnly){
$eventSource=new OC_EventSource();
}
+session_write_close();
//create the file cache if necesary
if($force or !OC_FileCache::inCache('')){
if(!$checkOnly){
OCP\DB::beginTransaction();
+
+ if(OC_Cache::isFast()){
+ OC_Cache::clear('fileid/'); //make sure the old fileid's don't mess things up
+ }
+
OC_FileCache::scan($dir,$eventSource);
OC_FileCache::clean();
OCP\DB::commit();
diff --git a/apps/files/ajax/timezone.php b/apps/files/ajax/timezone.php
index 268ae594835..0be441a36a2 100644
--- a/apps/files/ajax/timezone.php
+++ b/apps/files/ajax/timezone.php
@@ -1,6 +1,6 @@
<?php
// FIXME: this should start a secure session if forcessl is enabled
// see lib/base.php for an example
- @session_start();
+ //session_start();
$_SESSION['timezone'] = $_GET['time'];
-?>
+ \ No newline at end of file
diff --git a/apps/files/ajax/upload.php b/apps/files/ajax/upload.php
index d6c799af32c..74e6eb560d8 100644
--- a/apps/files/ajax/upload.php
+++ b/apps/files/ajax/upload.php
@@ -7,6 +7,7 @@
OCP\JSON::setContentTypeHeader('text/plain');
OCP\JSON::checkLoggedIn();
+OCP\JSON::callCheck();
if (!isset($_FILES['files'])) {
OCP\JSON::error(array("data" => array( "message" => "No file was uploaded. Unknown error" )));
@@ -48,7 +49,7 @@ if(strpos($dir,'..') === false){
for($i=0;$i<$fileCount;$i++){
$target = OCP\Files::buildNotExistingFileName(stripslashes($dir), $files['name'][$i]);
if(is_uploaded_file($files['tmp_name'][$i]) and OC_Filesystem::fromTmpFile($files['tmp_name'][$i],$target)){
- $meta=OC_FileCache::getCached($target);
+ $meta=OC_FileCache_Cached::get($target);
$result[]=array( "status" => "success", 'mime'=>$meta['mimetype'],'size'=>$meta['size'],'name'=>basename($target));
}
}
@@ -59,5 +60,3 @@ if(strpos($dir,'..') === false){
}
OCP\JSON::error(array('data' => array('error' => $error, "file" => $fileName)));
-
-?>
diff --git a/apps/files/appinfo/app.php b/apps/files/appinfo/app.php
index 5c0d3c8db83..db3b213ab8d 100644
--- a/apps/files/appinfo/app.php
+++ b/apps/files/appinfo/app.php
@@ -1,7 +1,6 @@
<?php
$l=OC_L10N::get('files');
-OCP\App::register( array( "order" => 2, "id" => "files", "name" => "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" ), "name" => $l->t("Files") ));
diff --git a/apps/files/appinfo/filesync.php b/apps/files/appinfo/filesync.php
new file mode 100644
index 00000000000..707ee2435c0
--- /dev/null
+++ b/apps/files/appinfo/filesync.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+/**
+ * filesync can be called with a PUT method.
+ * PUT takes a stream starting with a 2 byte blocksize,
+ * followed by binary md5 of the blocks. Everything in big-endian.
+ * The return is a json encoded with:
+ * - 'transferid'
+ * - 'needed' chunks
+ * - 'last' checked chunk
+ * The URL is made of 3 parts, the service url (remote.php/filesync/), the sync
+ * type and the path in ownCloud.
+ * At the moment the only supported sync type is 'oc_chunked'.
+ * The final URL will look like http://.../remote.php/filesync/oc_chunked/path/to/file
+ */
+
+// only need filesystem apps
+$RUNTIME_APPTYPES=array('filesystem','authentication');
+OC_App::loadApps($RUNTIME_APPTYPES);
+if(!OC_User::isLoggedIn()){
+ if(!isset($_SERVER['PHP_AUTH_USER'])){
+ header('WWW-Authenticate: Basic realm="ownCloud Server"');
+ header('HTTP/1.0 401 Unauthorized');
+ echo 'Valid credentials must be supplied';
+ exit();
+ } else {
+ if(!OC_User::login($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"])){
+ exit();
+ }
+ }
+}
+
+list($type,$file) = explode('/', substr($path_info,1+strlen($service)+1), 2);
+
+if ($type != 'oc_chunked') {
+ OC_Response::setStatus(OC_Response::STATUS_NOT_FOUND);
+ die;
+}
+
+if (!OC_Filesystem::is_file($file)) {
+ OC_Response::setStatus(OC_Response::STATUS_NOT_FOUND);
+ die;
+}
+
+switch($_SERVER['REQUEST_METHOD']) {
+ case 'PUT':
+ $input = fopen("php://input", "r");
+ $org_file = OC_Filesystem::fopen($file, 'rb');
+ $info = array(
+ 'name' => basename($file),
+ );
+ $sync = new OC_FileChunking($info);
+ $result = $sync->signature_split($org_file, $input);
+ echo json_encode($result);
+ break;
+ default:
+ OC_Response::setStatus(OC_Response::STATUS_NOT_FOUND);
+}
diff --git a/apps/files/appinfo/info.xml b/apps/files/appinfo/info.xml
index 105df092ce5..e58f83c5a01 100644
--- a/apps/files/appinfo/info.xml
+++ b/apps/files/appinfo/info.xml
@@ -15,5 +15,6 @@
<remote>
<files>appinfo/remote.php</files>
<webdav>appinfo/remote.php</webdav>
+ <filesync>appinfo/filesync.php</filesync>
</remote>
</info>
diff --git a/apps/files/appinfo/remote.php b/apps/files/appinfo/remote.php
index b66843556bb..a84216b61b7 100644
--- a/apps/files/appinfo/remote.php
+++ b/apps/files/appinfo/remote.php
@@ -5,7 +5,7 @@
*
* @author Frank Karlitschek
* @author Jakob Sack
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @copyright 2012 Frank Karlitschek frank@owncloud.org
* @copyright 2011 Jakob Sack kde@jakobsack.de
*
* This library is free software; you can redistribute it and/or
diff --git a/apps/files/appinfo/update.php b/apps/files/appinfo/update.php
index c3e51debb52..5514aed197f 100644
--- a/apps/files/appinfo/update.php
+++ b/apps/files/appinfo/update.php
@@ -1,13 +1,13 @@
<?php
-// fix webdav properties, remove namespace information between curly bracket update for OC4
-$installedVersion=OCP\Config::getAppValue('files', 'installed_version');
-if (version_compare($installedVersion, '1.1.2', '<')) {
- $query = OC_DB::prepare( "SELECT propertyname, propertypath, userid FROM `*PREFIX*properties`" );
- $result = $query->execute();
- while( $row = $result->fetchRow()){
- $query = OC_DB::prepare( 'UPDATE `*PREFIX*properties` SET `propertyname` = ? WHERE `userid` = ? AND `propertypath` = ?' );
- $query->execute( array( preg_replace("/^{.*}/", "", $row["propertyname"]),$row["userid"], $row["propertypath"] ));
+// fix webdav properties, remove namespace information between curly bracket (update from OC4 to OC5)
+$installedVersion=OCP\Config::getAppValue('files', 'installed_version');
+if (version_compare($installedVersion, '1.1.4', '<')) {
+ $query = OC_DB::prepare( "SELECT propertyname, propertypath, userid FROM `*PREFIX*properties`" );
+ $result = $query->execute();
+ while( $row = $result->fetchRow()){
+ $query = OC_DB::prepare( 'UPDATE *PREFIX*properties SET propertyname = ? WHERE userid = ? AND propertypath = ?' );
+ $query->execute( array( preg_replace("/^{.*}/", "", $row["propertyname"]),$row["userid"], $row["propertypath"] ));
}
}
diff --git a/apps/files/appinfo/version b/apps/files/appinfo/version
index 8428158dc5b..e25d8d9f357 100644
--- a/apps/files/appinfo/version
+++ b/apps/files/appinfo/version
@@ -1 +1 @@
-1.1.2 \ No newline at end of file
+1.1.5
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index dc298e4d440..7298a7ef6e6 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -88,4 +88,4 @@ a.action>img { max-height:16px; max-width:16px; vertical-align:text-bottom; }
#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; }
+#scanning-message{ top:40%; left:40%; position:absolute; display:none; } \ No newline at end of file
diff --git a/apps/files/download.php b/apps/files/download.php
index 2b5d4e2d876..4e2478d1ad7 100644
--- a/apps/files/download.php
+++ b/apps/files/download.php
@@ -46,4 +46,3 @@ header('Content-Length: '.OC_Filesystem::filesize($filename));
@ob_end_clean();
OC_Filesystem::readfile( $filename );
-?>
diff --git a/apps/files/index.php b/apps/files/index.php
index f6a1c4bfb4c..6d53527025a 100644
--- a/apps/files/index.php
+++ b/apps/files/index.php
@@ -74,12 +74,12 @@ foreach( explode( '/', $dir ) as $i ){
// make breadcrumb und filelist markup
$list = new OCP\Template( 'files', 'part.list', '' );
-$list->assign( 'files', $files );
-$list->assign( 'baseURL', OCP\Util::linkTo('files', 'index.php').'&dir=');
-$list->assign( 'downloadURL', OCP\Util::linkTo('files', 'download.php').'?file=');
+$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);
$breadcrumbNav = new OCP\Template( 'files', 'part.breadcrumb', '' );
-$breadcrumbNav->assign( 'breadcrumb', $breadcrumb );
-$breadcrumbNav->assign( 'baseURL', OCP\Util::linkTo('files', 'index.php').'&dir=');
+$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'));
@@ -90,14 +90,12 @@ $freeSpace=max($freeSpace,0);
$maxUploadFilesize = min($maxUploadFilesize ,$freeSpace);
$tmpl = new OCP\Template( 'files', 'index', 'user' );
-$tmpl->assign( 'fileList', $list->fetchPage() );
-$tmpl->assign( 'breadcrumb', $breadcrumbNav->fetchPage() );
-$tmpl->assign( 'dir', $dir);
-$tmpl->assign( 'readonly', !OC_Filesystem::is_writable($dir.'/'));
+$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( 'files', $files );
$tmpl->assign( 'uploadMaxFilesize', $maxUploadFilesize);
$tmpl->assign( 'uploadMaxHumanFilesize', OCP\Util::humanFileSize($maxUploadFilesize));
$tmpl->assign( 'allowZipDownload', intval(OCP\Config::getSystemValue('allowZipDownload', true)));
$tmpl->printPage();
-
-?>
diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js
index b6f4d0b0896..39e848cec80 100644
--- a/apps/files/js/fileactions.js
+++ b/apps/files/js/fileactions.js
@@ -1,19 +1,28 @@
FileActions={
+ PERMISSION_CREATE:4,
+ PERMISSION_READ:1,
+ PERMISSION_UPDATE:2,
+ PERMISSION_DELETE:8,
+ PERMISSION_SHARE:16,
actions:{},
defaults:{},
icons:{},
currentFile:null,
- register:function(mime,name,icon,action){
+ register:function(mime,name,permissions,icon,action){
if(!FileActions.actions[mime]){
FileActions.actions[mime]={};
}
- FileActions.actions[mime][name]=action;
+ if (!FileActions.actions[mime][name]) {
+ FileActions.actions[mime][name] = {};
+ }
+ FileActions.actions[mime][name]['action'] = action;
+ FileActions.actions[mime][name]['permissions'] = permissions;
FileActions.icons[name]=icon;
},
setDefault:function(mime,name){
FileActions.defaults[mime]=name;
},
- get:function(mime,type){
+ get:function(mime,type,permissions){
var actions={};
if(FileActions.actions.all){
actions=$.extend( actions, FileActions.actions.all )
@@ -32,9 +41,15 @@ FileActions={
actions=$.extend( actions, FileActions.actions[type] )
}
}
- return actions;
+ var filteredActions = {};
+ $.each(actions, function(name, action) {
+ if (action.permissions & permissions) {
+ filteredActions[name] = action.action;
+ }
+ });
+ return filteredActions;
},
- getDefault:function(mime,type){
+ getDefault:function(mime,type,permissions){
if(mime){
var mimePart=mime.substr(0,mime.indexOf('/'));
}
@@ -48,22 +63,20 @@ FileActions={
}else{
name=FileActions.defaults.all;
}
- var actions=this.get(mime,type);
+ var actions=this.get(mime,type,permissions);
return actions[name];
},
- display:function(parent, filename, type){
+ display:function(parent){
FileActions.currentFile=parent;
$('#fileList span.fileactions, #fileList td.date a.action').remove();
- var actions=FileActions.get(FileActions.getCurrentMimeType(),FileActions.getCurrentType());
+ var actions=FileActions.get(FileActions.getCurrentMimeType(),FileActions.getCurrentType(), FileActions.getCurrentPermissions());
var file=FileActions.getCurrentFile();
if($('tr').filterAttr('data-file',file).data('renaming')){
return;
}
parent.children('a.name').append('<span class="fileactions" />');
- var defaultAction=FileActions.getDefault(FileActions.getCurrentMimeType(),FileActions.getCurrentType());
+ var defaultAction=FileActions.getDefault(FileActions.getCurrentMimeType(),FileActions.getCurrentType(), FileActions.getCurrentPermissions());
for(name in actions){
- // no rename and share action for the 'Shared' dir
- if((name=='Rename' || name =='Share') && type=='dir' && filename=='Shared') { continue; }
if((name=='Download' || actions[name]!=defaultAction) && name!='Delete'){
var img=FileActions.icons[name];
if(img.call){
@@ -86,16 +99,12 @@ FileActions={
parent.find('a.name>span.fileactions').append(element);
}
}
- if(actions['Delete'] && (type!='dir' || filename != 'Shared')){ // no delete action for the 'Shared' dir
+ if(actions['Delete']){
var img=FileActions.icons['Delete'];
if(img.call){
img=img(file);
}
- if ($('#dir').val().indexOf('Shared') != -1) {
- var html='<a href="#" original-title="' + t('files', 'Unshare') + '" class="action delete" style="display:none" />';
- } else {
- var html='<a href="#" original-title="' + t('files', 'Delete') + '" class="action delete" style="display:none" />';
- }
+ var html='<a href="#" original-title="' + t('files', 'Delete') + '" class="action delete" style="display:none" />';
var element=$(html);
if(img){
element.append($('<img src="'+img+'"/>'));
@@ -131,6 +140,9 @@ FileActions={
},
getCurrentType:function(){
return FileActions.currentFile.parent().attr('data-type');
+ },
+ getCurrentPermissions:function() {
+ return FileActions.currentFile.parent().data('permissions');
}
}
@@ -140,12 +152,12 @@ $(document).ready(function(){
} else {
var downloadScope = 'file';
}
- FileActions.register(downloadScope,'Download',function(){return OC.imagePath('core','actions/download')},function(filename){
+ FileActions.register(downloadScope,'Download', FileActions.PERMISSION_READ, function(){return OC.imagePath('core','actions/download')},function(filename){
window.location=OC.filePath('files', 'ajax', 'download.php') + encodeURIComponent('?files='+encodeURIComponent(filename)+'&dir='+encodeURIComponent($('#dir').val()));
});
});
-FileActions.register('all','Delete',function(){return OC.imagePath('core','actions/delete')},function(filename){
+FileActions.register('all','Delete', FileActions.PERMISSION_DELETE, function(){return OC.imagePath('core','actions/delete')},function(filename){
if(Files.cancelUpload(filename)) {
if(filename.substr){
filename=[filename];
@@ -163,11 +175,11 @@ FileActions.register('all','Delete',function(){return OC.imagePath('core','actio
$('.tipsy').remove();
});
-FileActions.register('all','Rename',function(){return OC.imagePath('core','actions/rename')},function(filename){
+FileActions.register('all','Rename', FileActions.PERMISSION_UPDATE, function(){return OC.imagePath('core','actions/rename')},function(filename){
FileList.rename(filename);
});
-FileActions.register('dir','Open','',function(filename){
+FileActions.register('dir','Open', FileActions.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 c3eb906f39e..e0cf516411a 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -136,24 +136,39 @@ FileList={
event.stopPropagation();
event.preventDefault();
var newname=input.val();
- tr.attr('data-file',newname);
- td.children('a.name').empty();
+ if (newname != name) {
+ if ($('tr').filterAttr('data-file', newname).length > 0) {
+ $('#notification').html(newname+' '+t('files', 'already exists')+'<span class="replace">'+t('files', 'replace')+'</span><span class="cancel">'+t('files', 'cancel')+'</span>');
+ $('#notification').data('oldName', name);
+ $('#notification').data('newName', newname);
+ $('#notification').fadeIn();
+ newname = name;
+ } else {
+ $.get(OC.filePath('files','ajax','rename.php'), { dir : $('#dir').val(), newname: newname, file: name },function(result) {
+ if (!result || result.status == 'error') {
+ OC.dialogs.alert(result.data.message, 'Error moving file');
+ newname = name;
+ }
+ });
+ }
+
+ }
+ tr.attr('data-file', newname);
var path = td.children('a.name').attr('href');
td.children('a.name').attr('href', path.replace(encodeURIComponent(name), encodeURIComponent(newname)));
- if(newname.indexOf('.')>0){
- basename=newname.substr(0,newname.lastIndexOf('.'));
- }else{
- basename=newname;
+ if (newname.indexOf('.') > 0) {
+ var basename=newname.substr(0,newname.lastIndexOf('.'));
+ } else {
+ var basename=newname;
}
+ td.children('a.name').empty();
var span=$('<span class="nametext"></span>');
span.text(basename);
td.children('a.name').append(span);
- if(newname.indexOf('.')>0){
+ if (newname.indexOf('.') > 0) {
span.append($('<span class="extension">'+newname.substr(newname.lastIndexOf('.'))+'</span>'));
}
- $.get(OC.filePath('files','ajax','rename.php'), { dir : $('#dir').val(), newname: newname, file: name },function(){
- tr.data('renaming',false);
- });
+ tr.data('renaming',false);
return false;
});
input.click(function(event){
@@ -164,19 +179,71 @@ FileList={
form.trigger('submit');
});
},
+ replace:function(oldName, newName) {
+ // Finish any existing actions
+ if (FileList.lastAction || !FileList.useUndo) {
+ FileList.lastAction();
+ }
+ var tr = $('tr').filterAttr('data-file', oldName);
+ tr.hide();
+ FileList.replaceCanceled = false;
+ FileList.replaceOldName = oldName;
+ FileList.replaceNewName = newName;
+ FileList.lastAction = function() {
+ FileList.finishReplace();
+ };
+ $('#notification').html(t('files', 'replaced')+' '+newName+' '+t('files', 'with')+' '+oldName+'<span class="undo">'+t('files', 'undo')+'</span>');
+ $('#notification').fadeIn();
+ },
+ finishReplace:function() {
+ if (!FileList.replaceCanceled && FileList.replaceOldName && FileList.replaceNewName) {
+ // Delete the file being replaced and rename the replacement
+ FileList.deleteCanceled = false;
+ FileList.deleteFiles = [FileList.replaceNewName];
+ FileList.finishDelete(function() {
+ $.ajax({url: OC.filePath('files', 'ajax', 'rename.php'), async: false, data: { dir: $('#dir').val(), newname: FileList.replaceNewName, file: FileList.replaceOldName }, success: function(result) {
+ if (result && result.status == 'success') {
+ var tr = $('tr').filterAttr('data-file', FileList.replaceOldName);
+ tr.attr('data-file', FileList.replaceNewName);
+ var td = tr.children('td.filename');
+ td.children('a.name .span').text(FileList.replaceNewName);
+ var path = td.children('a.name').attr('href');
+ td.children('a.name').attr('href', path.replace(encodeURIComponent(FileList.replaceOldName), encodeURIComponent(FileList.replaceNewName)));
+ if (FileList.replaceNewName.indexOf('.') > 0) {
+ var basename = FileList.replaceNewName.substr(0, FileList.replaceNewName.lastIndexOf('.'));
+ } else {
+ var basename = FileList.replaceNewName;
+ }
+ td.children('a.name').empty();
+ var span = $('<span class="nametext"></span>');
+ span.text(basename);
+ td.children('a.name').append(span);
+ if (FileList.replaceNewName.indexOf('.') > 0) {
+ span.append($('<span class="extension">'+FileList.replaceNewName.substr(FileList.replaceNewName.lastIndexOf('.'))+'</span>'));
+ }
+ tr.show();
+ } else {
+ OC.dialogs.alert(result.data.message, 'Error moving file');
+ }
+ FileList.replaceCanceled = true;
+ FileList.replaceOldName = null;
+ FileList.replaceNewName = null;
+ FileList.lastAction = null;
+ }});
+ }, true);
+ }
+ },
do_delete:function(files){
- if(FileList.deleteFiles || !FileList.useUndo){//finish any ongoing deletes first
+ // Finish any existing actions
+ if (FileList.lastAction || !FileList.useUndo) {
if(!FileList.deleteFiles) {
FileList.prepareDeletion(files);
}
- FileList.finishDelete(function(){
- FileList.do_delete(files);
- });
+ FileList.lastAction();
return;
}
FileList.prepareDeletion(files);
- $('#notification').text(t('files','undo deletion'));
- $('#notification').data('deletefile',true);
+ $('#notification').html(t('files', 'deleted')+' '+files+'<span class="undo">'+t('files', 'undo')+'</span>');
$('#notification').fadeIn();
},
finishDelete:function(ready,sync){
@@ -194,6 +261,7 @@ FileList={
});
FileList.deleteCanceled=true;
FileList.deleteFiles=null;
+ FileList.lastAction = null;
if(ready){
ready();
}
@@ -215,25 +283,42 @@ FileList={
procesSelection();
FileList.deleteCanceled=false;
FileList.deleteFiles=files;
+ FileList.lastAction = function() {
+ FileList.finishDelete(null, true);
+ };
}
}
$(document).ready(function(){
$('#notification').hide();
- $('#notification').click(function(){
- if($('#notification').data('deletefile'))
- {
+ $('#notification .undo').live('click', function(){
+ if (FileList.deleteFiles) {
$.each(FileList.deleteFiles,function(index,file){
$('tr').filterAttr('data-file',file).show();
-// alert(file);
});
FileList.deleteCanceled=true;
FileList.deleteFiles=null;
+ } else if (FileList.replaceOldName && FileList.replaceNewName) {
+ $('tr').filterAttr('data-file', FileList.replaceOldName).show();
+ FileList.replaceCanceled = true;
+ FileList.replaceOldName = null;
+ FileList.replaceNewName = null;
}
+ FileList.lastAction = null;
+ $('#notification').fadeOut();
+ });
+ $('#notification .replace').live('click', function() {
+ $('#notification').fadeOut('400', function() {
+ FileList.replace($('#notification').data('oldName'), $('#notification').data('newName'));
+ });
+ });
+ $('#notification .cancel').live('click', function() {
$('#notification').fadeOut();
});
FileList.useUndo=('onbeforeunload' in window)
$(window).bind('beforeunload', function (){
- FileList.finishDelete(null,true);
+ if (FileList.lastAction) {
+ FileList.lastAction();
+ }
});
});
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index 46dbe28f049..049afea4f61 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -56,7 +56,7 @@ $(document).ready(function() {
// Sets the file-action buttons behaviour :
$('tr').live('mouseenter',function(event) {
- FileActions.display($(this).children('td.filename'), $(this).attr('data-file'), $(this).attr('data-type'));
+ FileActions.display($(this).children('td.filename'));
});
$('tr').live('mouseleave',function(event) {
FileActions.hide();
@@ -106,7 +106,8 @@ $(document).ready(function() {
if(!renaming && !FileList.isLoading(filename)){
var mime=$(this).parent().parent().data('mime');
var type=$(this).parent().parent().data('type');
- var action=FileActions.getDefault(mime,type);
+ var permissions = $(this).parent().parent().data('permissions');
+ var action=FileActions.getDefault(mime,type, permissions);
if(action){
action(filename);
}
@@ -194,6 +195,11 @@ $(document).ready(function() {
var totalSize=0;
if(files){
for(var i=0;i<files.length;i++){
+ if(files[i].size ==0 && files[i].type== '')
+ {
+ OC.dialogs.alert(t('files', 'Unable to upload your file as it is a directory or has 0 bytes'), t('files', 'Upload Error'));
+ 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(){
@@ -213,115 +219,6 @@ $(document).ready(function() {
}
});
}else{
- if($.support.xhrFileUpload) {
- for(var i=0;i<files.length;i++){
- var fileName = files[i].name
- var dropTarget = $(e.originalEvent.target).closest('tr');
- if(dropTarget && dropTarget.attr('data-type') === 'dir') { // drag&drop upload to folder
- var dirName = dropTarget.attr('data-file')
- var jqXHR = $('.file_upload_start').fileupload('send', {files: files[i],
- formData: function(form) {
- var formArray = form.serializeArray();
- formArray[1]['value'] = dirName;
- return formArray;
- }}).success(function(result, textStatus, jqXHR) {
- var response;
- response=jQuery.parseJSON(result);
- if(response[0] == undefined || response[0].status != 'success') {
- $('#notification').text(t('files', response.data.message));
- $('#notification').fadeIn();
- }
- var file=response[0];
- delete uploadingFiles[dirName][file.name];
- var currentUploads = parseInt(uploadtext.attr('currentUploads'));
- currentUploads -= 1;
- uploadtext.attr('currentUploads', currentUploads);
- if(currentUploads === 0) {
- var img = OC.imagePath('core', 'filetypes/folder.png');
- var tr=$('tr').filterAttr('data-file',dirName);
- tr.find('td.filename').attr('style','background-image:url('+img+')');
- uploadtext.text('');
- uploadtext.hide();
- } else {
- uploadtext.text(currentUploads + ' files uploading')
- }
- })
- .error(function(jqXHR, textStatus, errorThrown) {
- if(errorThrown === 'abort') {
- var currentUploads = parseInt(uploadtext.attr('currentUploads'));
- currentUploads -= 1;
- uploadtext.attr('currentUploads', currentUploads);
- if(currentUploads === 0) {
- var img = OC.imagePath('core', 'filetypes/folder.png');
- var tr=$('tr').filterAttr('data-file',dirName);
- tr.find('td.filename').attr('style','background-image:url('+img+')');
- uploadtext.text('');
- uploadtext.hide();
- } else {
- uploadtext.text(currentUploads + ' files uploading')
- }
- $('#notification').hide();
- $('#notification').text(t('files', 'Upload cancelled.'));
- $('#notification').fadeIn();
- }
- });
- //TODO test with filenames containing slashes
- if(uploadingFiles[dirName] === undefined) {
- uploadingFiles[dirName] = {};
- }
- uploadingFiles[dirName][fileName] = jqXHR;
- } else {
- var jqXHR = $('.file_upload_start').fileupload('send', {files: files[i]})
- .success(function(result, textStatus, jqXHR) {
- var response;
- response=jQuery.parseJSON(result);
- if(response[0] != undefined && response[0].status == 'success') {
- var file=response[0];
- delete uploadingFiles[file.name];
- $('tr').filterAttr('data-file',file.name).data('mime',file.mime);
- var size = $('tr').filterAttr('data-file',file.name).find('td.filesize').text();
- if(size==t('files','Pending')){
- $('tr').filterAttr('data-file',file.name).find('td.filesize').text(file.size);
- }
- FileList.loadingDone(file.name);
- } else {
- $('#notification').text(t('files', response.data.message));
- $('#notification').fadeIn();
- $('#fileList > tr').not('[data-mime]').fadeOut();
- $('#fileList > tr').not('[data-mime]').remove();
- }
- })
- .error(function(jqXHR, textStatus, errorThrown) {
- if(errorThrown === 'abort') {
- $('#notification').hide();
- $('#notification').text(t('files', 'Upload cancelled.'));
- $('#notification').fadeIn();
- }
- });
- uploadingFiles[files[i].name] = jqXHR;
- }
- }
- }else{
- data.submit().success(function(data, status) {
- response = jQuery.parseJSON(data[0].body.innerText);
- if(response[0] != undefined && response[0].status == 'success') {
- var file=response[0];
- delete uploadingFiles[file.name];
- $('tr').filterAttr('data-file',file.name).data('mime',file.mime);
- var size = $('tr').filterAttr('data-file',file.name).find('td.filesize').text();
- if(size==t('files','Pending')){
- $('tr').filterAttr('data-file',file.name).find('td.filesize').text(file.size);
- }
- FileList.loadingDone(file.name);
- } else {
- $('#notification').text(t('files', response.data.message));
- $('#notification').fadeIn();
- $('#fileList > tr').not('[data-mime]').fadeOut();
- $('#fileList > tr').not('[data-mime]').remove();
- }
- });
- }
-
var date=new Date();
if(files){
for(var i=0;i<files.length;i++){
@@ -331,7 +228,7 @@ $(document).ready(function() {
var size=t('files','Pending');
}
if(files && !dirName){
- FileList.addFile(getUniqueName(files[i].name),size,date,true);
+ FileList.addFile(getUniqueName(files[i].name),size,date,true);
} else if(dirName) {
var uploadtext = $('tr').filterAttr('data-type', 'dir').filterAttr('data-file', dirName).find('.uploadtext')
var currentUploads = parseInt(uploadtext.attr('currentUploads'));
@@ -350,7 +247,115 @@ $(document).ready(function() {
}
}else{
var filename=this.value.split('\\').pop(); //ie prepends C:\fakepath\ in front of the filename
- FileList.addFile(getUniqueName(filename),'Pending',date,true);
+ FileList.addFile(getUniqueName(filename),'Pending',date,true);
+ }
+ if($.support.xhrFileUpload) {
+ for(var i=0;i<files.length;i++){
+ var fileName = files[i].name
+ var dropTarget = $(e.originalEvent.target).closest('tr');
+ if(dropTarget && dropTarget.attr('data-type') === 'dir') { // drag&drop upload to folder
+ var dirName = dropTarget.attr('data-file')
+ var jqXHR = $('.file_upload_start').fileupload('send', {files: files[i],
+ formData: function(form) {
+ var formArray = form.serializeArray();
+ formArray[1]['value'] = dirName;
+ return formArray;
+ }}).success(function(result, textStatus, jqXHR) {
+ var response;
+ response=jQuery.parseJSON(result);
+ if(response[0] == undefined || response[0].status != 'success') {
+ $('#notification').text(t('files', response.data.message));
+ $('#notification').fadeIn();
+ }
+ var file=response[0];
+ delete uploadingFiles[dirName][file.name];
+ var currentUploads = parseInt(uploadtext.attr('currentUploads'));
+ currentUploads -= 1;
+ uploadtext.attr('currentUploads', currentUploads);
+ if(currentUploads === 0) {
+ var img = OC.imagePath('core', 'filetypes/folder.png');
+ var tr=$('tr').filterAttr('data-file',dirName);
+ tr.find('td.filename').attr('style','background-image:url('+img+')');
+ uploadtext.text('');
+ uploadtext.hide();
+ } else {
+ uploadtext.text(currentUploads + ' files uploading')
+ }
+ })
+ .error(function(jqXHR, textStatus, errorThrown) {
+ if(errorThrown === 'abort') {
+ var currentUploads = parseInt(uploadtext.attr('currentUploads'));
+ currentUploads -= 1;
+ uploadtext.attr('currentUploads', currentUploads);
+ if(currentUploads === 0) {
+ var img = OC.imagePath('core', 'filetypes/folder.png');
+ var tr=$('tr').filterAttr('data-file',dirName);
+ tr.find('td.filename').attr('style','background-image:url('+img+')');
+ uploadtext.text('');
+ uploadtext.hide();
+ } else {
+ uploadtext.text(currentUploads + ' files uploading')
+ }
+ $('#notification').hide();
+ $('#notification').text(t('files', 'Upload cancelled.'));
+ $('#notification').fadeIn();
+ }
+ });
+ //TODO test with filenames containing slashes
+ if(uploadingFiles[dirName] === undefined) {
+ uploadingFiles[dirName] = {};
+ }
+ uploadingFiles[dirName][fileName] = jqXHR;
+ } else {
+ var jqXHR = $('.file_upload_start').fileupload('send', {files: files[i]})
+ .success(function(result, textStatus, jqXHR) {
+ var response;
+ response=jQuery.parseJSON(result);
+ if(response[0] != undefined && response[0].status == 'success') {
+ var file=response[0];
+ delete uploadingFiles[file.name];
+ $('tr').filterAttr('data-file',file.name).data('mime',file.mime);
+ var size = $('tr').filterAttr('data-file',file.name).find('td.filesize').text();
+ if(size==t('files','Pending')){
+ $('tr').filterAttr('data-file',file.name).find('td.filesize').text(file.size);
+ }
+ FileList.loadingDone(file.name);
+ } else {
+ $('#notification').text(t('files', response.data.message));
+ $('#notification').fadeIn();
+ $('#fileList > tr').not('[data-mime]').fadeOut();
+ $('#fileList > tr').not('[data-mime]').remove();
+ }
+ })
+ .error(function(jqXHR, textStatus, errorThrown) {
+ if(errorThrown === 'abort') {
+ $('#notification').hide();
+ $('#notification').text(t('files', 'Upload cancelled.'));
+ $('#notification').fadeIn();
+ }
+ });
+ uploadingFiles[files[i].name] = jqXHR;
+ }
+ }
+ }else{
+ data.submit().success(function(data, status) {
+ response = jQuery.parseJSON(data[0].body.innerText);
+ if(response[0] != undefined && response[0].status == 'success') {
+ var file=response[0];
+ delete uploadingFiles[file.name];
+ $('tr').filterAttr('data-file',file.name).data('mime',file.mime);
+ var size = $('tr').filterAttr('data-file',file.name).find('td.filesize').text();
+ if(size==t('files','Pending')){
+ $('tr').filterAttr('data-file',file.name).find('td.filesize').text(file.size);
+ }
+ FileList.loadingDone(file.name);
+ } else {
+ $('#notification').text(t('files', response.data.message));
+ $('#notification').fadeIn();
+ $('#fileList > tr').not('[data-mime]').fadeOut();
+ $('#fileList > tr').not('[data-mime]').remove();
+ }
+ });
}
}
},
@@ -447,7 +452,7 @@ $(document).ready(function() {
$(this).append(input);
input.focus();
input.change(function(){
- var name=$(this).val();
+ var name=getUniqueName($(this).val());
if(type != 'web' && name.indexOf('/')!=-1){
$('#notification').text(t('files','Invalid name, \'/\' is not allowed.'));
$('#notification').fadeIn();
@@ -458,14 +463,18 @@ $(document).ready(function() {
$.post(
OC.filePath('files','ajax','newfile.php'),
{dir:$('#dir').val(),filename:name,content:" \n"},
- function(data){
- var date=new Date();
- FileList.addFile(name,0,date);
- var tr=$('tr').filterAttr('data-file',name);
- tr.data('mime','text/plain');
- getMimeIcon('text/plain',function(path){
- tr.find('td.filename').attr('style','background-image:url('+path+')');
- });
+ function(result){
+ if (result.status == 'success') {
+ var date=new Date();
+ FileList.addFile(name,0,date);
+ var tr=$('tr').filterAttr('data-file',name);
+ tr.data('mime','text/plain');
+ getMimeIcon('text/plain',function(path){
+ tr.find('td.filename').attr('style','background-image:url('+path+')');
+ });
+ } else {
+ OC.dialogs.alert(result.data.message, 'Error');
+ }
}
);
break;
@@ -473,9 +482,13 @@ $(document).ready(function() {
$.post(
OC.filePath('files','ajax','newfolder.php'),
{dir:$('#dir').val(),foldername:name},
- function(data){
- var date=new Date();
- FileList.addDir(name,0,date);
+ function(result){
+ if (result.status == 'success') {
+ var date=new Date();
+ FileList.addDir(name,0,date);
+ } else {
+ OC.dialogs.alert(result.data.message, 'Error');
+ }
}
);
break;
@@ -492,23 +505,28 @@ $(document).ready(function() {
}else{//or the domain
localName=(localName.match(/:\/\/(.[^/]+)/)[1]).replace('www.','');
}
- $.post(
- OC.filePath('files','ajax','newfile.php'),
- {dir:$('#dir').val(),source:name,filename:localName},
- function(result){
- if(result.status == 'success'){
- var date=new Date();
- FileList.addFile(localName,0,date);
- var tr=$('tr').filterAttr('data-file',localName);
- tr.data('mime',result.data.mime);
- getMimeIcon(result.data.mime,function(path){
- tr.find('td.filename').attr('style','background-image:url('+path+')');
- });
- }else{
+ localName = getUniqueName(localName);
+ $('#uploadprogressbar').progressbar({value:0});
+ $('#uploadprogressbar').fadeIn();
- }
- }
- );
+ var eventSource=new OC.EventSource(OC.filePath('files','ajax','newfile.php'),{dir:$('#dir').val(),source:name,filename:localName});
+ eventSource.listen('progress',function(progress){
+ $('#uploadprogressbar').progressbar('value',progress);
+ });
+ eventSource.listen('success',function(mime){
+ $('#uploadprogressbar').fadeOut();
+ var date=new Date();
+ FileList.addFile(localName,0,date);
+ var tr=$('tr').filterAttr('data-file',localName);
+ tr.data('mime',mime);
+ getMimeIcon(mime,function(path){
+ tr.find('td.filename').attr('style','background-image:url('+path+')');
+ });
+ });
+ eventSource.listen('error',function(error){
+ $('#uploadprogressbar').fadeOut();
+ alert(error);
+ });
break;
}
var li=$(this).parent();
@@ -524,6 +542,69 @@ $(document).ready(function() {
scanFiles();
}
}, "json");
+
+ var lastWidth = 0;
+ var breadcrumbs = [];
+ var breadcrumbsWidth = $('#navigation').get(0).offsetWidth;
+ var hiddenBreadcrumbs = 0;
+
+ $.each($('.crumb'), function(index, breadcrumb) {
+ breadcrumbs[index] = breadcrumb;
+ breadcrumbsWidth += $(breadcrumb).get(0).offsetWidth;
+ });
+
+ if ($('#controls .actions').length > 0) {
+ breadcrumbsWidth += $('#controls .actions').get(0).offsetWidth;
+ }
+
+ function resizeBreadcrumbs(firstRun) {
+ var width = $(this).width();
+ if (width != lastWidth) {
+ if ((width < lastWidth || firstRun) && width < breadcrumbsWidth) {
+ if (hiddenBreadcrumbs == 0) {
+ breadcrumbsWidth -= $(breadcrumbs[1]).get(0).offsetWidth;
+ $(breadcrumbs[1]).find('a').hide();
+ $(breadcrumbs[1]).append('<span>...</span>');
+ breadcrumbsWidth += $(breadcrumbs[1]).get(0).offsetWidth;
+ hiddenBreadcrumbs = 2;
+ }
+ var i = hiddenBreadcrumbs;
+ while (width < breadcrumbsWidth && i > 1 && i < breadcrumbs.length - 1) {
+ breadcrumbsWidth -= $(breadcrumbs[i]).get(0).offsetWidth;
+ $(breadcrumbs[i]).hide();
+ hiddenBreadcrumbs = i;
+ i++
+ }
+ } else if (width > lastWidth && hiddenBreadcrumbs > 0) {
+ var i = hiddenBreadcrumbs;
+ while (width > breadcrumbsWidth && i > 0) {
+ if (hiddenBreadcrumbs == 1) {
+ breadcrumbsWidth -= $(breadcrumbs[1]).get(0).offsetWidth;
+ $(breadcrumbs[1]).find('span').remove();
+ $(breadcrumbs[1]).find('a').show();
+ breadcrumbsWidth += $(breadcrumbs[1]).get(0).offsetWidth;
+ } else {
+ $(breadcrumbs[i]).show();
+ breadcrumbsWidth += $(breadcrumbs[i]).get(0).offsetWidth;
+ if (breadcrumbsWidth > width) {
+ breadcrumbsWidth -= $(breadcrumbs[i]).get(0).offsetWidth;
+ $(breadcrumbs[i]).hide();
+ break;
+ }
+ }
+ i--;
+ hiddenBreadcrumbs = i;
+ }
+ }
+ lastWidth = width;
+ }
+ }
+
+ $(window).resize(function() {
+ resizeBreadcrumbs(false);
+ });
+
+ resizeBreadcrumbs(true);
});
function scanFiles(force,dir){
@@ -733,7 +814,10 @@ getMimeIcon.cache={};
function getUniqueName(name){
if($('tr').filterAttr('data-file',name).length>0){
var parts=name.split('.');
- var extension=parts.pop();
+ var extension = "";
+ if (parts.length > 1) {
+ extension=parts.pop();
+ }
var base=parts.join('.');
numMatch=base.match(/\((\d+)\)/);
var num=2;
@@ -743,7 +827,10 @@ function getUniqueName(name){
base.pop();
base=base.join('(').trim();
}
- name=base+' ('+num+').'+extension;
+ name=base+' ('+num+')';
+ if (extension) {
+ name = name+'.'+extension;
+ }
return getUniqueName(name);
}
return name;
diff --git a/apps/files/l10n/ar.php b/apps/files/l10n/ar.php
index 91e748e3002..724152dc11d 100644
--- a/apps/files/l10n/ar.php
+++ b/apps/files/l10n/ar.php
@@ -6,6 +6,7 @@
"No file was uploaded" => "لم يتم ترÙيع أي من الملÙات",
"Missing a temporary folder" => "المجلد المؤقت غير موجود",
"Files" => "الملÙات",
+"Delete" => "محذوÙ",
"Size" => "حجم",
"Modified" => "معدل",
"Maximum upload size" => "الحد الأقصى لحجم الملÙات التي يمكن رÙعها",
@@ -16,6 +17,8 @@
"Nothing in here. Upload something!" => "لا يوجد شيء هنا. إرÙع بعض الملÙات!",
"Name" => "الاسم",
"Download" => "تحميل",
+"Size" => "حجم",
+"Modified" => "معدل",
"Delete" => "محذوÙ",
"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 83b36087310..89fc4544344 100644
--- a/apps/files/l10n/bg_BG.php
+++ b/apps/files/l10n/bg_BG.php
@@ -5,15 +5,33 @@
"The uploaded file was only partially uploaded" => "Файлът е качен чаÑтично",
"No file was uploaded" => "Фахлът не бе качен",
"Missing a temporary folder" => "ЛипÑва временната папка",
+"Failed to write to disk" => "Грешка при Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° диÑка",
"Files" => "Файлове",
+"Delete" => "Изтриване",
+"Upload Error" => "Грешка при качване",
+"Upload cancelled." => "Качването е отменено.",
+"Invalid name, '/' is not allowed." => "Ðеправилно име – \"/\" не е позволено.",
"Size" => "Размер",
"Modified" => "Променено",
+"folder" => "папка",
+"folders" => "папки",
+"file" => "файл",
"Maximum upload size" => "МакÑ. размер за качване",
+"0 is unlimited" => "0 означава без ограничение",
+"New" => "Ðов",
+"Text file" => "ТекÑтов файл",
+"Folder" => "Папка",
+"From url" => "От url-адреÑ",
"Upload" => "Качване",
+"Cancel upload" => "Отказване на качването",
"Nothing in here. Upload something!" => "ÐÑма нищо, качете нещо!",
"Name" => "Име",
+"Share" => "СподелÑне",
"Download" => "ИзтеглÑне",
+"Size" => "Размер",
+"Modified" => "Променено",
"Delete" => "Изтриване",
"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." => "Файловете Ñе претърÑват, изчакайте."
);
diff --git a/apps/files/l10n/ca.php b/apps/files/l10n/ca.php
index baa6b3b7d45..e48148421b8 100644
--- a/apps/files/l10n/ca.php
+++ b/apps/files/l10n/ca.php
@@ -7,8 +7,26 @@
"Missing a temporary folder" => "S'ha perdut un fitxer temporal",
"Failed to write to disk" => "Ha fallat en escriure al disc",
"Files" => "Fitxers",
+"Delete" => "Suprimeix",
+"already exists" => "ja existeix",
+"replace" => "substitueix",
+"cancel" => "cancel·la",
+"replaced" => "substituït",
+"with" => "per",
+"undo" => "desfés",
+"deleted" => "esborrat",
+"generating ZIP-file, it may take some time." => "s'estan generant fitxers ZIP, pot trigar una estona.",
+"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",
+"Pending" => "Pendents",
+"Upload cancelled." => "La pujada s'ha cancel·lat.",
+"Invalid name, '/' is not allowed." => "El nom no és vàlid, no es permet '/'.",
"Size" => "Mida",
"Modified" => "Modificat",
+"folder" => "carpeta",
+"folders" => "carpetes",
+"file" => "fitxer",
+"files" => "fitxers",
"File handling" => "Gestió de fitxers",
"Maximum upload size" => "Mida màxima de pujada",
"max. possible: " => "màxim possible:",
@@ -26,6 +44,9 @@
"Name" => "Nom",
"Share" => "Comparteix",
"Download" => "Baixa",
+"Size" => "Mida",
+"Modified" => "Modificat",
+"Delete all" => "Esborra-ho tot",
"Delete" => "Suprimeix",
"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",
diff --git a/apps/files/l10n/cs_CZ.php b/apps/files/l10n/cs_CZ.php
index 9a4be26dadb..38f235343c3 100644
--- a/apps/files/l10n/cs_CZ.php
+++ b/apps/files/l10n/cs_CZ.php
@@ -7,8 +7,26 @@
"Missing a temporary folder" => "Chybí adresář pro soÄasné soubory",
"Failed to write to disk" => "Zápis na disk se nezdařil",
"Files" => "Soubory",
+"Delete" => "Vymazat",
+"already exists" => "již existuje",
+"replace" => "zaměnit",
+"cancel" => "storno",
+"replaced" => "zaměněno",
+"with" => "s",
+"undo" => "zpět",
+"deleted" => "smazáno",
+"generating ZIP-file, it may take some time." => "generuji ZIP soubor, může to chvíli trvat",
+"Unable to upload your file as it is a directory or has 0 bytes" => "Nemohu nahrát váš soubor neboť to je adresář a nebo má nulovou délku.",
+"Upload Error" => "Chyba při nahrávání",
+"Pending" => "OÄekává se",
+"Upload cancelled." => "Nahrávání zrušeno",
+"Invalid name, '/' is not allowed." => "Špatné jméno, znak '/' není povolen",
"Size" => "Velikost",
"Modified" => "Změněno",
+"folder" => "adresář",
+"folders" => "adresáře",
+"file" => "soubor",
+"files" => "soubory",
"File handling" => "Nastavení chování k souborům",
"Maximum upload size" => "Maximální velikost ukládaných souborů",
"max. possible: " => "největší možná:",
@@ -26,6 +44,9 @@
"Name" => "Název",
"Share" => "Sdílet",
"Download" => "Stáhnout",
+"Size" => "Velikost",
+"Modified" => "Změněno",
+"Delete all" => "Smazat vše",
"Delete" => "Vymazat",
"Upload too large" => "Příliš velký soubor",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Soubory, které se snažíte uložit, pÅ™ekraÄují maximální velikosti uploadu na tomto serveru.",
diff --git a/apps/files/l10n/da.php b/apps/files/l10n/da.php
index 3683ab8484d..8cefa27e64f 100644
--- a/apps/files/l10n/da.php
+++ b/apps/files/l10n/da.php
@@ -7,8 +7,26 @@
"Missing a temporary folder" => "Mangler en midlertidig mappe",
"Failed to write to disk" => "Fejl ved skrivning til disk.",
"Files" => "Filer",
+"Delete" => "Slet",
+"already exists" => "findes allerede",
+"replace" => "erstat",
+"cancel" => "fortryd",
+"replaced" => "erstattet",
+"with" => "med",
+"undo" => "fortryd",
+"deleted" => "Slettet",
+"generating ZIP-file, it may take some time." => "genererer ZIP-fil, det kan tage lidt tid.",
+"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",
+"Pending" => "Afventer",
+"Upload cancelled." => "Upload afbrudt.",
+"Invalid name, '/' is not allowed." => "Ugyldigt navn, '/' er ikke tilladt.",
"Size" => "Størrelse",
"Modified" => "Ændret",
+"folder" => "mappe",
+"folders" => "mapper",
+"file" => "fil",
+"files" => "filer",
"File handling" => "Filhåndtering",
"Maximum upload size" => "Maksimal upload-størrelse",
"max. possible: " => "max. mulige: ",
@@ -26,6 +44,8 @@
"Name" => "Navn",
"Share" => "Del",
"Download" => "Download",
+"Size" => "Størrelse",
+"Modified" => "Ændret",
"Delete" => "Slet",
"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.",
diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php
index 9c5310c43b8..4a85912d31f 100644
--- a/apps/files/l10n/de.php
+++ b/apps/files/l10n/de.php
@@ -5,12 +5,30 @@
"The uploaded file was only partially uploaded" => "Die Datei wurde nur teilweise hochgeladen.",
"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 Festplatte",
-"Files" => "Files",
+"Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte",
+"Files" => "Dateien",
+"Delete" => "Löschen",
+"already exists" => "ist bereits vorhanden",
+"replace" => "ersetzen",
+"cancel" => "abbrechen",
+"replaced" => "ersetzt",
+"with" => "mit",
+"undo" => "rückgängig machen",
+"deleted" => "gelöscht",
+"generating ZIP-file, it may take some time." => "Erstelle ZIP-Datei. Dies kann eine Weile dauern.",
+"Unable to upload your file as it is a directory or has 0 bytes" => "Ihre Datei kann nicht hochgeladen werden, da sie ein Verzeichnis ist oder 0 Bytes hat.",
+"Upload Error" => "Fehler beim Hochladen",
+"Pending" => "Ausstehend",
+"Upload cancelled." => "Hochladen abgebrochen.",
+"Invalid name, '/' is not allowed." => "Ungültiger Name, \"/\" ist nicht erlaubt.",
"Size" => "Größe",
"Modified" => "Bearbeitet",
+"folder" => "Ordner",
+"folders" => "Ordner",
+"file" => "Datei",
+"files" => "Dateien",
"File handling" => "Dateibehandlung",
-"Maximum upload size" => "Maximum upload size",
+"Maximum upload size" => "Maximale Upload-Größe",
"max. possible: " => "maximal möglich:",
"Needed for multi-file and folder downloads." => "Für Mehrfachdateien- und Ordnerdownloads benötigt:",
"Enable ZIP-download" => "ZIP-Download aktivieren",
@@ -22,13 +40,16 @@
"From url" => "Von der URL",
"Upload" => "Hochladen",
"Cancel upload" => "Upload abbrechen",
-"Nothing in here. Upload something!" => "Alles leer. Lad’ was hoch!",
+"Nothing in here. Upload something!" => "Alles leer. Lade etwas hoch!",
"Name" => "Name",
"Share" => "Teilen",
"Download" => "Herunterladen",
+"Size" => "Größe",
+"Modified" => "Bearbeitet",
+"Delete all" => "Alle löschen",
"Delete" => "Löschen",
"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." => "Daten werden gescannt, bitte warten.",
+"Files are being scanned, please wait." => "Dateien werden gescannt, bitte warten.",
"Current scanning" => "Scannen"
);
diff --git a/apps/files/l10n/el.php b/apps/files/l10n/el.php
index 93be0246156..4e93489fd39 100644
--- a/apps/files/l10n/el.php
+++ b/apps/files/l10n/el.php
@@ -7,8 +7,26 @@
"Missing a temporary folder" => "Λείπει ένας Ï€ÏοσωÏινός φάκελος",
"Failed to write to disk" => "Η εγγÏαφή στο δίσκο απέτυχε",
"Files" => "ΑÏχεία",
+"Delete" => "ΔιαγÏαφή",
+"already exists" => "υπάÏχει ήδη",
+"replace" => "αντικατέστησε",
+"cancel" => "ακÏÏωση",
+"replaced" => "αντικαταστάθηκε",
+"with" => "με",
+"undo" => "αναίÏεση",
+"deleted" => "διαγÏάφηκε",
+"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" => "Σφάλμα ΜεταφόÏτωσης",
+"Pending" => "Εν αναμονή",
+"Upload cancelled." => "Η μεταφόÏτωση ακυÏώθηκε.",
+"Invalid name, '/' is not allowed." => "Μη έγκυÏο όνομα, το '/' δεν επιτÏέπεται.",
"Size" => "Μέγεθος",
"Modified" => "ΤÏοποποιήθηκε",
+"folder" => "φάκελος",
+"folders" => "φάκελοι",
+"file" => "αÏχείο",
+"files" => "αÏχεία",
"File handling" => "ΔιαχείÏιση αÏχείων",
"Maximum upload size" => "Μέγιστο μέγεθος μεταφόÏτωσης",
"max. possible: " => "μέγιστο δυνατό:",
@@ -26,6 +44,9 @@
"Name" => "Όνομα",
"Share" => "ΔιαμοίÏασε",
"Download" => "Λήψη",
+"Size" => "Μέγεθος",
+"Modified" => "ΤÏοποποιήθηκε",
+"Delete all" => "ΔιαγÏαφή όλων",
"Delete" => "ΔιαγÏαφή",
"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/eo.php b/apps/files/l10n/eo.php
index 64c380d600f..2976a2127c3 100644
--- a/apps/files/l10n/eo.php
+++ b/apps/files/l10n/eo.php
@@ -7,8 +7,26 @@
"Missing a temporary folder" => "Mankas tempa dosierujo",
"Failed to write to disk" => "Malsukcesis skribo al disko",
"Files" => "Dosieroj",
+"Delete" => "Forigi",
+"already exists" => "jam ekzistas",
+"replace" => "anstataÅ­igi",
+"cancel" => "nuligi",
+"replaced" => "anstataÅ­igita",
+"with" => "kun",
+"undo" => "malfari",
+"deleted" => "forigita",
+"generating ZIP-file, it may take some time." => "generanta ZIP-dosiero, Äi povas daÅ­ri iom da tempo",
+"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",
+"Pending" => "Traktotaj",
+"Upload cancelled." => "La alÅuto nuliÄis.",
+"Invalid name, '/' is not allowed." => "Nevalida nomo, “/†ne estas permesata.",
"Size" => "Grando",
"Modified" => "Modifita",
+"folder" => "dosierujo",
+"folders" => "dosierujoj",
+"file" => "dosiero",
+"files" => "dosieroj",
"File handling" => "Dosieradministro",
"Maximum upload size" => "Maksimuma alÅutogrando",
"max. possible: " => "maks. ebla: ",
@@ -26,6 +44,9 @@
"Name" => "Nomo",
"Share" => "Kunhavigi",
"Download" => "ElÅuti",
+"Size" => "Grando",
+"Modified" => "Modifita",
+"Delete all" => "Forigi ĉion",
"Delete" => "Forigi",
"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.",
diff --git a/apps/files/l10n/es.php b/apps/files/l10n/es.php
index 67bfb4702e8..6fcf9086945 100644
--- a/apps/files/l10n/es.php
+++ b/apps/files/l10n/es.php
@@ -7,8 +7,26 @@
"Missing a temporary folder" => "Falta un directorio temporal",
"Failed to write to disk" => "La escritura en disco ha fallado",
"Files" => "Archivos",
+"Delete" => "Eliminado",
+"already exists" => "ya existe",
+"replace" => "reemplazar",
+"cancel" => "cancelar",
+"replaced" => "reemplazado",
+"with" => "con",
+"undo" => "deshacer",
+"deleted" => "borrado",
+"generating ZIP-file, it may take some time." => "generando un fichero ZIP, puede llevar un tiempo.",
+"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",
+"Pending" => "Pendiente",
+"Upload cancelled." => "Subida cancelada.",
+"Invalid name, '/' is not allowed." => "Nombre no válido, '/' no está permitido.",
"Size" => "Tamaño",
"Modified" => "Modificado",
+"folder" => "carpeta",
+"folders" => "carpetas",
+"file" => "archivo",
+"files" => "archivos",
"File handling" => "Tratamiento de archivos",
"Maximum upload size" => "Tamaño máximo de subida",
"max. possible: " => "máx. posible:",
@@ -26,6 +44,9 @@
"Name" => "Nombre",
"Share" => "Compartir",
"Download" => "Descargar",
+"Size" => "Tamaño",
+"Modified" => "Modificado",
+"Delete all" => "Eliminar todo",
"Delete" => "Eliminado",
"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.",
diff --git a/apps/files/l10n/et_EE.php b/apps/files/l10n/et_EE.php
index 89bb96581c9..c455a8ffe6a 100644
--- a/apps/files/l10n/et_EE.php
+++ b/apps/files/l10n/et_EE.php
@@ -7,8 +7,19 @@
"Missing a temporary folder" => "Ajutiste failide kaust puudub",
"Failed to write to disk" => "Kettale kirjutamine ebaõnnestus",
"Files" => "Failid",
+"Delete" => "Kustuta",
+"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",
+"Pending" => "Ootel",
+"Upload cancelled." => "Üleslaadimine tühistati.",
+"Invalid name, '/' is not allowed." => "Vigane nimi, '/' pole lubatud.",
"Size" => "Suurus",
"Modified" => "Muudetud",
+"folder" => "kaust",
+"folders" => "kausta",
+"file" => "fail",
+"files" => "faili",
"File handling" => "Failide käsitlemine",
"Maximum upload size" => "Maksimaalne üleslaadimise suurus",
"max. possible: " => "maks. võimalik: ",
@@ -26,6 +37,9 @@
"Name" => "Nimi",
"Share" => "Jaga",
"Download" => "Lae alla",
+"Size" => "Suurus",
+"Modified" => "Muudetud",
+"Delete all" => "Kustuta kõik",
"Delete" => "Kustuta",
"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.",
diff --git a/apps/files/l10n/eu.php b/apps/files/l10n/eu.php
index a7ca21f496b..99c918e2209 100644
--- a/apps/files/l10n/eu.php
+++ b/apps/files/l10n/eu.php
@@ -7,8 +7,26 @@
"Missing a temporary folder" => "Aldi baterako karpeta falta da",
"Failed to write to disk" => "Errore bat izan da diskoan idazterakoan",
"Files" => "Fitxategiak",
+"Delete" => "Ezabatu",
+"already exists" => "dagoeneko existitzen da",
+"replace" => "ordeztu",
+"cancel" => "ezeztatu",
+"replaced" => "ordeztua",
+"with" => "honekin",
+"undo" => "desegin",
+"deleted" => "ezabatuta",
+"generating ZIP-file, it may take some time." => "ZIP-fitxategia sortzen ari da, denbora har dezake",
+"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",
+"Pending" => "Zain",
+"Upload cancelled." => "Igoera ezeztatuta",
+"Invalid name, '/' is not allowed." => "Baliogabeko izena, '/' ezin da erabili. ",
"Size" => "Tamaina",
"Modified" => "Aldatuta",
+"folder" => "karpeta",
+"folders" => "Karpetak",
+"file" => "fitxategia",
+"files" => "fitxategiak",
"File handling" => "Fitxategien kudeaketa",
"Maximum upload size" => "Igo daitekeen gehienezko tamaina",
"max. possible: " => "max, posiblea:",
@@ -26,6 +44,9 @@
"Name" => "Izena",
"Share" => "Elkarbanatu",
"Download" => "Deskargatu",
+"Size" => "Tamaina",
+"Modified" => "Aldatuta",
+"Delete all" => "Ezabatu dena",
"Delete" => "Ezabatu",
"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.",
diff --git a/apps/files/l10n/fa.php b/apps/files/l10n/fa.php
index 4bb46e1fcf9..78d8d776915 100644
--- a/apps/files/l10n/fa.php
+++ b/apps/files/l10n/fa.php
@@ -7,8 +7,26 @@
"Missing a temporary folder" => "یک پوشه موقت گم شده است",
"Failed to write to disk" => "نوشتن بر روی دیسک سخت ناموÙÙ‚ بود",
"Files" => "Ùایل ها",
+"Delete" => "پاک کردن",
+"already exists" => "وجود دارد",
+"replace" => "جایگزین",
+"cancel" => "لغو",
+"replaced" => "جایگزین‌شده",
+"with" => "همراه",
+"undo" => "بازگشت",
+"deleted" => "حذ٠شده",
+"generating ZIP-file, it may take some time." => "در حال ساخت Ùایل Ùشرده ممکن است زمان زیادی به طول بیانجامد",
+"Unable to upload your file as it is a directory or has 0 bytes" => "ناتوان در بارگذاری یا Ùایل یک پوشه است یا 0بایت دارد",
+"Upload Error" => "خطا در بار گذاری",
+"Pending" => "در انتظار",
+"Upload cancelled." => "بار گذاری لغو شد",
+"Invalid name, '/' is not allowed." => "نام نامناسب '/' غیرÙعال است",
"Size" => "اندازه",
"Modified" => "تغییر یاÙته",
+"folder" => "پوشه",
+"folders" => "پوشه ها",
+"file" => "پرونده",
+"files" => "پرونده ها",
"File handling" => "اداره پرونده ها",
"Maximum upload size" => "حداکثر اندازه بارگزاری",
"max. possible: " => "حداکثرمقدارممکن:",
@@ -26,6 +44,9 @@
"Name" => "نام",
"Share" => "به اشتراک گذاری",
"Download" => "بارگیری",
+"Size" => "اندازه",
+"Modified" => "تغییر یاÙته",
+"Delete all" => "پاک کردن همه",
"Delete" => "پاک کردن",
"Upload too large" => "حجم بارگذاری بسیار زیاد است",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Ùایلها بیش از حد تعیین شده در این سرور هستند\nمترجم:با تغییر Ùایل php,ini میتوان این محدودیت را برطر٠کرد",
diff --git a/apps/files/l10n/fi_FI.php b/apps/files/l10n/fi_FI.php
index c99d4408f60..902ea859a31 100644
--- a/apps/files/l10n/fi_FI.php
+++ b/apps/files/l10n/fi_FI.php
@@ -7,10 +7,29 @@
"Missing a temporary folder" => "Väliaikaiskansiota ei ole olemassa",
"Failed to write to disk" => "Levylle kirjoitus epäonnistui",
"Files" => "Tiedostot",
+"Delete" => "Poista",
+"already exists" => "on jo olemassa",
+"replace" => "korvaa",
+"cancel" => "peru",
+"replaced" => "korvattu",
+"with" => "käyttäen",
+"undo" => "kumoa",
+"deleted" => "poistettu",
+"generating ZIP-file, it may take some time." => "luodaan ZIP-tiedostoa, tämä saattaa kestää hetken.",
+"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.",
+"Pending" => "Odottaa",
+"Upload cancelled." => "Lähetys peruttu.",
+"Invalid name, '/' is not allowed." => "Virheellinen nimi, merkki '/' ei ole sallittu.",
"Size" => "Koko",
"Modified" => "Muutettu",
+"folder" => "kansio",
+"folders" => "kansiota",
+"file" => "tiedosto",
+"files" => "tiedostoa",
"File handling" => "Tiedostonhallinta",
"Maximum upload size" => "Lähetettävän tiedoston suurin sallittu koko",
+"max. possible: " => "suurin mahdollinen:",
"Needed for multi-file and folder downloads." => "Tarvitaan useampien tiedostojen ja kansioiden latausta varten.",
"Enable ZIP-download" => "Ota ZIP-paketin lataaminen käytöön",
"0 is unlimited" => "0 on rajoittamaton",
@@ -25,7 +44,6 @@
"Name" => "Nimi",
"Share" => "Jaa",
"Download" => "Lataa",
-"Delete" => "Poista",
"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."
diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php
index ab2f4ea13df..9f9763636c7 100644
--- a/apps/files/l10n/fr.php
+++ b/apps/files/l10n/fr.php
@@ -7,8 +7,26 @@
"Missing a temporary folder" => "Il manque un répertoire temporaire",
"Failed to write to disk" => "Erreur d'écriture sur le disque",
"Files" => "Fichiers",
+"Delete" => "Supprimer",
+"already exists" => "existe déjà",
+"replace" => "remplacer",
+"cancel" => "annuler",
+"replaced" => "remplacé",
+"with" => "avec",
+"undo" => "annuler",
+"deleted" => "supprimé",
+"generating ZIP-file, it may take some time." => "Générer un fichier ZIP, cela peut prendre du temps",
+"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",
+"Pending" => "En cours",
+"Upload cancelled." => "Chargement annulé",
+"Invalid name, '/' is not allowed." => "Nom invalide, '/' n'est pas autorisé.",
"Size" => "Taille",
"Modified" => "Modifié",
+"folder" => "dossier",
+"folders" => "dossiers",
+"file" => "fichier",
+"files" => "fichiers",
"File handling" => "Gestion des fichiers",
"Maximum upload size" => "Taille max. d'envoi",
"max. possible: " => "Max. possible :",
@@ -26,6 +44,9 @@
"Name" => "Nom",
"Share" => "Partager",
"Download" => "Téléchargement",
+"Size" => "Taille",
+"Modified" => "Modifié",
+"Delete all" => "Supprimer tout",
"Delete" => "Supprimer",
"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.",
diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php
index 36eafaefe27..bf86fc9b809 100644
--- a/apps/files/l10n/gl.php
+++ b/apps/files/l10n/gl.php
@@ -7,8 +7,26 @@
"Missing a temporary folder" => "Falta un cartafol temporal",
"Failed to write to disk" => "Erro ao escribir no disco",
"Files" => "Ficheiros",
+"Delete" => "Eliminar",
+"already exists" => "xa existe",
+"replace" => "substituír",
+"cancel" => "cancelar",
+"replaced" => "substituído",
+"with" => "con",
+"undo" => "desfacer",
+"deleted" => "eliminado",
+"generating ZIP-file, it may take some time." => "xerando ficheiro ZIP, 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",
+"Pending" => "Pendentes",
+"Upload cancelled." => "Subida cancelada.",
+"Invalid name, '/' is not allowed." => "Nome non válido, '/' non está permitido.",
"Size" => "Tamaño",
"Modified" => "Modificado",
+"folder" => "cartafol",
+"folders" => "cartafoles",
+"file" => "ficheiro",
+"files" => "ficheiros",
"File handling" => "Manexo de ficheiro",
"Maximum upload size" => "Tamaño máximo de envío",
"max. possible: " => "máx. posible: ",
@@ -26,6 +44,8 @@
"Name" => "Nome",
"Share" => "Compartir",
"Download" => "Descargar",
+"Size" => "Tamaño",
+"Modified" => "Modificado",
"Delete" => "Eliminar",
"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",
diff --git a/apps/files/l10n/he.php b/apps/files/l10n/he.php
index 0876eb952c7..5e3df214c4f 100644
--- a/apps/files/l10n/he.php
+++ b/apps/files/l10n/he.php
@@ -7,8 +7,19 @@
"Missing a temporary folder" => "תיקייה זמנית חסרה",
"Failed to write to disk" => "הכתיבה לכונן נכשלה",
"Files" => "קבצי×",
+"Delete" => "מחיקה",
+"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" => "שגי×ת העל××”",
+"Pending" => "ממתין",
+"Upload cancelled." => "ההעל××” בוטלה.",
+"Invalid name, '/' is not allowed." => "×©× ×œ× ×—×•×§×™, '/' ×סור לשימוש.",
"Size" => "גודל",
"Modified" => "זמן שינוי",
+"folder" => "תקיה",
+"folders" => "תקיות",
+"file" => "קובץ",
+"files" => "קבצי×",
"File handling" => "טיפול בקבצי×",
"Maximum upload size" => "גודל העל××” מקסימלי",
"max. possible: " => "המרבי ×”×פשרי: ",
@@ -26,6 +37,8 @@
"Name" => "ש×",
"Share" => "שיתוף",
"Download" => "הורדה",
+"Size" => "גודל",
+"Modified" => "זמן שינוי",
"Delete" => "מחיקה",
"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/hr.php b/apps/files/l10n/hr.php
index 3281d20a61d..a3a6785294e 100644
--- a/apps/files/l10n/hr.php
+++ b/apps/files/l10n/hr.php
@@ -7,8 +7,19 @@
"Missing a temporary folder" => "Nedostaje privremena mapa",
"Failed to write to disk" => "Neuspjelo pisanje na disk",
"Files" => "Datoteke",
+"Delete" => "Briši",
+"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",
+"Pending" => "U tijeku",
+"Upload cancelled." => "Slanje poništeno.",
+"Invalid name, '/' is not allowed." => "Neispravan naziv, znak '/' nije dozvoljen.",
"Size" => "VeliÄina",
"Modified" => "Zadnja promjena",
+"folder" => "mapa",
+"folders" => "mape",
+"file" => "datoteka",
+"files" => "datoteke",
"File handling" => "datoteka za rukovanje",
"Maximum upload size" => "Maksimalna veliÄina prijenosa",
"max. possible: " => "maksimalna moguća: ",
@@ -26,6 +37,8 @@
"Name" => "Naziv",
"Share" => "podjeli",
"Download" => "Preuzmi",
+"Size" => "VeliÄina",
+"Modified" => "Zadnja promjena",
"Delete" => "Briši",
"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.",
diff --git a/apps/files/l10n/hu_HU.php b/apps/files/l10n/hu_HU.php
index 41255cb4096..0a66cbda4a1 100644
--- a/apps/files/l10n/hu_HU.php
+++ b/apps/files/l10n/hu_HU.php
@@ -7,8 +7,26 @@
"Missing a temporary folder" => "Hiányzik az ideiglenes könyvtár",
"Failed to write to disk" => "Nem írható lemezre",
"Files" => "Fájlok",
+"Delete" => "Törlés",
+"already exists" => "már létezik",
+"replace" => "cserél",
+"cancel" => "mégse",
+"replaced" => "kicserélve",
+"with" => "-val/-vel",
+"undo" => "visszavon",
+"deleted" => "törölve",
+"generating ZIP-file, it may take some time." => "ZIP-fájl generálása, ez eltarthat egy ideig.",
+"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",
+"Pending" => "Folyamatban",
+"Upload cancelled." => "Feltöltés megszakítva",
+"Invalid name, '/' is not allowed." => "Érvénytelen név, a '/' nem megengedett",
"Size" => "Méret",
"Modified" => "Módosítva",
+"folder" => "mappa",
+"folders" => "mappák",
+"file" => "fájl",
+"files" => "fájlok",
"File handling" => "Fájlkezelés",
"Maximum upload size" => "Maximális feltölthető fájlméret",
"max. possible: " => "max. lehetséges",
@@ -26,6 +44,9 @@
"Name" => "Név",
"Share" => "Megosztás",
"Download" => "Letöltés",
+"Size" => "Méret",
+"Modified" => "Módosítva",
+"Delete all" => "Mindent töröl",
"Delete" => "Törlés",
"Upload too large" => "Feltöltés túl nagy",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "A fájlokat amit próbálsz feltölteni meghaladta a legnagyobb fájlméretet ezen a szerveren.",
diff --git a/apps/files/l10n/ia.php b/apps/files/l10n/ia.php
index 645eba48a18..40df7af98f4 100644
--- a/apps/files/l10n/ia.php
+++ b/apps/files/l10n/ia.php
@@ -2,6 +2,7 @@
"The uploaded file was only partially uploaded" => "Le file incargate solmente esseva incargate partialmente",
"No file was uploaded" => "Nulle file esseva incargate",
"Files" => "Files",
+"Delete" => "Deler",
"Size" => "Dimension",
"Modified" => "Modificate",
"Maximum upload size" => "Dimension maxime de incargamento",
@@ -12,6 +13,8 @@
"Nothing in here. Upload something!" => "Nihil hic. Incarga alcun cosa!",
"Name" => "Nomine",
"Download" => "Discargar",
+"Size" => "Dimension",
+"Modified" => "Modificate",
"Delete" => "Deler",
"Upload too large" => "Incargamento troppo longe"
);
diff --git a/apps/files/l10n/id.php b/apps/files/l10n/id.php
index 1f9dc3290aa..c66f7861256 100644
--- a/apps/files/l10n/id.php
+++ b/apps/files/l10n/id.php
@@ -5,6 +5,7 @@
"Missing a temporary folder" => "Kehilangan folder temporer",
"Failed to write to disk" => "Gagal menulis ke disk",
"Files" => "Berkas",
+"Delete" => "Hapus",
"Size" => "Ukuran",
"Modified" => "Dimodifikasi",
"File handling" => "Penanganan berkas",
@@ -24,6 +25,8 @@
"Name" => "Nama",
"Share" => "Bagikan",
"Download" => "Unduh",
+"Size" => "Ukuran",
+"Modified" => "Dimodifikasi",
"Delete" => "Hapus",
"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.",
diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php
index 82871826c18..9bf02fb188d 100644
--- a/apps/files/l10n/it.php
+++ b/apps/files/l10n/it.php
@@ -7,8 +7,26 @@
"Missing a temporary folder" => "Cartella temporanea mancante",
"Failed to write to disk" => "Scrittura su disco non riuscita",
"Files" => "File",
+"Delete" => "Elimina",
+"already exists" => "esiste già",
+"replace" => "sostituisci",
+"cancel" => "annulla",
+"replaced" => "sostituito",
+"with" => "con",
+"undo" => "annulla",
+"deleted" => "eliminati",
+"generating ZIP-file, it may take some time." => "creazione file ZIP, potrebbe richiedere del tempo.",
+"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",
+"Pending" => "In corso",
+"Upload cancelled." => "Invio annullato",
+"Invalid name, '/' is not allowed." => "Nome non valido",
"Size" => "Dimensione",
"Modified" => "Modificato",
+"folder" => "cartella",
+"folders" => "cartelle",
+"file" => "file",
+"files" => "file",
"File handling" => "Gestione file",
"Maximum upload size" => "Dimensione massima upload",
"max. possible: " => "numero mass.: ",
@@ -26,6 +44,9 @@
"Name" => "Nome",
"Share" => "Condividi",
"Download" => "Scarica",
+"Size" => "Dimensione",
+"Modified" => "Modificato",
+"Delete all" => "Elimina tutto",
"Delete" => "Elimina",
"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.",
diff --git a/apps/files/l10n/ja_JP.php b/apps/files/l10n/ja_JP.php
index c04d0836dfb..868a2cfe70c 100644
--- a/apps/files/l10n/ja_JP.php
+++ b/apps/files/l10n/ja_JP.php
@@ -7,8 +7,26 @@
"Missing a temporary folder" => "テンãƒãƒ©ãƒªãƒ•ã‚©ãƒ«ãƒ€ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“",
"Failed to write to disk" => "ディスクã¸ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ",
"Files" => "ファイル",
+"Delete" => "削除",
+"already exists" => "æ—¢ã«å­˜åœ¨ã—ã¾ã™",
+"replace" => "ç½®ãæ›ãˆ",
+"cancel" => "キャンセル",
+"replaced" => "ç½®æ›ï¼š",
+"with" => "â†",
+"undo" => "å…ƒã«æˆ»ã™",
+"deleted" => "削除",
+"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" => "アップロードエラー",
+"Pending" => "ä¿ç•™",
+"Upload cancelled." => "アップロードã¯ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã•ã‚Œã¾ã—ãŸã€‚",
+"Invalid name, '/' is not allowed." => "無効ãªåå‰ã€'/' ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。",
"Size" => "サイズ",
"Modified" => "更新日時",
+"folder" => "フォルダ",
+"folders" => "フォルダ",
+"file" => "ファイル",
+"files" => "ファイル",
"File handling" => "ファイルæ“作",
"Maximum upload size" => "最大アップロードサイズ",
"max. possible: " => "最大容é‡: ",
@@ -26,6 +44,8 @@
"Name" => "åå‰",
"Share" => "共有",
"Download" => "ダウンロード",
+"Size" => "サイズ",
+"Modified" => "更新日時",
"Delete" => "削除",
"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/ko.php b/apps/files/l10n/ko.php
index 70575f0975d..66b0c65d8c3 100644
--- a/apps/files/l10n/ko.php
+++ b/apps/files/l10n/ko.php
@@ -7,8 +7,18 @@
"Missing a temporary folder" => "ìž„ì‹œ í´ë”ê°€ 사ë¼ì§",
"Failed to write to disk" => "디스í¬ì— 쓰지 못했습니다",
"Files" => "파ì¼",
+"Delete" => "삭제",
+"generating ZIP-file, it may take some time." => "ZIPíŒŒì¼ ìƒì„±ì— ì‹œê°„ì´ ê±¸ë¦´ 수 있습니다.",
+"Upload Error" => "업로드 ì—러",
+"Pending" => "보류 중",
+"Upload cancelled." => "업로드 취소.",
+"Invalid name, '/' is not allowed." => "ìž˜ëª»ëœ ì´ë¦„, '/' ì€ í—ˆìš©ì´ ë˜ì§€ 않습니다.",
"Size" => "í¬ê¸°",
"Modified" => "수정ë¨",
+"folder" => "í´ë”",
+"folders" => "í´ë”",
+"file" => "파ì¼",
+"files" => "파ì¼",
"File handling" => "íŒŒì¼ ì²˜ë¦¬",
"Maximum upload size" => "최대 업로드 í¬ê¸°",
"max. possible: " => "최대. 가능한:",
@@ -26,6 +36,9 @@
"Name" => "ì´ë¦„",
"Share" => "공유",
"Download" => "다운로드",
+"Size" => "í¬ê¸°",
+"Modified" => "수정ë¨",
+"Delete all" => "ëª¨ë‘ ì‚­ì œ",
"Delete" => "삭제",
"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/lb.php b/apps/files/l10n/lb.php
index 548ef4895d4..d3f1207cfba 100644
--- a/apps/files/l10n/lb.php
+++ b/apps/files/l10n/lb.php
@@ -7,6 +7,7 @@
"Missing a temporary folder" => "Et feelt en temporären Dossier",
"Failed to write to disk" => "Konnt net op den Disk schreiwen",
"Files" => "Dateien",
+"Delete" => "Läschen",
"Size" => "Gréisst",
"Modified" => "Geännert",
"File handling" => "Fichier handling",
@@ -26,6 +27,8 @@
"Name" => "Numm",
"Share" => "Share",
"Download" => "Eroflueden",
+"Size" => "Gréisst",
+"Modified" => "Geännert",
"Delete" => "Läschen",
"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.",
diff --git a/apps/files/l10n/lt_LT.php b/apps/files/l10n/lt_LT.php
index e876e743a48..9b2b364c9b8 100644
--- a/apps/files/l10n/lt_LT.php
+++ b/apps/files/l10n/lt_LT.php
@@ -7,9 +7,25 @@
"Missing a temporary folder" => "NÄ—ra laikinojo katalogo",
"Failed to write to disk" => "Nepavyko įrašyti į diską",
"Files" => "Failai",
+"Delete" => "IÅ¡trinti",
+"cancel" => "atšaukti",
+"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",
+"Pending" => "Laukiantis",
+"Upload cancelled." => "Įkėlimas atšauktas.",
+"Invalid name, '/' is not allowed." => "Pavadinime negali būti naudojamas ženklas \"/\".",
"Size" => "Dydis",
"Modified" => "Pakeista",
-"Maximum upload size" => "Maksimalus failo dydis",
+"folder" => "katalogas",
+"folders" => "katalogai",
+"file" => "failas",
+"files" => "failai",
+"File handling" => "Failų tvarkymas",
+"Maximum upload size" => "Maksimalus įkeliamo failo dydis",
+"Enable ZIP-download" => "Įjungti atsisiuntimą ZIP archyvu",
+"0 is unlimited" => "0 yra neribotas",
+"Maximum input size for ZIP files" => "Maksimalus ZIP archyvo failo dydis",
"New" => "Naujas",
"Text file" => "Teksto failas",
"Folder" => "Katalogas",
@@ -20,7 +36,11 @@
"Name" => "Pavadinimas",
"Share" => "Dalintis",
"Download" => "Atsisiųsti",
+"Size" => "Dydis",
+"Modified" => "Pakeista",
"Delete" => "IÅ¡trinti",
"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"
+"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.",
+"Current scanning" => "Å iuo metu skenuojama"
);
diff --git a/apps/files/l10n/lv.php b/apps/files/l10n/lv.php
new file mode 100644
index 00000000000..54bd79f5526
--- /dev/null
+++ b/apps/files/l10n/lv.php
@@ -0,0 +1,20 @@
+<?php $TRANSLATIONS = array(
+"Files" => "Faili",
+"Delete" => "Izdzēst",
+"Upload Error" => "AugÅ¡uplÄdÄ“Å¡anas laikÄ radÄs kļūda",
+"Pending" => "Gaida savu kÄrtu",
+"Upload cancelled." => "AugÅ¡uplÄde ir atcelta",
+"Invalid name, '/' is not allowed." => "Šis simbols '/', nav atļauts.",
+"Size" => "Izmērs",
+"Modified" => "Izmainīts",
+"folder" => "mape",
+"folders" => "mapes",
+"file" => "fails",
+"files" => "faili",
+"Maximum upload size" => "MaksimÄlais failu augÅ¡uplÄdes apjoms",
+"Upload" => "AugÅ¡uplÄdet",
+"Nothing in here. Upload something!" => "Te vÄ“l nekas nav. RÄ«kojies, sÄc augÅ¡uplÄdÄ“t",
+"Name" => "Nosaukums",
+"Download" => "LejuplÄdÄ“t",
+"Upload too large" => "Fails ir par lielu lai to augÅ¡uplÄdetu"
+);
diff --git a/apps/files/l10n/mk.php b/apps/files/l10n/mk.php
index d3efa4d0225..b060c087656 100644
--- a/apps/files/l10n/mk.php
+++ b/apps/files/l10n/mk.php
@@ -7,8 +7,19 @@
"Missing a temporary folder" => "Ðе поÑтои привремена папка",
"Failed to write to disk" => "ÐеуÑпеав да запишам на диÑк",
"Files" => "Датотеки",
+"Delete" => "Избриши",
+"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" => "Грешка при преземање",
+"Pending" => "Чека",
+"Upload cancelled." => "Преземањето е прекинато.",
+"Invalid name, '/' is not allowed." => "неиÑправно име, '/' не е дозволено.",
"Size" => "Големина",
"Modified" => "Променето",
+"folder" => "фолдер",
+"folders" => "фолдери",
+"file" => "датотека",
+"files" => "датотеки",
"File handling" => "Ракување Ñо датотеки",
"Maximum upload size" => "МакÑимална големина за подигање",
"max. possible: " => "макÑ. можно:",
@@ -26,6 +37,9 @@
"Name" => "Име",
"Share" => "Сподели",
"Download" => "Преземи",
+"Size" => "Големина",
+"Modified" => "Променето",
+"Delete all" => "Избриши ÑÑ",
"Delete" => "Избриши",
"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/ms_MY.php b/apps/files/l10n/ms_MY.php
index 1a1d72a01b6..456a30a9d1a 100644
--- a/apps/files/l10n/ms_MY.php
+++ b/apps/files/l10n/ms_MY.php
@@ -5,18 +5,49 @@
"The uploaded file was only partially uploaded" => "Sebahagian daripada fail telah dimuat naik. ",
"No file was uploaded" => "Tiada fail yang dimuat naik",
"Missing a temporary folder" => "Folder sementara hilang",
+"Failed to write to disk" => "Gagal untuk disimpan",
"Files" => "fail",
+"Delete" => "Padam",
+"already exists" => "Sudah wujud",
+"replace" => "ganti",
+"cancel" => "Batal",
+"replaced" => "diganti",
+"with" => "dengan",
+"deleted" => "dihapus",
+"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",
+"Pending" => "Dalam proses",
+"Upload cancelled." => "Muatnaik dibatalkan.",
+"Invalid name, '/' is not allowed." => "penggunaa nama tidak sah, '/' tidak dibenarkan.",
"Size" => "Saiz",
"Modified" => "Dimodifikasi",
+"folder" => "direktori",
+"folders" => "direktori",
+"file" => "fail",
+"files" => "fail",
+"File handling" => "Pengendalian fail",
"Maximum upload size" => "Saiz maksimum muat naik",
+"max. possible: " => "maksimum:",
+"Needed for multi-file and folder downloads." => "Diperlukan untuk muatturun fail pelbagai ",
+"Enable ZIP-download" => "Aktifkan muatturun ZIP",
+"0 is unlimited" => "0 adalah tanpa had",
+"Maximum input size for ZIP files" => "Saiz maksimum input untuk fail ZIP",
"New" => "Baru",
"Text file" => "Fail teks",
"Folder" => "Folder",
+"From url" => "Dari url",
"Upload" => "Muat naik",
+"Cancel upload" => "Batal muat naik",
"Nothing in here. Upload something!" => "Tiada apa-apa di sini. Muat naik sesuatu!",
"Name" => "Nama ",
+"Share" => "Kongsi",
"Download" => "Muat turun",
+"Size" => "Saiz",
+"Modified" => "Dimodifikasi",
"Delete" => "Padam",
"Upload too large" => "Muat naik terlalu besar",
-"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Fail yang cuba dimuat naik melebihi saiz maksimum fail upload server"
+"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Fail yang cuba dimuat naik melebihi saiz maksimum fail upload server",
+"Files are being scanned, please wait." => "Fail sedang diimbas, harap bersabar.",
+"Current scanning" => "Imbasan semasa"
);
diff --git a/apps/files/l10n/nb_NO.php b/apps/files/l10n/nb_NO.php
index 0f4cc33ae38..4a2bf36fd59 100644
--- a/apps/files/l10n/nb_NO.php
+++ b/apps/files/l10n/nb_NO.php
@@ -7,8 +7,15 @@
"Missing a temporary folder" => "Mangler en midlertidig mappe",
"Failed to write to disk" => "Klarte ikke å skrive til disk",
"Files" => "Filer",
+"Delete" => "Slett",
+"generating ZIP-file, it may take some time." => "opprettet ZIP-fil, dette kan ta litt tid",
+"Pending" => "Ventende",
"Size" => "Størrelse",
"Modified" => "Endret",
+"folder" => "mappe",
+"folders" => "mapper",
+"file" => "fil",
+"files" => "filer",
"File handling" => "Filhåndtering",
"Maximum upload size" => "Maksimum opplastingsstørrelse",
"max. possible: " => "max. mulige:",
@@ -26,6 +33,9 @@
"Name" => "Navn",
"Share" => "Del",
"Download" => "Last ned",
+"Size" => "Størrelse",
+"Modified" => "Endret",
+"Delete all" => "Slett alle",
"Delete" => "Slett",
"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.",
diff --git a/apps/files/l10n/nl.php b/apps/files/l10n/nl.php
index 119f6034f15..96b82d2481d 100644
--- a/apps/files/l10n/nl.php
+++ b/apps/files/l10n/nl.php
@@ -7,8 +7,19 @@
"Missing a temporary folder" => "Een tijdelijke map mist",
"Failed to write to disk" => "Schrijven naar schijf mislukt",
"Files" => "Bestanden",
+"Delete" => "Verwijder",
+"generating ZIP-file, it may take some time." => "aanmaken ZIP-file, dit kan enige tijd duren.",
+"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",
+"Pending" => "Wachten",
+"Upload cancelled." => "Uploaden geannuleerd.",
+"Invalid name, '/' is not allowed." => "Ongeldige naam, '/' is niet toegestaan.",
"Size" => "Bestandsgrootte",
"Modified" => "Laatst aangepast",
+"folder" => "map",
+"folders" => "mappen",
+"file" => "bestand",
+"files" => "bestanden",
"File handling" => "Bestand",
"Maximum upload size" => "Maximale bestandsgrootte voor uploads",
"max. possible: " => "max. mogelijk: ",
@@ -26,6 +37,9 @@
"Name" => "Naam",
"Share" => "Delen",
"Download" => "Download",
+"Size" => "Bestandsgrootte",
+"Modified" => "Laatst aangepast",
+"Delete all" => "Alles verwijderen",
"Delete" => "Verwijder",
"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.",
diff --git a/apps/files/l10n/nn_NO.php b/apps/files/l10n/nn_NO.php
index 002e85de5cc..a2263b3df2f 100644
--- a/apps/files/l10n/nn_NO.php
+++ b/apps/files/l10n/nn_NO.php
@@ -6,6 +6,7 @@
"No file was uploaded" => "Ingen filer vart lasta opp",
"Missing a temporary folder" => "Manglar ei mellombels mappe",
"Files" => "Filer",
+"Delete" => "Slett",
"Size" => "Storleik",
"Modified" => "Endra",
"Maximum upload size" => "Maksimal opplastingsstorleik",
@@ -16,6 +17,8 @@
"Nothing in here. Upload something!" => "Ingenting her. Last noko opp!",
"Name" => "Namn",
"Download" => "Last ned",
+"Size" => "Storleik",
+"Modified" => "Endra",
"Delete" => "Slett",
"Upload too large" => "For stor opplasting",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filene du prøver å laste opp er større enn maksgrensa til denne tenaren."
diff --git a/apps/files/l10n/pl.php b/apps/files/l10n/pl.php
index bfdd04659dd..7b67fd47224 100644
--- a/apps/files/l10n/pl.php
+++ b/apps/files/l10n/pl.php
@@ -7,8 +7,26 @@
"Missing a temporary folder" => "Brak katalogu tymczasowego",
"Failed to write to disk" => "BÅ‚Ä…d zapisu na dysk",
"Files" => "Pliki",
+"Delete" => "Usuwa element",
+"already exists" => "Już istnieje",
+"replace" => "zastap",
+"cancel" => "anuluj",
+"replaced" => "zastÄ…pione",
+"with" => "z",
+"undo" => "wróć",
+"deleted" => "skasuj",
+"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",
+"Pending" => "OczekujÄ…ce",
+"Upload cancelled." => "Wczytywanie anulowane.",
+"Invalid name, '/' is not allowed." => "Nieprawidłowa nazwa '/' jest niedozwolone.",
"Size" => "Rozmiar",
"Modified" => "Czas modyfikacji",
+"folder" => "folder",
+"folders" => "foldery",
+"file" => "plik",
+"files" => "pliki",
"File handling" => "ZarzÄ…dzanie plikami",
"Maximum upload size" => "Maksymalny rozmiar wysyłanego pliku",
"max. possible: " => "max. możliwych",
@@ -26,6 +44,8 @@
"Name" => "Nazwa",
"Share" => "Współdziel",
"Download" => "Pobiera element",
+"Size" => "Rozmiar",
+"Modified" => "Czas modyfikacji",
"Delete" => "Usuwa element",
"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ść.",
diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php
index b70406f5171..b606c8ef649 100644
--- a/apps/files/l10n/pt_BR.php
+++ b/apps/files/l10n/pt_BR.php
@@ -7,8 +7,19 @@
"Missing a temporary folder" => "Pasta temporária não encontrada",
"Failed to write to disk" => "Falha ao escrever no disco",
"Files" => "Arquivos",
+"Delete" => "Excluir",
+"generating ZIP-file, it may take some time." => "gerando arquivo ZIP, isso pode levar um tempo.",
+"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",
+"Pending" => "Pendente",
+"Upload cancelled." => "Envio cancelado.",
+"Invalid name, '/' is not allowed." => "Nome inválido, '/' não é permitido.",
"Size" => "Tamanho",
"Modified" => "Modificado",
+"folder" => "pasta",
+"folders" => "pastas",
+"file" => "arquivo",
+"files" => "arquivos",
"File handling" => "Tratamento de Arquivo",
"Maximum upload size" => "Tamanho máximo para carregar",
"max. possible: " => "max. possível:",
@@ -26,6 +37,9 @@
"Name" => "Nome",
"Share" => "Compartilhar",
"Download" => "Baixar",
+"Size" => "Tamanho",
+"Modified" => "Modificado",
+"Delete all" => "Deletar Tudo",
"Delete" => "Excluir",
"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.",
diff --git a/apps/files/l10n/pt_PT.php b/apps/files/l10n/pt_PT.php
index ac224302825..eaf5a69a041 100644
--- a/apps/files/l10n/pt_PT.php
+++ b/apps/files/l10n/pt_PT.php
@@ -7,8 +7,26 @@
"Missing a temporary folder" => "Falta uma pasta temporária",
"Failed to write to disk" => "Falhou a escrita no disco",
"Files" => "Ficheiros",
+"Delete" => "Apagar",
+"already exists" => "Já existe",
+"replace" => "substituir",
+"cancel" => "cancelar",
+"replaced" => "substituido",
+"with" => "com",
+"undo" => "desfazer",
+"deleted" => "apagado",
+"generating ZIP-file, it may take some time." => "a gerar o ficheiro ZIP, poderá demorar algum tempo.",
+"Unable to upload your file as it is a directory or has 0 bytes" => "Não é possivel fazer o upload do ficheiro devido a ser uma pasta ou ter 0 bytes",
+"Upload Error" => "Erro no upload",
+"Pending" => "Pendente",
+"Upload cancelled." => "O upload foi cancelado.",
+"Invalid name, '/' is not allowed." => "nome inválido, '/' não permitido.",
"Size" => "Tamanho",
"Modified" => "Modificado",
+"folder" => "pasta",
+"folders" => "pastas",
+"file" => "ficheiro",
+"files" => "ficheiros",
"File handling" => "Manuseamento de ficheiros",
"Maximum upload size" => "Tamanho máximo de envio",
"max. possible: " => "max. possivel: ",
@@ -26,6 +44,8 @@
"Name" => "Nome",
"Share" => "Partilhar",
"Download" => "Transferir",
+"Size" => "Tamanho",
+"Modified" => "Modificado",
"Delete" => "Apagar",
"Upload too large" => "Envio muito grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiro que estás a tentar enviar excedem o tamanho máximo de envio neste servidor.",
diff --git a/apps/files/l10n/ro.php b/apps/files/l10n/ro.php
index e6f0294fd3f..58a6d2454f5 100644
--- a/apps/files/l10n/ro.php
+++ b/apps/files/l10n/ro.php
@@ -7,6 +7,7 @@
"Missing a temporary folder" => "Lipsește un dosar temporar",
"Failed to write to disk" => "Eroare la scriere pe disc",
"Files" => "Fișiere",
+"Delete" => "Șterge",
"Size" => "Dimensiune",
"Modified" => "Modificat",
"File handling" => "Manipulare fișiere",
@@ -26,7 +27,6 @@
"Name" => "Nume",
"Share" => "Partajează",
"Download" => "Descarcă",
-"Delete" => "Șterge",
"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 45648012a14..203a4f81ede 100644
--- a/apps/files/l10n/ru.php
+++ b/apps/files/l10n/ru.php
@@ -7,8 +7,26 @@
"Missing a temporary folder" => "Ðевозможно найти временную папку",
"Failed to write to disk" => "Ошибка запиÑи на диÑк",
"Files" => "Файлы",
+"Delete" => "Удалить",
+"already exists" => "уже ÑущеÑтвует",
+"replace" => "заменить",
+"cancel" => "отмена",
+"replaced" => "заменён",
+"with" => "Ñ",
+"undo" => "отмена",
+"deleted" => "удален",
+"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" => "Ошибка загрузки",
+"Pending" => "Ожидание",
+"Upload cancelled." => "Загрузка отменена.",
+"Invalid name, '/' is not allowed." => "Ðеверное имÑ, '/' не допуÑкаетÑÑ.",
"Size" => "Размер",
"Modified" => "Изменен",
+"folder" => "папка",
+"folders" => "папки",
+"file" => "файл",
+"files" => "файлы",
"File handling" => "Управление файлами",
"Maximum upload size" => "МакÑимальный размер файла",
"max. possible: " => "макÑ. возможно: ",
@@ -26,7 +44,6 @@
"Name" => "Ðазвание",
"Share" => "ПоделитьÑÑ",
"Download" => "Скачать",
-"Delete" => "Удалить",
"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 2a7e84af6c4..9e9a543d386 100644
--- a/apps/files/l10n/sk_SK.php
+++ b/apps/files/l10n/sk_SK.php
@@ -7,8 +7,19 @@
"Missing a temporary folder" => "Chýbajúci doÄasný prieÄinok",
"Failed to write to disk" => "Zápis na disk sa nepodaril",
"Files" => "Súbory",
+"Delete" => "Odstrániť",
+"generating ZIP-file, it may take some time." => "generujem ZIP-súbor, 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 nahrávania",
+"Pending" => "Čaká sa",
+"Upload cancelled." => "Nahrávanie zrušené",
+"Invalid name, '/' is not allowed." => "Chybný názov, \"/\" nie je povolené",
"Size" => "Veľkosť",
"Modified" => "Upravené",
+"folder" => "prieÄinok",
+"folders" => "prieÄinky",
+"file" => "súbor",
+"files" => "súbory",
"File handling" => "Nastavenie správanie k súborom",
"Maximum upload size" => "Maximálna veľkosť nahratia",
"max. possible: " => "najväÄÅ¡ie možné:",
@@ -26,7 +37,7 @@
"Name" => "Meno",
"Share" => "Zdielať",
"Download" => "Stiahnuť",
-"Delete" => "Odstrániť",
+"Delete all" => "Odstrániť všetko",
"Upload too large" => "Nahrávanie 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." => "Súbory sa práve prehľadávajú, prosím Äakajte.",
diff --git a/apps/files/l10n/sl.php b/apps/files/l10n/sl.php
index b0ea2dc373c..b94735c3915 100644
--- a/apps/files/l10n/sl.php
+++ b/apps/files/l10n/sl.php
@@ -7,8 +7,26 @@
"Missing a temporary folder" => "Manjka zaÄasna mapa",
"Failed to write to disk" => "Pisanje na disk je spodletelo",
"Files" => "Datoteke",
+"Delete" => "Izbriši",
+"already exists" => "že obstaja",
+"replace" => "nadomesti",
+"cancel" => "ekliÄi",
+"replaced" => "nadomeÅ¡Äen",
+"with" => "z",
+"undo" => "razveljavi",
+"deleted" => "izbrisano",
+"generating ZIP-file, it may take some time." => "Ustvarjam ZIP datoteko. To lahko traja nekaj Äasa.",
+"Unable to upload your file as it is a directory or has 0 bytes" => "Nalaganje ni mogoÄe, saj gre za mapo, ali pa ima datoteka velikost 0 bajtov.",
+"Upload Error" => "Napaka pri nalaganju",
+"Pending" => "Na Äakanju",
+"Upload cancelled." => "Nalaganje je bilo preklicano.",
+"Invalid name, '/' is not allowed." => "Neveljavno ime. Znak '/' ni dovoljen.",
"Size" => "Velikost",
"Modified" => "Spremenjeno",
+"folder" => "mapa",
+"folders" => "mape",
+"file" => "datoteka",
+"files" => "datoteke",
"File handling" => "Rokovanje z datotekami",
"Maximum upload size" => "NajveÄja velikost za nalaganje",
"max. possible: " => "najveÄ mogoÄe:",
@@ -26,7 +44,7 @@
"Name" => "Ime",
"Share" => "Souporaba",
"Download" => "Prejmi",
-"Delete" => "Izbriši",
+"Delete all" => "Izbriši vse",
"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." => "Preiskujem datoteke, prosimo poÄakajte.",
diff --git a/apps/files/l10n/sr.php b/apps/files/l10n/sr.php
index 68c50d5282a..84164e25c62 100644
--- a/apps/files/l10n/sr.php
+++ b/apps/files/l10n/sr.php
@@ -6,6 +6,7 @@
"No file was uploaded" => "Ðиједан фајл није поÑлат",
"Missing a temporary folder" => "ÐедоÑтаје привремена фаÑцикла",
"Files" => "Фајлови",
+"Delete" => "Обриши",
"Size" => "Величина",
"Modified" => "Задња измена",
"Maximum upload size" => "МакÑимална величина пошиљке",
@@ -16,7 +17,6 @@
"Nothing in here. Upload something!" => "Овде нема ничег. Пошаљите нешто!",
"Name" => "Име",
"Download" => "Преузми",
-"Delete" => "Обриши",
"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/sr@latin.php b/apps/files/l10n/sr@latin.php
index 63843fc8b55..96c567aec41 100644
--- a/apps/files/l10n/sr@latin.php
+++ b/apps/files/l10n/sr@latin.php
@@ -6,6 +6,7 @@
"No file was uploaded" => "Nijedan fajl nije poslat",
"Missing a temporary folder" => "Nedostaje privremena fascikla",
"Files" => "Fajlovi",
+"Delete" => "Obriši",
"Size" => "VeliÄina",
"Modified" => "Zadnja izmena",
"Maximum upload size" => "Maksimalna veliÄina poÅ¡iljke",
@@ -13,7 +14,6 @@
"Nothing in here. Upload something!" => "Ovde nema niÄeg. PoÅ¡aljite neÅ¡to!",
"Name" => "Ime",
"Download" => "Preuzmi",
-"Delete" => "Obriši",
"Upload too large" => "Pošiljka je prevelika",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Fajlovi koje želite da poÅ¡aljete prevazilaze ograniÄenje maksimalne veliÄine poÅ¡iljke na ovom serveru."
);
diff --git a/apps/files/l10n/sv.php b/apps/files/l10n/sv.php
index f508f22f3cf..a62b7522511 100644
--- a/apps/files/l10n/sv.php
+++ b/apps/files/l10n/sv.php
@@ -2,20 +2,38 @@
"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 i php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Den uppladdade filen överstiger MAX_FILE_SIZE direktivet som anges i HTML-formulär",
-"The uploaded file was only partially uploaded" => "Den uppladdade filen var endast delvist uppladdad",
+"The uploaded file was only partially uploaded" => "Den uppladdade filen var endast delvis uppladdad",
"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",
"Files" => "Filer",
+"Delete" => "Radera",
+"already exists" => "finns redan",
+"replace" => "ersätt",
+"cancel" => "avbryt",
+"replaced" => "ersatt",
+"with" => "med",
+"undo" => "Ã¥ngra",
+"deleted" => "raderad",
+"generating ZIP-file, it may take some time." => "genererar ZIP-fil, det kan ta lite tid.",
+"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",
+"Pending" => "Väntar",
+"Upload cancelled." => "Uppladdning avbruten.",
+"Invalid name, '/' is not allowed." => "Ogiltigt namn, '/' är inte tillåten.",
"Size" => "Storlek",
"Modified" => "Ändrad",
+"folder" => "mapp",
+"folders" => "mappar",
+"file" => "fil",
+"files" => "filer",
"File handling" => "Filhantering",
"Maximum upload size" => "Maximal storlek att ladda upp",
"max. possible: " => "max. möjligt:",
-"Needed for multi-file and folder downloads." => "Krävs för nerladdning av flera mappar och filer",
+"Needed for multi-file and folder downloads." => "Krävs för nerladdning av flera mappar och filer.",
"Enable ZIP-download" => "Aktivera ZIP-nerladdning",
-"0 is unlimited" => "0 är lika med oändligt",
-"Maximum input size for ZIP files" => "Största tillåtna storlek för ZIP filer",
+"0 is unlimited" => "0 är oändligt",
+"Maximum input size for ZIP files" => "Största tillåtna storlek för ZIP-filer",
"New" => "Ny",
"Text file" => "Textfil",
"Folder" => "Mapp",
@@ -25,10 +43,9 @@
"Nothing in here. Upload something!" => "Ingenting här. Ladda upp något!",
"Name" => "Namn",
"Share" => "Dela",
-"Download" => "Ladda ned",
-"Delete" => "Ta bort",
+"Download" => "Ladda ner",
"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." => "Filerna skannas, var god vänta",
-"Current scanning" => "Aktuell avsökning"
+"Files are being scanned, please wait." => "Filer skannas, var god vänta",
+"Current scanning" => "Aktuell skanning"
);
diff --git a/apps/files/l10n/th_TH.php b/apps/files/l10n/th_TH.php
index ec538262e02..eca0e29a182 100644
--- a/apps/files/l10n/th_TH.php
+++ b/apps/files/l10n/th_TH.php
@@ -7,8 +7,26 @@
"Missing a temporary folder" => "à¹à¸Ÿà¹‰à¸¡à¹€à¸­à¸à¸ªà¸²à¸£à¸Šà¸±à¹ˆà¸§à¸„ราวเà¸à¸´à¸”à¸à¸²à¸£à¸ªà¸¹à¸à¸«à¸²à¸¢",
"Failed to write to disk" => "เขียนข้อมูลลงà¹à¸œà¹ˆà¸™à¸”ิสà¸à¹Œà¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§",
"Files" => "ไฟล์",
+"Delete" => "ลบ",
+"already exists" => "มีอยู่à¹à¸¥à¹‰à¸§",
+"replace" => "à¹à¸—นที่",
+"cancel" => "ยà¸à¹€à¸¥à¸´à¸",
+"replaced" => "à¹à¸—นที่à¹à¸¥à¹‰à¸§",
+"with" => "à¸à¸±à¸š",
+"undo" => "เลิà¸à¸—ำ",
+"deleted" => "ลบà¹à¸¥à¹‰à¸§",
+"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" => "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸­à¸±à¸žà¹‚หลด",
+"Pending" => "อยู่ระหว่างดำเนินà¸à¸²à¸£",
+"Upload cancelled." => "à¸à¸²à¸£à¸­à¸±à¸žà¹‚หลดถูà¸à¸¢à¸à¹€à¸¥à¸´à¸",
+"Invalid name, '/' is not allowed." => "ชื่อที่ใช้ไม่ถูà¸à¸•à¹‰à¸­à¸‡ '/' ไม่อนุà¸à¸²à¸•à¹ƒà¸«à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™",
"Size" => "ขนาด",
"Modified" => "ปรับปรุงล่าสุด",
+"folder" => "โฟลเดอร์",
+"folders" => "โฟลเดอร์",
+"file" => "ไฟล์",
+"files" => "ไฟล์",
"File handling" => "à¸à¸²à¸£à¸ˆà¸±à¸”à¸à¸²à¹„ฟล์",
"Maximum upload size" => "ขนาดไฟล์สูงสุดที่อัพโหลดได้",
"max. possible: " => "จำนวนสูงสุดที่สามารถทำได้: ",
@@ -26,7 +44,7 @@
"Name" => "ชื่อ",
"Share" => "à¹à¸Šà¸£à¹Œ",
"Download" => "ดาวน์โหลด",
-"Delete" => "ลบ",
+"Delete all" => "ลบทั้งหมด",
"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/tr.php b/apps/files/l10n/tr.php
index b8de8249a1d..528eede6645 100644
--- a/apps/files/l10n/tr.php
+++ b/apps/files/l10n/tr.php
@@ -7,8 +7,21 @@
"Missing a temporary folder" => "Geçici bir klasör eksik",
"Failed to write to disk" => "Diske yazılamadı",
"Files" => "Dosyalar",
+"Delete" => "Sil",
+"undo" => "geri al",
+"deleted" => "silindi",
+"generating ZIP-file, it may take some time." => "ZIP dosyası oluşturuluyor, biraz sürebilir.",
+"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ı",
+"Pending" => "Bekliyor",
+"Upload cancelled." => "Yükleme iptal edildi.",
+"Invalid name, '/' is not allowed." => "Geçersiz isim, '/' işaretine izin verilmiyor.",
"Size" => "Boyut",
"Modified" => "DeÄŸiÅŸtirilme",
+"folder" => "dizin",
+"folders" => "dizinler",
+"file" => "dosya",
+"files" => "dosyalar",
"File handling" => "Dosya taşıma",
"Maximum upload size" => "Maksimum yükleme boyutu",
"max. possible: " => "mümkün olan en fazla: ",
@@ -26,7 +39,7 @@
"Name" => "Ad",
"Share" => "PaylaÅŸ",
"Download" => "Ä°ndir",
-"Delete" => "Sil",
+"Delete all" => "Hepsini sil",
"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 8b21cb26a3c..dc7e9d18b70 100644
--- a/apps/files/l10n/uk.php
+++ b/apps/files/l10n/uk.php
@@ -6,17 +6,36 @@
"No file was uploaded" => "Ðе відвантажено жодного файлу",
"Missing a temporary folder" => "ВідÑутній тимчаÑовий каталог",
"Files" => "Файли",
+"Delete" => "Видалити",
+"undo" => "відмінити",
+"deleted" => "видалені",
+"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" => "Помилка завантаженнÑ",
+"Pending" => "ОчікуваннÑ",
+"Upload cancelled." => "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑ€Ð²Ð°Ð½Ð¾.",
+"Invalid name, '/' is not allowed." => "Ðекоректне ім'Ñ, '/' не дозволено.",
"Size" => "Розмір",
"Modified" => "Змінено",
+"folder" => "тека",
+"folders" => "теки",
+"file" => "файл",
+"files" => "файли",
"Maximum upload size" => "МакÑимальний розмір відвантажень",
+"max. possible: " => "макÑ.можливе:",
+"0 is unlimited" => "0 є безліміт",
"New" => "Створити",
"Text file" => "ТекÑтовий файл",
"Folder" => "Папка",
+"From url" => "З URL",
"Upload" => "Відвантажити",
+"Cancel upload" => "Перервати завантаженнÑ",
"Nothing in here. Upload something!" => "Тут нічого немає. Відвантажте що-небудь!",
"Name" => "Ім'Ñ",
+"Share" => "ПоділитиÑÑ",
"Download" => "Завантажити",
-"Delete" => "Видалити",
"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" => "Поточне ÑкануваннÑ"
);
diff --git a/apps/files/l10n/vi.php b/apps/files/l10n/vi.php
new file mode 100644
index 00000000000..c2284d5feb9
--- /dev/null
+++ b/apps/files/l10n/vi.php
@@ -0,0 +1,31 @@
+<?php $TRANSLATIONS = array(
+"Files" => "Tập tin",
+"Delete" => "Xóa",
+"Upload Error" => "Tải lên lỗi",
+"Pending" => "Chá»",
+"Upload cancelled." => "Hủy tải lên",
+"Invalid name, '/' is not allowed." => "Tên không hợp lệ ,không được phép dùng '/'",
+"Size" => "Kích cỡ",
+"Modified" => "Thay đổi",
+"folder" => "folder",
+"folders" => "folders",
+"file" => "file",
+"files" => "files",
+"File handling" => "Xử lý tập tin",
+"Maximum upload size" => "Kích thước tối đa ",
+"Enable ZIP-download" => "Cho phép ZIP-download",
+"0 is unlimited" => "0 là không giới hạn",
+"Maximum input size for ZIP files" => "Kích thước tối đa cho các tập tin ZIP",
+"New" => "Má»›i",
+"Text file" => "Tập tin văn bản",
+"Folder" => "Folder",
+"From url" => "Từ url",
+"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ì đó !",
+"Name" => "Tên",
+"Share" => "Chia sẻ",
+"Download" => "Tải xuống",
+"Upload too large" => "File tải lên quá lớn",
+"Files are being scanned, please wait." => "Tập tin Ä‘ang được quét ,vui lòng chá»."
+);
diff --git a/apps/files/l10n/zh_CN.GB2312.php b/apps/files/l10n/zh_CN.GB2312.php
new file mode 100644
index 00000000000..6703e6f9088
--- /dev/null
+++ b/apps/files/l10n/zh_CN.GB2312.php
@@ -0,0 +1,51 @@
+<?php $TRANSLATIONS = array(
+"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" => "文件åªæœ‰éƒ¨åˆ†è¢«ä¸Šä¼ ",
+"No file was uploaded" => "没有上传完æˆçš„文件",
+"Missing a temporary folder" => "丢失了一个临时文件夹",
+"Failed to write to disk" => "写ç£ç›˜å¤±è´¥",
+"Files" => "文件",
+"Delete" => "删除",
+"already exists" => "å·²ç»å­˜åœ¨äº†",
+"replace" => "替æ¢",
+"cancel" => "å–消",
+"replaced" => "替æ¢è¿‡äº†",
+"with" => "éšç€",
+"undo" => "撤销",
+"deleted" => "删除",
+"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" => "上传错误",
+"Pending" => "Pending",
+"Upload cancelled." => "上传å–消了",
+"Invalid name, '/' is not allowed." => "éžæ³•æ–‡ä»¶å,\"/\"是ä¸è¢«è®¸å¯çš„",
+"Size" => "大å°",
+"Modified" => "修改日期",
+"folder" => "文件夹",
+"folders" => "文件夹",
+"file" => "文件",
+"files" => "文件",
+"File handling" => "文件处ç†ä¸­",
+"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文件输入大å°",
+"New" => "新建",
+"Text file" => "文本文档",
+"Folder" => "文件夹",
+"From url" => "从URL:",
+"Upload" => "上传",
+"Cancel upload" => "å–消上传",
+"Nothing in here. Upload something!" => "这里没有东西.上传点什么!",
+"Name" => "åå­—",
+"Share" => "分享",
+"Download" => "下载",
+"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/zh_CN.php b/apps/files/l10n/zh_CN.php
index c2e6541f2a2..c6fc9f907d6 100644
--- a/apps/files/l10n/zh_CN.php
+++ b/apps/files/l10n/zh_CN.php
@@ -7,8 +7,25 @@
"Missing a temporary folder" => "缺少临时目录",
"Failed to write to disk" => "写入ç£ç›˜å¤±è´¥",
"Files" => "文件",
+"Delete" => "删除",
+"already exists" => "å·²ç»å­˜åœ¨",
+"replace" => "替æ¢",
+"cancel" => "å–消",
+"replaced" => "å·²ç»æ›¿æ¢",
+"undo" => "撤销",
+"deleted" => "å·²ç»åˆ é™¤",
+"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" => "上传错误",
+"Pending" => "æ“作等待中",
+"Upload cancelled." => "上传已å–消",
+"Invalid name, '/' is not allowed." => "éžæ³•çš„å称,ä¸å…许使用‘/’。",
"Size" => "大å°",
"Modified" => "修改日期",
+"folder" => "文件夹",
+"folders" => "文件夹",
+"file" => "文件",
+"files" => "文件",
"File handling" => "文件处ç†",
"Maximum upload size" => "最大上传大å°",
"max. possible: " => "最大å¯èƒ½: ",
@@ -26,7 +43,7 @@
"Name" => "å称",
"Share" => "共享",
"Download" => "下载",
-"Delete" => "删除",
+"Delete all" => "删除所有",
"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 91a1344ca37..9151a4805df 100644
--- a/apps/files/l10n/zh_TW.php
+++ b/apps/files/l10n/zh_TW.php
@@ -7,6 +7,7 @@
"Missing a temporary folder" => "éºå¤±æš«å­˜è³‡æ–™å¤¾",
"Failed to write to disk" => "寫入硬碟失敗",
"Files" => "檔案",
+"Delete" => "刪除",
"Size" => "大å°",
"Modified" => "修改",
"File handling" => "檔案處ç†",
@@ -26,7 +27,7 @@
"Name" => "å稱",
"Share" => "分享",
"Download" => "下載",
-"Delete" => "刪除",
+"Delete all" => "全部刪除",
"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/settings.php b/apps/files/settings.php
index e5a66239ebd..cd6dd8c1616 100644
--- a/apps/files/settings.php
+++ b/apps/files/settings.php
@@ -56,5 +56,3 @@ $tmpl = new OCP\Template( "files", "index", "user" );
$tmpl->assign( 'files', $files );
$tmpl->assign( "breadcrumb", $breadcrumb );
$tmpl->printPage();
-
-?>
diff --git a/apps/files/templates/admin.php b/apps/files/templates/admin.php
index c89070ce52e..23021ec6647 100644
--- a/apps/files/templates/admin.php
+++ b/apps/files/templates/admin.php
@@ -3,7 +3,7 @@
<form name="filesForm" action='#' method='post'>
<fieldset class="personalblock">
<legend><strong><?php echo $l->t('File handling');?></strong></legend>
- <?php if($_['htaccessWorking']):?>
+ <?php if($_['uploadChangable']):?>
<label for="maxUploadSize"><?php echo $l->t( 'Maximum upload size' ); ?> </label><input name='maxUploadSize' id="maxUploadSize" value='<?php echo $_['uploadMaxFilesize'] ?>'/>(<?php echo $l->t('max. possible: '); echo $_['maxPossibleUploadSize'] ?>)<br/>
<?php endif;?>
<input type="checkbox" name="allowZipDownload" id="allowZipDownload" value="1" title="<?php echo $l->t( 'Needed for multi-file and folder downloads.' ); ?>"<?php if ($_['allowZipDownload']) echo ' checked="checked"'; ?> /> <label for="allowZipDownload"><?php echo $l->t( 'Enable ZIP-download' ); ?></label> <br/>
diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php
index c0a40081fe3..bcf683ae4a8 100644
--- a/apps/files/templates/index.php
+++ b/apps/files/templates/index.php
@@ -1,8 +1,8 @@
<!--[if IE 8]><style>input[type="checkbox"]{padding:0;}table td{position:static !important;}</style><![endif]-->
<div id="controls">
<?php echo($_['breadcrumb']); ?>
- <?php if (!isset($_['readonly']) || !$_['readonly']):?>
- <div class="actions <?php if (isset($_['files']) and ! $_['readonly'] and count($_['files'])==0):?>emptyfolder<?php endif; ?>">
+ <?php if ($_['isCreatable']):?>
+ <div class="actions <?php if (isset($_['files']) and count($_['files'])==0):?>emptyfolder<?php endif; ?>">
<div id='new' class='button'>
<a><?php echo $l->t('New');?></a>
<ul class="popup popupTop">
@@ -15,7 +15,7 @@
<form data-upload-id='1' class="file_upload_form" action="<?php echo OCP\Util::linkTo('files', 'ajax/upload.php'); ?>" method="post" enctype="multipart/form-data" target="file_upload_target_1">
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $_['uploadMaxFilesize'] ?>" id="max_upload">
<input type="hidden" class="max_human_file_size" value="(max <?php echo $_['uploadMaxHumanFilesize']; ?>)">
- <input type="hidden" name="dir" value="<?php echo htmlentities($_['dir'],ENT_COMPAT,'utf-8') ?>" id="dir">
+ <input type="hidden" name="dir" value="<?php echo $_['dir'] ?>" id="dir">
<button class="file_upload_filename">&nbsp;<img class='svg action' alt="Upload" src="<?php echo OCP\image_path("core", "actions/upload-white.svg"); ?>" /></button>
<input class="file_upload_start" type="file" name='files[]'/>
<a href="#" class="file_upload_button_wrapper" onclick="return false;" title="<?php echo $l->t('Upload'); echo ' max. '.$_['uploadMaxHumanFilesize'] ?>"></a>
@@ -35,7 +35,7 @@
</div>
<div id='notification'></div>
-<?php if (isset($_['files']) and ! $_['readonly'] and count($_['files'])==0):?>
+<?php if (isset($_['files']) and $_['isCreatable'] and count($_['files'])==0):?>
<div id="emptyfolder"><?php echo $l->t('Nothing in here. Upload something!')?></div>
<?php endif; ?>
@@ -43,7 +43,7 @@
<thead>
<tr>
<th id='headerName'>
- <?php if(!isset($_['readonly']) || !$_['readonly']) { ?><input type="checkbox" id="select_all" /><?php } ?>
+ <input type="checkbox" id="select_all" />
<span class='name'><?php echo $l->t( 'Name' ); ?></span>
<span class='selectedActions'>
<!-- <a href="" class="share"><img class='svg' alt="Share" src="<?php echo OCP\image_path("core", "actions/share.svg"); ?>" /> <?php echo $l->t('Share')?></a> -->
@@ -53,10 +53,10 @@
</span>
</th>
<th id="headerSize"><?php echo $l->t( 'Size' ); ?></th>
- <th id="headerDate"><span id="modified"><?php echo $l->t( 'Modified' ); ?></span><span class="selectedActions"><a href="" class="delete"><?php echo $l->t('Delete all')?> <img class="svg" alt="<?php echo $l->t('Delete')?>" src="<?php echo OCP\image_path("core", "actions/delete.svg"); ?>" /></a></span></th>
+ <th id="headerDate"><span id="modified"><?php echo $l->t( 'Modified' ); ?></span><span class="selectedActions"><a href="" class="delete"><?php echo $l->t('Delete')?> <img class="svg" alt="<?php echo $l->t('Delete')?>" src="<?php echo OCP\image_path("core", "actions/delete.svg"); ?>" /></a></span></th>
</tr>
</thead>
- <tbody id="fileList" data-readonly="<?php echo $_['readonly'];?>">
+ <tbody id="fileList">
<?php echo($_['fileList']); ?>
</tbody>
</table>
diff --git a/apps/files/templates/part.breadcrumb.php b/apps/files/templates/part.breadcrumb.php
index 43fe2d1fa95..22d9bb4490d 100644
--- a/apps/files/templates/part.breadcrumb.php
+++ b/apps/files/templates/part.breadcrumb.php
@@ -1,6 +1,6 @@
<?php for($i=0; $i<count($_["breadcrumb"]); $i++):
$crumb = $_["breadcrumb"][$i]; ?>
<div class="crumb <?php if($i == count($_["breadcrumb"])-1) echo 'last';?> svg" data-dir='<?php echo $crumb["dir"];?>' style='background-image:url("<?php echo OCP\image_path('core','breadcrumb.png');?>")'>
- <a href="<?php echo $_['baseURL'].$crumb["dir"]; ?>"><?php echo htmlentities($crumb["name"],ENT_COMPAT,'utf-8'); ?></a>
+ <a href="<?php echo $_['baseURL'].$crumb["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 4506630c16d..6667b5488af 100644
--- a/apps/files/templates/part.list.php
+++ b/apps/files/templates/part.list.php
@@ -1,5 +1,4 @@
<?php foreach($_['files'] as $file):
- $write = ($file['writable']) ? 'true' : 'false';
$simple_file_size = OCP\simple_file_size($file['size']);
$simple_size_color = intval(200-$file['size']/(1024*1024)*2); // the bigger the file, the darker the shade of grey; megabytes*2
if($simple_size_color<0) $simple_size_color = 0;
@@ -10,7 +9,7 @@
$name = str_replace('%2F','/', $name);
$directory = str_replace('+','%20',urlencode($file['directory']));
$directory = str_replace('%2F','/', $directory); ?>
- <tr 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-write='<?php echo $write;?>'>
+ <tr 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" style="background-image:url(<?php if($file['type'] == 'dir') echo OCP\mimetype_icon('dir'); else echo OCP\mimetype_icon($file['mimetype']); ?>)">
<?php if(!isset($_['readonly']) || !$_['readonly']) { ?><input type="checkbox" /><?php } ?>
<a class="name" href="<?php if($file['type'] == 'dir') echo $_['baseURL'].$directory.'/'.$name; else echo $_['downloadURL'].$directory.'/'.$name; ?>" title="">
diff --git a/apps/files_archive/js/archive.js b/apps/files_archive/js/archive.js
index 9fb9853e299..6bcbe092662 100644
--- a/apps/files_archive/js/archive.js
+++ b/apps/files_archive/js/archive.js
@@ -7,11 +7,11 @@
$(document).ready(function() {
if(typeof FileActions!=='undefined'){
- FileActions.register('application/zip','Open','',function(filename){
+ FileActions.register('application/zip','Open', FileActions.PERMISSION_READ, '',function(filename){
window.location=OC.linkTo('files', 'index.php')+'&dir='+encodeURIComponent($('#dir').val()).replace(/%2F/g, '/')+'/'+encodeURIComponent(filename);
});
FileActions.setDefault('application/zip','Open');
- FileActions.register('application/x-gzip','Open','',function(filename){
+ FileActions.register('application/x-gzip','Open', FileActions.PERMISSION_READ, '',function(filename){
window.location=OC.linkTo('files', 'index.php')+'&dir='+encodeURIComponent($('#dir').val()).replace(/%2F/g, '/')+'/'+encodeURIComponent(filename);
});
FileActions.setDefault('application/x-gzip','Open');
diff --git a/apps/files_archive/lib/storage.php b/apps/files_archive/lib/storage.php
index 86761663611..3c14c3e1fdf 100644
--- a/apps/files_archive/lib/storage.php
+++ b/apps/files_archive/lib/storage.php
@@ -38,22 +38,30 @@ class OC_Filestorage_Archive extends OC_Filestorage_Common{
return $this->archive->remove($path.'/');
}
public function opendir($path){
+ if(substr($path,-1)!=='/'){
+ $path.='/';
+ }
$path=$this->stripPath($path);
- $content=$this->archive->getFolder($path);
- foreach($content as &$file){
+ $files=$this->archive->getFolder($path);
+ $content=array();
+ foreach($files as $file){
if(substr($file,-1)=='/'){
$file=substr($file,0,-1);
}
+ if($file and strpos($file,'/')===false){
+ $content[]=$file;
+ }
}
$id=md5($this->path.$path);
OC_FakeDirStream::$dirs[$id]=$content;
return opendir('fakedir://'.$id);
}
public function stat($path){
- $ctime=filectime($this->path);
+ $ctime=-1;
$path=$this->stripPath($path);
if($path==''){
$stat=stat($this->path);
+ $stat['size']=0;
}else{
if($this->is_dir($path)){
$stat=array('size'=>0);
@@ -62,6 +70,9 @@ class OC_Filestorage_Archive extends OC_Filestorage_Common{
$stat=array();
$stat['mtime']=$this->archive->mtime($path);
$stat['size']=$this->archive->filesize($path);
+ if(!$stat['mtime']){
+ $stat['mtime']=time();
+ }
}
}
$stat['ctime']=$ctime;
@@ -78,10 +89,10 @@ class OC_Filestorage_Archive extends OC_Filestorage_Common{
return $this->archive->fileExists($path.'/')?'dir':'file';
}
}
- public function is_readable($path){
+ public function isReadable($path){
return is_readable($this->path);
}
- public function is_writable($path){
+ public function isUpdatable($path){
return is_writable($this->path);
}
public function file_exists($path){
@@ -111,6 +122,19 @@ class OC_Filestorage_Archive extends OC_Filestorage_Common{
return false;//not supported
}
}
+ private function toTmpFile($path){
+ $tmpFile=OC_Helper::tmpFile($extension);
+ $this->archive->extractFile($path,$tmpFile);
+ return $tmpFile;
+ }
+ public function file_put_contents($path,$data) {
+ $path=$this->stripPath($path);
+ return $this->archive->addFile($path,$data);
+ }
+ public function file_get_contents($path) {
+ $path=$this->stripPath($path);
+ return $this->archive->getFile($path);
+ }
/**
* automount paths from file hooks
@@ -143,4 +167,8 @@ class OC_Filestorage_Archive extends OC_Filestorage_Common{
public function rename($path1,$path2){
return $this->archive->rename($path1,$path2);
}
+
+ public function hasUpdated($path,$time){
+ return $this->filemtime($this->path)>$time;
+ }
}
diff --git a/apps/files_encryption/js/settings.js b/apps/files_encryption/js/settings.js
index 37d62265c94..8cc433246cb 100644
--- a/apps/files_encryption/js/settings.js
+++ b/apps/files_encryption/js/settings.js
@@ -17,8 +17,8 @@ $(document).ready(function(){
OC.AppConfig.setValue('files_encryption','type_blacklist',blackList);
}
- $('#enbale_encryption').change(function(){
- var checked=$('#enbale_encryption').is(':checked');
+ $('#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/.gitkeep b/apps/files_encryption/l10n/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/apps/files_encryption/l10n/.gitkeep
diff --git a/apps/files_encryption/l10n/ca.php b/apps/files_encryption/l10n/ca.php
new file mode 100644
index 00000000000..8e087b34620
--- /dev/null
+++ b/apps/files_encryption/l10n/ca.php
@@ -0,0 +1,6 @@
+<?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"
+);
diff --git a/apps/files_encryption/l10n/cs_CZ.php b/apps/files_encryption/l10n/cs_CZ.php
new file mode 100644
index 00000000000..15cf7705709
--- /dev/null
+++ b/apps/files_encryption/l10n/cs_CZ.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "Kryptování",
+"Exclude the following file types from encryption" => "Při kryptování vynechat následující typy souborů",
+"None" => "Žádný",
+"Enable Encryption" => "Povolit kryptování"
+);
diff --git a/apps/files_encryption/l10n/de.php b/apps/files_encryption/l10n/de.php
new file mode 100644
index 00000000000..d486a82322b
--- /dev/null
+++ b/apps/files_encryption/l10n/de.php
@@ -0,0 +1,6 @@
+<?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"
+);
diff --git a/apps/files_encryption/l10n/el.php b/apps/files_encryption/l10n/el.php
new file mode 100644
index 00000000000..40a7c6a3672
--- /dev/null
+++ b/apps/files_encryption/l10n/el.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "ΚÏυπτογÏάφηση",
+"Exclude the following file types from encryption" => "ΕξαίÏεση των παÏακάτω Ï„Ïπων αÏχείων από την κÏυπτογÏάφηση",
+"None" => "Καμία",
+"Enable Encryption" => "ΕνεÏγοποίηση ΚÏυπτογÏάφησης"
+);
diff --git a/apps/files_encryption/l10n/eo.php b/apps/files_encryption/l10n/eo.php
new file mode 100644
index 00000000000..af3c9ae98e4
--- /dev/null
+++ b/apps/files_encryption/l10n/eo.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "Ĉifrado",
+"Exclude the following file types from encryption" => "Malinkluzivigi la jenajn dosiertipojn el ĉifrado",
+"None" => "Nenio",
+"Enable Encryption" => "Kapabligi ĉifradon"
+);
diff --git a/apps/files_encryption/l10n/es.php b/apps/files_encryption/l10n/es.php
new file mode 100644
index 00000000000..26ace24e336
--- /dev/null
+++ b/apps/files_encryption/l10n/es.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "Cifrado"
+);
diff --git a/apps/files_encryption/l10n/et_EE.php b/apps/files_encryption/l10n/et_EE.php
new file mode 100644
index 00000000000..a7cd9395bf0
--- /dev/null
+++ b/apps/files_encryption/l10n/et_EE.php
@@ -0,0 +1,6 @@
+<?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"
+);
diff --git a/apps/files_encryption/l10n/fa.php b/apps/files_encryption/l10n/fa.php
new file mode 100644
index 00000000000..0faa3f3aae7
--- /dev/null
+++ b/apps/files_encryption/l10n/fa.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "رمزگذاری",
+"None" => "هیچ‌کدام",
+"Enable Encryption" => "Ùعال کردن رمزگذاری"
+);
diff --git a/apps/files_encryption/l10n/fi_FI.php b/apps/files_encryption/l10n/fi_FI.php
new file mode 100644
index 00000000000..5796499a26c
--- /dev/null
+++ b/apps/files_encryption/l10n/fi_FI.php
@@ -0,0 +1,6 @@
+<?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"
+);
diff --git a/apps/files_encryption/l10n/fr.php b/apps/files_encryption/l10n/fr.php
new file mode 100644
index 00000000000..c9367d1a312
--- /dev/null
+++ b/apps/files_encryption/l10n/fr.php
@@ -0,0 +1,6 @@
+<?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"
+);
diff --git a/apps/files_encryption/l10n/it.php b/apps/files_encryption/l10n/it.php
new file mode 100644
index 00000000000..5136b061797
--- /dev/null
+++ b/apps/files_encryption/l10n/it.php
@@ -0,0 +1,6 @@
+<?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"
+);
diff --git a/apps/files_encryption/l10n/ja_JP.php b/apps/files_encryption/l10n/ja_JP.php
new file mode 100644
index 00000000000..2c3e5410de3
--- /dev/null
+++ b/apps/files_encryption/l10n/ja_JP.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "æš—å·åŒ–",
+"Exclude the following file types from encryption" => "æš—å·åŒ–ã‹ã‚‰é™¤å¤–ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚¿ã‚¤ãƒ—",
+"None" => "ãªã—",
+"Enable Encryption" => "æš—å·åŒ–を有効ã«ã™ã‚‹"
+);
diff --git a/apps/files_encryption/l10n/lt_LT.php b/apps/files_encryption/l10n/lt_LT.php
new file mode 100644
index 00000000000..b939df164c8
--- /dev/null
+++ b/apps/files_encryption/l10n/lt_LT.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "Å ifravimas",
+"Exclude the following file types from encryption" => "Nešifruoti pasirinkto tipo failų",
+"None" => "Nieko",
+"Enable Encryption" => "Įjungti šifravimą"
+);
diff --git a/apps/files_encryption/l10n/nb_NO.php b/apps/files_encryption/l10n/nb_NO.php
new file mode 100644
index 00000000000..e65df7b6ce3
--- /dev/null
+++ b/apps/files_encryption/l10n/nb_NO.php
@@ -0,0 +1,6 @@
+<?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"
+);
diff --git a/apps/files_encryption/l10n/pl.php b/apps/files_encryption/l10n/pl.php
new file mode 100644
index 00000000000..5cfc707450e
--- /dev/null
+++ b/apps/files_encryption/l10n/pl.php
@@ -0,0 +1,6 @@
+<?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"
+);
diff --git a/apps/files_encryption/l10n/sl.php b/apps/files_encryption/l10n/sl.php
new file mode 100644
index 00000000000..65807910e10
--- /dev/null
+++ b/apps/files_encryption/l10n/sl.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "Å ifriranje",
+"Exclude the following file types from encryption" => "Naslednje vrste datotek naj se ne Å¡ifrirajo",
+"None" => "Brez",
+"Enable Encryption" => "OmogoÄi Å¡ifriranje"
+);
diff --git a/apps/files_encryption/l10n/sv.php b/apps/files_encryption/l10n/sv.php
new file mode 100644
index 00000000000..0a477f83460
--- /dev/null
+++ b/apps/files_encryption/l10n/sv.php
@@ -0,0 +1,6 @@
+<?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"
+);
diff --git a/apps/files_encryption/l10n/th_TH.php b/apps/files_encryption/l10n/th_TH.php
new file mode 100644
index 00000000000..c2685de6e3a
--- /dev/null
+++ b/apps/files_encryption/l10n/th_TH.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Encryption" => "à¸à¸²à¸£à¹€à¸‚้ารหัส",
+"Exclude the following file types from encryption" => "ไม่ต้องรวมชนิดของไฟล์ดังต่อไปนี้จาà¸à¸à¸²à¸£à¹€à¸‚้ารหัส",
+"None" => "ไม่ต้อง",
+"Enable Encryption" => "เปิดใช้งานà¸à¸²à¸£à¹€à¸‚้ารหัส"
+);
diff --git a/apps/files_encryption/lib/crypt.php b/apps/files_encryption/lib/crypt.php
index 7d39d926678..849e88ee0b2 100644
--- a/apps/files_encryption/lib/crypt.php
+++ b/apps/files_encryption/lib/crypt.php
@@ -3,7 +3,7 @@
* ownCloud
*
* @author Frank Karlitschek
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @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
@@ -58,6 +58,7 @@ class OC_Crypt {
$_SESSION['enckey']=OC_Crypt::decrypt($key, $password);
}
+
/**
* get the blowfish encryption handeler for a key
* @param string $key (optional)
diff --git a/apps/files_encryption/lib/cryptstream.php b/apps/files_encryption/lib/cryptstream.php
index 9949c1896a8..46471911d94 100644
--- a/apps/files_encryption/lib/cryptstream.php
+++ b/apps/files_encryption/lib/cryptstream.php
@@ -31,9 +31,7 @@ class OC_CryptStream{
public static $sourceStreams=array();
private $source;
private $path;
- private $readBuffer;//for streams that dont support seeking
private $meta=array();//header/meta for source stream
- private $count;
private $writeCache;
private $size;
private static $rootView;
@@ -100,7 +98,6 @@ class OC_CryptStream{
public function stream_write($data){
$length=strlen($data);
- $written=0;
$currentPos=ftell($this->source);
if($this->writeCache){
$data=$this->writeCache.$data;
@@ -170,7 +167,7 @@ class OC_CryptStream{
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),'/');
+ OC_FileCache::put($this->path,array('encrypted'=>true,'size'=>$this->size),'');
}
return fclose($this->source);
}
diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php
index 633ae6b93d6..f25e4a662f6 100644
--- a/apps/files_encryption/lib/proxy.php
+++ b/apps/files_encryption/lib/proxy.php
@@ -59,7 +59,7 @@ class OC_FileProxy_Encryption extends OC_FileProxy{
* @return bool
*/
private static function isEncrypted($path){
- $metadata=OC_FileCache::getCached($path,'/');
+ $metadata=OC_FileCache_Cached::get($path,'');
return isset($metadata['encrypted']) and (bool)$metadata['encrypted'];
}
@@ -68,14 +68,14 @@ class OC_FileProxy_Encryption extends OC_FileProxy{
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),'/');
+ OC_FileCache::put($path,array('encrypted'=>true,'size'=>$size),'');
}
}
}
public function postFile_get_contents($path,$data){
if(self::isEncrypted($path)){
- $cached=OC_FileCache::getCached($path,'/');
+ $cached=OC_FileCache_Cached::get($path,'');
$data=OC_Crypt::blockDecrypt($data,'',$cached['size']);
}
return $data;
@@ -113,7 +113,7 @@ class OC_FileProxy_Encryption extends OC_FileProxy{
public function postStat($path,$data){
if(self::isEncrypted($path)){
- $cached=OC_FileCache::getCached($path,'/');
+ $cached=OC_FileCache_Cached::get($path,'');
$data['size']=$cached['size'];
}
return $data;
@@ -121,7 +121,7 @@ class OC_FileProxy_Encryption extends OC_FileProxy{
public function postFileSize($path,$size){
if(self::isEncrypted($path)){
- $cached=OC_FileCache::getCached($path,'/');
+ $cached=OC_FileCache_Cached::get($path,'');
return $cached['size'];
}else{
return $size;
diff --git a/apps/files_encryption/templates/settings.php b/apps/files_encryption/templates/settings.php
index 25b5a06f56c..79780d694cf 100644
--- a/apps/files_encryption/templates/settings.php
+++ b/apps/files_encryption/templates/settings.php
@@ -7,6 +7,6 @@
<option selected="selected" value="<?php echo $type;?>"><?php echo $type;?></option>
<?php endforeach;?>
</select>
- <input type='checkbox' id='enbale_encryption' <?php if($_['encryption_enabled']){echo 'checked="checked"';} ?>></input><label for='enbale_encryption'><?php echo $l->t('Enable Encryption')?></label>
+ <input type='checkbox' id='enable_encryption' <?php if($_['encryption_enabled']){echo 'checked="checked"';} ?>></input><label for='enable_encryption'><?php echo $l->t('Enable Encryption')?></label>
</fieldset>
</form>
diff --git a/apps/files_encryption/tests/proxy.php b/apps/files_encryption/tests/proxy.php
index fcfc4cfb9f0..5463836a209 100644
--- a/apps/files_encryption/tests/proxy.php
+++ b/apps/files_encryption/tests/proxy.php
@@ -11,6 +11,8 @@ class Test_CryptProxy extends UnitTestCase {
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;
@@ -30,10 +32,12 @@ class Test_CryptProxy extends UnitTestCase {
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('/'.OC_User::getUser());
- $rootView->mkdir('/'.OC_User::getUser().'/files');
+ $rootView->mkdir('/'.$user);
+ $rootView->mkdir('/'.$user.'/files');
}
public function tearDown(){
diff --git a/apps/files_external/ajax/addMountPoint.php b/apps/files_external/ajax/addMountPoint.php
new file mode 100644
index 00000000000..e08f805942f
--- /dev/null
+++ b/apps/files_external/ajax/addMountPoint.php
@@ -0,0 +1,13 @@
+<?php
+
+OCP\JSON::checkAppEnabled('files_external');
+OCP\JSON::callCheck();
+
+if ($_POST['isPersonal'] == 'true') {
+ OCP\JSON::checkLoggedIn();
+ $isPersonal = true;
+} else {
+ OCP\JSON::checkAdminUser();
+ $isPersonal = false;
+}
+OC_Mount_Config::addMountPoint($_POST['mountPoint'], $_POST['class'], $_POST['classOptions'], $_POST['mountType'], $_POST['applicable'], $isPersonal);
diff --git a/apps/files_external/ajax/addRootCertificate.php b/apps/files_external/ajax/addRootCertificate.php
new file mode 100644
index 00000000000..d28a7d24b2d
--- /dev/null
+++ b/apps/files_external/ajax/addRootCertificate.php
@@ -0,0 +1,28 @@
+<?php
+
+OCP\JSON::checkAppEnabled('files_external');
+
+$view = \OCP\Files::getStorage("files_external");
+$from = $_FILES['rootcert_import']['tmp_name'];
+$path = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath("").'uploads/';
+if(!file_exists($path)) mkdir($path,0700,true);
+$to = $path.$_FILES['rootcert_import']['name'];
+move_uploaded_file($from, $to);
+
+//check if it is a PEM certificate, otherwise convert it if possible
+$fh = fopen($to, 'r');
+$data = fread($fh, filesize($to));
+fclose($fh);
+if (!strpos($data, 'BEGIN CERTIFICATE')) {
+ $pem = chunk_split(base64_encode($data), 64, "\n");
+ $pem = "-----BEGIN CERTIFICATE-----\n".$pem."-----END CERTIFICATE-----\n";
+ $fh = fopen($to, 'w');
+ fwrite($fh, $pem);
+ fclose($fh);
+}
+
+OC_Mount_Config::createCertificateBundle();
+
+header("Location: settings/personal.php");
+exit;
+?> \ No newline at end of file
diff --git a/apps/files_external/ajax/dropbox.php b/apps/files_external/ajax/dropbox.php
new file mode 100644
index 00000000000..5f2ff17e625
--- /dev/null
+++ b/apps/files_external/ajax/dropbox.php
@@ -0,0 +1,41 @@
+<?php
+
+require_once 'Dropbox/autoload.php';
+
+OCP\JSON::checkAppEnabled('files_external');
+OCP\JSON::checkLoggedIn();
+if (isset($_POST['app_key']) && isset($_POST['app_secret'])) {
+ $oauth = new Dropbox_OAuth_Curl($_POST['app_key'], $_POST['app_secret']);
+ if (isset($_POST['step'])) {
+ switch ($_POST['step']) {
+ case 1:
+ try {
+ if (isset($_POST['callback'])) {
+ $callback = $_POST['callback'];
+ } else {
+ $callback = null;
+ }
+ $token = $oauth->getRequestToken();
+ OCP\JSON::success(array('data' => array('url' => $oauth->getAuthorizeUrl($callback), 'request_token' => $token['token'], 'request_token_secret' => $token['token_secret'])));
+ } catch (Exception $exception) {
+ OCP\JSON::error(array('data' => array('message' => 'Fetching request tokens failed. Verify that your Dropbox app key and secret are correct.')));
+ }
+ break;
+ case 2:
+ if (isset($_POST['request_token']) && isset($_POST['request_token_secret'])) {
+ try {
+ $oauth->setToken($_POST['request_token'], $_POST['request_token_secret']);
+ $token = $oauth->getAccessToken();
+ OCP\JSON::success(array('access_token' => $token['token'], 'access_token_secret' => $token['token_secret']));
+ } catch (Exception $exception) {
+ OCP\JSON::error(array('data' => array('message' => 'Fetching access tokens failed. Verify that your Dropbox app key and secret are correct.')));
+ }
+ }
+ break;
+ }
+ }
+} else {
+ OCP\JSON::error(array('data' => array('message' => 'Please provide a valid Dropbox app key and secret.')));
+}
+
+?> \ No newline at end of file
diff --git a/apps/files_external/ajax/google.php b/apps/files_external/ajax/google.php
new file mode 100644
index 00000000000..23ecfc3708d
--- /dev/null
+++ b/apps/files_external/ajax/google.php
@@ -0,0 +1,51 @@
+<?php
+
+require_once 'Google/common.inc.php';
+
+OCP\JSON::checkAppEnabled('files_external');
+OCP\JSON::checkLoggedIn();
+$consumer = new OAuthConsumer('anonymous', 'anonymous');
+$sigMethod = new OAuthSignatureMethod_HMAC_SHA1();
+if (isset($_POST['step'])) {
+ switch ($_POST['step']) {
+ case 1:
+ if (isset($_POST['callback'])) {
+ $callback = $_POST['callback'];
+ } else {
+ $callback = null;
+ }
+ $scope = 'https://docs.google.com/feeds/ https://docs.googleusercontent.com/ https://spreadsheets.google.com/feeds/';
+ $url = 'https://www.google.com/accounts/OAuthGetRequestToken?scope='.urlencode($scope);
+ $params = array('scope' => $scope, 'oauth_callback' => $callback);
+ $request = OAuthRequest::from_consumer_and_token($consumer, null, 'GET', $url, $params);
+ $request->sign_request($sigMethod, $consumer, null);
+ $response = send_signed_request('GET', $url, array($request->to_header()), null, false);
+ $token = array();
+ parse_str($response, $token);
+ if (isset($token['oauth_token']) && isset($token['oauth_token_secret'])) {
+ $authUrl = 'https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token='.$token['oauth_token'];
+ OCP\JSON::success(array('data' => array('url' => $authUrl, 'request_token' => $token['oauth_token'], 'request_token_secret' => $token['oauth_token_secret'])));
+ } else {
+ OCP\JSON::error(array('data' => array('message' => 'Fetching request tokens failed. Error: '.$response)));
+ }
+ break;
+ case 2:
+ if (isset($_POST['oauth_verifier']) && isset($_POST['request_token']) && isset($_POST['request_token_secret'])) {
+ $token = new OAuthToken($_POST['request_token'], $_POST['request_token_secret']);
+ $url = 'https://www.google.com/accounts/OAuthGetAccessToken';
+ $request = OAuthRequest::from_consumer_and_token($consumer, $token, 'GET', $url, array('oauth_verifier' => $_POST['oauth_verifier']));
+ $request->sign_request($sigMethod, $consumer, $token);
+ $response = send_signed_request('GET', $url, array($request->to_header()), null, false);
+ $token = array();
+ parse_str($response, $token);
+ if (isset($token['oauth_token']) && isset($token['oauth_token_secret'])) {
+ OCP\JSON::success(array('access_token' => $token['oauth_token'], 'access_token_secret' => $token['oauth_token_secret']));
+ } else {
+ OCP\JSON::error(array('data' => array('message' => 'Fetching access tokens failed. Error: '.$response)));
+ }
+ }
+ break;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/apps/files_external/ajax/removeMountPoint.php b/apps/files_external/ajax/removeMountPoint.php
new file mode 100644
index 00000000000..aa446426202
--- /dev/null
+++ b/apps/files_external/ajax/removeMountPoint.php
@@ -0,0 +1,13 @@
+<?php
+
+OCP\JSON::checkAppEnabled('files_external');
+OCP\JSON::callCheck();
+
+if ($_POST['isPersonal'] == 'true') {
+ OCP\JSON::checkLoggedIn();
+ $isPersonal = true;
+} else {
+ OCP\JSON::checkAdminUser();
+ $isPersonal = false;
+}
+OC_Mount_Config::removeMountPoint($_POST['mountPoint'], $_POST['mountType'], $_POST['applicable'], $isPersonal);
diff --git a/apps/files_external/ajax/removeRootCertificate.php b/apps/files_external/ajax/removeRootCertificate.php
new file mode 100644
index 00000000000..f78f85b8fe4
--- /dev/null
+++ b/apps/files_external/ajax/removeRootCertificate.php
@@ -0,0 +1,12 @@
+<?php
+
+OCP\JSON::checkAppEnabled('files_external');
+OCP\JSON::checkLoggedIn();
+OCP\JSON::callCheck();
+
+$view = \OCP\Files::getStorage("files_external");
+$cert = $_POST['cert'];
+$file = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath("").'uploads/'.$cert;
+unlink($file);
+OC_Mount_Config::createCertificateBundle();
+?> \ No newline at end of file
diff --git a/apps/files_external/appinfo/app.php b/apps/files_external/appinfo/app.php
index 87846f17138..837d35c9c63 100644
--- a/apps/files_external/appinfo/app.php
+++ b/apps/files_external/appinfo/app.php
@@ -6,9 +6,17 @@
* See the COPYING-README file.
*/
- OC::$CLASSPATH['OC_FileStorage_StreamWrapper']='apps/files_external/lib/streamwrapper.php';
+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_Mount_Config']='apps/files_external/lib/config.php';
+
+OCP\App::registerAdmin('files_external', 'settings');
+if (OCP\Config::getAppValue('files_external', 'allow_user_mounting', 'yes') == 'yes') {
+ OCP\App::registerPersonal('files_external', 'personal');
+}
diff --git a/apps/files_external/appinfo/info.xml b/apps/files_external/appinfo/info.xml
index c324730593f..e0301365d16 100644
--- a/apps/files_external/appinfo/info.xml
+++ b/apps/files_external/appinfo/info.xml
@@ -4,7 +4,7 @@
<name>External storage support</name>
<description>Mount external storage sources</description>
<licence>AGPL</licence>
- <author>Robin Appelman</author>
+ <author>Robin Appelman, Michael Gapczynski</author>
<require>4</require>
<shipped>true</shipped>
<types>
diff --git a/apps/files_external/css/settings.css b/apps/files_external/css/settings.css
new file mode 100644
index 00000000000..ca4b1c3ba89
--- /dev/null
+++ b/apps/files_external/css/settings.css
@@ -0,0 +1,7 @@
+.error { color: #FF3B3B; }
+td.mountPoint, td.backend { width:10em; }
+td.remove>img { visibility:hidden; padding-top:0.8em; }
+tr:hover>td.remove>img { visibility:visible; cursor:pointer; }
+#addMountPoint>td { border:none; }
+#addMountPoint>td.applicable { visibility:hidden; }
+#selectBackend { margin-left:-10px; } \ No newline at end of file
diff --git a/apps/files_external/js/dropbox.js b/apps/files_external/js/dropbox.js
new file mode 100644
index 00000000000..92194792f42
--- /dev/null
+++ b/apps/files_external/js/dropbox.js
@@ -0,0 +1,80 @@
+$(document).ready(function() {
+
+ $('#externalStorage tbody tr.OC_Filestorage_Dropbox').each(function() {
+ var configured = $(this).find('[data-parameter="configured"]');
+ if ($(configured).val() == 'true') {
+ $(this).find('.configuration input').attr('disabled', 'disabled');
+ $(this).find('.configuration').append('<span id="access" style="padding-left:0.5em;">Access granted</span>');
+ } else {
+ var app_key = $(this).find('.configuration [data-parameter="app_key"]').val();
+ var app_secret = $(this).find('.configuration [data-parameter="app_secret"]').val();
+ var config = $(this).find('.configuration');
+ if (app_key != '' && app_secret != '') {
+ var pos = window.location.search.indexOf('oauth_token') + 12
+ var token = $(this).find('.configuration [data-parameter="token"]');
+ if (pos != -1 && window.location.search.substr(pos, $(token).val().length) == $(token).val()) {
+ var token_secret = $(this).find('.configuration [data-parameter="token_secret"]');
+ var tr = $(this);
+ $.post(OC.filePath('files_external', 'ajax', 'dropbox.php'), { step: 2, app_key: app_key, app_secret: app_secret, request_token: $(token).val(), request_token_secret: $(token_secret).val() }, function(result) {
+ if (result && result.status == 'success') {
+ $(token).val(result.access_token);
+ $(token_secret).val(result.access_token_secret);
+ OC.MountConfig.saveStorage(tr);
+ $(tr).find('.configuration input').attr('disabled', 'disabled');
+ $(tr).find('.configuration').append('<span id="access" style="padding-left:0.5em;">Access granted</span>');
+ } else {
+ OC.dialogs.alert(result.data.message, 'Error configuring Dropbox storage');
+ }
+ });
+ }
+ } else if ($(this).find('.mountPoint input').val() != '' && $(config).find('[data-parameter="app_key"]').val() != '' && $(config).find('[data-parameter="app_secret"]').val() != '' && $(this).find('.dropbox').length == 0) {
+ $(this).find('.configuration').append('<a class="button dropbox">Grant access</a>');
+ }
+ }
+ });
+
+ $('#externalStorage tbody tr input').live('keyup', function() {
+ var tr = $(this).parent().parent();
+ if ($(tr).hasClass('OC_Filestorage_Dropbox') && $(tr).find('[data-parameter="configured"]').val() != 'true') {
+ var config = $(tr).find('.configuration');
+ if ($(tr).find('.mountPoint input').val() != '' && $(config).find('[data-parameter="app_key"]').val() != '' && $(config).find('[data-parameter="app_secret"]').val() != '') {
+ if ($(tr).find('.dropbox').length == 0) {
+ $(config).append('<a class="button dropbox">Grant access</a>');
+ } else {
+ $(tr).find('.dropbox').show();
+ }
+ } else if ($(tr).find('.dropbox').length > 0) {
+ $(tr).find('.dropbox').hide();
+ }
+ }
+ });
+
+ $('.dropbox').live('click', function(event) {
+ event.preventDefault();
+ var app_key = $(this).parent().find('[data-parameter="app_key"]').val();
+ var app_secret = $(this).parent().find('[data-parameter="app_secret"]').val();
+ if (app_key != '' && app_secret != '') {
+ var tr = $(this).parent().parent();
+ var configured = $(this).parent().find('[data-parameter="configured"]');
+ var token = $(this).parent().find('[data-parameter="token"]');
+ var token_secret = $(this).parent().find('[data-parameter="token_secret"]');
+ $.post(OC.filePath('files_external', 'ajax', 'dropbox.php'), { step: 1, app_key: app_key, app_secret: app_secret, callback: window.location.href }, function(result) {
+ if (result && result.status == 'success') {
+ $(configured).val('false');
+ $(token).val(result.data.request_token);
+ $(token_secret).val(result.data.request_token_secret);
+ if (OC.MountConfig.saveStorage(tr)) {
+ window.location = result.data.url;
+ } else {
+ OC.dialogs.alert('Fill out all required fields', 'Error configuring Dropbox storage');
+ }
+ } else {
+ OC.dialogs.alert(result.data.message, 'Error configuring Dropbox storage');
+ }
+ });
+ } else {
+ OC.dialogs.alert('Please provide a valid Dropbox app key and secret.', 'Error configuring Dropbox storage')
+ }
+ });
+
+});
diff --git a/apps/files_external/js/google.js b/apps/files_external/js/google.js
new file mode 100644
index 00000000000..7c62297df4d
--- /dev/null
+++ b/apps/files_external/js/google.js
@@ -0,0 +1,76 @@
+$(document).ready(function() {
+
+ $('#externalStorage tbody tr.OC_Filestorage_Google').each(function() {
+ var configured = $(this).find('[data-parameter="configured"]');
+ if ($(configured).val() == 'true') {
+ $(this).find('.configuration').append('<span id="access" style="padding-left:0.5em;">Access granted</span>');
+ } else {
+ var token = $(this).find('[data-parameter="token"]');
+ var token_secret = $(this).find('[data-parameter="token_secret"]');
+ var params = {};
+ window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m, key, value) {
+ params[key] = value;
+ });
+ if (params['oauth_token'] !== undefined && params['oauth_verifier'] !== undefined && decodeURIComponent(params['oauth_token']) == $(token).val()) {
+ var tr = $(this);
+ $.post(OC.filePath('files_external', 'ajax', 'google.php'), { step: 2, oauth_verifier: params['oauth_verifier'], request_token: $(token).val(), request_token_secret: $(token_secret).val() }, function(result) {
+ if (result && result.status == 'success') {
+ $(token).val(result.access_token);
+ $(token_secret).val(result.access_token_secret);
+ $(configured).val('true');
+ OC.MountConfig.saveStorage(tr);
+ $(tr).find('.configuration').append('<span id="access" style="padding-left:0.5em;">Access granted</span>');
+ } else {
+ OC.dialogs.alert(result.data.message, 'Error configuring Google Drive storage');
+ }
+ });
+ } else if ($(this).find('.google').length == 0) {
+ $(this).find('.configuration').append('<a class="button google">Grant access</a>');
+ }
+ }
+ });
+
+ $('#externalStorage tbody tr').live('change', function() {
+ if ($(this).hasClass('OC_Filestorage_Google') && $(this).find('[data-parameter="configured"]').val() != 'true') {
+ if ($(this).find('.mountPoint input').val() != '') {
+ if ($(this).find('.google').length == 0) {
+ $(this).find('.configuration').append('<a class="button google">Grant access</a>');
+ }
+ }
+ }
+ });
+
+ $('#externalStorage tbody tr .mountPoint input').live('keyup', function() {
+ var tr = $(this).parent().parent();
+ if ($(tr).hasClass('OC_Filestorage_Google') && $(tr).find('[data-parameter="configured"]').val() != 'true' && $(tr).find('.google').length > 0) {
+ if ($(this).val() != '') {
+ $(tr).find('.google').show();
+ } else {
+ $(tr).find('.google').hide();
+ }
+ }
+ });
+
+ $('.google').live('click', function(event) {
+ event.preventDefault();
+ var tr = $(this).parent().parent();
+ var configured = $(this).parent().find('[data-parameter="configured"]');
+ var token = $(this).parent().find('[data-parameter="token"]');
+ var token_secret = $(this).parent().find('[data-parameter="token_secret"]');
+ $.post(OC.filePath('files_external', 'ajax', 'google.php'), { step: 1, callback: window.location.href }, function(result) {
+ if (result && result.status == 'success') {
+ $(configured).val('false');
+ $(token).val(result.data.request_token);
+ $(token_secret).val(result.data.request_token_secret);
+ if (OC.MountConfig.saveStorage(tr)) {
+ window.location = result.data.url;
+ } else {
+ OC.dialogs.alert('Fill out all required fields', 'Error configuring Google Drive storage');
+ }
+ } else {
+ OC.dialogs.alert(result.data.message, 'Error configuring Google Drive storage');
+ }
+ });
+ });
+
+});
diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js
new file mode 100644
index 00000000000..23f02bbefcb
--- /dev/null
+++ b/apps/files_external/js/settings.js
@@ -0,0 +1,182 @@
+OC.MountConfig={
+ saveStorage:function(tr) {
+ var mountPoint = $(tr).find('.mountPoint input').val();
+ if (mountPoint == '') {
+ return false;
+ }
+ var backendClass = $(tr).find('.backend').data('class');
+ var configuration = $(tr).find('.configuration input');
+ var addMountPoint = true;
+ if (configuration.length < 1) {
+ return false;
+ }
+ var classOptions = {};
+ $.each(configuration, function(index, input) {
+ if ($(input).val() == '' && !$(input).hasClass('optional')) {
+ addMountPoint = false;
+ return false;
+ }
+ if ($(input).is(':checkbox')) {
+ if ($(input).is(':checked')) {
+ classOptions[$(input).data('parameter')] = true;
+ } else {
+ classOptions[$(input).data('parameter')] = false;
+ }
+ } else {
+ classOptions[$(input).data('parameter')] = $(input).val();
+ }
+ });
+ if (addMountPoint) {
+ if ($('#externalStorage').data('admin') === true) {
+ var isPersonal = false;
+ var multiselect = $(tr).find('.chzn-select').val();
+ var oldGroups = $(tr).find('.applicable').data('applicable-groups');
+ var oldUsers = $(tr).find('.applicable').data('applicable-users');
+ $.each(multiselect, function(index, value) {
+ var pos = value.indexOf('(group)');
+ if (pos != -1) {
+ var mountType = 'group';
+ var applicable = value.substr(0, pos);
+ if ($.inArray(applicable, oldGroups) != -1) {
+ oldGroups.splice($.inArray(applicable, oldGroups), 1);
+ }
+ } else {
+ var mountType = 'user';
+ var applicable = value;
+ if ($.inArray(applicable, oldUsers) != -1) {
+ oldUsers.splice($.inArray(applicable, oldUsers), 1);
+ }
+ }
+ $.post(OC.filePath('files_external', 'ajax', 'addMountPoint.php'), { mountPoint: mountPoint, class: backendClass, classOptions: classOptions, mountType: mountType, applicable: applicable, isPersonal: isPersonal });
+ });
+ var mountType = 'group';
+ $.each(oldGroups, function(index, applicable) {
+ $.post(OC.filePath('files_external', 'ajax', 'removeMountPoint.php'), { mountPoint: mountPoint, mountType: mountType, applicable: applicable, isPersonal: isPersonal });
+ });
+ var mountType = 'user';
+ $.each(oldUsers, function(index, applicable) {
+ $.post(OC.filePath('files_external', 'ajax', 'removeMountPoint.php'), { mountPoint: mountPoint, mountType: mountType, applicable: applicable, isPersonal: isPersonal });
+ });
+ } else {
+ var isPersonal = true;
+ var mountType = 'user';
+ var applicable = OC.currentUser;
+ $.post(OC.filePath('files_external', 'ajax', 'addMountPoint.php'), { mountPoint: mountPoint, class: backendClass, classOptions: classOptions, mountType: mountType, applicable: applicable, isPersonal: isPersonal });
+ }
+ return true;
+ }
+ }
+}
+
+$(document).ready(function() {
+ $('.chzn-select').chosen();
+
+ $('#selectBackend').live('change', function() {
+ var tr = $(this).parent().parent();
+ $('#externalStorage tbody').append($(tr).clone());
+ $('#externalStorage tbody tr').last().find('.mountPoint input').val('');
+ var selected = $(this).find('option:selected').text();
+ var backendClass = $(this).val();
+ $(this).parent().text(selected);
+ if ($(tr).find('.mountPoint input').val() == '') {
+ $(tr).find('.mountPoint input').val(suggestMountPoint(selected.replace(/\s+/g, '')));
+ }
+ $(tr).addClass(backendClass);
+ $(tr).find('.backend').data('class', backendClass);
+ var configurations = $(this).data('configurations');
+ var td = $(tr).find('td.configuration');
+ $.each(configurations, function(backend, parameters) {
+ if (backend == backendClass) {
+ $.each(parameters['configuration'], function(parameter, placeholder) {
+ if (placeholder.indexOf('*') != -1) {
+ td.append('<input type="password" data-parameter="'+parameter+'" placeholder="'+placeholder.substring(1)+'" />');
+ } else if (placeholder.indexOf('!') != -1) {
+ td.append('<label><input type="checkbox" data-parameter="'+parameter+'" />'+placeholder.substring(1)+'</label>');
+ } else if (placeholder.indexOf('&') != -1) {
+ td.append('<input type="text" class="optional" data-parameter="'+parameter+'" placeholder="'+placeholder.substring(1)+'" />');
+ } else if (placeholder.indexOf('#') != -1) {
+ td.append('<input type="hidden" data-parameter="'+parameter+'" />');
+ } else {
+ td.append('<input type="text" data-parameter="'+parameter+'" placeholder="'+placeholder+'" />');
+ }
+ });
+ if (parameters['custom'] && $('#externalStorage tbody tr.'+backendClass).length == 1) {
+ OC.addScript('files_external', parameters['custom']);
+ }
+ return false;
+ }
+ });
+ $('.chz-select').chosen();
+ $(tr).find('td').last().attr('class', 'remove');
+ $(tr).find('td').last().removeAttr('style');
+ $(tr).removeAttr('id');
+ $(this).remove();
+ });
+
+ function suggestMountPoint(defaultMountPoint) {
+ var i = 1;
+ var append = '';
+ var match = true;
+ while (match && i < 20) {
+ match = false;
+ $('#externalStorage tbody td.mountPoint input').each(function(index, mountPoint) {
+ if ($(mountPoint).val() == defaultMountPoint+append) {
+ match = true;
+ return false;
+ }
+ });
+ if (match) {
+ append = i;
+ i++;
+ } else {
+ break;
+ }
+ }
+ return defaultMountPoint+append;
+ }
+
+ $('#externalStorage td').live('change', function() {
+ OC.MountConfig.saveStorage($(this).parent());
+ });
+
+ $('td.remove>img').live('click', function() {
+ var tr = $(this).parent().parent();
+ var mountPoint = $(tr).find('.mountPoint input').val();
+ if (!mountPoint) {
+ var row=this.parentNode.parentNode;
+ $.post(OC.filePath('files_external', 'ajax', 'removeRootCertificate.php'), { cert: row.id });
+ $(tr).remove();
+ return true;
+ }
+ if ($('#externalStorage').data('admin') === true) {
+ var isPersonal = false;
+ var multiselect = $(tr).find('.chzn-select').val();
+ $.each(multiselect, function(index, value) {
+ var pos = value.indexOf('(group)');
+ if (pos != -1) {
+ var mountType = 'group';
+ var applicable = value.substr(0, pos);
+ } else {
+ var mountType = 'user';
+ var applicable = value;
+ }
+ $.post(OC.filePath('files_external', 'ajax', 'removeMountPoint.php'), { mountPoint: mountPoint, mountType: mountType, applicable: applicable, isPersonal: isPersonal });
+ });
+ } else {
+ var mountType = 'user';
+ var applicable = OC.currentUser;
+ var isPersonal = true;
+ }
+ $.post(OC.filePath('files_external', 'ajax', 'removeMountPoint.php'), { mountPoint: mountPoint, mountType: mountType, applicable: applicable, isPersonal: isPersonal });
+ $(tr).remove();
+ });
+
+ $('#allowUserMounting').bind('change', function() {
+ if (this.checked) {
+ OC.AppConfig.setValue('files_external', 'allow_user_mounting', 'yes');
+ } else {
+ OC.AppConfig.setValue('files_external', 'allow_user_mounting', 'no');
+ }
+ });
+
+}); \ No newline at end of file
diff --git a/apps/files_external/l10n/.gitkeep b/apps/files_external/l10n/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/apps/files_external/l10n/.gitkeep
diff --git a/apps/files_external/l10n/ca.php b/apps/files_external/l10n/ca.php
new file mode 100644
index 00000000000..aa93379c358
--- /dev/null
+++ b/apps/files_external/l10n/ca.php
@@ -0,0 +1,18 @@
+<?php $TRANSLATIONS = array(
+"External Storage" => "Emmagatzemament extern",
+"Mount point" => "Punt de muntatge",
+"Backend" => "Dorsal",
+"Configuration" => "Configuració",
+"Options" => "Options",
+"Applicable" => "Aplicable",
+"Add mount point" => "Afegeix punt de muntatge",
+"None set" => "Cap d'establert",
+"All Users" => "Tots els usuaris",
+"Groups" => "Grups",
+"Users" => "Usuaris",
+"Delete" => "Elimina",
+"SSL root certificates" => "Certificats SSL root",
+"Import Root Certificate" => "Importa certificat root",
+"Enable User External Storage" => "Habilita l'emmagatzemament extern d'usuari",
+"Allow users to mount their own external storage" => "Permet als usuaris muntar el seu emmagatzemament extern propi"
+);
diff --git a/apps/files_external/l10n/cs_CZ.php b/apps/files_external/l10n/cs_CZ.php
new file mode 100644
index 00000000000..8f11d7da119
--- /dev/null
+++ b/apps/files_external/l10n/cs_CZ.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"External Storage" => "Externí úložiště",
+"Mount point" => "Přípojný bod",
+"Configuration" => "Konfigurace",
+"Options" => "Nastavení",
+"Add mount point" => "Přidat přípojný bod",
+"All Users" => "Všichni uživatelé",
+"Groups" => "Skupiny",
+"Users" => "Uživatelé",
+"Delete" => "Smazat",
+"Enable User External Storage" => "Zapnout uživatelské externí úložiště",
+"Allow users to mount their own external storage" => "Povolit uživatelů připojit jejich vlastní externí úložiště"
+);
diff --git a/apps/files_external/l10n/de.php b/apps/files_external/l10n/de.php
new file mode 100644
index 00000000000..4306ad33dc3
--- /dev/null
+++ b/apps/files_external/l10n/de.php
@@ -0,0 +1,18 @@
+<?php $TRANSLATIONS = array(
+"External Storage" => "Externer Speicher",
+"Mount point" => "Mount-Point",
+"Backend" => "Backend",
+"Configuration" => "Konfiguration",
+"Options" => "Optionen",
+"Applicable" => "Zutreffend",
+"Add mount point" => "Mount-Point hinzufügen",
+"None set" => "Nicht definiert",
+"All Users" => "Alle Benutzer",
+"Groups" => "Gruppen",
+"Users" => "Benutzer",
+"Delete" => "Löschen",
+"SSL root certificates" => "SSL-Root-Zertifikate",
+"Import Root Certificate" => "Root-Zertifikate importieren",
+"Enable User External Storage" => "Externen Speicher für Benutzer aktivieren",
+"Allow users to mount their own external storage" => "Erlaubt Benutzern ihre eigenen externen Speicher einzubinden"
+);
diff --git a/apps/files_external/l10n/el.php b/apps/files_external/l10n/el.php
new file mode 100644
index 00000000000..a4a910ce636
--- /dev/null
+++ b/apps/files_external/l10n/el.php
@@ -0,0 +1,9 @@
+<?php $TRANSLATIONS = array(
+"External Storage" => "ΕξωτεÏική αποθήκευση",
+"Configuration" => "Ρυθμίσεις",
+"Options" => "Επιλογές",
+"All Users" => "Όλοι οι χÏήστες",
+"Groups" => "Ομάδες",
+"Users" => "ΧÏήστες",
+"Delete" => "ΔιαγÏαφή"
+);
diff --git a/apps/files_external/l10n/eo.php b/apps/files_external/l10n/eo.php
new file mode 100644
index 00000000000..3cb8255c522
--- /dev/null
+++ b/apps/files_external/l10n/eo.php
@@ -0,0 +1,18 @@
+<?php $TRANSLATIONS = array(
+"External Storage" => "Malena memorilo",
+"Mount point" => "Surmetingo",
+"Backend" => "Motoro",
+"Configuration" => "Agordo",
+"Options" => "Malneproj",
+"Applicable" => "Aplikebla",
+"Add mount point" => "Aldoni surmetingon",
+"None set" => "Nenio agordita",
+"All Users" => "Ĉiuj uzantoj",
+"Groups" => "Grupoj",
+"Users" => "Uzantoj",
+"Delete" => "Forigi",
+"SSL root certificates" => "Radikaj SSL-atestoj",
+"Import Root Certificate" => "Enporti radikan ateston",
+"Enable User External Storage" => "Kapabligi malenan memorilon de uzanto",
+"Allow users to mount their own external storage" => "Permesi al uzantoj surmeti siajn proprajn malenajn memorilojn"
+);
diff --git a/apps/files_external/l10n/es.php b/apps/files_external/l10n/es.php
new file mode 100644
index 00000000000..c1c605735fe
--- /dev/null
+++ b/apps/files_external/l10n/es.php
@@ -0,0 +1,13 @@
+<?php $TRANSLATIONS = array(
+"External Storage" => "Almacenamiento externo",
+"Backend" => "Motor",
+"Configuration" => "Configuración",
+"Options" => "Opciones",
+"Applicable" => "Aplicable",
+"Add mount point" => "Añadir punto de montaje",
+"None set" => "No se ha configurado",
+"All Users" => "Todos los usuarios",
+"Groups" => "Grupos",
+"Users" => "Usuarios",
+"Delete" => "Eliiminar"
+);
diff --git a/apps/files_external/l10n/et_EE.php b/apps/files_external/l10n/et_EE.php
new file mode 100644
index 00000000000..a6907e775bc
--- /dev/null
+++ b/apps/files_external/l10n/et_EE.php
@@ -0,0 +1,12 @@
+<?php $TRANSLATIONS = array(
+"External Storage" => "Väline salvestuskoht",
+"Mount point" => "Ãœhenduspunkt",
+"Configuration" => "Seadistamine",
+"Options" => "Valikud",
+"Add mount point" => "Lisa ühenduspunkt",
+"None set" => "Pole määratud",
+"All Users" => "Kõik kasutajad",
+"Groups" => "Grupid",
+"Users" => "Kasutajad",
+"Delete" => "Kustuta"
+);
diff --git a/apps/files_external/l10n/fi_FI.php b/apps/files_external/l10n/fi_FI.php
new file mode 100644
index 00000000000..7dca49791e4
--- /dev/null
+++ b/apps/files_external/l10n/fi_FI.php
@@ -0,0 +1,16 @@
+<?php $TRANSLATIONS = array(
+"External Storage" => "Erillinen tallennusväline",
+"Mount point" => "Liitospiste",
+"Backend" => "Taustaosa",
+"Configuration" => "Asetukset",
+"Options" => "Valinnat",
+"Add mount point" => "Lisää liitospiste",
+"None set" => "Ei asetettu",
+"All Users" => "Kaikki käyttäjät",
+"Groups" => "Ryhmät",
+"Users" => "Käyttäjät",
+"Delete" => "Poista",
+"SSL root certificates" => "SSL-juurivarmenteet",
+"Import Root Certificate" => "Tuo juurivarmenne",
+"Allow users to mount their own external storage" => "Salli käyttäjien liittää omia erillisiä tallennusvälineitä"
+);
diff --git a/apps/files_external/l10n/fr.php b/apps/files_external/l10n/fr.php
new file mode 100644
index 00000000000..b3e76c63500
--- /dev/null
+++ b/apps/files_external/l10n/fr.php
@@ -0,0 +1,18 @@
+<?php $TRANSLATIONS = array(
+"External Storage" => "Stockage externe",
+"Mount point" => "Point de montage",
+"Backend" => "Infrastructure",
+"Configuration" => "Configuration",
+"Options" => "Options",
+"Applicable" => "Disponible",
+"Add mount point" => "Ajouter un point de montage",
+"None set" => "Aucun spécifié",
+"All Users" => "Tous les utilisateurs",
+"Groups" => "Groupes",
+"Users" => "Utilisateurs",
+"Delete" => "Supprimer",
+"SSL root certificates" => "Certificats racine SSL",
+"Import Root Certificate" => "Importer un certificat racine",
+"Enable User External Storage" => "Activer le stockage externe pour les utilisateurs",
+"Allow users to mount their own external storage" => "Autoriser les utilisateurs à monter leur propre stockage externe"
+);
diff --git a/apps/files_external/l10n/it.php b/apps/files_external/l10n/it.php
new file mode 100644
index 00000000000..927499b0172
--- /dev/null
+++ b/apps/files_external/l10n/it.php
@@ -0,0 +1,18 @@
+<?php $TRANSLATIONS = array(
+"External Storage" => "Archiviazione esterna",
+"Mount point" => "Punto di mount",
+"Backend" => "Motore",
+"Configuration" => "Configurazione",
+"Options" => "Opzioni",
+"Applicable" => "Applicabile",
+"Add mount point" => "Aggiungi punto di mount",
+"None set" => "Nessuna impostazione",
+"All Users" => "Tutti gli utenti",
+"Groups" => "Gruppi",
+"Users" => "Utenti",
+"Delete" => "Elimina",
+"SSL root certificates" => "Certificato principale per SSL",
+"Import Root Certificate" => "Importa certificato principale",
+"Enable User External Storage" => "Abilita la memoria esterna dell'utente",
+"Allow users to mount their own external storage" => "Consente agli utenti di montare la propria memoria esterna"
+);
diff --git a/apps/files_external/l10n/ja_JP.php b/apps/files_external/l10n/ja_JP.php
new file mode 100644
index 00000000000..c7d38d88321
--- /dev/null
+++ b/apps/files_external/l10n/ja_JP.php
@@ -0,0 +1,18 @@
+<?php $TRANSLATIONS = array(
+"External Storage" => "外部ストレージ",
+"Mount point" => "マウントãƒã‚¤ãƒ³ãƒˆ",
+"Backend" => "ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰",
+"Configuration" => "設定",
+"Options" => "オプション",
+"Applicable" => "é©ç”¨ç¯„囲",
+"Add mount point" => "マウントãƒã‚¤ãƒ³ãƒˆã‚’追加",
+"None set" => "未設定",
+"All Users" => "ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶",
+"Groups" => "グループ",
+"Users" => "ユーザ",
+"Delete" => "削除",
+"SSL root certificates" => "SSLルート証明書",
+"Import Root Certificate" => "ルート証明書をインãƒãƒ¼ãƒˆ",
+"Enable User External Storage" => "ユーザã®å¤–部ストレージを有効ã«ã™ã‚‹",
+"Allow users to mount their own external storage" => "ユーザã«å¤–部ストレージã®ãƒžã‚¦ãƒ³ãƒˆã‚’許å¯ã™ã‚‹"
+);
diff --git a/apps/files_external/l10n/lt_LT.php b/apps/files_external/l10n/lt_LT.php
new file mode 100644
index 00000000000..00022aa3d38
--- /dev/null
+++ b/apps/files_external/l10n/lt_LT.php
@@ -0,0 +1,9 @@
+<?php $TRANSLATIONS = array(
+"Configuration" => "Konfigūracija",
+"Options" => "Nustatymai",
+"None set" => "Nieko nepasirinkta",
+"All Users" => "Visi vartotojai",
+"Groups" => "GrupÄ—s",
+"Users" => "Vartotojai",
+"Delete" => "IÅ¡trinti"
+);
diff --git a/apps/files_external/l10n/pl.php b/apps/files_external/l10n/pl.php
new file mode 100644
index 00000000000..df0ed54e80f
--- /dev/null
+++ b/apps/files_external/l10n/pl.php
@@ -0,0 +1,18 @@
+<?php $TRANSLATIONS = array(
+"External Storage" => "Zewnętrzna zasoby dyskowe",
+"Mount point" => "Punkt montowania",
+"Backend" => "Zaplecze",
+"Configuration" => "Konfiguracja",
+"Options" => "Opcje",
+"Applicable" => "Zastosowanie",
+"Add mount point" => "Dodaj punkt montowania",
+"None set" => "Nie ustawione",
+"All Users" => "Wszyscy uzytkownicy",
+"Groups" => "Grupy",
+"Users" => "Użytkownicy",
+"Delete" => "Usuń",
+"SSL root certificates" => "Główny certyfikat SSL",
+"Import Root Certificate" => "Importuj główny certyfikat",
+"Enable User External Storage" => "Włącz zewnętrzne zasoby dyskowe użytkownika",
+"Allow users to mount their own external storage" => "Zezwalaj użytkownikom na montowanie ich własnych zewnętrznych zasobów dyskowych"
+);
diff --git a/apps/files_external/l10n/sl.php b/apps/files_external/l10n/sl.php
new file mode 100644
index 00000000000..d588844467e
--- /dev/null
+++ b/apps/files_external/l10n/sl.php
@@ -0,0 +1,18 @@
+<?php $TRANSLATIONS = array(
+"External Storage" => "Zunanja podatkovna shramba",
+"Mount point" => "Priklopna toÄka",
+"Backend" => "Zaledje",
+"Configuration" => "Nastavitve",
+"Options" => "Možnosti",
+"Applicable" => "Se uporablja",
+"Add mount point" => "Dodaj priklopno toÄko",
+"None set" => "Ni nastavljeno",
+"All Users" => "Vsi uporabniki",
+"Groups" => "Skupine",
+"Users" => "Uporabniki",
+"Delete" => "Izbriši",
+"SSL root certificates" => "SSL korenski certifikati",
+"Import Root Certificate" => "Uvozi korenski certifikat",
+"Enable User External Storage" => "OmogoÄi uporabo zunanje podatkovne shrambe za uporabnike",
+"Allow users to mount their own external storage" => "Dovoli uporabnikom priklop lastne zunanje podatkovne shrambe"
+);
diff --git a/apps/files_external/l10n/sv.php b/apps/files_external/l10n/sv.php
new file mode 100644
index 00000000000..0838df6a32b
--- /dev/null
+++ b/apps/files_external/l10n/sv.php
@@ -0,0 +1,18 @@
+<?php $TRANSLATIONS = array(
+"External Storage" => "Extern lagring",
+"Mount point" => "Monteringspunkt",
+"Backend" => "Källa",
+"Configuration" => "Konfiguration",
+"Options" => "Alternativ",
+"Applicable" => "Tillämplig",
+"Add mount point" => "Lägg till monteringspunkt",
+"None set" => "Ingen angiven",
+"All Users" => "Alla användare",
+"Groups" => "Grupper",
+"Users" => "Användare",
+"Delete" => "Radera",
+"SSL root certificates" => "SSL rotcertifikat",
+"Import Root Certificate" => "Importera rotcertifikat",
+"Enable User External Storage" => "Aktivera extern lagring för användare",
+"Allow users to mount their own external storage" => "Tillåt användare att montera egen extern lagring"
+);
diff --git a/apps/files_external/l10n/th_TH.php b/apps/files_external/l10n/th_TH.php
new file mode 100644
index 00000000000..84a233046eb
--- /dev/null
+++ b/apps/files_external/l10n/th_TH.php
@@ -0,0 +1,18 @@
+<?php $TRANSLATIONS = array(
+"External Storage" => "พื้นทีจัดเà¸à¹‡à¸šà¸‚้อมูลจาà¸à¸ à¸²à¸¢à¸™à¸­à¸",
+"Mount point" => "จุดชี้ตำà¹à¸«à¸™à¹ˆà¸‡",
+"Backend" => "ด้านหลังระบบ",
+"Configuration" => "à¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่า",
+"Options" => "ตัวเลือà¸",
+"Applicable" => "สามารถใช้งานได้",
+"Add mount point" => "เพิ่มจุดชี้ตำà¹à¸«à¸™à¹ˆà¸‡",
+"None set" => "ยังไม่มีà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”",
+"All Users" => "ผู้ใช้งานทั้งหมด",
+"Groups" => "à¸à¸¥à¸¸à¹ˆà¸¡",
+"Users" => "ผู้ใช้งาน",
+"Delete" => "ลบ",
+"SSL root certificates" => "ใบรับรองความปลอดภัยด้วยระบบ SSL จาภRoot",
+"Import Root Certificate" => "นำเข้าข้อมูลใบรับรองความปลอดภัยจาภRoot",
+"Enable User External Storage" => "เปิดให้มีà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸žà¸·à¹‰à¸™à¸—ี่จัดเà¸à¹‡à¸šà¸‚้อมูลของผู้ใช้งานจาà¸à¸ à¸²à¸¢à¸™à¸­à¸à¹„ด้",
+"Allow users to mount their own external storage" => "อนุà¸à¸²à¸•à¹ƒà¸«à¹‰à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸ªà¸²à¸¡à¸²à¸£à¸–ชี้ตำà¹à¸«à¸™à¹ˆà¸‡à¹„ปที่พื้นที่จัดเà¸à¹‡à¸šà¸‚้อมูลภายนอà¸à¸‚องตนเองได้"
+);
diff --git a/apps/files_external/lib/amazons3.php b/apps/files_external/lib/amazons3.php
new file mode 100644
index 00000000000..3c2e3330175
--- /dev/null
+++ b/apps/files_external/lib/amazons3.php
@@ -0,0 +1,236 @@
+<?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/>.
+*/
+
+require_once 'aws-sdk/sdk.class.php';
+
+class OC_Filestorage_AmazonS3 extends OC_Filestorage_Common {
+
+ private $s3;
+ private $bucket;
+ private $objects = array();
+
+ private static $tempFiles = array();
+
+ // TODO options: storage class, encryption server side, encrypt before upload?
+
+ public function __construct($params) {
+ $this->s3 = new AmazonS3(array('key' => $params['key'], 'secret' => $params['secret']));
+ $this->bucket = $params['bucket'];
+ }
+
+ private function getObject($path) {
+ if (array_key_exists($path, $this->objects)) {
+ return $this->objects[$path];
+ } else {
+ $response = $this->s3->get_object_metadata($this->bucket, $path);
+ if ($response) {
+ $this->objects[$path] = $response;
+ 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.'/');
+ if ($response) {
+ $this->objects[$path] = $response;
+ return $response;
+ }
+ }
+ }
+ return false;
+ }
+
+ public function mkdir($path) {
+ // Folders in Amazon S3 are 0 byte objects with a '/' at the end of the name
+ if (substr($path, -1) != '/') {
+ $path .= '/';
+ }
+ $response = $this->s3->create_object($this->bucket, $path, array('body' => ''));
+ return $response->isOK();
+ }
+
+ public function rmdir($path) {
+ if (substr($path, -1) != '/') {
+ $path .= '/';
+ }
+ return $this->unlink($path);
+ }
+
+ public function opendir($path) {
+ if ($path == '' || $path == '/') {
+ // Use the '/' delimiter to only fetch objects inside the folder
+ $opt = array('delimiter' => '/');
+ } else {
+ if (substr($path, -1) != '/') {
+ $path .= '/';
+ }
+ $opt = array('delimiter' => '/', 'prefix' => $path);
+ }
+ $response = $this->s3->list_objects($this->bucket, $opt);
+ if ($response->isOK()) {
+ $files = array();
+ foreach ($response->body->Contents as $object) {
+ // The folder being opened also shows up in the list of objects, don't add it to the files
+ if ($object->Key != $path) {
+ $files[] = basename($object->Key);
+ }
+ }
+ // Sub folders show up as CommonPrefixes
+ foreach ($response->body->CommonPrefixes as $object) {
+ $files[] = basename($object->Prefix);
+ }
+ OC_FakeDirStream::$dirs['amazons3'.$path] = $files;
+ return opendir('fakedir://amazons3'.$path);
+ }
+ return false;
+ }
+
+ public function stat($path) {
+ if ($path == '' || $path == '/') {
+ $stat['size'] = $this->s3->get_bucket_filesize($this->bucket);
+ $stat['atime'] = time();
+ $stat['mtime'] = $stat['atime'];
+ $stat['ctime'] = $stat['atime'];
+ } else if ($object = $this->getObject($path)) {
+ $stat['size'] = $object['Size'];
+ $stat['atime'] = time();
+ $stat['mtime'] = strtotime($object['LastModified']);
+ $stat['ctime'] = $stat['mtime'];
+ }
+ if (isset($stat)) {
+ return $stat;
+ }
+ return false;
+ }
+
+ public function filetype($path) {
+ if ($path == '' || $path == '/') {
+ return 'dir';
+ } else if ($object = $this->getObject($path)) {
+ // Amazon S3 doesn't have typical folders, this is an alternative method to detect a folder
+ if (substr($object['Key'], -1) == '/' && $object['Size'] == 0) {
+ return 'dir';
+ } else {
+ return 'file';
+ }
+ }
+ return false;
+ }
+
+ public function isReadable($path) {
+ // TODO Check acl and determine who grantee is
+ return true;
+ }
+
+ public function isUpdatable($path) {
+ // TODO Check acl and determine who grantee is
+ return true;
+ }
+
+ public function file_exists($path) {
+ if ($this->filetype($path) == 'dir' && substr($path, -1) != '/') {
+ $path .= '/';
+ }
+ return $this->s3->if_object_exists($this->bucket, $path);
+ }
+
+ public function unlink($path) {
+ $response = $this->s3->delete_object($this->bucket, $path);
+ return $response->isOK();
+ }
+
+ public function fopen($path, $mode) {
+ switch ($mode) {
+ case 'r':
+ case 'rb':
+ $tmpFile = OC_Helper::tmpFile();
+ $handle = fopen($tmpFile, 'w');
+ $response = $this->s3->get_object($this->bucket, $path, array('fileDownload' => $handle));
+ if ($response->isOK()) {
+ return fopen($tmpFile, 'r');
+ }
+ break;
+ 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_CloseStreamWrapper::$callBacks[$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 false;
+ }
+
+ public function writeBack($tmpFile) {
+ if (isset(self::$tempFiles[$tmpFile])) {
+ $handle = fopen($tmpFile, 'r');
+ $response = $this->s3->create_object($this->bucket, self::$tempFiles[$tmpFile], array('fileUpload' => $handle));
+ if ($response->isOK()) {
+ unlink($tmpFile);
+ }
+ }
+ }
+
+ public function getMimeType($path) {
+ if ($this->filetype($path) == 'dir') {
+ return 'httpd/unix-directory';
+ } else if ($object = $this->getObject($path)) {
+ return $object['ContentType'];
+ }
+ return false;
+ }
+
+ public function free_space($path) {
+ // Infinite?
+ return false;
+ }
+
+ public function touch($path, $mtime = null) {
+ if (is_null($mtime)) {
+ $mtime = time();
+ }
+ if ($this->filetype($path) == 'dir' && substr($path, -1) != '/') {
+ $path .= '/';
+ }
+ $response = $this->s3->update_object($this->bucket, $path, array('meta' => array('LastModified' => $mtime)));
+ return $response->isOK();
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
new file mode 100755
index 00000000000..f1bc16e2537
--- /dev/null
+++ b/apps/files_external/lib/config.php
@@ -0,0 +1,283 @@
+<?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/>.
+*/
+
+/**
+* Class to configure the config/mount.php and data/$user/mount.php files
+*/
+class OC_Mount_Config {
+
+ const MOUNT_TYPE_GLOBAL = 'global';
+ const MOUNT_TYPE_GROUP = 'group';
+ const MOUNT_TYPE_USER = 'user';
+
+ /**
+ * Get details on each of the external storage backends, used for the mount config UI
+ * If a custom UI is needed, add the key 'custom' and a javascript file with that name will be loaded
+ * If the configuration parameter should be secret, add a '*' to the beginning of the value
+ * If the configuration parameter is a boolean, add a '!' to the beginning of the value
+ * If the configuration parameter is optional, add a '&' to the beginning of the value
+ * If the configuration parameter is hidden, add a '#' to the begining of the value
+ * @return array
+ */
+ public static function getBackends() {
+ return array(
+ 'OC_Filestorage_Local' => array('backend' => 'Local', 'configuration' => array('datadir' => 'Location')),
+ 'OC_Filestorage_AmazonS3' => array('backend' => 'Amazon S3', 'configuration' => array('key' => 'Key', 'secret' => '*Secret', 'bucket' => 'Bucket')),
+ 'OC_Filestorage_Dropbox' => array('backend' => 'Dropbox', 'configuration' => array('configured' => '#configured','app_key' => 'App key', 'app_secret' => 'App secret', 'token' => '#token', 'token_secret' => '#token_secret'), 'custom' => 'dropbox'),
+ 'OC_Filestorage_FTP' => array('backend' => 'FTP', 'configuration' => array('host' => 'URL', 'user' => 'Username', 'password' => '*Password', 'root' => '&Root', 'secure' => '!Secure ftps://')),
+ 'OC_Filestorage_Google' => array('backend' => 'Google Drive', 'configuration' => array('configured' => '#configured', 'token' => '#token', 'token_secret' => '#token secret'), 'custom' => 'google'),
+ 'OC_Filestorage_SWIFT' => array('backend' => 'OpenStack Swift', 'configuration' => array('host' => 'URL', 'user' => 'Username', 'token' => '*Token', 'root' => '&Root', 'secure' => '!Secure ftps://')),
+ 'OC_Filestorage_SMB' => array('backend' => 'SMB', 'configuration' => array('host' => 'URL', 'user' => 'Username', 'password' => '*Password', 'share' => 'Share', 'root' => '&Root')),
+ 'OC_Filestorage_DAV' => array('backend' => 'WebDAV', 'configuration' => array('host' => 'URL', 'user' => 'Username', 'password' => '*Password', 'root' => '&Root', 'secure' => '!Secure https://'))
+ );
+ }
+
+ /**
+ * Get the system mount points
+ * The returned array is not in the same format as getUserMountPoints()
+ * @return array
+ */
+ public static function getSystemMountPoints() {
+ $mountPoints = self::readData(false);
+ $backends = self::getBackends();
+ $system = array();
+ if (isset($mountPoints[self::MOUNT_TYPE_GROUP])) {
+ foreach ($mountPoints[self::MOUNT_TYPE_GROUP] as $group => $mounts) {
+ foreach ($mounts as $mountPoint => $mount) {
+ // Remove '/$user/files/' from mount point
+ $mountPoint = substr($mountPoint, 13);
+ // Merge the mount point into the current mount points
+ if (isset($system[$mountPoint]) && $system[$mountPoint]['configuration'] == $mount['options']) {
+ $system[$mountPoint]['applicable']['groups'] = array_merge($system[$mountPoint]['applicable']['groups'], array($group));
+ } else {
+ $system[$mountPoint] = array('class' => $mount['class'], 'backend' => $backends[$mount['class']]['backend'], 'configuration' => $mount['options'], 'applicable' => array('groups' => array($group), 'users' => array()));
+ }
+ }
+ }
+ }
+ if (isset($mountPoints[self::MOUNT_TYPE_USER])) {
+ foreach ($mountPoints[self::MOUNT_TYPE_USER] as $user => $mounts) {
+ foreach ($mounts as $mountPoint => $mount) {
+ // Remove '/$user/files/' from mount point
+ $mountPoint = substr($mountPoint, 13);
+ // Merge the mount point into the current mount points
+ if (isset($system[$mountPoint]) && $system[$mountPoint]['configuration'] == $mount['options']) {
+ $system[$mountPoint]['applicable']['users'] = array_merge($system[$mountPoint]['applicable']['users'], array($user));
+ } else {
+ $system[$mountPoint] = array('class' => $mount['class'], 'backend' => $backends[$mount['class']]['backend'], 'configuration' => $mount['options'], 'applicable' => array('groups' => array(), 'users' => array($user)));
+ }
+ }
+ }
+ }
+ return $system;
+ }
+
+ /**
+ * Get the personal mount points of the current user
+ * The returned array is not in the same format as getUserMountPoints()
+ * @return array
+ */
+ public static function getPersonalMountPoints() {
+ $mountPoints = self::readData(true);
+ $backends = self::getBackends();
+ $uid = OCP\User::getUser();
+ $personal = array();
+ if (isset($mountPoints[self::MOUNT_TYPE_USER][$uid])) {
+ foreach ($mountPoints[self::MOUNT_TYPE_USER][$uid] as $mountPoint => $mount) {
+ // Remove '/uid/files/' from mount point
+ $personal[substr($mountPoint, strlen($uid) + 8)] = array('class' => $mount['class'], 'backend' => $backends[$mount['class']]['backend'], 'configuration' => $mount['options']);
+ }
+ }
+ return $personal;
+ }
+
+
+ /**
+ * Add a mount point to the filesystem
+ * @param string Mount point
+ * @param string Backend class
+ * @param array Backend parameters for the class
+ * @param string MOUNT_TYPE_GROUP | MOUNT_TYPE_USER
+ * @param string User or group to apply mount to
+ * @param bool Personal or system mount point i.e. is this being called from the personal or admin page
+ * @return bool
+ */
+ public static function addMountPoint($mountPoint, $class, $classOptions, $mountType, $applicable, $isPersonal = false) {
+ 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') {
+ return false;
+ }
+ $mountPoint = '/'.$applicable.'/files/'.ltrim($mountPoint, '/');
+ } else {
+ $mountPoint = '/$user/files/'.ltrim($mountPoint, '/');
+ }
+ $mount = array($applicable => array($mountPoint => array('class' => $class, 'options' => $classOptions)));
+ $mountPoints = self::readData($isPersonal);
+ // Merge the new mount point into the current mount points
+ if (isset($mountPoints[$mountType])) {
+ if (isset($mountPoints[$mountType][$applicable])) {
+ $mountPoints[$mountType][$applicable] = array_merge($mountPoints[$mountType][$applicable], $mount[$applicable]);
+ } else {
+ $mountPoints[$mountType] = array_merge($mountPoints[$mountType], $mount);
+ }
+ } else {
+ $mountPoints[$mountType] = $mount;
+ }
+ self::writeData($isPersonal, $mountPoints);
+ return true;
+ }
+
+ /**
+ *
+ * @param string Mount point
+ * @param string MOUNT_TYPE_GROUP | MOUNT_TYPE_USER
+ * @param string User or group to remove mount from
+ * @param bool Personal or system mount point
+ * @return bool
+ */
+ public static function removeMountPoint($mountPoint, $mountType, $applicable, $isPersonal = false) {
+ // Verify that the mount point applies for the current user
+ if ($isPersonal) {
+ if ($applicable != OCP\User::getUser()) {
+ return false;
+ }
+ $mountPoint = '/'.$applicable.'/files/'.ltrim($mountPoint, '/');
+ } else {
+ $mountPoint = '/$user/files/'.ltrim($mountPoint, '/');
+ }
+ $mountPoints = self::readData($isPersonal);
+ // Remove mount point
+ unset($mountPoints[$mountType][$applicable][$mountPoint]);
+ // Unset parent arrays if empty
+ if (empty($mountPoints[$mountType][$applicable])) {
+ unset($mountPoints[$mountType][$applicable]);
+ if (empty($mountPoints[$mountType])) {
+ unset($mountPoints[$mountType]);
+ }
+ }
+ self::writeData($isPersonal, $mountPoints);
+ return true;
+ }
+
+ /**
+ * Read the mount points in the config file into an array
+ * @param bool Personal or system config file
+ * @return array
+ */
+ private static function readData($isPersonal) {
+ if ($isPersonal) {
+ $file = OC::$SERVERROOT.'/data/'.OCP\User::getUser().'/mount.php';
+ } else {
+ $file = OC::$SERVERROOT.'/config/mount.php';
+ }
+ if (is_file($file)) {
+ $mountPoints = include($file);
+ if (is_array($mountPoints)) {
+ return $mountPoints;
+ }
+ }
+ return array();
+ }
+
+ /**
+ * Write the mount points to the config file
+ * @param bool Personal or system config file
+ * @param array Mount points
+ */
+ private static function writeData($isPersonal, $data) {
+ if ($isPersonal) {
+ $file = OC::$SERVERROOT.'/data/'.OCP\User::getUser().'/mount.php';
+ } else {
+ $file = OC::$SERVERROOT.'/config/mount.php';
+ }
+ $content = "<?php return array (\n";
+ if (isset($data[self::MOUNT_TYPE_GROUP])) {
+ $content .= "\t'group' => array (\n";
+ foreach ($data[self::MOUNT_TYPE_GROUP] as $group => $mounts) {
+ $content .= "\t\t'".$group."' => array (\n";
+ foreach ($mounts as $mountPoint => $mount) {
+ $content .= "\t\t\t'".$mountPoint."' => ".str_replace("\n", '', var_export($mount, true)).",\n";
+
+ }
+ $content .= "\t\t),\n";
+ }
+ $content .= "\t),\n";
+ }
+ if (isset($data[self::MOUNT_TYPE_USER])) {
+ $content .= "\t'user' => array (\n";
+ foreach ($data[self::MOUNT_TYPE_USER] as $user => $mounts) {
+ $content .= "\t\t'".$user."' => array (\n";
+ foreach ($mounts as $mountPoint => $mount) {
+ $content .= "\t\t\t'".$mountPoint."' => ".str_replace("\n", '', var_export($mount, true)).",\n";
+ }
+ $content .= "\t\t),\n";
+ }
+ $content .= "\t),\n";
+ }
+ $content .= ");\n?>";
+ @file_put_contents($file, $content);
+ }
+
+ /**
+ * Returns all user uploaded ssl root certificates
+ * @return array
+ */
+ public static function getCertificates() {
+ $view = \OCP\Files::getStorage('files_external');
+ $path=\OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath("").'uploads/';
+ if (!is_dir($path)) mkdir($path);
+ $result = array();
+ $handle = opendir($path);
+ while (false !== ($file = readdir($handle))) {
+ if($file != '.' && $file != '..') $result[] = $file;
+ }
+ return $result;
+ }
+
+ /**
+ * creates certificate bundle
+ */
+ public static function createCertificateBundle() {
+ $view = \OCP\Files::getStorage("files_external");
+ $path = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath("");
+
+ $certs = OC_Mount_Config::getCertificates();
+ $fh_certs = fopen($path."/rootcerts.crt", 'w');
+ foreach ($certs as $cert) {
+ $file=$path.'/uploads/'.$cert;
+ $fh = fopen($file, "r");
+ $data = fread($fh, filesize($file));
+ fclose($fh);
+ if (strpos($data, 'BEGIN CERTIFICATE')) {
+ fwrite($fh_certs, $data);
+ }
+ }
+
+ fclose($fh_certs);
+
+ return true;
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/apps/files_external/lib/dropbox.php b/apps/files_external/lib/dropbox.php
new file mode 100755
index 00000000000..b90563a5065
--- /dev/null
+++ b/apps/files_external/lib/dropbox.php
@@ -0,0 +1,255 @@
+<?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/>.
+*/
+
+require_once 'Dropbox/autoload.php';
+
+class OC_Filestorage_Dropbox extends OC_Filestorage_Common {
+
+ private $dropbox;
+ private $metaData = array();
+
+ private static $tempFiles = array();
+
+ public function __construct($params) {
+ if (isset($params['configured']) && $params['configured'] == 'true' && isset($params['app_key']) && isset($params['app_secret']) && isset($params['token']) && isset($params['token_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');
+ } else {
+ throw new Exception('Creating OC_Filestorage_Dropbox storage failed');
+ }
+ }
+
+ private function getMetaData($path, $list = false) {
+ if (!$list && isset($this->metaData[$path])) {
+ return $this->metaData[$path];
+ } else {
+ if ($list) {
+ try {
+ $response = $this->dropbox->getMetaData($path);
+ } catch (Exception $exception) {
+ OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ return false;
+ }
+ if ($response && isset($response['contents'])) {
+ $contents = $response['contents'];
+ // Cache folder's contents
+ foreach ($contents as $file) {
+ $this->metaData[$path.'/'.basename($file['path'])] = $file;
+ }
+ unset($response['contents']);
+ $this->metaData[$path] = $response;
+ }
+ $this->metaData[$path] = $response;
+ // Return contents of folder only
+ return $contents;
+ } else {
+ try {
+ $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);
+ return false;
+ }
+ }
+ }
+ }
+
+ public function mkdir($path) {
+ try {
+ $this->dropbox->createFolder($path);
+ return true;
+ } catch (Exception $exception) {
+ OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ return false;
+ }
+ }
+
+ public function rmdir($path) {
+ return $this->unlink($path);
+ }
+
+ public function opendir($path) {
+ if ($contents = $this->getMetaData($path, true)) {
+ $files = array();
+ foreach ($contents as $file) {
+ $files[] = basename($file['path']);
+ }
+ OC_FakeDirStream::$dirs['dropbox'.$path] = $files;
+ return opendir('fakedir://dropbox'.$path);
+ }
+ return false;
+ }
+
+ public function stat($path) {
+ if ($metaData = $this->getMetaData($path)) {
+ $stat['size'] = $metaData['bytes'];
+ $stat['atime'] = time();
+ $stat['mtime'] = (isset($metaData['modified'])) ? strtotime($metaData['modified']) : time();
+ $stat['ctime'] = $stat['mtime'];
+ return $stat;
+ }
+ return false;
+ }
+
+ public function filetype($path) {
+ if ($path == '' || $path == '/') {
+ return 'dir';
+ } else if ($metaData = $this->getMetaData($path)) {
+ if ($metaData['is_dir'] == 'true') {
+ return 'dir';
+ } else {
+ return 'file';
+ }
+ }
+ return false;
+ }
+
+ public function isReadable($path) {
+ return $this->file_exists($path);
+ }
+
+ public function isUpdatable($path) {
+ return $this->file_exists($path);
+ }
+
+ public function file_exists($path) {
+ if ($path == '' || $path == '/') {
+ return true;
+ }
+ if ($this->getMetaData($path)) {
+ return true;
+ }
+ return false;
+ }
+
+ public function unlink($path) {
+ try {
+ $this->dropbox->delete($path);
+ return true;
+ } catch (Exception $exception) {
+ OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ return false;
+ }
+ }
+
+ public function rename($path1, $path2) {
+ try {
+ $this->dropbox->move($path1, $path2);
+ return true;
+ } catch (Exception $exception) {
+ OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ return false;
+ }
+ }
+
+ public function copy($path1, $path2) {
+ try {
+ $this->dropbox->copy($path1, $path2);
+ return true;
+ } catch (Exception $exception) {
+ OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ return false;
+ }
+ }
+
+ public function fopen($path, $mode) {
+ switch ($mode) {
+ case 'r':
+ case 'rb':
+ $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);
+ return false;
+ }
+ 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_CloseStreamWrapper::$callBacks[$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 false;
+ }
+
+ public function writeBack($tmpFile) {
+ if (isset(self::$tempFiles[$tmpFile])) {
+ $handle = fopen($tmpFile, 'r');
+ try {
+ $this->dropbox->putFile(self::$tempFiles[$tmpFile], $handle);
+ unlink($tmpFile);
+ } catch (Exception $exception) {
+ OCP\Util::writeLog('files_external', $exception->getMessage(), OCP\Util::ERROR);
+ }
+ }
+ }
+
+ public function getMimeType($path) {
+ if ($this->filetype($path) == 'dir') {
+ return 'httpd/unix-directory';
+ } else if ($metaData = $this->getMetaData($path)) {
+ return $metaData['mime_type'];
+ }
+ return false;
+ }
+
+ public function free_space($path) {
+ 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);
+ return false;
+ }
+ }
+
+ public function touch($path, $mtime = null) {
+ return false;
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/apps/files_external/lib/google.php b/apps/files_external/lib/google.php
index d2285a6d82c..73317bbf714 100644
--- a/apps/files_external/lib/google.php
+++ b/apps/files_external/lib/google.php
@@ -20,7 +20,7 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-require_once 'common.inc.php';
+require_once 'Google/common.inc.php';
class OC_Filestorage_Google extends OC_Filestorage_Common {
@@ -31,16 +31,20 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
private static $tempFiles = array();
- public function __construct($arguments) {
- $consumer_key = isset($arguments['consumer_key']) ? $arguments['consumer_key'] : 'anonymous';
- $consumer_secret = isset($arguments['consumer_secret']) ? $arguments['consumer_secret'] : 'anonymous';
- $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
- $this->oauth_token = new OAuthToken($arguments['token'], $arguments['token_secret']);
- $this->sig_method = new OAuthSignatureMethod_HMAC_SHA1();
- $this->entries = array();
+ public function __construct($params) {
+ if (isset($params['configured']) && $params['configured'] == 'true' && isset($params['token']) && isset($params['token_secret'])) {
+ $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->entries = array();
+ } else {
+ throw new Exception('Creating OC_Filestorage_Google storage failed');
+ }
}
- private function sendRequest($uri, $httpMethod, $postData = null, $extraHeaders = null, $isDownload = false, $returnHeaders = false, $isContentXML = true) {
+ private function sendRequest($uri, $httpMethod, $postData = null, $extraHeaders = null, $isDownload = false, $returnHeaders = false, $isContentXML = true, $returnHTTPCode = false) {
$uri = trim($uri);
// create an associative array from each key/value url query param pair.
$params = array();
@@ -108,6 +112,8 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
if ($httpCode <= 308) {
if ($isDownload) {
return $tmpFile;
+ } else if ($returnHTTPCode) {
+ return array('result' => $result, 'code' => $httpCode);
} else {
return $result;
}
@@ -176,7 +182,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
if ($collection == '/' || $collection == '\.' || $collection == '.') {
$uri = 'https://docs.google.com/feeds/default/private/full';
// Get parent content link
- } else if ($dom = $this->getResource(basename($dir))) {
+ } else if ($dom = $this->getResource(basename($collection))) {
$uri = $dom->getElementsByTagName('content')->item(0)->getAttribute('src');
}
if (isset($uri)) {
@@ -235,8 +241,8 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
$this->entries[$name] = $entry;
}
}
- OC_FakeDirStream::$dirs['google'] = $files;
- return opendir('fakedir://google');
+ OC_FakeDirStream::$dirs['google'.$path] = $files;
+ return opendir('fakedir://google'.$path);
}
public function stat($path) {
@@ -278,11 +284,11 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
return false;
}
- public function is_readable($path) {
+ public function isReadable($path) {
return true;
}
- public function is_writable($path) {
+ public function isUpdatable($path) {
if ($path == '' || $path == '/') {
return true;
} else if ($entry = $this->getResource($path)) {
@@ -339,7 +345,7 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
break;
}
}
- $title = basename($path);
+ $title = basename($path2);
// Construct post data
$postData = '<?xml version="1.0" encoding="UTF-8"?>';
$postData .= '<entry xmlns="http://www.w3.org/2005/Atom" xmlns:docs="http://schemas.google.com/docs/2007" xmlns:gd="http://schemas.google.com/g/2005" gd:etag='.$etag.'>';
@@ -350,13 +356,13 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
} else {
// Move to different collection
if ($collectionEntry = $this->getResource($collection)) {
- $feedUri = $colelctionEntry->getElementsByTagName('content')->item(0)->getAttribute('src');
+ $feedUri = $collectionEntry->getElementsByTagName('content')->item(0)->getAttribute('src');
// Construct post data
$postData = '<?xml version="1.0" encoding="UTF-8"?>';
$postData .= '<entry xmlns="http://www.w3.org/2005/Atom">';
$postData .= '<id>'.$entry->getElementsByTagName('id')->item(0).'</id>';
$postData .= '</entry>';
- $this->sendRequest($uri, 'POST', $postData);
+ $this->sendRequest($feedUri, 'POST', $postData);
return true;
}
}
@@ -422,10 +428,9 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
}
}
if (!isset($uploadUri) && $entry) {
- $etag = $entry->getAttribute('gd:etag');
$links = $entry->getElementsByTagName('link');
foreach ($links as $link) {
- if ($link->getAttribute('rel') == 'http://schemas.google.com/g/2005#resumable-edit-media') {
+ if ($link->getAttribute('rel') == 'http://schemas.google.com/g/2005#resumable-create-media') {
$uploadUri = $link->getAttribute('href');
break;
}
@@ -461,12 +466,12 @@ class OC_Filestorage_Google extends OC_Filestorage_Common {
}
}
$end = $i + $chunkSize - 1;
- $headers = array('Content-Length: '.$chunkSize, 'Content-Type: '.$mimetype, 'Content Range: bytes '.$i.'-'.$end.'/'.$size);
+ $headers = array('Content-Length: '.$chunkSize, 'Content-Type: '.$mimetype, 'Content-Range: bytes '.$i.'-'.$end.'/'.$size);
$postData = fread($handle, $chunkSize);
- $result = $this->sendRequest($uploadUri, 'PUT', $postData, $headers, false, true, false);
- if ($result) {
- // Get next location to upload file chunk
- if (preg_match('@^Location: (.*)$@m', $result, $matches)) {
+ $result = $this->sendRequest($uploadUri, 'PUT', $postData, $headers, false, true, false, true);
+ if ($result['code'] == '308') {
+ if (preg_match('@^Location: (.*)$@m', $result['result'], $matches)) {
+ // Get next location to upload file chunk
$uploadUri = trim($matches[1]);
}
$i += $chunkSize;
diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php
index 96470002c35..8a5e993b1d0 100644
--- a/apps/files_external/lib/smb.php
+++ b/apps/files_external/lib/smb.php
@@ -15,21 +15,19 @@ class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{
private $root;
private $share;
- private static $tempFiles=array();
-
public function __construct($params){
$this->host=$params['host'];
$this->user=$params['user'];
$this->password=$params['password'];
$this->share=$params['share'];
$this->root=isset($params['root'])?$params['root']:'/';
+ if(!$this->root || $this->root[0]!='/'){
+ $this->root='/'.$this->root;
+ }
if(substr($this->root,-1,1)!='/'){
$this->root.='/';
}
- if(substr($this->root,0,1)!='/'){
- $this->root='/'.$this->root;
- }
- if(substr($this->share,0,1)!='/'){
+ if(!$this->share || $this->share[0]!='/'){
$this->share='/'.$this->share;
}
if(substr($this->share,-1,1)=='/'){
diff --git a/apps/files_external/lib/streamwrapper.php b/apps/files_external/lib/streamwrapper.php
index 7d56445361e..467c5a5b845 100644
--- a/apps/files_external/lib/streamwrapper.php
+++ b/apps/files_external/lib/streamwrapper.php
@@ -32,11 +32,11 @@ abstract class OC_FileStorage_StreamWrapper extends OC_Filestorage_Common{
return filetype($this->constructUrl($path));
}
- public function is_readable($path){
+ public function isReadable($path){
return true;//not properly supported
}
- public function is_writable($path){
+ public function isUpdatable($path){
return true;//not properly supported
}
diff --git a/apps/files_external/lib/swift.php b/apps/files_external/lib/swift.php
index 58b95a6ae01..94ccde1ff8f 100644
--- a/apps/files_external/lib/swift.php
+++ b/apps/files_external/lib/swift.php
@@ -353,11 +353,11 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
}
}
- public function is_readable($path){
+ public function isReadable($path){
return true;
}
- public function is_writable($path){
+ public function isUpdatable($path){
return true;
}
diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php
index d136f04f3eb..e3f73c5c0a7 100644
--- a/apps/files_external/lib/webdav.php
+++ b/apps/files_external/lib/webdav.php
@@ -20,10 +20,14 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
private static $tempFiles=array();
public function __construct($params){
- $this->host=$params['host'];
+ $host = $params['host'];
+ //remove leading http[s], will be generated in createBaseUri()
+ if (substr($host,0,8) == "https://") $host = substr($host, 8);
+ else if (substr($host,0,7) == "http://") $host = substr($host, 7);
+ $this->host=$host;
$this->user=$params['user'];
$this->password=$params['password'];
- $this->secure=isset($params['secure'])?(bool)$params['secure']:false;
+ $this->secure=(isset($params['secure']) && $params['secure'] == 'true')?true:false;
$this->root=isset($params['root'])?$params['root']:'/';
if(!$this->root || $this->root[0]!='/'){
$this->root='/'.$this->root;
@@ -37,8 +41,15 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
'userName' => $this->user,
'password' => $this->password,
);
- $this->client = new Sabre_DAV_Client($settings);
+ $this->client = new OC_Connector_Sabre_Client($settings);
+
+ if($caview = \OCP\Files::getStorage('files_external')) {
+ $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('');
}
@@ -46,7 +57,7 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
private function createBaseUri(){
$baseUri='http';
if($this->secure){
- $baseUri.'s';
+ $baseUri.='s';
}
$baseUri.='://'.$this->host.$this->root;
return $baseUri;
@@ -66,16 +77,13 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
$path=$this->cleanPath($path);
try{
$response=$this->client->propfind($path, array(),1);
- $stripLength=strlen($this->root)+strlen($path);
$id=md5('webdav'.$this->root.$path);
OC_FakeDirStream::$dirs[$id]=array();
- foreach($response as $file=>$data){
- //strip root and path
- $file=trim(substr($file,$stripLength));
- $file=trim($file,'/');
- if($file){
- OC_FakeDirStream::$dirs[$id][]=$file;
- }
+ $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;
}
return opendir('fakedir://'.$id);
}catch(Exception $e){
@@ -90,22 +98,24 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
$responseType=$response["{DAV:}resourcetype"]->resourceType;
return (count($responseType)>0 and $responseType[0]=="{DAV:}collection")?'dir':'file';
}catch(Exception $e){
+ error_log($e->getMessage());
+ \OCP\Util::writeLog("webdav client", \OCP\Util::sanitizeHTML($e->getMessage()), \OCP\Util::ERROR);
return false;
}
}
- public function is_readable($path){
+ public function isReadable($path){
return true;//not properly supported
}
- public function is_writable($path){
+ public function isUpdatable($path){
return true;//not properly supported
}
public function file_exists($path){
$path=$this->cleanPath($path);
try{
- $response=$this->client->propfind($path, array('{DAV:}resourcetype'));
+ $this->client->propfind($path, array('{DAV:}resourcetype'));
return true;//no 404 exception
}catch(Exception $e){
return false;
@@ -186,7 +196,7 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
$mtime=time();
}
$path=$this->cleanPath($path);
- $this->client->proppatch($path, array('{DAV:}lastmodified' => $mtime,));
+ $this->client->proppatch($path, array('{DAV:}lastmodified' => $mtime));
}
public function getFile($path,$target){
@@ -240,15 +250,11 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
$path=$this->cleanPath($path);
try{
$response=$this->client->propfind($path, array('{DAV:}getlastmodified','{DAV:}getcontentlength'));
- if(isset($response['{DAV:}getlastmodified']) and isset($response['{DAV:}getcontentlength'])){
- return array(
- 'mtime'=>strtotime($response['{DAV:}getlastmodified']),
- 'size'=>(int)$response['{DAV:}getcontentlength'],
- 'ctime'=>-1,
- );
- }else{
- return array();
- }
+ return array(
+ 'mtime'=>strtotime($response['{DAV:}getlastmodified']),
+ 'size'=>(int)isset($response['{DAV:}getcontentlength']) ? $response['{DAV:}getcontentlength'] : 0,
+ 'ctime'=>-1,
+ );
}catch(Exception $e){
return array();
}
diff --git a/apps/files_external/personal.php b/apps/files_external/personal.php
new file mode 100755
index 00000000000..dec501741b6
--- /dev/null
+++ b/apps/files_external/personal.php
@@ -0,0 +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/>.
+*/
+
+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']);
+$tmpl = new OCP\Template('files_external', 'settings');
+$tmpl->assign('isAdminPage', false, false);
+$tmpl->assign('mounts', OC_Mount_Config::getPersonalMountPoints());
+$tmpl->assign('certs', OC_Mount_Config::getCertificates());
+$tmpl->assign('backends', $backends);
+return $tmpl->fetchPage();
+
+?> \ No newline at end of file
diff --git a/apps/files_external/settings.php b/apps/files_external/settings.php
new file mode 100644
index 00000000000..acc9036b299
--- /dev/null
+++ b/apps/files_external/settings.php
@@ -0,0 +1,34 @@
+<?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/>.
+*/
+
+OCP\Util::addScript('files_external', 'settings');
+OCP\Util::addStyle('files_external', 'settings');
+$tmpl = new OCP\Template('files_external', 'settings');
+$tmpl->assign('isAdminPage', true, false);
+$tmpl->assign('mounts', OC_Mount_Config::getSystemMountPoints());
+$tmpl->assign('backends', OC_Mount_Config::getBackends());
+$tmpl->assign('groups', OC_Group::getGroups());
+$tmpl->assign('users', OCP\User::getUsers());
+$tmpl->assign('allowUserMounting', OCP\Config::getAppValue('files_external', 'allow_user_mounting', 'yes'));
+return $tmpl->fetchPage();
+
+?> \ No newline at end of file
diff --git a/apps/files_external/templates/settings.php b/apps/files_external/templates/settings.php
new file mode 100644
index 00000000000..397f0d951b0
--- /dev/null
+++ b/apps/files_external/templates/settings.php
@@ -0,0 +1,112 @@
+<form id="files_external" method="post" enctype="multipart/form-data" action="<?php echo OCP\Util::linkTo('files_external', 'ajax/addRootCertificate.php'); ?>">
+ <fieldset class="personalblock">
+ <legend><strong><?php echo $l->t('External Storage'); ?></strong></legend>
+ <table id="externalStorage" data-admin='<?php echo json_encode($_['isAdminPage']); ?>'>
+ <thead>
+ <tr>
+ <th><?php echo $l->t('Mount point'); ?></th>
+ <th><?php echo $l->t('Backend'); ?></th>
+ <th><?php echo $l->t('Configuration'); ?></th>
+ <!--<th><?php echo $l->t('Options'); ?></th> -->
+ <?php if ($_['isAdminPage']) echo '<th>'.$l->t('Applicable').'</th>'; ?>
+ <th>&nbsp;</th>
+ </tr>
+ </thead>
+ <tbody width="100%">
+ <?php $_['mounts'] = array_merge($_['mounts'], array('' => array())); ?>
+ <?php foreach ($_['mounts'] as $mountPoint => $mount): ?>
+ <tr <?php echo ($mountPoint != '') ? 'class="'.$mount['class'].'"' : 'id="addMountPoint"'; ?>>
+ <td class="mountPoint"><input type="text" name="mountPoint" value="<?php echo $mountPoint; ?>" placeholder="<?php echo $l->t('Mount point'); ?>" /></td>
+ <?php if ($mountPoint == ''): ?>
+ <td class="backend">
+ <select id="selectBackend" data-configurations='<?php echo json_encode($_['backends']); ?>'>
+ <option value="" disabled selected style="display:none;"><?php echo $l->t('Add mount point'); ?></option>
+ <?php foreach ($_['backends'] as $class => $backend): ?>
+ <option value="<?php echo $class; ?>"><?php echo $backend['backend']; ?></option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ <?php else: ?>
+ <td class="backend" data-class="<?php echo $mount['class']; ?>"><?php echo $mount['backend']; ?></td>
+ <?php endif; ?>
+ <td class ="configuration" width="100%">
+ <?php if (isset($mount['configuration'])): ?>
+ <?php foreach ($mount['configuration'] as $parameter => $value): ?>
+ <?php if (isset($_['backends'][$mount['class']]['configuration'][$parameter])): ?>
+ <?php $placeholder = $_['backends'][$mount['class']]['configuration'][$parameter]; ?>
+ <?php if (strpos($placeholder, '*') !== false): ?>
+ <input type="password" data-parameter="<?php echo $parameter; ?>" value="<?php echo $value; ?>" placeholder="<?php echo substr($placeholder, 1); ?>" />
+ <?php elseif(strpos($placeholder, '!') !== false): ?>
+ <label><input type="checkbox" data-parameter="<?php echo $parameter; ?>" <?php if ($value == 'true') echo ' checked="checked"'; ?> /><?php echo substr($placeholder, 1); ?></label>
+ <?php elseif (strpos($placeholder, '&') !== false): ?>
+ <input type="text" class="optional" data-parameter="<?php echo $parameter; ?>" value="<?php echo $value; ?>" placeholder="<?php echo substr($placeholder, 5); ?>" />
+ <?php elseif (strpos($placeholder, '#') !== false): ?>
+ <input type="hidden" data-parameter="<?php echo $parameter; ?>" value="<?php echo $value; ?>" />
+ <?php else: ?>
+ <input type="text" data-parameter="<?php echo $parameter; ?>" value="<?php echo $value; ?>" placeholder="<?php echo $placeholder; ?>" />
+ <?php endif; ?>
+ <?php endif; ?>
+ <?php endforeach; ?>
+ <?php if (isset($_['backends'][$mount['class']]['custom'])) OCP\Util::addScript('files_external', $_['backends'][$mount['class']]['custom']); ?>
+ <?php endif; ?>
+ </td>
+ <!--<td class="options">
+ <select class="selectOptions" title="<?php echo $l->t('None set')?>" multiple="multiple" disabled>
+ <?php if (OCP\App::isEnabled('files_encryption')) echo '<option value="Encrypt">Encrypt</option>'; ?>
+ <?php if (OCP\App::isEnabled('files_versions')) echo '<option value="Version control">Version control</option>'; ?>
+ <?php if (OCP\App::isEnabled('files_sharing')) echo '<option value="Allow sharing">Allow sharing</option>'; ?>
+ </select>
+ </td>-->
+ <?php if ($_['isAdminPage']): ?>
+ <td class="applicable" align="right" data-applicable-groups='<?php if (isset($mount['applicable']['groups'])) echo json_encode($mount['applicable']['groups']); ?>' data-applicable-users='<?php if (isset($mount['applicable']['users'])) echo json_encode($mount['applicable']['users']); ?>'>
+ <select class="chzn-select" multiple style="width:20em;" data-placeholder="<?php echo $l->t('None set'); ?>">
+ <option value="all"><?php echo $l->t('All Users'); ?></option>
+ <optgroup label="<?php echo $l->t('Groups'); ?>">
+ <?php foreach ($_['groups'] as $group): ?>
+ <option value="<?php echo $group; ?>(group)" <?php if (isset($mount['applicable']['groups']) && in_array($group, $mount['applicable']['groups'])) echo 'selected="selected"'; ?>><?php echo $group; ?></option>
+ <?php endforeach; ?>
+ </optgroup>
+ <optgroup label="<?php echo $l->t('Users'); ?>">
+ <?php foreach ($_['users'] as $user): ?>
+ <option value="<?php echo $user; ?>" <?php if (isset($mount['applicable']['users']) && in_array($user, $mount['applicable']['users'])) echo 'selected="selected"'; ?>"><?php echo $user; ?></option>
+ <?php endforeach; ?>
+ </optgroup>
+ </select>
+ </td>
+ <?php endif; ?>
+ <td <?php echo ($mountPoint != '') ? 'class="remove"' : 'style="visibility:hidden;"'; ?>><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>
+ </tr>
+ <?php endforeach; ?>
+ </tbody>
+ </table>
+ <br />
+
+ <?php if (!$_['isAdminPage']): ?>
+ <table id="sslCertificate" data-admin='<?php echo json_encode($_['isAdminPage']); ?>'>
+ <thead>
+ <tr>
+ <th><?php echo $l->t('SSL root certificates'); ?></th>
+ <th>&nbsp;</th>
+ </tr>
+ </thead>
+ <tbody width="100%">
+ <?php foreach ($_['certs'] as $rootCert): ?>
+ <tr id="<?php echo $rootCert ?>">
+ <td class="rootCert"><?php echo $rootCert ?></td>
+ <td <?php echo ($rootCert != '') ? 'class="remove"' : 'style="visibility:hidden;"'; ?>><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>
+ </tr>
+ <?php endforeach; ?>
+ </tbody>
+ </table>
+ <input type="file" id="rootcert_import" name="rootcert_import" style="width:230px;">
+ <input type="submit" name="cert_import" value="<?php echo $l->t('Import Root Certificate'); ?>" />
+ <?php endif; ?>
+
+ <?php if ($_['isAdminPage']): ?>
+ <br />
+ <input type="checkbox" name="allowUserMounting" id="allowUserMounting" value="1" <?php if ($_['allowUserMounting'] == 'yes') echo ' checked="checked"'; ?> />
+ <label for="allowUserMounting"><?php echo $l->t('Enable User External Storage'); ?></label><br/>
+ <em><?php echo $l->t('Allow users to mount their own external storage'); ?></em>
+ <?php endif; ?>
+ </fieldset>
+</form>
diff --git a/apps/files_external/tests/amazons3.php b/apps/files_external/tests/amazons3.php
new file mode 100644
index 00000000000..b9b4cf65bd6
--- /dev/null
+++ b/apps/files_external/tests/amazons3.php
@@ -0,0 +1,47 @@
+<?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/>.
+*/
+
+$config = include('apps/files_external/tests/config.php');
+if (!is_array($config) or !isset($config['amazons3']) or !$config['amazons3']['run']) {
+ abstract class Test_Filestorage_AmazonS3 extends Test_FileStorage{}
+ return;
+} else {
+ class Test_Filestorage_AmazonS3 extends Test_FileStorage {
+
+ private $config;
+ private $id;
+
+ public function setUp() {
+ $id = uniqid();
+ $this->config = include('apps/files_external/tests/config.php');
+ $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']);
+ }
+
+ public function tearDown() {
+ $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 1b47618e472..e58a87fabdf 100644
--- a/apps/files_external/tests/config.php
+++ b/apps/files_external/tests/config.php
@@ -37,4 +37,10 @@ return array(
'share'=>'/test',
'root'=>'/test/',
),
+ 'amazons3'=>array(
+ 'run'=>false,
+ 'key'=>'test',
+ 'secret'=>'test',
+ 'bucket'=>'bucket',
+ ),
);
diff --git a/apps/files_external/tests/ftp.php b/apps/files_external/tests/ftp.php
index 68481b4e66b..97796bca128 100644
--- a/apps/files_external/tests/ftp.php
+++ b/apps/files_external/tests/ftp.php
@@ -13,7 +13,6 @@ if(!is_array($config) or !isset($config['ftp']) or !$config['ftp']['run']){
}else{
class Test_Filestorage_FTP extends Test_FileStorage {
private $config;
- private $id;
public function setUp(){
$id=uniqid();
diff --git a/apps/files_external/tests/google.php b/apps/files_external/tests/google.php
index 08116f0e748..806db5a6aaa 100644
--- a/apps/files_external/tests/google.php
+++ b/apps/files_external/tests/google.php
@@ -28,7 +28,6 @@ if(!is_array($config) or !isset($config['google']) or !$config['google']['run'])
class Test_Filestorage_Google extends Test_FileStorage {
private $config;
- private $id;
public function setUp(){
$id=uniqid();
diff --git a/apps/files_external/tests/smb.php b/apps/files_external/tests/smb.php
index e1495b7480d..001ef842276 100644
--- a/apps/files_external/tests/smb.php
+++ b/apps/files_external/tests/smb.php
@@ -14,7 +14,6 @@ if(!is_array($config) or !isset($config['smb']) or !$config['smb']['run']){
}else{
class Test_Filestorage_SMB extends Test_FileStorage {
private $config;
- private $id;
public function setUp(){
$id=uniqid();
diff --git a/apps/files_external/tests/swift.php b/apps/files_external/tests/swift.php
index f0bde6ed605..1520c9473d3 100644
--- a/apps/files_external/tests/swift.php
+++ b/apps/files_external/tests/swift.php
@@ -13,7 +13,6 @@ if(!is_array($config) or !isset($config['swift']) or !$config['swift']['run']){
}else{
class Test_Filestorage_SWIFT extends Test_FileStorage {
private $config;
- private $id;
public function setUp(){
$id=uniqid();
diff --git a/apps/files_external/tests/test.php b/apps/files_external/tests/test.php
new file mode 100644
index 00000000000..bd24404f3b9
--- /dev/null
+++ b/apps/files_external/tests/test.php
@@ -0,0 +1,7 @@
+<?php
+require_once 'files_external/lib/config.php';
+echo "<pre>";
+print_r(OC_Mount_Config::getSystemMountPoints());
+echo "</pre>";
+// OC_Mount_Config::addMountPoint('Photos', 'OC_Filestorage_SWIFT', array('host' => 'gapinthecloud.com', 'user' => 'Gap', 'token' => '23423afdasFJEW22', 'secure' => 'true', 'root' => ''), OC_Mount_Config::MOUNT_TYPE_GROUP, 'admin', false);
+?>
diff --git a/apps/files_external/tests/webdav.php b/apps/files_external/tests/webdav.php
index 144659819b6..14abbef2cbf 100644
--- a/apps/files_external/tests/webdav.php
+++ b/apps/files_external/tests/webdav.php
@@ -13,7 +13,6 @@ if(!is_array($config) or !isset($config['webdav']) or !$config['webdav']['run'])
}else{
class Test_Filestorage_DAV extends Test_FileStorage {
private $config;
- private $id;
public function setUp(){
$id=uniqid();
diff --git a/apps/files_imageviewer/appinfo/app.php b/apps/files_imageviewer/appinfo/app.php
index 6c8d8c30cad..6184585cff3 100644
--- a/apps/files_imageviewer/appinfo/app.php
+++ b/apps/files_imageviewer/appinfo/app.php
@@ -4,5 +4,3 @@ OCP\Util::addscript( 'files_imageviewer', 'lightbox' );
OCP\Util::addscript('files_imageviewer', 'jquery.mousewheel-3.0.4.pack');
OCP\Util::addscript('files_imageviewer', 'jquery.fancybox-1.3.4.pack');
OCP\Util::addStyle( 'files_imageviewer', 'jquery.fancybox-1.3.4' );
-
-?>
diff --git a/apps/files_imageviewer/css/jquery.fancybox-1.3.4.css b/apps/files_imageviewer/css/jquery.fancybox-1.3.4.css
index 5fdf7af14cb..6e982805a44 100644
--- a/apps/files_imageviewer/css/jquery.fancybox-1.3.4.css
+++ b/apps/files_imageviewer/css/jquery.fancybox-1.3.4.css
@@ -35,7 +35,7 @@
left: 0;
width: 40px;
height: 480px;
- background-image: url('%appswebroot%/apps/files_imageviewer/img/fancybox.png');
+ background-image: url('%appswebroot%/files_imageviewer/img/fancybox.png');
}
#fancybox-overlay {
@@ -99,7 +99,7 @@
right: -15px;
width: 30px;
height: 30px;
- background: transparent url('%appswebroot%/apps/files_imageviewer/img/fancybox.png') -40px 0px;
+ background: transparent url('%appswebroot%/files_imageviewer/img/fancybox.png') -40px 0px;
cursor: pointer;
z-index: 1103;
display: none;
@@ -137,7 +137,7 @@
width: 35%;
cursor: pointer;
outline: none;
- background: transparent url('%appswebroot%/apps/files_imageviewer/img/blank.gif');
+ background: transparent url('%appswebroot%/files_imageviewer/img/blank.gif');
z-index: 1102;
display: none;
}
@@ -163,12 +163,12 @@
}
#fancybox-left-ico {
- background-image: url('%appswebroot%/apps/files_imageviewer/img/fancybox.png');
+ background-image: url('%appswebroot%/files_imageviewer/img/fancybox.png');
background-position: -40px -30px;
}
#fancybox-right-ico {
- background-image: url('%appswebroot%/apps/files_imageviewer/img/fancybox.png');
+ background-image: url('%appswebroot%/files_imageviewer/img/fancybox.png');
background-position: -40px -60px;
}
@@ -199,13 +199,13 @@
top: -20px;
left: 0;
width: 100%;
- background-image: url('%appswebroot%/apps/files_imageviewer/img/fancybox-x.png');
+ background-image: url('%appswebroot%/files_imageviewer/img/fancybox-x.png');
}
#fancybox-bg-ne {
top: -20px;
right: -20px;
- background-image: url('%appswebroot%/apps/files_imageviewer/img/fancybox.png');
+ background-image: url('%appswebroot%/files_imageviewer/img/fancybox.png');
background-position: -40px -162px;
}
@@ -213,14 +213,14 @@
top: 0;
right: -20px;
height: 100%;
- background-image: url('%appswebroot%/apps/files_imageviewer/img/fancybox-y.png');
+ background-image: url('%appswebroot%/files_imageviewer/img/fancybox-y.png');
background-position: -20px 0px;
}
#fancybox-bg-se {
bottom: -20px;
right: -20px;
- background-image: url('%appswebroot%/apps/files_imageviewer/img/fancybox.png');
+ background-image: url('%appswebroot%/files_imageviewer/img/fancybox.png');
background-position: -40px -182px;
}
@@ -228,14 +228,14 @@
bottom: -20px;
left: 0;
width: 100%;
- background-image: url('%appswebroot%/apps/files_imageviewer/img/fancybox-x.png');
+ background-image: url('%appswebroot%/files_imageviewer/img/fancybox-x.png');
background-position: 0px -20px;
}
#fancybox-bg-sw {
bottom: -20px;
left: -20px;
- background-image: url('%appswebroot%/apps/files_imageviewer/img/fancybox.png');
+ background-image: url('%appswebroot%/files_imageviewer/img/fancybox.png');
background-position: -40px -142px;
}
@@ -243,13 +243,13 @@
top: 0;
left: -20px;
height: 100%;
- background-image: url('%appswebroot%/apps/files_imageviewer/img/fancybox-y.png');
+ background-image: url('%appswebroot%/files_imageviewer/img/fancybox-y.png');
}
#fancybox-bg-nw {
top: -20px;
left: -20px;
- background-image: url('%appswebroot%/apps/files_imageviewer/img/fancybox.png');
+ background-image: url('%appswebroot%/files_imageviewer/img/fancybox.png');
background-position: -40px -122px;
}
@@ -282,7 +282,7 @@
#fancybox-title-over {
padding: 10px;
- background-image: url('%appswebroot%/apps/files_imageviewer/img/fancy_title_over.png');
+ background-image: url('%appswebroot%/files_imageviewer/img/fancy_title_over.png');
display: block;
}
@@ -306,7 +306,7 @@
#fancybox-title-float-left {
padding: 0 0 0 15px;
- background: url('%appswebroot%/apps/files_imageviewer/img/fancybox.png') -40px -90px no-repeat;
+ background: url('%appswebroot%/files_imageviewer/img/fancybox.png') -40px -90px no-repeat;
}
#fancybox-title-float-main {
@@ -314,25 +314,25 @@
line-height: 29px;
font-weight: bold;
padding: 0 0 3px 0;
- background: url('%appswebroot%/apps/files_imageviewer/img/fancybox-x.png') 0px -40px;
+ background: url('%appswebroot%/files_imageviewer/img/fancybox-x.png') 0px -40px;
}
#fancybox-title-float-right {
padding: 0 0 0 15px;
- background: url('%appswebroot%/apps/files_imageviewer/img/fancybox.png') -55px -90px no-repeat;
+ background: url('%appswebroot%/files_imageviewer/img/fancybox.png') -55px -90px no-repeat;
}
/* IE6 */
-.fancybox-ie6 #fancybox-close { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/apps/files_imageviewer/img/fancy_close.png', sizingMethod='scale'); }
+.fancybox-ie6 #fancybox-close { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/files_imageviewer/img/fancy_close.png', sizingMethod='scale'); }
-.fancybox-ie6 #fancybox-left-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/apps/files_imageviewer/img/fancy_nav_left.png', sizingMethod='scale'); }
-.fancybox-ie6 #fancybox-right-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/apps/files_imageviewer/img/fancy_nav_right.png', sizingMethod='scale'); }
+.fancybox-ie6 #fancybox-left-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/files_imageviewer/img/fancy_nav_left.png', sizingMethod='scale'); }
+.fancybox-ie6 #fancybox-right-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/files_imageviewer/img/fancy_nav_right.png', sizingMethod='scale'); }
-.fancybox-ie6 #fancybox-title-over { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/apps/files_imageviewer/img/fancy_title_over.png', sizingMethod='scale'); zoom: 1; }
-.fancybox-ie6 #fancybox-title-float-left { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/apps/files_imageviewer/img/fancy_title_left.png', sizingMethod='scale'); }
-.fancybox-ie6 #fancybox-title-float-main { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/apps/files_imageviewer/img/fancy_title_main.png', sizingMethod='scale'); }
-.fancybox-ie6 #fancybox-title-float-right { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/apps/files_imageviewer/img/fancy_title_right.png', sizingMethod='scale'); }
+.fancybox-ie6 #fancybox-title-over { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/files_imageviewer/img/fancy_title_over.png', sizingMethod='scale'); zoom: 1; }
+.fancybox-ie6 #fancybox-title-float-left { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/files_imageviewer/img/fancy_title_left.png', sizingMethod='scale'); }
+.fancybox-ie6 #fancybox-title-float-main { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/files_imageviewer/img/fancy_title_main.png', sizingMethod='scale'); }
+.fancybox-ie6 #fancybox-title-float-right { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/files_imageviewer/img/fancy_title_right.png', sizingMethod='scale'); }
.fancybox-ie6 #fancybox-bg-w, .fancybox-ie6 #fancybox-bg-e, .fancybox-ie6 #fancybox-left, .fancybox-ie6 #fancybox-right, #fancybox-hide-sel-frame {
height: expression(this.parentNode.clientHeight + "px");
@@ -343,17 +343,17 @@
top: expression( (-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px');
}
-#fancybox-loading.fancybox-ie6 div { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/apps/files_imageviewer/img/fancy_loading.png', sizingMethod='scale'); }
+#fancybox-loading.fancybox-ie6 div { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/files_imageviewer/img/fancy_loading.png', sizingMethod='scale'); }
/* IE6, IE7, IE8 */
.fancybox-ie .fancybox-bg { background: transparent !important; }
-.fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/apps/files_imageviewer/img/fancy_shadow_n.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/apps/files_imageviewer/img/fancy_shadow_ne.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/apps/files_imageviewer/img/fancy_shadow_e.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/apps/files_imageviewer/img/fancy_shadow_se.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/apps/files_imageviewer/img/fancy_shadow_s.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/apps/files_imageviewer/img/fancy_shadow_sw.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/apps/files_imageviewer/img/fancy_shadow_w.png', sizingMethod='scale'); }
-.fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/apps/files_imageviewer/img/fancy_shadow_nw.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/files_imageviewer/img/fancy_shadow_n.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/files_imageviewer/img/fancy_shadow_ne.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/files_imageviewer/img/fancy_shadow_e.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/files_imageviewer/img/fancy_shadow_se.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/files_imageviewer/img/fancy_shadow_s.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/files_imageviewer/img/fancy_shadow_sw.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/files_imageviewer/img/fancy_shadow_w.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='%appswebroot%/files_imageviewer/img/fancy_shadow_nw.png', sizingMethod='scale'); }
diff --git a/apps/files_imageviewer/img/fancybox-y.png b/apps/files_imageviewer/img/fancybox-y.png
index 7ef399b9908..62f31761998 100644
--- a/apps/files_imageviewer/img/fancybox-y.png
+++ b/apps/files_imageviewer/img/fancybox-y.png
Binary files differ
diff --git a/apps/files_imageviewer/js/lightbox.js b/apps/files_imageviewer/js/lightbox.js
index 31f08456d22..ff12d808bc8 100644
--- a/apps/files_imageviewer/js/lightbox.js
+++ b/apps/files_imageviewer/js/lightbox.js
@@ -1,6 +1,6 @@
$(document).ready(function() {
if(typeof FileActions!=='undefined'){
- FileActions.register('image','View','',function(filename){
+ FileActions.register('image','View', FileActions.PERMISSION_READ, '',function(filename){
viewImage($('#dir').val(),filename);
});
FileActions.setDefault('image','View');
diff --git a/apps/files_pdfviewer/appinfo/app.php b/apps/files_pdfviewer/appinfo/app.php
index 06b15670674..e4771ee517f 100644
--- a/apps/files_pdfviewer/appinfo/app.php
+++ b/apps/files_pdfviewer/appinfo/app.php
@@ -1,7 +1,8 @@
<?php
//load the required files
-OCP\Util::addscript( 'files_pdfviewer', 'viewer');
OCP\Util::addStyle( 'files_pdfviewer', 'viewer');
+
+OCP\Util::addscript( 'files_pdfviewer', 'pdfjs/compatibility');
+OCP\Util::addscript( 'files_pdfviewer', 'viewer');
OCP\Util::addscript( 'files_pdfviewer', 'pdfjs/build/pdf');
-OCP\Util::addscript( 'files_pdfviewer', 'pdfview');
-?>
+OCP\Util::addscript( 'files_pdfviewer', 'pdfjs/viewer');
diff --git a/apps/files_pdfviewer/appinfo/info.xml b/apps/files_pdfviewer/appinfo/info.xml
index e3813be1001..074962f57fb 100644
--- a/apps/files_pdfviewer/appinfo/info.xml
+++ b/apps/files_pdfviewer/appinfo/info.xml
@@ -4,7 +4,7 @@
<name>PDF Viewer</name>
<description>Inline PDF viewer (pdfjs-based)</description>
<licence>GPL</licence>
- <author>Joan Creus</author>
+ <author>Joan Creus, Thomas Müller</author>
<require>4</require>
<shipped>true</shipped>
<default_enable/>
diff --git a/apps/files_pdfviewer/css/viewer.css b/apps/files_pdfviewer/css/viewer.css
index b735dbfedfc..f9ce929d8b8 100644
--- a/apps/files_pdfviewer/css/viewer.css
+++ b/apps/files_pdfviewer/css/viewer.css
@@ -2,7 +2,6 @@
/* vim: set shiftwidth=4 tabstop=8 autoindent cindent expandtab: */
#viewer {
- background-color: #929292;
font-family: 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;
/*margin: 0px;*/
padding: 0px;
diff --git a/apps/files_pdfviewer/js/pdfjs/build/pdf.js b/apps/files_pdfviewer/js/pdfjs/build/pdf.js
index a19a9b75fea..b1fc9d9747e 100644
--- a/apps/files_pdfviewer/js/pdfjs/build/pdf.js
+++ b/apps/files_pdfviewer/js/pdfjs/build/pdf.js
@@ -7,10 +7,9 @@ var PDFJS = {};
// Use strict in our context only - users might not want it
'use strict';
- PDFJS.build = 'd823592';
+ PDFJS.build = '2aae4fd';
// Files are inserted below - see Makefile
- /* PDFJSSCRIPT_INCLUDE_ALL */
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
@@ -20,7 +19,7 @@ var globalScope = (typeof window === 'undefined') ? this : window;
var isWorker = (typeof window == 'undefined');
-var ERRORS = 0, WARNINGS = 1, TODOS = 5;
+var ERRORS = 0, WARNINGS = 1, INFOS = 5;
var verbosity = WARNINGS;
// The global PDFJS object exposes the API
@@ -44,7 +43,19 @@ function getPdf(arg, callback) {
params = { url: arg };
var xhr = new XMLHttpRequest();
+
xhr.open('GET', params.url);
+
+ var headers = params.headers;
+ if (headers) {
+ for (var property in headers) {
+ if (typeof headers[property] === 'undefined')
+ continue;
+
+ xhr.setRequestHeader(property, params.headers[property]);
+ }
+ }
+
xhr.mozResponseType = xhr.responseType = 'arraybuffer';
var protocol = params.url.indexOf(':') < 0 ? window.location.protocol :
params.url.substring(0, params.url.indexOf(':') + 1);
@@ -76,8 +87,6 @@ var Page = (function PageClosure() {
function Page(xref, pageNumber, pageDict, ref) {
this.pageNumber = pageNumber;
this.pageDict = pageDict;
- this.stats = new StatTimer();
- this.stats.enabled = !!globalScope.PDFJS.enableStats;
this.xref = xref;
this.ref = ref;
@@ -113,18 +122,10 @@ var Page = (function PageClosure() {
return shadow(this, 'mediaBox', obj);
},
get view() {
+ var mediaBox = this.mediaBox;
var cropBox = this.inheritPageProp('CropBox');
- var view = {
- x: 0,
- y: 0,
- width: this.width,
- height: this.height
- };
if (!isArray(cropBox) || cropBox.length !== 4)
- return shadow(this, 'view', view);
-
- var mediaBox = this.mediaBox;
- var offsetX = mediaBox[0], offsetY = mediaBox[1];
+ return shadow(this, 'view', mediaBox);
// From the spec, 6th ed., p.963:
// "The crop, bleed, trim, and art boxes should not ordinarily
@@ -132,42 +133,13 @@ var Page = (function PageClosure() {
// effectively reduced to their intersection with the media box."
cropBox = Util.intersect(cropBox, mediaBox);
if (!cropBox)
- return shadow(this, 'view', view);
-
- var tl = this.rotatePoint(cropBox[0] - offsetX, cropBox[1] - offsetY);
- var br = this.rotatePoint(cropBox[2] - offsetX, cropBox[3] - offsetY);
- view.x = Math.min(tl.x, br.x);
- view.y = Math.min(tl.y, br.y);
- view.width = Math.abs(tl.x - br.x);
- view.height = Math.abs(tl.y - br.y);
+ return shadow(this, 'view', mediaBox);
- return shadow(this, 'view', view);
+ return shadow(this, 'view', cropBox);
},
get annotations() {
return shadow(this, 'annotations', this.inheritPageProp('Annots'));
},
- get width() {
- var mediaBox = this.mediaBox;
- var rotate = this.rotate;
- var width;
- if (rotate == 0 || rotate == 180) {
- width = (mediaBox[2] - mediaBox[0]);
- } else {
- width = (mediaBox[3] - mediaBox[1]);
- }
- return shadow(this, 'width', width);
- },
- get height() {
- var mediaBox = this.mediaBox;
- var rotate = this.rotate;
- var height;
- if (rotate == 0 || rotate == 180) {
- height = (mediaBox[3] - mediaBox[1]);
- } else {
- height = (mediaBox[2] - mediaBox[0]);
- }
- return shadow(this, 'height', height);
- },
get rotate() {
var rotate = this.inheritPageProp('Rotate') || 0;
// Normalize rotation so it's a multiple of 90 and between 0 and 270
@@ -183,43 +155,20 @@ var Page = (function PageClosure() {
return shadow(this, 'rotate', rotate);
},
- startRenderingFromOperatorList:
- function Page_startRenderingFromOperatorList(operatorList, fonts) {
- var self = this;
- this.operatorList = operatorList;
-
- var displayContinuation = function pageDisplayContinuation() {
- // Always defer call to display() to work around bug in
- // Firefox error reporting from XHR callbacks.
- setTimeout(function pageSetTimeout() {
- self.displayReadyPromise.resolve();
- });
- };
-
- this.ensureFonts(fonts,
- function pageStartRenderingFromOperatorListEnsureFonts() {
- displayContinuation();
- }
- );
- },
-
getOperatorList: function Page_getOperatorList(handler, dependency) {
- if (this.operatorList) {
- // content was compiled
- return this.operatorList;
- }
-
- this.stats.time('Build IR Queue');
-
var xref = this.xref;
var content = this.content;
var resources = this.resources;
if (isArray(content)) {
// fetching items
+ var streams = [];
var i, n = content.length;
+ var streams = [];
for (i = 0; i < n; ++i)
- content[i] = xref.fetchIfRef(content[i]);
- content = new StreamsSequenceStream(content);
+ streams.push(xref.fetchIfRef(content[i]));
+ content = new StreamsSequenceStream(streams);
+ } else if (isStream(content)) {
+ content.reset();
} else if (!content) {
// replacing non-existent page content with empty one
content = new Stream(new Uint8Array(0));
@@ -228,9 +177,31 @@ var Page = (function PageClosure() {
var pe = this.pe = new PartialEvaluator(
xref, handler, 'p' + this.pageNumber + '_');
- this.operatorList = pe.getOperatorList(content, resources, dependency);
- this.stats.timeEnd('Build IR Queue');
- return this.operatorList;
+ return pe.getOperatorList(content, resources, dependency);
+ },
+ extractTextContent: function Page_extractTextContent() {
+ var handler = {
+ on: function nullHandlerOn() {},
+ send: function nullHandlerSend() {}
+ };
+
+ var xref = this.xref;
+ var content = xref.fetchIfRef(this.content);
+ var resources = xref.fetchIfRef(this.resources);
+ if (isArray(content)) {
+ // fetching items
+ var i, n = content.length;
+ var streams = [];
+ for (i = 0; i < n; ++i)
+ streams.push(xref.fetchIfRef(content[i]));
+ content = new StreamsSequenceStream(streams);
+ } else if (isStream(content)) {
+ content.reset();
+ }
+
+ var pe = new PartialEvaluator(
+ xref, handler, 'p' + this.pageNumber + '_');
+ return pe.getTextContent(content, resources);
},
ensureFonts: function Page_ensureFonts(fonts, callback) {
@@ -250,60 +221,6 @@ var Page = (function PageClosure() {
}.bind(this)
);
},
-
- display: function Page_display(gfx, callback) {
- var stats = this.stats;
- stats.time('Rendering');
- var xref = this.xref;
- var resources = this.resources;
- var mediaBox = this.mediaBox;
- assertWellFormed(isDict(resources), 'invalid page resources');
-
- gfx.xref = xref;
- gfx.res = resources;
- gfx.beginDrawing({ x: mediaBox[0], y: mediaBox[1],
- width: this.width,
- height: this.height,
- rotate: this.rotate });
-
- var startIdx = 0;
- var length = this.operatorList.fnArray.length;
- var operatorList = this.operatorList;
- var stepper = null;
- if (PDFJS.pdfBug && StepperManager.enabled) {
- stepper = StepperManager.create(this.pageNumber);
- stepper.init(operatorList);
- stepper.nextBreakPoint = stepper.getNextBreakPoint();
- }
-
- var self = this;
- function next() {
- startIdx =
- gfx.executeOperatorList(operatorList, startIdx, next, stepper);
- if (startIdx == length) {
- gfx.endDrawing();
- stats.timeEnd('Rendering');
- stats.timeEnd('Overall');
- if (callback) callback();
- }
- }
- next();
- },
- rotatePoint: function Page_rotatePoint(x, y, reverse) {
- var rotate = reverse ? (360 - this.rotate) : this.rotate;
- switch (rotate) {
- case 180:
- return {x: this.width - x, y: y};
- case 90:
- return {x: this.width - y, y: this.height - x};
- case 270:
- return {x: y, y: x};
- case 360:
- case 0:
- default:
- return {x: x, y: this.height - y};
- }
- },
getLinks: function Page_getLinks() {
var links = [];
var annotations = pageGetAnnotations();
@@ -337,6 +254,7 @@ var Page = (function PageClosure() {
case 'http':
case 'https':
case 'ftp':
+ case 'mailto':
return true;
default:
return false;
@@ -355,15 +273,10 @@ var Page = (function PageClosure() {
if (!isName(subtype))
continue;
var rect = annotation.get('Rect');
- var topLeftCorner = this.rotatePoint(rect[0], rect[1]);
- var bottomRightCorner = this.rotatePoint(rect[2], rect[3]);
var item = {};
item.type = subtype.name;
- item.x = Math.min(topLeftCorner.x, bottomRightCorner.x);
- item.y = Math.min(topLeftCorner.y, bottomRightCorner.y);
- item.width = Math.abs(topLeftCorner.x - bottomRightCorner.x);
- item.height = Math.abs(topLeftCorner.y - bottomRightCorner.y);
+ item.rect = rect;
switch (subtype.name) {
case 'Link':
var a = annotation.get('A');
@@ -437,7 +350,8 @@ var Page = (function PageClosure() {
var title = annotation.get('T');
item.content = stringToPDFString(content || '');
item.title = stringToPDFString(title || '');
- item.name = annotation.get('Name').name;
+ item.name = !annotation.has('Name') ? 'Note' :
+ annotation.get('Name').name;
break;
default:
TODO('unimplemented annotation type: ' + subtype.name);
@@ -446,37 +360,6 @@ var Page = (function PageClosure() {
items.push(item);
}
return items;
- },
- startRendering: function Page_startRendering(ctx, callback, textLayer) {
- var stats = this.stats;
- stats.time('Overall');
- // If there is no displayReadyPromise yet, then the operatorList was never
- // requested before. Make the request and create the promise.
- if (!this.displayReadyPromise) {
- this.pdf.startRendering(this);
- this.displayReadyPromise = new Promise();
- }
-
- // Once the operatorList and fonts are loaded, do the actual rendering.
- this.displayReadyPromise.then(
- function pageDisplayReadyPromise() {
- var gfx = new CanvasGraphics(ctx, this.objs, textLayer);
- try {
- this.display(gfx, callback);
- } catch (e) {
- if (callback)
- callback(e);
- else
- error(e);
- }
- }.bind(this),
- function pageDisplayReadPromiseError(reason) {
- if (callback)
- callback(reason);
- else
- error(reason);
- }
- );
}
};
@@ -484,26 +367,26 @@ var Page = (function PageClosure() {
})();
/**
- * The `PDFDocModel` holds all the data of the PDF file. Compared to the
+ * The `PDFDocument` holds all the data of the PDF file. Compared to the
* `PDFDoc`, this one doesn't have any job management code.
- * Right now there exists one PDFDocModel on the main thread + one object
+ * Right now there exists one PDFDocument on the main thread + one object
* for each worker. If there is no worker support enabled, there are two
- * `PDFDocModel` objects on the main thread created.
+ * `PDFDocument` objects on the main thread created.
*/
-var PDFDocModel = (function PDFDocModelClosure() {
- function PDFDocModel(arg, callback) {
+var PDFDocument = (function PDFDocumentClosure() {
+ function PDFDocument(arg, password) {
if (isStream(arg))
- init.call(this, arg);
+ init.call(this, arg, password);
else if (isArrayBuffer(arg))
- init.call(this, new Stream(arg));
+ init.call(this, new Stream(arg), password);
else
- error('PDFDocModel: Unknown argument type');
+ error('PDFDocument: Unknown argument type');
}
- function init(stream) {
+ function init(stream, password) {
assertWellFormed(stream.length > 0, 'stream must have data');
this.stream = stream;
- this.setup();
+ this.setup(password);
this.acroForm = this.catalog.catDict.get('AcroForm');
}
@@ -523,7 +406,7 @@ var PDFDocModel = (function PDFDocModelClosure() {
return true; /* found */
}
- PDFDocModel.prototype = {
+ PDFDocument.prototype = {
get linearization() {
var length = this.stream.length;
var linearization = false;
@@ -584,7 +467,7 @@ var PDFDocModel = (function PDFDocModelClosure() {
},
// Find the header, remove leading garbage and setup the stream
// starting from the header.
- checkHeader: function PDFDocModel_checkHeader() {
+ checkHeader: function PDFDocument_checkHeader() {
var stream = this.stream;
stream.reset();
if (find(stream, '%PDF-', 1024)) {
@@ -594,11 +477,12 @@ var PDFDocModel = (function PDFDocModelClosure() {
}
// May not be a PDF file, continue anyway.
},
- setup: function PDFDocModel_setup(ownerPassword, userPassword) {
+ setup: function PDFDocument_setup(password) {
this.checkHeader();
var xref = new XRef(this.stream,
this.startXRef,
- this.mainXRefEntriesOffset);
+ this.mainXRefEntriesOffset,
+ password);
this.xref = xref;
this.catalog = new Catalog(xref);
},
@@ -608,7 +492,7 @@ var PDFDocModel = (function PDFDocModelClosure() {
// shadow the prototype getter
return shadow(this, 'numPages', num);
},
- getDocumentInfo: function PDFDocModel_getDocumentInfo() {
+ getDocumentInfo: function PDFDocument_getDocumentInfo() {
var info;
if (this.xref.trailer.has('Info')) {
var infoDict = this.xref.trailer.get('Info');
@@ -622,7 +506,7 @@ var PDFDocModel = (function PDFDocModelClosure() {
return shadow(this, 'getDocumentInfo', info);
},
- getFingerprint: function PDFDocModel_getFingerprint() {
+ getFingerprint: function PDFDocument_getFingerprint() {
var xref = this.xref, fileID;
if (xref.trailer.has('ID')) {
fileID = '';
@@ -643,259 +527,22 @@ var PDFDocModel = (function PDFDocModelClosure() {
return shadow(this, 'getFingerprint', fileID);
},
- getPage: function PDFDocModel_getPage(n) {
+ getPage: function PDFDocument_getPage(n) {
return this.catalog.getPage(n);
}
};
- return PDFDocModel;
+ return PDFDocument;
})();
-var PDFDoc = (function PDFDocClosure() {
- function PDFDoc(arg, callback) {
- var stream = null;
- var data = null;
-
- if (isStream(arg)) {
- stream = arg;
- data = arg.bytes;
- } else if (isArrayBuffer(arg)) {
- stream = new Stream(arg);
- data = arg;
- } else {
- error('PDFDoc: Unknown argument type');
- }
-
- this.data = data;
- this.stream = stream;
- this.pdfModel = new PDFDocModel(stream);
- this.fingerprint = this.pdfModel.getFingerprint();
- this.info = this.pdfModel.getDocumentInfo();
- this.catalog = this.pdfModel.catalog;
- this.objs = new PDFObjects();
-
- this.pageCache = [];
- this.fontsLoading = {};
- this.workerReadyPromise = new Promise('workerReady');
-
- // If worker support isn't disabled explicit and the browser has worker
- // support, create a new web worker and test if it/the browser fullfills
- // all requirements to run parts of pdf.js in a web worker.
- // Right now, the requirement is, that an Uint8Array is still an Uint8Array
- // as it arrives on the worker. Chrome added this with version 15.
- if (!globalScope.PDFJS.disableWorker && typeof Worker !== 'undefined') {
- var workerSrc = PDFJS.workerSrc;
- if (typeof workerSrc === 'undefined') {
- error('No PDFJS.workerSrc specified');
- }
-
- try {
- var worker;
- if (PDFJS.isFirefoxExtension) {
- // The firefox extension can't load the worker from the resource://
- // url so we have to inline the script and then use the blob loader.
- var bb = new MozBlobBuilder();
- bb.append(document.querySelector('#PDFJS_SCRIPT_TAG').textContent);
- var blobUrl = window.URL.createObjectURL(bb.getBlob());
- worker = new Worker(blobUrl);
- } else {
- // Some versions of FF can't create a worker on localhost, see:
- // https://bugzilla.mozilla.org/show_bug.cgi?id=683280
- worker = new Worker(workerSrc);
- }
-
- var messageHandler = new MessageHandler('main', worker);
-
- messageHandler.on('test', function pdfDocTest(supportTypedArray) {
- if (supportTypedArray) {
- this.worker = worker;
- this.setupMessageHandler(messageHandler);
- } else {
- globalScope.PDFJS.disableWorker = true;
- this.setupFakeWorker();
- }
- }.bind(this));
-
- var testObj = new Uint8Array(1);
- // Some versions of Opera throw a DATA_CLONE_ERR on
- // serializing the typed array.
- messageHandler.send('test', testObj);
- return;
- } catch (e) {
- warn('The worker has been disabled.');
- }
- }
- // Either workers are disabled, not supported or have thrown an exception.
- // Thus, we fallback to a faked worker.
- globalScope.PDFJS.disableWorker = true;
- this.setupFakeWorker();
- }
-
- PDFDoc.prototype = {
- setupFakeWorker: function PDFDoc_setupFakeWorker() {
- // If we don't use a worker, just post/sendMessage to the main thread.
- var fakeWorker = {
- postMessage: function PDFDoc_postMessage(obj) {
- fakeWorker.onmessage({data: obj});
- },
- terminate: function PDFDoc_terminate() {}
- };
-
- var messageHandler = new MessageHandler('main', fakeWorker);
- this.setupMessageHandler(messageHandler);
-
- // If the main thread is our worker, setup the handling for the messages
- // the main thread sends to it self.
- WorkerMessageHandler.setup(messageHandler);
- },
-
-
- setupMessageHandler: function PDFDoc_setupMessageHandler(messageHandler) {
- this.messageHandler = messageHandler;
-
- messageHandler.on('page', function pdfDocPage(data) {
- var pageNum = data.pageNum;
- var page = this.pageCache[pageNum];
- var depFonts = data.depFonts;
-
- page.stats.timeEnd('Page Request');
- page.startRenderingFromOperatorList(data.operatorList, depFonts);
- }, this);
-
- messageHandler.on('obj', function pdfDocObj(data) {
- var id = data[0];
- var type = data[1];
-
- switch (type) {
- case 'JpegStream':
- var imageData = data[2];
- loadJpegStream(id, imageData, this.objs);
- break;
- case 'Image':
- var imageData = data[2];
- this.objs.resolve(id, imageData);
- break;
- case 'Font':
- var name = data[2];
- var file = data[3];
- var properties = data[4];
-
- if (file) {
- // Rewrap the ArrayBuffer in a stream.
- var fontFileDict = new Dict();
- file = new Stream(file, 0, file.length, fontFileDict);
- }
-
- // At this point, only the font object is created but the font is
- // not yet attached to the DOM. This is done in `FontLoader.bind`.
- var font = new Font(name, file, properties);
- this.objs.resolve(id, font);
- break;
- default:
- error('Got unkown object type ' + type);
- }
- }, this);
-
- messageHandler.on('page_error', function pdfDocError(data) {
- var page = this.pageCache[data.pageNum];
- if (page.displayReadyPromise)
- page.displayReadyPromise.reject(data.error);
- else
- error(data.error);
- }, this);
-
- messageHandler.on('jpeg_decode', function(data, promise) {
- var imageData = data[0];
- var components = data[1];
- if (components != 3 && components != 1)
- error('Only 3 component or 1 component can be returned');
-
- var img = new Image();
- img.onload = (function messageHandler_onloadClosure() {
- var width = img.width;
- var height = img.height;
- var size = width * height;
- var rgbaLength = size * 4;
- var buf = new Uint8Array(size * components);
- var tmpCanvas = createScratchCanvas(width, height);
- var tmpCtx = tmpCanvas.getContext('2d');
- tmpCtx.drawImage(img, 0, 0);
- var data = tmpCtx.getImageData(0, 0, width, height).data;
-
- if (components == 3) {
- for (var i = 0, j = 0; i < rgbaLength; i += 4, j += 3) {
- buf[j] = data[i];
- buf[j + 1] = data[i + 1];
- buf[j + 2] = data[i + 2];
- }
- } else if (components == 1) {
- for (var i = 0, j = 0; i < rgbaLength; i += 4, j++) {
- buf[j] = data[i];
- }
- }
- promise.resolve({ data: buf, width: width, height: height});
- }).bind(this);
- var src = 'data:image/jpeg;base64,' + window.btoa(imageData);
- img.src = src;
- });
-
- setTimeout(function pdfDocFontReadySetTimeout() {
- messageHandler.send('doc', this.data);
- this.workerReadyPromise.resolve(true);
- }.bind(this));
- },
-
- get numPages() {
- return this.pdfModel.numPages;
- },
-
- startRendering: function PDFDoc_startRendering(page) {
- // The worker might not be ready to receive the page request yet.
- this.workerReadyPromise.then(function pdfDocStartRenderingThen() {
- page.stats.time('Page Request');
- this.messageHandler.send('page_request', page.pageNumber + 1);
- }.bind(this));
- },
-
- getPage: function PDFDoc_getPage(n) {
- if (this.pageCache[n])
- return this.pageCache[n];
-
- var page = this.pdfModel.getPage(n);
- // Add a reference to the objects such that Page can forward the reference
- // to the CanvasGraphics and so on.
- page.objs = this.objs;
- page.pdf = this;
- return (this.pageCache[n] = page);
- },
-
- destroy: function PDFDoc_destroy() {
- if (this.worker)
- this.worker.terminate();
-
- if (this.fontWorker)
- this.fontWorker.terminate();
-
- for (var n in this.pageCache)
- delete this.pageCache[n];
-
- delete this.data;
- delete this.stream;
- delete this.pdf;
- delete this.catalog;
- }
- };
-
- return PDFDoc;
-})();
-
-globalScope.PDFJS.PDFDoc = PDFDoc;
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
'use strict';
+// Use only for debugging purposes. This should not be used in any code that is
+// in mozilla master.
function log(msg) {
if (console && console.log)
console.log(msg);
@@ -903,32 +550,44 @@ function log(msg) {
print(msg);
}
-function warn(msg) {
- if (verbosity >= WARNINGS)
- log('Warning: ' + msg);
+// A notice for devs that will not trigger the fallback UI. These are good
+// for things that are helpful to devs, such as warning that Workers were
+// disabled, which is important to devs but not end users.
+function info(msg) {
+ if (verbosity >= INFOS) {
+ log('Info: ' + msg);
+ PDFJS.LogManager.notify('info', msg);
+ }
}
-function backtrace() {
- try {
- throw new Error();
- } catch (e) {
- return e.stack ? e.stack.split('\n').slice(2).join('\n') : '';
+// Non-fatal warnings that should trigger the fallback UI.
+function warn(msg) {
+ if (verbosity >= WARNINGS) {
+ log('Warning: ' + msg);
+ PDFJS.LogManager.notify('warn', msg);
}
}
+// Fatal errors that should trigger the fallback UI and halt execution by
+// throwing an exception.
function error(msg) {
log('Error: ' + msg);
log(backtrace());
+ PDFJS.LogManager.notify('error', msg);
throw new Error(msg);
}
+// Missing features that should trigger the fallback UI.
function TODO(what) {
- if (verbosity >= TODOS)
- log('TODO: ' + what);
+ warn('TODO: ' + what);
}
-function malformed(msg) {
- error('Malformed PDF: ' + msg);
+function backtrace() {
+ try {
+ throw new Error();
+ } catch (e) {
+ return e.stack ? e.stack.split('\n').slice(2).join('\n') : '';
+ }
}
function assert(cond, msg) {
@@ -940,9 +599,25 @@ function assert(cond, msg) {
// behavior is undefined.
function assertWellFormed(cond, msg) {
if (!cond)
- malformed(msg);
+ error(msg);
}
+var LogManager = PDFJS.LogManager = (function LogManagerClosure() {
+ var loggers = [];
+ return {
+ addLogger: function logManager_addLogger(logger) {
+ loggers.push(logger);
+ },
+ notify: function(type, message) {
+ for (var i = 0, ii = loggers.length; i < ii; i++) {
+ var logger = loggers[i];
+ if (logger[type])
+ logger[type](message);
+ }
+ }
+ };
+})();
+
function shadow(obj, prop, value) {
Object.defineProperty(obj, prop, { value: value,
enumerable: true,
@@ -951,6 +626,19 @@ function shadow(obj, prop, value) {
return value;
}
+var PasswordException = (function PasswordExceptionClosure() {
+ function PasswordException(msg, code) {
+ this.name = 'PasswordException';
+ this.message = msg;
+ this.code = code;
+ }
+
+ PasswordException.prototype = new Error();
+ PasswordException.constructor = PasswordException;
+
+ return PasswordException;
+})();
+
function bytesToString(bytes) {
var str = '';
var length = bytes.length;
@@ -969,7 +657,7 @@ function stringToBytes(str) {
var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
-var Util = (function UtilClosure() {
+var Util = PDFJS.Util = (function UtilClosure() {
function Util() {}
Util.makeCssRgb = function Util_makeCssRgb(r, g, b) {
@@ -990,6 +678,19 @@ var Util = (function UtilClosure() {
return [xt, yt];
};
+ Util.applyInverseTransform = function Util_applyInverseTransform(p, m) {
+ var d = m[0] * m[3] - m[1] * m[2];
+ var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;
+ var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;
+ return [xt, yt];
+ };
+
+ Util.inverseTransform = function Util_inverseTransform(m) {
+ var d = m[0] * m[3] - m[1] * m[2];
+ return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d,
+ (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];
+ };
+
// Apply a generic 3d matrix M on a 3-vector v:
// | a b c | | X |
// | d e f | x | Y |
@@ -1058,7 +759,7 @@ var Util = (function UtilClosure() {
}
return result;
- }
+ };
Util.sign = function Util_sign(num) {
return num < 0 ? -1 : 1;
@@ -1067,6 +768,80 @@ var Util = (function UtilClosure() {
return Util;
})();
+var PageViewport = PDFJS.PageViewport = (function PageViewportClosure() {
+ function PageViewport(viewBox, scale, rotate, offsetX, offsetY) {
+ // creating transform to convert pdf coordinate system to the normal
+ // canvas like coordinates taking in account scale and rotation
+ var centerX = (viewBox[2] + viewBox[0]) / 2;
+ var centerY = (viewBox[3] + viewBox[1]) / 2;
+ var rotateA, rotateB, rotateC, rotateD;
+ switch (rotate) {
+ case -180:
+ case 180:
+ rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1;
+ break;
+ case -270:
+ case 90:
+ rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0;
+ break;
+ case -90:
+ case 270:
+ rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0;
+ break;
+ case 360:
+ case 0:
+ default:
+ rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1;
+ break;
+ }
+ var offsetCanvasX, offsetCanvasY;
+ var width, height;
+ if (rotateA == 0) {
+ offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
+ offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
+ width = Math.abs(viewBox[3] - viewBox[1]) * scale;
+ height = Math.abs(viewBox[2] - viewBox[0]) * scale;
+ } else {
+ offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
+ offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
+ width = Math.abs(viewBox[2] - viewBox[0]) * scale;
+ height = Math.abs(viewBox[3] - viewBox[1]) * scale;
+ }
+ // creating transform for the following operations:
+ // translate(-centerX, -centerY), rotate and flip vertically,
+ // scale, and translate(offsetCanvasX, offsetCanvasY)
+ this.transform = [
+ rotateA * scale,
+ rotateB * scale,
+ rotateC * scale,
+ rotateD * scale,
+ offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,
+ offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY
+ ];
+
+ this.offsetX = offsetX;
+ this.offsetY = offsetY;
+ this.width = width;
+ this.height = height;
+ this.fontScale = scale;
+ }
+ PageViewport.prototype = {
+ convertToViewportPoint: function PageViewport_convertToViewportPoint(x, y) {
+ return Util.applyTransform([x, y], this.transform);
+ },
+ convertToViewportRectangle:
+ function PageViewport_convertToViewportRectangle(rect) {
+ var tl = Util.applyTransform([rect[0], rect[1]], this.transform);
+ var br = Util.applyTransform([rect[2], rect[3]], this.transform);
+ return [tl[0], tl[1], br[0], br[1]];
+ },
+ convertToPdfPoint: function PageViewport_convertToPdfPoint(x, y) {
+ return Util.applyInverseTransform([x, y], this.transform);
+ }
+ };
+ return PageViewport;
+})();
+
var PDFStringTranslateTable = [
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0,
@@ -1095,6 +870,10 @@ function stringToPDFString(str) {
return str2;
}
+function stringToUTF8String(str) {
+ return decodeURIComponent(escape(str));
+}
+
function isBool(v) {
return typeof v == 'boolean';
}
@@ -1168,7 +947,7 @@ function isPDFFunction(v) {
* can be set. If any of these happens twice or the data is required before
* it was set, an exception is throw.
*/
-var Promise = (function PromiseClosure() {
+var Promise = PDFJS.Promise = (function PromiseClosure() {
var EMPTY_PROMISE = {};
/**
@@ -1190,6 +969,7 @@ var Promise = (function PromiseClosure() {
}
this.callbacks = [];
this.errbacks = [];
+ this.progressbacks = [];
};
/**
* Builds a promise that is resolved when all the passed in promises are
@@ -1205,7 +985,7 @@ var Promise = (function PromiseClosure() {
deferred.resolve(results);
return deferred;
}
- for (var i = 0; i < unresolved; ++i) {
+ for (var i = 0, ii = promises.length; i < ii; ++i) {
var promise = promises[i];
promise.then((function(i) {
return function(value) {
@@ -1261,7 +1041,7 @@ var Promise = (function PromiseClosure() {
}
this.isResolved = true;
- this.data = data || null;
+ this.data = (typeof data !== 'undefined') ? data : null;
var callbacks = this.callbacks;
for (var i = 0, ii = callbacks.length; i < ii; i++) {
@@ -1269,7 +1049,14 @@ var Promise = (function PromiseClosure() {
}
},
- reject: function Promise_reject(reason) {
+ progress: function Promise_progress(data) {
+ var callbacks = this.progressbacks;
+ for (var i = 0, ii = callbacks.length; i < ii; i++) {
+ callbacks[i].call(null, data);
+ }
+ },
+
+ reject: function Promise_reject(reason, exception) {
if (this.isRejected) {
error('A Promise can be rejected only once ' + this.name);
}
@@ -1282,11 +1069,11 @@ var Promise = (function PromiseClosure() {
var errbacks = this.errbacks;
for (var i = 0, ii = errbacks.length; i < ii; i++) {
- errbacks[i].call(null, reason);
+ errbacks[i].call(null, reason, exception);
}
},
- then: function Promise_then(callback, errback) {
+ then: function Promise_then(callback, errback, progressback) {
if (!callback) {
error('Requiring callback' + this.name);
}
@@ -1303,6 +1090,9 @@ var Promise = (function PromiseClosure() {
if (errback)
this.errbacks.push(errback);
}
+
+ if (progressback)
+ this.progressbacks.push(progressback);
}
};
@@ -1361,6 +1151,659 @@ var StatTimer = (function StatTimerClosure() {
};
return StatTimer;
})();
+
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+
+/**
+ * This is the main entry point for loading a PDF and interacting with it.
+ * NOTE: If a URL is used to fetch the PDF data a standard XMLHttpRequest(XHR)
+ * is used, which means it must follow the same origin rules that any XHR does
+ * e.g. No cross domain requests without CORS.
+ *
+ * @param {string|TypedAray|object} source Can be an url to where a PDF is
+ * located, a typed array (Uint8Array) already populated with data or
+ * and parameter object with the following possible fields:
+ * - url - The URL of the PDF.
+ * - data - A typed array with PDF data.
+ * - httpHeaders - Basic authentication headers.
+ * - password - For decrypting password-protected PDFs.
+ *
+ * @return {Promise} A promise that is resolved with {PDFDocumentProxy} object.
+ */
+PDFJS.getDocument = function getDocument(source) {
+ var url, data, headers, password, parameters = {};
+ if (typeof source === 'string') {
+ url = source;
+ } else if (isArrayBuffer(source)) {
+ data = source;
+ } else if (typeof source === 'object') {
+ url = source.url;
+ data = source.data;
+ headers = source.httpHeaders;
+ password = source.password;
+ parameters.password = password || null;
+
+ if (!url && !data)
+ error('Invalid parameter array, need either .data or .url');
+ } else {
+ error('Invalid parameter in getDocument, need either Uint8Array, ' +
+ 'string or a parameter object');
+ }
+
+ var promise = new PDFJS.Promise();
+ var transport = new WorkerTransport(promise);
+ if (data) {
+ // assuming the data is array, instantiating directly from it
+ transport.sendData(data, parameters);
+ } else if (url) {
+ // fetch url
+ PDFJS.getPdf(
+ {
+ url: url,
+ progress: function getPDFProgress(evt) {
+ if (evt.lengthComputable)
+ promise.progress({
+ loaded: evt.loaded,
+ total: evt.total
+ });
+ },
+ error: function getPDFError(e) {
+ promise.reject('Unexpected server response of ' +
+ e.target.status + '.');
+ },
+ headers: headers
+ },
+ function getPDFLoad(data) {
+ transport.sendData(data, parameters);
+ });
+ }
+
+ return promise;
+};
+
+/**
+ * Proxy to a PDFDocument in the worker thread. Also, contains commonly used
+ * properties that can be read synchronously.
+ */
+var PDFDocumentProxy = (function PDFDocumentProxyClosure() {
+ function PDFDocumentProxy(pdfInfo, transport) {
+ this.pdfInfo = pdfInfo;
+ this.transport = transport;
+ }
+ PDFDocumentProxy.prototype = {
+ /**
+ * @return {number} Total number of pages the PDF contains.
+ */
+ get numPages() {
+ return this.pdfInfo.numPages;
+ },
+ /**
+ * @return {string} A unique ID to identify a PDF. Not guaranteed to be
+ * unique.
+ */
+ get fingerprint() {
+ return this.pdfInfo.fingerprint;
+ },
+ /**
+ * @param {number} The page number to get. The first page is 1.
+ * @return {Promise} A promise that is resolved with a {PDFPageProxy}
+ * object.
+ */
+ getPage: function PDFDocumentProxy_getPage(number) {
+ return this.transport.getPage(number);
+ },
+ /**
+ * @return {Promise} A promise that is resolved with a lookup table for
+ * mapping named destinations to reference numbers.
+ */
+ getDestinations: function PDFDocumentProxy_getDestinations() {
+ var promise = new PDFJS.Promise();
+ var destinations = this.pdfInfo.destinations;
+ promise.resolve(destinations);
+ return promise;
+ },
+ /**
+ * @return {Promise} A promise that is resolved with an {array} that is a
+ * tree outline (if it has one) of the PDF. The tree is in the format of:
+ * [
+ * {
+ * title: string,
+ * bold: boolean,
+ * italic: boolean,
+ * color: rgb array,
+ * dest: dest obj,
+ * items: array of more items like this
+ * },
+ * ...
+ * ].
+ */
+ getOutline: function PDFDocumentProxy_getOutline() {
+ var promise = new PDFJS.Promise();
+ var outline = this.pdfInfo.outline;
+ promise.resolve(outline);
+ return promise;
+ },
+ /**
+ * @return {Promise} A promise that is resolved with an {object} that has
+ * info and metadata properties. Info is an {object} filled with anything
+ * available in the information dictionary and similarly metadata is a
+ * {Metadata} object with information from the metadata section of the PDF.
+ */
+ getMetadata: function PDFDocumentProxy_getMetadata() {
+ var promise = new PDFJS.Promise();
+ var info = this.pdfInfo.info;
+ var metadata = this.pdfInfo.metadata;
+ promise.resolve({
+ info: info,
+ metadata: metadata ? new PDFJS.Metadata(metadata) : null
+ });
+ return promise;
+ },
+ isEncrypted: function PDFDocumentProxy_isEncrypted() {
+ var promise = new PDFJS.Promise();
+ promise.resolve(this.pdfInfo.encrypted);
+ return promise;
+ },
+ /**
+ * @return {Promise} A promise that is resolved with a TypedArray that has
+ * the raw data from the PDF.
+ */
+ getData: function PDFDocumentProxy_getData() {
+ var promise = new PDFJS.Promise();
+ this.transport.getData(promise);
+ return promise;
+ },
+ destroy: function PDFDocumentProxy_destroy() {
+ this.transport.destroy();
+ }
+ };
+ return PDFDocumentProxy;
+})();
+
+var PDFPageProxy = (function PDFPageProxyClosure() {
+ function PDFPageProxy(pageInfo, transport) {
+ this.pageInfo = pageInfo;
+ this.transport = transport;
+ this.stats = new StatTimer();
+ this.stats.enabled = !!globalScope.PDFJS.enableStats;
+ this.objs = transport.objs;
+ this.renderInProgress = false;
+ }
+ PDFPageProxy.prototype = {
+ /**
+ * @return {number} Page number of the page. First page is 1.
+ */
+ get pageNumber() {
+ return this.pageInfo.pageIndex + 1;
+ },
+ /**
+ * @return {number} The number of degrees the page is rotated clockwise.
+ */
+ get rotate() {
+ return this.pageInfo.rotate;
+ },
+ /**
+ * @return {object} The reference that points to this page. It has 'num' and
+ * 'gen' properties.
+ */
+ get ref() {
+ return this.pageInfo.ref;
+ },
+ /**
+ * @return {array} An array of the visible portion of the PDF page in the
+ * user space units - [x1, y1, x2, y2].
+ */
+ get view() {
+ return this.pageInfo.view;
+ },
+ /**
+ * @param {number} scale The desired scale of the viewport.
+ * @param {number} rotate Degrees to rotate the viewport. If omitted this
+ * defaults to the page rotation.
+ * @return {PageViewport} Contains 'width' and 'height' properties along
+ * with transforms required for rendering.
+ */
+ getViewport: function PDFPageProxy_getViewport(scale, rotate) {
+ if (arguments.length < 2)
+ rotate = this.rotate;
+ return new PDFJS.PageViewport(this.view, scale, rotate, 0, 0);
+ },
+ /**
+ * @return {Promise} A promise that is resolved with an {array} of the
+ * annotation objects.
+ */
+ getAnnotations: function PDFPageProxy_getAnnotations() {
+ if (this.annotationsPromise)
+ return this.annotationsPromise;
+
+ var promise = new PDFJS.Promise();
+ this.annotationsPromise = promise;
+ this.transport.getAnnotations(this.pageInfo.pageIndex);
+ return promise;
+ },
+ /**
+ * Begins the process of rendering a page to the desired context.
+ * @param {object} params A parameter object that supports:
+ * {
+ * canvasContext(required): A 2D context of a DOM Canvas object.,
+ * textLayer(optional): An object that has beginLayout, endLayout, and
+ * appendText functions.
+ * }.
+ * @return {Promise} A promise that is resolved when the page finishes
+ * rendering.
+ */
+ render: function PDFPageProxy_render(params) {
+ this.renderInProgress = true;
+
+ var promise = new Promise();
+ var stats = this.stats;
+ stats.time('Overall');
+ // If there is no displayReadyPromise yet, then the operatorList was never
+ // requested before. Make the request and create the promise.
+ if (!this.displayReadyPromise) {
+ this.displayReadyPromise = new Promise();
+ this.destroyed = false;
+
+ this.stats.time('Page Request');
+ this.transport.messageHandler.send('RenderPageRequest', {
+ pageIndex: this.pageNumber - 1
+ });
+ }
+
+ var self = this;
+ function complete(error) {
+ self.renderInProgress = false;
+ if (self.destroyed) {
+ delete self.operatorList;
+ delete self.displayReadyPromise;
+ }
+
+ if (error)
+ promise.reject(error);
+ else
+ promise.resolve();
+ };
+
+ // Once the operatorList and fonts are loaded, do the actual rendering.
+ this.displayReadyPromise.then(
+ function pageDisplayReadyPromise() {
+ if (self.destroyed) {
+ complete();
+ return;
+ }
+
+ var gfx = new CanvasGraphics(params.canvasContext,
+ this.objs, params.textLayer);
+ try {
+ this.display(gfx, params.viewport, complete);
+ } catch (e) {
+ complete(e);
+ }
+ }.bind(this),
+ function pageDisplayReadPromiseError(reason) {
+ complete(reason);
+ }
+ );
+
+ return promise;
+ },
+ /**
+ * For internal use only.
+ */
+ startRenderingFromOperatorList:
+ function PDFPageProxy_startRenderingFromOperatorList(operatorList,
+ fonts) {
+ var self = this;
+ this.operatorList = operatorList;
+
+ var displayContinuation = function pageDisplayContinuation() {
+ // Always defer call to display() to work around bug in
+ // Firefox error reporting from XHR callbacks.
+ setTimeout(function pageSetTimeout() {
+ self.displayReadyPromise.resolve();
+ });
+ };
+
+ this.ensureFonts(fonts,
+ function pageStartRenderingFromOperatorListEnsureFonts() {
+ displayContinuation();
+ }
+ );
+ },
+ /**
+ * For internal use only.
+ */
+ ensureFonts: function PDFPageProxy_ensureFonts(fonts, callback) {
+ this.stats.time('Font Loading');
+ // Convert the font names to the corresponding font obj.
+ for (var i = 0, ii = fonts.length; i < ii; i++) {
+ fonts[i] = this.objs.objs[fonts[i]].data;
+ }
+
+ // Load all the fonts
+ FontLoader.bind(
+ fonts,
+ function pageEnsureFontsFontObjs(fontObjs) {
+ this.stats.timeEnd('Font Loading');
+
+ callback.call(this);
+ }.bind(this)
+ );
+ },
+ /**
+ * For internal use only.
+ */
+ display: function PDFPageProxy_display(gfx, viewport, callback) {
+ var stats = this.stats;
+ stats.time('Rendering');
+
+ gfx.beginDrawing(viewport);
+
+ var startIdx = 0;
+ var length = this.operatorList.fnArray.length;
+ var operatorList = this.operatorList;
+ var stepper = null;
+ if (PDFJS.pdfBug && StepperManager.enabled) {
+ stepper = StepperManager.create(this.pageNumber - 1);
+ stepper.init(operatorList);
+ stepper.nextBreakPoint = stepper.getNextBreakPoint();
+ }
+
+ var self = this;
+ function next() {
+ startIdx =
+ gfx.executeOperatorList(operatorList, startIdx, next, stepper);
+ if (startIdx == length) {
+ gfx.endDrawing();
+ stats.timeEnd('Rendering');
+ stats.timeEnd('Overall');
+ if (callback) callback();
+ }
+ }
+ next();
+ },
+ /**
+ * @return {Promise} That is resolved with the a {string} that is the text
+ * content from the page.
+ */
+ getTextContent: function PDFPageProxy_getTextContent() {
+ var promise = new PDFJS.Promise();
+ this.transport.messageHandler.send('GetTextContent', {
+ pageIndex: this.pageNumber - 1
+ },
+ function textContentCallback(textContent) {
+ promise.resolve(textContent);
+ }
+ );
+ return promise;
+ },
+ /**
+ * Stub for future feature.
+ */
+ getOperationList: function PDFPageProxy_getOperationList() {
+ var promise = new PDFJS.Promise();
+ var operationList = { // not implemented
+ dependencyFontsID: null,
+ operatorList: null
+ };
+ promise.resolve(operationList);
+ return promise;
+ },
+ /**
+ * Destroys resources allocated by the page.
+ */
+ destroy: function PDFPageProxy_destroy() {
+ this.destroyed = true;
+
+ if (!this.renderInProgress) {
+ delete this.operatorList;
+ delete this.displayReadyPromise;
+ }
+ }
+ };
+ return PDFPageProxy;
+})();
+/**
+ * For internal use only.
+ */
+var WorkerTransport = (function WorkerTransportClosure() {
+ function WorkerTransport(promise) {
+ this.workerReadyPromise = promise;
+ this.objs = new PDFObjects();
+
+ this.pageCache = [];
+ this.pagePromises = [];
+ this.fontsLoading = {};
+
+ // If worker support isn't disabled explicit and the browser has worker
+ // support, create a new web worker and test if it/the browser fullfills
+ // all requirements to run parts of pdf.js in a web worker.
+ // Right now, the requirement is, that an Uint8Array is still an Uint8Array
+ // as it arrives on the worker. Chrome added this with version 15.
+ if (!globalScope.PDFJS.disableWorker && typeof Worker !== 'undefined') {
+ var workerSrc = PDFJS.workerSrc;
+ if (typeof workerSrc === 'undefined') {
+ error('No PDFJS.workerSrc specified');
+ }
+
+ try {
+ var worker;
+ if (PDFJS.isFirefoxExtension) {
+ // The firefox extension can't load the worker from the resource://
+ // url so we have to inline the script and then use the blob loader.
+ var bb = new MozBlobBuilder();
+ bb.append(document.querySelector('#PDFJS_SCRIPT_TAG').textContent);
+ var blobUrl = window.URL.createObjectURL(bb.getBlob());
+ worker = new Worker(blobUrl);
+ } else {
+ // Some versions of FF can't create a worker on localhost, see:
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=683280
+ worker = new Worker(workerSrc);
+ }
+
+ var messageHandler = new MessageHandler('main', worker);
+ this.messageHandler = messageHandler;
+
+ messageHandler.on('test', function transportTest(supportTypedArray) {
+ if (supportTypedArray) {
+ this.worker = worker;
+ this.setupMessageHandler(messageHandler);
+ } else {
+ globalScope.PDFJS.disableWorker = true;
+ this.setupFakeWorker();
+ }
+ }.bind(this));
+
+ var testObj = new Uint8Array(1);
+ // Some versions of Opera throw a DATA_CLONE_ERR on
+ // serializing the typed array.
+ messageHandler.send('test', testObj);
+ return;
+ } catch (e) {
+ info('The worker has been disabled.');
+ }
+ }
+ // Either workers are disabled, not supported or have thrown an exception.
+ // Thus, we fallback to a faked worker.
+ globalScope.PDFJS.disableWorker = true;
+ this.setupFakeWorker();
+ }
+ WorkerTransport.prototype = {
+ destroy: function WorkerTransport_destroy() {
+ if (this.worker)
+ this.worker.terminate();
+
+ this.pageCache = [];
+ this.pagePromises = [];
+ },
+ setupFakeWorker: function WorkerTransport_setupFakeWorker() {
+ // If we don't use a worker, just post/sendMessage to the main thread.
+ var fakeWorker = {
+ postMessage: function WorkerTransport_postMessage(obj) {
+ fakeWorker.onmessage({data: obj});
+ },
+ terminate: function WorkerTransport_terminate() {}
+ };
+
+ var messageHandler = new MessageHandler('main', fakeWorker);
+ this.setupMessageHandler(messageHandler);
+
+ // If the main thread is our worker, setup the handling for the messages
+ // the main thread sends to it self.
+ WorkerMessageHandler.setup(messageHandler);
+ },
+
+ setupMessageHandler:
+ function WorkerTransport_setupMessageHandler(messageHandler) {
+ this.messageHandler = messageHandler;
+
+ messageHandler.on('GetDoc', function transportDoc(data) {
+ var pdfInfo = data.pdfInfo;
+ var pdfDocument = new PDFDocumentProxy(pdfInfo, this);
+ this.pdfDocument = pdfDocument;
+ this.workerReadyPromise.resolve(pdfDocument);
+ }, this);
+
+ messageHandler.on('NeedPassword', function transportPassword(data) {
+ this.workerReadyPromise.reject(data.exception.message, data.exception);
+ }, this);
+
+ messageHandler.on('IncorrectPassword', function transportBadPass(data) {
+ this.workerReadyPromise.reject(data.exception.message, data.exception);
+ }, this);
+
+ messageHandler.on('GetPage', function transportPage(data) {
+ var pageInfo = data.pageInfo;
+ var page = new PDFPageProxy(pageInfo, this);
+ this.pageCache[pageInfo.pageIndex] = page;
+ var promise = this.pagePromises[pageInfo.pageIndex];
+ promise.resolve(page);
+ }, this);
+
+ messageHandler.on('GetAnnotations', function transportAnnotations(data) {
+ var annotations = data.annotations;
+ var promise = this.pageCache[data.pageIndex].annotationsPromise;
+ promise.resolve(annotations);
+ }, this);
+
+ messageHandler.on('RenderPage', function transportRender(data) {
+ var page = this.pageCache[data.pageIndex];
+ var depFonts = data.depFonts;
+
+ page.stats.timeEnd('Page Request');
+ page.startRenderingFromOperatorList(data.operatorList, depFonts);
+ }, this);
+
+ messageHandler.on('obj', function transportObj(data) {
+ var id = data[0];
+ var type = data[1];
+ if (this.objs.hasData(id))
+ return;
+
+ switch (type) {
+ case 'JpegStream':
+ var imageData = data[2];
+ loadJpegStream(id, imageData, this.objs);
+ break;
+ case 'Image':
+ var imageData = data[2];
+ this.objs.resolve(id, imageData);
+ break;
+ case 'Font':
+ var name = data[2];
+ var file = data[3];
+ var properties = data[4];
+
+ if (file) {
+ // Rewrap the ArrayBuffer in a stream.
+ var fontFileDict = new Dict();
+ file = new Stream(file, 0, file.length, fontFileDict);
+ }
+
+ // At this point, only the font object is created but the font is
+ // not yet attached to the DOM. This is done in `FontLoader.bind`.
+ var font = new Font(name, file, properties);
+ this.objs.resolve(id, font);
+ break;
+ default:
+ error('Got unkown object type ' + type);
+ }
+ }, this);
+
+ messageHandler.on('PageError', function transportError(data) {
+ var page = this.pageCache[data.pageNum - 1];
+ if (page.displayReadyPromise)
+ page.displayReadyPromise.reject(data.error);
+ else
+ error(data.error);
+ }, this);
+
+ messageHandler.on('JpegDecode', function(data, promise) {
+ var imageData = data[0];
+ var components = data[1];
+ if (components != 3 && components != 1)
+ error('Only 3 component or 1 component can be returned');
+
+ var img = new Image();
+ img.onload = (function messageHandler_onloadClosure() {
+ var width = img.width;
+ var height = img.height;
+ var size = width * height;
+ var rgbaLength = size * 4;
+ var buf = new Uint8Array(size * components);
+ var tmpCanvas = createScratchCanvas(width, height);
+ var tmpCtx = tmpCanvas.getContext('2d');
+ tmpCtx.drawImage(img, 0, 0);
+ var data = tmpCtx.getImageData(0, 0, width, height).data;
+
+ if (components == 3) {
+ for (var i = 0, j = 0; i < rgbaLength; i += 4, j += 3) {
+ buf[j] = data[i];
+ buf[j + 1] = data[i + 1];
+ buf[j + 2] = data[i + 2];
+ }
+ } else if (components == 1) {
+ for (var i = 0, j = 0; i < rgbaLength; i += 4, j++) {
+ buf[j] = data[i];
+ }
+ }
+ promise.resolve({ data: buf, width: width, height: height});
+ }).bind(this);
+ var src = 'data:image/jpeg;base64,' + window.btoa(imageData);
+ img.src = src;
+ });
+ },
+
+ sendData: function WorkerTransport_sendData(data, params) {
+ this.messageHandler.send('GetDocRequest', {data: data, params: params});
+ },
+
+ getData: function WorkerTransport_sendData(promise) {
+ this.messageHandler.send('GetData', null, function(data) {
+ promise.resolve(data);
+ });
+ },
+
+ getPage: function WorkerTransport_getPage(pageNumber, promise) {
+ var pageIndex = pageNumber - 1;
+ if (pageIndex in this.pagePromises)
+ return this.pagePromises[pageIndex];
+ var promise = new PDFJS.Promise('Page ' + pageNumber);
+ this.pagePromises[pageIndex] = promise;
+ this.messageHandler.send('GetPageRequest', { pageIndex: pageIndex });
+ return promise;
+ },
+
+ getAnnotations: function WorkerTransport_getAnnotations(pageIndex) {
+ this.messageHandler.send('GetAnnotationsRequest',
+ { pageIndex: pageIndex });
+ }
+ };
+ return WorkerTransport;
+
+})();
+
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
@@ -1604,27 +2047,10 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
'shadingFill': true
},
- beginDrawing: function CanvasGraphics_beginDrawing(mediaBox) {
- var cw = this.ctx.canvas.width, ch = this.ctx.canvas.height;
+ beginDrawing: function CanvasGraphics_beginDrawing(viewport) {
+ var transform = viewport.transform;
this.ctx.save();
- switch (mediaBox.rotate) {
- case 0:
- this.ctx.transform(1, 0, 0, -1, 0, ch);
- break;
- case 90:
- this.ctx.transform(0, 1, 1, 0, 0, 0);
- break;
- case 180:
- this.ctx.transform(-1, 0, 0, 1, cw, 0);
- break;
- case 270:
- this.ctx.transform(0, -1, -1, 0, cw, ch);
- break;
- }
- // Scale so that canvas units are the same as PDF user space units
- this.ctx.scale(cw / mediaBox.width, ch / mediaBox.height);
- // Move the media left-top corner to the (0,0) canvas position
- this.ctx.translate(-mediaBox.x, -mediaBox.y);
+ this.ctx.transform.apply(this.ctx, transform);
if (this.textLayer)
this.textLayer.beginLayout();
@@ -1723,10 +2149,13 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
this.ctx.webkitLineDashOffset = dashPhase;
},
setRenderingIntent: function CanvasGraphics_setRenderingIntent(intent) {
- TODO('set rendering intent: ' + intent);
+ // Maybe if we one day fully support color spaces this will be important
+ // for now we can ignore.
+ // TODO set rendering intent?
},
setFlatness: function CanvasGraphics_setFlatness(flatness) {
- TODO('set flatness: ' + flatness);
+ // There's no way to control this with canvas, but we can safely ignore.
+ // TODO set flatness?
},
setGState: function CanvasGraphics_setGState(states) {
for (var i = 0, ii = states.length; i < ii; i++) {
@@ -2221,7 +2650,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
text.length += shownText.length;
}
} else {
- malformed('TJ array element ' + e + ' is not string or num');
+ error('TJ array element ' + e + ' is not string or num');
}
}
@@ -2474,6 +2903,40 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
}
}
}
+ function rescaleImage(pixels, widthScale, heightScale) {
+ var scaledWidth = Math.ceil(width / widthScale);
+ var scaledHeight = Math.ceil(height / heightScale);
+
+ var itemsSum = new Uint32Array(scaledWidth * scaledHeight * 4);
+ var itemsCount = new Uint32Array(scaledWidth * scaledHeight);
+ for (var i = 0, position = 0; i < height; i++) {
+ var lineOffset = (0 | (i / heightScale)) * scaledWidth;
+ for (var j = 0; j < width; j++) {
+ var countOffset = lineOffset + (0 | (j / widthScale));
+ var sumOffset = countOffset << 2;
+ itemsSum[sumOffset] += pixels[position];
+ itemsSum[sumOffset + 1] += pixels[position + 1];
+ itemsSum[sumOffset + 2] += pixels[position + 2];
+ itemsSum[sumOffset + 3] += pixels[position + 3];
+ itemsCount[countOffset]++;
+ position += 4;
+ }
+ }
+ var tmpCanvas = createScratchCanvas(scaledWidth, scaledHeight);
+ var tmpCtx = tmpCanvas.getContext('2d');
+ var imgData = tmpCtx.getImageData(0, 0, scaledWidth, scaledHeight);
+ pixels = imgData.data;
+ for (var i = 0, j = 0, ii = scaledWidth * scaledHeight; i < ii; i++) {
+ var count = itemsCount[i];
+ pixels[j] = itemsSum[j] / count;
+ pixels[j + 1] = itemsSum[j + 1] / count;
+ pixels[j + 2] = itemsSum[j + 2] / count;
+ pixels[j + 3] = itemsSum[j + 3] / count;
+ j += 4;
+ }
+ tmpCtx.putImageData(imgData, 0, 0);
+ return tmpCanvas;
+ }
this.save();
@@ -2496,8 +2959,19 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
applyStencilMask(pixels, inverseDecode);
- tmpCtx.putImageData(imgData, 0, 0);
- ctx.drawImage(tmpCanvas, 0, -h);
+ var currentTransform = ctx.mozCurrentTransformInverse;
+ var widthScale = Math.max(Math.abs(currentTransform[0]), 1);
+ var heightScale = Math.max(Math.abs(currentTransform[3]), 1);
+ if (widthScale >= 2 || heightScale >= 2) {
+ // canvas does not resize well large images to small -- using simple
+ // algorithm to perform pre-scaling
+ tmpCanvas = rescaleImage(imgData.data, widthScale, heightScale);
+ ctx.scale(widthScale, heightScale);
+ ctx.drawImage(tmpCanvas, 0, -h / heightScale);
+ } else {
+ tmpCtx.putImageData(imgData, 0, 0);
+ ctx.drawImage(tmpCanvas, 0, -h);
+ }
this.restore();
},
@@ -2624,6 +3098,7 @@ if (!isWorker) {
};
}
}
+
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
@@ -2663,51 +3138,55 @@ var Dict = (function DictClosure() {
// xref is optional
function Dict(xref) {
// Map should only be used internally, use functions below to access.
- this.map = Object.create(null);
- this.xref = xref;
- }
+ var map = Object.create(null);
+
+ this.assignXref = function Dict_assignXref(newXref) {
+ xref = newXref;
+ };
- Dict.prototype = {
// automatically dereferences Ref objects
- get: function Dict_get(key1, key2, key3) {
+ this.get = function Dict_get(key1, key2, key3) {
var value;
- var xref = this.xref;
- if (typeof (value = this.map[key1]) != 'undefined' || key1 in this.map ||
+ if (typeof (value = map[key1]) != 'undefined' || key1 in map ||
typeof key2 == 'undefined') {
- return xref ? this.xref.fetchIfRef(value) : value;
+ return xref ? xref.fetchIfRef(value) : value;
}
- if (typeof (value = this.map[key2]) != 'undefined' || key2 in this.map ||
+ if (typeof (value = map[key2]) != 'undefined' || key2 in map ||
typeof key3 == 'undefined') {
- return xref ? this.xref.fetchIfRef(value) : value;
+ return xref ? xref.fetchIfRef(value) : value;
}
- value = this.map[key3] || null;
- return xref ? this.xref.fetchIfRef(value) : value;
- },
+ value = map[key3] || null;
+ return xref ? xref.fetchIfRef(value) : value;
+ };
+
// no dereferencing
- getRaw: function Dict_getRaw(key) {
- return this.map[key];
- },
+ this.getRaw = function Dict_getRaw(key) {
+ return map[key];
+ };
+
// creates new map and dereferences all Refs
- getAll: function Dict_getAll() {
+ this.getAll = function Dict_getAll() {
var all = {};
- for (var key in this.map)
- all[key] = this.get(key);
+ for (var key in map) {
+ var obj = this.get(key);
+ all[key] = obj instanceof Dict ? obj.getAll() : obj;
+ }
return all;
- },
+ };
- set: function Dict_set(key, value) {
- this.map[key] = value;
- },
+ this.set = function Dict_set(key, value) {
+ map[key] = value;
+ };
- has: function Dict_has(key) {
- return key in this.map;
- },
+ this.has = function Dict_has(key) {
+ return key in map;
+ };
- forEach: function Dict_forEach(callback) {
- for (var key in this.map) {
+ this.forEach = function Dict_forEach(callback) {
+ for (var key in map) {
callback(key, this.get(key));
}
- }
+ };
};
return Dict;
@@ -2754,7 +3233,14 @@ var Catalog = (function CatalogClosure() {
Catalog.prototype = {
get metadata() {
- var stream = this.catDict.get('Metadata');
+ var streamRef = this.catDict.getRaw('Metadata');
+ if (!isRef(streamRef))
+ return shadow(this, 'metadata', null);
+
+ var encryptMetadata = !this.xref.encrypt ? false :
+ this.xref.encrypt.encryptMetadata;
+
+ var stream = this.xref.fetch(streamRef, !encryptMetadata);
var metadata;
if (stream && isDict(stream.dict)) {
var type = stream.dict.get('Type');
@@ -2762,7 +3248,16 @@ var Catalog = (function CatalogClosure() {
if (isName(type) && isName(subtype) &&
type.name === 'Metadata' && subtype.name === 'XML') {
- metadata = stringToPDFString(bytesToString(stream.getBytes()));
+ // XXX: This should examine the charset the XML document defines,
+ // however since there are currently no real means to decode
+ // arbitrary charsets, let's just hope that the author of the PDF
+ // was reasonable enough to stick with the XML default charset,
+ // which is UTF-8.
+ try {
+ metadata = stringToUTF8String(bytesToString(stream.getBytes()));
+ } catch (e) {
+ info('Skipping invalid metadata.');
+ }
}
}
@@ -2920,12 +3415,12 @@ var Catalog = (function CatalogClosure() {
})();
var XRef = (function XRefClosure() {
- function XRef(stream, startXRef, mainXRefEntriesOffset) {
+ function XRef(stream, startXRef, mainXRefEntriesOffset, password) {
this.stream = stream;
this.entries = [];
this.xrefstms = {};
var trailerDict = this.readXRef(startXRef);
- trailerDict.xref = this;
+ trailerDict.assignXref(this);
this.trailer = trailerDict;
// prepare the XRef cache
this.cache = [];
@@ -2933,8 +3428,7 @@ var XRef = (function XRefClosure() {
var encrypt = trailerDict.get('Encrypt');
if (encrypt) {
var fileId = trailerDict.get('ID');
- this.encrypt = new CipherTransformFactory(encrypt,
- fileId[0] /*, password */);
+ this.encrypt = new CipherTransformFactory(encrypt, fileId[0], password);
}
// get the root dictionary (catalog) object
@@ -2986,9 +3480,8 @@ var XRef = (function XRefClosure() {
}
}
- // Sanity check: as per spec, first object must have these properties
- if (this.entries[0] &&
- !(this.entries[0].gen === 65535 && this.entries[0].free))
+ // Sanity check: as per spec, first object must be free
+ if (this.entries[0] && !this.entries[0].free)
error('Invalid XRef table: unexpected first object');
// Sanity check
@@ -3147,7 +3640,7 @@ var XRef = (function XRefClosure() {
}
// reading XRef streams
for (var i = 0, ii = xrefStms.length; i < ii; ++i) {
- this.readXRef(xrefStms[i]);
+ this.readXRef(xrefStms[i], true);
}
// finding main trailer
var dict;
@@ -3170,7 +3663,7 @@ var XRef = (function XRefClosure() {
// nothing helps
error('Invalid PDF structure');
},
- readXRef: function XRef_readXRef(startXRef) {
+ readXRef: function XRef_readXRef(startXRef, recoveryMode) {
var stream = this.stream;
stream.pos = startXRef;
@@ -3203,16 +3696,18 @@ var XRef = (function XRefClosure() {
error('Invalid XRef stream');
}
dict = this.readXRefStream(obj);
+ if (!dict)
+ error('Failed to read XRef stream');
}
// Recursively get previous dictionary, if any
obj = dict.get('Prev');
if (isInt(obj))
- this.readXRef(obj);
+ this.readXRef(obj, recoveryMode);
else if (isRef(obj)) {
// The spec says Prev must not be a reference, i.e. "/Prev NNN"
// This is a fallback for non-compliant PDFs, i.e. "/Prev NNN 0 R"
- this.readXRef(obj.num);
+ this.readXRef(obj.num, recoveryMode);
}
return dict;
@@ -3220,6 +3715,9 @@ var XRef = (function XRefClosure() {
log('(while reading XRef): ' + e);
}
+ if (recoveryMode)
+ return;
+
warn('Indexing all PDF objects');
return this.indexObjects();
},
@@ -3432,6 +3930,7 @@ var PDFObjects = (function PDFObjectsClosure() {
return PDFObjects;
})();
+
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
@@ -4270,7 +4769,10 @@ var PostScriptLexer = (function PostScriptLexerClosure() {
// operator
var str = ch.toLowerCase();
while (true) {
- ch = stream.lookChar().toLowerCase();
+ ch = stream.lookChar();
+ if (ch === null)
+ break;
+ ch = ch.toLowerCase();
if (ch >= 'a' && ch <= 'z')
str += ch;
else
@@ -4306,6 +4808,7 @@ var PostScriptLexer = (function PostScriptLexerClosure() {
return PostScriptLexer;
})();
+
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
@@ -4411,6 +4914,7 @@ var ExpertSubsetCharset = [
'periodinferior', 'commainferior'
];
+
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
@@ -11344,6 +11848,7 @@ var CIDToUnicodeMaps = {
{f: 7, c: 19887}]
};
+
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
@@ -11797,12 +12302,12 @@ var LabCS = (function LabCSClosure() {
error('Invalid WhitePoint components, no fallback available');
if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {
- warn('Invalid BlackPoint, falling back to default');
+ info('Invalid BlackPoint, falling back to default');
this.XB = this.YB = this.ZB = 0;
}
if (this.amin > this.amax || this.bmin > this.bmax) {
- warn('Invalid Range, falling back to defaults');
+ info('Invalid Range, falling back to defaults');
this.amin = -100;
this.amax = 100;
this.bmin = -100;
@@ -11876,6 +12381,7 @@ var LabCS = (function LabCSClosure() {
};
return LabCS;
})();
+
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
@@ -12297,13 +12803,14 @@ var CipherTransform = (function CipherTransformClosure() {
})();
var CipherTransformFactory = (function CipherTransformFactoryClosure() {
+ var defaultPasswordBytes = new Uint8Array([
+ 0x28, 0xBF, 0x4E, 0x5E, 0x4E, 0x75, 0x8A, 0x41,
+ 0x64, 0x00, 0x4E, 0x56, 0xFF, 0xFA, 0x01, 0x08,
+ 0x2E, 0x2E, 0x00, 0xB6, 0xD0, 0x68, 0x3E, 0x80,
+ 0x2F, 0x0C, 0xA9, 0xFE, 0x64, 0x53, 0x69, 0x7A]);
+
function prepareKeyData(fileId, password, ownerPassword, userPassword,
flags, revision, keyLength, encryptMetadata) {
- var defaultPasswordBytes = new Uint8Array([
- 0x28, 0xBF, 0x4E, 0x5E, 0x4E, 0x75, 0x8A, 0x41,
- 0x64, 0x00, 0x4E, 0x56, 0xFF, 0xFA, 0x01, 0x08,
- 0x2E, 0x2E, 0x00, 0xB6, 0xD0, 0x68, 0x3E, 0x80,
- 0x2F, 0x0C, 0xA9, 0xFE, 0x64, 0x53, 0x69, 0x7A]);
var hashData = new Uint8Array(100), i = 0, j, n;
if (password) {
n = Math.min(32, password.length);
@@ -12340,9 +12847,8 @@ var CipherTransformFactory = (function CipherTransformFactoryClosure() {
var cipher, checkData;
if (revision >= 3) {
- // padded password in hashData, we can use this array for user
- // password check
- i = 32;
+ for (i = 0; i < 32; ++i)
+ hashData[i] = defaultPasswordBytes[i];
for (j = 0, n = fileId.length; j < n; ++j)
hashData[i++] = fileId[j];
cipher = new ARCFourCipher(encryptionKey);
@@ -12355,16 +12861,53 @@ var CipherTransformFactory = (function CipherTransformFactoryClosure() {
cipher = new ARCFourCipher(derivedKey);
checkData = cipher.encryptBlock(checkData);
}
+ for (j = 0, n = checkData.length; j < n; ++j) {
+ if (userPassword[j] != checkData[j])
+ return null;
+ }
} else {
cipher = new ARCFourCipher(encryptionKey);
- checkData = cipher.encryptBlock(hashData.subarray(0, 32));
- }
- for (j = 0, n = checkData.length; j < n; ++j) {
- if (userPassword[j] != checkData[j])
- error('incorrect password');
+ checkData = cipher.encryptBlock(defaultPasswordBytes);
+ for (j = 0, n = checkData.length; j < n; ++j) {
+ if (userPassword[j] != checkData[j])
+ return null;
+ }
}
return encryptionKey;
}
+ function decodeUserPassword(password, ownerPassword, revision, keyLength) {
+ var hashData = new Uint8Array(32), i = 0, j, n;
+ n = Math.min(32, password.length);
+ for (; i < n; ++i)
+ hashData[i] = password[i];
+ j = 0;
+ while (i < 32) {
+ hashData[i++] = defaultPasswordBytes[j++];
+ }
+ var hash = calculateMD5(hashData, 0, i);
+ var keyLengthInBytes = keyLength >> 3;
+ if (revision >= 3) {
+ for (j = 0; j < 50; ++j) {
+ hash = calculateMD5(hash, 0, hash.length);
+ }
+ }
+
+ var cipher, userPassword;
+ if (revision >= 3) {
+ userPassword = ownerPassword;
+ var derivedKey = new Uint8Array(keyLengthInBytes), k;
+ for (j = 19; j >= 0; j--) {
+ for (k = 0; k < keyLengthInBytes; ++k)
+ derivedKey[k] = hash[k] ^ j;
+ cipher = new ARCFourCipher(derivedKey);
+ userPassword = cipher.encryptBlock(userPassword);
+ }
+ } else {
+ cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes));
+ userPassword = cipher.encryptBlock(ownerPassword);
+ }
+ return userPassword;
+ }
var identityName = new Name('Identity');
@@ -12387,17 +12930,34 @@ var CipherTransformFactory = (function CipherTransformFactoryClosure() {
var userPassword = stringToBytes(dict.get('U'));
var flags = dict.get('P');
var revision = dict.get('R');
- var encryptMetadata =
+ var encryptMetadata = algorithm == 4 && // meaningful when V is 4
dict.get('EncryptMetadata') !== false; // makes true as default value
+ this.encryptMetadata = encryptMetadata;
+
var fileIdBytes = stringToBytes(fileId);
var passwordBytes;
if (password)
passwordBytes = stringToBytes(password);
- this.encryptionKey = prepareKeyData(fileIdBytes, passwordBytes,
- ownerPassword, userPassword,
- flags, revision,
- keyLength, encryptMetadata);
+ var encryptionKey = prepareKeyData(fileIdBytes, passwordBytes,
+ ownerPassword, userPassword, flags,
+ revision, keyLength, encryptMetadata);
+ if (!encryptionKey && !password) {
+ throw new PasswordException('No password given', 'needpassword');
+ } else if (!encryptionKey && password) {
+ // Attempting use the password as an owner password
+ var decodedPassword = decodeUserPassword(passwordBytes, ownerPassword,
+ revision, keyLength);
+ encryptionKey = prepareKeyData(fileIdBytes, decodedPassword,
+ ownerPassword, userPassword, flags,
+ revision, keyLength, encryptMetadata);
+ }
+
+ if (!encryptionKey)
+ throw new PasswordException('Incorrect Password', 'incorrectpassword');
+
+ this.encryptionKey = encryptionKey;
+
if (algorithm == 4) {
this.cf = dict.get('CF');
this.stmf = dict.get('StmF') || identityName;
@@ -12472,6 +13032,7 @@ var CipherTransformFactory = (function CipherTransformFactoryClosure() {
return CipherTransformFactory;
})();
+
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
@@ -12582,20 +13143,21 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
// Compatibility
BX: 'beginCompat',
- EX: 'endCompat'
+ EX: 'endCompat',
+
+ // (reserved partial commands for the lexer)
+ BM: null,
+ BD: null,
+ 'true': null,
+ fa: null,
+ fal: null,
+ fals: null,
+ 'false': null,
+ nu: null,
+ nul: null,
+ 'null': null
};
- function splitCombinedOperations(operations) {
- // Two operations can be combined together, trying to find which two
- // operations were concatenated.
- for (var i = operations.length - 1; i > 0; i--) {
- var op1 = operations.substring(0, i), op2 = operations.substring(i);
- if (op1 in OP_MAP && op2 in OP_MAP)
- return [op1, op2]; // operations found
- }
- return null;
- }
-
PartialEvaluator.prototype = {
getOperatorList: function PartialEvaluator_getOperatorList(stream,
resources,
@@ -12627,13 +13189,15 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
font = xref.fetchIfRef(font) || fontRes.get(fontName);
assertWellFormed(isDict(font));
- if (!font.translated) {
+
+ ++self.objIdCounter;
+ if (!font.loadedName) {
font.translated = self.translateFont(font, xref, resources,
dependency);
if (font.translated) {
// keep track of each font we translated so the caller can
// load them asynchronously before calling display on a page
- loadedName = 'font_' + uniquePrefix + (++self.objIdCounter);
+ loadedName = 'font_' + uniquePrefix + self.objIdCounter;
font.translated.properties.loadedName = loadedName;
font.loadedName = loadedName;
@@ -12738,36 +13302,19 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
resources = resources || new Dict();
var xobjs = resources.get('XObject') || new Dict();
var patterns = resources.get('Pattern') || new Dict();
- var parser = new Parser(new Lexer(stream), false, xref);
+ var parser = new Parser(new Lexer(stream, OP_MAP), false, xref);
var res = resources;
- var hasNextObj = false, nextObj;
var args = [], obj;
var TILING_PATTERN = 1, SHADING_PATTERN = 2;
while (true) {
- if (hasNextObj) {
- obj = nextObj;
- hasNextObj = false;
- } else {
- obj = parser.getObj();
- if (isEOF(obj))
- break;
- }
+ obj = parser.getObj();
+ if (isEOF(obj))
+ break;
if (isCmd(obj)) {
var cmd = obj.cmd;
var fn = OP_MAP[cmd];
- if (!fn) {
- // invalid content command, trying to recover
- var cmds = splitCombinedOperations(cmd);
- if (cmds) {
- cmd = cmds[0];
- fn = OP_MAP[cmd];
- // feeding other command on the next interation
- hasNextObj = true;
- nextObj = Cmd.get(cmds[1]);
- }
- }
assertWellFormed(fn, 'Unknown command "' + cmd + '"');
// TODO figure out how to type-check vararg functions
@@ -12907,6 +13454,18 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
value[1]
]);
break;
+ case 'BM':
+ // We support the default so don't trigger the TODO.
+ if (!isName(value) || value.name != 'Normal')
+ TODO('graphic state operator ' + key);
+ break;
+ case 'SMask':
+ // We support the default so don't trigger the TODO.
+ if (!isName(value) || value.name != 'None')
+ TODO('graphic state operator ' + key);
+ break;
+ // Only generate info log messages for the following since
+ // they are unlikey to have a big impact on the rendering.
case 'OP':
case 'op':
case 'OPM':
@@ -12919,14 +13478,13 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
case 'HT':
case 'SM':
case 'SA':
- case 'BM':
- case 'SMask':
case 'AIS':
case 'TK':
- TODO('graphic state operator ' + key);
+ // TODO implement these operators.
+ info('graphic state operator ' + key);
break;
default:
- warn('Unknown graphic state operator ' + key);
+ info('Unknown graphic state operator ' + key);
break;
}
}
@@ -12940,13 +13498,88 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
args = [];
} else if (obj != null) {
assertWellFormed(args.length <= 33, 'Too many arguments');
- args.push(obj);
+ args.push(obj instanceof Dict ? obj.getAll() : obj);
}
}
return queue;
},
+ getTextContent: function partialEvaluatorGetIRQueue(stream, resources) {
+
+ var self = this;
+ var xref = this.xref;
+
+ function handleSetFont(fontName, fontRef) {
+ var fontRes = resources.get('Font');
+
+ // TODO: TOASK: Is it possible to get here? If so, what does
+ // args[0].name should be like???
+ assert(fontRes, 'fontRes not available');
+
+ fontRes = xref.fetchIfRef(fontRes);
+ fontRef = fontRef || fontRes.get(fontName);
+ var font = xref.fetchIfRef(fontRef), tra;
+ assertWellFormed(isDict(font));
+ if (!font.translated) {
+ font.translated = self.translateFont(font, xref, resources);
+ }
+ return font;
+ }
+
+ resources = xref.fetchIfRef(resources) || new Dict();
+
+ var parser = new Parser(new Lexer(stream), false);
+ var res = resources;
+ var args = [], obj;
+
+ var text = '';
+ var chunk = '';
+ var font = null;
+ while (!isEOF(obj = parser.getObj())) {
+ if (isCmd(obj)) {
+ var cmd = obj.cmd;
+ switch (cmd) {
+ case 'Tf':
+ font = handleSetFont(args[0].name);
+ break;
+ case 'TJ':
+ var items = args[0];
+ for (var j = 0, jj = items.length; j < jj; j++) {
+ if (typeof items[j] === 'string') {
+ chunk += items[j];
+ } else if (items[j] < 0) {
+ // making all negative offsets a space - better to have
+ // a space in incorrect place than not have them at all
+ chunk += ' ';
+ }
+ }
+ break;
+ case 'Tj':
+ chunk += args[0];
+ break;
+ case "'":
+ chunk += args[0] + ' ';
+ break;
+ case '"':
+ chunk += args[2] + ' ';
+ break;
+ } // switch
+ if (chunk !== '') {
+ text += fontCharsToUnicode(chunk, font.translated.properties);
+ chunk = '';
+ }
+
+ args = [];
+ } else if (obj != null) {
+ assertWellFormed(args.length <= 33, 'Too many arguments');
+ args.push(obj);
+ }
+ }
+
+ return text;
+ },
+
extractDataStructures: function
partialEvaluatorExtractDataStructures(dict, baseDict,
xref, properties) {
@@ -12954,7 +13587,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
var toUnicode = dict.get('ToUnicode') ||
baseDict.get('ToUnicode');
if (toUnicode)
- properties.toUnicode = this.readToUnicode(toUnicode, xref);
+ properties.toUnicode = this.readToUnicode(toUnicode, xref, properties);
if (properties.composite) {
// CIDSystemInfo helps to match CID to glyphs
@@ -13010,7 +13643,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
properties.hasEncoding = hasEncoding;
},
- readToUnicode: function PartialEvaluator_readToUnicode(toUnicode, xref) {
+ readToUnicode: function PartialEvaluator_readToUnicode(toUnicode, xref,
+ properties) {
var cmapObj = toUnicode;
var charToUnicode = [];
if (isName(cmapObj)) {
@@ -13099,6 +13733,11 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
}
} else if (octet == 0x3E) {
if (token.length) {
+ // Heuristic: guessing chars size by checking numbers sizes
+ // in the CMap entries.
+ if (token.length == 2 && properties.composite)
+ properties.wideChars = false;
+
if (token.length <= 4) {
// parsing hex number
tokens.push(parseInt(token, 16));
@@ -13316,6 +13955,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
length1: length1,
length2: length2,
composite: composite,
+ wideChars: composite,
fixedPitch: false,
fontMatrix: dict.get('FontMatrix') || IDENTITY_MATRIX,
firstChar: firstChar || 0,
@@ -13336,7 +13976,6 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
properties.coded = true;
var charProcs = dict.get('CharProcs').getAll();
var fontResources = dict.get('Resources') || resources;
- properties.resources = fontResources;
properties.charProcOperatorList = {};
for (var key in charProcs) {
var glyphStream = charProcs[key];
@@ -13380,6 +14019,7 @@ var EvalState = (function EvalStateClosure() {
return EvalState;
})();
+
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
@@ -14135,6 +14775,736 @@ function isSpecialUnicode(unicode) {
unicode < kCmapGlyphOffset + kSizeOfGlyphArea);
}
+// The normalization table is obtained by filtering the Unicode characters
+// database with <compat> entries.
+var NormalizedUnicodes = {
+ '\u00A8': '\u0020\u0308',
+ '\u00AF': '\u0020\u0304',
+ '\u00B4': '\u0020\u0301',
+ '\u00B5': '\u03BC',
+ '\u00B8': '\u0020\u0327',
+ '\u0132': '\u0049\u004A',
+ '\u0133': '\u0069\u006A',
+ '\u013F': '\u004C\u00B7',
+ '\u0140': '\u006C\u00B7',
+ '\u0149': '\u02BC\u006E',
+ '\u017F': '\u0073',
+ '\u01C4': '\u0044\u017D',
+ '\u01C5': '\u0044\u017E',
+ '\u01C6': '\u0064\u017E',
+ '\u01C7': '\u004C\u004A',
+ '\u01C8': '\u004C\u006A',
+ '\u01C9': '\u006C\u006A',
+ '\u01CA': '\u004E\u004A',
+ '\u01CB': '\u004E\u006A',
+ '\u01CC': '\u006E\u006A',
+ '\u01F1': '\u0044\u005A',
+ '\u01F2': '\u0044\u007A',
+ '\u01F3': '\u0064\u007A',
+ '\u02D8': '\u0020\u0306',
+ '\u02D9': '\u0020\u0307',
+ '\u02DA': '\u0020\u030A',
+ '\u02DB': '\u0020\u0328',
+ '\u02DC': '\u0020\u0303',
+ '\u02DD': '\u0020\u030B',
+ '\u037A': '\u0020\u0345',
+ '\u0384': '\u0020\u0301',
+ '\u03D0': '\u03B2',
+ '\u03D1': '\u03B8',
+ '\u03D2': '\u03A5',
+ '\u03D5': '\u03C6',
+ '\u03D6': '\u03C0',
+ '\u03F0': '\u03BA',
+ '\u03F1': '\u03C1',
+ '\u03F2': '\u03C2',
+ '\u03F4': '\u0398',
+ '\u03F5': '\u03B5',
+ '\u03F9': '\u03A3',
+ '\u0587': '\u0565\u0582',
+ '\u0675': '\u0627\u0674',
+ '\u0676': '\u0648\u0674',
+ '\u0677': '\u06C7\u0674',
+ '\u0678': '\u064A\u0674',
+ '\u0E33': '\u0E4D\u0E32',
+ '\u0EB3': '\u0ECD\u0EB2',
+ '\u0EDC': '\u0EAB\u0E99',
+ '\u0EDD': '\u0EAB\u0EA1',
+ '\u0F77': '\u0FB2\u0F81',
+ '\u0F79': '\u0FB3\u0F81',
+ '\u1E9A': '\u0061\u02BE',
+ '\u1FBD': '\u0020\u0313',
+ '\u1FBF': '\u0020\u0313',
+ '\u1FC0': '\u0020\u0342',
+ '\u1FFE': '\u0020\u0314',
+ '\u2002': '\u0020',
+ '\u2003': '\u0020',
+ '\u2004': '\u0020',
+ '\u2005': '\u0020',
+ '\u2006': '\u0020',
+ '\u2008': '\u0020',
+ '\u2009': '\u0020',
+ '\u200A': '\u0020',
+ '\u2017': '\u0020\u0333',
+ '\u2024': '\u002E',
+ '\u2025': '\u002E\u002E',
+ '\u2026': '\u002E\u002E\u002E',
+ '\u2033': '\u2032\u2032',
+ '\u2034': '\u2032\u2032\u2032',
+ '\u2036': '\u2035\u2035',
+ '\u2037': '\u2035\u2035\u2035',
+ '\u203C': '\u0021\u0021',
+ '\u203E': '\u0020\u0305',
+ '\u2047': '\u003F\u003F',
+ '\u2048': '\u003F\u0021',
+ '\u2049': '\u0021\u003F',
+ '\u2057': '\u2032\u2032\u2032\u2032',
+ '\u205F': '\u0020',
+ '\u20A8': '\u0052\u0073',
+ '\u2100': '\u0061\u002F\u0063',
+ '\u2101': '\u0061\u002F\u0073',
+ '\u2103': '\u00B0\u0043',
+ '\u2105': '\u0063\u002F\u006F',
+ '\u2106': '\u0063\u002F\u0075',
+ '\u2107': '\u0190',
+ '\u2109': '\u00B0\u0046',
+ '\u2116': '\u004E\u006F',
+ '\u2121': '\u0054\u0045\u004C',
+ '\u2135': '\u05D0',
+ '\u2136': '\u05D1',
+ '\u2137': '\u05D2',
+ '\u2138': '\u05D3',
+ '\u213B': '\u0046\u0041\u0058',
+ '\u2160': '\u0049',
+ '\u2161': '\u0049\u0049',
+ '\u2162': '\u0049\u0049\u0049',
+ '\u2163': '\u0049\u0056',
+ '\u2164': '\u0056',
+ '\u2165': '\u0056\u0049',
+ '\u2166': '\u0056\u0049\u0049',
+ '\u2167': '\u0056\u0049\u0049\u0049',
+ '\u2168': '\u0049\u0058',
+ '\u2169': '\u0058',
+ '\u216A': '\u0058\u0049',
+ '\u216B': '\u0058\u0049\u0049',
+ '\u216C': '\u004C',
+ '\u216D': '\u0043',
+ '\u216E': '\u0044',
+ '\u216F': '\u004D',
+ '\u2170': '\u0069',
+ '\u2171': '\u0069\u0069',
+ '\u2172': '\u0069\u0069\u0069',
+ '\u2173': '\u0069\u0076',
+ '\u2174': '\u0076',
+ '\u2175': '\u0076\u0069',
+ '\u2176': '\u0076\u0069\u0069',
+ '\u2177': '\u0076\u0069\u0069\u0069',
+ '\u2178': '\u0069\u0078',
+ '\u2179': '\u0078',
+ '\u217A': '\u0078\u0069',
+ '\u217B': '\u0078\u0069\u0069',
+ '\u217C': '\u006C',
+ '\u217D': '\u0063',
+ '\u217E': '\u0064',
+ '\u217F': '\u006D',
+ '\u222C': '\u222B\u222B',
+ '\u222D': '\u222B\u222B\u222B',
+ '\u222F': '\u222E\u222E',
+ '\u2230': '\u222E\u222E\u222E',
+ '\u2474': '\u0028\u0031\u0029',
+ '\u2475': '\u0028\u0032\u0029',
+ '\u2476': '\u0028\u0033\u0029',
+ '\u2477': '\u0028\u0034\u0029',
+ '\u2478': '\u0028\u0035\u0029',
+ '\u2479': '\u0028\u0036\u0029',
+ '\u247A': '\u0028\u0037\u0029',
+ '\u247B': '\u0028\u0038\u0029',
+ '\u247C': '\u0028\u0039\u0029',
+ '\u247D': '\u0028\u0031\u0030\u0029',
+ '\u247E': '\u0028\u0031\u0031\u0029',
+ '\u247F': '\u0028\u0031\u0032\u0029',
+ '\u2480': '\u0028\u0031\u0033\u0029',
+ '\u2481': '\u0028\u0031\u0034\u0029',
+ '\u2482': '\u0028\u0031\u0035\u0029',
+ '\u2483': '\u0028\u0031\u0036\u0029',
+ '\u2484': '\u0028\u0031\u0037\u0029',
+ '\u2485': '\u0028\u0031\u0038\u0029',
+ '\u2486': '\u0028\u0031\u0039\u0029',
+ '\u2487': '\u0028\u0032\u0030\u0029',
+ '\u2488': '\u0031\u002E',
+ '\u2489': '\u0032\u002E',
+ '\u248A': '\u0033\u002E',
+ '\u248B': '\u0034\u002E',
+ '\u248C': '\u0035\u002E',
+ '\u248D': '\u0036\u002E',
+ '\u248E': '\u0037\u002E',
+ '\u248F': '\u0038\u002E',
+ '\u2490': '\u0039\u002E',
+ '\u2491': '\u0031\u0030\u002E',
+ '\u2492': '\u0031\u0031\u002E',
+ '\u2493': '\u0031\u0032\u002E',
+ '\u2494': '\u0031\u0033\u002E',
+ '\u2495': '\u0031\u0034\u002E',
+ '\u2496': '\u0031\u0035\u002E',
+ '\u2497': '\u0031\u0036\u002E',
+ '\u2498': '\u0031\u0037\u002E',
+ '\u2499': '\u0031\u0038\u002E',
+ '\u249A': '\u0031\u0039\u002E',
+ '\u249B': '\u0032\u0030\u002E',
+ '\u249C': '\u0028\u0061\u0029',
+ '\u249D': '\u0028\u0062\u0029',
+ '\u249E': '\u0028\u0063\u0029',
+ '\u249F': '\u0028\u0064\u0029',
+ '\u24A0': '\u0028\u0065\u0029',
+ '\u24A1': '\u0028\u0066\u0029',
+ '\u24A2': '\u0028\u0067\u0029',
+ '\u24A3': '\u0028\u0068\u0029',
+ '\u24A4': '\u0028\u0069\u0029',
+ '\u24A5': '\u0028\u006A\u0029',
+ '\u24A6': '\u0028\u006B\u0029',
+ '\u24A7': '\u0028\u006C\u0029',
+ '\u24A8': '\u0028\u006D\u0029',
+ '\u24A9': '\u0028\u006E\u0029',
+ '\u24AA': '\u0028\u006F\u0029',
+ '\u24AB': '\u0028\u0070\u0029',
+ '\u24AC': '\u0028\u0071\u0029',
+ '\u24AD': '\u0028\u0072\u0029',
+ '\u24AE': '\u0028\u0073\u0029',
+ '\u24AF': '\u0028\u0074\u0029',
+ '\u24B0': '\u0028\u0075\u0029',
+ '\u24B1': '\u0028\u0076\u0029',
+ '\u24B2': '\u0028\u0077\u0029',
+ '\u24B3': '\u0028\u0078\u0029',
+ '\u24B4': '\u0028\u0079\u0029',
+ '\u24B5': '\u0028\u007A\u0029',
+ '\u2A0C': '\u222B\u222B\u222B\u222B',
+ '\u2A74': '\u003A\u003A\u003D',
+ '\u2A75': '\u003D\u003D',
+ '\u2A76': '\u003D\u003D\u003D',
+ '\u2E9F': '\u6BCD',
+ '\u2EF3': '\u9F9F',
+ '\u2F00': '\u4E00',
+ '\u2F01': '\u4E28',
+ '\u2F02': '\u4E36',
+ '\u2F03': '\u4E3F',
+ '\u2F04': '\u4E59',
+ '\u2F05': '\u4E85',
+ '\u2F06': '\u4E8C',
+ '\u2F07': '\u4EA0',
+ '\u2F08': '\u4EBA',
+ '\u2F09': '\u513F',
+ '\u2F0A': '\u5165',
+ '\u2F0B': '\u516B',
+ '\u2F0C': '\u5182',
+ '\u2F0D': '\u5196',
+ '\u2F0E': '\u51AB',
+ '\u2F0F': '\u51E0',
+ '\u2F10': '\u51F5',
+ '\u2F11': '\u5200',
+ '\u2F12': '\u529B',
+ '\u2F13': '\u52F9',
+ '\u2F14': '\u5315',
+ '\u2F15': '\u531A',
+ '\u2F16': '\u5338',
+ '\u2F17': '\u5341',
+ '\u2F18': '\u535C',
+ '\u2F19': '\u5369',
+ '\u2F1A': '\u5382',
+ '\u2F1B': '\u53B6',
+ '\u2F1C': '\u53C8',
+ '\u2F1D': '\u53E3',
+ '\u2F1E': '\u56D7',
+ '\u2F1F': '\u571F',
+ '\u2F20': '\u58EB',
+ '\u2F21': '\u5902',
+ '\u2F22': '\u590A',
+ '\u2F23': '\u5915',
+ '\u2F24': '\u5927',
+ '\u2F25': '\u5973',
+ '\u2F26': '\u5B50',
+ '\u2F27': '\u5B80',
+ '\u2F28': '\u5BF8',
+ '\u2F29': '\u5C0F',
+ '\u2F2A': '\u5C22',
+ '\u2F2B': '\u5C38',
+ '\u2F2C': '\u5C6E',
+ '\u2F2D': '\u5C71',
+ '\u2F2E': '\u5DDB',
+ '\u2F2F': '\u5DE5',
+ '\u2F30': '\u5DF1',
+ '\u2F31': '\u5DFE',
+ '\u2F32': '\u5E72',
+ '\u2F33': '\u5E7A',
+ '\u2F34': '\u5E7F',
+ '\u2F35': '\u5EF4',
+ '\u2F36': '\u5EFE',
+ '\u2F37': '\u5F0B',
+ '\u2F38': '\u5F13',
+ '\u2F39': '\u5F50',
+ '\u2F3A': '\u5F61',
+ '\u2F3B': '\u5F73',
+ '\u2F3C': '\u5FC3',
+ '\u2F3D': '\u6208',
+ '\u2F3E': '\u6236',
+ '\u2F3F': '\u624B',
+ '\u2F40': '\u652F',
+ '\u2F41': '\u6534',
+ '\u2F42': '\u6587',
+ '\u2F43': '\u6597',
+ '\u2F44': '\u65A4',
+ '\u2F45': '\u65B9',
+ '\u2F46': '\u65E0',
+ '\u2F47': '\u65E5',
+ '\u2F48': '\u66F0',
+ '\u2F49': '\u6708',
+ '\u2F4A': '\u6728',
+ '\u2F4B': '\u6B20',
+ '\u2F4C': '\u6B62',
+ '\u2F4D': '\u6B79',
+ '\u2F4E': '\u6BB3',
+ '\u2F4F': '\u6BCB',
+ '\u2F50': '\u6BD4',
+ '\u2F51': '\u6BDB',
+ '\u2F52': '\u6C0F',
+ '\u2F53': '\u6C14',
+ '\u2F54': '\u6C34',
+ '\u2F55': '\u706B',
+ '\u2F56': '\u722A',
+ '\u2F57': '\u7236',
+ '\u2F58': '\u723B',
+ '\u2F59': '\u723F',
+ '\u2F5A': '\u7247',
+ '\u2F5B': '\u7259',
+ '\u2F5C': '\u725B',
+ '\u2F5D': '\u72AC',
+ '\u2F5E': '\u7384',
+ '\u2F5F': '\u7389',
+ '\u2F60': '\u74DC',
+ '\u2F61': '\u74E6',
+ '\u2F62': '\u7518',
+ '\u2F63': '\u751F',
+ '\u2F64': '\u7528',
+ '\u2F65': '\u7530',
+ '\u2F66': '\u758B',
+ '\u2F67': '\u7592',
+ '\u2F68': '\u7676',
+ '\u2F69': '\u767D',
+ '\u2F6A': '\u76AE',
+ '\u2F6B': '\u76BF',
+ '\u2F6C': '\u76EE',
+ '\u2F6D': '\u77DB',
+ '\u2F6E': '\u77E2',
+ '\u2F6F': '\u77F3',
+ '\u2F70': '\u793A',
+ '\u2F71': '\u79B8',
+ '\u2F72': '\u79BE',
+ '\u2F73': '\u7A74',
+ '\u2F74': '\u7ACB',
+ '\u2F75': '\u7AF9',
+ '\u2F76': '\u7C73',
+ '\u2F77': '\u7CF8',
+ '\u2F78': '\u7F36',
+ '\u2F79': '\u7F51',
+ '\u2F7A': '\u7F8A',
+ '\u2F7B': '\u7FBD',
+ '\u2F7C': '\u8001',
+ '\u2F7D': '\u800C',
+ '\u2F7E': '\u8012',
+ '\u2F7F': '\u8033',
+ '\u2F80': '\u807F',
+ '\u2F81': '\u8089',
+ '\u2F82': '\u81E3',
+ '\u2F83': '\u81EA',
+ '\u2F84': '\u81F3',
+ '\u2F85': '\u81FC',
+ '\u2F86': '\u820C',
+ '\u2F87': '\u821B',
+ '\u2F88': '\u821F',
+ '\u2F89': '\u826E',
+ '\u2F8A': '\u8272',
+ '\u2F8B': '\u8278',
+ '\u2F8C': '\u864D',
+ '\u2F8D': '\u866B',
+ '\u2F8E': '\u8840',
+ '\u2F8F': '\u884C',
+ '\u2F90': '\u8863',
+ '\u2F91': '\u897E',
+ '\u2F92': '\u898B',
+ '\u2F93': '\u89D2',
+ '\u2F94': '\u8A00',
+ '\u2F95': '\u8C37',
+ '\u2F96': '\u8C46',
+ '\u2F97': '\u8C55',
+ '\u2F98': '\u8C78',
+ '\u2F99': '\u8C9D',
+ '\u2F9A': '\u8D64',
+ '\u2F9B': '\u8D70',
+ '\u2F9C': '\u8DB3',
+ '\u2F9D': '\u8EAB',
+ '\u2F9E': '\u8ECA',
+ '\u2F9F': '\u8F9B',
+ '\u2FA0': '\u8FB0',
+ '\u2FA1': '\u8FB5',
+ '\u2FA2': '\u9091',
+ '\u2FA3': '\u9149',
+ '\u2FA4': '\u91C6',
+ '\u2FA5': '\u91CC',
+ '\u2FA6': '\u91D1',
+ '\u2FA7': '\u9577',
+ '\u2FA8': '\u9580',
+ '\u2FA9': '\u961C',
+ '\u2FAA': '\u96B6',
+ '\u2FAB': '\u96B9',
+ '\u2FAC': '\u96E8',
+ '\u2FAD': '\u9751',
+ '\u2FAE': '\u975E',
+ '\u2FAF': '\u9762',
+ '\u2FB0': '\u9769',
+ '\u2FB1': '\u97CB',
+ '\u2FB2': '\u97ED',
+ '\u2FB3': '\u97F3',
+ '\u2FB4': '\u9801',
+ '\u2FB5': '\u98A8',
+ '\u2FB6': '\u98DB',
+ '\u2FB7': '\u98DF',
+ '\u2FB8': '\u9996',
+ '\u2FB9': '\u9999',
+ '\u2FBA': '\u99AC',
+ '\u2FBB': '\u9AA8',
+ '\u2FBC': '\u9AD8',
+ '\u2FBD': '\u9ADF',
+ '\u2FBE': '\u9B25',
+ '\u2FBF': '\u9B2F',
+ '\u2FC0': '\u9B32',
+ '\u2FC1': '\u9B3C',
+ '\u2FC2': '\u9B5A',
+ '\u2FC3': '\u9CE5',
+ '\u2FC4': '\u9E75',
+ '\u2FC5': '\u9E7F',
+ '\u2FC6': '\u9EA5',
+ '\u2FC7': '\u9EBB',
+ '\u2FC8': '\u9EC3',
+ '\u2FC9': '\u9ECD',
+ '\u2FCA': '\u9ED1',
+ '\u2FCB': '\u9EF9',
+ '\u2FCC': '\u9EFD',
+ '\u2FCD': '\u9F0E',
+ '\u2FCE': '\u9F13',
+ '\u2FCF': '\u9F20',
+ '\u2FD0': '\u9F3B',
+ '\u2FD1': '\u9F4A',
+ '\u2FD2': '\u9F52',
+ '\u2FD3': '\u9F8D',
+ '\u2FD4': '\u9F9C',
+ '\u2FD5': '\u9FA0',
+ '\u3036': '\u3012',
+ '\u3038': '\u5341',
+ '\u3039': '\u5344',
+ '\u303A': '\u5345',
+ '\u309B': '\u0020\u3099',
+ '\u309C': '\u0020\u309A',
+ '\u3131': '\u1100',
+ '\u3132': '\u1101',
+ '\u3133': '\u11AA',
+ '\u3134': '\u1102',
+ '\u3135': '\u11AC',
+ '\u3136': '\u11AD',
+ '\u3137': '\u1103',
+ '\u3138': '\u1104',
+ '\u3139': '\u1105',
+ '\u313A': '\u11B0',
+ '\u313B': '\u11B1',
+ '\u313C': '\u11B2',
+ '\u313D': '\u11B3',
+ '\u313E': '\u11B4',
+ '\u313F': '\u11B5',
+ '\u3140': '\u111A',
+ '\u3141': '\u1106',
+ '\u3142': '\u1107',
+ '\u3143': '\u1108',
+ '\u3144': '\u1121',
+ '\u3145': '\u1109',
+ '\u3146': '\u110A',
+ '\u3147': '\u110B',
+ '\u3148': '\u110C',
+ '\u3149': '\u110D',
+ '\u314A': '\u110E',
+ '\u314B': '\u110F',
+ '\u314C': '\u1110',
+ '\u314D': '\u1111',
+ '\u314E': '\u1112',
+ '\u314F': '\u1161',
+ '\u3150': '\u1162',
+ '\u3151': '\u1163',
+ '\u3152': '\u1164',
+ '\u3153': '\u1165',
+ '\u3154': '\u1166',
+ '\u3155': '\u1167',
+ '\u3156': '\u1168',
+ '\u3157': '\u1169',
+ '\u3158': '\u116A',
+ '\u3159': '\u116B',
+ '\u315A': '\u116C',
+ '\u315B': '\u116D',
+ '\u315C': '\u116E',
+ '\u315D': '\u116F',
+ '\u315E': '\u1170',
+ '\u315F': '\u1171',
+ '\u3160': '\u1172',
+ '\u3161': '\u1173',
+ '\u3162': '\u1174',
+ '\u3163': '\u1175',
+ '\u3164': '\u1160',
+ '\u3165': '\u1114',
+ '\u3166': '\u1115',
+ '\u3167': '\u11C7',
+ '\u3168': '\u11C8',
+ '\u3169': '\u11CC',
+ '\u316A': '\u11CE',
+ '\u316B': '\u11D3',
+ '\u316C': '\u11D7',
+ '\u316D': '\u11D9',
+ '\u316E': '\u111C',
+ '\u316F': '\u11DD',
+ '\u3170': '\u11DF',
+ '\u3171': '\u111D',
+ '\u3172': '\u111E',
+ '\u3173': '\u1120',
+ '\u3174': '\u1122',
+ '\u3175': '\u1123',
+ '\u3176': '\u1127',
+ '\u3177': '\u1129',
+ '\u3178': '\u112B',
+ '\u3179': '\u112C',
+ '\u317A': '\u112D',
+ '\u317B': '\u112E',
+ '\u317C': '\u112F',
+ '\u317D': '\u1132',
+ '\u317E': '\u1136',
+ '\u317F': '\u1140',
+ '\u3180': '\u1147',
+ '\u3181': '\u114C',
+ '\u3182': '\u11F1',
+ '\u3183': '\u11F2',
+ '\u3184': '\u1157',
+ '\u3185': '\u1158',
+ '\u3186': '\u1159',
+ '\u3187': '\u1184',
+ '\u3188': '\u1185',
+ '\u3189': '\u1188',
+ '\u318A': '\u1191',
+ '\u318B': '\u1192',
+ '\u318C': '\u1194',
+ '\u318D': '\u119E',
+ '\u318E': '\u11A1',
+ '\u3200': '\u0028\u1100\u0029',
+ '\u3201': '\u0028\u1102\u0029',
+ '\u3202': '\u0028\u1103\u0029',
+ '\u3203': '\u0028\u1105\u0029',
+ '\u3204': '\u0028\u1106\u0029',
+ '\u3205': '\u0028\u1107\u0029',
+ '\u3206': '\u0028\u1109\u0029',
+ '\u3207': '\u0028\u110B\u0029',
+ '\u3208': '\u0028\u110C\u0029',
+ '\u3209': '\u0028\u110E\u0029',
+ '\u320A': '\u0028\u110F\u0029',
+ '\u320B': '\u0028\u1110\u0029',
+ '\u320C': '\u0028\u1111\u0029',
+ '\u320D': '\u0028\u1112\u0029',
+ '\u320E': '\u0028\u1100\u1161\u0029',
+ '\u320F': '\u0028\u1102\u1161\u0029',
+ '\u3210': '\u0028\u1103\u1161\u0029',
+ '\u3211': '\u0028\u1105\u1161\u0029',
+ '\u3212': '\u0028\u1106\u1161\u0029',
+ '\u3213': '\u0028\u1107\u1161\u0029',
+ '\u3214': '\u0028\u1109\u1161\u0029',
+ '\u3215': '\u0028\u110B\u1161\u0029',
+ '\u3216': '\u0028\u110C\u1161\u0029',
+ '\u3217': '\u0028\u110E\u1161\u0029',
+ '\u3218': '\u0028\u110F\u1161\u0029',
+ '\u3219': '\u0028\u1110\u1161\u0029',
+ '\u321A': '\u0028\u1111\u1161\u0029',
+ '\u321B': '\u0028\u1112\u1161\u0029',
+ '\u321C': '\u0028\u110C\u116E\u0029',
+ '\u321D': '\u0028\u110B\u1169\u110C\u1165\u11AB\u0029',
+ '\u321E': '\u0028\u110B\u1169\u1112\u116E\u0029',
+ '\u3220': '\u0028\u4E00\u0029',
+ '\u3221': '\u0028\u4E8C\u0029',
+ '\u3222': '\u0028\u4E09\u0029',
+ '\u3223': '\u0028\u56DB\u0029',
+ '\u3224': '\u0028\u4E94\u0029',
+ '\u3225': '\u0028\u516D\u0029',
+ '\u3226': '\u0028\u4E03\u0029',
+ '\u3227': '\u0028\u516B\u0029',
+ '\u3228': '\u0028\u4E5D\u0029',
+ '\u3229': '\u0028\u5341\u0029',
+ '\u322A': '\u0028\u6708\u0029',
+ '\u322B': '\u0028\u706B\u0029',
+ '\u322C': '\u0028\u6C34\u0029',
+ '\u322D': '\u0028\u6728\u0029',
+ '\u322E': '\u0028\u91D1\u0029',
+ '\u322F': '\u0028\u571F\u0029',
+ '\u3230': '\u0028\u65E5\u0029',
+ '\u3231': '\u0028\u682A\u0029',
+ '\u3232': '\u0028\u6709\u0029',
+ '\u3233': '\u0028\u793E\u0029',
+ '\u3234': '\u0028\u540D\u0029',
+ '\u3235': '\u0028\u7279\u0029',
+ '\u3236': '\u0028\u8CA1\u0029',
+ '\u3237': '\u0028\u795D\u0029',
+ '\u3238': '\u0028\u52B4\u0029',
+ '\u3239': '\u0028\u4EE3\u0029',
+ '\u323A': '\u0028\u547C\u0029',
+ '\u323B': '\u0028\u5B66\u0029',
+ '\u323C': '\u0028\u76E3\u0029',
+ '\u323D': '\u0028\u4F01\u0029',
+ '\u323E': '\u0028\u8CC7\u0029',
+ '\u323F': '\u0028\u5354\u0029',
+ '\u3240': '\u0028\u796D\u0029',
+ '\u3241': '\u0028\u4F11\u0029',
+ '\u3242': '\u0028\u81EA\u0029',
+ '\u3243': '\u0028\u81F3\u0029',
+ '\u32C0': '\u0031\u6708',
+ '\u32C1': '\u0032\u6708',
+ '\u32C2': '\u0033\u6708',
+ '\u32C3': '\u0034\u6708',
+ '\u32C4': '\u0035\u6708',
+ '\u32C5': '\u0036\u6708',
+ '\u32C6': '\u0037\u6708',
+ '\u32C7': '\u0038\u6708',
+ '\u32C8': '\u0039\u6708',
+ '\u32C9': '\u0031\u0030\u6708',
+ '\u32CA': '\u0031\u0031\u6708',
+ '\u32CB': '\u0031\u0032\u6708',
+ '\u3358': '\u0030\u70B9',
+ '\u3359': '\u0031\u70B9',
+ '\u335A': '\u0032\u70B9',
+ '\u335B': '\u0033\u70B9',
+ '\u335C': '\u0034\u70B9',
+ '\u335D': '\u0035\u70B9',
+ '\u335E': '\u0036\u70B9',
+ '\u335F': '\u0037\u70B9',
+ '\u3360': '\u0038\u70B9',
+ '\u3361': '\u0039\u70B9',
+ '\u3362': '\u0031\u0030\u70B9',
+ '\u3363': '\u0031\u0031\u70B9',
+ '\u3364': '\u0031\u0032\u70B9',
+ '\u3365': '\u0031\u0033\u70B9',
+ '\u3366': '\u0031\u0034\u70B9',
+ '\u3367': '\u0031\u0035\u70B9',
+ '\u3368': '\u0031\u0036\u70B9',
+ '\u3369': '\u0031\u0037\u70B9',
+ '\u336A': '\u0031\u0038\u70B9',
+ '\u336B': '\u0031\u0039\u70B9',
+ '\u336C': '\u0032\u0030\u70B9',
+ '\u336D': '\u0032\u0031\u70B9',
+ '\u336E': '\u0032\u0032\u70B9',
+ '\u336F': '\u0032\u0033\u70B9',
+ '\u3370': '\u0032\u0034\u70B9',
+ '\u33E0': '\u0031\u65E5',
+ '\u33E1': '\u0032\u65E5',
+ '\u33E2': '\u0033\u65E5',
+ '\u33E3': '\u0034\u65E5',
+ '\u33E4': '\u0035\u65E5',
+ '\u33E5': '\u0036\u65E5',
+ '\u33E6': '\u0037\u65E5',
+ '\u33E7': '\u0038\u65E5',
+ '\u33E8': '\u0039\u65E5',
+ '\u33E9': '\u0031\u0030\u65E5',
+ '\u33EA': '\u0031\u0031\u65E5',
+ '\u33EB': '\u0031\u0032\u65E5',
+ '\u33EC': '\u0031\u0033\u65E5',
+ '\u33ED': '\u0031\u0034\u65E5',
+ '\u33EE': '\u0031\u0035\u65E5',
+ '\u33EF': '\u0031\u0036\u65E5',
+ '\u33F0': '\u0031\u0037\u65E5',
+ '\u33F1': '\u0031\u0038\u65E5',
+ '\u33F2': '\u0031\u0039\u65E5',
+ '\u33F3': '\u0032\u0030\u65E5',
+ '\u33F4': '\u0032\u0031\u65E5',
+ '\u33F5': '\u0032\u0032\u65E5',
+ '\u33F6': '\u0032\u0033\u65E5',
+ '\u33F7': '\u0032\u0034\u65E5',
+ '\u33F8': '\u0032\u0035\u65E5',
+ '\u33F9': '\u0032\u0036\u65E5',
+ '\u33FA': '\u0032\u0037\u65E5',
+ '\u33FB': '\u0032\u0038\u65E5',
+ '\u33FC': '\u0032\u0039\u65E5',
+ '\u33FD': '\u0033\u0030\u65E5',
+ '\u33FE': '\u0033\u0031\u65E5',
+ '\uFB00': '\u0066\u0066',
+ '\uFB01': '\u0066\u0069',
+ '\uFB02': '\u0066\u006C',
+ '\uFB03': '\u0066\u0066\u0069',
+ '\uFB04': '\u0066\u0066\u006C',
+ '\uFB05': '\u017F\u0074',
+ '\uFB06': '\u0073\u0074',
+ '\uFB13': '\u0574\u0576',
+ '\uFB14': '\u0574\u0565',
+ '\uFB15': '\u0574\u056B',
+ '\uFB16': '\u057E\u0576',
+ '\uFB17': '\u0574\u056D',
+ '\uFB4F': '\u05D0\u05DC',
+ '\uFE49': '\u203E',
+ '\uFE4A': '\u203E',
+ '\uFE4B': '\u203E',
+ '\uFE4C': '\u203E',
+ '\uFE4D': '\u005F',
+ '\uFE4E': '\u005F',
+ '\uFE4F': '\u005F'
+};
+
+function fontCharsToUnicode(charCodes, fontProperties) {
+ var toUnicode = fontProperties.toUnicode;
+ var composite = fontProperties.composite;
+ var encoding, differences, cidToUnicode;
+ var result = '';
+ if (composite) {
+ cidToUnicode = fontProperties.cidToUnicode;
+ for (var i = 0, ii = charCodes.length; i < ii; i += 2) {
+ var charCode = (charCodes.charCodeAt(i) << 8) |
+ charCodes.charCodeAt(i + 1);
+ if (toUnicode && charCode in toUnicode) {
+ var unicode = toUnicode[charCode];
+ result += typeof unicode !== 'number' ? unicode :
+ String.fromCharCode(unicode);
+ continue;
+ }
+ result += String.fromCharCode(!cidToUnicode ? charCode :
+ cidToUnicode[charCode] || charCode);
+ }
+ } else {
+ differences = fontProperties.differences;
+ encoding = fontProperties.baseEncoding;
+ for (var i = 0, ii = charCodes.length; i < ii; i++) {
+ var charCode = charCodes.charCodeAt(i);
+ var unicode;
+ if (toUnicode && charCode in toUnicode) {
+ var unicode = toUnicode[charCode];
+ result += typeof unicode !== 'number' ? unicode :
+ String.fromCharCode(unicode);
+ continue;
+ }
+
+ var glyphName = charCode in differences ? differences[charCode] :
+ encoding[charCode];
+ if (glyphName in GlyphsUnicode) {
+ result += String.fromCharCode(GlyphsUnicode[glyphName]);
+ continue;
+ }
+ result += String.fromCharCode(charCode);
+ }
+ }
+ // normalizing the unicode characters
+ for (var i = 0, ii = result.length; i < ii; i++) {
+ if (!(result[i] in NormalizedUnicodes))
+ continue;
+ result = result.substring(0, i) + NormalizedUnicodes[result[i]] +
+ result.substring(i + 1);
+ ii = result.length;
+ }
+ return result;
+}
+
/**
* 'Font' is the class the outside world should use, it encapsulate all the font
* decoding logics whatever type it is (assuming the font type is supported).
@@ -14148,7 +15518,6 @@ var Font = (function FontClosure() {
this.name = name;
this.coded = properties.coded;
this.charProcOperatorList = properties.charProcOperatorList;
- this.resources = properties.resources;
this.sizes = [];
var names = name.split('+');
@@ -14172,6 +15541,7 @@ var Font = (function FontClosure() {
this.widths = properties.widths;
this.defaultWidth = properties.defaultWidth;
this.composite = properties.composite;
+ this.wideChars = properties.wideChars;
this.hasEncoding = properties.hasEncoding;
this.fontMatrix = properties.fontMatrix;
@@ -15109,6 +16479,16 @@ var Font = (function FontClosure() {
properties.glyphNames = glyphNames;
}
+ function isOS2Valid(os2Table) {
+ var data = os2Table.data;
+ // usWinAscent == 0 makes font unreadable by windows
+ var usWinAscent = (data[74] << 8) | data[75];
+ if (usWinAscent == 0)
+ return false;
+
+ return true;
+ }
+
// Check that required tables are present
var requiredTables = ['OS/2', 'cmap', 'head', 'hhea',
'hmtx', 'maxp', 'name', 'post'];
@@ -15116,7 +16496,7 @@ var Font = (function FontClosure() {
var header = readOpenTypeHeader(font);
var numTables = header.numTables;
- var cmap, post, maxp, hhea, hmtx, vhea, vmtx, head, loca, glyf;
+ var cmap, post, maxp, hhea, hmtx, vhea, vmtx, head, loca, glyf, os2;
var tables = [];
for (var i = 0; i < numTables; i++) {
var table = readTableEntry(font);
@@ -15134,6 +16514,8 @@ var Font = (function FontClosure() {
hmtx = table;
else if (table.tag == 'head')
head = table;
+ else if (table.tag == 'OS/2')
+ os2 = table;
requiredTables.splice(index, 1);
} else {
@@ -15149,7 +16531,7 @@ var Font = (function FontClosure() {
tables.push(table);
}
- var numTables = header.numTables + requiredTables.length;
+ var numTables = tables.length + requiredTables.length;
// header and new offsets. Table entry information is appended to the
// end of file. The virtualOffset represents where to put the actual
@@ -15163,21 +16545,10 @@ var Font = (function FontClosure() {
// of missing tables
createOpenTypeHeader(header.version, ttf, numTables);
- if (requiredTables.indexOf('OS/2') != -1) {
- // extract some more font properties from the OpenType head and
- // hhea tables; yMin and descent value are always negative
- var override = {
- unitsPerEm: int16([head.data[18], head.data[19]]),
- yMax: int16([head.data[42], head.data[43]]),
- yMin: int16([head.data[38], head.data[39]]) - 0x10000,
- ascent: int16([hhea.data[4], hhea.data[5]]),
- descent: int16([hhea.data[6], hhea.data[7]]) - 0x10000
- };
-
- tables.push({
- tag: 'OS/2',
- data: stringToArray(createOS2Table(properties, null, override))
- });
+ // Invalid OS/2 can break the font for the Windows
+ if (os2 && !isOS2Valid(os2)) {
+ tables.splice(tables.indexOf(os2), 1);
+ os2 = null;
}
// Ensure the [h/v]mtx tables contains the advance width and
@@ -15357,9 +16728,9 @@ var Font = (function FontClosure() {
this.isSymbolicFont = false;
}
- // heuristics: if removed more than 2 glyphs encoding WinAnsiEncoding
- // does not set properly
- if (glyphsRemoved > 2) {
+ // heuristics: if removed more than 10 glyphs encoding WinAnsiEncoding
+ // does not set properly (broken PDFs have about 100 removed glyphs)
+ if (glyphsRemoved > 10) {
warn('Switching TrueType encoding to MacRomanEncoding for ' +
this.name + ' font');
encoding = Encodings.MacRomanEncoding;
@@ -15458,6 +16829,23 @@ var Font = (function FontClosure() {
}
this.unicodeIsEnabled = unicodeIsEnabled;
+ if (!os2) {
+ // extract some more font properties from the OpenType head and
+ // hhea tables; yMin and descent value are always negative
+ var override = {
+ unitsPerEm: int16([head.data[18], head.data[19]]),
+ yMax: int16([head.data[42], head.data[43]]),
+ yMin: int16([head.data[38], head.data[39]]) - 0x10000,
+ ascent: int16([hhea.data[4], hhea.data[5]]),
+ descent: int16([hhea.data[6], hhea.data[7]]) - 0x10000
+ };
+
+ tables.push({
+ tag: 'OS/2',
+ data: stringToArray(createOS2Table(properties, glyphs, override))
+ });
+ }
+
// Rewrite the 'post' table if needed
if (requiredTables.indexOf('post') != -1) {
tables.push({
@@ -15842,6 +17230,7 @@ var Font = (function FontClosure() {
}
// MacRoman encoding address by re-encoding the cmap table
+
fontCharCode = glyphName in this.glyphNameMap ?
this.glyphNameMap[glyphName] : GlyphsUnicode[glyphName];
break;
@@ -15885,7 +17274,7 @@ var Font = (function FontClosure() {
glyphs = [];
- if (this.composite) {
+ if (this.wideChars) {
// composite fonts have multi-byte strings convert the string from
// single-byte to multi-byte
// XXX assuming CIDFonts are two-byte - later need to extract the
@@ -16841,7 +18230,7 @@ var CFFFont = (function CFFFontClosure() {
this.properties = properties;
var parser = new CFFParser(file, properties);
- var cff = parser.parse();
+ var cff = parser.parse(true);
var compiler = new CFFCompiler(cff);
this.readExtra(cff);
try {
@@ -16932,7 +18321,7 @@ var CFFParser = (function CFFParserClosure() {
this.properties = properties;
}
CFFParser.prototype = {
- parse: function CFFParser_parse() {
+ parse: function CFFParser_parse(normalizeCIDData) {
var properties = this.properties;
var cff = new CFF();
this.cff = cff;
@@ -16987,6 +18376,21 @@ var CFFParser = (function CFFParserClosure() {
cff.charset = charset;
cff.encoding = encoding;
+ if (!cff.isCIDFont || !normalizeCIDData)
+ return cff;
+
+ // DirectWrite does not like CID fonts data. Trying to convert/flatten
+ // the font data and remove CID properties.
+ if (cff.fdArray.length !== 1)
+ error('Unable to normalize CID font in CFF data');
+
+ var fontDict = cff.fdArray[0];
+ fontDict.setByKey(17, topDict.getByName('CharStrings'));
+ cff.topDict = fontDict;
+ cff.isCIDFont = false;
+ delete cff.fdArray;
+ delete cff.fdSelect;
+
return cff;
},
parseHeader: function CFFParser_parseHeader() {
@@ -16997,7 +18401,7 @@ var CFFParser = (function CFFParserClosure() {
++offset;
if (offset != 0) {
- warn('cff data is shifted');
+ info('cff data is shifted');
bytes = bytes.subarray(offset);
this.bytes = bytes;
}
@@ -17585,9 +18989,9 @@ var CFFPrivateDict = (function CFFPrivateDictClosure() {
[[12, 17], 'LanguageGroup', 'num', 0],
[[12, 18], 'ExpansionFactor', 'num', 0.06],
[[12, 19], 'initialRandomSeed', 'num', 0],
- [19, 'Subrs', 'offset', null],
[20, 'defaultWidthX', 'num', 0],
- [21, 'nominalWidthX', 'num', 0]
+ [21, 'nominalWidthX', 'num', 0],
+ [19, 'Subrs', 'offset', null]
];
var tables = null;
function CFFPrivateDict(strings) {
@@ -18045,6 +19449,7 @@ var CFFCompiler = (function CFFCompilerClosure() {
return CFFCompiler;
})();
+
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
@@ -22257,6 +23662,7 @@ var GlyphsUnicode = {
'.notdef': 0x0000
};
+
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
@@ -22274,7 +23680,7 @@ var PDFImage = (function PDFImageClosure() {
var colorSpace = dict.get('ColorSpace', 'CS');
colorSpace = ColorSpace.parse(colorSpace, xref, res);
var numComps = colorSpace.numComps;
- handler.send('jpeg_decode', [image.getIR(), numComps], function(message) {
+ handler.send('JpegDecode', [image.getIR(), numComps], function(message) {
var data = message.data;
var stream = new Stream(data, 0, data.length, image.dict);
promise.resolve(stream);
@@ -22632,6 +24038,7 @@ function loadJpegStream(id, imageData, objs) {
img.src = 'data:image/jpeg;base64,' + window.btoa(imageData);
}
+
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
@@ -25579,6 +26986,7 @@ var Metrics = {
}
};
+
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
@@ -25830,9 +27238,12 @@ var Parser = (function ParserClosure() {
if (name == 'CCITTFaxDecode' || name == 'CCF') {
return new CCITTFaxStream(stream, params);
}
- if (name == 'RunLengthDecode') {
+ if (name == 'RunLengthDecode' || name == 'RL') {
return new RunLengthStream(stream);
}
+ if (name == 'JBIG2Decode') {
+ error('JBIG2 image format is not currently supprted.');
+ }
warn('filter "' + name + '" not supported yet');
return stream;
}
@@ -25842,8 +27253,16 @@ var Parser = (function ParserClosure() {
})();
var Lexer = (function LexerClosure() {
- function Lexer(stream) {
+ function Lexer(stream, knownCommands) {
this.stream = stream;
+ // The PDFs might have "glued" commands with other commands, operands or
+ // literals, e.g. "q1". The knownCommands is a dictionary of the valid
+ // commands and their prefixes. The prefixes are built the following way:
+ // if there a command that is a prefix of the other valid command or
+ // literal (e.g. 'f' and 'false') the following prefixes must be included,
+ // 'fa', 'fal', 'fals'. The prefixes are not needed, if the command has no
+ // other commands or literals as a prefix. The knowCommands is optional.
+ this.knownCommands = knownCommands;
}
Lexer.isSpace = function Lexer_isSpace(ch) {
@@ -26107,12 +27526,18 @@ var Lexer = (function LexerClosure() {
// command
var str = ch;
+ var knownCommands = this.knownCommands;
+ var knownCommandFound = knownCommands && (str in knownCommands);
while (!!(ch = stream.lookChar()) && !specialChars[ch.charCodeAt(0)]) {
+ // stop if known command is found and next character does not make
+ // the str a command
+ if (knownCommandFound && !((str + ch) in knownCommands))
+ break;
stream.skip();
if (str.length == 128)
error('Command token too long: ' + str.length);
-
str += ch;
+ knownCommandFound = knownCommands && (str in knownCommands);
}
if (str == 'true')
return true;
@@ -26218,6 +27643,7 @@ var Linearization = (function LinearizationClosure() {
return Linearization;
})();
+
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
@@ -26330,7 +27756,7 @@ Shadings.RadialAxial = (function RadialAxialClosure() {
var r1 = raw[6];
return {
type: 'Pattern',
- getPattern: function(ctx) {
+ getPattern: function RadialAxial_getPattern(ctx) {
var curMatrix = ctx.mozCurrentTransform;
if (curMatrix) {
var userMatrix = ctx.mozCurrentTransformInverse;
@@ -26521,6 +27947,7 @@ var TilingPattern = (function TilingPatternClosure() {
return TilingPattern;
})();
+
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
@@ -28210,7 +29637,7 @@ var CCITTFaxStream = (function CCITTFaxStreamClosure() {
if (a1 > codingLine[codingPos]) {
if (a1 > this.columns) {
- warn('row is wrong length');
+ info('row is wrong length');
this.err = true;
a1 = this.columns;
}
@@ -28230,7 +29657,7 @@ var CCITTFaxStream = (function CCITTFaxStreamClosure() {
if (a1 > codingLine[codingPos]) {
if (a1 > this.columns) {
- warn('row is wrong length');
+ info('row is wrong length');
this.err = true;
a1 = this.columns;
}
@@ -28240,7 +29667,7 @@ var CCITTFaxStream = (function CCITTFaxStreamClosure() {
codingLine[codingPos] = a1;
} else if (a1 < codingLine[codingPos]) {
if (a1 < 0) {
- warn('invalid code');
+ info('invalid code');
this.err = true;
a1 = 0;
}
@@ -28402,7 +29829,7 @@ var CCITTFaxStream = (function CCITTFaxStreamClosure() {
this.eof = true;
break;
default:
- warn('bad 2d code');
+ info('bad 2d code');
this.addPixels(columns, 0);
this.err = true;
}
@@ -28465,7 +29892,7 @@ var CCITTFaxStream = (function CCITTFaxStreamClosure() {
for (var i = 0; i < 4; ++i) {
code1 = this.lookBits(12);
if (code1 != 1)
- warn('bad rtc code: ' + code1);
+ info('bad rtc code: ' + code1);
this.eatBits(12);
if (this.encoding > 0) {
this.lookBits(1);
@@ -28588,7 +30015,7 @@ var CCITTFaxStream = (function CCITTFaxStreamClosure() {
if (result[0] && result[2])
return result[1];
}
- warn('Bad two dim code');
+ info('Bad two dim code');
return EOF;
};
@@ -28621,7 +30048,7 @@ var CCITTFaxStream = (function CCITTFaxStreamClosure() {
if (result[0])
return result[1];
}
- warn('bad white code');
+ info('bad white code');
this.eatBits(1);
return 1;
};
@@ -28658,7 +30085,7 @@ var CCITTFaxStream = (function CCITTFaxStreamClosure() {
if (result[0])
return result[1];
}
- warn('bad black code');
+ info('bad black code');
this.eatBits(1);
return 1;
};
@@ -28815,6 +30242,7 @@ var LZWStream = (function LZWStreamClosure() {
return LZWStream;
})();
+
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
@@ -28828,10 +30256,13 @@ function MessageHandler(name, comObj) {
var ah = this.actionHandler = {};
ah['console_log'] = [function ahConsoleLog(data) {
- console.log.apply(console, data);
+ console.log.apply(console, data);
}];
ah['console_error'] = [function ahConsoleError(data) {
- console.error.apply(console, data);
+ console.error.apply(console, data);
+ }];
+ ah['_warn'] = [function ah_Warn(data) {
+ warn(data);
}];
comObj.onmessage = function messageHandlerComObjOnMessage(event) {
@@ -28902,15 +30333,68 @@ var WorkerMessageHandler = {
handler.send('test', data instanceof Uint8Array);
});
- handler.on('doc', function wphSetupDoc(data) {
+ handler.on('GetDocRequest', function wphSetupDoc(data) {
// Create only the model of the PDFDoc, which is enough for
// processing the content of the pdf.
- pdfModel = new PDFDocModel(new Stream(data));
+ var pdfData = data.data;
+ var pdfPassword = data.params.password;
+ try {
+ pdfModel = new PDFDocument(new Stream(pdfData), pdfPassword);
+ } catch (e) {
+ if (e instanceof PasswordException) {
+ if (e.code === 'needpassword') {
+ handler.send('NeedPassword', {
+ exception: e
+ });
+ } else if (e.code === 'incorrectpassword') {
+ handler.send('IncorrectPassword', {
+ exception: e
+ });
+ }
+
+ return;
+ } else {
+ throw e;
+ }
+ }
+ var doc = {
+ numPages: pdfModel.numPages,
+ fingerprint: pdfModel.getFingerprint(),
+ destinations: pdfModel.catalog.destinations,
+ outline: pdfModel.catalog.documentOutline,
+ info: pdfModel.getDocumentInfo(),
+ metadata: pdfModel.catalog.metadata,
+ encrypted: !!pdfModel.xref.encrypt
+ };
+ handler.send('GetDoc', {pdfInfo: doc});
});
- handler.on('page_request', function wphSetupPageRequest(pageNum) {
- pageNum = parseInt(pageNum);
+ handler.on('GetPageRequest', function wphSetupGetPage(data) {
+ var pageNumber = data.pageIndex + 1;
+ var pdfPage = pdfModel.getPage(pageNumber);
+ var page = {
+ pageIndex: data.pageIndex,
+ rotate: pdfPage.rotate,
+ ref: pdfPage.ref,
+ view: pdfPage.view
+ };
+ handler.send('GetPage', {pageInfo: page});
+ });
+
+ handler.on('GetData', function wphSetupGetData(data, promise) {
+ promise.resolve(pdfModel.stream.bytes);
+ });
+
+ handler.on('GetAnnotationsRequest', function wphSetupGetAnnotations(data) {
+ var pdfPage = pdfModel.getPage(data.pageIndex + 1);
+ handler.send('GetAnnotations', {
+ pageIndex: data.pageIndex,
+ annotations: pdfPage.getAnnotations()
+ });
+ });
+ handler.on('RenderPageRequest', function wphSetupRenderPage(data) {
+ var pageNum = data.pageIndex + 1;
// The following code does quite the same as
// Page.prototype.startRendering, but stops at one point and sends the
@@ -28947,7 +30431,7 @@ var WorkerMessageHandler = {
};
}
- handler.send('page_error', {
+ handler.send('PageError', {
pageNum: pageNum,
error: e
});
@@ -28965,13 +30449,30 @@ var WorkerMessageHandler = {
fonts[dep] = true;
}
}
-
- handler.send('page', {
- pageNum: pageNum,
+ handler.send('RenderPage', {
+ pageIndex: data.pageIndex,
operatorList: operatorList,
depFonts: Object.keys(fonts)
});
}, this);
+
+ handler.on('GetTextContent', function wphExtractText(data, promise) {
+ var pageNum = data.pageIndex + 1;
+ var start = Date.now();
+
+ var textContent = '';
+ try {
+ var page = pdfModel.getPage(pageNum);
+ textContent = page.extractTextContent();
+ promise.resolve(textContent);
+ } catch (e) {
+ // Skip errored pages
+ promise.reject(e);
+ }
+
+ console.log('text indexing: page=%d - time=%dms',
+ pageNum, Date.now() - start);
+ });
}
};
@@ -29012,10 +30513,22 @@ var workerConsole = {
if (typeof window === 'undefined') {
globalScope.console = workerConsole;
+ // Add a logger so we can pass warnings on to the main thread, errors will
+ // throw an exception which will be forwarded on automatically.
+ PDFJS.LogManager.addLogger({
+ warn: function(msg) {
+ postMessage({
+ action: '_warn',
+ data: msg
+ });
+ }
+ });
+
var handler = new MessageHandler('worker_processor', this);
WorkerMessageHandler.setup(handler);
}
+
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
@@ -29655,7 +31168,10 @@ var JpegImage = (function jpegImage() {
tableData[z] = data[offset++];
}
} else if ((quantizationTableSpec >> 4) === 1) { //16 bit
- tableData[j] = readUint16();
+ for (j = 0; j < 64; j++) {
+ var z = dctZigZag[j];
+ tableData[z] = readUint16();
+ }
} else
throw "DQT: invalid table spec";
quantizationTables[quantizationTableSpec & 15] = tableData;
@@ -29670,7 +31186,8 @@ var JpegImage = (function jpegImage() {
frame.precision = data[offset++];
frame.scanLines = readUint16();
frame.samplesPerLine = readUint16();
- frame.components = [];
+ frame.components = {};
+ frame.componentsOrder = [];
var componentsCount = data[offset++], componentId;
var maxH = 0, maxV = 0;
for (i = 0; i < componentsCount; i++) {
@@ -29678,6 +31195,7 @@ var JpegImage = (function jpegImage() {
var h = data[offset + 1] >> 4;
var v = data[offset + 1] & 15;
var qId = data[offset + 2];
+ frame.componentsOrder.push(componentId);
frame.components[componentId] = {
h: h,
v: v,
@@ -29746,14 +31264,13 @@ var JpegImage = (function jpegImage() {
this.jfif = jfif;
this.adobe = adobe;
this.components = [];
- for (var id in frame.components) {
- if (frame.components.hasOwnProperty(id)) {
- this.components.push({
- lines: buildComponentData(frame, frame.components[id]),
- scaleX: frame.components[id].h / frame.maxH,
- scaleY: frame.components[id].v / frame.maxV
- });
- }
+ for (var i = 0; i < frame.componentsOrder.length; i++) {
+ var component = frame.components[frame.componentsOrder[i]];
+ this.components.push({
+ lines: buildComponentData(frame, component),
+ scaleX: component.h / frame.maxH,
+ scaleY: component.v / frame.maxV
+ });
}
},
getData: function getData(width, height) {
@@ -29926,7 +31443,8 @@ var JpegImage = (function jpegImage() {
};
return constructor;
-})();/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+})();
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
'use strict';
@@ -31788,6 +33306,7 @@ var JpxImage = (function JpxImageClosure() {
return JpxImage;
})();
+
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
@@ -32220,14 +33739,35 @@ var bidi = PDFJS.bidi = (function bidiClosure() {
return bidi;
})();
+
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
'use strict';
var Metadata = PDFJS.Metadata = (function MetadataClosure() {
+ function fixMetadata(meta) {
+ return meta.replace(/>\\376\\377([^<]+)/g, function(all, codes) {
+ var bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g,
+ function(code, d1, d2, d3) {
+ return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1);
+ });
+ var chars = '';
+ for (var i = 0; i < bytes.length; i += 2) {
+ var code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1);
+ chars += code >= 32 && code < 127 && code != 60 && code != 62 &&
+ code != 38 && false ? String.fromCharCode(code) :
+ '&#x' + (0x10000 + code).toString(16).substring(1) + ';';
+ }
+ return '>' + chars;
+ });
+ }
+
function Metadata(meta) {
if (typeof meta === 'string') {
+ // Ghostscript produces invalid metadata
+ meta = fixMetadata(meta);
+
var parser = new DOMParser();
meta = parser.parseFromString(meta, 'application/xml');
} else if (!(meta instanceof Document)) {
diff --git a/apps/files_pdfviewer/js/pdfjs/compatibility.js b/apps/files_pdfviewer/js/pdfjs/compatibility.js
new file mode 100644
index 00000000000..528841bb614
--- /dev/null
+++ b/apps/files_pdfviewer/js/pdfjs/compatibility.js
@@ -0,0 +1,340 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+
+'use strict';
+
+// Checking if the typed arrays are supported
+(function checkTypedArrayCompatibility() {
+ if (typeof Uint8Array !== 'undefined') {
+ // some mobile version might not support Float64Array
+ if (typeof Float64Array === 'undefined')
+ window.Float64Array = Float32Array;
+
+ return;
+ }
+
+ function subarray(start, end) {
+ return new TypedArray(this.slice(start, end));
+ }
+
+ function setArrayOffset(array, offset) {
+ if (arguments.length < 2)
+ offset = 0;
+ for (var i = 0, n = array.length; i < n; ++i, ++offset)
+ this[offset] = array[i] & 0xFF;
+ }
+
+ function TypedArray(arg1) {
+ var result;
+ if (typeof arg1 === 'number') {
+ result = [];
+ for (var i = 0; i < arg1; ++i)
+ result[i] = 0;
+ } else
+ result = arg1.slice(0);
+
+ result.subarray = subarray;
+ result.buffer = result;
+ result.byteLength = result.length;
+ result.set = setArrayOffset;
+
+ if (typeof arg1 === 'object' && arg1.buffer)
+ result.buffer = arg1.buffer;
+
+ return result;
+ }
+
+ window.Uint8Array = TypedArray;
+
+ // we don't need support for set, byteLength for 32-bit array
+ // so we can use the TypedArray as well
+ window.Uint32Array = TypedArray;
+ window.Int32Array = TypedArray;
+ window.Uint16Array = TypedArray;
+ window.Float32Array = TypedArray;
+ window.Float64Array = TypedArray;
+})();
+
+// Object.create() ?
+(function checkObjectCreateCompatibility() {
+ if (typeof Object.create !== 'undefined')
+ return;
+
+ Object.create = function objectCreate(proto) {
+ var constructor = function objectCreateConstructor() {};
+ constructor.prototype = proto;
+ return new constructor();
+ };
+})();
+
+// Object.defineProperty() ?
+(function checkObjectDefinePropertyCompatibility() {
+ if (typeof Object.defineProperty !== 'undefined')
+ return;
+
+ Object.defineProperty = function objectDefineProperty(obj, name, def) {
+ delete obj[name];
+ if ('get' in def)
+ obj.__defineGetter__(name, def['get']);
+ if ('set' in def)
+ obj.__defineSetter__(name, def['set']);
+ if ('value' in def) {
+ obj.__defineSetter__(name, function objectDefinePropertySetter(value) {
+ this.__defineGetter__(name, function objectDefinePropertyGetter() {
+ return value;
+ });
+ return value;
+ });
+ obj[name] = def.value;
+ }
+ };
+})();
+
+// Object.keys() ?
+(function checkObjectKeysCompatibility() {
+ if (typeof Object.keys !== 'undefined')
+ return;
+
+ Object.keys = function objectKeys(obj) {
+ var result = [];
+ for (var i in obj) {
+ if (obj.hasOwnProperty(i))
+ result.push(i);
+ }
+ return result;
+ };
+})();
+
+// No XMLHttpRequest.response ?
+(function checkXMLHttpRequestResponseCompatibility() {
+ var xhrPrototype = XMLHttpRequest.prototype;
+ if ('response' in xhrPrototype ||
+ 'mozResponseArrayBuffer' in xhrPrototype ||
+ 'mozResponse' in xhrPrototype ||
+ 'responseArrayBuffer' in xhrPrototype)
+ return;
+ // IE ?
+ if (typeof VBArray !== 'undefined') {
+ Object.defineProperty(xhrPrototype, 'response', {
+ get: function xmlHttpRequestResponseGet() {
+ return new Uint8Array(new VBArray(this.responseBody).toArray());
+ }
+ });
+ Object.defineProperty(xhrPrototype, 'overrideMimeType', {
+ value: function xmlHttpRequestOverrideMimeType(mimeType) {}
+ });
+ return;
+ }
+
+ // other browsers
+ function responseTypeSetter() {
+ // will be only called to set "arraybuffer"
+ this.overrideMimeType('text/plain; charset=x-user-defined');
+ }
+ if (typeof xhrPrototype.overrideMimeType === 'function') {
+ Object.defineProperty(xhrPrototype, 'responseType',
+ { set: responseTypeSetter });
+ }
+ function responseGetter() {
+ var text = this.responseText;
+ var i, n = text.length;
+ var result = new Uint8Array(n);
+ for (i = 0; i < n; ++i)
+ result[i] = text.charCodeAt(i) & 0xFF;
+ return result;
+ }
+ Object.defineProperty(xhrPrototype, 'response', { get: responseGetter });
+})();
+
+// window.btoa (base64 encode function) ?
+(function checkWindowBtoaCompatibility() {
+ if ('btoa' in window)
+ return;
+
+ var digits =
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+
+ window.btoa = function windowBtoa(chars) {
+ var buffer = '';
+ var i, n;
+ for (i = 0, n = chars.length; i < n; i += 3) {
+ var b1 = chars.charCodeAt(i) & 0xFF;
+ var b2 = chars.charCodeAt(i + 1) & 0xFF;
+ var b3 = chars.charCodeAt(i + 2) & 0xFF;
+ var d1 = b1 >> 2, d2 = ((b1 & 3) << 4) | (b2 >> 4);
+ var d3 = i + 1 < n ? ((b2 & 0xF) << 2) | (b3 >> 6) : 64;
+ var d4 = i + 2 < n ? (b3 & 0x3F) : 64;
+ buffer += (digits.charAt(d1) + digits.charAt(d2) +
+ digits.charAt(d3) + digits.charAt(d4));
+ }
+ return buffer;
+ };
+})();
+
+// Function.prototype.bind ?
+(function checkFunctionPrototypeBindCompatibility() {
+ if (typeof Function.prototype.bind !== 'undefined')
+ return;
+
+ Function.prototype.bind = function functionPrototypeBind(obj) {
+ var fn = this, headArgs = Array.prototype.slice.call(arguments, 1);
+ var bound = function functionPrototypeBindBound() {
+ var args = Array.prototype.concat.apply(headArgs, arguments);
+ return fn.apply(obj, args);
+ };
+ return bound;
+ };
+})();
+
+// IE9 text/html data URI
+(function checkDocumentDocumentModeCompatibility() {
+ if (!('documentMode' in document) || document.documentMode !== 9)
+ return;
+ // overriding the src property
+ var originalSrcDescriptor = Object.getOwnPropertyDescriptor(
+ HTMLIFrameElement.prototype, 'src');
+ Object.defineProperty(HTMLIFrameElement.prototype, 'src', {
+ get: function htmlIFrameElementPrototypeSrcGet() { return this.$src; },
+ set: function htmlIFrameElementPrototypeSrcSet(src) {
+ this.$src = src;
+ if (src.substr(0, 14) != 'data:text/html') {
+ originalSrcDescriptor.set.call(this, src);
+ return;
+ }
+ // for text/html, using blank document and then
+ // document's open, write, and close operations
+ originalSrcDescriptor.set.call(this, 'about:blank');
+ setTimeout((function htmlIFrameElementPrototypeSrcOpenWriteClose() {
+ var doc = this.contentDocument;
+ doc.open('text/html');
+ doc.write(src.substr(src.indexOf(',') + 1));
+ doc.close();
+ }).bind(this), 0);
+ },
+ enumerable: true
+ });
+})();
+
+// HTMLElement dataset property
+(function checkDatasetProperty() {
+ var div = document.createElement('div');
+ if ('dataset' in div)
+ return; // dataset property exists
+
+ Object.defineProperty(HTMLElement.prototype, 'dataset', {
+ get: function() {
+ if (this._dataset)
+ return this._dataset;
+
+ var dataset = {};
+ for (var j = 0, jj = this.attributes.length; j < jj; j++) {
+ var attribute = this.attributes[j];
+ if (attribute.name.substring(0, 5) != 'data-')
+ continue;
+ var key = attribute.name.substring(5).replace(/\-([a-z])/g,
+ function(all, ch) { return ch.toUpperCase(); });
+ dataset[key] = attribute.value;
+ }
+
+ Object.defineProperty(this, '_dataset', {
+ value: dataset,
+ writable: false,
+ enumerable: false
+ });
+ return dataset;
+ },
+ enumerable: true
+ });
+})();
+
+// HTMLElement classList property
+(function checkClassListProperty() {
+ var div = document.createElement('div');
+ if ('classList' in div)
+ return; // classList property exists
+
+ function changeList(element, itemName, add, remove) {
+ var s = element.className || '';
+ var list = s.split(/\s+/g);
+ if (list[0] == '') list.shift();
+ var index = list.indexOf(itemName);
+ if (index < 0 && add)
+ list.push(itemName);
+ if (index >= 0 && remove)
+ list.splice(index, 1);
+ element.className = list.join(' ');
+ }
+
+ var classListPrototype = {
+ add: function(name) {
+ changeList(this.element, name, true, false);
+ },
+ remove: function(name) {
+ changeList(this.element, name, false, true);
+ },
+ toggle: function(name) {
+ changeList(this.element, name, true, true);
+ }
+ };
+
+ Object.defineProperty(HTMLElement.prototype, 'classList', {
+ get: function() {
+ if (this._classList)
+ return this._classList;
+
+ var classList = Object.create(classListPrototype, {
+ element: {
+ value: this,
+ writable: false,
+ enumerable: true
+ }
+ });
+ Object.defineProperty(this, '_classList', {
+ value: classList,
+ writable: false,
+ enumerable: false
+ });
+ return classList;
+ },
+ enumerable: true
+ });
+})();
+
+// Check console compatability
+(function checkConsoleCompatibility() {
+ if (typeof console == 'undefined') {
+ console = {log: function() {}};
+ }
+})();
+
+// Check onclick compatibility in Opera
+(function checkOnClickCompatibility() {
+ // workaround for reported Opera bug DSK-354448:
+ // onclick fires on disabled buttons with opaque content
+ function ignoreIfTargetDisabled(event) {
+ if (isDisabled(event.target)) {
+ event.stopPropagation();
+ }
+ }
+ function isDisabled(node) {
+ return node.disabled || (node.parentNode && isDisabled(node.parentNode));
+ }
+ if (navigator.userAgent.indexOf('Opera') != -1) {
+ // use browser detection since we cannot feature-check this bug
+ document.addEventListener('click', ignoreIfTargetDisabled, true);
+ }
+})();
+
+// Checks if navigator.language is supported
+(function checkNavigatorLanguage() {
+ if ('language' in navigator)
+ return;
+ Object.defineProperty(navigator, 'language', {
+ get: function navigatorLanguage() {
+ var language = navigator.userLanguage || 'en-US';
+ return language.substring(0, 2).toLowerCase() +
+ language.substring(2).toUpperCase();
+ },
+ enumerable: true
+ });
+})();
diff --git a/apps/files_pdfviewer/js/pdfjs/update.sh b/apps/files_pdfviewer/js/pdfjs/update.sh
index 599f6338602..df100e780ba 100755
--- a/apps/files_pdfviewer/js/pdfjs/update.sh
+++ b/apps/files_pdfviewer/js/pdfjs/update.sh
@@ -1,3 +1,6 @@
cd build
rm pdf.js
wget http://mozilla.github.com/pdf.js/build/pdf.js
+wget http://mozilla.github.com/pdf.js/web/compatibility.js
+wget http://mozilla.github.com/pdf.js/web/viewer.js
+
diff --git a/apps/files_pdfviewer/js/pdfjs/viewer.js b/apps/files_pdfviewer/js/pdfjs/viewer.js
new file mode 100644
index 00000000000..90dd1eef020
--- /dev/null
+++ b/apps/files_pdfviewer/js/pdfjs/viewer.js
@@ -0,0 +1,1873 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+
+'use strict';
+
+var kDefaultURL = 'compressed.tracemonkey-pldi-09.pdf';
+var kDefaultScale = 'auto';
+var kDefaultScaleDelta = 1.1;
+var kUnknownScale = 0;
+var kCacheSize = 20;
+var kCssUnits = 96.0 / 72.0;
+var kScrollbarPadding = 40;
+var kMinScale = 0.25;
+var kMaxScale = 4.0;
+var kImageDirectory = './images/';
+var kSettingsMemory = 20;
+
+var mozL10n = document.mozL10n || document.webL10n;
+
+function getFileName(url) {
+ var anchor = url.indexOf('#');
+ var query = url.indexOf('?');
+ var end = Math.min(
+ anchor > 0 ? anchor : url.length,
+ query > 0 ? query : url.length);
+ return url.substring(url.lastIndexOf('/', end) + 1, end);
+}
+
+var Cache = function cacheCache(size) {
+ var data = [];
+ this.push = function cachePush(view) {
+ var i = data.indexOf(view);
+ if (i >= 0)
+ data.splice(i);
+ data.push(view);
+ if (data.length > size)
+ data.shift().destroy();
+ };
+};
+
+var ProgressBar = (function ProgressBarClosure() {
+
+ function clamp(v, min, max) {
+ return Math.min(Math.max(v, min), max);
+ }
+
+ function ProgressBar(id, opts) {
+
+ // Fetch the sub-elements for later
+ this.div = document.querySelector(id + ' .progress');
+
+ // Get options, with sensible defaults
+ this.height = opts.height || 100;
+ this.width = opts.width || 100;
+ this.units = opts.units || '%';
+ this.percent = opts.percent || 0;
+
+ // Initialize heights
+ this.div.style.height = this.height + this.units;
+ }
+
+ ProgressBar.prototype = {
+
+ updateBar: function ProgressBar_updateBar() {
+ var progressSize = this.width * this._percent / 100;
+
+ if (this._percent > 95)
+ this.div.classList.add('full');
+
+ this.div.style.width = progressSize + this.units;
+ },
+
+ get percent() {
+ return this._percent;
+ },
+
+ set percent(val) {
+ this._percent = clamp(val, 0, 100);
+ this.updateBar();
+ }
+ };
+
+ return ProgressBar;
+})();
+
+var RenderingQueue = (function RenderingQueueClosure() {
+ function RenderingQueue() {
+ this.items = [];
+ }
+
+ RenderingQueue.prototype = {
+ enqueueDraw: function RenderingQueueEnqueueDraw(item) {
+ if (!item.drawingRequired())
+ return; // as no redraw required, no need for queueing.
+
+ this.items.push(item);
+ if (this.items.length > 1)
+ return; // not first item
+
+ item.draw(this.continueExecution.bind(this));
+ },
+ continueExecution: function RenderingQueueContinueExecution() {
+ var item = this.items.shift();
+
+ if (this.items.length == 0)
+ return; // queue is empty
+
+ item = this.items[0];
+ item.draw(this.continueExecution.bind(this));
+ }
+ };
+
+ return RenderingQueue;
+})();
+
+var FirefoxCom = (function FirefoxComClosure() {
+ return {
+ /**
+ * Creates an event that the extension is listening for and will
+ * synchronously respond to.
+ * NOTE: It is reccomended to use request() instead since one day we may not
+ * be able to synchronously reply.
+ * @param {String} action The action to trigger.
+ * @param {String} data Optional data to send.
+ * @return {*} The response.
+ */
+ requestSync: function(action, data) {
+ var request = document.createTextNode('');
+ request.setUserData('action', action, null);
+ request.setUserData('data', data, null);
+ request.setUserData('sync', true, null);
+ document.documentElement.appendChild(request);
+
+ var sender = document.createEvent('Events');
+ sender.initEvent('pdf.js.message', true, false);
+ request.dispatchEvent(sender);
+ var response = request.getUserData('response');
+ document.documentElement.removeChild(request);
+ return response;
+ },
+ /**
+ * Creates an event that the extension is listening for and will
+ * asynchronously respond by calling the callback.
+ * @param {String} action The action to trigger.
+ * @param {String} data Optional data to send.
+ * @param {Function} callback Optional response callback that will be called
+ * with one data argument.
+ */
+ request: function(action, data, callback) {
+ var request = document.createTextNode('');
+ request.setUserData('action', action, null);
+ request.setUserData('data', data, null);
+ request.setUserData('sync', false, null);
+ if (callback) {
+ request.setUserData('callback', callback, null);
+
+ document.addEventListener('pdf.js.response', function listener(event) {
+ var node = event.target,
+ callback = node.getUserData('callback'),
+ response = node.getUserData('response');
+
+ document.documentElement.removeChild(node);
+
+ document.removeEventListener('pdf.js.response', listener, false);
+ return callback(response);
+ }, false);
+ }
+ document.documentElement.appendChild(request);
+
+ var sender = document.createEvent('HTMLEvents');
+ sender.initEvent('pdf.js.message', true, false);
+ return request.dispatchEvent(sender);
+ }
+ };
+})();
+
+// Settings Manager - This is a utility for saving settings
+// First we see if localStorage is available
+// If not, we use FUEL in FF
+var Settings = (function SettingsClosure() {
+ var isLocalStorageEnabled = (function localStorageEnabledTest() {
+ // Feature test as per http://diveintohtml5.info/storage.html
+ // The additional localStorage call is to get around a FF quirk, see
+ // bug #495747 in bugzilla
+ try {
+ return 'localStorage' in window && window['localStorage'] !== null &&
+ localStorage;
+ } catch (e) {
+ return false;
+ }
+ })();
+
+ var isFirefoxExtension = PDFJS.isFirefoxExtension;
+
+ function Settings(fingerprint) {
+ var database = null;
+ var index;
+ if (isFirefoxExtension)
+ database = FirefoxCom.requestSync('getDatabase', null) || '{}';
+ else if (isLocalStorageEnabled)
+ database = localStorage.getItem('database') || '{}';
+ else
+ return false;
+
+ database = JSON.parse(database);
+ if (!('files' in database))
+ database.files = [];
+ if (database.files.length >= kSettingsMemory)
+ database.files.shift();
+ for (var i = 0, length = database.files.length; i < length; i++) {
+ var branch = database.files[i];
+ if (branch.fingerprint == fingerprint) {
+ index = i;
+ break;
+ }
+ }
+ if (typeof index != 'number')
+ index = database.files.push({fingerprint: fingerprint}) - 1;
+ this.file = database.files[index];
+ this.database = database;
+ }
+
+ Settings.prototype = {
+ set: function settingsSet(name, val) {
+ if (!('file' in this))
+ return false;
+
+ var file = this.file;
+ file[name] = val;
+ var database = JSON.stringify(this.database);
+ if (isFirefoxExtension)
+ FirefoxCom.requestSync('setDatabase', database);
+ else if (isLocalStorageEnabled)
+ localStorage.setItem('database', database);
+ },
+
+ get: function settingsGet(name, defaultValue) {
+ if (!('file' in this))
+ return defaultValue;
+
+ return this.file[name] || defaultValue;
+ }
+ };
+
+ return Settings;
+})();
+
+var cache = new Cache(kCacheSize);
+var renderingQueue = new RenderingQueue();
+var currentPageNumber = 1;
+
+var PDFView = {
+ pages: [],
+ thumbnails: [],
+ currentScale: kUnknownScale,
+ currentScaleValue: null,
+ initialBookmark: document.location.hash.substring(1),
+ startedTextExtraction: false,
+ pageText: [],
+ container: null,
+ initialized: false,
+ fellback: false,
+ pdfDocument: null,
+ // called once when the document is loaded
+ initialize: function pdfViewInitialize() {
+ this.container = document.getElementById('viewer');
+ this.initialized = true;
+ },
+
+ setScale: function pdfViewSetScale(val, resetAutoSettings) {
+ if (val == this.currentScale)
+ return;
+
+ var pages = this.pages;
+ for (var i = 0; i < pages.length; i++)
+ pages[i].update(val * kCssUnits);
+
+ if (this.currentScale != val)
+ this.pages[this.page - 1].scrollIntoView();
+ this.currentScale = val;
+
+ var event = document.createEvent('UIEvents');
+ event.initUIEvent('scalechange', false, false, window, 0);
+ event.scale = val;
+ event.resetAutoSettings = resetAutoSettings;
+ window.dispatchEvent(event);
+ },
+
+ parseScale: function pdfViewParseScale(value, resetAutoSettings) {
+ if ('custom' == value)
+ return;
+
+ var scale = parseFloat(value);
+ this.currentScaleValue = value;
+ if (scale) {
+ this.setScale(scale, true);
+ return;
+ }
+
+ var container = this.container;
+ var currentPage = this.pages[this.page - 1];
+ var pageWidthScale = (container.clientWidth - kScrollbarPadding) /
+ currentPage.width * currentPage.scale / kCssUnits;
+ var pageHeightScale = (container.clientHeight - kScrollbarPadding) /
+ currentPage.height * currentPage.scale / kCssUnits;
+ switch (value) {
+ case 'page-actual':
+ this.setScale(1, resetAutoSettings);
+ break;
+ case 'page-width':
+ this.setScale(pageWidthScale, resetAutoSettings);
+ break;
+ case 'page-height':
+ this.setScale(pageHeightScale, resetAutoSettings);
+ break;
+ case 'page-fit':
+ this.setScale(
+ Math.min(pageWidthScale, pageHeightScale), resetAutoSettings);
+ break;
+ case 'auto':
+ this.setScale(Math.min(1.0, pageWidthScale), resetAutoSettings);
+ break;
+ }
+
+ selectScaleOption(value);
+ },
+
+ zoomIn: function pdfViewZoomIn() {
+ var newScale = (this.currentScale * kDefaultScaleDelta).toFixed(2);
+ newScale = Math.min(kMaxScale, newScale);
+ this.parseScale(newScale, true);
+ },
+
+ zoomOut: function pdfViewZoomOut() {
+ var newScale = (this.currentScale / kDefaultScaleDelta).toFixed(2);
+ newScale = Math.max(kMinScale, newScale);
+ this.parseScale(newScale, true);
+ },
+
+ set page(val) {
+ var pages = this.pages;
+ var input = document.getElementById('pageNumber');
+ if (!(0 < val && val <= pages.length)) {
+ var event = document.createEvent('UIEvents');
+ event.initUIEvent('pagechange', false, false, window, 0);
+ event.pageNumber = this.page;
+ window.dispatchEvent(event);
+ return;
+ }
+
+ pages[val - 1].updateStats();
+ currentPageNumber = val;
+ var event = document.createEvent('UIEvents');
+ event.initUIEvent('pagechange', false, false, window, 0);
+ event.pageNumber = val;
+ window.dispatchEvent(event);
+
+ // checking if the this.page was called from the updateViewarea function:
+ // avoiding the creation of two "set page" method (internal and public)
+ if (updateViewarea.inProgress)
+ return;
+
+ // Avoid scrolling the first page during loading
+ if (this.loading && val == 1)
+ return;
+
+ pages[val - 1].scrollIntoView();
+ },
+
+ get page() {
+ return currentPageNumber;
+ },
+
+ open: function pdfViewOpen(url, scale, password) {
+ var parameters = {password: password};
+ if (typeof url === 'string') { // URL
+ this.url = url;
+ document.title = decodeURIComponent(getFileName(url)) || url;
+ parameters.url = url;
+ } else if (url && 'byteLength' in url) { // ArrayBuffer
+ parameters.data = url;
+ }
+
+// if (!PDFView.loadingBar) {
+// PDFView.loadingBar = new ProgressBar('#loadingBar', {});
+// }
+
+ this.container = document.getElementById('viewer');
+
+ this.pdfDocument = null;
+ var self = this;
+ self.loading = true;
+ PDFJS.getDocument(parameters).then(
+ function getDocumentCallback(pdfDocument) {
+ self.load(pdfDocument, scale);
+ self.loading = false;
+ },
+ function getDocumentError(message, exception) {
+ if (exception.name === 'PasswordException') {
+ if (exception.code === 'needpassword') {
+ var promptString = mozL10n.get('request_password', null,
+ 'PDF is protected by a password:');
+ password = prompt(promptString);
+ if (password && password.length > 0) {
+ return PDFView.open(url, scale, password);
+ }
+ }
+ }
+
+ var loadingIndicator = document.getElementById('loading');
+ loadingIndicator.textContent = mozL10n.get('loading_error_indicator',
+ null, 'Error');
+ var moreInfo = {
+ message: message
+ };
+ self.error(mozL10n.get('loading_error', null,
+ 'An error occurred while loading the PDF.'), moreInfo);
+ self.loading = false;
+ },
+ function getDocumentProgress(progressData) {
+ self.progress(progressData.loaded / progressData.total);
+ }
+ );
+ },
+
+ download: function pdfViewDownload() {
+ function noData() {
+ FirefoxCom.request('download', { originalUrl: url });
+ }
+
+ var url = this.url.split('#')[0];
+ if (PDFJS.isFirefoxExtension) {
+ // Document isn't ready just try to download with the url.
+ if (!this.pdfDocument) {
+ noData();
+ return;
+ }
+ this.pdfDocument.getData().then(
+ function getDataSuccess(data) {
+ var bb = new MozBlobBuilder();
+ bb.append(data.buffer);
+ var blobUrl = window.URL.createObjectURL(
+ bb.getBlob('application/pdf'));
+
+ FirefoxCom.request('download', { blobUrl: blobUrl, originalUrl: url },
+ function response(err) {
+ if (err) {
+ // This error won't really be helpful because it's likely the
+ // fallback won't work either (or is already open).
+ PDFView.error('PDF failed to download.');
+ }
+ window.URL.revokeObjectURL(blobUrl);
+ }
+ );
+ },
+ noData // Error ocurred try downloading with just the url.
+ );
+ } else {
+ url += '#pdfjs.action=download', '_parent';
+ window.open(url, '_parent');
+ }
+ },
+
+ fallback: function pdfViewFallback() {
+ if (!PDFJS.isFirefoxExtension)
+ return;
+ // Only trigger the fallback once so we don't spam the user with messages
+ // for one PDF.
+ if (this.fellback)
+ return;
+ this.fellback = true;
+ var url = this.url.split('#')[0];
+ FirefoxCom.request('fallback', url, function response(download) {
+ if (!download)
+ return;
+ PDFView.download();
+ });
+ },
+
+ navigateTo: function pdfViewNavigateTo(dest) {
+ if (typeof dest === 'string')
+ dest = this.destinations[dest];
+ if (!(dest instanceof Array))
+ return; // invalid destination
+ // dest array looks like that: <page-ref> </XYZ|FitXXX> <args..>
+ var destRef = dest[0];
+ var pageNumber = destRef instanceof Object ?
+ this.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R'] : (destRef + 1);
+ if (pageNumber > this.pages.length)
+ pageNumber = this.pages.length;
+ if (pageNumber) {
+ this.page = pageNumber;
+ var currentPage = this.pages[pageNumber - 1];
+ currentPage.scrollIntoView(dest);
+ }
+ },
+
+ getDestinationHash: function pdfViewGetDestinationHash(dest) {
+ if (typeof dest === 'string')
+ return PDFView.getAnchorUrl('#' + escape(dest));
+ if (dest instanceof Array) {
+ var destRef = dest[0]; // see navigateTo method for dest format
+ var pageNumber = destRef instanceof Object ?
+ this.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R'] :
+ (destRef + 1);
+ if (pageNumber) {
+ var pdfOpenParams = PDFView.getAnchorUrl('#page=' + pageNumber);
+ var destKind = dest[1];
+ if (typeof destKind === 'object' && 'name' in destKind &&
+ destKind.name == 'XYZ') {
+ var scale = (dest[4] || this.currentScale);
+ pdfOpenParams += '&zoom=' + (scale * 100);
+ if (dest[2] || dest[3]) {
+ pdfOpenParams += ',' + (dest[2] || 0) + ',' + (dest[3] || 0);
+ }
+ }
+ return pdfOpenParams;
+ }
+ }
+ return '';
+ },
+
+ /**
+ * For the firefox extension we prefix the full url on anchor links so they
+ * don't come up as resource:// urls and so open in new tab/window works.
+ * @param {String} anchor The anchor hash include the #.
+ */
+ getAnchorUrl: function getAnchorUrl(anchor) {
+ if (PDFJS.isFirefoxExtension)
+ return this.url.split('#')[0] + anchor;
+ return anchor;
+ },
+
+ /**
+ * Show the error box.
+ * @param {String} message A message that is human readable.
+ * @param {Object} moreInfo (optional) Further information about the error
+ * that is more technical. Should have a 'message'
+ * and optionally a 'stack' property.
+ */
+ error: function pdfViewError(message, moreInfo) {
+ var moreInfoText = mozL10n.get('error_build', {build: PDFJS.build},
+ 'PDF.JS Build: {{build}}') + '\n';
+ if (moreInfo) {
+ moreInfoText +=
+ mozL10n.get('error_message', {message: moreInfo.message},
+ 'Message: {{message}}');
+ if (moreInfo.stack) {
+ moreInfoText += '\n' +
+ mozL10n.get('error_stack', {stack: moreInfo.stack},
+ 'Stack: {{stack}}');
+ } else {
+ if (moreInfo.filename) {
+ moreInfoText += '\n' +
+ mozL10n.get('error_file', {file: moreInfo.filename},
+ 'File: {{file}}');
+ }
+ if (moreInfo.lineNumber) {
+ moreInfoText += '\n' +
+ mozL10n.get('error_line', {line: moreInfo.lineNumber},
+ 'Line: {{line}}');
+ }
+ }
+ }
+ if (PDFJS.isFirefoxExtension) {
+ console.error(message + '\n' + moreInfoText);
+ this.fallback();
+ return;
+ }
+ var errorWrapper = document.getElementById('errorWrapper');
+ errorWrapper.removeAttribute('hidden');
+
+ var errorMessage = document.getElementById('errorMessage');
+ errorMessage.textContent = message;
+
+ var closeButton = document.getElementById('errorClose');
+ closeButton.onclick = function() {
+ errorWrapper.setAttribute('hidden', 'true');
+ };
+
+ var errorMoreInfo = document.getElementById('errorMoreInfo');
+ var moreInfoButton = document.getElementById('errorShowMore');
+ var lessInfoButton = document.getElementById('errorShowLess');
+ moreInfoButton.onclick = function() {
+ errorMoreInfo.removeAttribute('hidden');
+ moreInfoButton.setAttribute('hidden', 'true');
+ lessInfoButton.removeAttribute('hidden');
+ };
+ lessInfoButton.onclick = function() {
+ errorMoreInfo.setAttribute('hidden', 'true');
+ moreInfoButton.removeAttribute('hidden');
+ lessInfoButton.setAttribute('hidden', 'true');
+ };
+ moreInfoButton.removeAttribute('hidden');
+ lessInfoButton.setAttribute('hidden', 'true');
+ errorMoreInfo.value = moreInfoText;
+
+ errorMoreInfo.rows = moreInfoText.split('\n').length - 1;
+ },
+
+ progress: function pdfViewProgress(level) {
+ var percent = Math.round(level * 100);
+ var loadingIndicator = document.getElementById('loading');
+ loadingIndicator.textContent = mozL10n.get('loading', {percent: percent},
+ 'Loading... {{percent}}%');
+
+// PDFView.loadingBar.percent = percent;
+ },
+
+ load: function pdfViewLoad(pdfDocument, scale) {
+ function bindOnAfterDraw(pageView, thumbnailView) {
+ // when page is painted, using the image as thumbnail base
+ pageView.onAfterDraw = function pdfViewLoadOnAfterDraw() {
+ thumbnailView.setImage(pageView.canvas);
+ preDraw();
+ };
+ }
+
+ this.pdfDocument = pdfDocument;
+
+// var errorWrapper = document.getElementById('errorWrapper');
+// errorWrapper.setAttribute('hidden', 'true');
+
+ var loadingBox = document.getElementById('loading');
+ loadingBox.setAttribute('hidden', 'true');
+
+// var loadingBox = document.getElementById('loadingBox');
+// loadingBox.setAttribute('hidden', 'true');
+
+// var thumbsView = document.getElementById('thumbnailView');
+// thumbsView.parentNode.scrollTop = 0;
+
+// while (thumbsView.hasChildNodes())
+// thumbsView.removeChild(thumbsView.lastChild);
+
+// if ('_loadingInterval' in thumbsView)
+// clearInterval(thumbsView._loadingInterval);
+
+ var container = document.getElementById('viewer');
+ while (container.hasChildNodes())
+ container.removeChild(container.lastChild);
+
+ var pagesCount = pdfDocument.numPages;
+ var id = pdfDocument.fingerprint;
+ var storedHash = null;
+// document.getElementById('numPages').textContent =
+// mozL10n.get('page_of', {pageCount: pagesCount}, 'of {{pageCount}}');
+ document.getElementById('numPages').innerHTML = pagesCount;
+ document.getElementById('pageNumber').max = pagesCount;
+ PDFView.documentFingerprint = id;
+ var store = PDFView.store = new Settings(id);
+ if (store.get('exists', false)) {
+ var page = store.get('page', '1');
+ var zoom = store.get('zoom', PDFView.currentScale);
+ var left = store.get('scrollLeft', '0');
+ var top = store.get('scrollTop', '0');
+
+ storedHash = 'page=' + page + '&zoom=' + zoom + ',' + left + ',' + top;
+ }
+
+ var pages = this.pages = [];
+ this.pageText = [];
+ this.startedTextExtraction = false;
+ var pagesRefMap = {};
+ var thumbnails = this.thumbnails = [];
+ var pagePromises = [];
+ for (var i = 1; i <= pagesCount; i++)
+ pagePromises.push(pdfDocument.getPage(i));
+ var self = this;
+ var pagesPromise = PDFJS.Promise.all(pagePromises);
+ pagesPromise.then(function(promisedPages) {
+ for (var i = 1; i <= pagesCount; i++) {
+ var page = promisedPages[i - 1];
+ var pageView = new PageView(container, page, i, scale,
+ page.stats, self.navigateTo.bind(self));
+// var thumbnailView = new ThumbnailView(thumbsView, page, i);
+// bindOnAfterDraw(pageView, thumbnailView);
+
+ pages.push(pageView);
+// thumbnails.push(thumbnailView);
+ var pageRef = page.ref;
+ pagesRefMap[pageRef.num + ' ' + pageRef.gen + ' R'] = i;
+ }
+
+ self.pagesRefMap = pagesRefMap;
+ });
+
+ var destinationsPromise = pdfDocument.getDestinations();
+ destinationsPromise.then(function(destinations) {
+ self.destinations = destinations;
+ });
+
+ // outline and initial view depends on destinations and pagesRefMap
+ PDFJS.Promise.all([pagesPromise, destinationsPromise]).then(function() {
+ pdfDocument.getOutline().then(function(outline) {
+ self.outline = new DocumentOutlineView(outline);
+ });
+
+ self.setInitialView(storedHash, scale);
+ });
+
+ pdfDocument.getMetadata().then(function(data) {
+ var info = data.info, metadata = data.metadata;
+ self.documentInfo = info;
+ self.metadata = metadata;
+
+ var pdfTitle;
+ if (metadata) {
+ if (metadata.has('dc:title'))
+ pdfTitle = metadata.get('dc:title');
+ }
+
+ if (!pdfTitle && info && info['Title'])
+ pdfTitle = info['Title'];
+
+ if (pdfTitle)
+ document.title = pdfTitle + ' - ' + document.title;
+ });
+ },
+
+ setInitialView: function pdfViewSetInitialView(storedHash, scale) {
+ // Reset the current scale, as otherwise the page's scale might not get
+ // updated if the zoom level stayed the same.
+ this.currentScale = 0;
+ this.currentScaleValue = null;
+ if (this.initialBookmark) {
+ this.setHash(this.initialBookmark);
+ this.initialBookmark = null;
+ }
+ else if (storedHash)
+ this.setHash(storedHash);
+ else if (scale) {
+ this.parseScale(scale, true);
+ this.page = 1;
+ }
+
+ if (PDFView.currentScale === kUnknownScale) {
+ // Scale was not initialized: invalid bookmark or scale was not specified.
+ // Setting the default one.
+ this.parseScale(kDefaultScale, true);
+ }
+ },
+
+ search: function pdfViewStartSearch() {
+ // Limit this function to run every <SEARCH_TIMEOUT>ms.
+ var SEARCH_TIMEOUT = 250;
+ var lastSeach = this.lastSearch;
+ var now = Date.now();
+ if (lastSeach && (now - lastSeach) < SEARCH_TIMEOUT) {
+ if (!this.searchTimer) {
+ this.searchTimer = setTimeout(function resumeSearch() {
+ PDFView.search();
+ },
+ SEARCH_TIMEOUT - (now - lastSeach)
+ );
+ }
+ return;
+ }
+ this.searchTimer = null;
+ this.lastSearch = now;
+
+ function bindLink(link, pageNumber) {
+ link.href = '#' + pageNumber;
+ link.onclick = function searchBindLink() {
+ PDFView.page = pageNumber;
+ return false;
+ };
+ }
+
+ var searchResults = document.getElementById('searchResults');
+
+ var searchTermsInput = document.getElementById('searchTermsInput');
+ searchResults.removeAttribute('hidden');
+ searchResults.textContent = '';
+
+ var terms = searchTermsInput.value;
+
+ if (!terms)
+ return;
+
+ // simple search: removing spaces and hyphens, then scanning every
+ terms = terms.replace(/\s-/g, '').toLowerCase();
+ var index = PDFView.pageText;
+ var pageFound = false;
+ for (var i = 0, ii = index.length; i < ii; i++) {
+ var pageText = index[i].replace(/\s-/g, '').toLowerCase();
+ var j = pageText.indexOf(terms);
+ if (j < 0)
+ continue;
+
+ var pageNumber = i + 1;
+ var textSample = index[i].substr(j, 50);
+ var link = document.createElement('a');
+ bindLink(link, pageNumber);
+ link.textContent = 'Page ' + pageNumber + ': ' + textSample;
+ searchResults.appendChild(link);
+
+ pageFound = true;
+ }
+ if (!pageFound) {
+ searchResults.textContent = mozL10n.get('search_terms_not_found', null,
+ '(Not found)');
+ }
+ },
+
+ setHash: function pdfViewSetHash(hash) {
+ if (!hash)
+ return;
+
+ if (hash.indexOf('=') >= 0) {
+ var params = PDFView.parseQueryString(hash);
+ // borrowing syntax from "Parameters for Opening PDF Files"
+ if ('nameddest' in params) {
+ PDFView.navigateTo(params.nameddest);
+ return;
+ }
+ if ('page' in params) {
+ var pageNumber = (params.page | 0) || 1;
+ this.page = pageNumber;
+ if ('zoom' in params) {
+ var zoomArgs = params.zoom.split(','); // scale,left,top
+ // building destination array
+
+ // If the zoom value, it has to get divided by 100. If it is a string,
+ // it should stay as it is.
+ var zoomArg = zoomArgs[0];
+ var zoomArgNumber = parseFloat(zoomArg);
+ if (zoomArgNumber)
+ zoomArg = zoomArgNumber / 100;
+
+ var dest = [null, {name: 'XYZ'}, (zoomArgs[1] | 0),
+ (zoomArgs[2] | 0), zoomArg];
+ var currentPage = this.pages[pageNumber - 1];
+ currentPage.scrollIntoView(dest);
+ } else
+ this.page = params.page; // simple page
+ return;
+ }
+ } else if (/^\d+$/.test(hash)) // page number
+ this.page = hash;
+ else // named destination
+ PDFView.navigateTo(unescape(hash));
+ },
+
+ switchSidebarView: function pdfViewSwitchSidebarView(view) {
+ var thumbsView = document.getElementById('thumbnailView');
+ var outlineView = document.getElementById('outlineView');
+ var searchView = document.getElementById('searchView');
+
+ var thumbsButton = document.getElementById('viewThumbnail');
+ var outlineButton = document.getElementById('viewOutline');
+ var searchButton = document.getElementById('viewSearch');
+
+ switch (view) {
+ case 'thumbs':
+ thumbsButton.classList.add('toggled');
+ outlineButton.classList.remove('toggled');
+ searchButton.classList.remove('toggled');
+ thumbsView.classList.remove('hidden');
+ outlineView.classList.add('hidden');
+ searchView.classList.add('hidden');
+
+ updateThumbViewArea();
+ break;
+
+ case 'outline':
+ thumbsButton.classList.remove('toggled');
+ outlineButton.classList.add('toggled');
+ searchButton.classList.remove('toggled');
+ thumbsView.classList.add('hidden');
+ outlineView.classList.remove('hidden');
+ searchView.classList.add('hidden');
+
+ if (outlineButton.getAttribute('disabled'))
+ return;
+ break;
+
+ case 'search':
+ thumbsButton.classList.remove('toggled');
+ outlineButton.classList.remove('toggled');
+ searchButton.classList.add('toggled');
+ thumbsView.classList.add('hidden');
+ outlineView.classList.add('hidden');
+ searchView.classList.remove('hidden');
+
+ var searchTermsInput = document.getElementById('searchTermsInput');
+ searchTermsInput.focus();
+ // Start text extraction as soon as the search gets displayed.
+ this.extractText();
+ break;
+ }
+ },
+
+ extractText: function() {
+ if (this.startedTextExtraction)
+ return;
+ this.startedTextExtraction = true;
+ var self = this;
+ function extractPageText(pageIndex) {
+ self.pages[pageIndex].pdfPage.getTextContent().then(
+ function textContentResolved(textContent) {
+ self.pageText[pageIndex] = textContent;
+ self.search();
+ if ((pageIndex + 1) < self.pages.length)
+ extractPageText(pageIndex + 1);
+ }
+ );
+ };
+ extractPageText(0);
+ },
+
+ getVisiblePages: function pdfViewGetVisiblePages() {
+ var pages = this.pages;
+ var kBottomMargin = 10;
+ var kTopPadding = 30;
+ var visiblePages = [];
+
+ var currentHeight = kTopPadding + kBottomMargin;
+ //var container = this.container;
+ var container = document.getElementById('viewer');
+
+ // Add 1px to the scrolltop to give a little wiggle room if the math is off,
+ // this won't be needed if we calc current page number based off the middle
+ // of the screen instead of the top.
+ var containerTop = container.scrollTop + 1;
+ for (var i = 1; i <= pages.length; ++i) {
+ var page = pages[i - 1];
+ var pageHeight = page.height + kBottomMargin;
+ if (currentHeight + pageHeight > containerTop)
+ break;
+
+ currentHeight += pageHeight;
+ }
+
+ var containerBottom = containerTop + container.clientHeight;
+ for (; i <= pages.length && currentHeight < containerBottom; ++i) {
+ var singlePage = pages[i - 1];
+ visiblePages.push({ id: singlePage.id, y: currentHeight,
+ view: singlePage });
+ currentHeight += page.height + kBottomMargin;
+ }
+ return visiblePages;
+ },
+
+ getVisibleThumbs: function pdfViewGetVisibleThumbs() {
+ var thumbs = this.thumbnails;
+ var kBottomMargin = 15;
+ var visibleThumbs = [];
+
+ var view = document.getElementById('thumbnailView');
+ var currentHeight = kBottomMargin;
+
+ var top = view.scrollTop;
+ for (var i = 1; i <= thumbs.length; ++i) {
+ var thumb = thumbs[i - 1];
+ var thumbHeight = thumb.height * thumb.scaleY + kBottomMargin;
+ if (currentHeight + thumbHeight > top)
+ break;
+
+ currentHeight += thumbHeight;
+ }
+
+ var bottom = top + view.clientHeight;
+ for (; i <= thumbs.length && currentHeight < bottom; ++i) {
+ var singleThumb = thumbs[i - 1];
+ visibleThumbs.push({ id: singleThumb.id, y: currentHeight,
+ view: singleThumb });
+ currentHeight += singleThumb.height * singleThumb.scaleY + kBottomMargin;
+ }
+
+ return visibleThumbs;
+ },
+
+ // Helper function to parse query string (e.g. ?param1=value&parm2=...).
+ parseQueryString: function pdfViewParseQueryString(query) {
+ var parts = query.split('&');
+ var params = {};
+ for (var i = 0, ii = parts.length; i < parts.length; ++i) {
+ var param = parts[i].split('=');
+ var key = param[0];
+ var value = param.length > 1 ? param[1] : null;
+ params[unescape(key)] = unescape(value);
+ }
+ return params;
+ }
+};
+
+var PageView = function pageView(container, pdfPage, id, scale,
+ stats, navigateTo) {
+ this.id = id;
+ this.pdfPage = pdfPage;
+
+ this.scale = scale || 1.0;
+ this.viewport = this.pdfPage.getViewport(this.scale);
+
+ var anchor = document.createElement('a');
+ anchor.name = '' + this.id;
+
+ var div = document.createElement('div');
+ div.id = 'pageContainer' + this.id;
+ div.className = 'page';
+
+ container.appendChild(anchor);
+ container.appendChild(div);
+
+ this.destroy = function pageViewDestroy() {
+ this.update();
+ this.pdfPage.destroy();
+ };
+
+ this.update = function pageViewUpdate(scale) {
+ this.scale = scale || this.scale;
+ var viewport = this.pdfPage.getViewport(this.scale);
+
+ this.viewport = viewport;
+ div.style.width = viewport.width + 'px';
+ div.style.height = viewport.height + 'px';
+
+ while (div.hasChildNodes())
+ div.removeChild(div.lastChild);
+ div.removeAttribute('data-loaded');
+
+ delete this.canvas;
+
+ this.loadingIconDiv = document.createElement('div');
+ this.loadingIconDiv.className = 'loadingIcon';
+ div.appendChild(this.loadingIconDiv);
+ };
+
+ Object.defineProperty(this, 'width', {
+ get: function PageView_getWidth() {
+ return this.viewport.width;
+ },
+ enumerable: true
+ });
+
+ Object.defineProperty(this, 'height', {
+ get: function PageView_getHeight() {
+ return this.viewport.height;
+ },
+ enumerable: true
+ });
+
+ function setupAnnotations(pdfPage, viewport) {
+ function bindLink(link, dest) {
+ link.href = PDFView.getDestinationHash(dest);
+ link.onclick = function pageViewSetupLinksOnclick() {
+ if (dest)
+ PDFView.navigateTo(dest);
+ return false;
+ };
+ }
+ function createElementWithStyle(tagName, item) {
+ var rect = viewport.convertToViewportRectangle(item.rect);
+ rect = PDFJS.Util.normalizeRect(rect);
+ var element = document.createElement(tagName);
+ element.style.left = Math.floor(rect[0]) + 'px';
+ element.style.top = Math.floor(rect[1]) + 'px';
+ element.style.width = Math.ceil(rect[2] - rect[0]) + 'px';
+ element.style.height = Math.ceil(rect[3] - rect[1]) + 'px';
+ return element;
+ }
+ function createCommentAnnotation(type, item) {
+ var container = document.createElement('section');
+ container.className = 'annotComment';
+
+ var image = createElementWithStyle('img', item);
+ var type = item.type;
+ var rect = viewport.convertToViewportRectangle(item.rect);
+ rect = PDFJS.Util.normalizeRect(rect);
+ image.src = kImageDirectory + 'annotation-' + type.toLowerCase() + '.svg';
+ image.alt = mozL10n.get('text_annotation_type', {type: type},
+ '[{{type}} Annotation]');
+ var content = document.createElement('div');
+ content.setAttribute('hidden', true);
+ var title = document.createElement('h1');
+ var text = document.createElement('p');
+ content.style.left = Math.floor(rect[2]) + 'px';
+ content.style.top = Math.floor(rect[1]) + 'px';
+ title.textContent = item.title;
+
+ if (!item.content && !item.title) {
+ content.setAttribute('hidden', true);
+ } else {
+ var e = document.createElement('span');
+ var lines = item.content.split('\n');
+ for (var i = 0, ii = lines.length; i < ii; ++i) {
+ var line = lines[i];
+ e.appendChild(document.createTextNode(line));
+ if (i < (ii - 1))
+ e.appendChild(document.createElement('br'));
+ }
+ text.appendChild(e);
+ image.addEventListener('mouseover', function annotationImageOver() {
+ content.removeAttribute('hidden');
+ }, false);
+
+ image.addEventListener('mouseout', function annotationImageOut() {
+ content.setAttribute('hidden', true);
+ }, false);
+ }
+
+ content.appendChild(title);
+ content.appendChild(text);
+ container.appendChild(image);
+ container.appendChild(content);
+
+ return container;
+ }
+
+ pdfPage.getAnnotations().then(function(items) {
+ for (var i = 0; i < items.length; i++) {
+ var item = items[i];
+ switch (item.type) {
+ case 'Link':
+ var link = createElementWithStyle('a', item);
+ link.href = item.url || '';
+ if (!item.url)
+ bindLink(link, ('dest' in item) ? item.dest : null);
+ div.appendChild(link);
+ break;
+ case 'Text':
+ var comment = createCommentAnnotation(item.name, item);
+ if (comment)
+ div.appendChild(comment);
+ break;
+ case 'Widget':
+ // TODO: support forms
+ PDFView.fallback();
+ break;
+ }
+ }
+ });
+ }
+
+ this.getPagePoint = function pageViewGetPagePoint(x, y) {
+ return this.viewport.convertToPdfPoint(x, y);
+ };
+
+ this.scrollIntoView = function pageViewScrollIntoView(dest) {
+ if (!dest) {
+ div.scrollIntoView(true);
+ return;
+ }
+
+ var x = 0, y = 0;
+ var width = 0, height = 0, widthScale, heightScale;
+ var scale = 0;
+ switch (dest[1].name) {
+ case 'XYZ':
+ x = dest[2];
+ y = dest[3];
+ scale = dest[4];
+ break;
+ case 'Fit':
+ case 'FitB':
+ scale = 'page-fit';
+ break;
+ case 'FitH':
+ case 'FitBH':
+ y = dest[2];
+ scale = 'page-width';
+ break;
+ case 'FitV':
+ case 'FitBV':
+ x = dest[2];
+ scale = 'page-height';
+ break;
+ case 'FitR':
+ x = dest[2];
+ y = dest[3];
+ width = dest[4] - x;
+ height = dest[5] - y;
+ widthScale = (this.container.clientWidth - kScrollbarPadding) /
+ width / kCssUnits;
+ heightScale = (this.container.clientHeight - kScrollbarPadding) /
+ height / kCssUnits;
+ scale = Math.min(widthScale, heightScale);
+ break;
+ default:
+ return;
+ }
+
+ if (scale && scale !== PDFView.currentScale)
+ PDFView.parseScale(scale, true);
+ else if (PDFView.currentScale === kUnknownScale)
+ PDFView.parseScale(kDefaultScale, true);
+
+ var boundingRect = [
+ this.viewport.convertToViewportPoint(x, y),
+ this.viewport.convertToViewportPoint(x + width, y + height)
+ ];
+ setTimeout(function pageViewScrollIntoViewRelayout() {
+ // letting page to re-layout before scrolling
+ var scale = PDFView.currentScale;
+ var x = Math.min(boundingRect[0][0], boundingRect[1][0]);
+ var y = Math.min(boundingRect[0][1], boundingRect[1][1]);
+ var width = Math.abs(boundingRect[0][0] - boundingRect[1][0]);
+ var height = Math.abs(boundingRect[0][1] - boundingRect[1][1]);
+
+ // using temporary div to scroll it into view
+ var tempDiv = document.createElement('div');
+ tempDiv.style.position = 'absolute';
+ tempDiv.style.left = Math.floor(x) + 'px';
+ tempDiv.style.top = Math.floor(y) + 'px';
+ tempDiv.style.width = Math.ceil(width) + 'px';
+ tempDiv.style.height = Math.ceil(height) + 'px';
+ div.appendChild(tempDiv);
+ tempDiv.scrollIntoView(true);
+ div.removeChild(tempDiv);
+ }, 0);
+ };
+
+ this.drawingRequired = function() {
+ return !div.querySelector('canvas');
+ };
+
+ this.draw = function pageviewDraw(callback) {
+ if (!this.drawingRequired()) {
+ this.updateStats();
+ callback();
+ return;
+ }
+
+ var canvas = document.createElement('canvas');
+ canvas.id = 'page' + this.id;
+ canvas.mozOpaque = true;
+ div.appendChild(canvas);
+ this.canvas = canvas;
+
+ var textLayerDiv = null;
+ if (!PDFJS.disableTextLayer) {
+ textLayerDiv = document.createElement('div');
+ textLayerDiv.className = 'textLayer';
+ div.appendChild(textLayerDiv);
+ }
+ var textLayer = textLayerDiv ? new TextLayerBuilder(textLayerDiv) : null;
+
+ var scale = this.scale, viewport = this.viewport;
+ canvas.width = viewport.width;
+ canvas.height = viewport.height;
+
+ var ctx = canvas.getContext('2d');
+ ctx.save();
+ ctx.fillStyle = 'rgb(255, 255, 255)';
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+ ctx.restore();
+
+ // Rendering area
+
+ var self = this;
+ function pageViewDrawCallback(error) {
+ if (self.loadingIconDiv) {
+ div.removeChild(self.loadingIconDiv);
+ delete self.loadingIconDiv;
+ }
+
+ if (error) {
+ PDFView.error(mozL10n.get('rendering_error', null,
+ 'An error occurred while rendering the page.'), error);
+ }
+
+ self.stats = pdfPage.stats;
+ self.updateStats();
+ if (self.onAfterDraw)
+ self.onAfterDraw();
+
+ cache.push(self);
+ callback();
+ }
+
+ var renderContext = {
+ canvasContext: ctx,
+ viewport: this.viewport,
+ textLayer: textLayer
+ };
+ this.pdfPage.render(renderContext).then(
+ function pdfPageRenderCallback() {
+ pageViewDrawCallback(null);
+ },
+ function pdfPageRenderError(error) {
+ pageViewDrawCallback(error);
+ }
+ );
+
+ setupAnnotations(this.pdfPage, this.viewport);
+ div.setAttribute('data-loaded', true);
+ };
+
+ this.updateStats = function pageViewUpdateStats() {
+ if (PDFJS.pdfBug && Stats.enabled) {
+ var stats = this.stats;
+ Stats.add(this.id, stats);
+ }
+ };
+};
+
+var ThumbnailView = function thumbnailView(container, pdfPage, id) {
+ var anchor = document.createElement('a');
+ anchor.href = PDFView.getAnchorUrl('#page=' + id);
+ anchor.title = mozL10n.get('thumb_page_title', {page: id}, 'Page {{page}}');
+ anchor.onclick = function stopNavigation() {
+ PDFView.page = id;
+ return false;
+ };
+
+ var viewport = pdfPage.getViewport(1);
+ var pageWidth = this.width = viewport.width;
+ var pageHeight = this.height = viewport.height;
+ var pageRatio = pageWidth / pageHeight;
+ this.id = id;
+
+ var canvasWidth = 98;
+ var canvasHeight = canvasWidth / this.width * this.height;
+ var scaleX = this.scaleX = (canvasWidth / pageWidth);
+ var scaleY = this.scaleY = (canvasHeight / pageHeight);
+
+ var div = document.createElement('div');
+ div.id = 'thumbnailContainer' + id;
+ div.className = 'thumbnail';
+
+ anchor.appendChild(div);
+ container.appendChild(anchor);
+
+ this.hasImage = false;
+
+ function getPageDrawContext() {
+ var canvas = document.createElement('canvas');
+ canvas.id = 'thumbnail' + id;
+ canvas.mozOpaque = true;
+
+ canvas.width = canvasWidth;
+ canvas.height = canvasHeight;
+ canvas.className = 'thumbnailImage';
+ canvas.setAttribute('aria-label', mozL10n.get('thumb_page_canvas',
+ {page: id}, 'Thumbnail of Page {{page}}'));
+
+ div.setAttribute('data-loaded', true);
+
+ var ring = document.createElement('div');
+ ring.className = 'thumbnailSelectionRing';
+ ring.appendChild(canvas);
+ div.appendChild(ring);
+
+ var ctx = canvas.getContext('2d');
+ ctx.save();
+ ctx.fillStyle = 'rgb(255, 255, 255)';
+ ctx.fillRect(0, 0, canvasWidth, canvasHeight);
+ ctx.restore();
+ return ctx;
+ }
+
+ this.drawingRequired = function thumbnailViewDrawingRequired() {
+ return !this.hasImage;
+ };
+
+ this.draw = function thumbnailViewDraw(callback) {
+ if (this.hasImage) {
+ callback();
+ return;
+ }
+
+ var ctx = getPageDrawContext();
+ var drawViewport = pdfPage.getViewport(scaleX);
+ var renderContext = {
+ canvasContext: ctx,
+ viewport: drawViewport
+ };
+ pdfPage.render(renderContext).then(
+ function pdfPageRenderCallback() {
+ callback();
+ },
+ function pdfPageRenderError(error) {
+ callback();
+ }
+ );
+ this.hasImage = true;
+ };
+
+ this.setImage = function thumbnailViewSetImage(img) {
+ if (this.hasImage || !img)
+ return;
+
+ var ctx = getPageDrawContext();
+ ctx.drawImage(img, 0, 0, img.width, img.height,
+ 0, 0, ctx.canvas.width, ctx.canvas.height);
+
+ this.hasImage = true;
+ };
+};
+
+var DocumentOutlineView = function documentOutlineView(outline) {
+ var outlineView = document.getElementById('outlineView');
+// while (outlineView.firstChild)
+// outlineView.removeChild(outlineView.firstChild);
+
+ function bindItemLink(domObj, item) {
+ domObj.href = PDFView.getDestinationHash(item.dest);
+ domObj.onclick = function documentOutlineViewOnclick(e) {
+ PDFView.navigateTo(item.dest);
+ return false;
+ };
+ }
+
+ if (!outline) {
+ var noOutline = document.createElement('div');
+ noOutline.classList.add('noOutline');
+ //noOutline.textContent = mozL10n.get('no_outline', null,
+ // 'No Outline Available');
+ noOutline.textContent = 'No Outline Available';
+ //outlineView.appendChild(noOutline);
+ return;
+ }
+
+ var queue = [{parent: outlineView, items: outline}];
+ while (queue.length > 0) {
+ var levelData = queue.shift();
+ var i, n = levelData.items.length;
+ for (i = 0; i < n; i++) {
+ var item = levelData.items[i];
+ var div = document.createElement('div');
+ div.className = 'outlineItem';
+ var a = document.createElement('a');
+ bindItemLink(a, item);
+ a.textContent = item.title;
+ div.appendChild(a);
+
+ if (item.items.length > 0) {
+ var itemsDiv = document.createElement('div');
+ itemsDiv.className = 'outlineItems';
+ div.appendChild(itemsDiv);
+ queue.push({parent: itemsDiv, items: item.items});
+ }
+
+// levelData.parent.appendChild(div);
+ }
+ }
+};
+
+// optimised CSS custom property getter/setter
+var CustomStyle = (function CustomStyleClosure() {
+
+ // As noted on: http://www.zachstronaut.com/posts/2009/02/17/
+ // animate-css-transforms-firefox-webkit.html
+ // in some versions of IE9 it is critical that ms appear in this list
+ // before Moz
+ var prefixes = ['ms', 'Moz', 'Webkit', 'O'];
+ var _cache = { };
+
+ function CustomStyle() {
+ }
+
+ CustomStyle.getProp = function get(propName, element) {
+ // check cache only when no element is given
+ if (arguments.length == 1 && typeof _cache[propName] == 'string') {
+ return _cache[propName];
+ }
+
+ element = element || document.documentElement;
+ var style = element.style, prefixed, uPropName;
+
+ // test standard property first
+ if (typeof style[propName] == 'string') {
+ return (_cache[propName] = propName);
+ }
+
+ // capitalize
+ uPropName = propName.charAt(0).toUpperCase() + propName.slice(1);
+
+ // test vendor specific properties
+ for (var i = 0, l = prefixes.length; i < l; i++) {
+ prefixed = prefixes[i] + uPropName;
+ if (typeof style[prefixed] == 'string') {
+ return (_cache[propName] = prefixed);
+ }
+ }
+
+ //if all fails then set to undefined
+ return (_cache[propName] = 'undefined');
+ }
+
+ CustomStyle.setProp = function set(propName, element, str) {
+ var prop = this.getProp(propName);
+ if (prop != 'undefined')
+ element.style[prop] = str;
+ }
+
+ return CustomStyle;
+})();
+
+var TextLayerBuilder = function textLayerBuilder(textLayerDiv) {
+ this.textLayerDiv = textLayerDiv;
+
+ this.beginLayout = function textLayerBuilderBeginLayout() {
+ this.textDivs = [];
+ this.textLayerQueue = [];
+ };
+
+ this.endLayout = function textLayerBuilderEndLayout() {
+ var self = this;
+ var textDivs = this.textDivs;
+ var textLayerDiv = this.textLayerDiv;
+ var renderTimer = null;
+ var renderingDone = false;
+ var renderInterval = 0;
+ var resumeInterval = 500; // in ms
+
+ // Render the text layer, one div at a time
+ function renderTextLayer() {
+ if (textDivs.length === 0) {
+ clearInterval(renderTimer);
+ renderingDone = true;
+ return;
+ }
+ var textDiv = textDivs.shift();
+ if (textDiv.dataset.textLength > 0) {
+ textLayerDiv.appendChild(textDiv);
+
+ if (textDiv.dataset.textLength > 1) { // avoid div by zero
+ // Adjust div width to match canvas text
+ // Due to the .offsetWidth calls, this is slow
+ // This needs to come after appending to the DOM
+ var textScale = textDiv.dataset.canvasWidth / textDiv.offsetWidth;
+ CustomStyle.setProp('transform' , textDiv,
+ 'scale(' + textScale + ', 1)');
+ CustomStyle.setProp('transformOrigin' , textDiv, '0% 0%');
+ }
+ } // textLength > 0
+ }
+ renderTimer = setInterval(renderTextLayer, renderInterval);
+
+ // Stop rendering when user scrolls. Resume after XXX milliseconds
+ // of no scroll events
+ var scrollTimer = null;
+ function textLayerOnScroll() {
+ if (renderingDone) {
+ window.removeEventListener('scroll', textLayerOnScroll, false);
+ return;
+ }
+
+ // Immediately pause rendering
+ clearInterval(renderTimer);
+
+ clearTimeout(scrollTimer);
+ scrollTimer = setTimeout(function textLayerScrollTimer() {
+ // Resume rendering
+ renderTimer = setInterval(renderTextLayer, renderInterval);
+ }, resumeInterval);
+ }; // textLayerOnScroll
+
+ window.addEventListener('scroll', textLayerOnScroll, false);
+ }; // endLayout
+
+ this.appendText = function textLayerBuilderAppendText(text,
+ fontName, fontSize) {
+ var textDiv = document.createElement('div');
+
+ // vScale and hScale already contain the scaling to pixel units
+ var fontHeight = fontSize * text.geom.vScale;
+ textDiv.dataset.canvasWidth = text.canvasWidth * text.geom.hScale;
+ textDiv.dataset.fontName = fontName;
+
+ textDiv.style.fontSize = fontHeight + 'px';
+ textDiv.style.left = text.geom.x + 'px';
+ textDiv.style.top = (text.geom.y - fontHeight) + 'px';
+ textDiv.textContent = PDFJS.bidi(text, -1);
+ textDiv.dir = text.direction;
+ textDiv.dataset.textLength = text.length;
+ this.textDivs.push(textDiv);
+ };
+};
+
+window.addEventListener('load', function webViewerLoad(evt) {
+ PDFView.initialize();
+ var params = PDFView.parseQueryString(document.location.search.substring(1));
+
+ var file = PDFJS.isFirefoxExtension ?
+ window.location.toString() : params.file || kDefaultURL;
+
+/* if (PDFJS.isFirefoxExtension || !window.File || !window.FileReader ||
+ !window.FileList || !window.Blob) {
+ document.getElementById('openFile').setAttribute('hidden', 'true');
+ } else {
+ document.getElementById('fileInput').value = null;
+ }
+*/
+ // Special debugging flags in the hash section of the URL.
+ var hash = document.location.hash.substring(1);
+ var hashParams = PDFView.parseQueryString(hash);
+
+ if ('disableWorker' in hashParams)
+ PDFJS.disableWorker = (hashParams['disableWorker'] === 'true');
+
+/* if (!PDFJS.isFirefoxExtension) {
+ var locale = navigator.language;
+ if ('locale' in hashParams)
+ locale = hashParams['locale'];
+ mozL10n.language.code = locale;
+ }
+*/
+ if ('disableTextLayer' in hashParams)
+ PDFJS.disableTextLayer = (hashParams['disableTextLayer'] === 'true');
+
+ if ('pdfBug' in hashParams &&
+ (!PDFJS.isFirefoxExtension || FirefoxCom.requestSync('pdfBugEnabled'))) {
+ PDFJS.pdfBug = true;
+ var pdfBug = hashParams['pdfBug'];
+ var enabled = pdfBug.split(',');
+ PDFBug.enable(enabled);
+ PDFBug.init();
+ }
+
+/* if (!PDFJS.isFirefoxExtension ||
+ (PDFJS.isFirefoxExtension && FirefoxCom.requestSync('searchEnabled'))) {
+ document.querySelector('#viewSearch').classList.remove('hidden');
+ }
+*/
+ // Listen for warnings to trigger the fallback UI. Errors should be caught
+ // and call PDFView.error() so we don't need to listen for those.
+ PDFJS.LogManager.addLogger({
+ warn: function() {
+ PDFView.fallback();
+ }
+ });
+
+// var thumbsView = document.getElementById('thumbnailView');
+// thumbsView.addEventListener('scroll', updateThumbViewArea, true);
+/*
+ var mainContainer = document.getElementById('mainContainer');
+ var outerContainer = document.getElementById('outerContainer');
+ mainContainer.addEventListener('transitionend', function(e) {
+ if (e.target == mainContainer) {
+ var event = document.createEvent('UIEvents');
+ event.initUIEvent('resize', false, false, window, 0);
+ window.dispatchEvent(event);
+ outerContainer.classList.remove('sidebarMoving');
+ }
+ }, true);
+
+ document.getElementById('sidebarToggle').addEventListener('click',
+ function() {
+ this.classList.toggle('toggled');
+ outerContainer.classList.add('sidebarMoving');
+ outerContainer.classList.toggle('sidebarOpen');
+ updateThumbViewArea();
+ });
+
+ PDFView.open(file, 0);
+*/
+}, true);
+
+/**
+ * Render the next not yet visible page already such that it is
+ * hopefully ready once the user scrolls to it.
+ */
+function preDraw() {
+ var pages = PDFView.pages;
+ var visible = PDFView.getVisiblePages();
+ var last = visible[visible.length - 1];
+ // PageView.id is the actual page number, which is + 1 compared
+ // to the index in `pages`. That means, pages[last.id] is the next
+ // PageView instance.
+ if (pages[last.id] && pages[last.id].drawingRequired()) {
+ renderingQueue.enqueueDraw(pages[last.id]);
+ return;
+ }
+ // If there is nothing to draw on the next page, maybe the user
+ // is scrolling up, so, let's try to render the next page *before*
+ // the first visible page
+ if (pages[visible[0].id - 2]) {
+ renderingQueue.enqueueDraw(pages[visible[0].id - 2]);
+ }
+}
+
+function updateViewarea() {
+ if (!PDFView.initialized)
+ return;
+ var container = document.getElementById('viewer');
+ if (!container)
+ return;
+
+ var visiblePages = PDFView.getVisiblePages();
+ var pageToDraw;
+ for (var i = 0; i < visiblePages.length; i++) {
+ var page = visiblePages[i];
+ var pageObj = PDFView.pages[page.id - 1];
+
+ pageToDraw |= pageObj.drawingRequired();
+ renderingQueue.enqueueDraw(pageObj);
+ }
+
+ if (!visiblePages.length)
+ return;
+
+ // If there is no need to draw a page that is currenlty visible, preDraw the
+ // next page the user might scroll to.
+ if (!pageToDraw) {
+ preDraw();
+ }
+
+ updateViewarea.inProgress = true; // used in "set page"
+ var currentId = PDFView.page;
+ var firstPage = visiblePages[0];
+ PDFView.page = firstPage.id;
+ updateViewarea.inProgress = false;
+
+ var currentScale = PDFView.currentScale;
+ var currentScaleValue = PDFView.currentScaleValue;
+ var normalizedScaleValue = currentScaleValue == currentScale ?
+ currentScale * 100 : currentScaleValue;
+
+ var pageNumber = firstPage.id;
+ var pdfOpenParams = '#page=' + pageNumber;
+ pdfOpenParams += '&zoom=' + normalizedScaleValue;
+ var currentPage = PDFView.pages[pageNumber - 1];
+ var topLeft = currentPage.getPagePoint(PDFView.container.scrollLeft,
+ (PDFView.container.scrollTop - firstPage.y));
+ pdfOpenParams += ',' + Math.round(topLeft[0]) + ',' + Math.round(topLeft[1]);
+
+ var store = PDFView.store;
+ store.set('exists', true);
+ store.set('page', pageNumber);
+ store.set('zoom', normalizedScaleValue);
+ store.set('scrollLeft', Math.round(topLeft[0]));
+ store.set('scrollTop', Math.round(topLeft[1]));
+// var href = PDFView.getAnchorUrl(pdfOpenParams);
+// document.getElementById('viewBookmark').href = href;
+}
+
+window.addEventListener('scroll', function webViewerScroll(evt) {
+ updateViewarea();
+}, true);
+
+var thumbnailTimer;
+
+function updateThumbViewArea() {
+ // Only render thumbs after pausing scrolling for this amount of time
+ // (makes UI more responsive)
+ var delay = 50; // in ms
+
+ if (thumbnailTimer)
+ clearTimeout(thumbnailTimer);
+
+ thumbnailTimer = setTimeout(function() {
+ var visibleThumbs = PDFView.getVisibleThumbs();
+ for (var i = 0; i < visibleThumbs.length; i++) {
+ var thumb = visibleThumbs[i];
+ renderingQueue.enqueueDraw(PDFView.thumbnails[thumb.id - 1]);
+ }
+ }, delay);
+}
+
+window.addEventListener('resize', function webViewerResize(evt) {
+ if (PDFView.initialized && PDFView.active &&
+ (document.getElementById('pageWidthOption').selected ||
+ document.getElementById('pageFitOption').selected ))
+ PDFView.parseScale(document.getElementById('scaleSelect').value);
+ updateViewarea();
+});
+
+window.addEventListener('hashchange', function webViewerHashchange(evt) {
+ PDFView.setHash(document.location.hash.substring(1));
+});
+
+window.addEventListener('change', function webViewerChange(evt) {
+ var files = evt.target.files;
+ if (!files || files.length == 0)
+ return;
+
+ // Read the local file into a Uint8Array.
+ var fileReader = new FileReader();
+ fileReader.onload = function webViewerChangeFileReaderOnload(evt) {
+ var data = evt.target.result;
+ var buffer = new ArrayBuffer(data.length);
+ var uint8Array = new Uint8Array(buffer);
+
+ for (var i = 0; i < data.length; i++)
+ uint8Array[i] = data.charCodeAt(i);
+
+ PDFView.open(uint8Array, 0);
+ };
+
+ // Read as a binary string since "readAsArrayBuffer" is not yet
+ // implemented in Firefox.
+ var file = files[0];
+ fileReader.readAsBinaryString(file);
+ document.title = file.name;
+
+ // URL does not reflect proper document location - hiding some icons.
+// document.getElementById('viewBookmark').setAttribute('hidden', 'true');
+// document.getElementById('download').setAttribute('hidden', 'true');
+}, true);
+
+function selectScaleOption(value) {
+ var options = document.getElementById('scaleSelect').options;
+ var predefinedValueFound = false;
+ for (var i = 0; i < options.length; i++) {
+ var option = options[i];
+ if (option.value != value) {
+ option.selected = false;
+ continue;
+ }
+ option.selected = true;
+ predefinedValueFound = true;
+ }
+ return predefinedValueFound;
+}
+
+window.addEventListener('localized', function localized(evt) {
+ document.getElementsByTagName('html')[0].dir = mozL10n.language.direction;
+}, true);
+
+window.addEventListener('scalechange', function scalechange(evt) {
+ var customScaleOption = document.getElementById('customScaleOption');
+ customScaleOption.selected = false;
+
+ if (!evt.resetAutoSettings &&
+ (document.getElementById('pageWidthOption').selected ||
+ document.getElementById('pageFitOption').selected ||
+ document.getElementById('pageAutoOption').selected)) {
+ updateViewarea();
+ return;
+ }
+
+ var predefinedValueFound = selectScaleOption('' + evt.scale);
+ if (!predefinedValueFound) {
+ customScaleOption.textContent = Math.round(evt.scale * 10000) / 100 + '%';
+ customScaleOption.selected = true;
+ }
+
+ updateViewarea();
+}, true);
+
+window.addEventListener('pagechange', function pagechange(evt) {
+ var page = evt.pageNumber;
+ if (document.getElementById('pageNumber').value != page) {
+ document.getElementById('pageNumber').value = page;
+ var selected = document.querySelector('.thumbnail.selected');
+ if (selected)
+ selected.classList.remove('selected');
+/*
+ var thumbnail = document.getElementById('thumbnailContainer' + page);
+ thumbnail.classList.add('selected');
+ var visibleThumbs = PDFView.getVisibleThumbs();
+ var numVisibleThumbs = visibleThumbs.length;
+ // If the thumbnail isn't currently visible scroll it into view.
+ if (numVisibleThumbs > 0) {
+ var first = visibleThumbs[0].id;
+ // Account for only one thumbnail being visible.
+ var last = numVisibleThumbs > 1 ?
+ visibleThumbs[numVisibleThumbs - 1].id : first;
+ if (page <= first || page >= last)
+ thumbnail.scrollIntoView();
+ }
+*/
+ }
+ document.getElementById('previous').disabled = (page <= 1);
+ document.getElementById('next').disabled = (page >= PDFView.pages.length);
+}, true);
+
+// Firefox specific event, so that we can prevent browser from zooming
+window.addEventListener('DOMMouseScroll', function(evt) {
+ if (evt.ctrlKey) {
+ evt.preventDefault();
+
+ var ticks = evt.detail;
+ var direction = (ticks > 0) ? 'zoomOut' : 'zoomIn';
+ for (var i = 0, length = Math.abs(ticks); i < length; i++)
+ PDFView[direction]();
+ }
+}, false);
+
+
diff --git a/apps/files_pdfviewer/js/viewer.js b/apps/files_pdfviewer/js/viewer.js
index 417d3a073f0..29db2ea7f24 100644
--- a/apps/files_pdfviewer/js/viewer.js
+++ b/apps/files_pdfviewer/js/viewer.js
@@ -24,21 +24,9 @@ function showPDFviewer(dir,filename){
var oldcontent = $("#content").html();
$("#content").html(oldcontent+'<div id="loading">Loading... 0%</div><div id="viewer"></div>');
showPDFviewer.lastTitle = document.title;
- if(!showPDFviewer.loaded){
- OC.addScript( 'files_pdfviewer', 'pdfjs/build/pdf',function(){
- OC.addScript( 'files_pdfviewer', 'pdfview',function(){
- showPDFviewer.loaded=true;
- PDFJS.workerSrc = OC.filePath('files_pdfviewer','js','pdfjs/build/pdf.js');
- PDFView.Ptitle = filename;
- PDFView.open(url,1.00);
- PDFView.active=true;
- });
- });
- }else{
- PDFView.Ptitle = filename;
- PDFView.open(url,1.00);
- PDFView.active=true;
- }
+ PDFView.Ptitle = filename;
+ PDFView.open(url,1.00);
+ PDFView.active=true;
$("#pageWidthOption").attr("selected","selected");
showPDFviewer.shown = true;
}
@@ -46,14 +34,13 @@ function showPDFviewer(dir,filename){
showPDFviewer.shown=false;
showPDFviewer.oldCode='';
showPDFviewer.lastTitle='';
-showPDFviewer.loaded=false;
$(document).ready(function(){
if(!$.browser.msie){//doesnt work on IE
if(location.href.indexOf("files")!=-1) {
PDFJS.workerSrc = OC.filePath('files_pdfviewer','js','pdfjs/build/pdf.js');
if(typeof FileActions!=='undefined'){
- FileActions.register('application/pdf','Edit','',function(filename){
+ FileActions.register('application/pdf','Edit', FileActions.PERMISSION_READ, '',function(filename){
showPDFviewer($('#dir').val(),filename);
});
FileActions.setDefault('application/pdf','Edit');
diff --git a/apps/files_sharing/ajax/email.php b/apps/files_sharing/ajax/email.php
deleted file mode 100644
index 2a81e6f9827..00000000000
--- a/apps/files_sharing/ajax/email.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-OCP\JSON::checkLoggedIn();
-OCP\JSON::callCheck();
-OCP\JSON::checkAppEnabled('files_sharing');
-$user = OCP\USER::getUser();
-// TODO translations
-$type = (strpos($_POST['file'], '.') === false) ? 'folder' : 'file';
-$subject = $user.' shared a '.$type.' with you';
-$link = $_POST['link'];
-$text = $user.' shared the '.$type.' '.$_POST['file'].' with you. It is available for download here: '.$link;
-$fromaddress = OCP\Config::getUserValue($user, 'settings', 'email', 'sharing-noreply@'.OCP\Util::getServerHost());
-try {
- OCP\Util::sendMail($_POST['toaddress'], $_POST['toaddress'], $subject, $text, $fromaddress, $user);
- OCP\JSON::success();
-} catch (Exception $exception) {
- OCP\JSON::error(array('data' => array('message' => $exception->getMessage())));
-}
diff --git a/apps/files_sharing/ajax/getitem.php b/apps/files_sharing/ajax/getitem.php
deleted file mode 100644
index 852e5a24571..00000000000
--- a/apps/files_sharing/ajax/getitem.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-require_once(OC::$APPSROOT . '/apps/files_sharing/lib_share.php');
-
-OCP\JSON::checkAppEnabled('files_sharing');
-OCP\JSON::checkLoggedIn();
-
-$item = array();
-$userDirectory = '/'.OCP\USER::getUser().'/files';
-$source = $userDirectory.$_GET['item'];
-$path = $source;
-// Search for item and shared parent folders
-while ($path != $userDirectory) {
- if ($rows = OC_Share::getMySharedItem($path)) {
- for ($i = 0; $i < count($rows); $i++) {
- $uid_shared_with = $rows[$i]['uid_shared_with'];
- if ($uid_shared_with == OC_Share::PUBLICLINK && !isset($item['privateLink'])) {
- $token = OC_Share::getTokenFromSource($path);
- if ($path == $source) {
- $item['privateLink'] = $token;
- } else {
- // If in parent folder, include a path parameter to get direct access to file
- $item['privateLink'] = $token.'&path='.str_replace('%2F', '/', str_replace('+', '%20', urlencode(substr($source, strlen($path)))));;
- }
- } else {
- // Check if uid_shared_with is a group
- $pos = strrpos($uid_shared_with, '@');
- if ($pos !== false) {
- $gid = substr($uid_shared_with, $pos + 1);
- } else {
- $gid = false;
- }
- if ($gid && OC_Group::groupExists($gid)) {
- // Include users in the group so the users can be removed from the list of people to share with
- if ($path == $source) {
- $group = array(array('gid' => $gid, 'permissions' => $rows[$i]['permissions'], 'users' => OC_Group::usersInGroup($gid), 'parentFolder' => false));
- } else {
- $group = array(array('gid' => $gid, 'permissions' => $rows[$i]['permissions'], 'users' => OC_Group::usersInGroup($gid), 'parentFolder' => basename($path)));
- }
- if (!isset($item['groups'])) {
- $item['groups'] = $group;
- } else if (is_array($item['groups'])) {
- $gidExists = false;
- $currentGroups = $item['groups'];
- // Check if the group is already included
- foreach ($currentGroups as $g) {
- if ($g['gid'] == $gid) {
- $gidExists = true;
- }
- }
- if (!$gidExists) {
- $item['groups'] = array_merge($item['groups'], $group);
- }
- }
- } else {
- if ($path == $source) {
- $user = array(array('uid' => $uid_shared_with, 'permissions' => $rows[$i]['permissions'], 'parentFolder' => false));
- } else {
- $user = array(array('uid' => $uid_shared_with, 'permissions' => $rows[$i]['permissions'], 'parentFolder' => basename($path)));
- }
- if (!isset($item['users'])) {
- $item['users'] = $user;
- } else if (is_array($item['users'])) {
- $item['users'] = array_merge($item['users'], $user);
- }
- }
- }
- }
- }
- $path = dirname($path);
-}
-
-OCP\JSON::success(array('data' => $item));
-
-?>
diff --git a/apps/files_sharing/ajax/getstatuses.php b/apps/files_sharing/ajax/getstatuses.php
deleted file mode 100644
index 8edcb214758..00000000000
--- a/apps/files_sharing/ajax/getstatuses.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-require_once(OC::$APPSROOT . '/apps/files_sharing/lib_share.php');
-
-OCP\JSON::checkAppEnabled('files_sharing');
-OCP\JSON::checkLoggedIn();
-
-$items = array();
-$userDirectory = '/'.OCP\USER::getUser().'/files';
-$dirLength = strlen($userDirectory);
-if ($rows = OC_Share::getMySharedItems()) {
- for ($i = 0; $i < count($rows); $i++) {
- $source = $rows[$i]['source'];
- // Strip out user directory
- $item = substr($source, $dirLength);
- if ($rows[$i]['uid_shared_with'] == OC_Share::PUBLICLINK) {
- $items[$item] = true;
- } else if (!isset($items[$item])) {
- $items[$item] = false;
- }
- }
-}
-
-OCP\JSON::success(array('data' => $items));
-
-?> \ No newline at end of file
diff --git a/apps/files_sharing/ajax/setpermissions.php b/apps/files_sharing/ajax/setpermissions.php
deleted file mode 100644
index 13daab738de..00000000000
--- a/apps/files_sharing/ajax/setpermissions.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-require_once(OC::$APPSROOT . '/apps/files_sharing/lib_share.php');
-
-OCP\JSON::checkAppEnabled('files_sharing');
-OCP\JSON::checkLoggedIn();
-OCP\JSON::callCheck();
-
-$source = '/'.OCP\USER::getUser().'/files'.$_POST['source'];
-$uid_shared_with = $_POST['uid_shared_with'];
-$permissions = $_POST['permissions'];
-OC_Share::setPermissions($source, $uid_shared_with, $permissions);
-
-OCP\JSON::success();
-
-?>
diff --git a/apps/files_sharing/ajax/share.php b/apps/files_sharing/ajax/share.php
deleted file mode 100644
index fb28caf7b7e..00000000000
--- a/apps/files_sharing/ajax/share.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-require_once(OC::$APPSROOT . '/apps/files_sharing/lib_share.php');
-
-OCP\JSON::checkAppEnabled('files_sharing');
-OCP\JSON::checkLoggedIn();
-OCP\JSON::callCheck();
-
-$userDirectory = '/'.OCP\USER::getUser().'/files';
-$sources = explode(';', $_POST['sources']);
-$uid_shared_with = $_POST['uid_shared_with'];
-$permissions = $_POST['permissions'];
-foreach ($sources as $source) {
- $file = OC_FileCache::get($source);
- $path = ltrim($source, '/');
- $source = $userDirectory.$source;
- // Check if the file exists or if the file is being reshared
- if ($source && $file['encrypted'] == false && (OC_FILESYSTEM::file_exists($path) && OC_FILESYSTEM::is_readable($path) || OC_Share::getSource($source))) {
- try {
- $shared = new OC_Share($source, $uid_shared_with, $permissions);
- // If this is a private link, return the token
- if ($uid_shared_with == OC_Share::PUBLICLINK) {
- OCP\JSON::success(array('data' => $shared->getToken()));
- } else {
- OCP\JSON::success();
- }
- } catch (Exception $exception) {
- OCP\Util::writeLog('files_sharing', 'Unexpected Error : '.$exception->getMessage(), OCP\Util::ERROR);
- OCP\JSON::error(array('data' => array('message' => $exception->getMessage())));
- }
- } else {
- if ($file['encrypted'] == true) {
- OCP\JSON::error(array('data' => array('message' => 'Encrypted files cannot be shared')));
- } else {
- OCP\Util::writeLog('files_sharing', 'File does not exist or is not readable :'.$source, OCP\Util::ERROR);
- OCP\JSON::error(array('data' => array('message' => 'File does not exist or is not readable')));
- }
- }
-}
-
-?>
diff --git a/apps/files_sharing/ajax/toggleresharing.php b/apps/files_sharing/ajax/toggleresharing.php
deleted file mode 100644
index ab8e82c8c3f..00000000000
--- a/apps/files_sharing/ajax/toggleresharing.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-OCP\JSON::callCheck();
-
-OCP\JSON::checkAppEnabled('files_sharing');
-OCP\JSON::checkAdminUser();
-if ($_POST['resharing'] == true) {
- OCP\Config::setAppValue('files_sharing', 'resharing', 'yes');
-} else {
- OCP\Config::setAppValue('files_sharing', 'resharing', 'no');
-}
-
-?>
diff --git a/apps/files_sharing/ajax/unshare.php b/apps/files_sharing/ajax/unshare.php
deleted file mode 100644
index d291b719e38..00000000000
--- a/apps/files_sharing/ajax/unshare.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-require_once(OC::$APPSROOT . '/apps/files_sharing/lib_share.php');
-
-OCP\JSON::checkAppEnabled('files_sharing');
-OCP\JSON::checkLoggedIn();
-OCP\JSON::callCheck();
-
-$source = '/'.OCP\USER::getUser().'/files'.$_POST['source'];
-$uid_shared_with = $_POST['uid_shared_with'];
-OC_Share::unshare($source, $uid_shared_with);
-
-OCP\JSON::success();
-
-?>
diff --git a/apps/files_sharing/ajax/userautocomplete.php b/apps/files_sharing/ajax/userautocomplete.php
deleted file mode 100644
index 23865693a1b..00000000000
--- a/apps/files_sharing/ajax/userautocomplete.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-OCP\JSON::checkLoggedIn();
-OCP\JSON::checkAppEnabled('files_sharing');
-
-$users = array();
-$groups = array();
-$self = OCP\USER::getUser();
-$users[] = "<optgroup label='Users'>";
-$groups[] = "<optgroup label='Groups'>";
-if(OCP\Config::getAppValue('files_sharing', 'allowSharingWithEveryone', 'no') == 'yes') {
- $allGroups = OC_Group::getGroups();
- foreach($allGroups as $group) {
- $groups[] = "<option value='".$group."(group)'>".$group." (group) </option>";
- }
- $allUsers = OC_User::getUsers();
- foreach($allUsers as $user) {
- if($user != $self) {
- $users[] = "<option value='".$user."'>".$user."</option>";
- }
- }
-} else {
- $userGroups = OC_Group::getUserGroups($self);
- foreach ($userGroups as $group) {
- $groupUsers = OC_Group::usersInGroup($group);
- $userCount = 0;
- foreach ($groupUsers as $user) {
- if ($user != $self) {
- $users[] = "<option value='".$user."'>".$user."</option>";
- $userCount++;
- }
- }
- // Don't include the group if only the current user is a member of it
- if ($userCount > 0) {
- $groups[] = "<option value='".$group."(group)'>".$group." (group) </option>";
- }
- }
- $users = array_unique($users);
-}
-$users[] = "</optgroup>";
-$groups[] = "</optgroup>";
-$users = array_merge($users, $groups);
-OCP\JSON::encodedPrint($users);
-
-?>
diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php
index ea3a9da6f7a..109f86b2e87 100644
--- a/apps/files_sharing/appinfo/app.php
+++ b/apps/files_sharing/appinfo/app.php
@@ -1,19 +1,9 @@
<?php
-require_once('apps/files_sharing/sharedstorage.php');
-
-OC::$CLASSPATH['OC_Share'] = "apps/files_sharing/lib_share.php";
-OCP\App::registerAdmin('files_sharing', 'settings');
-OCP\Util::connectHook("OC_Filesystem", "post_delete", "OC_Share", "deleteItem");
-OCP\Util::connectHook("OC_Filesystem", "post_rename", "OC_Share", "renameItem");
-OCP\Util::connectHook("OC_Filesystem", "post_write", "OC_Share", "updateItem");
-OCP\Util::connectHook('OC_User', 'post_deleteUser', 'OC_Share', 'removeUser');
-OCP\Util::connectHook('OC_User', 'post_addToGroup', 'OC_Share', 'addToGroupShare');
-OCP\Util::connectHook('OC_User', 'post_removeFromGroup', 'OC_Share', 'removeFromGroupShare');
-$dir = isset($_GET['dir']) ? $_GET['dir'] : '/';
-if ($dir != '/Shared' || OCP\Config::getAppValue('files_sharing', 'resharing', 'yes') == 'yes') {
- OCP\Util::addscript("files_sharing", "share");
-}
-OCP\Util::addscript("3rdparty", "chosen/chosen.jquery.min");
-OCP\Util::addStyle( 'files_sharing', 'sharing' );
-OCP\Util::addStyle("3rdparty", "chosen/chosen");
+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');
+OCP\Share::registerBackend('file', 'OC_Share_Backend_File');
+OCP\Share::registerBackend('folder', 'OC_Share_Backend_Folder', 'file');
+OCP\Util::addScript('files_sharing', 'share');
diff --git a/apps/files_sharing/get.php b/apps/files_sharing/get.php
index e2fcb82750d..1d219719b2d 100644
--- a/apps/files_sharing/get.php
+++ b/apps/files_sharing/get.php
@@ -1,6 +1,4 @@
<?php
-$RUNTIME_NOSETUPFS=true; //don't setup the fs yet
-
// only need authentication apps
$RUNTIME_APPTYPES=array('authentication');
OC_App::loadApps($RUNTIME_APPTYPES);
@@ -61,7 +59,7 @@ if (isset($_GET['token']) && $source = OC_Share::getSource($_GET['token'])) {
$list->assign("downloadURL", OCP\Util::linkTo("", "public.php")."?service=files&token=".$token."&path=");
$list->assign("readonly", true);
$tmpl = new OCP\Template("files", "index", "user");
- $tmpl->assign("fileList", $list->fetchPage());
+ $tmpl->assign("fileList", $list->fetchPage(), false);
$tmpl->assign("breadcrumb", $breadcrumbNav->fetchPage());
$tmpl->assign("readonly", true);
$tmpl->assign("allowZipDownload", false);
@@ -77,6 +75,7 @@ if (isset($_GET['token']) && $source = OC_Share::getSource($_GET['token'])) {
header("Content-Length: " . OC_Filesystem::filesize($source));
//download the file
@ob_clean();
+ OCP\Util::emitHook('OC_Share', 'public-download', array('source'=>$source, 'token'=>$token));
OC_Filesystem::readfile($source);
}
} else {
@@ -85,4 +84,3 @@ if (isset($_GET['token']) && $source = OC_Share::getSource($_GET['token'])) {
$tmpl->printPage();
die();
}
-?>
diff --git a/apps/files_sharing/js/list.js b/apps/files_sharing/js/list.js
deleted file mode 100644
index 41eabd1f4af..00000000000
--- a/apps/files_sharing/js/list.js
+++ /dev/null
@@ -1,54 +0,0 @@
-$(document).ready(function() {
- $( "#source" ).autocomplete({
- source: "../../files/ajax/autocomplete.php",
- minLength: 1
- });
- $( "#uid_shared_with" ).autocomplete({
- source: "ajax/userautocomplete.php",
- minLength: 1
- });
- $("button.delete").live('click', function( event ) {
- event.preventDefault();
-// var row=$(this);
- var source=$(this).attr('data-source');
- var uid_shared_with=$(this).attr('data-uid_shared_with');
- var data='source='+encodeURIComponent(source)+'&uid_shared_with='+encodeURIComponent(uid_shared_with);
- $.ajax({
- type: 'GET',
- url: 'ajax/unshare.php',
- cache: false,
- data: data
-// success: function(){
-// row.remove();
-// }
- });
- });
- $('#share_item').submit(function( event ){
- event.preventDefault();
- var source=$('#source').val();
- var uid_shared_with=$('#uid_shared_with').val();
- var permissions=$('#permissions').val()||0;
- var data='source='+source+'&uid_shared_with='+uid_shared_with+'&permissions='+permissions;
- $.ajax({
- type: 'GET',
- url: 'ajax/share.php',
- cache: false,
- data: data,
-// success: function(token){
-// if(token){
-// var html="<tr class='link' id='"+token+"'>";
-// html+="<td class='path'>"+path+"</td>";
-// var expire=($('#expire').val())?$('#expire').val():'Never'
-// html+="<td class='expire'>"+expire+"</td>"
-// html+="<td class='link'><a href='get.php?token="+token+"'>"+$('#baseUrl').val()+"?token="+token+"</a></td>"
-// html+="<td><button class='delete fancybutton' data-token='"+token+"'>Delete</button></td>"
-// html+="</tr>"
-// $(html).insertBefore($('#newlink_row'));
-// $('#expire').val('');
-// $('#expire_time').val('');
-// $('#path').val('');
-// }
-// }
- });
- });
-}); \ No newline at end of file
diff --git a/apps/files_sharing/js/settings.js b/apps/files_sharing/js/settings.js
deleted file mode 100644
index c276521b7b5..00000000000
--- a/apps/files_sharing/js/settings.js
+++ /dev/null
@@ -1,16 +0,0 @@
-$(document).ready(function() {
- $('#allowResharing').bind('change', function() {
- var checked = 1;
- if (!this.checked) {
- checked = 0;
- }
- $.post(OC.filePath('files_sharing','ajax','toggleresharing.php'), 'resharing='+checked);
- });
- $('#allowSharingWithEveryone').bind('change', function() {
- var checked = 1;
- if (!this.checked) {
- checked = 0;
- }
- $.post(OC.filePath('files_sharing','ajax','togglesharewitheveryone.php'), 'allowSharingWithEveryone='+checked);
- });
-}); \ No newline at end of file
diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js
index 1ad51873540..bcfd42ce21e 100644
--- a/apps/files_sharing/js/share.js
+++ b/apps/files_sharing/js/share.js
@@ -1,375 +1,64 @@
-OC.Share={
- icons:[],
- itemUsers:[],
- itemGroups:[],
- itemPrivateLink:false,
- usersAndGroups:[],
- loadIcons:function() {
- // Cache all icons for shared files
- $.getJSON(OC.filePath('files_sharing', 'ajax', 'getstatuses.php'), function(result) {
- if (result && result.status === 'success') {
- $.each(result.data, function(item, hasPrivateLink) {
- if (hasPrivateLink) {
- OC.Share.icons[item] = OC.imagePath('core', 'actions/public');
- } else {
- OC.Share.icons[item] = OC.imagePath('core', 'actions/shared');
- }
- });
- }
- });
- },
- loadItem:function(item) {
- $.ajax({type: 'GET', url: OC.filePath('files_sharing', 'ajax', 'getitem.php'), data: { item: item }, async: false, success: function(result) {
- if (result && result.status === 'success') {
- var item = result.data;
- OC.Share.itemUsers = item.users;
- OC.Share.itemGroups = item.groups;
- OC.Share.itemPrivateLink = item.privateLink;
- }
- }});
- },
- share:function(source, uid_shared_with, permissions, callback) {
- $.post(OC.filePath('files_sharing', 'ajax', 'share.php'), { sources: source, uid_shared_with: uid_shared_with, permissions: permissions }, function(result) {
- if (result && result.status === 'success') {
- if (callback) {
- callback(result.data);
- }
- } else {
- OC.dialogs.alert(result.data.message, 'Error while sharing');
- }
- });
- },
- unshare:function(source, uid_shared_with, callback) {
- $.post(OC.filePath('files_sharing', 'ajax', 'unshare.php'), { source: source, uid_shared_with: uid_shared_with }, function(result) {
- if (result && result.status === 'success') {
- if (callback) {
- callback();
- }
- } else {
- OC.dialogs.alert('Error', 'Error while unsharing');
- }
- });
- },
- changePermissions:function(source, uid_shared_with, permissions) {
- $.post(OC.filePath('files_sharing','ajax','setpermissions.php'), { source: source, uid_shared_with: uid_shared_with, permissions: permissions }, function(result) {
- if (!result || result.status !== 'success') {
- OC.dialogs.alert('Error', 'Error while changing permissions');
- }
- });
- },
- showDropDown:function(item, appendTo) {
- OC.Share.loadItem(item);
- var html = '<div id="dropdown" class="drop" data-item="'+item+'">';
- html += '<select data-placeholder="User or Group" id="share_with" class="chzen-select">';
- html += '<option value=""></option>';
- html += '</select>';
- html += '<div id="sharedWithList">';
- html += '<ul id="userList"></ul>';
- html += '<div id="groups" style="display:none;">';
- html += '<br />';
- html += 'Groups: ';
- html += '<ul id="groupList"></ul>';
- html += '</div>';
- html += '</div>';
- html += '<div id="privateLink">';
- html += '<input type="checkbox" name="privateLinkCheckbox" id="privateLinkCheckbox" value="1" /><label for="privateLinkCheckbox">Share with private link</label>';
- html += '<br />';
- html += '<form id="emailPrivateLink">';
- html += '<input id="privateLinkText" style="display:none; width:90%;" />';
- html += '<input id="email" style="display:none; width:65%;" value="" placeholder="Email link to person" />';
- html += '<input id="emailButton" style="display:none;" type="submit" value="Send" />';
- html += '</form>';
- html += '</div>';
- $(html).appendTo(appendTo);
- if (OC.Share.usersAndGroups.length < 1) {
- $.ajax({type: 'GET', url: OC.filePath('files_sharing', 'ajax', 'userautocomplete.php'), async: false, success: function(users) {
- if (users) {
- OC.Share.usersAndGroups = users;
- $.each(users, function(index, user) {
- $(user).appendTo('#share_with');
- });
- $('#share_with').trigger('liszt:updated');
- }
- }});
- } else {
- $.each(OC.Share.usersAndGroups, function(index, user) {
- $(user).appendTo('#share_with');
- });
- $('#share_with').trigger('liszt:updated');
- }
- if (OC.Share.itemUsers) {
- $.each(OC.Share.itemUsers, function(index, user) {
- if (user.parentFolder) {
- OC.Share.addSharedWith(user.uid, user.permissions, false, user.parentFolder);
- } else {
- OC.Share.addSharedWith(user.uid, user.permissions, false, false);
- }
- });
- }
- if (OC.Share.itemGroups) {
- $.each(OC.Share.itemGroups, function(index, group) {
- if (group.parentFolder) {
- OC.Share.addSharedWith(group.gid, group.permissions, group.users, group.parentFolder);
- } else {
- OC.Share.addSharedWith(group.gid, group.permissions, group.users, false);
- }
- });
- }
- if (OC.Share.itemPrivateLink) {
- OC.Share.showPrivateLink(item, OC.Share.itemPrivateLink);
- }
- $('#dropdown').show('blind');
- $('#share_with').chosen();
- },
- hideDropDown:function(callback) {
- $('#dropdown').hide('blind', function() {
- $('#dropdown').remove();
- if (callback) {
- callback.call();
- }
- });
- },
- addSharedWith:function(uid_shared_with, permissions, isGroup, parentFolder) {
- if (parentFolder) {
- var sharedWith = '<li>Parent folder '+parentFolder+' shared with '+uid_shared_with+'</li>';
- } else {
- var checked = ((permissions > 0) ? 'checked="checked"' : 'style="display:none;"');
- var style = ((permissions == 0) ? 'style="display:none;"' : '');
- var sharedWith = '<li data-uid_shared_with="'+uid_shared_with+'">';
- sharedWith += '<a href="" class="unshare" style="display:none;"><img class="svg" alt="Unshare" src="'+OC.imagePath('core','actions/delete')+'"/></a>';
- sharedWith += uid_shared_with;
- sharedWith += '<input type="checkbox" name="permissions" id="'+uid_shared_with+'" class="permissions" '+checked+' />';
- sharedWith += '<label class="edit" for="'+uid_shared_with+'" '+style+'>can edit</label>';
- sharedWith += '</li>';
- }
- if (isGroup) {
- // Groups are added to a different list
- $('#groups').show();
- $(sharedWith).appendTo('#groupList');
- // Remove group from select form
- $('#share_with option[value="'+uid_shared_with+'(group)"]').remove();
- $('#share_with').trigger('liszt:updated');
- // Remove users in group from select form
- $.each(isGroup, function(index, user) {
- $('#share_with option[value="'+user+'"]').remove();
- $('#share_with').trigger('liszt:updated');
- });
- } else {
- $(sharedWith).appendTo('#userList');
- // Remove user from select form
- $('#share_with option[value="'+uid_shared_with+'"]').remove();
- $('#share_with').trigger('liszt:updated');
- }
-
- },
- removeSharedWith:function(uid_shared_with) {
- var option;
- if ($('#userList li[data-uid_shared_with="'+uid_shared_with+'"]').length > 0) {
- $('#userList li[data-uid_shared_with="'+uid_shared_with+'"]').remove();
- option = '<option value="'+uid_shared_with+'">'+uid_shared_with+'</option>';
- } else if ($('#groupList li[data-uid_shared_with="'+uid_shared_with+'"]').length > 0) {
- $('#groupList li[data-uid_shared_with="'+uid_shared_with+'"]').remove();
- if ($('#groupList li').length < 1) {
- $('#groups').hide();
- }
- option = '<option value="'+uid_shared_with+'(group)">'+uid_shared_with+' (group)</option>';
- }
- $(option).appendTo('#share_with');
- $('#share_with').trigger('liszt:updated');
- },
- showPrivateLink:function(item, token) {
- $('#privateLinkCheckbox').attr('checked', true);
- var link = parent.location.protocol+'//'+location.host+OC.linkTo('', 'public.php')+'?service=files&token='+token;
- if (token.indexOf('&path=') == -1) {
- link += '&file=' + encodeURIComponent(item).replace(/%2F/g, '/');
- } else {
- // Disable checkbox if inside a shared parent folder
- $('#privateLinkCheckbox').attr('disabled', 'true');
- }
- $('#privateLinkText').val(link);
- $('#privateLinkText').show('blind', function() {
- $('#privateLinkText').after('<br id="emailBreak" />');
- $('#email').show();
- $('#emailButton').show();
- });
- },
- hidePrivateLink:function() {
- $('#privateLinkText').hide('blind');
- $('#emailBreak').remove();
- $('#email').hide();
- $('#emailButton').hide();
- },
- emailPrivateLink:function() {
- var link = $('#privateLinkText').val();
- var file = link.substr(link.lastIndexOf('/') + 1).replace(/%20/g, ' ');
- var email = $('#email').val();
- if (email != '') {
- $.post(OC.filePath('files_sharing', 'ajax', 'email.php'), { toaddress: email, link: link, file: file }, function(result) {
- if (result && result.status == 'success') {
- $('#email').css('font-weight', 'bold');
- $('#email').animate({ fontWeight: 'normal' }, 2000, function() {
- $(this).val('');
- }).val('Email sent');
- } else {
- OC.dialogs.alert(result.data.message, 'Error while sharing');
- }
- });
- }
- },
- dirname:function(path) {
- return path.replace(/\\/g,'/').replace(/\/[^\/]*$/, '');
- }
-}
-
$(document).ready(function() {
if (typeof FileActions !== 'undefined') {
- OC.Share.loadIcons();
- FileActions.register('all', 'Share', function(filename) {
+ OC.Share.loadIcons('file');
+ FileActions.register('all', 'Share', FileActions.PERMISSION_SHARE, function(filename) {
// Return the correct sharing icon
if (scanFiles.scanning) { return; } // workaround to prevent additional http request block scanning feedback
- var item = $('#dir').val() + '/' + filename;
- // Check if icon is in cache
- if (OC.Share.icons[item]) {
- return OC.Share.icons[item];
+ if ($('#dir').val() == '/') {
+ var item = $('#dir').val() + filename;
+ } else {
+ var item = $('#dir').val() + '/' + filename;
+ }
+ // Check if status is in cache
+ if (OC.Share.statuses[item] === true) {
+ return OC.imagePath('core', 'actions/public');
+ } else if (OC.Share.statuses[item] === false) {
+ return OC.imagePath('core', 'actions/shared');
} else {
var last = '';
var path = OC.Share.dirname(item);
// Search for possible parent folders that are shared
while (path != last) {
- if (OC.Share.icons[path]) {
- OC.Share.icons[item] = OC.Share.icons[path];
- return OC.Share.icons[item];
+ if (OC.Share.statuses[path] === true) {
+ return OC.imagePath('core', 'actions/public');
+ } else if (OC.Share.statuses[path] === false) {
+ return OC.imagePath('core', 'actions/shared');
}
last = path;
path = OC.Share.dirname(path);
}
- OC.Share.icons[item] = OC.imagePath('core', 'actions/share');
- return OC.Share.icons[item];
+ return OC.imagePath('core', 'actions/share');
}
}, function(filename) {
- var file = $('#dir').val() + '/' + filename;
- var appendTo = $('tr').filterAttr('data-file',filename).find('td.filename');
+ if ($('#dir').val() == '/') {
+ var item = $('#dir').val() + filename;
+ } else {
+ var item = $('#dir').val() + '/' + filename;
+ }
+ if ($('tr').filterAttr('data-file', filename).data('type') == 'dir') {
+ var itemType = 'folder';
+ var possiblePermissions = OC.Share.PERMISSION_CREATE | OC.Share.PERMISSION_UPDATE | OC.Share.PERMISSION_DELETE | OC.Share.PERMISSION_SHARE;
+ } else {
+ var itemType = 'file';
+ var possiblePermissions = OC.Share.PERMISSION_UPDATE | OC.Share.PERMISSION_DELETE | OC.Share.PERMISSION_SHARE;
+ }
+ var appendTo = $('tr').filterAttr('data-file', filename).find('td.filename');
// Check if drop down is already visible for a different file
- if (($('#dropdown').length > 0)) {
- if (file != $('#dropdown').data('item')) {
+ if (OC.Share.droppedDown) {
+ if (item != $('#dropdown').data('item')) {
OC.Share.hideDropDown(function () {
- $('tr').removeClass('mouseOver');
- $('tr').filterAttr('data-file',filename).addClass('mouseOver');
- OC.Share.showDropDown(file, appendTo);
+ $('tr').filterAttr('data-file', filename).addClass('mouseOver');
+ OC.Share.showDropDown(itemType, item, appendTo, true, possiblePermissions);
});
+ } else {
+ OC.Share.hideDropDown();
}
} else {
$('tr').filterAttr('data-file',filename).addClass('mouseOver');
- OC.Share.showDropDown(file, appendTo);
+ OC.Share.showDropDown(itemType, item, appendTo, true, possiblePermissions);
}
});
- };
-
- $(this).click(function(event) {
- if (!($(event.target).hasClass('drop')) && $(event.target).parents().index($('#dropdown')) == -1) {
- if ($('#dropdown').is(':visible')) {
- OC.Share.hideDropDown(function() {
- $('tr').removeClass('mouseOver');
- });
- }
- }
- });
-
- $('#sharedWithList li').live('mouseenter', function(event) {
- // Show permissions and unshare button
- $(':hidden', this).show();
- });
-
- $('#sharedWithList li').live('mouseleave', function(event) {
- // Hide permissions and unshare button
- $('a', this).hide();
- if (!$('input:[type=checkbox]', this).is(':checked')) {
- $('input:[type=checkbox]', this).hide();
- $('label', this).hide();
- }
- });
-
- $('#share_with').live('change', function() {
- var item = $('#dropdown').data('item');
- var uid_shared_with = $(this).val();
- var pos = uid_shared_with.indexOf('(group)');
- var isGroup = false;
- if (pos != -1) {
- // Remove '(group)' from uid_shared_with
- uid_shared_with = uid_shared_with.substr(0, pos);
- isGroup = true;
- }
- OC.Share.share(item, uid_shared_with, 0, function() {
- if (isGroup) {
- // Reload item because we don't know which users are in the group
- OC.Share.loadItem(item);
- var users;
- $.each(OC.Share.itemGroups, function(index, group) {
- if (group.gid == uid_shared_with) {
- users = group.users;
- }
- });
- OC.Share.addSharedWith(uid_shared_with, 0, users, false);
- } else {
- OC.Share.addSharedWith(uid_shared_with, 0, false, false);
- }
- // Change icon
- if (!OC.Share.itemPrivateLink) {
- OC.Share.icons[item] = OC.imagePath('core', 'actions/shared');
- }
- });
- });
-
- $('.unshare').live('click', function() {
- var item = $('#dropdown').data('item');
- var uid_shared_with = $(this).parent().data('uid_shared_with');
- OC.Share.unshare(item, uid_shared_with, function() {
- OC.Share.removeSharedWith(uid_shared_with);
- // Reload item to update cached users and groups for the icon check
- OC.Share.loadItem(item);
- // Change icon
- if (!OC.Share.itemPrivateLink && !OC.Share.itemUsers && !OC.Share.itemGroups) {
- OC.Share.icons[item] = OC.imagePath('core', 'actions/share');
- }
- });
- });
-
- $('.permissions').live('change', function() {
- var permissions = (this.checked) ? 1 : 0;
- OC.Share.changePermissions($('#dropdown').data('item'), $(this).parent().data('uid_shared_with'), permissions);
- });
-
- $('#privateLinkCheckbox').live('change', function() {
- var item = $('#dropdown').data('item');
- if (this.checked) {
- // Create a private link
- OC.Share.share(item, 'public', 0, function(token) {
- OC.Share.showPrivateLink(item, token);
- // Change icon
- OC.Share.icons[item] = OC.imagePath('core', 'actions/public');
- });
- } else {
- // Delete private link
- OC.Share.unshare(item, 'public', function() {
- OC.Share.hidePrivateLink();
- // Change icon
- if (OC.Share.itemUsers || OC.Share.itemGroups) {
- OC.Share.icons[item] = OC.imagePath('core', 'actions/shared');
- } else {
- OC.Share.icons[item] = OC.imagePath('core', 'actions/share');
- }
- });
- }
- });
-
- $('#privateLinkText').live('click', function() {
- $(this).focus();
- $(this).select();
- });
+ }
- $('#emailPrivateLink').live('submit', function(event) {
- event.preventDefault();
- OC.Share.emailPrivateLink();
- });
}); \ No newline at end of file
diff --git a/apps/files_sharing/l10n/.gitkeep b/apps/files_sharing/l10n/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/apps/files_sharing/l10n/.gitkeep
diff --git a/apps/files_sharing/l10n/ca.php b/apps/files_sharing/l10n/ca.php
new file mode 100644
index 00000000000..6931389b9c9
--- /dev/null
+++ b/apps/files_sharing/l10n/ca.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Size" => "Mida",
+"Modified" => "Modificat",
+"Delete all" => "Esborra-ho tot",
+"Delete" => "Elimina"
+);
diff --git a/apps/files_sharing/l10n/cs_CZ.php b/apps/files_sharing/l10n/cs_CZ.php
new file mode 100644
index 00000000000..7c5828a6136
--- /dev/null
+++ b/apps/files_sharing/l10n/cs_CZ.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Size" => "Velikost",
+"Modified" => "Upraveno",
+"Delete all" => "Smazat vše",
+"Delete" => "Smazat"
+);
diff --git a/apps/files_sharing/l10n/de.php b/apps/files_sharing/l10n/de.php
new file mode 100644
index 00000000000..d42383b43b0
--- /dev/null
+++ b/apps/files_sharing/l10n/de.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Size" => "Größe",
+"Modified" => "Geändert",
+"Delete all" => "Alle löschen",
+"Delete" => "Löschen"
+);
diff --git a/apps/files_sharing/l10n/el.php b/apps/files_sharing/l10n/el.php
new file mode 100644
index 00000000000..63f4c61204a
--- /dev/null
+++ b/apps/files_sharing/l10n/el.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Size" => "Μέγεθος",
+"Modified" => "ΤÏοποποιήθηκε",
+"Delete all" => "ΔιαγÏαφή όλων",
+"Delete" => "ΔιαγÏαφή"
+);
diff --git a/apps/files_sharing/l10n/eo.php b/apps/files_sharing/l10n/eo.php
new file mode 100644
index 00000000000..81a8dcb1525
--- /dev/null
+++ b/apps/files_sharing/l10n/eo.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Delete" => "Forigi"
+);
diff --git a/apps/files_sharing/l10n/es.php b/apps/files_sharing/l10n/es.php
new file mode 100644
index 00000000000..85f880927d6
--- /dev/null
+++ b/apps/files_sharing/l10n/es.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Size" => "Tamaño",
+"Modified" => "Modificado",
+"Delete all" => "Eliminar todo",
+"Delete" => "Eliminar"
+);
diff --git a/apps/files_sharing/l10n/et_EE.php b/apps/files_sharing/l10n/et_EE.php
new file mode 100644
index 00000000000..da299f4ff70
--- /dev/null
+++ b/apps/files_sharing/l10n/et_EE.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Delete" => "Kustutamine"
+);
diff --git a/apps/files_sharing/l10n/fa.php b/apps/files_sharing/l10n/fa.php
new file mode 100644
index 00000000000..06e1862e8b3
--- /dev/null
+++ b/apps/files_sharing/l10n/fa.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Size" => "اندازه",
+"Modified" => "تاریخ",
+"Delete all" => "حذ٠همه",
+"Delete" => "حذÙ"
+);
diff --git a/apps/files_sharing/l10n/fi_FI.php b/apps/files_sharing/l10n/fi_FI.php
new file mode 100644
index 00000000000..ca7928aeecb
--- /dev/null
+++ b/apps/files_sharing/l10n/fi_FI.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Size" => "Koko",
+"Modified" => "Muokattu",
+"Delete all" => "Poista kaikki",
+"Delete" => "Poista"
+);
diff --git a/apps/files_sharing/l10n/fr.php b/apps/files_sharing/l10n/fr.php
new file mode 100644
index 00000000000..5a90331e422
--- /dev/null
+++ b/apps/files_sharing/l10n/fr.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Size" => "Taille",
+"Modified" => "Modifié",
+"Delete all" => "Tout effacer",
+"Delete" => "Effacement"
+);
diff --git a/apps/files_sharing/l10n/it.php b/apps/files_sharing/l10n/it.php
new file mode 100644
index 00000000000..7f91b856783
--- /dev/null
+++ b/apps/files_sharing/l10n/it.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Size" => "Dimensione",
+"Modified" => "Modificato",
+"Delete all" => "Elimina tutto",
+"Delete" => "Eliminazione"
+);
diff --git a/apps/files_sharing/l10n/ja_JP.php b/apps/files_sharing/l10n/ja_JP.php
new file mode 100644
index 00000000000..9fca88d0a33
--- /dev/null
+++ b/apps/files_sharing/l10n/ja_JP.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Size" => "サイズ",
+"Modified" => "変更",
+"Delete all" => "ã™ã¹ã¦å‰Šé™¤",
+"Delete" => "削除"
+);
diff --git a/apps/files_sharing/l10n/lt_LT.php b/apps/files_sharing/l10n/lt_LT.php
new file mode 100644
index 00000000000..d21a3c14f40
--- /dev/null
+++ b/apps/files_sharing/l10n/lt_LT.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Size" => "Dydis",
+"Modified" => "Pakeista",
+"Delete all" => "IÅ¡trinti viskÄ…",
+"Delete" => "IÅ¡trinti"
+);
diff --git a/apps/files_sharing/l10n/nb_NO.php b/apps/files_sharing/l10n/nb_NO.php
new file mode 100644
index 00000000000..6102b03db74
--- /dev/null
+++ b/apps/files_sharing/l10n/nb_NO.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Size" => "Størrelse",
+"Modified" => "Endret",
+"Delete all" => "Slett alle",
+"Delete" => "Slett"
+);
diff --git a/apps/files_sharing/l10n/pl.php b/apps/files_sharing/l10n/pl.php
new file mode 100644
index 00000000000..7f612126b93
--- /dev/null
+++ b/apps/files_sharing/l10n/pl.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Size" => "Rozmiar",
+"Modified" => "Zmodyfikowane",
+"Delete all" => "Usuń wszystko",
+"Delete" => "Usuń"
+);
diff --git a/apps/files_sharing/l10n/sl.php b/apps/files_sharing/l10n/sl.php
new file mode 100644
index 00000000000..485ab7a85ac
--- /dev/null
+++ b/apps/files_sharing/l10n/sl.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Size" => "Velikost",
+"Modified" => "Spremenjeno",
+"Delete all" => "Izbriši vse",
+"Delete" => "Izbris"
+);
diff --git a/apps/files_sharing/l10n/sv.php b/apps/files_sharing/l10n/sv.php
new file mode 100644
index 00000000000..5a2cda43686
--- /dev/null
+++ b/apps/files_sharing/l10n/sv.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Size" => "Storlek",
+"Modified" => "Ändrad",
+"Delete all" => "Radera alla",
+"Delete" => "Radera"
+);
diff --git a/apps/files_sharing/l10n/th_TH.php b/apps/files_sharing/l10n/th_TH.php
new file mode 100644
index 00000000000..3f8908a91a3
--- /dev/null
+++ b/apps/files_sharing/l10n/th_TH.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Size" => "ขนาด",
+"Modified" => "à¹à¸à¹‰à¹„ขà¹à¸¥à¹‰à¸§",
+"Delete all" => "ลบทั้งหมด",
+"Delete" => "ลบ"
+);
diff --git a/apps/files_sharing/lib/share/file.php b/apps/files_sharing/lib/share/file.php
new file mode 100644
index 00000000000..ae6315600f8
--- /dev/null
+++ b/apps/files_sharing/lib/share/file.php
@@ -0,0 +1,91 @@
+<?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/>.
+*/
+
+class OC_Share_Backend_File implements OCP\Share_Backend_File_Dependent {
+
+ const FORMAT_SHARED_STORAGE = 0;
+ const FORMAT_FILE_APP = 1;
+ const FORMAT_FILE_APP_ROOT = 2;
+ const FORMAT_OPENDIR = 3;
+
+ public function isValidSource($item, $uid) {
+ if (OC_Filesystem::file_exists($item)) {
+ return true;
+ }
+ return false;
+ }
+
+ public function getFilePath($item, $uid) {
+ return $item;
+ }
+
+ public function generateTarget($item, $uid, $exclude = null) {
+ // TODO Make sure target path doesn't exist already
+ return $item;
+ }
+
+ 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)]['file_source'], 'permissions' => $items[key($items)]['permissions']);
+ } else if ($format == self::FORMAT_FILE_APP) {
+ $files = array();
+ foreach ($items as $item) {
+ $file = array();
+ $file['path'] = $item['file_target'];
+ $file['name'] = basename($item['file_target']);
+ $file['ctime'] = $item['ctime'];
+ $file['mtime'] = $item['mtime'];
+ $file['mimetype'] = $item['mimetype'];
+ $file['size'] = $item['size'];
+ $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\Share::PERMISSION_CREATE;
+ }
+ $files[] = $file;
+ }
+ return $files;
+ } else if ($format == self::FORMAT_FILE_APP_ROOT) {
+ $mtime = 0;
+ $size = 0;
+ foreach ($items as $item) {
+ if ($item['mtime'] > $mtime) {
+ $mtime = $item['mtime'];
+ }
+ $size += $item['size'];
+ }
+ return array(0 => array('name' => 'Shared', 'mtime' => $mtime, 'mimetype' => 'httpd/unix-directory', 'size' => $size, 'writable' => false, 'type' => 'dir', 'directory' => '', 'permissions' => OCP\Share::PERMISSION_READ));
+ } else if ($format == self::FORMAT_OPENDIR) {
+ $files = array();
+ foreach ($items as $item) {
+ $files[] = basename($item['file_target']);
+ }
+ return $files;
+ }
+ return array();
+ }
+
+} \ No newline at end of file
diff --git a/apps/files_sharing/lib/share/folder.php b/apps/files_sharing/lib/share/folder.php
new file mode 100644
index 00000000000..b6db96614fd
--- /dev/null
+++ b/apps/files_sharing/lib/share/folder.php
@@ -0,0 +1,61 @@
+<?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/>.
+*/
+
+class OC_Share_Backend_Folder extends OC_Share_Backend_File {
+
+ 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)]['file_source'], '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['file_source'].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\Share::PERMISSION_CREATE;
+ }
+ }
+ return $files;
+ }
+ return array();
+ }
+
+ public function getChildren($itemSource) {
+ $files = OC_FileCache::getFolderContent($itemSource);
+ $sources = array();
+ foreach ($files as $file) {
+ $sources[] = $file['path'];
+ }
+ return $sources;
+ }
+
+} \ No newline at end of file
diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php
new file mode 100644
index 00000000000..582c9c66172
--- /dev/null
+++ b/apps/files_sharing/lib/sharedstorage.php
@@ -0,0 +1,427 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Michael Gapczynski
+ * @copyright 2011 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/>.
+ *
+ */
+
+/**
+ * Convert target path to source path and pass the function call to the correct storage provider
+ */
+class OC_Filestorage_Shared extends OC_Filestorage_Common {
+
+ private $sharedFolder;
+ private $files = array();
+
+ public function __construct($arguments) {
+ $this->sharedFolder = $arguments['sharedFolder'];
+ }
+
+ /**
+ * @brief Get the source file path and the permissions granted for a shared file
+ * @param string Shared target file path
+ * @return Returns array with the keys path and permissions 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];
+ }
+ }
+ OCP\Util::writeLog('files_sharing', 'File source not found for: '.$target, OCP\Util::ERROR);
+ return false;
+ }
+ }
+
+ /**
+ * @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
+ */
+ private function getSourcePath($target) {
+ $file = $this->getFile($target);
+ if (isset($file['path'])) {
+ return $file['path'];
+ }
+ return false;
+ }
+
+ /**
+ * @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
+ */
+ private function getPermissions($target) {
+ $file = $this->getFile($target);
+ if (isset($file['permissions'])) {
+ return $file['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 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));
+ }
+ 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));
+ }
+ 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;
+ return opendir('fakedir://shared');
+ } else if ($source = $this->getSourcePath($path)) {
+ $storage = OC_Filesystem::getStorage($source);
+ return $storage->opendir($this->getInternalPath($source));
+ }
+ return false;
+ }
+
+ public function is_dir($path) {
+ if ($path == '' || $path == '/') {
+ return true;
+ } else if ($source = $this->getSourcePath($path)) {
+ $storage = OC_Filesystem::getStorage($source);
+ return $storage->is_dir($this->getInternalPath($source));
+ }
+ return false;
+ }
+
+ public function is_file($path) {
+ if ($source = $this->getSourcePath($path)) {
+ $storage = OC_Filesystem::getStorage($source);
+ return $storage->is_file($this->getInternalPath($source));
+ }
+ return false;
+ }
+
+ public function stat($path) {
+ 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));
+ }
+ return false;
+ }
+
+ public function filetype($path) {
+ if ($path == '' || $path == '/') {
+ return 'dir';
+ } else if ($source = $this->getSourcePath($path)) {
+ $storage = OC_Filesystem::getStorage($source);
+ return $storage->filetype($this->getInternalPath($source));
+ }
+ return false;
+ }
+
+ public function filesize($path) {
+ 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));
+ }
+ return false;
+ }
+
+ public function isCreatable($path) {
+ if ($path == '') {
+ return false;
+ }
+ return ($this->getPermissions($path) & OCP\Share::PERMISSION_CREATE);
+ }
+
+ public function isReadable($path) {
+ return $this->file_exists($path);
+ }
+
+ public function isUpdatable($path) {
+ if ($path == '') {
+ return false;
+ }
+ return ($this->getPermissions($path) & OCP\Share::PERMISSION_UPDATE);
+ }
+
+ public function isDeletable($path) {
+ if ($path == '') {
+ return false;
+ }
+ return ($this->getPermissions($path) & OCP\Share::PERMISSION_DELETE);
+ }
+
+ public function isSharable($path) {
+ if ($path == '') {
+ return false;
+ }
+ return ($this->getPermissions($path) & OCP\Share::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));
+ }
+ 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;
+ if ($dh = $this->opendir($path)) {
+ while (($filename = readdir($dh)) !== false) {
+ $tempmtime = $this->filemtime($filename);
+ if ($tempmtime > $mtime) {
+ $mtime = $tempmtime;
+ }
+ }
+ }
+ return $mtime;
+ } else {
+ $source = $this->getSourcePath($path);
+ if ($source) {
+ $storage = OC_Filesystem::getStorage($source);
+ return $storage->filemtime($this->getInternalPath($source));
+ }
+ }
+ }
+
+ public function file_get_contents($path) {
+ $source = $this->getSourcePath($path);
+ if ($source) {
+ $info = array(
+ '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));
+ }
+ }
+
+ public function file_put_contents($path, $data) {
+ if ($source = $this->getSourcePath($path)) {
+ // Check if permission is granted
+ if (($this->file_exists($path) && !$this->isUpdatable($path)) || ($this->is_dir($path) && !$this->isCreatable($path))) {
+ return false;
+ }
+ $info = array(
+ '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);
+ return $result;
+ }
+ return false;
+ }
+
+ public function unlink($path) {
+ // Delete the file if DELETE permission is granted
+ if (($source = $this->getSourcePath($path)) && $this->isDeletable($path)) {
+ $storage = OC_Filesystem::getStorage($source);
+ return $storage->unlink($this->getInternalPath($source));
+ }
+ return false;
+ }
+
+ public function rename($path1, $path2) {
+ if ($oldSource = $this->getSourcePath($path1)) {
+ $root1 = substr($path1, 0, strpos($path1, '/'));
+ $root2 = substr($path2, 0, strpos($path2, '/'));
+ // Moving/renaming is only allowed within the same shared folder
+ if ($root1 == $root2) {
+ $storage = OC_Filesystem::getStorage($oldSource);
+ $newSource = substr($oldSource, 0, strpos($oldSource, $root1)).$path2;
+ if (dirname($path1) == dirname($path2)) {
+ // Rename the file if UPDATE permission is granted
+ if ($this->isUpdatable($path1)) {
+ return $storage->rename($this->getInternalPath($oldSource), $this->getInternalPath($newSource));
+ }
+ // Move the file if DELETE and CREATE permissions are granted
+ } else if ($this->isDeletable($path1) && $this->isCreatable(dirname($path2))) {
+ return $storage->rename($this->getInternalPath($oldSource), $this->getInternalPath($newSource));
+ }
+ }
+ }
+ return false;
+ }
+
+ public function copy($path1, $path2) {
+ // Copy the file if CREATE permission is granted
+ if (($source = $this->getSourcePath($path1)) && $this->isCreatable(dirname($path2))) {
+ $source = $this->fopen($path1, 'r');
+ $target = $this->fopen($path2, 'w');
+ return OC_Helper::streamCopy($source, $target);
+ }
+ return true;
+ }
+
+ public function fopen($path, $mode) {
+ if ($source = $this->getSourcePath($path)) {
+ switch ($mode) {
+ case 'r+':
+ case 'rb+':
+ case 'w+':
+ case 'wb+':
+ case 'x+':
+ case 'xb+':
+ case 'a+':
+ case 'ab+':
+ case 'w':
+ case 'wb':
+ case 'x':
+ case 'xb':
+ case 'a':
+ case 'ab':
+ if (!$this->isUpdatable($path)) {
+ return false;
+ }
+ }
+ $info = array(
+ 'target' => $this->sharedFolder.$path,
+ 'source' => $source,
+ 'mode' => $mode,
+ );
+ OCP\Util::emitHook('OC_Filestorage_Shared', 'fopen', $info);
+ $storage = OC_Filesystem::getStorage($source);
+ return $storage->fopen($this->getInternalPath($source), $mode);
+ }
+ return false;
+ }
+
+ public function getMimeType($path) {
+ if ($path == '' || $path == '/') {
+ return 'httpd/unix-directory';
+ }
+ if ($source = $this->getSourcePath($path)) {
+ $storage = OC_Filesystem::getStorage($source);
+ return $storage->getMimeType($this->getInternalPath($source));
+ }
+ return false;
+ }
+
+ public function free_space($path) {
+ $source = $this->getSourcePath($path);
+ if ($source) {
+ $storage = OC_Filesystem::getStorage($source);
+ return $storage->free_space($this->getInternalPath($source));
+ }
+ }
+
+ public function getLocalFile($path) {
+ if ($source = $this->getSourcePath($path)) {
+ $storage = OC_Filesystem::getStorage($source);
+ return $storage->getLocalFile($this->getInternalPath($source));
+ }
+ 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);
+ }
+ return false;
+ }
+
+ public static function setup($options) {
+ $user_dir = $options['user_dir'];
+ OC_Filesystem::mount('OC_Filestorage_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
+ return false;
+ }
+}
diff --git a/apps/files_sharing/lib_share.php b/apps/files_sharing/lib_share.php
deleted file mode 100644
index fe312ad9ed7..00000000000
--- a/apps/files_sharing/lib_share.php
+++ /dev/null
@@ -1,523 +0,0 @@
-<?php
-/**
- * ownCloud
- *
- * @author Michael Gapczynski
- * @copyright 2011 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/>.
- *
- */
-
-/**
- * This class manages shared items within the database.
- */
-class OC_Share {
-
- const WRITE = 1;
- const DELETE = 2;
- const UNSHARED = -1;
- const PUBLICLINK = "public";
-
- private $token;
-
- /**
- * Share an item, adds an entry into the database
- * @param $source The source location of the item
- * @param $uid_shared_with The user or group to share the item with
- * @param $permissions The permissions, use the constants WRITE and DELETE
- */
- public function __construct($source, $uid_shared_with, $permissions) {
- $uid_owner = OCP\USER::getUser();
- $query = OCP\DB::prepare('INSERT INTO `*PREFIX*sharing` VALUES(?,?,?,?,?)');
- // Check if this is a reshare and use the original source
- if ($result = OC_Share::getSource($source)) {
- $source = $result;
- }
- if ($uid_shared_with == self::PUBLICLINK) {
- $token = sha1("$uid_shared_with-$source");
- $query->execute(array($uid_owner, self::PUBLICLINK, $source, $token, $permissions));
- $this->token = $token;
- } else {
- if (OC_Group::groupExists($uid_shared_with)) {
- $gid = $uid_shared_with;
- $uid_shared_with = OC_Group::usersInGroup($gid);
- // Remove the owner from the list of users in the group
- $uid_shared_with = array_diff($uid_shared_with, array($uid_owner));
- } else if (OCP\User::userExists($uid_shared_with)) {
- if(OCP\Config::getAppValue('files_sharing', 'allowSharingWithEveryone', 'no') == 'yes') {
- $gid = null;
- $uid_shared_with = array($uid_shared_with);
- } else {
- $userGroups = OC_Group::getUserGroups($uid_owner);
- // Check if the user is in one of the owner's groups
- foreach ($userGroups as $group) {
- if ($inGroup = OC_Group::inGroup($uid_shared_with, $group)) {
- $gid = null;
- $uid_shared_with = array($uid_shared_with);
- break;
- }
- }
- if (!$inGroup) {
- throw new Exception("You can't share with ".$uid_shared_with);
- }
- }
- } else {
- throw new Exception($uid_shared_with." is not a user");
- }
- foreach ($uid_shared_with as $uid) {
- // Check if this item is already shared with the user
- $checkSource = OCP\DB::prepare('SELECT `source` FROM `*PREFIX*sharing` WHERE `source` = ? AND `uid_shared_with` '.self::getUsersAndGroups($uid, false));
- $resultCheckSource = $checkSource->execute(array($source))->fetchAll();
- // TODO Check if the source is inside a folder
- if (count($resultCheckSource) > 0) {
- if (!isset($gid)) {
- throw new Exception("This item is already shared with ".$uid);
- } else {
- // Skip this user if sharing with a group
- continue;
- }
- }
- // Check if the target already exists for the user, if it does append a number to the name
- $sharedFolder = '/'.$uid.'/files/Shared';
- $target = $sharedFolder."/".basename($source);
- $checkTarget = OCP\DB::prepare('SELECT `source` FROM `*PREFIX*sharing` WHERE `target` = ? AND `uid_shared_with` '.self::getUsersAndGroups($uid, false),1);
- $result = $checkTarget->execute(array($target))->fetchAll();
- if (count($result) > 0) {
- if ($pos = strrpos($target, ".")) {
- $name = substr($target, 0, $pos);
- $ext = substr($target, $pos);
- } else {
- $name = $target;
- $ext = "";
- }
- $counter = 1;
- while (count($result) > 0) {
- $target = $name."_".$counter.$ext;
- $result = $checkTarget->execute(array($target))->fetchAll();
- $counter++;
- }
- }
- // Update mtime of shared folder to invoke a file cache rescan
- $rootView=new OC_FilesystemView('/');
- if (!$rootView->is_dir($sharedFolder)) {
- if (!$rootView->is_dir('/'.$uid.'/files')) {
- OC_Util::tearDownFS();
- OC_Util::setupFS($uid);
- OC_Util::tearDownFS();
- }
- $rootView->mkdir($sharedFolder);
- }
- $rootView->touch($sharedFolder);
- if (isset($gid)) {
- $uid = $uid."@".$gid;
- }
- $query->execute(array($uid_owner, $uid, $source, $target, $permissions));
- }
- }
- }
-
- /**
- * Remove any duplicate or trailing '/' from the path
- * @return A clean path
- */
- private static function cleanPath($path) {
- $path = rtrim($path, "/");
- return preg_replace('{(/)\1+}', "/", $path);
- }
-
- /**
- * Generate a string to be used for searching for uid_shared_with that handles both users and groups
- * @param $uid (Optional) The uid to get the user groups for, a gid to get the users in a group, or if not set the current user
- * @return An IN operator as a string
- */
- private static function getUsersAndGroups($uid = null, $includePrivateLinks = true) {
- $in = " IN(";
- if (isset($uid) && OC_Group::groupExists($uid)) {
- $users = OC_Group::usersInGroup($uid);
- foreach ($users as $user) {
- // Add a comma only if the the current element isn't the last
- if ($user !== end($users)) {
- $in .= "'".$user."@".$uid."', ";
- } else {
- $in .= "'".$user."@".$uid."'";
- }
- }
- } else if (isset($uid)) {
- // TODO Check if this is necessary, only constructor needs it as IN. It would be better for other queries to just return =$uid
- $in .= "'".$uid."'";
- $groups = OC_Group::getUserGroups($uid);
- foreach ($groups as $group) {
- $in .= ", '".$uid."@".$group."'";
- }
- } else {
- $uid = OCP\USER::getUser();
- $in .= "'".$uid."'";
- $groups = OC_Group::getUserGroups($uid);
- foreach ($groups as $group) {
- $in .= ", '".$uid."@".$group."'";
- }
- }
- if ($includePrivateLinks) {
- $in .= ", '".self::PUBLICLINK."'";
- }
- $in .= ")";
- return $in;
- }
-
- private static function updateFolder($uid_shared_with) {
- if ($uid_shared_with != self::PUBLICLINK) {
- if (OC_Group::groupExists($uid_shared_with)) {
- $uid_shared_with = OC_Group::usersInGroup($uid_shared_with);
- // Remove the owner from the list of users in the group
- $uid_shared_with = array_diff($uid_shared_with, array(OCP\USER::getUser()));
- } else {
- $pos = strrpos($uid_shared_with, '@');
- if ($pos !== false && OC_Group::groupExists(substr($uid_shared_with, $pos + 1))) {
- $uid_shared_with = array(substr($uid_shared_with, 0, $pos));
- } else {
- $uid_shared_with = array($uid_shared_with);
- }
- }
- foreach ($uid_shared_with as $uid) {
- $sharedFolder = $uid.'/files/Shared';
- // Update mtime of shared folder to invoke a file cache rescan
- $rootView = new OC_FilesystemView('/');
- $rootView->touch($sharedFolder);
- }
- }
- }
-
- /**
- * Create a new entry in the database for a file inside a shared folder
- *
- * $oldTarget and $newTarget may be the same value. $oldTarget exists in case the file is being moved outside of the folder
- *
- * @param $oldTarget The current target location
- * @param $newTarget The new target location
- */
- public static function pullOutOfFolder($oldTarget, $newTarget) {
- $folders = self::getParentFolders($oldTarget);
- $source = $folders['source'].substr($oldTarget, strlen($folders['target']));
- $item = self::getItem($folders['target']);
- $query = OCP\DB::prepare('INSERT INTO `*PREFIX*sharing` VALUES(?,?,?,?,?)');
- $query->execute(array($item[0]['uid_owner'], OCP\USER::getUser(), $source, $newTarget, $item[0]['permissions']));
- }
-
- /**
- * Get the item with the specified target location
- * @param $target The target location of the item
- * @return An array with the item
- */
- public static function getItem($target) {
- $target = self::cleanPath($target);
- $query = OCP\DB::prepare('SELECT `uid_owner`, `source`, `permissions` FROM `*PREFIX*sharing` WHERE `target` = ? AND `uid_shared_with` = ?',1);
- return $query->execute(array($target, OCP\USER::getUser()))->fetchAll();
- }
-
- /**
- * Get the item with the specified source location
- * @param $source The source location of the item
- * @return An array with the users and permissions the item is shared with
- */
- public static function getMySharedItem($source) {
- $source = self::cleanPath($source);
- $query = OCP\DB::prepare('SELECT `uid_shared_with`, `permissions` FROM `*PREFIX*sharing` WHERE `source` = ? AND `uid_owner` = ?');
- $result = $query->execute(array($source, OCP\USER::getUser()))->fetchAll();
- if (count($result) > 0) {
- return $result;
- } else if ($originalSource = self::getSource($source)) {
- return $query->execute(array($originalSource, OCP\USER::getUser()))->fetchAll();
- } else {
- return false;
- }
- }
-
- /**
- * Get all items the current user is sharing
- * @return An array with all items the user is sharing
- */
- public static function getMySharedItems() {
- $query = OCP\DB::prepare('SELECT `uid_shared_with`, `source`, `permissions` FROM `*PREFIX*sharing` WHERE `uid_owner` = ?');
- return $query->execute(array(OCP\USER::getUser()))->fetchAll();
- }
-
- /**
- * Get the items within a shared folder that have their own entry for the purpose of name, location, or permissions that differ from the folder itself
- *
- * Works for both target and source folders. Can be used for getting all items shared with you e.g. pass '/MTGap/files'
- *
- * @param $folder The folder of the items to look for
- * @return An array with all items in the database that are in the folder
- */
- public static function getItemsInFolder($folder) {
- $folder = self::cleanPath($folder);
- // Append '/' in order to filter out the folder itself if not already there
- if (substr($folder, -1) !== "/") {
- $folder .= "/";
- }
- $length = strlen($folder);
- $query = OCP\DB::prepare('SELECT `uid_owner`, `source`, `target`, `permissions` FROM `*PREFIX*sharing` WHERE SUBSTR(`source`, 1, ?) = ? OR SUBSTR(`target`, 1, ?) = ? AND `uid_shared_with` '.self::getUsersAndGroups());
- return $query->execute(array($length, $folder, $length, $folder))->fetchAll();
- }
-
- /**
- * Get the source and target parent folders of the specified target location
- * @param $target The target location of the item
- * @return An array with the keys 'source' and 'target' with the values of the source and target parent folders
- */
- public static function getParentFolders($target) {
- $target = self::cleanPath($target);
- $query = OCP\DB::prepare('SELECT `source` FROM `*PREFIX*sharing` WHERE `target` = ? AND `uid_shared_with` '.self::getUsersAndGroups(),1);
- // Prevent searching for user directory e.g. '/MTGap/files'
- $userDirectory = substr($target, 0, strpos($target, "files") + 5);
- $target = dirname($target);
- $result = array();
- while ($target != "" && $target != "/" && $target != "." && $target != $userDirectory && $target != "\\") {
- // Check if the parent directory of this target location is shared
- $result = $query->execute(array($target))->fetchAll();
- if (count($result) > 0) {
- break;
- }
- $target = dirname($target);
- }
- if (count($result) > 0) {
- // Return both the source folder and the target folder
- return array("source" => $result[0]['source'], "target" => $target);
- } else {
- return false;
- }
- }
-
- /**
- * Get the source location of the item at the specified target location
- * @param $target The target location of the item
- * @return Source location or false if target location is not valid
- */
- public static function getSource($target) {
- $target = self::cleanPath($target);
- $query = OCP\DB::prepare('SELECT `source` FROM `*PREFIX*sharing` WHERE `target` = ? AND `uid_shared_with` '.self::getUsersAndGroups(),1);
- $result = $query->execute(array($target))->fetchAll();
- if (count($result) > 0) {
- return $result[0]['source'];
- } else {
- $folders = self::getParentFolders($target);
- if ($folders == true) {
- return $folders['source'].substr($target, strlen($folders['target']));
- } else {
- return false;
- }
- }
-}
-
- public static function getTarget($source) {
- $source = self::cleanPath($source);
- $query = OCP\DB::prepare('SELECT `target` FROM `*PREFIX*sharing` WHERE `source` = ? AND `uid_owner` = ',1);
- $result = $query->execute(array($source, OCP\USER::getUser()))->fetchAll();
- if (count($result) > 0) {
- return $result[0]['target'];
- } else {
- // TODO Check in folders
- return false;
- }
- }
-
- /**
- * Get the user's permissions for the item at the specified target location
- * @param $target The target location of the item
- * @return The permissions, use bitwise operators to check against the constants WRITE and DELETE
- */
- public static function getPermissions($target) {
- $target = self::cleanPath($target);
- $query = OCP\DB::prepare('SELECT `permissions` FROM `*PREFIX*sharing` WHERE `target` = ? AND `uid_shared_with` '.self::getUsersAndGroups(),1);
- $result = $query->execute(array($target))->fetchAll();
- if (count($result) > 0) {
- return $result[0]['permissions'];
- } else {
- $folders = self::getParentFolders($target);
- if ($folders == true) {
- $result = $query->execute(array($folders['target']))->fetchAll();
- if (count($result) > 0) {
- return $result[0]['permissions'];
- }
- } else {
- OCP\Util::writeLog('files_sharing',"Not existing parent folder : ".$target,OCP\Util::ERROR);
- return false;
- }
- }
- }
-
- /**
- * Get the token for a public link
- * @return The token of the public link, a sha1 hash
- */
- public function getToken() {
- return $this->token;
- }
-
- /**
- * Get the token for a public link
- * @param $source The source location of the item
- * @return The token of the public link, a sha1 hash
- */
- public static function getTokenFromSource($source) {
- $query = OCP\DB::prepare('SELECT `target` FROM `*PREFIX*sharing` WHERE `source` = ? AND `uid_shared_with` = ? AND `uid_owner` = ?',1);
- $result = $query->execute(array($source, self::PUBLICLINK, OCP\USER::getUser()))->fetchAll();
- if (count($result) > 0) {
- return $result[0]['target'];
- } else {
- return false;
- }
- }
-
- /**
- * Set the target location to a new value
- *
- * You must use the pullOutOfFolder() function to change the target location of a file inside a shared folder if the target location differs from the folder
- *
- * @param $oldTarget The current target location
- * @param $newTarget The new target location
- */
- public static function setTarget($oldTarget, $newTarget) {
- $oldTarget = self::cleanPath($oldTarget);
- $newTarget = self::cleanPath($newTarget);
- $query = OCP\DB::prepare('UPDATE `*PREFIX*sharing` SET `target` = `REPLACE(`target`, ?, ?) WHERE `uid_shared_with` '.self::getUsersAndGroups());
- $query->execute(array($oldTarget, $newTarget));
- }
-
- /**
- * Change the permissions for the specified item and user
- *
- * You must construct a new shared item to change the permissions of a file inside a shared folder if the permissions differ from the folder
- *
- * @param $source The source location of the item
- * @param $uid_shared_with The user to change the permissions for
- * @param $permissions The permissions, use the constants WRITE and DELETE
- */
- public static function setPermissions($source, $uid_shared_with, $permissions) {
- $source = self::cleanPath($source);
- $query = OCP\DB::prepare('UPDATE `*PREFIX*sharing` SET `permissions` = ? WHERE SUBSTR(`source`, 1, ?) = ? AND `uid_owner` = ? AND `uid_shared_with` '.self::getUsersAndGroups($uid_shared_with));
- $query->execute(array($permissions, strlen($source), $source, OCP\USER::getUser()));
- }
-
- /**
- * Unshare the item, removes it from all specified users
- *
- * You must use the pullOutOfFolder() function to unshare a file inside a shared folder and set $newTarget to nothing
- *
- * @param $source The source location of the item
- * @param $uid_shared_with Array of users to unshare the item from
- */
- public static function unshare($source, $uid_shared_with) {
- $source = self::cleanPath($source);
- $uid_owner = OCP\USER::getUser();
- $query = OCP\DB::prepare('DELETE FROM `*PREFIX*sharing` WHERE SUBSTR(`source`, 1, ?) = ? AND `uid_owner` = ? AND `uid_shared_with` '.self::getUsersAndGroups($uid_shared_with, false));
- $query->execute(array(strlen($source), $source, $uid_owner));
- self::updateFolder($uid_shared_with);
- }
-
- /**
- * Unshare the item from the current user, removes it only from the database and doesn't touch the source file
- *
- * You must use the pullOutOfFolder() function before you call unshareFromMySelf() and set the delete parameter to false to unshare from self a file inside a shared folder
- *
- * @param $target The target location of the item
- * @param $delete (Optional) If true delete the entry from the database, if false the permission is set to UNSHARED
- */
- public static function unshareFromMySelf($target, $delete = true) {
- $target = self::cleanPath($target);
- if ($delete) {
- $query = OCP\DB::prepare('DELETE FROM `*PREFIX*sharing` WHERE SUBSTR(`target`, 1, ?) = ? AND `uid_shared_with` '.self::getUsersAndGroups());
- $query->execute(array(strlen($target), $target));
- } else {
- $query = OCP\DB::prepare('UPDATE `*PREFIX*sharing` SET `permissions` = ? WHERE SUBSTR(`target`, 1, ?) = ? AND `uid_shared_with` '.self::getUsersAndGroups());
- $query->execute(array(self::UNSHARED, strlen($target), $target));
- }
- }
-
- /**
- * Remove the item from the database, the owner deleted the file
- * @param $arguments Array of arguments passed from OC_Hook
- */
- public static function deleteItem($arguments) {
- $source = "/".OCP\USER::getUser()."/files".self::cleanPath($arguments['path']);
- $result = self::getMySharedItem($source);
- if (is_array($result)) {
- foreach ($result as $item) {
- self::updateFolder($item['uid_shared_with']);
- }
- }
- $query = OCP\DB::prepare('DELETE FROM `*PREFIX*sharing` WHERE SUBSTR(`source`, 1, ?) = ? AND `uid_owner` = ?');
- $query->execute(array(strlen($source), $source, OCP\USER::getUser()));
- }
-
- /**
- * Rename the item in the database, the owner renamed the file
- * @param $arguments Array of arguments passed from OC_Hook
- */
- public static function renameItem($arguments) {
- $oldSource = "/".OCP\USER::getUser()."/files".self::cleanPath($arguments['oldpath']);
- $newSource = "/".OCP\USER::getUser()."/files".self::cleanPath($arguments['newpath']);
- $query = OCP\DB::prepare('UPDATE `*PREFIX*sharing` SET `source` = REPLACE(`source`, ?, ?) WHERE `uid_owner` = ?');
- $query->execute(array($oldSource, $newSource, OCP\USER::getUser()));
- }
-
- public static function updateItem($arguments) {
- $source = "/".OCP\USER::getUser()."/files".self::cleanPath($arguments['path']);
- $result = self::getMySharedItem($source);
- if (is_array($result)) {
- foreach ($result as $item) {
- self::updateFolder($item['uid_shared_with']);
- }
- }
- }
-
- public static function removeUser($arguments) {
- $query = OCP\DB::prepare('SELECT `uid_shared_with` FROM `*PREFIX*sharing` WHERE `uid_owner` = ?');
- $result = $query->execute(array($arguments['uid']))->fetchAll();
- if (is_array($result)) {
- $result = array_unique($result);
- foreach ($result as $item) {
- self::updateFolder($item['uid_shared_with']);
- }
- $query = OCP\DB::prepare('DELETE FROM `*PREFIX*sharing` WHERE `uid_owner` = ? OR `uid_shared_with` '.self::getUsersAndGroups($arguments['uid']));
- $query->execute(array($arguments['uid']));
- }
- }
-
- public static function addToGroupShare($arguments) {
- $length = -strlen($arguments['gid']) - 1;
- $query = OCP\DB::prepare('SELECT `uid_owner`, `source`, `permissions` FROM `*PREFIX*sharing` WHERE SUBSTR(`uid_shared_with`, '.$length.') = ?');
- $gid = '@'.$arguments['gid'];
- $result = $query->execute(array($gid))->fetchAll();
- if (count($result) > 0) {
- $lastSource = '';
- for ($i = 0; $i < count($result) - 1; $i++) {
- if ($result[$i]['source'] != $lastSource) {
- new OC_Share($result[$i]['source'], $arguments['gid'], $result[$i]['permissions']);
- $lastSource = $result[$i]['source'];
- }
- }
- }
- }
-
- public static function removeFromGroupShare($arguments) {
- $query = OCP\DB::prepare('DELETE FROM `*PREFIX*sharing` WHERE `uid_shared_with` = ?');
- $query->execute(array($arguments['uid'].'@'.$arguments['gid']));
- self::updateFolder($arguments['uid']);
- }
-
-}
-
-?>
diff --git a/apps/files_sharing/settings.php b/apps/files_sharing/settings.php
deleted file mode 100644
index fcae7e0370f..00000000000
--- a/apps/files_sharing/settings.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-OCP\User::checkAdminUser();
-OCP\Util::addscript('files_sharing', 'settings');
-$tmpl = new OCP\Template('files_sharing', 'settings');
-$tmpl->assign('allowResharing', OCP\Config::getAppValue('files_sharing', 'resharing', 'yes'));
-$tmpl->assign('allowSharingWithEveryone', OCP\Config::getAppValue('files_sharing', 'allowSharingWithEveryone', 'no'));
-return $tmpl->fetchPage();
-
-?> \ No newline at end of file
diff --git a/apps/files_sharing/sharedstorage.php b/apps/files_sharing/sharedstorage.php
deleted file mode 100644
index a2dfe34402f..00000000000
--- a/apps/files_sharing/sharedstorage.php
+++ /dev/null
@@ -1,542 +0,0 @@
-<?php
-/**
- * ownCloud
- *
- * @author Michael Gapczynski
- * @copyright 2011 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/>.
- *
- */
-
-require_once( 'lib_share.php' );
-
-/**
- * Convert target path to source path and pass the function call to the correct storage provider
- */
-class OC_Filestorage_Shared extends OC_Filestorage {
-
- private $datadir;
- private $sourcePaths = array();
-
- public function __construct($arguments) {
- $this->datadir = $arguments['datadir'];
- $this->datadir .= "/";
- }
-
- public function getInternalPath($path) {
- $mountPoint = OC_Filesystem::getMountPoint($path);
- $internalPath = substr($path, strlen($mountPoint));
- return $internalPath;
- }
-
- public function getSource($target) {
- $target = $this->datadir.$target;
- if (array_key_exists($target, $this->sourcePaths)) {
- return $this->sourcePaths[$target];
- } else {
- $source = OC_Share::getSource($target);
- $this->sourcePaths[$target] = $source;
- return $source;
- }
- }
-
- public function mkdir($path) {
- if ($path == "" || $path == "/" || !$this->is_writable($path)) {
- return false;
- } else {
- $source = $this->getSource($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->mkdir($this->getInternalPath($source));
- }
- }
- }
-
- public function rmdir($path) {
- // The folder will be removed from the database, but won't be deleted from the owner's filesystem
- OC_Share::unshareFromMySelf($this->datadir.$path);
- $this->clearFolderSizeCache($path);
- }
-
- public function opendir($path) {
- if ($path == "" || $path == "/") {
- $path = $this->datadir.$path;
- $sharedItems = OC_Share::getItemsInFolder($path);
- $files = array();
- foreach ($sharedItems as $item) {
- // If item is in the root of the shared storage provider and the item exists add it to the fakedirs
- if (dirname($item['target'])."/" == $path && $this->file_exists(basename($item['target']))) {
- $files[] = basename($item['target']);
- }
- }
- OC_FakeDirStream::$dirs['shared'.$path] = $files;
- return opendir('fakedir://shared'.$path);
- } else {
- $source = $this->getSource($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- $dh = $storage->opendir($this->getInternalPath($source));
- $modifiedItems = OC_Share::getItemsInFolder($source);
- if ($modifiedItems && $dh) {
- $sources = array();
- $targets = array();
- // Remove any duplicate or trailing '/'
- $path = preg_replace('{(/)\1+}', "/", $path);
- $targetFolder = rtrim($this->datadir.$path, "/");
- foreach ($modifiedItems as $item) {
- // If the item is in the current directory and the item exists add it to the arrays
- if (dirname($item['target']) == $targetFolder && $this->file_exists($path."/".basename($item['target']))) {
- // If the item was unshared from self, add it it to the arrays
- if ($item['permissions'] == OC_Share::UNSHARED) {
- $sources[] = basename($item['source']);
- $targets[] = "";
- } else {
- $sources[] = basename($item['source']);
- $targets[] = basename($item['target']);
- }
- }
- }
- // Don't waste time if there aren't any modified items in the current directory
- if (empty($sources)) {
- return $dh;
- } else {
- global $FAKEDIRS;
- $files = array();
- while (($filename = readdir($dh)) !== false) {
- if ($filename != "." && $filename != "..") {
- // If the file isn't in the sources array it isn't modified and can be added as is
- if (!in_array($filename, $sources)) {
- $files[] = $filename;
- // The file has a different name than the source and is added to the fakedirs
- } else {
- $target = $targets[array_search($filename, $sources)];
- // Don't add the file if it was unshared from self by the user
- if ($target != "") {
- $files[] = $target;
- }
- }
- }
- }
- $FAKEDIRS['shared'] = $files;
- return opendir('fakedir://shared');
- }
- } else {
- return $dh;
- }
- }
- }
- }
-
- public function is_dir($path) {
- if ($path == "" || $path == "/") {
- return true;
- } else {
- $source = $this->getSource($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->is_dir($this->getInternalPath($source));
- }
- }
- }
-
- public function is_file($path) {
- $source = $this->getSource($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->is_file($this->getInternalPath($source));
- }
- }
-
- // TODO fill in other components of array
- public function stat($path) {
- if ($path == "" || $path == "/") {
- $stat["size"] = $this->filesize($path);
- $stat["mtime"] = $this->filemtime($path);
- $stat["ctime"] = $this->filectime($path);
- return $stat;
- } else {
- $source = $this->getSource($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->stat($this->getInternalPath($source));
- }
- }
- }
-
- public function filetype($path) {
- if ($path == "" || $path == "/") {
- return "dir";
- } else {
- $source = $this->getSource($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->filetype($this->getInternalPath($source));
- }
- }
-
- }
-
- public function filesize($path) {
- if ($path == "" || $path == "/" || $this->is_dir($path)) {
- return $this->getFolderSize($path);
- } else {
- $source = $this->getSource($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->filesize($this->getInternalPath($source));
- }
- }
- }
-
- public function getFolderSize($path) {
- return 0; //depricated
- }
-
- private function calculateFolderSize($path) {
- if ($this->is_file($path)) {
- $path = dirname($path);
- }
- $size = 0;
- if ($dh = $this->opendir($path)) {
- while (($filename = readdir($dh)) !== false) {
- if ($filename != "." && $filename != "..") {
- $subFile = $path."/".$filename;
- if ($this->is_file($subFile)) {
- $size += $this->filesize($subFile);
- } else {
- $size += $this->getFolderSize($subFile);
- }
- }
- }
- if ($size > 0) {
- $dbpath = rtrim($this->datadir.$path, "/");
-// $query = OCP\DB::prepare("INSERT INTO `*PREFIX*foldersize` VALUES(?,?)");
-// $result = $query->execute(array($dbpath, $size));
- }
- }
- return $size;
- }
-
- private function clearFolderSizeCache($path) {
- $path = rtrim($path, "/");
- $path = preg_replace('{(/)\1+}', "/", $path);
- if ($this->is_file($path)) {
- $path = dirname($path);
- }
- $dbpath = rtrim($this->datadir.$path, "/");
-// $query = OCP\DB::prepare("DELETE FROM `*PREFIX*/*foldersize*/` WHERE `path` = ?");
-// $result = $query->execute(array($dbpath));
- if ($path != "/" && $path != "") {
- $parts = explode("/", $path);
- $part = array_pop($parts);
- if (empty($part)) {
- array_pop($parts);
- }
- $parent = implode("/", $parts);
- $this->clearFolderSizeCache($parent);
- }
- }
-
- public function is_readable($path) {
- return true;
- }
-
- public function is_writable($path) {
- if($path == "" || $path == "/"){
- return false;
- }elseif (OC_Share::getPermissions($this->datadir.$path) & OC_Share::WRITE) {
- return true;
- } else {
- return false;
- }
- }
-
- public function file_exists($path) {
- if ($path == "" || $path == "/") {
- return true;
- } else {
- $source = $this->getSource($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->file_exists($this->getInternalPath($source));
- }
- }
- }
-
- 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->getSource($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->filectime($this->getInternalPath($source));
- }
- }
- }
-
- public function filemtime($path) {
- if ($path == "" || $path == "/") {
- $mtime = 0;
- if ($dh = $this->opendir($path)) {
- while (($filename = readdir($dh)) !== false) {
- $tempmtime = $this->filemtime($filename);
- if ($tempmtime > $mtime) {
- $mtime = $tempmtime;
- }
- }
- }
- return $mtime;
- } else {
- $source = $this->getSource($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->filemtime($this->getInternalPath($source));
- }
- }
- }
-
- public function file_get_contents($path) {
- $source = $this->getSource($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->file_get_contents($this->getInternalPath($source));
- }
- }
-
- public function file_put_contents($path, $data) {
- if ($this->is_writable($path)) {
- $source = $this->getSource($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- $result = $storage->file_put_contents($this->getInternalPath($source), $data);
- if ($result) {
- $this->clearFolderSizeCache($path);
- }
- return $result;
- }
- }
- }
-
- public function unlink($path) {
- // The item will be removed from the database, but won't be touched on the owner's filesystem
- $target = $this->datadir.$path;
- // Check if the item is inside a shared folder
- if (OC_Share::getParentFolders($target)) {
- // If entry for item already exists
- if (OC_Share::getItem($target)) {
- OC_Share::unshareFromMySelf($target, false);
- } else {
- OC_Share::pullOutOfFolder($target, $target);
- OC_Share::unshareFromMySelf($target, false);
- }
- // Delete the database entry
- } else {
- OC_Share::unshareFromMySelf($target);
- }
- $this->clearFolderSizeCache($this->getInternalPath($target));
- return true;
- }
-
- public function rename($path1, $path2) {
- $oldTarget = $this->datadir.$path1;
- $newTarget = $this->datadir.$path2;
- // Check if the item is inside a shared folder
- if ($folders = OC_Share::getParentFolders($oldTarget)) {
- $root1 = substr($path1, 0, strpos($path1, "/"));
- $root2 = substr($path1, 0, strpos($path2, "/"));
- // Prevent items from being moved into different shared folders until versioning (cut and paste) and prevent items going into 'Shared'
- if ($root1 !== $root2) {
- return false;
- // Check if both paths have write permission
- } else if ($this->is_writable($path1) && $this->is_writable($path2)) {
- $oldSource = $this->getSource($path1);
- $newSource = $folders['source'].substr($newTarget, strlen($folders['target']));
- if ($oldSource) {
- $storage = OC_Filesystem::getStorage($oldSource);
- return $storage->rename($this->getInternalPath($oldSource), $this->getInternalPath($newSource));
- }
- // If the user doesn't have write permission, items can only be renamed and not moved
- } else if (dirname($path1) !== dirname($path2)) {
- return false;
- // The item will be renamed in the database, but won't be touched on the owner's filesystem
- } else {
- OC_Share::pullOutOfFolder($oldTarget, $newTarget);
- // If this is a folder being renamed, call setTarget in case there are any database entries inside the folder
- if (self::is_dir($path1)) {
- OC_Share::setTarget($oldTarget, $newTarget);
- }
- }
- } else {
- OC_Share::setTarget($oldTarget, $newTarget);
- }
- $this->clearFolderSizeCache($this->getInternalPath($oldTarget));
- $this->clearFolderSizeCache($this->getInternalPath($newTarget));
- return true;
- }
-
- public function copy($path1, $path2) {
- if ($path2 == "" || $path2 == "/") {
- // TODO Construct new shared item or should this not be allowed?
- } else {
- if ($this->is_writable($path2)) {
- $tmpFile = $this->toTmpFile($path1);
- $result = $this->fromTmpFile($tmpFile, $path2);
- if ($result) {
- $this->clearFolderSizeCache($path2);
- }
- return $result;
- } else {
- return false;
- }
- }
- }
-
- public function fopen($path, $mode) {
- $source = $this->getSource($path);
- if ($source) {
- switch ($mode) {
- case 'r+':
- case 'rb+':
- case 'w+':
- case 'wb+':
- case 'x+':
- case 'xb+':
- case 'a+':
- case 'ab+':
- case 'w':
- case 'wb':
- case 'x':
- case 'xb':
- case 'a':
- case 'ab':
- if (!$this->is_writable($path)) {
- return false;
- }
- }
- $storage = OC_Filesystem::getStorage($source);
- return $storage->fopen($this->getInternalPath($source), $mode);
- }
- }
-
- public function toTmpFile($path) {
- $source = $this->getSource($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->toTmpFile($this->getInternalPath($source));
- }
- }
-
- public function fromTmpFile($tmpFile, $path) {
- if ($this->is_writable($path)) {
- $source = $this->getSource($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- $result = $storage->fromTmpFile($tmpFile, $this->getInternalPath($source));
- if ($result) {
- $this->clearFolderSizeCache($path);
- }
- return $result;
- }
- } else {
- return false;
- }
- }
-
- public function getMimeType($path) {
- if ($path == "" || $path == "/") {
- return 'httpd/unix-directory';
- }
- $source = $this->getSource($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->getMimeType($this->getInternalPath($source));
- }
- }
-
- public function hash($type, $path, $raw = false) {
- $source = $this->getSource($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->hash($type, $this->getInternalPath($source), $raw);
- }
- }
-
- public function free_space($path) {
- $source = $this->getSource($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->free_space($this->getInternalPath($source));
- }
- }
-
- public function search($query) {
- return $this->searchInDir($query);
- }
-
- private function searchInDir($query, $path = "") {
- $files = array();
- if ($dh = $this->opendir($path)) {
- while (($filename = readdir($dh)) !== false) {
- if ($filename != "." && $filename != "..") {
- if (strstr(strtolower($filename), strtolower($query))) {
- $files[] = $path."/".$filename;
- }
- if ($this->is_dir($path."/".$filename)) {
- $files = array_merge($files, $this->searchInDir($query, $path."/".$filename));
- }
- }
- }
- }
- return $files;
- }
-
- public function getLocalFile($path) {
- $source = $this->getSource($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->getLocalFile($this->getInternalPath($source));
- }
- }
- public function touch($path, $mtime=null){
- $source = $this->getSource($path);
- if ($source) {
- $storage = OC_Filesystem::getStorage($source);
- return $storage->touch($this->getInternalPath($source),$time);
- }
- }
-
- public static function setup() {
- OC_Filesystem::mount('OC_Filestorage_Shared', array('datadir' => '/'.OCP\USER::getUser().'/files/Shared'), '/'.OCP\USER::getUser().'/files/Shared/');
- }
-
-}
-
-if (OCP\USER::isLoggedIn()) {
- OC_Filestorage_Shared::setup();
-} else {
- OCP\Util::connectHook('OC_User', 'post_login', 'OC_Filestorage_Shared', 'setup');
-}
-
-?>
diff --git a/apps/files_sharing/templates/get.php b/apps/files_sharing/templates/get.php
new file mode 100755
index 00000000000..57275f07a3d
--- /dev/null
+++ b/apps/files_sharing/templates/get.php
@@ -0,0 +1,11 @@
+<table>
+ <thead>
+ <tr>
+ <th id="headerSize"><?php echo $l->t( 'Size' ); ?></th>
+ <th id="headerDate"><span id="modified"><?php echo $l->t( 'Modified' ); ?></span><span class="selectedActions"><a href="" class="delete"><?php echo $l->t('Delete all')?> <img class="svg" alt="<?php echo $l->t('Delete')?>" src="<?php echo OCP\image_path("core", "actions/delete.svg"); ?>" /></a></span></th>
+ </tr>
+ </thead>
+ <tbody id="fileList" data-readonly="<?php echo $_['readonly'];?>">
+ <?php echo($_['fileList']); ?>
+ </tbody>
+</table> \ No newline at end of file
diff --git a/apps/files_sharing/templates/list.php b/apps/files_sharing/templates/list.php
deleted file mode 100644
index d46ff818ac1..00000000000
--- a/apps/files_sharing/templates/list.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<fieldset>
- <legend><?php echo $l->t('Your Shared Files');?></legend>
- <table id="itemlist">
- <thead>
- <tr>
- <th><?php echo $l->t('Item');?></th>
- <th><?php echo $l->t('Shared With');?></th>
- <th><?php echo $l->t('Permissions');?></th>
- </tr>
- </thead>
- <tbody>
- <?php foreach($_['shared_items'] as $item):?>
- <tr class="item">
- <td class="source"><?php echo substr($item['source'], strlen("/".$_SESSION['user_id']."/files/"));?></td>
- <td class="uid_shared_with"><?php echo $item['uid_shared_with'];?></td>
- <td class="permissions"><?php echo $l->t('Read'); echo($item['permissions'] & OC_SHARE::WRITE ? ", ".$l->t('Edit') : ""); echo($item['permissions'] & OC_SHARE::DELETE ? ", ".$l->t('Delete') : "");?></td>
- <td><button class="delete" data-source="<?php echo $item['source'];?>" data-uid_shared_with="<?php echo $item['uid_shared_with'];?>"><?php echo $l->t('Delete');?></button></td>
- </tr>
- <?php endforeach;?>
- <tr id="share_item_row">
- <form action="#" id="share_item">
- <td class="source"><input placeholder="Item" id="source" /></td>
- <td class="uid_shared_with"><input placeholder="Share With" id="uid_shared_with" /></td>
- <td class="permissions"><input placeholder="Permissions" id="permissions" /></td>
- <td><input type="submit" value="Share" /></td>
- </form>
- </tr>
- </tbody>
- </table>
-</fieldset>
diff --git a/apps/files_sharing/templates/settings.php b/apps/files_sharing/templates/settings.php
deleted file mode 100644
index 533a5c0c0c8..00000000000
--- a/apps/files_sharing/templates/settings.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<form id="resharing">
- <fieldset class="personalblock">
- <p><input type="checkbox" name="allowResharing" id="allowResharing" value="1" <?php if ($_['allowResharing'] == 'yes') echo ' checked="checked"'; ?> /> <label for="allowResharing"><?php echo $l->t('Enable Resharing'); ?></label> <br/>
- <em><?php echo $l->t('Allow users to reshare files they don\'t own');?></em></p>
- <p><input type="checkbox" name="allowSharingWithEveryone" id="allowSharingWithEveryone" value="1" <?php if ($_['allowSharingWithEveryone'] == 'yes') echo ' checked="checked"'; ?> /> <label for="allowSharingWithEveryone"><?php echo $l->t('Enable sharing with everyone'); ?></label> <br/>
- <em><?php echo $l->t('Allow users to share files with everyone');?></em></p>
- </fieldset>
-</form> \ No newline at end of file
diff --git a/apps/files_sharing_log/appinfo/app.php b/apps/files_sharing_log/appinfo/app.php
new file mode 100644
index 00000000000..23cae61fbf4
--- /dev/null
+++ b/apps/files_sharing_log/appinfo/app.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+OC::$CLASSPATH['OC_Files_Sharing_Log'] = 'apps/files_sharing_log/log.php';
+
+$l=new OC_L10N('files_sharing_log');
+OCP\App::addNavigationEntry( array(
+ 'id' => 'files_sharing_log_index',
+ 'order' => 5,
+ 'href' => OCP\Util::linkTo( 'files_sharing_log', 'index.php' ),
+ 'icon' => OCP\Util::imagePath( 'files_sharing_log', 'icon.png' ),
+ 'name' => $l->t('Shared files log'))
+);
+
+OCP\Util::connectHook('OC_Filestorage_Shared', 'fopen', 'OC_Files_Sharing_Log', 'fopen');
+OCP\Util::connectHook('OC_Filestorage_Shared', 'file_get_contents', 'OC_Files_Sharing_Log', 'file_get_contents');
+OCP\Util::connectHook('OC_Filestorage_Shared', 'file_put_contents', 'OC_Files_Sharing_Log', 'file_put_contents');
diff --git a/apps/files_sharing_log/appinfo/database.xml b/apps/files_sharing_log/appinfo/database.xml
new file mode 100644
index 00000000000..dae811f87fa
--- /dev/null
+++ b/apps/files_sharing_log/appinfo/database.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<database>
+ <name>*dbname*</name>
+ <create>true</create>
+ <overwrite>false</overwrite>
+ <charset>utf8</charset>
+ <table>
+ <name>*dbprefix*sharing_log</name>
+ <declaration>
+ <field>
+ <name>user_id</name>
+ <type>text</type>
+ <notnull>true</notnull>
+ <length>64</length>
+ </field>
+ <field>
+ <name>source</name>
+ <type>text</type>
+ <notnull>true</notnull>
+ <length>128</length>
+ </field>
+ <field>
+ <name>uid_who</name>
+ <type>text</type>
+ <notnull>true</notnull>
+ <length>64</length>
+ </field>
+ <field>
+ <name>when</name>
+ <type>integer</type>
+ <default></default>
+ <notnull>false</notnull>
+ <unsigned>true</unsigned>
+ <length>4</length>
+ </field>
+ <field>
+ <name>mode</name>
+ <type>text</type>
+ <notnull>true</notnull>
+ <length>4</length>
+ </field>
+ </declaration>
+ </table>
+</database>
diff --git a/apps/files_sharing_log/appinfo/info.xml b/apps/files_sharing_log/appinfo/info.xml
new file mode 100644
index 00000000000..d5e3283df3f
--- /dev/null
+++ b/apps/files_sharing_log/appinfo/info.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<info>
+ <id>files_sharing_log</id>
+ <name>File Shared access logging app</name>
+ <description>Log access to shared files</description>
+ <licence>AGPL</licence>
+ <author>Bart Visscher</author>
+ <require>4</require>
+ <shipped>true</shipped>
+</info>
diff --git a/apps/files_sharing_log/appinfo/version b/apps/files_sharing_log/appinfo/version
new file mode 100644
index 00000000000..49d59571fbf
--- /dev/null
+++ b/apps/files_sharing_log/appinfo/version
@@ -0,0 +1 @@
+0.1
diff --git a/apps/files_sharing_log/css/style.css b/apps/files_sharing_log/css/style.css
new file mode 100644
index 00000000000..069d3a45e0d
--- /dev/null
+++ b/apps/files_sharing_log/css/style.css
@@ -0,0 +1,7 @@
+#files_sharing_log {
+padding: 2em;
+}
+#files_sharing_log th,
+#files_sharing_log td {
+padding: 0 1em;
+}
diff --git a/apps/files_sharing_log/index.php b/apps/files_sharing_log/index.php
new file mode 100644
index 00000000000..ffacbdd8604
--- /dev/null
+++ b/apps/files_sharing_log/index.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+OCP\User::checkLoggedIn();
+OCP\App::checkAppEnabled('files_sharing_log');
+
+OCP\App::setActiveNavigationEntry('files_sharing_log_index');
+
+OCP\Util::addStyle('files_sharing_log', 'style');
+
+$query = OCP\DB::prepare('SELECT * FROM *PREFIX*sharing_log WHERE user_id = ?');
+$log = $query->execute(array(OCP\User::getUser()))->fetchAll();
+
+$output = new OCP\Template('files_sharing_log', 'index', 'user');
+$output->assign('log', $log);
+$output->printPage();
diff --git a/apps/files_sharing_log/log.php b/apps/files_sharing_log/log.php
new file mode 100644
index 00000000000..e6a12b9fb1d
--- /dev/null
+++ b/apps/files_sharing_log/log.php
@@ -0,0 +1,34 @@
+<?php
+
+class OC_Files_Sharing_Log {
+ static public function fopen($arguments) {
+ $target = $arguments['target'];
+ $source = $arguments['source'];
+ $mode = $arguments['mode'];
+ self::log($target, $source, $mode);
+ }
+
+ static public function file_get_contents($arguments) {
+ $target = $arguments['target'];
+ $source = $arguments['source'];
+ $mode = 'get';
+ self::log($target, $source, $mode);
+ }
+
+ static public function file_put_contents($arguments) {
+ $target = $arguments['target'];
+ $source = $arguments['source'];
+ $mode = 'put';
+ self::log($target, $source, $mode);
+ }
+
+ static public function log($target, $source, $mode) {
+ $query = OCP\DB::prepare("SELECT * FROM *PREFIX*sharing WHERE source = ? AND target = ?");
+ $info = $query->execute(array($source, $target))->fetchAll();
+ $info = $info[0];
+ //var_dump($info);
+ $query = OCP\DB::prepare("INSERT INTO *PREFIX*sharing_log VALUES (?,?,?,?,?)");
+ $query->execute(array($info['uid_owner'], $source, OCP\User::getUser(), time(), $mode));
+ //die;
+ }
+}
diff --git a/apps/files_sharing_log/templates/index.php b/apps/files_sharing_log/templates/index.php
new file mode 100644
index 00000000000..55bfc1d6a3c
--- /dev/null
+++ b/apps/files_sharing_log/templates/index.php
@@ -0,0 +1,42 @@
+<table id="files_sharing_log">
+ <thead>
+ <tr>
+ <th><?php echo $l->t('File') ?></th>
+ <th><?php echo $l->t('Who') ?></th>
+ <th><?php echo $l->t('When') ?></th>
+ <th><?php echo $l->t('What') ?></th>
+ </tr>
+ </thead>
+ <tbody>
+ <?php foreach($_['log'] as $log): ?>
+ <tr>
+ <td>
+ <?php echo $log['source'] ?>
+ </td>
+ <td>
+ <?php echo $log['uid_who'] ?>
+ </td>
+ <td>
+ <?php echo date('Y-m-d H:i:s', $log['when']) ?>
+ </td>
+ <td>
+ <?php switch ($log['mode']):
+ case 'get':
+ echo $l->t('Read');
+ break;
+ case 'put':
+ echo $l->t('Write');
+ break;
+ default:
+ if (strpos('r', $log['mode']) !== false):
+ echo $l->t('Read');
+ else:
+ echo $l->t('Write');
+ endif;
+ endswitch;
+ ?>
+ </td>
+ </tr>
+ <?php endforeach; ?>
+ </tbody>
+</table>
diff --git a/apps/files_texteditor/ajax/loadfile.php b/apps/files_texteditor/ajax/loadfile.php
index c263306e719..5a5affa46be 100644
--- a/apps/files_texteditor/ajax/loadfile.php
+++ b/apps/files_texteditor/ajax/loadfile.php
@@ -43,6 +43,7 @@ if(!empty($filename))
{
$mtime = OC_Filesystem::filemtime($path);
$filecontents = OC_Filesystem::file_get_contents($path);
+ $filecontents = iconv(mb_detect_encoding($filecontents), "UTF-8", $filecontents);
OCP\JSON::success(array('data' => array('filecontents' => $filecontents, 'write' => 'false', 'mtime' => $mtime)));
}
} else {
diff --git a/apps/files_texteditor/ajax/savefile.php b/apps/files_texteditor/ajax/savefile.php
index aa24d07eef1..f3ac323e32f 100644
--- a/apps/files_texteditor/ajax/savefile.php
+++ b/apps/files_texteditor/ajax/savefile.php
@@ -49,6 +49,7 @@ if($path != '' && $mtime != '' && $filecontents)
// Save file
if(OC_Filesystem::is_writable($path))
{
+ $filecontents = iconv(mb_detect_encoding($filecontents), "UTF-8", $filecontents);
OC_Filesystem::file_put_contents($path, $filecontents);
// Clear statcache
clearstatcache();
diff --git a/apps/files_texteditor/appinfo/app.php b/apps/files_texteditor/appinfo/app.php
index a08077ebb67..1f9773bca3a 100644
--- a/apps/files_texteditor/appinfo/app.php
+++ b/apps/files_texteditor/appinfo/app.php
@@ -1,6 +1,6 @@
<?php
//load the required files
+OCP\Util::addStyle( 'files_texteditor', 'DroidSansMono/stylesheet' );
OCP\Util::addStyle( 'files_texteditor', 'style' );
OCP\Util::addscript( 'files_texteditor', 'editor');
OCP\Util::addscript( 'files_texteditor', 'aceeditor/ace');
-?>
diff --git a/apps/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.eot b/apps/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.eot
new file mode 100644
index 00000000000..bc2d524aa76
--- /dev/null
+++ b/apps/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.eot
Binary files differ
diff --git a/apps/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.svg b/apps/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.svg
new file mode 100644
index 00000000000..4ca5fc20dc5
--- /dev/null
+++ b/apps/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.svg
@@ -0,0 +1,630 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>
+This is a custom SVG webfont generated by Font Squirrel.
+Copyright : Digitized data copyright 2006 Google Corporation
+Foundry : Ascender Corporation
+Foundry URL : httpwwwascendercorpcom
+</metadata>
+<defs>
+<font id="webfontq63XZdUr" horiz-adv-x="1228" >
+<font-face units-per-em="2048" ascent="1638" descent="-410" />
+<missing-glyph horiz-adv-x="500" />
+<glyph unicode=" " />
+<glyph unicode="!" d="M487 110.5q0 139.5 127 139.5t127 -139.5t-127 -139.5t-127 139.5zM504 1462h223l-51 -1048h-121z" />
+<glyph unicode="&#x22;" d="M285 1462h237l-41 -528h-155zM707 1462h237l-41 -528h-155z" />
+<glyph unicode="#" d="M45 428v137h244l65 328h-233v137h258l82 432h147l-82 -432h293l84 432h144l-84 -432h221v-137h-248l-64 -328h240v-137h-266l-82 -428h-148l84 428h-290l-82 -428h-144l78 428h-217zM436 565h291l64 328h-291z" />
+<glyph unicode="$" d="M182 172v172q197 -92 365 -92v434q-197 66 -271 145q-78 84 -77 220q0 131 92 217q90 84 256 106v180h137v-176q182 -8 336 -78l-66 -145q-143 63 -270 72v-422q199 -68 279 -148q82 -82 81 -211q0 -281 -360 -335v-230h-137v221q-228 0 -365 70zM375 1049q0 -76 41 -121 q41 -43 131 -74v369q-172 -27 -172 -174zM684 262q184 28 184 184q0 127 -184 189v-373z" />
+<glyph unicode="%" d="M0 1133q0 164 80 256q78 90 215 90q131 0 211 -92.5t80 -253.5q0 -166 -78 -256q-80 -92 -217 -93q-131 0 -211 95q-80 96 -80 254zM152 1133q0 -229 141 -230q139 0 139 230q0 225 -139 225q-141 0 -141 -225zM170 0l729 1462h158l-729 -1462h-158zM643 330 q0 164 80 256q78 90 215 90q131 0 211 -92t80 -254q0 -164 -78 -254q-82 -94 -217 -94q-131 0 -211 94q-80 96 -80 254zM795 330q0 -229 141 -230q139 0 139 230q0 225 -139 225q-141 0 -141 -225z" />
+<glyph unicode="&#x26;" d="M61 381q0 133 64 229q63 98 235 199q-164 193 -163 356q0 147 96 233.5t274 86.5q168 0 260.5 -86t92.5 -234q0 -203 -318 -389l281 -348q70 119 104 266h184q-53 -236 -178 -403l234 -291h-217l-131 166q-174 -186 -412 -186q-190 0 -297 106q-109 109 -109 295z M252 387q0 -104 67 -176q68 -70 160 -70q162 0 299 146l-323 401q-203 -123 -203 -301zM375 1165q0 -117 133 -268q133 80 184 139q49 57 49 133q0 72 -49 119q-51 47 -131 47q-86 0 -137 -45q-49 -43 -49 -125z" />
+<glyph unicode="'" d="M496 1462h237l-41 -528h-155z" />
+<glyph unicode="(" d="M295 567q0 532 444 895h193q-449 -375 -449 -893q0 -522 447 -893h-191q-444 352 -444 891z" />
+<glyph unicode=")" d="M297 1462h192q444 -362 445 -895q0 -541 -445 -891h-190q446 373 446 893q1 518 -448 893z" />
+<glyph unicode="*" d="M133 1081l29 193l391 -111l-43 393h205l-43 -393l397 111l27 -193l-379 -28l246 -326l-179 -96l-176 358l-157 -358l-185 96l242 326z" />
+<glyph unicode="+" d="M152 647v150h387v389h149v-389h387v-150h-387v-385h-149v385h-387z" />
+<glyph unicode="," d="M440 -289q76 322 111 551h219l16 -24q-59 -229 -194 -527h-152z" />
+<glyph unicode="-" d="M285 465v168h659v-168h-659z" />
+<glyph unicode="." d="M463 135q0 166 151.5 166t151.5 -166t-151.5 -166t-151.5 166z" />
+<glyph unicode="/" d="M211 0l627 1462h178l-627 -1462h-178z" />
+<glyph unicode="0" d="M147 733q0 752 465 752q231 0 350 -192.5t119 -559.5q0 -754 -469 -753q-231 0 -348 194q-117 193 -117 559zM332 733q0 -317 67 -459q68 -139 213 -139q147 0 215 141q70 145 70 457q0 309 -70 455q-68 141 -215 141q-145 0 -213 -139q-67 -138 -67 -457z" />
+<glyph unicode="1" d="M225 1163l383 299h150v-1462h-176v913q0 147 8 361q-43 -47 -121 -113l-147 -121z" />
+<glyph unicode="2" d="M158 0v156l350 381q201 219 258 317q61 104 61 231q0 115 -63 179q-66 66 -172 65q-162 0 -318 -137l-102 119q190 172 422 172q197 0 305 -107q113 -109 113 -284q0 -115 -59.5 -244t-290.5 -375l-281 -299v-8h688v-166h-911z" />
+<glyph unicode="3" d="M131 59v170q186 -96 383 -96q354 0 354 289q0 258 -381 258h-133v151h133q160 0 248 76t88 201q0 104 -67 162q-70 59 -183 59q-176 0 -344 -121l-92 125q186 150 436 150q205 0 322 -99q115 -96 115 -264q0 -141 -82 -231q-86 -94 -234 -119v-6q360 -45 361 -348 q0 -203 -137 -320q-138 -117 -400 -116q-243 -1 -387 79z" />
+<glyph unicode="4" d="M61 328v159l664 983h188v-976h213v-166h-213v-328h-176v328h-676zM240 494h497v356q0 178 13 432h-9q-41 -111 -90 -180z" />
+<glyph unicode="5" d="M172 59v172q145 -96 360 -96q336 0 336 314q0 295 -344 294q-78 0 -231 -26l-90 57l55 688h690v-166h-532l-39 -419q102 20 209 20q209 0 340 -115q129 -114 129 -313q0 -233 -137 -363q-135 -127 -390 -126q-224 -1 -356 79z" />
+<glyph unicode="6" d="M154 625q0 858 639 858q104 0 172 -19v-155q-71 25 -166 24q-221 0 -336 -141t-123 -447h12q96 170 307 170q195 0 306 -118q111 -120 110 -326q0 -227 -121 -360q-119 -131 -323 -131q-219 0 -348 170t-129 475zM336 506q0 -150 82 -262q80 -111 211 -111q129 0 198 88 q72 90 72 250q0 147 -68 223q-68 78 -196 78q-125 0 -213 -82q-86 -80 -86 -184z" />
+<glyph unicode="7" d="M143 1296v166h940v-145l-555 -1317h-194l563 1296h-754z" />
+<glyph unicode="8" d="M156 373q0 258 282 393q-236 150 -235 369q0 160 116 256q115 94 295 94q184 0 297 -94q115 -96 115 -258q0 -229 -262 -359q309 -160 309 -393q0 -180 -127 -291q-126 -111 -332 -110q-217 0 -337.5 104.5t-120.5 288.5zM334 371q0 -240 276 -240q135 0 211 66 q74 66 74 182q0 90 -63.5 159.5t-213.5 143.5l-30 14q-254 -118 -254 -325zM381 1126q0 -92 49 -153q47 -57 186 -125q231 104 232 278q0 102 -64 154q-66 53 -172 53q-104 0 -167.5 -53.5t-63.5 -153.5z" />
+<glyph unicode="9" d="M154 991q0 227 120 361q119 131 324 131q221 0 348 -170q129 -172 129 -475q0 -858 -639 -858q-104 0 -172 18v156q68 -25 166 -25q221 0 336 141.5t123 446.5h-12q-96 -170 -308 -170q-193 0 -305 119q-110 116 -110 325zM330 991q0 -143 69 -223q68 -78 195 -78 q129 0 213 82q86 84 86 184q0 152 -80 262.5t-213 110.5q-127 0 -198.5 -88t-71.5 -250z" />
+<glyph unicode=":" d="M487 110.5q0 139.5 127 139.5t127 -139.5t-127 -139.5t-127 139.5zM487 987q0 139 127 139t127 -139t-127 -139t-127 139z" />
+<glyph unicode=";" d="M410 -264q66 276 100 502h199l14 -23q-55 -209 -176 -479h-137zM494 987q0 139 127 139t127 -139t-127 -139t-127 139z" />
+<glyph unicode="&#x3c;" d="M152 672v102l923 451v-160l-715 -342l715 -342v-160z" />
+<glyph unicode="=" d="M152 442v150h923v-150h-923zM152 852v149h923v-149h-923z" />
+<glyph unicode="&#x3e;" d="M152 221v160l714 342l-714 342v160l923 -451v-102z" />
+<glyph unicode="?" d="M168 1386q205 96 426 97q217 0 340 -97q125 -98 125 -262q0 -133 -53 -217q-52 -83 -197 -190q-119 -88 -151.5 -141.5t-32.5 -143.5v-18h-160v37q0 119 47 194.5t160 157.5q131 100 172 155.5t41 157.5q0 92 -74 150q-72 57 -207 57q-172 0 -371 -90zM426 110.5 q0 139.5 127 139.5t127 -139.5t-127 -139.5t-127 139.5z" />
+<glyph unicode="@" d="M31 602q0 395 168 629q166 231 454 231q248 0 396 -196q150 -199 149 -535q0 -236 -63 -371q-66 -139 -179 -139q-131 0 -157 180h-4q-74 -180 -230 -180q-120 0 -190 105q-70 102 -70 280q0 209 96 332q98 127 256 127q133 0 256 -47l-22 -416q-2 -25 -2 -70v-6 q0 -176 72 -176q100 0 100 383q0 279 -110.5 436.5t-299.5 157.5q-225 0 -352 -192.5t-127 -526.5q0 -311 129 -483q127 -170 369 -170q178 0 346 78v-133q-156 -82 -352 -82q-295 0 -465 207q-168 204 -168 577zM465 602q0 -252 127 -252q131 0 145 312l15 253 q-53 20 -103 21q-90 0 -137 -94.5t-47 -239.5z" />
+<glyph unicode="A" d="M33 0l483 1468h195l485 -1468h-192l-144 453h-491l-146 -453h-190zM422 618h385l-133 424q-39 121 -62 226q-20 -88 -47 -183z" />
+<glyph unicode="B" d="M135 0v1462h440q272 0 398 -88q123 -86 123 -282q0 -129 -78 -213t-213 -103v-10q332 -55 332 -342q0 -199 -127 -311.5t-348 -112.5h-527zM322 158h307q311 0 311 274q0 254 -324 254h-294v-528zM322 842h284q157 0 228 55q72 55 71 182q0 121 -75.5 172.5t-243.5 51.5 h-264v-461z" />
+<glyph unicode="C" d="M129 733q0 344 178 547t490 203q219 0 383 -86l-78 -156q-156 78 -305 78q-215 0 -342 -158q-129 -160 -129 -430q0 -287 120 -438q119 -150 351 -150q135 0 327 58v-162q-150 -59 -358 -59q-310 0 -473 196q-164 199 -164 557z" />
+<glyph unicode="D" d="M135 0v1462h342q319 0 494 -188q176 -193 176 -529q0 -365 -182 -552q-186 -193 -529 -193h-301zM322 160h96q532 0 532 579q0 563 -493 564h-135v-1143z" />
+<glyph unicode="E" d="M217 0v1462h842v-164h-656v-452h617v-162h-617v-520h656v-164h-842z" />
+<glyph unicode="F" d="M244 0v1462h841v-164h-655v-516h617v-164h-617v-618h-186z" />
+<glyph unicode="G" d="M117 733q0 352 161.5 551t446.5 199q193 0 346 -86l-72 -162q-150 84 -280 84q-193 0 -299.5 -155.5t-106.5 -432.5q0 -588 394 -588q94 0 202 29v436h-237v164h422v-717q-199 -76 -420 -75q-262 0 -410 200q-147 200 -147 553z" />
+<glyph unicode="H" d="M135 0v1462h187v-616h585v616h187v-1462h-187v682h-585v-682h-187z" />
+<glyph unicode="I" d="M225 0v123l295 20v1176l-295 20v123h776v-123l-294 -20v-1176l294 -20v-123h-776z" />
+<glyph unicode="J" d="M137 39v166q162 -61 309 -62q162 0 254.5 80t92.5 226v1013h186v-1011q0 -215 -141 -345q-139 -127 -377 -126q-215 0 -324 59z" />
+<glyph unicode="K" d="M211 0v1462h186v-731l121 168l453 563h209l-521 -637l539 -825h-211l-450 698l-140 -114v-584h-186z" />
+<glyph unicode="L" d="M233 0v1462h187v-1296h635v-166h-822z" />
+<glyph unicode="M" d="M113 0v1462h247l248 -1192h6l250 1192h252v-1462h-153v887q0 121 14 391h-8l-283 -1278h-154l-278 1280h-8q18 -268 18 -406v-874h-151z" />
+<glyph unicode="N" d="M135 0v1462h213l578 -1204h6q-14 285 -14 404v800h174v-1462h-215l-580 1210h-8q18 -276 18 -417v-793h-172z" />
+<glyph unicode="O" d="M84 735q0 750 534 750q258 0 392 -195q137 -199 137 -557q0 -362 -137 -557q-138 -197 -394 -196q-532 -1 -532 755zM281 733q0 -590 335 -590q174 0 254 145.5t80 444.5q0 305 -82 445q-84 143 -250 143q-337 0 -337 -588z" />
+<glyph unicode="P" d="M176 0v1462h404q514 0 514 -428q0 -219 -137.5 -342t-403.5 -123h-191v-569h-186zM362 727h170q195 0 283 72q86 70 86 225q0 279 -338 279h-201v-576z" />
+<glyph unicode="Q" d="M84 735q0 750 534 750q258 0 392 -195q137 -199 137 -557q0 -526 -285 -694q86 -180 279 -311l-121 -142q-238 172 -328 400q-37 -6 -76 -6q-532 -1 -532 755zM281 733q0 -590 335 -590q174 0 254 145.5t80 444.5q0 305 -82 445q-84 143 -250 143q-337 0 -337 -588z" />
+<glyph unicode="R" d="M186 0v1462h357q520 0 520 -415q0 -287 -289 -392l397 -655h-219l-350 604h-229v-604h-187zM373 762h164q170 0 251.5 65.5t81.5 210.5q0 141 -79.5 203t-258.5 62h-159v-541z" />
+<glyph unicode="S" d="M141 49v178q211 -86 414 -86q350 0 350 240q0 104 -71 160q-74 57 -285 133q-211 74 -299 174q-90 102 -90 264q0 174 129 272.5t352 98.5q225 0 416 -78l-64 -164q-197 78 -360 78q-293 0 -293 -209q0 -102 66 -164q66 -63 270 -133q244 -88 327.5 -182t83.5 -240 q0 -190 -139 -301q-138 -111 -393 -110q-258 -1 -414 69z" />
+<glyph unicode="T" d="M102 1298v164h1022v-164h-417v-1298h-187v1298h-418z" />
+<glyph unicode="U" d="M125 520v942h186v-932q0 -387 307 -387q293 0 300 389v932h186v-948q0 -260 -125 -397q-127 -139 -371 -139q-483 -1 -483 540z" />
+<glyph unicode="V" d="M33 1462h196l295 -927q45 -143 88 -334q33 152 93 340l292 921h199l-489 -1462h-187z" />
+<glyph unicode="W" d="M2 1462h170l88 -663q18 -145 39 -377q18 -203 18 -242q27 162 70 312l141 516h177l145 -521q57 -205 72 -307q6 92 65 619l70 663h170l-187 -1462h-190l-168 580q-43 147 -66 282q-31 -168 -65 -284l-156 -578h-190z" />
+<glyph unicode="X" d="M53 0l453 764l-422 698h199l331 -559l334 559h191l-422 -692l457 -770h-211l-355 635l-366 -635h-189z" />
+<glyph unicode="Y" d="M33 1462h203l376 -739l381 739h201l-487 -893v-569h-187v559z" />
+<glyph unicode="Z" d="M102 0v145l793 1151h-772v166h981v-145l-793 -1151h813v-166h-1022z" />
+<glyph unicode="[" d="M412 -324v1786h528v-149h-346v-1487h346v-150h-528z" />
+<glyph unicode="\" d="M211 1462h178l627 -1462h-178z" />
+<glyph unicode="]" d="M289 -174h346v1487h-346v149h528v-1786h-528v150z" />
+<glyph unicode="^" d="M111 549l424 924h102l481 -924h-162l-368 735l-318 -735h-159z" />
+<glyph unicode="_" d="M-16 -184h1259v-140h-1259v140z" />
+<glyph unicode="`" d="M418 1548v21h219q88 -182 174 -301v-27h-121q-163 139 -272 307z" />
+<glyph unicode="a" d="M135 307q0 332 510 348l203 7v69q0 236 -244 236q-150 0 -328 -82l-63 137q199 96 383 96q223 0 328 -88q102 -86 102 -278v-752h-131l-37 152h-8q-74 -94 -158 -133t-209 -39q-164 0 -256 85.5t-92 241.5zM324 305q0 -178 200 -178q150 0 234 82q88 84 88 229v99 l-162 -7q-195 -8 -278 -61q-82 -51 -82 -164z" />
+<glyph unicode="b" d="M158 0v1556h182v-376q0 -96 -8 -226h8q109 164 322 164q203 0 315 -149q115 -152 115 -418q0 -268 -115 -419.5t-315 -151.5q-207 0 -322 159h-12l-37 -139h-133zM340 551q0 -229 70 -324q72 -96 221 -96q272 0 272 422q0 414 -274 414q-154 0 -221.5 -94.5t-67.5 -321.5 z" />
+<glyph unicode="c" d="M172 543q0 279 145 428q145 147 408 147q176 0 336 -59l-62 -158q-147 57 -268 57q-371 0 -371 -413q0 -406 361 -406q160 0 321 62v-160q-135 -61 -329 -61q-258 0 -400 145q-141 145 -141 418z" />
+<glyph unicode="d" d="M137 547q0 268 115 419.5t315 151.5q205 0 322 -160h12q-12 129 -12 162v436h182v-1556h-147l-27 147h-8q-115 -168 -322 -167q-203 0 -315 149q-115 152 -115 418zM326 545q0 -414 274 -414q152 0 219 88q66 88 70 287v41q0 229 -70 323q-72 96 -221 97 q-272 0 -272 -422z" />
+<glyph unicode="e" d="M133 541q0 266 135 421.5t363 155.5q212 0 338 -135q127 -137 127 -356v-113h-774q9 -375 344 -375q199 0 370 76v-160q-170 -76 -364 -75q-244 0 -391 149q-148 151 -148 412zM326 662h573q0 305 -272 305q-276 0 -301 -305z" />
+<glyph unicode="f" d="M156 961v110l317 33v96q0 195 90 281q88 86 299 86q125 0 252 -35l-41 -143q-109 29 -207 28q-123 0 -168 -51q-43 -49 -43 -164v-104h389v-137h-389v-961h-182v961h-317z" />
+<glyph unicode="g" d="M102 -186q0 212 240 270q-96 47 -96 154q0 113 133 192q-86 35 -139 123q-51 84 -52 186q0 182 106.5 280.5t303.5 98.5q88 0 150 -20h378v-113l-196 -27q66 -88 65 -213q0 -162 -106 -256q-109 -96 -297 -96q-55 0 -86 6q-100 -55 -100 -133q0 -84 161 -84h187 q172 0 266 -78q92 -76 92 -219q0 -377 -565 -377q-218 0 -332 80q-113 81 -113 226zM274 -180q0 -174 271 -174q395 0 395 223q0 88 -49 118.5t-199 30.5h-188q-230 1 -230 -198zM367 745q0 -227 227 -227q223 0 223 230q0 240 -225 239.5t-225 -242.5z" />
+<glyph unicode="h" d="M160 0v1556h182v-462l-8 -144h10q104 168 336 168q389 0 389 -401v-717h-182v707q0 260 -238 260q-307 0 -307 -398v-569h-182z" />
+<glyph unicode="i" d="M197 0v123l344 20v811l-269 21v123h451v-955l352 -20v-123h-878zM526 1435.5q0 114.5 106.5 114.5t106.5 -114q0 -57 -32.5 -86t-73.5 -29q-107 0 -107 114.5z" />
+<glyph unicode="j" d="M135 -303q131 -39 289 -39q119 0 182 57q66 59 66 158v1081l-420 21v123h602v-1215q0 -180 -113 -278q-111 -96 -319 -97q-160 0 -287 35v154zM637 1435.5q0 114.5 106.5 114.5t106.5 -114.5t-106.5 -114.5t-106.5 114.5z" />
+<glyph unicode="k" d="M215 0v1556h180v-714l-16 -289h4l135 152l395 393h222l-494 -475l522 -623h-213l-426 504l-129 -82v-422h-180z" />
+<glyph unicode="l" d="M188 0v123l344 20v1270l-268 21v122h451v-1413l352 -20v-123h-879z" />
+<glyph unicode="m" d="M92 0v1098h127l27 -148h10q68 168 201 168q164 0 213 -182h6q78 182 219 182q129 0 186 -92q57 -90 58 -309v-717h-162v707q0 147 -27 202q-27 57 -88 58q-88 0 -127 -82q-39 -80 -39 -279v-606h-161v707q0 260 -125 260q-82 0 -119 -80t-37 -318v-569h-162z" />
+<glyph unicode="n" d="M160 0v1098h147l27 -148h10q104 168 336 168q389 0 389 -401v-717h-182v707q0 260 -238 260q-307 0 -307 -398v-569h-182z" />
+<glyph unicode="o" d="M115 551q0 264 135 415.5t366 151.5q217 0 356.5 -155.5t139.5 -411.5q0 -266 -137 -418q-139 -154 -365 -153q-219 0 -356 155q-139 158 -139 416zM303 551q0 -420 311 -420q309 0 310 420q0 416 -312 416q-309 0 -309 -416z" />
+<glyph unicode="p" d="M158 -492v1590h147l27 -148h8q111 168 322 168q203 0 315 -149q115 -152 115 -418q0 -268 -115 -419.5t-315 -151.5q-207 0 -322 159h-12q12 -129 12 -162v-469h-182zM340 551q0 -229 70 -324q72 -96 221 -96q272 0 272 422q0 414 -274 414q-152 0 -219.5 -88t-69.5 -287 v-41z" />
+<glyph unicode="q" d="M137 547q0 268 115 419.5t315 151.5q209 0 322 -168h8l27 148h147v-1590h-182v469q0 41 12 170h-12q-115 -168 -322 -167q-203 0 -315 149q-115 152 -115 418zM326 545q0 -414 274 -414q152 0 219 88q66 88 70 287v41q0 229 -70 323q-72 96 -221 97q-272 0 -272 -422z " />
+<glyph unicode="r" d="M264 0v1098h148l22 -201h8q76 117 162 170q84 51 215 51q119 0 240 -45l-49 -166q-121 45 -224 45q-163 0 -251 -92q-88 -90 -89 -268v-592h-182z" />
+<glyph unicode="s" d="M203 49v166q195 -86 370 -86q274 0 275 162q0 55 -49 98t-226 107q-233 86 -294 159q-59 72 -60 172q0 135 111 213q113 78 309.5 78t368.5 -74l-60 -149q-184 72 -319 72q-236 0 -236 -133q0 -57 51.5 -96.5t231.5 -102.5q207 -76 280 -152q70 -72 70 -182 q0 -150 -116.5 -235.5t-331.5 -85.5q-246 -1 -375 69z" />
+<glyph unicode="t" d="M139 961v94l267 49l77 287h105v-293h438v-137h-438v-637q0 -195 192 -195q98 0 240 21v-138q-137 -33 -252 -32q-362 0 -362 344v637h-267z" />
+<glyph unicode="u" d="M160 381v717h182v-707q0 -260 236 -260q162 0 235.5 92t73.5 305v570h182v-1098h-147l-27 147h-10q-106 -168 -334 -167q-391 0 -391 401z" />
+<glyph unicode="v" d="M82 1098h188l240 -652q84 -225 100 -325h6q8 53 101 325l239 652h189l-416 -1098h-231z" />
+<glyph unicode="w" d="M-4 1098h162l98 -543q39 -215 57 -393h6q33 195 68 358l133 578h193l127 -578q43 -188 67 -358h6q29 225 60 393l102 543h158l-225 -1098h-195l-131 596l-68 330h-6l-65 -334l-135 -592h-189z" />
+<glyph unicode="x" d="M96 0l414 563l-393 535h207l290 -410l291 410h207l-395 -535l413 -563h-206l-310 436l-311 -436h-207z" />
+<glyph unicode="y" d="M82 1098h188l262 -654q82 -203 89 -290h6q20 106 90 292l239 652h189l-475 -1241q-70 -178 -156 -263q-89 -86 -246 -86q-94 0 -168 17v145q61 -12 136 -12q96 0 149 41t96 141l58 150z" />
+<glyph unicode="z" d="M182 0v125l660 836h-627v137h811v-146l-647 -815h665v-137h-862z" />
+<glyph unicode="{" d="M225 492v155q338 0 338 189v333q0 287 438 293v-149q-147 -4 -200 -39q-55 -37 -56 -119v-332q0 -209 -233 -248v-12q233 -39 233 -248v-331q0 -82 56 -119q53 -35 200 -39v-150q-438 6 -438 293v334q0 189 -338 189z" />
+<glyph unicode="|" d="M539 -492v2048h149v-2048h-149z" />
+<glyph unicode="}" d="M227 -174q141 0 198.5 39t57.5 119v331q0 209 234 248v12q-233 39 -234 248v332q0 80 -57 119t-199 39v149q438 -6 439 -293v-333q0 -188 338 -189v-155q-338 0 -338 -189v-334q0 -287 -439 -293v150z" />
+<glyph unicode="~" d="M152 586v162q98 109 247 108q102 0 248 -63q129 -55 201 -56q106 0 227 121v-162q-98 -109 -248 -108q-102 0 -247 63q-133 55 -201 56q-106 0 -227 -121z" />
+<glyph unicode="&#xa0;" />
+<glyph unicode="&#xa1;" d="M487 979q0 139 127 139t127 -139t-127 -139t-127 139zM502 -373l51 1049h121l51 -1049h-223z" />
+<glyph unicode="&#xa2;" d="M172 743q0 494 434 568v172h137v-164q158 -2 318 -59l-62 -158q-147 57 -268 57q-371 0 -371 -414q0 -406 361 -405q152 0 321 61v-159q-123 -59 -299 -62v-200h-137v206q-434 68 -434 557z" />
+<glyph unicode="&#xa3;" d="M119 0v154q201 49 200 284v213h-198v137h198v324q0 166 109 268q106 100 289 101q193 0 346 -80l-66 -144q-143 72 -272 72q-223 0 -223 -246v-295h377v-137h-377v-211q0 -199 -140 -274h748v-166h-991z" />
+<glyph unicode="&#xa4;" d="M174 1065l98 98l127 -129q101 68 215 68q115 0 213 -68l129 129l99 -96l-129 -129q68 -101 67 -215q0 -120 -67 -215l127 -127l-97 -96l-129 127q-100 -66 -213 -66q-117 0 -215 68l-127 -127l-96 96l127 127q-66 96 -65 213q0 113 65 213zM375 723q0 -98 71 -170 q70 -70 168 -70q102 0 172 70q72 72 72 170q0 100 -71.5 172t-172 72t-170 -70t-69.5 -174z" />
+<glyph unicode="&#xa5;" d="M78 1462h192l342 -739l346 739h191l-385 -768h240v-137h-302v-158h302v-137h-302v-262h-178v262h-301v137h301v158h-301v137h234z" />
+<glyph unicode="&#xa6;" d="M539 289h149v-781h-149v781zM539 776v780h149v-780h-149z" />
+<glyph unicode="&#xa7;" d="M244 55v158q170 -82 323 -82q240 0 240 141q0 55 -43 97q-45 41 -195 102q-197 82 -254 160q-55 74 -55 178q0 178 160 258q-160 80 -160 236q0 123 105 192q106 72 276 72q160 0 326 -72l-56 -139q-157 68 -276 67q-201 0 -201 -116q0 -53 49 -93q47 -37 197 -100 q158 -61 231 -139q74 -77 74 -191q0 -180 -145 -270q145 -80 145 -225q0 -139 -110.5 -219t-307.5 -80q-202 -1 -323 65zM414 831q0 -74 57 -126q55 -51 207 -117l35 -15q115 78 114 185q0 90 -73 145q-68 51 -207 103q-133 -50 -133 -175z" />
+<glyph unicode="&#xa8;" d="M330 1394.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5zM705 1394.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#xa9;" d="M6 731q0 342 160 547t448 205q283 0 447 -203q162 -201 162 -549t-162 -549q-164 -203 -447 -202q-285 0 -446.5 204.5t-161.5 546.5zM115 731q0 -301 129 -473q127 -170 370 -170q242 0 369 170q131 174 131 473t-131 473q-127 170 -368.5 170t-370.5 -172t-129 -471z M248 733q0 209 110.5 332t300.5 123q127 0 254 -62l-61 -127q-106 53 -193 54q-123 0 -186 -86q-66 -88 -65 -236q0 -324 251 -323q98 0 215 45v-131q-108 -49 -221 -50q-197 0 -301 123t-104 338z" />
+<glyph unicode="&#xaa;" d="M276 989q0 117 84 168t277 57l125 5v10q0 133 -152 133q-117 0 -245 -51l-41 110q135 57 294 58q291 0 291 -238v-444h-110l-33 118q-104 -131 -268 -131q-222 0 -222 205zM428 987q0 -90 104 -90q106 0 168 55.5t62 145.5v20l-100 -2q-111 -2 -175 -29q-59 -24 -59 -100 z" />
+<glyph unicode="&#xab;" d="M197 526v27l309 414l117 -78l-238 -348l238 -348l-117 -78zM604 526v27l309 414l117 -78l-237 -348l237 -348l-117 -78z" />
+<glyph unicode="&#xac;" d="M152 647v150h923v-535h-149v385h-774z" />
+<glyph unicode="&#xad;" d="M285 465v168h659v-168h-659z" />
+<glyph unicode="&#xae;" d="M6 731q0 342 160 547t448 205q283 0 447 -203q162 -201 162 -549t-162 -549q-164 -203 -447 -202q-285 0 -446.5 204.5t-161.5 546.5zM115 731q0 -301 129 -473q127 -170 370 -170q242 0 369 170q131 174 131 473t-131 473q-127 170 -368.5 170t-370.5 -172t-129 -471z M348 285v893h234q326 0 325 -265q0 -163 -159 -233l237 -395h-178l-207 352h-94v-352h-158zM506 768h72q170 0 170 141q0 74 -41 103q-43 31 -132 30h-69v-274z" />
+<glyph unicode="&#xaf;" d="M-20 1556v140h1269v-140h-1269z" />
+<glyph unicode="&#xb0;" d="M299 1167q0 129 92 222q94 94 223 94q127 0 221.5 -94.5t94.5 -221.5q0 -129 -92.5 -221t-223.5 -92t-223 92t-92 221zM422 1167q0 -80 55 -135t137 -55q78 0 135.5 55t57.5 135t-57.5 137.5t-135.5 57.5q-80 0 -135 -57q-57 -62 -57 -138z" />
+<glyph unicode="&#xb1;" d="M152 0v150h923v-150h-923zM152 647v150h387v389h149v-389h387v-150h-387v-385h-149v385h-387z" />
+<glyph unicode="&#xb2;" d="M348 672v102l187 199q106 113 141 168q31 49 31 108q0 115 -111 115q-82 0 -164 -76l-78 86q115 102 248 103q121 0 182 -60q66 -61 66 -164q0 -66 -35 -135q-33 -66 -164 -196l-135 -136h363v-114h-531z" />
+<glyph unicode="&#xb3;" d="M342 705v124q113 -66 203 -65q150 0 149 137q0 125 -147 125h-72v104h70q123 0 123 127q0 111 -97 111q-74 0 -161 -70l-66 86q111 92 238 93q113 0 174 -54q63 -55 63 -149q0 -139 -149 -189q176 -41 176 -186q0 -117 -74 -180q-72 -63 -215 -64q-132 1 -215 50z" />
+<glyph unicode="&#xb4;" d="M418 1241v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#xb5;" d="M180 -492v1590h182v-707q0 -260 218 -260q152 0 217 90q70 94 69 307v570h183v-1098h-148l-27 147h-10q-96 -168 -295 -167q-139 0 -213 88q6 -154 6 -240v-320h-182z" />
+<glyph unicode="&#xb6;" d="M66 1042q0 256 108 388q106 127 342 126h563v-1816h-121v1657h-206v-1657h-121v819q-61 -18 -146 -18q-419 -1 -419 501z" />
+<glyph unicode="&#xb7;" d="M487 723q0 139 127 139t127 -139t-127 -139t-127 139z" />
+<glyph unicode="&#xb8;" d="M428 -375q34 -6 80 -6q152 0 151 92q0 72 -172 113l91 176h120l-57 -115q160 -37 160 -172q0 -205 -291 -205q-39 0 -82 9v108z" />
+<glyph unicode="&#xb9;" d="M367 1309l219 151h135v-788h-146v465q0 84 9 200q-43 -45 -74 -65l-70 -51z" />
+<glyph unicode="&#xba;" d="M281 1133q0 160 90 253q88 92 245 93q145 0 238 -93q94 -94 94 -253q0 -164 -92 -256.5t-244 -92.5q-145 0 -237 93q-94 94 -94 256zM432 1133q0 -229 182 -230q180 0 181 230q0 225 -181 225q-182 0 -182 -225z" />
+<glyph unicode="&#xbb;" d="M197 193l237 348l-237 348l116 78l310 -414v-27l-310 -411zM604 193l238 348l-238 348l117 78l309 -414v-27l-309 -411z" />
+<glyph unicode="&#xbc;" d="M23 1309l219 151h135v-788h-146v465q0 84 9 200q-43 -45 -74 -65l-70 -51zM170 0l729 1462h158l-729 -1462h-158zM606 174v98l377 523h141v-508h84v-113h-84v-174h-143v174h-375zM751 287h230v176q0 83 6 172q-37 -70 -80 -131z" />
+<glyph unicode="&#xbd;" d="M2 1309l219 151h135v-788h-146v465q0 84 9 200q-43 -45 -74 -65l-70 -51zM104 0l729 1462h158l-729 -1462h-158zM694 0v102l187 199q106 113 141 168q31 49 31 108q0 115 -111 115q-82 0 -164 -76l-78 86q115 102 248 103q121 0 182 -60q66 -61 66 -164q0 -66 -35 -135 q-33 -66 -164 -196l-135 -136h363v-114h-531z" />
+<glyph unicode="&#xbe;" d="M20 705v124q113 -66 203 -65q150 0 149 137q0 125 -147 125h-72v104h70q123 0 123 127q0 111 -97 111q-74 0 -161 -70l-66 86q111 92 238 93q113 0 174 -54q63 -55 63 -149q0 -139 -149 -189q176 -41 176 -186q0 -117 -74 -180q-72 -63 -215 -64q-132 1 -215 50zM223 0 l729 1462h158l-729 -1462h-158zM627 174v98l377 523h141v-508h84v-113h-84v-174h-143v174h-375zM772 287h230v176q0 83 6 172q-37 -70 -80 -131z" />
+<glyph unicode="&#xbf;" d="M168 -35q0 133 53 217q52 83 197 191q113 80 151 141q33 51 33 143v19h160v-37q0 -115 -45 -193q-45 -76 -162 -159q-127 -96 -170 -156q-43 -57 -43 -158q0 -94 74 -149q76 -57 207 -57q178 0 370 90l62 -144q-215 -106 -422 -106q-217 0 -340 98q-125 100 -125 260z M547 979q0 139 127 139t127 -139t-127 -139t-127 139z" />
+<glyph unicode="&#xc0;" d="M33 0l483 1468h195l485 -1468h-192l-144 453h-491l-146 -453h-190zM422 618h385l-133 424q-39 121 -62 226q-20 -88 -47 -183zM340 1886v21h219q88 -182 174 -301v-27h-121q-163 139 -272 307z" />
+<glyph unicode="&#xc1;" d="M33 0l483 1468h195l485 -1468h-192l-144 453h-491l-146 -453h-190zM422 618h385l-133 424q-39 121 -62 226q-20 -88 -47 -183zM520 1579v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#xc2;" d="M33 0l483 1468h195l485 -1468h-192l-144 453h-491l-146 -453h-190zM422 618h385l-133 424q-39 121 -62 226q-20 -88 -47 -183zM283 1579v27l59 67q141 156 176 234h193q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#xc3;" d="M33 0l483 1468h195l485 -1468h-192l-144 453h-491l-146 -453h-190zM422 618h385l-133 424q-39 121 -62 226q-20 -88 -47 -183zM254 1579q25 264 211 264q57 0 162 -55q104 -57 135 -57q82 0 106 114h105q-27 -264 -211 -264q-57 0 -158 57q-100 55 -139 56 q-82 0 -107 -115h-104z" />
+<glyph unicode="&#xc4;" d="M33 0l483 1468h195l485 -1468h-192l-144 453h-491l-146 -453h-190zM422 618h385l-133 424q-39 121 -62 226q-20 -88 -47 -183zM330 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5zM705 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#xc5;" d="M33 0l483 1468h195l485 -1468h-192l-144 453h-491l-146 -453h-190zM422 618h385l-133 424q-39 121 -62 226q-20 -88 -47 -183zM387 1581q0 100 62 158q59 57 161 57q100 0 166 -59q63 -57 64 -154q0 -100 -64 -158q-66 -59 -166 -59q-102 0 -161 57q-62 58 -62 158z M498 1581q0 -113 112 -113q53 0 82 29q31 31 31 84q0 51 -30.5 82t-82.5 31q-49 0 -80 -31q-32 -33 -32 -82z" />
+<glyph unicode="&#xc6;" d="M0 0l338 1462h872v-164h-477v-452h438v-162h-438v-520h477v-164h-653v453h-289l-96 -453h-172zM305 618h252v680h-106z" />
+<glyph unicode="&#xc7;" d="M129 733q0 344 178 547t490 203q219 0 383 -86l-78 -156q-156 78 -305 78q-215 0 -342 -158q-129 -160 -129 -430q0 -287 120 -438q119 -150 351 -150q135 0 327 58v-162q-150 -59 -358 -59q-310 0 -473 196q-164 199 -164 557zM508 -375q34 -6 80 -6q152 0 151 92 q0 72 -172 113l91 176h120l-57 -115q160 -37 160 -172q0 -205 -291 -205q-39 0 -82 9v108z" />
+<glyph unicode="&#xc8;" d="M217 0v1462h842v-164h-656v-452h617v-162h-617v-520h656v-164h-842zM344 1886v21h219q88 -182 174 -301v-27h-121q-163 139 -272 307z" />
+<glyph unicode="&#xc9;" d="M217 0v1462h842v-164h-656v-452h617v-162h-617v-520h656v-164h-842zM481 1579v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#xca;" d="M217 0v1462h842v-164h-656v-452h617v-162h-617v-520h656v-164h-842zM318 1579v27l59 67q141 156 176 234h193q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#xcb;" d="M217 0v1462h842v-164h-656v-452h617v-162h-617v-520h656v-164h-842zM355 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5zM730 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#xcc;" d="M225 0v123l295 20v1176l-295 20v123h776v-123l-294 -20v-1176l294 -20v-123h-776zM309 1886v21h219q88 -182 174 -301v-27h-121q-163 139 -272 307z" />
+<glyph unicode="&#xcd;" d="M225 0v123l295 20v1176l-295 20v123h776v-123l-294 -20v-1176l294 -20v-123h-776zM537 1579v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#xce;" d="M225 0v123l295 20v1176l-295 20v123h776v-123l-294 -20v-1176l294 -20v-123h-776zM283 1579v27l59 67q141 156 176 234h193q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#xcf;" d="M225 0v123l295 20v1176l-295 20v123h776v-123l-294 -20v-1176l294 -20v-123h-776zM332 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5zM707 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#xd0;" d="M0 659v162h135v641h342q319 0 494 -188q176 -193 176 -529q0 -365 -182 -552q-186 -193 -529 -193h-301v659h-135zM322 160h96q532 0 532 579q0 563 -493 564h-135v-482h380v-162h-380v-499z" />
+<glyph unicode="&#xd1;" d="M135 0v1462h213l578 -1204h6q-14 285 -14 404v800h174v-1462h-215l-580 1210h-8q18 -276 18 -417v-793h-172zM258 1579q25 264 211 264q57 0 162 -55q104 -57 135 -57q82 0 106 114h105q-27 -264 -211 -264q-57 0 -158 57q-100 55 -139 56q-82 0 -107 -115h-104z" />
+<glyph unicode="&#xd2;" d="M84 735q0 750 534 750q258 0 392 -195q137 -199 137 -557q0 -362 -137 -557q-138 -197 -394 -196q-532 -1 -532 755zM281 733q0 -590 335 -590q174 0 254 145.5t80 444.5q0 305 -82 445q-84 143 -250 143q-337 0 -337 -588zM336 1886v21h219q88 -182 174 -301v-27h-121 q-163 139 -272 307z" />
+<glyph unicode="&#xd3;" d="M84 735q0 750 534 750q258 0 392 -195q137 -199 137 -557q0 -362 -137 -557q-138 -197 -394 -196q-532 -1 -532 755zM281 733q0 -590 335 -590q174 0 254 145.5t80 444.5q0 305 -82 445q-84 143 -250 143q-337 0 -337 -588zM508 1579v27q92 127 174 301h219v-21 q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#xd4;" d="M84 735q0 750 534 750q258 0 392 -195q137 -199 137 -557q0 -362 -137 -557q-138 -197 -394 -196q-532 -1 -532 755zM281 733q0 -590 335 -590q174 0 254 145.5t80 444.5q0 305 -82 445q-84 143 -250 143q-337 0 -337 -588zM283 1579v27l59 67q141 156 176 234h193 q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#xd5;" d="M84 735q0 750 534 750q258 0 392 -195q137 -199 137 -557q0 -362 -137 -557q-138 -197 -394 -196q-532 -1 -532 755zM281 733q0 -590 335 -590q174 0 254 145.5t80 444.5q0 305 -82 445q-84 143 -250 143q-337 0 -337 -588zM262 1579q25 264 211 264q57 0 162 -55 q104 -57 135 -57q82 0 106 114h105q-27 -264 -211 -264q-57 0 -158 57q-100 55 -139 56q-82 0 -107 -115h-104z" />
+<glyph unicode="&#xd6;" d="M84 735q0 750 534 750q258 0 392 -195q137 -199 137 -557q0 -362 -137 -557q-138 -197 -394 -196q-532 -1 -532 755zM281 733q0 -590 335 -590q174 0 254 145.5t80 444.5q0 305 -82 445q-84 143 -250 143q-337 0 -337 -588zM332 1732.5q0 102.5 96 102.5t96 -102.5 t-96 -102.5t-96 102.5zM707 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#xd7;" d="M190 1042l105 105l317 -318l322 318l104 -103l-321 -321l319 -320l-102 -102l-322 317l-317 -315l-102 103l315 317z" />
+<glyph unicode="&#xd8;" d="M80 2l121 197q-117 184 -117 536q0 750 534 750q186 0 310 -105l92 152l137 -78l-125 -201q115 -188 115 -520q0 -362 -137 -557q-138 -197 -394 -196q-193 0 -307 94l-92 -150zM281 733q0 -205 38 -342l515 836q-80 94 -216 94q-337 0 -337 -588zM403 229 q80 -86 213 -86q174 0 254 145.5t80 444.5q0 205 -35 328z" />
+<glyph unicode="&#xd9;" d="M125 520v942h186v-932q0 -387 307 -387q293 0 300 389v932h186v-948q0 -260 -125 -397q-127 -139 -371 -139q-483 -1 -483 540zM348 1886v21h219q88 -182 174 -301v-27h-121q-163 139 -272 307z" />
+<glyph unicode="&#xda;" d="M125 520v942h186v-932q0 -387 307 -387q293 0 300 389v932h186v-948q0 -260 -125 -397q-127 -139 -371 -139q-483 -1 -483 540zM494 1579v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#xdb;" d="M125 520v942h186v-932q0 -387 307 -387q293 0 300 389v932h186v-948q0 -260 -125 -397q-127 -139 -371 -139q-483 -1 -483 540zM283 1579v27l59 67q141 156 176 234h193q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#xdc;" d="M125 520v942h186v-932q0 -387 307 -387q293 0 300 389v932h186v-948q0 -260 -125 -397q-127 -139 -371 -139q-483 -1 -483 540zM332 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5zM707 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#xdd;" d="M33 1462h203l376 -739l381 739h201l-487 -893v-569h-187v559zM494 1579v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#xde;" d="M176 0v1462h186v-252h218q514 0 514 -428q0 -219 -137.5 -342t-403.5 -123h-191v-317h-186zM362 475h170q195 0 283 72q86 72 86 225q0 279 -338 279h-201v-576z" />
+<glyph unicode="&#xdf;" d="M164 0v1200q0 367 424 367q195 0 303 -80t108 -227q0 -131 -133 -248q-80 -72 -108 -107q-25 -31 -25 -63q0 -37 29 -70q27 -29 151 -110q144 -95 191 -173t47 -176q0 -162 -100.5 -247.5t-282.5 -85.5q-178 0 -289 69v166q143 -86 277 -86q213 0 213 174q0 80 -45 131 t-144 113q-125 78 -174 139.5t-49 147.5q0 117 129 223q129 108 129 196q0 164 -227 164q-242 0 -242 -215v-1202h-182z" />
+<glyph unicode="&#xe0;" d="M135 307q0 332 510 348l203 7v69q0 236 -244 236q-150 0 -328 -82l-63 137q199 96 383 96q223 0 328 -88q102 -86 102 -278v-752h-131l-37 152h-8q-74 -94 -158 -133t-209 -39q-164 0 -256 85.5t-92 241.5zM324 305q0 -178 200 -178q150 0 234 82q88 84 88 229v99 l-162 -7q-195 -8 -278 -61q-82 -51 -82 -164zM332 1548v21h219q88 -182 174 -301v-27h-121q-163 139 -272 307z" />
+<glyph unicode="&#xe1;" d="M135 307q0 332 510 348l203 7v69q0 236 -244 236q-150 0 -328 -82l-63 137q199 96 383 96q223 0 328 -88q102 -86 102 -278v-752h-131l-37 152h-8q-74 -94 -158 -133t-209 -39q-164 0 -256 85.5t-92 241.5zM324 305q0 -178 200 -178q150 0 234 82q88 84 88 229v99 l-162 -7q-195 -8 -278 -61q-82 -51 -82 -164zM502 1241v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#xe2;" d="M135 307q0 332 510 348l203 7v69q0 236 -244 236q-150 0 -328 -82l-63 137q199 96 383 96q223 0 328 -88q102 -86 102 -278v-752h-131l-37 152h-8q-74 -94 -158 -133t-209 -39q-164 0 -256 85.5t-92 241.5zM324 305q0 -178 200 -178q150 0 234 82q88 84 88 229v99 l-162 -7q-195 -8 -278 -61q-82 -51 -82 -164zM291 1241v27l59 67q141 156 176 234h193q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#xe3;" d="M135 307q0 332 510 348l203 7v69q0 236 -244 236q-150 0 -328 -82l-63 137q199 96 383 96q223 0 328 -88q102 -86 102 -278v-752h-131l-37 152h-8q-74 -94 -158 -133t-209 -39q-164 0 -256 85.5t-92 241.5zM324 305q0 -178 200 -178q150 0 234 82q88 84 88 229v99 l-162 -7q-195 -8 -278 -61q-82 -51 -82 -164zM264 1241q25 264 211 264q57 0 162 -55q104 -57 135 -57q82 0 106 114h105q-27 -264 -211 -264q-57 0 -158 57q-100 55 -139 56q-82 0 -107 -115h-104z" />
+<glyph unicode="&#xe4;" d="M135 307q0 332 510 348l203 7v69q0 236 -244 236q-150 0 -328 -82l-63 137q199 96 383 96q223 0 328 -88q102 -86 102 -278v-752h-131l-37 152h-8q-74 -94 -158 -133t-209 -39q-164 0 -256 85.5t-92 241.5zM324 305q0 -178 200 -178q150 0 234 82q88 84 88 229v99 l-162 -7q-195 -8 -278 -61q-82 -51 -82 -164zM342 1394.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5zM717 1394.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#xe5;" d="M135 307q0 332 510 348l203 7v69q0 236 -244 236q-150 0 -328 -82l-63 137q199 96 383 96q223 0 328 -88q102 -86 102 -278v-752h-131l-37 152h-8q-74 -94 -158 -133t-209 -39q-164 0 -256 85.5t-92 241.5zM324 305q0 -178 200 -178q150 0 234 82q88 84 88 229v99 l-162 -7q-195 -8 -278 -61q-82 -51 -82 -164zM387 1456q0 100 62 158q59 57 161 57q100 0 166 -59q63 -57 64 -154q0 -100 -64 -158q-66 -59 -166 -59q-102 0 -161 57q-62 58 -62 158zM498 1456q0 -113 112 -113q53 0 82 29q31 31 31 84q0 51 -30.5 82t-82.5 31 q-49 0 -80 -31q-32 -33 -32 -82z" />
+<glyph unicode="&#xe6;" d="M45 307q0 334 328 348l149 7v69q0 236 -139 236q-109 0 -211 -82l-57 137q133 96 276 96q187 0 246 -178q77 178 240 178q137 0 223 -135t86 -356v-113h-496q3 -190 68 -283q66 -92 168 -92q113 0 233 76v-162q-106 -74 -241 -73q-221 0 -316 229q-104 -229 -301 -229 q-117 0 -186 86q-70 83 -70 241zM215 305q0 -82 33 -131q31 -47 86 -47q84 0 135 82t51 229v99l-88 -7q-217 -18 -217 -225zM694 662h316q0 137 -41 223q-39 82 -111 82q-66 0 -113 -78q-45 -75 -51 -227z" />
+<glyph unicode="&#xe7;" d="M172 543q0 279 145 428q145 147 408 147q176 0 336 -59l-62 -158q-147 57 -268 57q-371 0 -371 -413q0 -406 361 -406q160 0 321 62v-160q-135 -61 -329 -61q-258 0 -400 145q-141 145 -141 418zM477 -375q34 -6 80 -6q152 0 151 92q0 72 -172 113l91 176h120l-57 -115 q160 -37 160 -172q0 -205 -291 -205q-39 0 -82 9v108z" />
+<glyph unicode="&#xe8;" d="M133 541q0 266 135 421.5t363 155.5q212 0 338 -135q127 -137 127 -356v-113h-774q9 -375 344 -375q199 0 370 76v-160q-170 -76 -364 -75q-244 0 -391 149q-148 151 -148 412zM326 662h573q0 305 -272 305q-276 0 -301 -305zM375 1548v21h219q88 -182 174 -301v-27h-121 q-163 139 -272 307z" />
+<glyph unicode="&#xe9;" d="M133 541q0 266 135 421.5t363 155.5q212 0 338 -135q127 -137 127 -356v-113h-774q9 -375 344 -375q199 0 370 76v-160q-170 -76 -364 -75q-244 0 -391 149q-148 151 -148 412zM326 662h573q0 305 -272 305q-276 0 -301 -305zM500 1241v27q92 127 174 301h219v-21 q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#xea;" d="M133 541q0 266 135 421.5t363 155.5q212 0 338 -135q127 -137 127 -356v-113h-774q9 -375 344 -375q199 0 370 76v-160q-170 -76 -364 -75q-244 0 -391 149q-148 151 -148 412zM326 662h573q0 305 -272 305q-276 0 -301 -305zM299 1241v27l59 67q141 156 176 234h193 q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#xeb;" d="M133 541q0 266 135 421.5t363 155.5q212 0 338 -135q127 -137 127 -356v-113h-774q9 -375 344 -375q199 0 370 76v-160q-170 -76 -364 -75q-244 0 -391 149q-148 151 -148 412zM326 662h573q0 305 -272 305q-276 0 -301 -305zM348 1394.5q0 102.5 96 102.5t96 -102.5 t-96 -102.5t-96 102.5zM723 1394.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#xec;" d="M197 0v123l344 20v811l-269 21v123h451v-955l352 -20v-123h-878zM332 1548v21h219q88 -182 174 -301v-27h-121q-163 139 -272 307z" />
+<glyph unicode="&#xed;" d="M197 0v123l344 20v811l-269 21v123h451v-955l352 -20v-123h-878zM531 1241v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#xee;" d="M197 0v123l344 20v811l-269 21v123h451v-955l352 -20v-123h-878zM283 1241v27l59 67q141 156 176 234h193q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#xef;" d="M197 0v123l344 20v811l-269 21v123h451v-955l352 -20v-123h-878zM330 1394.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5zM705 1394.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#xf0;" d="M135 477.5q0 233.5 121 364.5q121 129 334 129q211 0 299 -119l8 4q-57 225 -242 391l-256 -153l-73 114l217 131q-113 76 -172 109l69 123q135 -66 246 -148l227 138l74 -113l-194 -117q301 -291 301 -758q0 -279 -129 -436t-353 -157q-213 0 -346 133 q-131 131 -131 364.5zM328 471q0 -340 288 -340q152 0 222 100q68 98 67 295q0 129 -77.5 213t-213.5 84q-286 0 -286 -352z" />
+<glyph unicode="&#xf1;" d="M160 0v1098h147l27 -148h10q104 168 336 168q389 0 389 -401v-717h-182v707q0 260 -238 260q-307 0 -307 -398v-569h-182zM260 1241q25 264 211 264q57 0 162 -55q104 -57 135 -57q82 0 106 114h105q-27 -264 -211 -264q-57 0 -158 57q-100 55 -139 56q-82 0 -107 -115 h-104z" />
+<glyph unicode="&#xf2;" d="M115 551q0 264 135 415.5t366 151.5q217 0 356.5 -155.5t139.5 -411.5q0 -266 -137 -418q-139 -154 -365 -153q-219 0 -356 155q-139 158 -139 416zM303 551q0 -420 311 -420q309 0 310 420q0 416 -312 416q-309 0 -309 -416zM377 1548v21h219q88 -182 174 -301v-27h-121 q-163 139 -272 307z" />
+<glyph unicode="&#xf3;" d="M115 551q0 264 135 415.5t366 151.5q217 0 356.5 -155.5t139.5 -411.5q0 -266 -137 -418q-139 -154 -365 -153q-219 0 -356 155q-139 158 -139 416zM303 551q0 -420 311 -420q309 0 310 420q0 416 -312 416q-309 0 -309 -416zM498 1241v27q92 127 174 301h219v-21 q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#xf4;" d="M115 551q0 264 135 415.5t366 151.5q217 0 356.5 -155.5t139.5 -411.5q0 -266 -137 -418q-139 -154 -365 -153q-219 0 -356 155q-139 158 -139 416zM303 551q0 -420 311 -420q309 0 310 420q0 416 -312 416q-309 0 -309 -416zM279 1241v27l59 67q141 156 176 234h193 q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#xf5;" d="M115 551q0 264 135 415.5t366 151.5q217 0 356.5 -155.5t139.5 -411.5q0 -266 -137 -418q-139 -154 -365 -153q-219 0 -356 155q-139 158 -139 416zM303 551q0 -420 311 -420q309 0 310 420q0 416 -312 416q-309 0 -309 -416zM254 1241q25 264 211 264q57 0 162 -55 q104 -57 135 -57q82 0 106 114h105q-27 -264 -211 -264q-57 0 -158 57q-100 55 -139 56q-82 0 -107 -115h-104z" />
+<glyph unicode="&#xf6;" d="M115 551q0 264 135 415.5t366 151.5q217 0 356.5 -155.5t139.5 -411.5q0 -266 -137 -418q-139 -154 -365 -153q-219 0 -356 155q-139 158 -139 416zM303 551q0 -420 311 -420q309 0 310 420q0 416 -312 416q-309 0 -309 -416zM324 1394.5q0 102.5 96 102.5t96 -102.5 t-96 -102.5t-96 102.5zM699 1394.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#xf7;" d="M152 647v150h923v-150h-923zM498 373q0 125 114.5 125t114.5 -125t-114.5 -125t-114.5 125zM498 1071q0 125 114.5 125t114.5 -125t-114.5 -125t-114.5 125z" />
+<glyph unicode="&#xf8;" d="M115 551q0 264 133 415.5t368 151.5q129 0 236 -57l76 119l131 -84l-84 -131q137 -156 137 -414q0 -272 -135 -421.5t-367 -149.5q-127 0 -233 53l-76 -119l-131 84l84 131q-139 158 -139 422zM303 551q0 -178 53 -275l406 656q-66 35 -156 35q-162 0 -231 -103 q-72 -106 -72 -313zM467 164q59 -33 154 -33q162 0 233 105q70 102 70 315q0 166 -52 266z" />
+<glyph unicode="&#xf9;" d="M160 381v717h182v-707q0 -260 236 -260q162 0 235.5 92t73.5 305v570h182v-1098h-147l-27 147h-10q-106 -168 -334 -167q-391 0 -391 401zM340 1548v21h219q88 -182 174 -301v-27h-121q-163 139 -272 307z" />
+<glyph unicode="&#xfa;" d="M160 381v717h182v-707q0 -260 236 -260q162 0 235.5 92t73.5 305v570h182v-1098h-147l-27 147h-10q-106 -168 -334 -167q-391 0 -391 401zM500 1241v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#xfb;" d="M160 381v717h182v-707q0 -260 236 -260q162 0 235.5 92t73.5 305v570h182v-1098h-147l-27 147h-10q-106 -168 -334 -167q-391 0 -391 401zM291 1241v27l59 67q141 156 176 234h193q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#xfc;" d="M160 381v717h182v-707q0 -260 236 -260q162 0 235.5 92t73.5 305v570h182v-1098h-147l-27 147h-10q-106 -168 -334 -167q-391 0 -391 401zM332 1394.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5zM707 1394.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z " />
+<glyph unicode="&#xfd;" d="M82 1098h188l262 -654q82 -203 89 -290h6q20 106 90 292l239 652h189l-475 -1241q-70 -178 -156 -263q-89 -86 -246 -86q-94 0 -168 17v145q61 -12 136 -12q96 0 149 41t96 141l58 150zM494 1241v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#xfe;" d="M158 -492v2048h182v-458l-8 -148h8q111 168 322 168q203 0 315 -149q115 -152 115 -418q0 -268 -115 -419.5t-315 -151.5q-207 0 -322 159h-12q12 -129 12 -162v-469h-182zM340 551q0 -229 70 -324q72 -96 221 -96q272 0 272 422q0 414 -274 414q-152 0 -219.5 -88 t-69.5 -287v-41z" />
+<glyph unicode="&#xff;" d="M82 1098h188l262 -654q82 -203 89 -290h6q20 106 90 292l239 652h189l-475 -1241q-70 -178 -156 -263q-89 -86 -246 -86q-94 0 -168 17v145q61 -12 136 -12q96 0 149 41t96 141l58 150zM338 1394.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5zM713 1394.5 q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#x100;" d="M33 0l483 1468h195l485 -1468h-192l-144 453h-491l-146 -453h-190zM422 618h385l-133 424q-39 121 -62 226q-20 -88 -47 -183zM326 1579v150h575v-150h-575z" />
+<glyph unicode="&#x101;" d="M135 307q0 332 510 348l203 7v69q0 236 -244 236q-150 0 -328 -82l-63 137q199 96 383 96q223 0 328 -88q102 -86 102 -278v-752h-131l-37 152h-8q-74 -94 -158 -133t-209 -39q-164 0 -256 85.5t-92 241.5zM324 305q0 -178 200 -178q150 0 234 82q88 84 88 229v99 l-162 -7q-195 -8 -278 -61q-82 -51 -82 -164zM318 1241v150h575v-150h-575z" />
+<glyph unicode="&#x102;" d="M33 0l483 1468h195l485 -1468h-192l-144 453h-491l-146 -453h-190zM422 618h385l-133 424q-39 121 -62 226q-20 -88 -47 -183zM311 1856h109q6 -76 47 -101q39 -25 143 -24q182 0 191 125h112q-10 -127 -90 -201q-82 -76 -215 -76q-279 1 -297 277z" />
+<glyph unicode="&#x103;" d="M135 307q0 332 510 348l203 7v69q0 236 -244 236q-150 0 -328 -82l-63 137q199 96 383 96q223 0 328 -88q102 -86 102 -278v-752h-131l-37 152h-8q-74 -94 -158 -133t-209 -39q-164 0 -256 85.5t-92 241.5zM324 305q0 -178 200 -178q150 0 234 82q88 84 88 229v99 l-162 -7q-195 -8 -278 -61q-82 -51 -82 -164zM303 1518h109q6 -76 47 -101q39 -25 143 -24q182 0 191 125h112q-10 -127 -90 -201q-82 -76 -215 -76q-279 1 -297 277z" />
+<glyph unicode="&#x104;" d="M33 0l483 1468h195l485 -1468h-192l-144 453h-491l-146 -453h-190zM422 618h385l-133 424q-39 121 -62 226q-20 -88 -47 -183zM813 -252q0 144 190 252h131q-170 -127 -170 -238q0 -96 127 -96q68 0 123 15v-113q-78 -23 -156 -23q-121 0 -182 54q-63 55 -63 149z" />
+<glyph unicode="&#x105;" d="M135 307q0 332 510 348l203 7v69q0 236 -244 236q-150 0 -328 -82l-63 137q199 96 383 96q223 0 328 -88q102 -86 102 -278v-752h-131l-37 152h-8q-74 -94 -158 -133t-209 -39q-164 0 -256 85.5t-92 241.5zM324 305q0 -178 200 -178q150 0 234 82q88 84 88 229v99 l-162 -7q-195 -8 -278 -61q-82 -51 -82 -164zM705 -252q0 144 190 252h131q-170 -127 -170 -238q0 -96 127 -96q68 0 123 15v-113q-78 -23 -156 -23q-121 0 -182 54q-63 55 -63 149z" />
+<glyph unicode="&#x106;" d="M129 733q0 344 178 547t490 203q219 0 383 -86l-78 -156q-156 78 -305 78q-215 0 -342 -158q-129 -160 -129 -430q0 -287 120 -438q119 -150 351 -150q135 0 327 58v-162q-150 -59 -358 -59q-310 0 -473 196q-164 199 -164 557zM660 1579v27q92 127 174 301h219v-21 q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x107;" d="M172 543q0 279 145 428q145 147 408 147q176 0 336 -59l-62 -158q-147 57 -268 57q-371 0 -371 -413q0 -406 361 -406q160 0 321 62v-160q-135 -61 -329 -61q-258 0 -400 145q-141 145 -141 418zM578 1241v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x108;" d="M129 733q0 344 178 547t490 203q219 0 383 -86l-78 -156q-156 78 -305 78q-215 0 -342 -158q-129 -160 -129 -430q0 -287 120 -438q119 -150 351 -150q135 0 327 58v-162q-150 -59 -358 -59q-310 0 -473 196q-164 199 -164 557zM443 1579v27l59 67q141 156 176 234h193 q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#x109;" d="M172 543q0 279 145 428q145 147 408 147q176 0 336 -59l-62 -158q-147 57 -268 57q-371 0 -371 -413q0 -406 361 -406q160 0 321 62v-160q-135 -61 -329 -61q-258 0 -400 145q-141 145 -141 418zM367 1241v27l59 67q141 156 176 234h193q35 -78 176 -234l59 -67v-27h-121 q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#x10a;" d="M129 733q0 344 178 547t490 203q219 0 383 -86l-78 -156q-156 78 -305 78q-215 0 -342 -158q-129 -160 -129 -430q0 -287 120 -438q119 -150 351 -150q135 0 327 58v-162q-150 -59 -358 -59q-310 0 -473 196q-164 199 -164 557zM672 1732.5q0 114.5 106.5 114.5 t106.5 -114.5t-106.5 -114.5t-106.5 114.5z" />
+<glyph unicode="&#x10b;" d="M172 543q0 279 145 428q145 147 408 147q176 0 336 -59l-62 -158q-147 57 -268 57q-371 0 -371 -413q0 -406 361 -406q160 0 321 62v-160q-135 -61 -329 -61q-258 0 -400 145q-141 145 -141 418zM592 1394.5q0 114.5 106.5 114.5t106.5 -114.5t-106.5 -114.5 t-106.5 114.5z" />
+<glyph unicode="&#x10c;" d="M129 733q0 344 178 547t490 203q219 0 383 -86l-78 -156q-156 78 -305 78q-215 0 -342 -158q-129 -160 -129 -430q0 -287 120 -438q119 -150 351 -150q135 0 327 58v-162q-150 -59 -358 -59q-310 0 -473 196q-164 199 -164 557zM437 1880v27h120q82 -55 211 -187 q123 129 211 187h121v-27l-59 -67q-143 -160 -176 -234h-193q-33 74 -176 234z" />
+<glyph unicode="&#x10d;" d="M172 543q0 279 145 428q145 147 408 147q176 0 336 -59l-62 -158q-147 57 -268 57q-371 0 -371 -413q0 -406 361 -406q160 0 321 62v-160q-135 -61 -329 -61q-258 0 -400 145q-141 145 -141 418zM375 1542v27h120q82 -55 211 -187q123 129 211 187h121v-27l-59 -67 q-143 -160 -176 -234h-193q-33 74 -176 234z" />
+<glyph unicode="&#x10e;" d="M135 0v1462h342q319 0 494 -188q176 -193 176 -529q0 -365 -182 -552q-186 -193 -529 -193h-301zM322 160h96q532 0 532 579q0 563 -493 564h-135v-1143zM275 1880v27h120q82 -55 211 -187q123 129 211 187h121v-27l-59 -67q-143 -160 -176 -234h-193q-33 74 -176 234z " />
+<glyph unicode="&#x10f;" d="M80 547q0 268 115 419.5t315 151.5q205 0 322 -160h12q-12 129 -12 162v436h182v-1556h-147l-27 147h-8q-115 -168 -322 -167q-203 0 -315 149q-115 152 -115 418zM269 545q0 -414 274 -414q152 0 219 88q66 88 70 287v41q0 229 -70 323q-72 96 -221 97q-272 0 -272 -422 zM1074 1229v26l26 107q27 127 35 194h180v-20q0 -14 -43 -113q-49 -111 -102 -194h-96z" />
+<glyph unicode="&#x110;" d="M0 659v162h135v641h342q319 0 494 -188q176 -193 176 -529q0 -365 -182 -552q-186 -193 -529 -193h-301v659h-135zM322 160h96q532 0 532 579q0 563 -493 564h-135v-482h380v-162h-380v-499z" />
+<glyph unicode="&#x111;" d="M137 526q0 260 115 405.5t315 145.5q207 0 322 -159h12q-12 127 -12 161v158h-379v137h379v182h182v-182h156v-137h-156v-1237h-147l-27 147h-8q-115 -168 -322 -167q-201 0 -315.5 145t-114.5 401zM326 524q0 -393 274 -393q150 0 217 82q70 84 72 274v39q0 217 -70 308 q-71 92 -221 92q-272 -1 -272 -402z" />
+<glyph unicode="&#x112;" d="M217 0v1462h842v-164h-656v-452h617v-162h-617v-520h656v-164h-842zM336 1579v150h575v-150h-575z" />
+<glyph unicode="&#x113;" d="M133 541q0 266 135 421.5t363 155.5q212 0 338 -135q127 -137 127 -356v-113h-774q9 -375 344 -375q199 0 370 76v-160q-170 -76 -364 -75q-244 0 -391 149q-148 151 -148 412zM326 662h573q0 305 -272 305q-276 0 -301 -305zM346 1241v150h575v-150h-575z" />
+<glyph unicode="&#x114;" d="M217 0v1462h842v-164h-656v-452h617v-162h-617v-520h656v-164h-842zM342 1856h109q6 -76 47 -101q39 -25 143 -24q182 0 191 125h112q-10 -127 -90 -201q-82 -76 -215 -76q-279 1 -297 277z" />
+<glyph unicode="&#x115;" d="M133 541q0 266 135 421.5t363 155.5q212 0 338 -135q127 -137 127 -356v-113h-774q9 -375 344 -375q199 0 370 76v-160q-170 -76 -364 -75q-244 0 -391 149q-148 151 -148 412zM326 662h573q0 305 -272 305q-276 0 -301 -305zM329 1518h109q6 -76 47 -101q39 -25 143 -24 q182 0 191 125h112q-10 -127 -90 -201q-82 -76 -215 -76q-279 1 -297 277z" />
+<glyph unicode="&#x116;" d="M217 0v1462h842v-164h-656v-452h617v-162h-617v-520h656v-164h-842zM543 1703.5q0 114.5 106.5 114.5t106.5 -114.5t-106.5 -114.5t-106.5 114.5z" />
+<glyph unicode="&#x117;" d="M133 541q0 266 135 421.5t363 155.5q212 0 338 -135q127 -137 127 -356v-113h-774q9 -375 344 -375q199 0 370 76v-160q-170 -76 -364 -75q-244 0 -391 149q-148 151 -148 412zM326 662h573q0 305 -272 305q-276 0 -301 -305zM531 1394.5q0 114.5 106.5 114.5 t106.5 -114.5t-106.5 -114.5t-106.5 114.5z" />
+<glyph unicode="&#x118;" d="M217 0v1462h842v-164h-656v-452h617v-162h-617v-520h656v-164h-842zM619 -252q0 144 190 252h131q-170 -127 -170 -238q0 -96 127 -96q68 0 123 15v-113q-78 -23 -156 -23q-121 0 -182 54q-63 55 -63 149z" />
+<glyph unicode="&#x119;" d="M133 541q0 266 135 421.5t363 155.5q212 0 338 -135q127 -137 127 -356v-113h-774q9 -375 344 -375q199 0 370 76v-160q-170 -76 -364 -75q-244 0 -391 149q-148 151 -148 412zM326 662h573q0 305 -272 305q-276 0 -301 -305zM641 -221q0 144 190 252h131 q-170 -127 -170 -238q0 -96 127 -96q68 0 123 15v-113q-78 -23 -156 -23q-121 0 -182 54q-63 55 -63 149z" />
+<glyph unicode="&#x11a;" d="M217 0v1462h842v-164h-656v-452h617v-162h-617v-520h656v-164h-842zM318 1880v27h120q82 -55 211 -187q123 129 211 187h121v-27l-59 -67q-143 -160 -176 -234h-193q-33 74 -176 234z" />
+<glyph unicode="&#x11b;" d="M133 541q0 266 135 421.5t363 155.5q212 0 338 -135q127 -137 127 -356v-113h-774q9 -375 344 -375q199 0 370 76v-160q-170 -76 -364 -75q-244 0 -391 149q-148 151 -148 412zM326 662h573q0 305 -272 305q-276 0 -301 -305zM308 1542v27h120q82 -55 211 -187 q123 129 211 187h121v-27l-59 -67q-143 -160 -176 -234h-193q-33 74 -176 234z" />
+<glyph unicode="&#x11c;" d="M117 733q0 352 161.5 551t446.5 199q193 0 346 -86l-72 -162q-150 84 -280 84q-193 0 -299.5 -155.5t-106.5 -432.5q0 -588 394 -588q94 0 202 29v436h-237v164h422v-717q-199 -76 -420 -75q-262 0 -410 200q-147 200 -147 553zM363 1579v27l59 67q141 156 176 234h193 q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#x11d;" d="M102 -186q0 212 240 270q-96 47 -96 154q0 113 133 192q-86 35 -139 123q-51 84 -52 186q0 182 106.5 280.5t303.5 98.5q88 0 150 -20h378v-113l-196 -27q66 -88 65 -213q0 -162 -106 -256q-109 -96 -297 -96q-55 0 -86 6q-100 -55 -100 -133q0 -84 161 -84h187 q172 0 266 -78q92 -76 92 -219q0 -377 -565 -377q-218 0 -332 80q-113 81 -113 226zM274 -180q0 -174 271 -174q395 0 395 223q0 88 -49 118.5t-199 30.5h-188q-230 1 -230 -198zM367 745q0 -227 227 -227q223 0 223 230q0 240 -225 239.5t-225 -242.5zM275 1241v27l59 67 q141 156 176 234h193q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#x11e;" d="M117 733q0 352 161.5 551t446.5 199q193 0 346 -86l-72 -162q-150 84 -280 84q-193 0 -299.5 -155.5t-106.5 -432.5q0 -588 394 -588q94 0 202 29v436h-237v164h422v-717q-199 -76 -420 -75q-262 0 -410 200q-147 200 -147 553zM411 1856h109q6 -76 47 -101 q39 -25 143 -24q182 0 191 125h112q-10 -127 -90 -201q-82 -76 -215 -76q-279 1 -297 277z" />
+<glyph unicode="&#x11f;" d="M102 -186q0 212 240 270q-96 47 -96 154q0 113 133 192q-86 35 -139 123q-51 84 -52 186q0 182 106.5 280.5t303.5 98.5q88 0 150 -20h378v-113l-196 -27q66 -88 65 -213q0 -162 -106 -256q-109 -96 -297 -96q-55 0 -86 6q-100 -55 -100 -133q0 -84 161 -84h187 q172 0 266 -78q92 -76 92 -219q0 -377 -565 -377q-218 0 -332 80q-113 81 -113 226zM274 -180q0 -174 271 -174q395 0 395 223q0 88 -49 118.5t-199 30.5h-188q-230 1 -230 -198zM367 745q0 -227 227 -227q223 0 223 230q0 240 -225 239.5t-225 -242.5zM301 1518h109 q6 -76 47 -101q39 -25 143 -24q182 0 191 125h112q-10 -127 -90 -201q-82 -76 -215 -76q-279 1 -297 277z" />
+<glyph unicode="&#x120;" d="M117 733q0 352 161.5 551t446.5 199q193 0 346 -86l-72 -162q-150 84 -280 84q-193 0 -299.5 -155.5t-106.5 -432.5q0 -588 394 -588q94 0 202 29v436h-237v164h422v-717q-199 -76 -420 -75q-262 0 -410 200q-147 200 -147 553zM617 1732.5q0 114.5 106.5 114.5 t106.5 -114.5t-106.5 -114.5t-106.5 114.5z" />
+<glyph unicode="&#x121;" d="M102 -186q0 212 240 270q-96 47 -96 154q0 113 133 192q-86 35 -139 123q-51 84 -52 186q0 182 106.5 280.5t303.5 98.5q88 0 150 -20h378v-113l-196 -27q66 -88 65 -213q0 -162 -106 -256q-109 -96 -297 -96q-55 0 -86 6q-100 -55 -100 -133q0 -84 161 -84h187 q172 0 266 -78q92 -76 92 -219q0 -377 -565 -377q-218 0 -332 80q-113 81 -113 226zM274 -180q0 -174 271 -174q395 0 395 223q0 88 -49 118.5t-199 30.5h-188q-230 1 -230 -198zM367 745q0 -227 227 -227q223 0 223 230q0 240 -225 239.5t-225 -242.5zM508 1394.5 q0 114.5 106.5 114.5t106.5 -114.5t-106.5 -114.5t-106.5 114.5z" />
+<glyph unicode="&#x122;" d="M117 733q0 352 161.5 551t446.5 199q193 0 346 -86l-72 -162q-150 84 -280 84q-193 0 -299.5 -155.5t-106.5 -432.5q0 -588 394 -588q94 0 202 29v436h-237v164h422v-717q-199 -76 -420 -75q-262 0 -410 200q-147 200 -147 553zM540 -426q63 145 84 301h178v-20 q0 -22 -49 -123q-51 -109 -114 -185h-99v27z" />
+<glyph unicode="&#x123;" d="M102 -186q0 212 240 270q-96 47 -96 154q0 113 133 192q-86 35 -139 123q-51 84 -52 186q0 182 106.5 280.5t303.5 98.5q88 0 150 -20h378v-113l-196 -27q66 -88 65 -213q0 -162 -106 -256q-109 -96 -297 -96q-55 0 -86 6q-100 -55 -100 -133q0 -84 161 -84h187 q172 0 266 -78q92 -76 92 -219q0 -377 -565 -377q-218 0 -332 80q-113 81 -113 226zM274 -180q0 -174 271 -174q395 0 395 223q0 88 -49 118.5t-199 30.5h-188q-230 1 -230 -198zM367 745q0 -227 227 -227q223 0 223 230q0 240 -225 239.5t-225 -242.5zM528 1241v21 q0 20 45 118q45 100 119 189h98v-27q-61 -145 -83 -301h-179z" />
+<glyph unicode="&#x124;" d="M135 0v1462h187v-616h585v616h187v-1462h-187v682h-585v-682h-187zM283 1579v27l59 67q141 156 176 234h193q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#x125;" d="M160 0v1556h182v-462l-8 -144h10q104 168 336 168q389 0 389 -401v-717h-182v707q0 260 -238 260q-307 0 -307 -398v-569h-182zM297 1634v27l59 67q141 156 176 234h193q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#x126;" d="M0 1069v150h135v243h187v-243h585v243h187v-243h135v-150h-135v-1069h-187v682h-585v-682h-187v1069h-135zM322 846h585v223h-585v-223z" />
+<glyph unicode="&#x127;" d="M4 1237v137h156v182h184v-182h418v-137h-420v-184l-10 -144h10q106 168 346 168q190 0 287 -96q94 -94 94 -305v-676h-182v666q0 260 -236 260q-160 0 -235 -95q-74 -92 -74 -303v-528h-182v1237h-156z" />
+<glyph unicode="&#x128;" d="M225 0v123l295 20v1176l-295 20v123h776v-123l-294 -20v-1176l294 -20v-123h-776zM254 1579q25 264 211 264q57 0 162 -55q104 -57 135 -57q82 0 106 114h105q-27 -264 -211 -264q-57 0 -158 57q-100 55 -139 56q-82 0 -107 -115h-104z" />
+<glyph unicode="&#x129;" d="M197 0v123l344 20v811l-269 21v123h451v-955l352 -20v-123h-878zM252 1241q25 264 211 264q57 0 162 -55q104 -57 135 -57q82 0 106 114h105q-27 -264 -211 -264q-57 0 -158 57q-100 55 -139 56q-82 0 -107 -115h-104z" />
+<glyph unicode="&#x12a;" d="M225 0v123l295 20v1176l-295 20v123h776v-123l-294 -20v-1176l294 -20v-123h-776zM328 1579v150h575v-150h-575z" />
+<glyph unicode="&#x12b;" d="M197 0v123l344 20v811l-269 21v123h451v-955l352 -20v-123h-878zM326 1241v150h575v-150h-575z" />
+<glyph unicode="&#x12c;" d="M225 0v123l295 20v1176l-295 20v123h776v-123l-294 -20v-1176l294 -20v-123h-776zM313 1856h109q6 -76 47 -101q39 -25 143 -24q182 0 191 125h112q-10 -127 -90 -201q-82 -76 -215 -76q-279 1 -297 277z" />
+<glyph unicode="&#x12d;" d="M197 0v123l344 20v811l-269 21v123h451v-955l352 -20v-123h-878zM338 1518h109q6 -76 47 -101q39 -25 143 -24q182 0 191 125h112q-10 -127 -90 -201q-82 -76 -215 -76q-279 1 -297 277z" />
+<glyph unicode="&#x12e;" d="M225 0v123l295 20v1176l-295 20v123h776v-123l-294 -20v-1176l294 -20v-123h-776zM422 -252q0 144 190 252h131q-170 -127 -170 -238q0 -96 127 -96q68 0 123 15v-113q-78 -23 -156 -23q-121 0 -182 54q-63 55 -63 149z" />
+<glyph unicode="&#x12f;" d="M197 0v123l344 20v811l-269 21v123h451v-955l352 -20v-123h-878zM526 1435.5q0 114.5 106.5 114.5t106.5 -114q0 -57 -32.5 -86t-73.5 -29q-107 0 -107 114.5zM439 -252q0 144 190 252h131q-170 -127 -170 -238q0 -96 127 -96q68 0 123 15v-113q-78 -23 -156 -23 q-121 0 -182 54q-63 55 -63 149z" />
+<glyph unicode="&#x130;" d="M225 0v123l295 20v1176l-295 20v123h776v-123l-294 -20v-1176l294 -20v-123h-776zM508 1732.5q0 114.5 106.5 114.5t106.5 -114.5t-106.5 -114.5t-106.5 114.5z" />
+<glyph unicode="&#x131;" d="M197 0v123l344 20v811l-269 21v123h451v-955l352 -20v-123h-878z" />
+<glyph unicode="&#x132;" d="M156 0v1462h186v-1462h-186zM492 23v163q90 -45 186 -45q195 0 194 283v1038h187v-1026q0 -457 -365 -456q-134 0 -202 43z" />
+<glyph unicode="&#x133;" d="M188 1435.5q0 114.5 106.5 114.5t106.5 -114q0 -57 -32.5 -86t-73.5 -29q-107 0 -107 114.5zM203 0v1098h182v-1098h-182zM502 -303q86 -39 190 -39q164 0 164 215v1081l-215 21v123h397v-1215q0 -182 -86 -278.5t-235 -96.5q-121 0 -215 35v154zM821 1435.5 q0 114.5 106.5 114.5t106.5 -114q0 -58 -30 -86q-33 -29 -76 -29q-107 0 -107 114.5z" />
+<glyph unicode="&#x134;" d="M137 39v166q162 -61 309 -62q162 0 254.5 80t92.5 226v1013h186v-1011q0 -215 -141 -345q-139 -127 -377 -126q-215 0 -324 59zM551 1579v27l59 67q141 156 176 234h193q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#x135;" d="M303 1241v27l59 67q141 156 176 234h193q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120zM135 -303q131 -39 289 -39q119 0 182 57q66 59 66 158v1081l-420 21v123h602v-1215q0 -180 -113 -278q-111 -96 -319 -97q-160 0 -287 35v154z" />
+<glyph unicode="&#x136;" d="M211 0v1462h186v-731l121 168l453 563h209l-521 -637l539 -825h-211l-450 698l-140 -114v-584h-186zM510 -426q63 145 84 301h178v-20q0 -22 -49 -123q-51 -109 -114 -185h-99v27z" />
+<glyph unicode="&#x137;" d="M215 0v1556h180v-714l-16 -289h4l135 152l395 393h222l-494 -475l522 -623h-213l-426 504l-129 -82v-422h-180zM485 -426q63 145 84 301h178v-20q0 -22 -49 -123q-51 -109 -114 -185h-99v27z" />
+<glyph unicode="&#x138;" d="M215 0v1098h180v-291l-16 -299h4l137 166l402 424h213l-494 -510l522 -588h-213l-426 469l-129 -82v-387h-180z" />
+<glyph unicode="&#x139;" d="M233 0v1462h187v-1296h635v-166h-822zM262 1579v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x13a;" d="M188 0v123l344 20v1270l-268 21v122h451v-1413l352 -20v-123h-879zM496 1636v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x13b;" d="M233 0v1462h187v-1296h635v-166h-822zM491 -426q63 145 84 301h178v-20q0 -22 -49 -123q-51 -109 -114 -185h-99v27z" />
+<glyph unicode="&#x13c;" d="M188 0v123l344 20v1270l-268 21v122h451v-1413l352 -20v-123h-879zM460 -426q63 145 84 301h178v-20q0 -22 -49 -123q-51 -109 -114 -185h-99v27z" />
+<glyph unicode="&#x13d;" d="M233 0v1462h187v-1296h635v-166h-822zM750 1137v26l26 107q27 127 35 194h180v-20q0 -14 -43 -113q-49 -111 -102 -194h-96z" />
+<glyph unicode="&#x13e;" d="M188 0v123l344 20v1270l-268 21v122h451v-1413l352 -20v-123h-879zM865 1229v26l26 107q27 127 35 194h180v-20q0 -14 -43 -113q-49 -111 -102 -194h-96z" />
+<glyph unicode="&#x13f;" d="M233 0v1462h187v-1296h635v-166h-822zM750 773.5q0 114.5 106.5 114.5t106.5 -114.5t-106.5 -114.5t-106.5 114.5z" />
+<glyph unicode="&#x140;" d="M188 0v123l344 20v1270l-268 21v122h451v-1413l352 -20v-123h-879zM866 681.5q0 114.5 106.5 114.5t106.5 -114.5t-106.5 -114.5t-106.5 114.5z" />
+<glyph unicode="&#x141;" d="M72 539l198 125v798h187v-680l299 189l78 -125l-377 -238v-442h635v-166h-822v492l-125 -78z" />
+<glyph unicode="&#x142;" d="M188 0v123l344 20v449l-141 -92l-78 121l219 143v649l-268 21v122h451v-673l164 108l77 -121l-241 -159v-568l352 -20v-123h-879z" />
+<glyph unicode="&#x143;" d="M135 0v1462h213l578 -1204h6q-14 285 -14 404v800h174v-1462h-215l-580 1210h-8q18 -276 18 -417v-793h-172zM516 1579v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x144;" d="M160 0v1098h147l27 -148h10q104 168 336 168q389 0 389 -401v-717h-182v707q0 260 -238 260q-307 0 -307 -398v-569h-182zM529 1241v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x145;" d="M135 0v1462h213l578 -1204h6q-14 285 -14 404v800h174v-1462h-215l-580 1210h-8q18 -276 18 -417v-793h-172zM434 -426q63 145 84 301h178v-20q0 -22 -49 -123q-51 -109 -114 -185h-99v27z" />
+<glyph unicode="&#x146;" d="M160 0v1098h147l27 -148h10q104 168 336 168q389 0 389 -401v-717h-182v707q0 260 -238 260q-307 0 -307 -398v-569h-182zM454 -426q63 145 84 301h178v-20q0 -22 -49 -123q-51 -109 -114 -185h-99v27z" />
+<glyph unicode="&#x147;" d="M135 0v1462h213l578 -1204h6q-14 285 -14 404v800h174v-1462h-215l-580 1210h-8q18 -276 18 -417v-793h-172zM281 1880v27h120q82 -55 211 -187q123 129 211 187h121v-27l-59 -67q-143 -160 -176 -234h-193q-33 74 -176 234z" />
+<glyph unicode="&#x148;" d="M160 0v1098h147l27 -148h10q104 168 336 168q389 0 389 -401v-717h-182v707q0 260 -238 260q-307 0 -307 -398v-569h-182zM295 1542v27h120q82 -55 211 -187q123 129 211 187h121v-27l-59 -67q-143 -160 -176 -234h-193q-33 74 -176 234z" />
+<glyph unicode="&#x149;" d="M-16 961q59 231 100 501h199l14 -22q-47 -190 -176 -479h-137zM262 0v1098h148l26 -148h10q43 77 129 123q84 45 189 45q367 0 366 -401v-717h-182v707q0 260 -219 260q-285 0 -285 -398v-569h-182z" />
+<glyph unicode="&#x14a;" d="M135 0v1462h213l578 -1128h10q-18 272 -18 403v725h174v-1442q0 -201 -101 -303q-102 -106 -286 -106q-94 0 -156 24v160q74 -20 158 -20q211 0 211 225l-621 1210h-8q18 -276 18 -417v-793h-172z" />
+<glyph unicode="&#x14b;" d="M160 0v1098h147l27 -148h10q104 168 336 168q389 0 389 -401v-875q0 -334 -291 -334q-82 0 -133 25v148q53 -20 115 -21q127 0 127 170v877q0 260 -238 260q-307 0 -307 -398v-569h-182z" />
+<glyph unicode="&#x14c;" d="M84 735q0 750 534 750q258 0 392 -195q137 -199 137 -557q0 -362 -137 -557q-138 -197 -394 -196q-532 -1 -532 755zM281 733q0 -590 335 -590q174 0 254 145.5t80 444.5q0 305 -82 445q-84 143 -250 143q-337 0 -337 -588zM330 1579v150h575v-150h-575z" />
+<glyph unicode="&#x14d;" d="M115 551q0 264 135 415.5t366 151.5q217 0 356.5 -155.5t139.5 -411.5q0 -266 -137 -418q-139 -154 -365 -153q-219 0 -356 155q-139 158 -139 416zM303 551q0 -420 311 -420q309 0 310 420q0 416 -312 416q-309 0 -309 -416zM326 1241v150h575v-150h-575z" />
+<glyph unicode="&#x14e;" d="M84 735q0 750 534 750q258 0 392 -195q137 -199 137 -557q0 -362 -137 -557q-138 -197 -394 -196q-532 -1 -532 755zM281 733q0 -590 335 -590q174 0 254 145.5t80 444.5q0 305 -82 445q-84 143 -250 143q-337 0 -337 -588zM313 1856h109q6 -76 47 -101q39 -25 143 -24 q182 0 191 125h112q-10 -127 -90 -201q-82 -76 -215 -76q-279 1 -297 277z" />
+<glyph unicode="&#x14f;" d="M115 551q0 264 135 415.5t366 151.5q217 0 356.5 -155.5t139.5 -411.5q0 -266 -137 -418q-139 -154 -365 -153q-219 0 -356 155q-139 158 -139 416zM303 551q0 -420 311 -420q309 0 310 420q0 416 -312 416q-309 0 -309 -416zM313 1518h109q6 -76 47 -101q39 -25 143 -24 q182 0 191 125h112q-10 -127 -90 -201q-82 -76 -215 -76q-279 1 -297 277z" />
+<glyph unicode="&#x150;" d="M84 735q0 750 534 750q258 0 392 -195q137 -199 137 -557q0 -362 -137 -557q-138 -197 -394 -196q-532 -1 -532 755zM281 733q0 -590 335 -590q174 0 254 145.5t80 444.5q0 305 -82 445q-84 143 -250 143q-337 0 -337 -588zM326 1579v27q92 127 174 301h198v-21 q-109 -168 -272 -307h-100zM688 1579v27q92 125 174 301h199v-21q-109 -168 -272 -307h-101z" />
+<glyph unicode="&#x151;" d="M115 551q0 264 135 415.5t366 151.5q217 0 356.5 -155.5t139.5 -411.5q0 -266 -137 -418q-139 -154 -365 -153q-219 0 -356 155q-139 158 -139 416zM303 551q0 -420 311 -420q309 0 310 420q0 416 -312 416q-309 0 -309 -416zM328 1241v27q92 127 174 301h198v-21 q-109 -168 -272 -307h-100zM690 1241v27q92 125 174 301h199v-21q-109 -168 -272 -307h-101z" />
+<glyph unicode="&#x152;" d="M20 735q0 750 512 750q80 0 154 -23h541v-164h-398v-452h359v-162h-359v-520h398v-164h-574l-49 -10q-57 -10 -96 -10q-488 -1 -488 755zM209 733q0 -590 309 -590q70 0 133 33v1112q-57 33 -131 33q-311 0 -311 -588z" />
+<glyph unicode="&#x153;" d="M57 551q0 268 88 417.5t242 149.5q172 0 260 -217q82 217 242 217q131 0 209 -133q76 -131 76 -358v-113h-439q2 -375 189 -375q111 0 204 76v-162q-96 -74 -217 -73q-88 0 -159 59q-70 57 -101 162q-90 -221 -266 -221q-145 0 -238 153q-90 150 -90 418zM227 551 q0 -213 39 -315q41 -104 131 -105q168 0 168 410q0 426 -170 426q-90 0 -129 -102.5t-39 -313.5zM737 662h260q0 305 -123 305q-125 0 -137 -305z" />
+<glyph unicode="&#x154;" d="M186 0v1462h357q520 0 520 -415q0 -287 -289 -392l397 -655h-219l-350 604h-229v-604h-187zM373 762h164q170 0 251.5 65.5t81.5 210.5q0 141 -79.5 203t-258.5 62h-159v-541zM447 1579v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x155;" d="M264 0v1098h148l22 -201h8q76 117 162 170q84 51 215 51q119 0 240 -45l-49 -166q-121 45 -224 45q-163 0 -251 -92q-88 -90 -89 -268v-592h-182zM510 1241v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x156;" d="M186 0v1462h357q520 0 520 -415q0 -287 -289 -392l397 -655h-219l-350 604h-229v-604h-187zM373 762h164q170 0 251.5 65.5t81.5 210.5q0 141 -79.5 203t-258.5 62h-159v-541zM481 -426q63 145 84 301h178v-20q0 -22 -49 -123q-51 -109 -114 -185h-99v27z" />
+<glyph unicode="&#x157;" d="M264 0v1098h148l22 -201h8q76 117 162 170q84 51 215 51q119 0 240 -45l-49 -166q-121 45 -224 45q-163 0 -251 -92q-88 -90 -89 -268v-592h-182zM186 -426q63 145 84 301h178v-20q0 -22 -49 -123q-51 -109 -114 -185h-99v27z" />
+<glyph unicode="&#x158;" d="M186 0v1462h357q520 0 520 -415q0 -287 -289 -392l397 -655h-219l-350 604h-229v-604h-187zM373 762h164q170 0 251.5 65.5t81.5 210.5q0 141 -79.5 203t-258.5 62h-159v-541zM252 1880v27h120q82 -55 211 -187q123 129 211 187h121v-27l-59 -67q-143 -160 -176 -234 h-193q-33 74 -176 234z" />
+<glyph unicode="&#x159;" d="M264 0v1098h148l22 -201h8q76 117 162 170q84 51 215 51q119 0 240 -45l-49 -166q-121 45 -224 45q-163 0 -251 -92q-88 -90 -89 -268v-592h-182zM295 1542v27h120q82 -55 211 -187q123 129 211 187h121v-27l-59 -67q-143 -160 -176 -234h-193q-33 74 -176 234z" />
+<glyph unicode="&#x15a;" d="M141 49v178q211 -86 414 -86q350 0 350 240q0 104 -71 160q-74 57 -285 133q-211 74 -299 174q-90 102 -90 264q0 174 129 272.5t352 98.5q225 0 416 -78l-64 -164q-197 78 -360 78q-293 0 -293 -209q0 -102 66 -164q66 -63 270 -133q244 -88 327.5 -182t83.5 -240 q0 -190 -139 -301q-138 -111 -393 -110q-258 -1 -414 69zM514 1579v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x15b;" d="M203 49v166q195 -86 370 -86q274 0 275 162q0 55 -49 98t-226 107q-233 86 -294 159q-59 72 -60 172q0 135 111 213q113 78 309.5 78t368.5 -74l-60 -149q-184 72 -319 72q-236 0 -236 -133q0 -57 51.5 -96.5t231.5 -102.5q207 -76 280 -152q70 -72 70 -182 q0 -150 -116.5 -235.5t-331.5 -85.5q-246 -1 -375 69zM512 1241v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x15c;" d="M141 49v178q211 -86 414 -86q350 0 350 240q0 104 -71 160q-74 57 -285 133q-211 74 -299 174q-90 102 -90 264q0 174 129 272.5t352 98.5q225 0 416 -78l-64 -164q-197 78 -360 78q-293 0 -293 -209q0 -102 66 -164q66 -63 270 -133q244 -88 327.5 -182t83.5 -240 q0 -190 -139 -301q-138 -111 -393 -110q-258 -1 -414 69zM303 1579v27l59 67q141 156 176 234h193q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#x15d;" d="M203 49v166q195 -86 370 -86q274 0 275 162q0 55 -49 98t-226 107q-233 86 -294 159q-59 72 -60 172q0 135 111 213q113 78 309.5 78t368.5 -74l-60 -149q-184 72 -319 72q-236 0 -236 -133q0 -57 51.5 -96.5t231.5 -102.5q207 -76 280 -152q70 -72 70 -182 q0 -150 -116.5 -235.5t-331.5 -85.5q-246 -1 -375 69zM306 1241v27l59 67q141 156 176 234h193q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#x15e;" d="M141 49v178q211 -86 414 -86q350 0 350 240q0 104 -71 160q-74 57 -285 133q-211 74 -299 174q-90 102 -90 264q0 174 129 272.5t352 98.5q225 0 416 -78l-64 -164q-197 78 -360 78q-293 0 -293 -209q0 -102 66 -164q66 -63 270 -133q244 -88 327.5 -182t83.5 -240 q0 -190 -139 -301q-138 -111 -393 -110q-258 -1 -414 69zM405 -375q34 -6 80 -6q152 0 151 92q0 72 -172 113l91 176h120l-57 -115q160 -37 160 -172q0 -205 -291 -205q-39 0 -82 9v108z" />
+<glyph unicode="&#x15f;" d="M203 49v166q195 -86 370 -86q274 0 275 162q0 55 -49 98t-226 107q-233 86 -294 159q-59 72 -60 172q0 135 111 213q113 78 309.5 78t368.5 -74l-60 -149q-184 72 -319 72q-236 0 -236 -133q0 -57 51.5 -96.5t231.5 -102.5q207 -76 280 -152q70 -72 70 -182 q0 -150 -116.5 -235.5t-331.5 -85.5q-246 -1 -375 69zM420 -375q34 -6 80 -6q152 0 151 92q0 72 -172 113l91 176h120l-57 -115q160 -37 160 -172q0 -205 -291 -205q-39 0 -82 9v108z" />
+<glyph unicode="&#x160;" d="M141 49v178q211 -86 414 -86q350 0 350 240q0 104 -71 160q-74 57 -285 133q-211 74 -299 174q-90 102 -90 264q0 174 129 272.5t352 98.5q225 0 416 -78l-64 -164q-197 78 -360 78q-293 0 -293 -209q0 -102 66 -164q66 -63 270 -133q244 -88 327.5 -182t83.5 -240 q0 -190 -139 -301q-138 -111 -393 -110q-258 -1 -414 69zM314 1880v27h120q82 -55 211 -187q123 129 211 187h121v-27l-59 -67q-143 -160 -176 -234h-193q-33 74 -176 234z" />
+<glyph unicode="&#x161;" d="M203 49v166q195 -86 370 -86q274 0 275 162q0 55 -49 98t-226 107q-233 86 -294 159q-59 72 -60 172q0 135 111 213q113 78 309.5 78t368.5 -74l-60 -149q-184 72 -319 72q-236 0 -236 -133q0 -57 51.5 -96.5t231.5 -102.5q207 -76 280 -152q70 -72 70 -182 q0 -150 -116.5 -235.5t-331.5 -85.5q-246 -1 -375 69zM293 1542v27h120q82 -55 211 -187q123 129 211 187h121v-27l-59 -67q-143 -160 -176 -234h-193q-33 74 -176 234z" />
+<glyph unicode="&#x162;" d="M102 1298v164h1022v-164h-417v-1298h-187v1298h-418zM448 -426q63 145 84 301h178v-20q0 -22 -49 -123q-51 -109 -114 -185h-99v27z" />
+<glyph unicode="&#x163;" d="M139 961v94l267 49l77 287h105v-293h438v-137h-438v-637q0 -195 192 -195q98 0 240 21v-138q-137 -33 -252 -32q-362 0 -362 344v637h-267zM489 -426q63 145 84 301h178v-20q0 -22 -49 -123q-51 -109 -114 -185h-99v27z" />
+<glyph unicode="&#x164;" d="M102 1298v164h1022v-164h-417v-1298h-187v1298h-418zM283 1880v27h120q82 -55 211 -187q123 129 211 187h121v-27l-59 -67q-143 -160 -176 -234h-193q-33 74 -176 234z" />
+<glyph unicode="&#x165;" d="M139 961v94l267 49l77 287h105v-293h438v-137h-438v-637q0 -195 192 -195q98 0 240 21v-138q-137 -33 -252 -32q-362 0 -362 344v637h-267zM799 1229v26l26 107q27 127 35 194h180v-20q0 -14 -43 -113q-49 -111 -102 -194h-96z" />
+<glyph unicode="&#x166;" d="M102 1298v164h1022v-164h-417v-479h294v-149h-294v-670h-187v670h-297v149h297v479h-418z" />
+<glyph unicode="&#x167;" d="M139 961v94l267 49l77 287h105v-293h438v-137h-438v-248h307v-138h-307v-251q0 -195 192 -195q98 0 240 21v-138q-137 -33 -252 -32q-362 0 -362 344v251h-162v138h162v248h-267z" />
+<glyph unicode="&#x168;" d="M125 520v942h186v-932q0 -387 307 -387q293 0 300 389v932h186v-948q0 -260 -125 -397q-127 -139 -371 -139q-483 -1 -483 540zM260 1579q25 264 211 264q57 0 162 -55q104 -57 135 -57q82 0 106 114h105q-27 -264 -211 -264q-57 0 -158 57q-100 55 -139 56 q-82 0 -107 -115h-104z" />
+<glyph unicode="&#x169;" d="M160 381v717h182v-707q0 -260 236 -260q162 0 235.5 92t73.5 305v570h182v-1098h-147l-27 147h-10q-106 -168 -334 -167q-391 0 -391 401zM256 1241q25 264 211 264q57 0 162 -55q104 -57 135 -57q82 0 106 114h105q-27 -264 -211 -264q-57 0 -158 57q-100 55 -139 56 q-82 0 -107 -115h-104z" />
+<glyph unicode="&#x16a;" d="M125 520v942h186v-932q0 -387 307 -387q293 0 300 389v932h186v-948q0 -260 -125 -397q-127 -139 -371 -139q-483 -1 -483 540zM326 1579v150h575v-150h-575z" />
+<glyph unicode="&#x16b;" d="M160 381v717h182v-707q0 -260 236 -260q162 0 235.5 92t73.5 305v570h182v-1098h-147l-27 147h-10q-106 -168 -334 -167q-391 0 -391 401zM328 1241v150h575v-150h-575z" />
+<glyph unicode="&#x16c;" d="M125 520v942h186v-932q0 -387 307 -387q293 0 300 389v932h186v-948q0 -260 -125 -397q-127 -139 -371 -139q-483 -1 -483 540zM313 1856h109q6 -76 47 -101q39 -25 143 -24q182 0 191 125h112q-10 -127 -90 -201q-82 -76 -215 -76q-279 1 -297 277z" />
+<glyph unicode="&#x16d;" d="M160 381v717h182v-707q0 -260 236 -260q162 0 235.5 92t73.5 305v570h182v-1098h-147l-27 147h-10q-106 -168 -334 -167q-391 0 -391 401zM313 1518h109q6 -76 47 -101q39 -25 143 -24q182 0 191 125h112q-10 -127 -90 -201q-82 -76 -215 -76q-279 1 -297 277z" />
+<glyph unicode="&#x16e;" d="M125 520v942h186v-932q0 -387 307 -387q293 0 300 389v932h186v-948q0 -260 -125 -397q-127 -139 -371 -139q-483 -1 -483 540zM389 1794q0 100 62 158q59 57 161 57q100 0 166 -59q63 -57 64 -154q0 -100 -64 -158q-66 -59 -166 -59q-102 0 -161 57q-62 58 -62 158z M500 1794q0 -113 112 -113q53 0 82 29q31 31 31 84q0 51 -30.5 82t-82.5 31q-49 0 -80 -31q-32 -33 -32 -82z" />
+<glyph unicode="&#x16f;" d="M160 381v717h182v-707q0 -260 236 -260q162 0 235.5 92t73.5 305v570h182v-1098h-147l-27 147h-10q-106 -168 -334 -167q-391 0 -391 401zM385 1456q0 100 62 158q59 57 161 57q100 0 166 -59q63 -57 64 -154q0 -100 -64 -158q-66 -59 -166 -59q-102 0 -161 57 q-62 58 -62 158zM496 1456q0 -113 112 -113q53 0 82 29q31 31 31 84q0 51 -30.5 82t-82.5 31q-49 0 -80 -31q-32 -33 -32 -82z" />
+<glyph unicode="&#x170;" d="M125 520v942h186v-932q0 -387 307 -387q293 0 300 389v932h186v-948q0 -260 -125 -397q-127 -139 -371 -139q-483 -1 -483 540zM322 1579v27q92 127 174 301h198v-21q-109 -168 -272 -307h-100zM684 1579v27q92 125 174 301h199v-21q-109 -168 -272 -307h-101z" />
+<glyph unicode="&#x171;" d="M160 381v717h182v-707q0 -260 236 -260q162 0 235.5 92t73.5 305v570h182v-1098h-147l-27 147h-10q-106 -168 -334 -167q-391 0 -391 401zM326 1241v27q92 127 174 301h198v-21q-109 -168 -272 -307h-100zM688 1241v27q92 125 174 301h199v-21q-109 -168 -272 -307h-101z " />
+<glyph unicode="&#x172;" d="M125 520v942h186v-932q0 -387 307 -387q293 0 300 389v932h186v-948q0 -260 -125 -397q-127 -139 -371 -139q-483 -1 -483 540zM441 -252q0 144 190 252h131q-170 -127 -170 -238q0 -96 127 -96q68 0 123 15v-113q-78 -23 -156 -23q-121 0 -182 54q-63 55 -63 149z" />
+<glyph unicode="&#x173;" d="M160 381v717h182v-707q0 -260 236 -260q162 0 235.5 92t73.5 305v570h182v-1098h-147l-27 147h-10q-106 -168 -334 -167q-391 0 -391 401zM723 -252q0 144 190 252h131q-170 -127 -170 -238q0 -96 127 -96q68 0 123 15v-113q-78 -23 -156 -23q-121 0 -182 54 q-63 55 -63 149z" />
+<glyph unicode="&#x174;" d="M2 1462h170l88 -663q18 -145 39 -377q18 -203 18 -242q27 162 70 312l141 516h177l145 -521q57 -205 72 -307q6 92 65 619l70 663h170l-187 -1462h-190l-168 580q-43 147 -66 282q-31 -168 -65 -284l-156 -578h-190zM285 1579v27l59 67q141 156 176 234h193 q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#x175;" d="M-4 1098h162l98 -543q39 -215 57 -393h6q33 195 68 358l133 578h193l127 -578q43 -188 67 -358h6q29 225 60 393l102 543h158l-225 -1098h-195l-131 596l-68 330h-6l-65 -334l-135 -592h-189zM281 1241v27l59 67q141 156 176 234h193q35 -78 176 -234l59 -67v-27h-121 q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#x176;" d="M33 1462h203l376 -739l381 739h201l-487 -893v-569h-187v559zM283 1579v27l59 67q141 156 176 234h193q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#x177;" d="M82 1098h188l262 -654q82 -203 89 -290h6q20 106 90 292l239 652h189l-475 -1241q-70 -178 -156 -263q-89 -86 -246 -86q-94 0 -168 17v145q61 -12 136 -12q96 0 149 41t96 141l58 150zM285 1241v27l59 67q141 156 176 234h193q35 -78 176 -234l59 -67v-27h-121 q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#x178;" d="M33 1462h203l376 -739l381 739h201l-487 -893v-569h-187v559zM332 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5zM707 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#x179;" d="M102 0v145l793 1151h-772v166h981v-145l-793 -1151h813v-166h-1022zM475 1579v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x17a;" d="M182 0v125l660 836h-627v137h811v-146l-647 -815h665v-137h-862zM496 1241v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x17b;" d="M102 0v145l793 1151h-772v166h981v-145l-793 -1151h813v-166h-1022zM524 1732.5q0 114.5 106.5 114.5t106.5 -114.5t-106.5 -114.5t-106.5 114.5z" />
+<glyph unicode="&#x17c;" d="M182 0v125l660 836h-627v137h811v-146l-647 -815h665v-137h-862zM524 1394.5q0 114.5 106.5 114.5t106.5 -114.5t-106.5 -114.5t-106.5 114.5z" />
+<glyph unicode="&#x17d;" d="M102 0v145l793 1151h-772v166h981v-145l-793 -1151h813v-166h-1022zM283 1880v27h120q82 -55 211 -187q123 129 211 187h121v-27l-59 -67q-143 -160 -176 -234h-193q-33 74 -176 234z" />
+<glyph unicode="&#x17e;" d="M182 0v125l660 836h-627v137h811v-146l-647 -815h665v-137h-862zM295 1542v27h120q82 -55 211 -187q123 129 211 187h121v-27l-59 -67q-143 -160 -176 -234h-193q-33 74 -176 234z" />
+<glyph unicode="&#x17f;" d="M356 0v1200q0 188 90 279q88 88 299 88q121 0 273 -35l-41 -143q-109 29 -227.5 28.5t-163.5 -49.5q-47 -51 -47 -166v-1202h-183z" />
+<glyph unicode="&#x192;" d="M215 -324q59 -18 115 -18q92 0 123 51q33 55 32 164v963h-194v75l194 68v137q0 190 76 278.5t256 88.5q96 0 197 -37l-47 -141q-82 29 -144 28q-92 0 -123 -51q-33 -55 -32 -164v-145h245v-137h-245v-961q0 -190 -76 -278.5t-256 -88.5q-55 0 -121 15v153z" />
+<glyph unicode="&#x1f0;" d="M135 -303q131 -39 289 -39q119 0 182 57q66 59 66 158v1081l-420 21v123h602v-1215q0 -180 -113 -278q-111 -96 -319 -97q-160 0 -287 35v154zM275 1542v27h120q82 -55 211 -187q123 129 211 187h121v-27l-59 -67q-143 -160 -176 -234h-193q-33 74 -176 234z" />
+<glyph unicode="&#x1fa;" d="M33 0l483 1468h195l485 -1468h-192l-144 453h-491l-146 -453h-190zM422 618h385l-133 424q-39 121 -62 226q-20 -88 -47 -183zM389 1581q0 100 62 158q59 57 161 57q100 0 166 -59q63 -57 64 -154q0 -100 -64 -158q-66 -59 -166 -59q-102 0 -161 57q-62 58 -62 158z M500 1581q0 -113 112 -113q53 0 82 29q31 31 31 84q0 51 -30.5 82t-82.5 31q-49 0 -80 -31q-32 -33 -32 -82zM490 1835v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x1fb;" d="M135 307q0 332 510 348l203 7v69q0 236 -244 236q-150 0 -328 -82l-63 137q199 96 383 96q223 0 328 -88q102 -86 102 -278v-752h-131l-37 152h-8q-74 -94 -158 -133t-209 -39q-164 0 -256 85.5t-92 241.5zM324 305q0 -178 200 -178q150 0 234 82q88 84 88 229v99 l-162 -7q-195 -8 -278 -61q-82 -51 -82 -164zM387 1456q0 100 62 158q59 57 161 57q100 0 166 -59q63 -57 64 -154q0 -100 -64 -158q-66 -59 -166 -59q-102 0 -161 57q-62 58 -62 158zM498 1456q0 -113 112 -113q53 0 82 29q31 31 31 84q0 51 -30.5 82t-82.5 31 q-49 0 -80 -31q-32 -33 -32 -82zM512 1720v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x1fc;" d="M0 0l338 1462h872v-164h-477v-452h438v-162h-438v-520h477v-164h-653v453h-289l-96 -453h-172zM305 618h252v680h-106zM631 1579v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x1fd;" d="M45 307q0 334 328 348l149 7v69q0 236 -139 236q-109 0 -211 -82l-57 137q133 96 276 96q187 0 246 -178q77 178 240 178q137 0 223 -135t86 -356v-113h-496q3 -190 68 -283q66 -92 168 -92q113 0 233 76v-162q-106 -74 -241 -73q-221 0 -316 229q-104 -229 -301 -229 q-117 0 -186 86q-70 83 -70 241zM215 305q0 -82 33 -131q31 -47 86 -47q84 0 135 82t51 229v99l-88 -7q-217 -18 -217 -225zM694 662h316q0 137 -41 223q-39 82 -111 82q-66 0 -113 -78q-45 -75 -51 -227zM531 1241v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z " />
+<glyph unicode="&#x1fe;" d="M80 2l121 197q-117 184 -117 536q0 750 534 750q186 0 310 -105l92 152l137 -78l-125 -201q115 -188 115 -520q0 -362 -137 -557q-138 -197 -394 -196q-193 0 -307 94l-92 -150zM281 733q0 -205 38 -342l515 836q-80 94 -216 94q-337 0 -337 -588zM403 229 q80 -86 213 -86q174 0 254 145.5t80 444.5q0 205 -35 328zM475 1579v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x1ff;" d="M115 551q0 264 133 415.5t368 151.5q129 0 236 -57l76 119l131 -84l-84 -131q137 -156 137 -414q0 -272 -135 -421.5t-367 -149.5q-127 0 -233 53l-76 -119l-131 84l84 131q-139 158 -139 422zM303 551q0 -178 53 -275l406 656q-66 35 -156 35q-162 0 -231 -103 q-72 -106 -72 -313zM467 164q59 -33 154 -33q162 0 233 105q70 102 70 315q0 166 -52 266zM498 1241v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x218;" d="M141 49v178q211 -86 414 -86q350 0 350 240q0 104 -71 160q-74 57 -285 133q-211 74 -299 174q-90 102 -90 264q0 174 129 272.5t352 98.5q225 0 416 -78l-64 -164q-197 78 -360 78q-293 0 -293 -209q0 -102 66 -164q66 -63 270 -133q244 -88 327.5 -182t83.5 -240 q0 -190 -139 -301q-138 -111 -393 -110q-258 -1 -414 69zM483 -426q63 145 84 301h178v-20q0 -22 -49 -123q-51 -109 -114 -185h-99v27z" />
+<glyph unicode="&#x219;" d="M203 49v166q195 -86 370 -86q274 0 275 162q0 55 -49 98t-226 107q-233 86 -294 159q-59 72 -60 172q0 135 111 213q113 78 309.5 78t368.5 -74l-60 -149q-184 72 -319 72q-236 0 -236 -133q0 -57 51.5 -96.5t231.5 -102.5q207 -76 280 -152q70 -72 70 -182 q0 -150 -116.5 -235.5t-331.5 -85.5q-246 -1 -375 69zM454 -426q63 145 84 301h178v-20q0 -22 -49 -123q-51 -109 -114 -185h-99v27z" />
+<glyph unicode="&#x2bc;" d="M446 961q61 254 101 501h219l14 -22q-53 -207 -176 -479h-158z" />
+<glyph unicode="&#x2c6;" d="M283 1241v27l59 67q141 156 176 234h193q35 -78 176 -234l59 -67v-27h-121q-78 49 -211 186q-133 -137 -211 -186h-120z" />
+<glyph unicode="&#x2c7;" d="M283 1542v27h120q82 -55 211 -187q123 129 211 187h121v-27l-59 -67q-143 -160 -176 -234h-193q-33 74 -176 234z" />
+<glyph unicode="&#x2c9;" d="M326 1241v150h575v-150h-575z" />
+<glyph unicode="&#x2d8;" d="M313 1518h109q6 -76 47 -101q39 -25 143 -24q182 0 191 125h112q-10 -127 -90 -201q-82 -76 -215 -76q-279 1 -297 277z" />
+<glyph unicode="&#x2d9;" d="M508 1394.5q0 114.5 106.5 114.5t106.5 -114.5t-106.5 -114.5t-106.5 114.5z" />
+<glyph unicode="&#x2da;" d="M387 1456q0 100 62 158q59 57 161 57q100 0 166 -59q63 -57 64 -154q0 -100 -64 -158q-66 -59 -166 -59q-102 0 -161 57q-62 58 -62 158zM498 1456q0 -113 112 -113q53 0 82 29q31 31 31 84q0 51 -30.5 82t-82.5 31q-49 0 -80 -31q-32 -33 -32 -82z" />
+<glyph unicode="&#x2db;" d="M414 -252q0 144 190 252h131q-170 -127 -170 -238q0 -96 127 -96q68 0 123 15v-113q-78 -23 -156 -23q-121 0 -182 54q-63 55 -63 149z" />
+<glyph unicode="&#x2dc;" d="M254 1241q25 264 211 264q57 0 162 -55q104 -57 135 -57q82 0 106 114h105q-27 -264 -211 -264q-57 0 -158 57q-100 55 -139 56q-82 0 -107 -115h-104z" />
+<glyph unicode="&#x2dd;" d="M246 1241v27q92 127 174 301h198v-21q-109 -168 -272 -307h-100zM608 1241v27q92 125 174 301h199v-21q-109 -168 -272 -307h-101z" />
+<glyph unicode="&#x2f3;" d="M387 -340q0 47 16 90q16 41 46 68q31 29 69 43q37 14 92 14q49 0 90 -14q39 -14 72 -43t49 -66q18 -39 19 -90q0 -57 -17 -92q-18 -40 -49 -67.5t-74 -43.5q-41 -14 -90 -14q-55 0 -92 14q-39 14 -69 43q-29 27 -46 68q-16 43 -16 90zM498 -340q0 -51 28 -84 q27 -29 84 -29q53 0 82 29q31 31 31 84t-31 84q-29 29 -82 29q-51 0 -80 -29q-32 -33 -32 -84z" />
+<glyph unicode="&#x384;" d="M479 1241v27l31 106q29 106 39 195h199v-21q0 -16 -50 -121q-47 -102 -110 -186h-109z" />
+<glyph unicode="&#x385;" d="M299 1394.5q0 102.5 96.5 102.5t96.5 -102q0 -49 -27 -76t-70 -27q-96 0 -96 102.5zM532 1389v26q53 147 91 301h206v-20q-92 -163 -215 -307h-82zM735 1394.5q0 102.5 96.5 102.5t96.5 -102.5t-96.5 -102.5t-96.5 102.5z" />
+<glyph unicode="&#x386;" d="M33 0l483 1468h195l485 -1468h-192l-144 453h-491l-146 -453h-190zM422 618h385l-133 424q-39 121 -62 226q-20 -88 -47 -183zM37 1137v27l31 106q29 106 39 195h199v-21q0 -16 -50 -121q-47 -102 -110 -186h-109z" />
+<glyph unicode="&#x387;" d="M487 723q0 139 127 139t127 -139t-127 -139t-127 139z" />
+<glyph unicode="&#x388;" d="M217 0v1462h842v-164h-656v-452h617v-162h-617v-520h656v-164h-842zM-115 1137v27l31 106q29 106 39 195h199v-21q0 -16 -50 -121q-47 -102 -110 -186h-109z" />
+<glyph unicode="&#x389;" d="M135 0v1462h187v-616h585v616h187v-1462h-187v682h-585v-682h-187zM-156 1137v27l31 106q29 106 39 195h199v-21q0 -16 -50 -121q-47 -102 -110 -186h-109z" />
+<glyph unicode="&#x38a;" d="M225 0v123l295 20v1176l-295 20v123h776v-123l-294 -20v-1176l294 -20v-123h-776zM-92 1137v27l31 106q29 106 39 195h199v-21q0 -16 -50 -121q-47 -102 -110 -186h-109z" />
+<glyph unicode="&#x38c;" d="M84 735q0 750 534 750q258 0 392 -195q137 -199 137 -557q0 -362 -137 -557q-138 -197 -394 -196q-532 -1 -532 755zM281 733q0 -590 335 -590q174 0 254 145.5t80 444.5q0 305 -82 445q-84 143 -250 143q-337 0 -337 -588zM-131 1137v27l31 106q29 106 39 195h199v-21 q0 -16 -50 -121q-47 -102 -110 -186h-109z" />
+<glyph unicode="&#x38e;" d="M33 1462h203l376 -739l381 739h201l-487 -893v-569h-187v559zM-238 1137v27l31 106q29 106 39 195h199v-21q0 -16 -50 -121q-47 -102 -110 -186h-109z" />
+<glyph unicode="&#x38f;" d="M74 0v164h266q-254 233 -254 661q0 313 139 486q141 174 391 174q248 0 390 -174q141 -176 141 -486q0 -428 -256 -661h268v-164h-469v147q260 229 260 674q0 500 -335.5 500t-335.5 -500q0 -442 262 -674v-147h-467zM-133 1137v27l31 106q29 106 39 195h199v-21 q0 -16 -50 -121q-47 -102 -110 -186h-109z" />
+<glyph unicode="&#x390;" d="M428 324v774h182v-774q0 -195 193 -195q117 0 213 21v-138q-98 -33 -225 -32q-363 0 -363 344zM242 1394.5q0 102.5 96.5 102.5t96.5 -102q0 -49 -27 -76t-70 -27q-96 0 -96 102.5zM475 1389v26q53 147 91 301h206v-20q-92 -163 -215 -307h-82zM678 1394.5 q0 102.5 96.5 102.5t96.5 -102.5t-96.5 -102.5t-96.5 102.5z" />
+<glyph unicode="&#x391;" d="M33 0l483 1468h195l485 -1468h-192l-144 453h-491l-146 -453h-190zM422 618h385l-133 424q-39 121 -62 226q-20 -88 -47 -183z" />
+<glyph unicode="&#x392;" d="M135 0v1462h440q272 0 398 -88q123 -86 123 -282q0 -129 -78 -213t-213 -103v-10q332 -55 332 -342q0 -199 -127 -311.5t-348 -112.5h-527zM322 158h307q311 0 311 274q0 254 -324 254h-294v-528zM322 842h284q157 0 228 55q72 55 71 182q0 121 -75.5 172.5t-243.5 51.5 h-264v-461z" />
+<glyph unicode="&#x393;" d="M233 0v1462h826v-166h-639v-1296h-187z" />
+<glyph unicode="&#x394;" d="M68 0v133l450 1329h187l454 -1337v-125h-1091zM268 166h686l-252 752q-51 150 -92 339q-53 -231 -88 -333z" />
+<glyph unicode="&#x395;" d="M217 0v1462h842v-164h-656v-452h617v-162h-617v-520h656v-164h-842z" />
+<glyph unicode="&#x396;" d="M102 0v145l793 1151h-772v166h981v-145l-793 -1151h813v-166h-1022z" />
+<glyph unicode="&#x397;" d="M135 0v1462h187v-616h585v616h187v-1462h-187v682h-585v-682h-187z" />
+<glyph unicode="&#x398;" d="M84 735q0 750 534 750q258 0 392 -195q137 -199 137 -557q0 -362 -137 -557q-138 -197 -394 -196q-532 -1 -532 755zM281 733q0 -590 335 -590q174 0 254 145.5t80 444.5q0 305 -82 445q-84 143 -250 143q-337 0 -337 -588zM410 664v161h411v-161h-411z" />
+<glyph unicode="&#x399;" d="M225 0v123l295 20v1176l-295 20v123h776v-123l-294 -20v-1176l294 -20v-123h-776z" />
+<glyph unicode="&#x39a;" d="M211 0v1462h186v-731l121 168l453 563h209l-521 -637l539 -825h-211l-450 698l-140 -114v-584h-186z" />
+<glyph unicode="&#x39b;" d="M33 0l487 1462h187l489 -1462h-199l-292 922q-55 172 -93 340q-47 -207 -88 -334l-295 -928h-196z" />
+<glyph unicode="&#x39c;" d="M113 0v1462h247l248 -1192h6l250 1192h252v-1462h-153v887q0 121 14 391h-8l-283 -1278h-154l-278 1280h-8q18 -268 18 -406v-874h-151z" />
+<glyph unicode="&#x39d;" d="M135 0v1462h213l578 -1204h6q-14 285 -14 404v800h174v-1462h-215l-580 1210h-8q18 -276 18 -417v-793h-172z" />
+<glyph unicode="&#x39e;" d="M111 0v164h1005v-164h-1005zM152 1298v164h923v-164h-923zM233 684v162h760v-162h-760z" />
+<glyph unicode="&#x39f;" d="M84 735q0 750 534 750q258 0 392 -195q137 -199 137 -557q0 -362 -137 -557q-138 -197 -394 -196q-532 -1 -532 755zM281 733q0 -590 335 -590q174 0 254 145.5t80 444.5q0 305 -82 445q-84 143 -250 143q-337 0 -337 -588z" />
+<glyph unicode="&#x3a0;" d="M135 0v1462h959v-1462h-187v1298h-585v-1298h-187z" />
+<glyph unicode="&#x3a1;" d="M176 0v1462h404q514 0 514 -428q0 -219 -137.5 -342t-403.5 -123h-191v-569h-186zM362 727h170q195 0 283 72q86 70 86 225q0 279 -338 279h-201v-576z" />
+<glyph unicode="&#x3a3;" d="M131 0v152l414 614l-402 549v147h893v-164h-680l389 -530l-409 -604h760v-164h-965z" />
+<glyph unicode="&#x3a4;" d="M102 1298v164h1022v-164h-417v-1298h-187v1298h-418z" />
+<glyph unicode="&#x3a5;" d="M33 1462h203l376 -739l381 739h201l-487 -893v-569h-187v559z" />
+<glyph unicode="&#x3a6;" d="M27 758q0 238 122.5 391.5t335.5 153.5h47v180h166v-180h47q213 0 336 -154t123 -391q0 -233 -127 -396q-125 -158 -354 -157h-25v-225h-166v225h-24q-230 0 -356 160q-125 157 -125 393zM199 762q0 -184 86 -293q86 -106 241 -107h6v781h-32q-141 0 -221 -104.5 t-80 -276.5zM698 362h7q156 0 241 107q86 109 86 293q0 172 -80 276.5t-221 104.5h-33v-781z" />
+<glyph unicode="&#x3a7;" d="M53 0l453 764l-422 698h199l331 -559l334 559h191l-422 -692l457 -770h-211l-355 635l-366 -635h-189z" />
+<glyph unicode="&#x3a8;" d="M57 979v483h172v-479q0 -229 70 -305q68 -74 217 -74h16v858h166v-858h17q150 0 217 72q70 74 69 303v483h173v-479q0 -289 -115 -412q-117 -125 -344 -125h-17v-446h-166v446h-16q-231 0 -344 125q-115 127 -115 408z" />
+<glyph unicode="&#x3a9;" d="M74 0v164h266q-254 233 -254 661q0 313 139 486q141 174 391 174q248 0 390 -174q141 -176 141 -486q0 -428 -256 -661h268v-164h-469v147q260 229 260 674q0 500 -335.5 500t-335.5 -500q0 -442 262 -674v-147h-467z" />
+<glyph unicode="&#x3aa;" d="M225 0v123l295 20v1176l-295 20v123h776v-123l-294 -20v-1176l294 -20v-123h-776zM332 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5zM707 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#x3ab;" d="M33 1462h203l376 -739l381 739h201l-487 -893v-569h-187v559zM332 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5zM707 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#x3ac;" d="M121 547q0 270 115 422q113 150 321 149q211 0 305 -168h12q29 100 68 148h143q-51 -162 -51 -439v-419q0 -111 84 -111q25 0 60 10v-133q-57 -27 -115 -26q-158 0 -199 167h-12q-109 -168 -313 -167q-193 0 -305.5 149.5t-112.5 417.5zM309 545q0 -414 264 -414 q147 0 211 92q66 92 68 309v15q0 227 -67.5 323.5t-213.5 96.5q-262 0 -262 -422zM495 1241v27l31 106q29 106 39 195h199v-21q0 -16 -50 -121q-47 -102 -110 -186h-109z" />
+<glyph unicode="&#x3ad;" d="M201 299q0 195 237 268v11q-203 66 -202 249q0 135 112.5 213t300.5 78q219 0 383 -76l-63 -147q-162 72 -316 72q-244 0 -243 -154q0 -166 276 -166h154v-153h-160q-301 0 -301 -185q0 -180 283 -180q199 0 366 86v-160q-139 -76 -377 -75q-211 0 -332 83 q-118 82 -118 236zM575 1241v27l31 106q29 106 39 195h199v-21q0 -16 -50 -121q-47 -102 -110 -186h-109z" />
+<glyph unicode="&#x3ae;" d="M160 0v1098h147l27 -148h10q100 168 336 168q389 0 389 -401v-1209h-182v1199q0 260 -238 260q-307 0 -307 -398v-569h-182zM559 1241v27l31 106q29 106 39 195h199v-21q0 -16 -50 -121q-47 -102 -110 -186h-109z" />
+<glyph unicode="&#x3af;" d="M428 324v774h182v-774q0 -195 193 -195q117 0 213 21v-138q-98 -33 -225 -32q-363 0 -363 344zM471 1241v27l31 106q29 106 39 195h199v-21q0 -16 -50 -121q-47 -102 -110 -186h-109z" />
+<glyph unicode="&#x3b0;" d="M160 498v600h182v-590q0 -379 274 -379q150 0 217.5 116.5t67.5 362.5q0 242 -63 490h182q63 -242 63 -498q0 -317 -114.5 -468.5t-358.5 -151.5q-450 0 -450 518zM297 1394.5q0 102.5 96.5 102.5t96.5 -102q0 -49 -27 -76t-70 -27q-96 0 -96 102.5zM530 1389v26 q53 147 91 301h206v-20q-92 -163 -215 -307h-82zM733 1394.5q0 102.5 96.5 102.5t96.5 -102.5t-96.5 -102.5t-96.5 102.5z" />
+<glyph unicode="&#x3b1;" d="M121 547q0 270 115 422q113 150 321 149q211 0 305 -168h12q29 100 68 148h143q-51 -162 -51 -439v-419q0 -111 84 -111q25 0 60 10v-133q-57 -27 -115 -26q-158 0 -199 167h-12q-109 -168 -313 -167q-193 0 -305.5 149.5t-112.5 417.5zM309 545q0 -414 264 -414 q147 0 211 92q66 92 68 309v15q0 227 -67.5 323.5t-213.5 96.5q-262 0 -262 -422z" />
+<glyph unicode="&#x3b2;" d="M158 -492v1588q0 227 118 348q121 123 328 123q199 0 316 -105q119 -106 118 -288q0 -135 -80 -228q-76 -88 -235 -117v-6q381 -49 381 -409q0 -206 -123 -320q-125 -115 -338 -114q-188 0 -303 63v-535h-182zM340 209q135 -80 289 -80q293 0 293 299q0 147 -94.5 229 t-254.5 82h-94v152h70q141 0 223 76q80 74 80 200q0 119 -68 185q-70 66 -180 65q-264 0 -264 -330v-878z" />
+<glyph unicode="&#x3b3;" d="M82 1098h192l242 -592q70 -174 107 -320h6q18 82 98 295l229 617h189l-406 -1035q-111 -281 -110 -555h-191q0 209 101 504z" />
+<glyph unicode="&#x3b4;" d="M135 438q0 371 422 500q-254 143 -254 348q0 135 90 207q92 74 252 74q199 0 393 -109l-73 -145q-168 106 -328 106q-74 0 -117 -36.5t-43 -100.5q0 -66 41 -115q39 -49 215 -151q360 -205 361 -518q0 -246 -129 -381q-131 -137 -355 -137q-209 0 -344 124 q-131 123 -131 334zM328 434q0 -137 75 -219q78 -84 207 -84q295 0 295 350q0 244 -221 373q-356 -101 -356 -420z" />
+<glyph unicode="&#x3b5;" d="M201 299q0 195 237 268v11q-203 66 -202 249q0 135 112.5 213t300.5 78q219 0 383 -76l-63 -147q-162 72 -316 72q-244 0 -243 -154q0 -166 276 -166h154v-153h-160q-301 0 -301 -185q0 -180 283 -180q199 0 366 86v-160q-139 -76 -377 -75q-211 0 -332 83 q-118 82 -118 236z" />
+<glyph unicode="&#x3b6;" d="M162 469q0 254 162 477q160 223 536 469q-215 -12 -352 -12h-285v153h838v-141q-396 -289 -553 -485q-158 -199 -158 -453q0 -154 82 -217q83 -65 313 -104q168 -31 246 -80q76 -49 76 -162q0 -147 -121 -315h-170q121 164 121 260q0 57 -51 90q-52 34 -246 61 q-227 33 -334 146q-104 110 -104 313z" />
+<glyph unicode="&#x3b7;" d="M160 0v1098h147l27 -148h10q100 168 336 168q389 0 389 -401v-1209h-182v1199q0 260 -238 260q-307 0 -307 -398v-569h-182z" />
+<glyph unicode="&#x3b8;" d="M147 729q0 381 113 563.5t352 182.5q230 0 351 -191q119 -188 118 -555q0 -750 -469 -749q-229 0 -348 192q-117 190 -117 557zM332 670q6 -276 71.5 -407.5t209 -131.5t208.5 127q68 129 74 412h-563zM332 807h563q-6 258 -73.5 387t-209.5 129q-139 0 -206 -125 q-64 -121 -74 -391z" />
+<glyph unicode="&#x3b9;" d="M428 324v774h182v-774q0 -195 193 -195q117 0 213 21v-138q-98 -33 -225 -32q-363 0 -363 344z" />
+<glyph unicode="&#x3ba;" d="M215 0v1098h180v-291l-16 -299h4l137 166l402 424h213l-494 -510l522 -588h-213l-426 469l-129 -82v-387h-180z" />
+<glyph unicode="&#x3bb;" d="M61 0l504 1083l-53 160q-33 100 -78 139q-43 37 -115 37q-55 0 -104 -12v145q57 16 127 17q141 0 213 -67.5t141 -278.5l326 -983q37 -111 102 -111q25 0 60 10v-133q-53 -27 -115 -26q-80 0 -125 40q-43 41 -72 127l-135 418q-74 238 -94 336h-6q-37 -141 -119 -321 l-268 -580h-189z" />
+<glyph unicode="&#x3bc;" d="M160 -492v1590h182v-707q0 -260 238 -260q160 0 233.5 92t73.5 305v570h182v-1098h-147l-27 147h-10q-100 -168 -301 -167q-174 0 -248 88q6 -154 6 -240v-320h-182z" />
+<glyph unicode="&#x3bd;" d="M61 1098h189l223 -586q106 -276 121 -358h6q156 162 235.5 368.5t79.5 575.5h183q0 -367 -100.5 -610.5t-325.5 -487.5h-187z" />
+<glyph unicode="&#x3be;" d="M172 422q0 137 76 240q78 104 207 147v12q-215 59 -215 279q0 113 75 188q74 74 260 127q-174 -12 -280 -12h-62v153h764v-153h-69q-217 0 -364.5 -80t-147.5 -219q0 -114 92 -166q90 -51 287 -51h190v-137h-201q-209 0 -315 -82q-109 -84 -109 -230q0 -90 37 -143 q39 -55 109 -82q76 -31 248 -59q158 -27 237 -78q76 -49 76 -162q0 -147 -121 -315h-170q121 164 121 262q0 52 -49 86q-49 33 -238 61q-438 68 -438 414z" />
+<glyph unicode="&#x3bf;" d="M115 551q0 264 135 415.5t366 151.5q217 0 356.5 -155.5t139.5 -411.5q0 -266 -137 -418q-139 -154 -365 -153q-219 0 -356 155q-139 158 -139 416zM303 551q0 -420 311 -420q309 0 310 420q0 416 -312 416q-309 0 -309 -416z" />
+<glyph unicode="&#x3c0;" d="M14 944v74l138 80h1062v-154h-210v-690q0 -125 90 -125q49 0 90 21v-144q-57 -27 -137 -26q-225 0 -226 262v702h-403v-944h-182v944h-222z" />
+<glyph unicode="&#x3c1;" d="M158 -492v1043q0 264 127 415.5t344 151.5q207 0 329 -153q125 -156 125 -414q0 -268 -122.5 -419.5t-339.5 -151.5q-166 0 -281 90h-6q6 -176 6 -271v-291h-182zM340 231q109 -100 283 -100q144 0 208 105q63 102 64 315q0 207 -66 313q-63 102 -208 103 q-281 0 -281 -396v-340z" />
+<glyph unicode="&#x3c2;" d="M172 516q0 602 567 602q162 0 322 -59l-62 -158q-154 57 -272 57q-367 0 -367 -440q0 -186 78 -254q78 -70 269 -102q358 -63 358 -252q0 -143 -125 -311h-166q121 164 121 262q0 59 -66 90q-59 29 -229 57q-428 72 -428 508z" />
+<glyph unicode="&#x3c3;" d="M129 524q0 573 555 574h490v-154h-267q178 -195 178 -440q0 -233 -129 -378.5t-352 -145.5t-348 143q-127 145 -127 401zM317 524q0 -186 76 -288q78 -104 219 -105q137 0 211 96.5t74 268.5q0 270 -154 448h-59q-200 0 -283 -98q-84 -101 -84 -322z" />
+<glyph unicode="&#x3c4;" d="M106 944v74l134 80h841v-154h-475v-606q0 -215 209 -215q111 0 191 20v-135q-86 -35 -220 -35q-362 0 -362 344v627h-318z" />
+<glyph unicode="&#x3c5;" d="M160 498v600h182v-590q0 -379 274 -379q150 0 217.5 116.5t67.5 362.5q0 242 -63 490h182q63 -242 63 -498q0 -317 -114.5 -468.5t-358.5 -151.5q-450 0 -450 518z" />
+<glyph unicode="&#x3c6;" d="M74 547q0 311 207 559l120 -90q-98 -129 -131 -232q-35 -109 -34 -237q0 -383 288 -416v606q0 381 281 381q166 0 258 -147.5t92 -399.5q0 -264 -125 -419.5t-348 -169.5v-474h-158v474q-450 24 -450 565zM682 131q305 29 305 438q0 397 -176 398q-129 0 -129 -228v-608z " />
+<glyph unicode="&#x3c7;" d="M43 -492l475 830l-180 446q-68 168 -152 168q-27 0 -63 -10v143q47 16 129 17q80 0 135 -55.5t111 -192.5l139 -348l311 592h178l-417 -776l186 -461q47 -115 86 -158q41 -45 104 -45q47 0 80 8v-139q-63 -18 -118 -19q-104 0 -170 46q-68 47 -138 221l-147 377 l-354 -644h-195z" />
+<glyph unicode="&#x3c8;" d="M80 555v543h172v-529q0 -424 272 -438v1423h158v-1421q301 28 301 436q0 254 -63 529h172q63 -272 63 -523q0 -569 -473 -593v-474h-158v474q-233 10 -338 143q-106 137 -106 430z" />
+<glyph unicode="&#x3c9;" d="M90 532q0 301 105 566h165q-104 -261 -104 -566q0 -401 139 -401q68 0 105 72q37 71 37 196v306h157v-306q0 -133 39 -198q41 -70 103 -70q139 0 139 401q0 303 -105 566h166q104 -258 105 -566q0 -553 -289 -552q-182 0 -231 178h-11q-49 -178 -231 -178 q-289 -1 -289 552z" />
+<glyph unicode="&#x3ca;" d="M428 324v774h182v-774q0 -195 193 -195q117 0 213 21v-138q-98 -33 -225 -32q-363 0 -363 344zM258 1394.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5zM633 1394.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#x3cb;" d="M160 498v600h182v-590q0 -379 274 -379q150 0 217.5 116.5t67.5 362.5q0 242 -63 490h182q63 -242 63 -498q0 -317 -114.5 -468.5t-358.5 -151.5q-450 0 -450 518zM330 1394.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5zM705 1394.5q0 102.5 96 102.5t96 -102.5 t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#x3cc;" d="M115 551q0 264 135 415.5t366 151.5q217 0 356.5 -155.5t139.5 -411.5q0 -266 -137 -418q-139 -154 -365 -153q-219 0 -356 155q-139 158 -139 416zM303 551q0 -420 311 -420q309 0 310 420q0 416 -312 416q-309 0 -309 -416zM551 1241v27l31 106q29 106 39 195h199v-21 q0 -16 -50 -121q-47 -102 -110 -186h-109z" />
+<glyph unicode="&#x3cd;" d="M160 498v600h182v-590q0 -379 274 -379q150 0 217.5 116.5t67.5 362.5q0 242 -63 490h182q63 -242 63 -498q0 -317 -114.5 -468.5t-358.5 -151.5q-450 0 -450 518zM518 1241v27l31 106q29 106 39 195h199v-21q0 -16 -50 -121q-47 -102 -110 -186h-109z" />
+<glyph unicode="&#x3ce;" d="M90 532q0 301 105 566h165q-104 -261 -104 -566q0 -401 139 -401q68 0 105 72q37 71 37 196v306h157v-306q0 -133 39 -198q41 -70 103 -70q139 0 139 401q0 303 -105 566h166q104 -258 105 -566q0 -553 -289 -552q-182 0 -231 178h-11q-49 -178 -231 -178 q-289 -1 -289 552zM530 1241v27l31 106q29 106 39 195h199v-21q0 -16 -50 -121q-47 -102 -110 -186h-109z" />
+<glyph unicode="&#x3d1;" d="M10 825q29 14 86.5 28.5t104.5 14.5q53 0 84 -14q39 -18 57 -39q20 -25 31 -59q10 -37 10 -74q0 -49 -4 -78q-2 -25 -6 -48.5t-6 -41.5q-2 -16 -5.5 -47t-5.5 -47q-4 -33 -4 -94q0 -37 10 -78q8 -37 35 -66q23 -25 64 -41q43 -16 96 -16q163 0 246 154q82 152 82 456v53 q0 23 -4 52q-178 4 -295 39q-125 39 -197 98q-76 63 -108.5 137t-32.5 158q0 61 20 123q18 59 60 98q43 43 104 63q68 23 152 23q104 0 184 -43q82 -45 139 -119q59 -78 97 -190q37 -111 55 -250h143v-137h-137q2 -14 2 -52q0 -8 1 -28.5t1 -30.5q0 -150 -33 -297 q-29 -133 -96 -237q-63 -98 -162 -158q-96 -57 -229 -57q-109 0 -184 28q-70 27 -115 74q-41 45 -62 111q-16 55 -16 131q0 55 4 86q2 10 4 29.5t4 34.5t4 28l11 82q4 25 4 61q0 47 -15 62q-16 16 -47 16q-14 0 -51 -8q-25 -6 -43 -17zM426 1272q0 -53 23 -109 q23 -53 76 -94t139 -65q94 -27 210 -27q-10 90 -43 192q-29 90 -65 144q-41 59 -84 88q-47 31 -94 31q-76 0 -119 -43t-43 -117z" />
+<glyph unicode="&#x3d2;" d="M31 1462h202l379 -731q29 86 62 160q18 41 78 164q39 80 75 147l32.5 63.5t27.5 49.5q16 31 45 71q22 31 49 50q29 20 59 28q35 10 74 11q27 0 55 -5q20 -2 39 -12v-145q-8 2 -28 6q-10 2 -29 2q-31 0 -59 -23q-35 -29 -66 -84q-6 -8 -9 -15t-10.5 -19.5t-15.5 -28.5 l-21.5 -37t-31.5 -59l-61 -119q-39 -72 -66 -133q-41 -90 -59 -135q-35 -82 -47 -127v-541h-187v559z" />
+<glyph unicode="&#x3d6;" d="M18 944v74l134 80h1052v-154h-155q12 -33 41 -123q18 -61 30 -112q8 -39 17 -113q4 -39 4 -125q0 -121 -14.5 -205t-51.5 -153q-33 -63 -90 -98t-133 -35q-94 0 -150 43q-57 45 -81 135h-11q-25 -90 -82 -135q-55 -43 -149 -43q-76 0 -133.5 34.5t-89.5 98.5 q-34 65 -50 153q-16 94 -16 205q0 86 4 125q8 74 17 113q16 74 28 112q18 58 43 123h-164zM256 471q0 -98 8 -156q10 -74 25 -104q20 -43 44.5 -61.5t61.5 -18.5t64 21q23 18 43 57q18 35 26 84q8 43 9 106v203h157v-203q0 -133 39 -198q41 -70 103 -70q37 0 61.5 18.5 t44.5 61.5q14 31 25 104q8 57 8 156q0 80 -4 119q-8 74 -17 112q-12 59 -30 115l-41 127h-535q-23 -61 -43 -127q-10 -35 -29 -115q-8 -39 -16 -112q-4 -39 -4 -119z" />
+<glyph unicode="&#x401;" d="M217 0v1462h842v-164h-656v-452h617v-162h-617v-520h656v-164h-842zM355 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5zM730 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#x402;" d="M23 1298v164h841v-164h-356v-401h264q184 0 291 -96q102 -94 102 -275v-137q0 -197 -94 -303t-266 -106q-89 0 -141 24v160q63 -20 135 -21q180 0 180 226v133q0 231 -227 231h-244v-733h-186v1298h-299z" />
+<glyph unicode="&#x403;" d="M233 0v1462h826v-166h-639v-1296h-187zM508 1579v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x404;" d="M129 733q0 344 178 547t490 203q219 0 383 -86l-78 -156q-156 78 -305 78q-188 0 -314 -125q-123 -125 -151 -348h629v-162h-635q23 -541 471 -541q135 0 327 58v-162q-150 -59 -358 -59q-310 0 -473 196q-164 199 -164 557z" />
+<glyph unicode="&#x405;" d="M141 49v178q211 -86 414 -86q350 0 350 240q0 104 -71 160q-74 57 -285 133q-211 74 -299 174q-90 102 -90 264q0 174 129 272.5t352 98.5q225 0 416 -78l-64 -164q-197 78 -360 78q-293 0 -293 -209q0 -102 66 -164q66 -63 270 -133q244 -88 327.5 -182t83.5 -240 q0 -190 -139 -301q-138 -111 -393 -110q-258 -1 -414 69z" />
+<glyph unicode="&#x406;" d="M225 0v123l295 20v1176l-295 20v123h776v-123l-294 -20v-1176l294 -20v-123h-776z" />
+<glyph unicode="&#x407;" d="M225 0v123l295 20v1176l-295 20v123h776v-123l-294 -20v-1176l294 -20v-123h-776zM332 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5zM707 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#x408;" d="M137 39v166q162 -61 309 -62q162 0 254.5 80t92.5 226v1013h186v-1011q0 -215 -141 -345q-139 -127 -377 -126q-215 0 -324 59z" />
+<glyph unicode="&#x409;" d="M0 -2v145q29 -14 68 -14q33 0 61 35q27 33 39 127q10 80 33 524q23 434 24 647h498v-616h39q446 0 446 -418q0 -207 -114.5 -317.5t-329.5 -110.5h-207v1298h-182l-21 -548q-23 -580 -82 -672q-63 -98 -176 -98q-55 0 -96 18zM723 160h45q268 0 268 268q0 131 -69 195 q-66 59 -224 59h-20v-522z" />
+<glyph unicode="&#x40a;" d="M66 0v1462h165v-616h318v616h166v-616h39q221 0 333.5 -106.5t112.5 -311.5q0 -207 -114.5 -317.5t-329.5 -110.5h-207v682h-318v-682h-165zM715 160h45q268 0 268 268q0 131 -70 195q-66 59 -223 59h-20v-522z" />
+<glyph unicode="&#x40b;" d="M23 1298v164h841v-164h-356v-401h264q184 0 291 -96q102 -94 102 -275v-526h-186v502q0 231 -227 231h-244v-733h-186v1298h-299z" />
+<glyph unicode="&#x40c;" d="M211 0v1462h186v-708l566 708h206l-565 -702l594 -760h-219l-582 741v-741h-186zM574 1579v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x40e;" d="M27 1462h204l383 -809q2 -4 21 -47l7 -21.5t9 -23.5h2l39 109l312 792h196l-428 -1030q-80 -190 -135 -268q-61 -86 -150 -135t-215 -49q-104 0 -178 30v185q84 -45 178 -45q111 0 170 51q59 49 115 174zM237 1897h170q10 -104 50 -144q43 -43 161 -43q193 0 211 187h174 q-20 -317 -389 -318q-195 0 -281 74t-96 244z" />
+<glyph unicode="&#x40f;" d="M135 0v1462h187v-1296h585v1296h187v-1462h-394v-385h-176v385h-389z" />
+<glyph unicode="&#x410;" d="M33 0l483 1468h195l485 -1468h-192l-144 453h-491l-146 -453h-190zM422 618h385l-133 424q-39 121 -62 226q-20 -88 -47 -183z" />
+<glyph unicode="&#x411;" d="M135 0v1462h912v-164h-725v-452h272q541 0 541 -418q0 -207 -131.5 -317.5t-382.5 -110.5h-486zM322 160h282q338 0 338 268q0 131 -86 192.5t-283 61.5h-251v-522z" />
+<glyph unicode="&#x412;" d="M135 0v1462h440q272 0 398 -88q123 -86 123 -282q0 -129 -78 -213t-213 -103v-10q332 -55 332 -342q0 -199 -127 -311.5t-348 -112.5h-527zM322 158h307q311 0 311 274q0 254 -324 254h-294v-528zM322 842h284q157 0 228 55q72 55 71 182q0 121 -75.5 172.5t-243.5 51.5 h-264v-461z" />
+<glyph unicode="&#x413;" d="M233 0v1462h826v-166h-639v-1296h-187z" />
+<glyph unicode="&#x414;" d="M6 166h113q133 246 217 594q86 360 98 702h592v-1296h195v-551h-177v385h-862v-385h-176v551zM311 166h529v1130h-242q-18 -281 -98 -596q-85 -339 -189 -534z" />
+<glyph unicode="&#x415;" d="M217 0v1462h842v-164h-656v-452h617v-162h-617v-520h656v-164h-842z" />
+<glyph unicode="&#x416;" d="M0 0l373 754l-361 708h178l349 -708v708h155v-708l342 708h178l-356 -708l371 -754h-185l-350 741v-741h-155v741l-357 -741h-182z" />
+<glyph unicode="&#x417;" d="M139 59v170q186 -96 383 -96q354 0 355 283q0 264 -394 264h-190v151h176q178 0 281 74q100 74 100 199q0 102 -70 164q-72 61 -188 61q-184 0 -354 -121l-93 125q193 150 455 150q209 0 326 -99q119 -100 118 -264q0 -135 -90 -229t-252 -121v-6q176 -20 273 -115 q96 -92 96 -233q0 -203 -141.5 -319.5t-403.5 -116.5q-243 -1 -387 79z" />
+<glyph unicode="&#x418;" d="M137 0v1462h174v-800q0 -106 -8 -254l-6 -150h6l578 1204h213v-1462h-172v793q0 141 18 417h-8l-580 -1210h-215z" />
+<glyph unicode="&#x419;" d="M137 0v1462h174v-800q0 -106 -8 -254l-6 -150h6l578 1204h213v-1462h-172v793q0 141 18 417h-8l-580 -1210h-215zM231 1897h170q10 -104 50 -144q43 -43 161 -43q193 0 211 187h174q-20 -317 -389 -318q-195 0 -281 74t-96 244z" />
+<glyph unicode="&#x41a;" d="M211 0v1462h186v-708l566 708h206l-565 -702l594 -760h-219l-582 741v-741h-186z" />
+<glyph unicode="&#x41b;" d="M4 2v150q57 -25 113 -25q102 0 157 180q53 176 181 1155h639v-1462h-187v1298h-297q-117 -979 -204 -1148q-89 -172 -265 -173q-71 0 -137 25z" />
+<glyph unicode="&#x41c;" d="M113 0v1462h247l248 -1192h6l250 1192h252v-1462h-153v887q0 121 14 391h-8l-283 -1278h-154l-278 1280h-8q18 -268 18 -406v-874h-151z" />
+<glyph unicode="&#x41d;" d="M135 0v1462h187v-616h585v616h187v-1462h-187v682h-585v-682h-187z" />
+<glyph unicode="&#x41e;" d="M84 735q0 750 534 750q258 0 392 -195q137 -199 137 -557q0 -362 -137 -557q-138 -197 -394 -196q-532 -1 -532 755zM281 733q0 -590 335 -590q174 0 254 145.5t80 444.5q0 305 -82 445q-84 143 -250 143q-337 0 -337 -588z" />
+<glyph unicode="&#x41f;" d="M135 0v1462h959v-1462h-187v1298h-585v-1298h-187z" />
+<glyph unicode="&#x420;" d="M176 0v1462h404q514 0 514 -428q0 -219 -137.5 -342t-403.5 -123h-191v-569h-186zM362 727h170q195 0 283 72q86 70 86 225q0 279 -338 279h-201v-576z" />
+<glyph unicode="&#x421;" d="M129 733q0 344 178 547t490 203q219 0 383 -86l-78 -156q-156 78 -305 78q-215 0 -342 -158q-129 -160 -129 -430q0 -287 120 -438q119 -150 351 -150q135 0 327 58v-162q-150 -59 -358 -59q-310 0 -473 196q-164 199 -164 557z" />
+<glyph unicode="&#x422;" d="M102 1298v164h1022v-164h-417v-1298h-187v1298h-418z" />
+<glyph unicode="&#x423;" d="M27 1462h204l383 -809q2 -4 21 -47l7 -21.5t9 -23.5h2l39 109l312 792h196l-428 -1030q-80 -190 -135 -268q-61 -86 -150 -135t-215 -49q-104 0 -178 30v185q84 -45 178 -45q111 0 170 51q59 49 115 174z" />
+<glyph unicode="&#x424;" d="M27 758q0 238 122.5 391.5t335.5 153.5h47v180h166v-180h47q213 0 336 -154t123 -391q0 -233 -127 -396q-125 -158 -354 -157h-25v-225h-166v225h-24q-230 0 -356 160q-125 157 -125 393zM199 762q0 -184 86 -293q86 -106 241 -107h6v781h-32q-141 0 -221 -104.5 t-80 -276.5zM698 362h7q156 0 241 107q86 109 86 293q0 172 -80 276.5t-221 104.5h-33v-781z" />
+<glyph unicode="&#x425;" d="M53 0l453 764l-422 698h199l331 -559l334 559h191l-422 -692l457 -770h-211l-355 635l-366 -635h-189z" />
+<glyph unicode="&#x426;" d="M135 0v1462h187v-1296h526v1296h186v-1296h176v-551h-176v385h-899z" />
+<glyph unicode="&#x427;" d="M135 879v583h187v-559q0 -131 51 -180q55 -51 162 -51q154 0 372 80v710h187v-1462h-187v598q-229 -90 -393 -90q-379 0 -379 371z" />
+<glyph unicode="&#x428;" d="M121 0v1462h166v-1296h245v1296h166v-1296h246v1296h166v-1462h-989z" />
+<glyph unicode="&#x429;" d="M61 0v1462h166v-1296h246v1296h166v-1296h246v1296h166v-1296h178v-551h-176v385h-992z" />
+<glyph unicode="&#x42a;" d="M27 1298v164h485v-616h68q270 0 415.5 -108.5t145.5 -309.5q0 -203 -137.5 -315.5t-397.5 -112.5h-280v1298h-299zM512 160h98q338 0 338 268q0 131 -86 192.5t-282 61.5h-68v-522z" />
+<glyph unicode="&#x42b;" d="M96 0v1462h166v-616h47q541 0 541 -418q0 -207 -131 -317q-133 -111 -383 -111h-240zM262 160h78q338 0 338 268q0 131 -86 192.5t-283 61.5h-47v-522zM967 0v1462h166v-1462h-166z" />
+<glyph unicode="&#x42c;" d="M176 0v1462h186v-616h191q541 0 541 -418q0 -207 -131.5 -317.5t-382.5 -110.5h-404zM362 160h201q338 0 338 268q0 131 -86 192.5t-283 61.5h-170v-522z" />
+<glyph unicode="&#x42d;" d="M68 1397q160 86 383 86q305 0 477 -194.5t172 -530.5q0 -375 -170 -576q-172 -203 -488 -202q-209 0 -358 59v162q193 -57 328 -58q473 0 489 541h-629v162h625q-18 223 -137 348t-309 125q-150 0 -306 -78z" />
+<glyph unicode="&#x42e;" d="M98 0v1462h166v-616h144q18 346 106 493q86 145 270 146q190 0 283 -176q92 -174 92 -576q0 -397 -92 -575t-285 -178q-190 0 -280 157q-88 156 -99 545h-139v-682h-166zM580 733q0 -346 47 -469q47 -121 155 -121t154 117q47 119 47 473q0 365 -47 473q-49 115 -154 115 q-111 0 -155 -119q-47 -123 -47 -469z" />
+<glyph unicode="&#x42f;" d="M57 0l381 655q-272 98 -272 408q0 399 504 399h372v-1462h-186v604h-246l-334 -604h-219zM358 1047q0 -137 82 -211q84 -74 236 -74h180v541h-188q-310 0 -310 -256z" />
+<glyph unicode="&#x430;" d="M135 307q0 332 510 348l203 7v69q0 236 -244 236q-150 0 -328 -82l-63 137q199 96 383 96q223 0 328 -88q102 -86 102 -278v-752h-131l-37 152h-8q-74 -94 -158 -133t-209 -39q-164 0 -256 85.5t-92 241.5zM324 305q0 -178 200 -178q150 0 234 82q88 84 88 229v99 l-162 -7q-195 -8 -278 -61q-82 -51 -82 -164z" />
+<glyph unicode="&#x431;" d="M143 659q0 212 31 357q31 143 82 231q49 84 123 142q72 55 170 81q90 25 491 101l33 -160q-408 -70 -500 -100q-102 -35 -165 -140q-61 -104 -72 -319h12q117 170 336 170q186 0 292.5 -131t106.5 -361q0 -262 -125 -405q-127 -145 -346 -145t-344 180t-125 499zM332 655 q0 -524 293 -524q266 0 266 375q0 365 -240 364q-96 0 -184 -63q-90 -66 -135 -152z" />
+<glyph unicode="&#x432;" d="M176 0v1098h510q387 0 387 -277q0 -197 -229 -239v-7q264 -34 264 -258q0 -152 -107 -233q-109 -84 -313 -84h-512zM358 150h318q254 0 254 180q0 92 -66 129q-61 35 -192 35h-314v-344zM358 647h293q135 0 191 35q57 37 57 121q0 141 -217 141h-324v-297z" />
+<glyph unicode="&#x433;" d="M291 0v1098h747v-154h-565v-944h-182z" />
+<glyph unicode="&#x434;" d="M33 154h86q264 393 266 944h592v-944h151v-535h-174v381h-747v-381h-174v535zM311 154h484v804h-250q-37 -481 -234 -804z" />
+<glyph unicode="&#x435;" d="M133 541q0 266 135 421.5t363 155.5q212 0 338 -135q127 -137 127 -356v-113h-774q9 -375 344 -375q199 0 370 76v-160q-170 -76 -364 -75q-244 0 -391 149q-148 151 -148 412zM326 662h573q0 305 -272 305q-276 0 -301 -305z" />
+<glyph unicode="&#x436;" d="M0 1098h184l351 -533v533h159v-533l350 533h185l-367 -533l365 -565h-195l-338 557v-557h-159v557l-338 -557h-195l367 565z" />
+<glyph unicode="&#x437;" d="M201 1042q158 76 370 76q205 0 315.5 -73.5t110.5 -215.5q0 -184 -192 -243v-11q227 -63 227 -272q0 -152 -121 -237q-120 -86 -344 -86q-233 0 -362 69v166q180 -86 366 -86q283 0 283 180q0 184 -311 185h-150v153h113q172 0 244 39q74 39 73 127q0 154 -250 154 q-131 0 -309 -72z" />
+<glyph unicode="&#x438;" d="M160 0v1098h172v-668l-13 -252l517 920h233v-1098h-172v647l10 271l-514 -918h-233z" />
+<glyph unicode="&#x439;" d="M160 0v1098h172v-668l-13 -252l517 920h233v-1098h-172v647l10 271l-514 -918h-233zM268 1559h170q10 -104 50 -144q43 -43 161 -43q193 0 211 187h174q-20 -317 -389 -318q-195 0 -281 74t-96 244z" />
+<glyph unicode="&#x43a;" d="M215 0v1098h180v-533l518 533h222l-527 -527l566 -571h-232l-547 557v-557h-180z" />
+<glyph unicode="&#x43b;" d="M31 -2v131q22 -6 49 -6q111 0 178 237q68 237 104 738h678v-1098h-182v944h-340q-37 -487 -127 -725q-88 -233 -268 -233q-61 0 -92 12z" />
+<glyph unicode="&#x43c;" d="M115 0v1098h211l215 -656q23 -72 73 -268q2 4 54 191q10 47 20 73l219 660h207v-1098h-151v897q-8 -23 -33 -127q-18 -74 -35 -123l-213 -647h-135l-213 647q-2 6 -10.5 35t-24.5 91.5l-33 123.5v-897h-151z" />
+<glyph unicode="&#x43d;" d="M160 0v1098h182v-455h545v455h182v-1098h-182v489h-545v-489h-182z" />
+<glyph unicode="&#x43e;" d="M115 551q0 264 135 415.5t366 151.5q217 0 356.5 -155.5t139.5 -411.5q0 -266 -137 -418q-139 -154 -365 -153q-219 0 -356 155q-139 158 -139 416zM303 551q0 -420 311 -420q309 0 310 420q0 416 -312 416q-309 0 -309 -416z" />
+<glyph unicode="&#x43f;" d="M160 0v1098h909v-1098h-182v944h-545v-944h-182z" />
+<glyph unicode="&#x440;" d="M158 -492v1590h147l27 -148h8q111 168 322 168q203 0 315 -149q115 -152 115 -418q0 -268 -115 -419.5t-315 -151.5q-207 0 -322 159h-12q12 -129 12 -162v-469h-182zM340 551q0 -229 70 -324q72 -96 221 -96q272 0 272 422q0 414 -274 414q-152 0 -219.5 -88t-69.5 -287 v-41z" />
+<glyph unicode="&#x441;" d="M172 543q0 279 145 428q145 147 408 147q176 0 336 -59l-62 -158q-147 57 -268 57q-371 0 -371 -413q0 -406 361 -406q160 0 321 62v-160q-135 -61 -329 -61q-258 0 -400 145q-141 145 -141 418z" />
+<glyph unicode="&#x442;" d="M121 944v154h985v-154h-401v-944h-183v944h-401z" />
+<glyph unicode="&#x443;" d="M82 1098h188l262 -654q82 -203 89 -290h6q20 106 90 292l239 652h189l-475 -1241q-70 -178 -156 -263q-89 -86 -246 -86q-94 0 -168 17v145q61 -12 136 -12q96 0 149 41t96 141l58 150z" />
+<glyph unicode="&#x444;" d="M74 551q0 524 463 563v442h157v-442q459 -49 459 -563q0 -524 -459 -567v-476h-157v476q-463 45 -463 567zM242 551q0 -385 295 -416v828q-295 -28 -295 -412zM694 135q291 33 291 416q0 377 -291 410v-826z" />
+<glyph unicode="&#x445;" d="M96 0l414 563l-393 535h207l290 -410l291 410h207l-395 -535l413 -563h-206l-310 436l-311 -436h-207z" />
+<glyph unicode="&#x446;" d="M152 0v1098h182v-944h504v944h182v-944h160v-535h-183v381h-845z" />
+<glyph unicode="&#x447;" d="M152 676v422h182v-410q0 -174 205 -174q170 0 340 115v469h182v-1098h-182v489q-182 -127 -381 -127q-160 0 -252 87q-94 88 -94 227z" />
+<glyph unicode="&#x448;" d="M125 0v1098h162v-944h248v944h161v-944h248v944h162v-1098h-981z" />
+<glyph unicode="&#x449;" d="M109 0v1098h161v-944h248v944h162v-944h248v944h162v-944h118v-535h-161v381h-938z" />
+<glyph unicode="&#x44a;" d="M43 944v154h543v-451h153q416 0 416 -311q0 -336 -420 -336h-332v944h-360zM586 150h137q254 0 254 172q0 90 -59.5 131t-198.5 41h-133v-344z" />
+<glyph unicode="&#x44b;" d="M113 0v1098h161v-451h134q416 0 415 -311q0 -336 -420 -336h-290zM274 150h138q254 0 254 172q0 90 -59.5 131t-198.5 41h-134v-344zM952 0v1098h162v-1098h-162z" />
+<glyph unicode="&#x44c;" d="M217 0v1098h182v-451h277q416 0 416 -311q0 -336 -420 -336h-455zM399 150h260q254 0 254 172q0 90 -59 131t-199 41h-256v-344z" />
+<glyph unicode="&#x44d;" d="M184 1059q156 59 332 59q268 0 406 -145q139 -150 139 -430q0 -270 -143 -416q-143 -147 -408 -147q-187 0 -320 61v160q162 -61 316 -62q350 0 368 348h-538v154h536q-29 317 -364 317q-111 0 -262 -57z" />
+<glyph unicode="&#x44e;" d="M123 0v1098h162v-455h151q33 475 367 475q172 0 266 -147q96 -150 96 -420q0 -571 -368 -571q-335 0 -363 509h-149v-489h-162zM602 551q0 -219 47 -319.5t151.5 -100.5t149.5 98q47 100 47 322q0 217 -47 317q-45 98 -151 99q-102 0 -150 -97q-47 -98 -47 -319z" />
+<glyph unicode="&#x44f;" d="M115 0l291 461q-233 68 -234 315q0 150 102.5 236t274.5 86h485v-1098h-182v432h-285l-254 -432h-198zM346 772q0 -186 238 -186h268v358h-295q-211 0 -211 -172z" />
+<glyph unicode="&#x451;" d="M133 541q0 266 135 421.5t363 155.5q212 0 338 -135q127 -137 127 -356v-113h-774q9 -375 344 -375q199 0 370 76v-160q-170 -76 -364 -75q-244 0 -391 149q-148 151 -148 412zM326 662h573q0 305 -272 305q-276 0 -301 -305zM348 1394.5q0 102.5 96 102.5t96 -102.5 t-96 -102.5t-96 102.5zM723 1394.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#x452;" d="M4 1237v137h156v182h182v-182h379v-137h-379v-184l-8 -144h10q106 168 334 168q391 0 391 -401v-834q0 -334 -291 -334q-82 0 -133 25v148q53 -20 115 -21q127 0 127 170v836q0 260 -236 260q-160 0 -235 -95q-74 -92 -74 -303v-528h-182v1237h-156z" />
+<glyph unicode="&#x453;" d="M291 0v1098h747v-154h-565v-944h-182zM522 1241v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x454;" d="M172 543q0 281 145 430q143 145 414 145q176 0 330 -59l-62 -158q-147 57 -262 57q-346 0 -377 -317h537v-154h-539q23 -348 369 -348q154 0 315 62v-160q-132 -61 -319 -61q-264 0 -408 147q-143 146 -143 416z" />
+<glyph unicode="&#x455;" d="M203 49v166q195 -86 370 -86q274 0 275 162q0 55 -49 98t-226 107q-233 86 -294 159q-59 72 -60 172q0 135 111 213q113 78 309.5 78t368.5 -74l-60 -149q-184 72 -319 72q-236 0 -236 -133q0 -57 51.5 -96.5t231.5 -102.5q207 -76 280 -152q70 -72 70 -182 q0 -150 -116.5 -235.5t-331.5 -85.5q-246 -1 -375 69z" />
+<glyph unicode="&#x456;" d="M197 0v123l344 20v811l-269 21v123h451v-955l352 -20v-123h-878zM526 1435.5q0 114.5 106.5 114.5t106.5 -114q0 -57 -32.5 -86t-73.5 -29q-107 0 -107 114.5z" />
+<glyph unicode="&#x457;" d="M197 0v123l344 20v811l-269 21v123h451v-955l352 -20v-123h-878zM330 1394.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5zM705 1394.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#x458;" d="M135 -303q131 -39 289 -39q119 0 182 57q66 59 66 158v1081l-420 21v123h602v-1215q0 -180 -113 -278q-111 -96 -319 -97q-160 0 -287 35v154zM637 1435.5q0 114.5 106.5 114.5t106.5 -114.5t-106.5 -114.5t-106.5 114.5z" />
+<glyph unicode="&#x459;" d="M0 -2v131q22 -6 49 -6q41 0 66 43q27 45 47 231q27 233 57 701h494v-451h51q416 0 416 -311q0 -336 -420 -336h-209v944h-186q-33 -463 -60 -663q-25 -188 -72 -241.5t-141 -53.5q-61 0 -92 12zM713 150h55q254 0 254 172q0 90 -59.5 131t-198.5 41h-51v-344z" />
+<glyph unicode="&#x45a;" d="M106 0v1098h162v-455h299v455h162v-451h51q416 0 416 -311q0 -336 -420 -336h-209v489h-299v-489h-162zM729 150h55q254 0 254 172q0 90 -59 131t-199 41h-51v-344z" />
+<glyph unicode="&#x45b;" d="M4 1237v137h156v182h184v-182h418v-137h-420v-184l-10 -144h10q106 168 346 168q190 0 287 -96q94 -94 94 -305v-676h-182v666q0 260 -236 260q-160 0 -235 -95q-74 -92 -74 -303v-528h-182v1237h-156z" />
+<glyph unicode="&#x45c;" d="M215 0v1098h180v-291l-16 -299h4l137 166l402 424h213l-494 -510l522 -588h-213l-426 469l-129 -82v-387h-180zM508 1241v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x45e;" d="M82 1098h188l262 -654q82 -203 89 -290h6q20 106 90 292l239 652h189l-475 -1241q-70 -178 -156 -263q-89 -86 -246 -86q-94 0 -168 17v145q61 -12 136 -12q96 0 149 41t96 141l58 150zM241 1559h170q10 -104 50 -144q43 -43 161 -43q193 0 211 187h174 q-20 -317 -389 -318q-195 0 -281 74t-96 244z" />
+<glyph unicode="&#x45f;" d="M160 0v1098h182v-944h545v944h182v-1098h-354v-381h-183v381h-372z" />
+<glyph unicode="&#x490;" d="M233 0v1462h637v301h177v-467h-627v-1296h-187z" />
+<glyph unicode="&#x491;" d="M291 0v1098h545v319h182v-456h-545v-961h-182z" />
+<glyph unicode="&#x1e00;" d="M33 0l483 1468h195l485 -1468h-192l-144 453h-491l-146 -453h-190zM422 618h385l-133 424q-39 121 -62 226q-20 -88 -47 -183zM389 -340q0 47 16 90q16 41 46 68q31 29 69 43q37 14 92 14q49 0 90 -14q39 -14 72 -43t49 -66q18 -39 19 -90q0 -57 -17 -92 q-18 -40 -49 -67.5t-74 -43.5q-41 -14 -90 -14q-55 0 -92 14q-39 14 -69 43q-29 27 -46 68q-16 43 -16 90zM500 -340q0 -51 28 -84q27 -29 84 -29q53 0 82 29q31 31 31 84t-31 84q-29 29 -82 29q-51 0 -80 -29q-32 -33 -32 -84z" />
+<glyph unicode="&#x1e01;" d="M135 307q0 332 510 348l203 7v69q0 236 -244 236q-150 0 -328 -82l-63 137q199 96 383 96q223 0 328 -88q102 -86 102 -278v-752h-131l-37 152h-8q-74 -94 -158 -133t-209 -39q-164 0 -256 85.5t-92 241.5zM324 305q0 -178 200 -178q150 0 234 82q88 84 88 229v99 l-162 -7q-195 -8 -278 -61q-82 -51 -82 -164zM383 -340q0 47 16 90q16 41 46 68q31 29 69 43q37 14 92 14q49 0 90 -14q39 -14 72 -43t49 -66q18 -39 19 -90q0 -57 -17 -92q-18 -40 -49 -67.5t-74 -43.5q-41 -14 -90 -14q-55 0 -92 14q-39 14 -69 43q-29 27 -46 68 q-16 43 -16 90zM494 -340q0 -51 28 -84q27 -29 84 -29q53 0 82 29q31 31 31 84t-31 84q-29 29 -82 29q-51 0 -80 -29q-32 -33 -32 -84z" />
+<glyph unicode="&#x1e3e;" d="M113 0v1462h247l248 -1192h6l250 1192h252v-1462h-153v887q0 121 14 391h-8l-283 -1278h-154l-278 1280h-8q18 -268 18 -406v-874h-151zM518 1581v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x1e3f;" d="M92 0v1098h127l27 -148h10q68 168 201 168q164 0 213 -182h6q78 182 219 182q129 0 186 -92q57 -90 58 -309v-717h-162v707q0 147 -27 202q-27 57 -88 58q-88 0 -127 -82q-39 -80 -39 -279v-606h-161v707q0 260 -125 260q-82 0 -119 -80t-37 -318v-569h-162zM545 1241v27 q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x1e80;" d="M2 1462h170l88 -663q18 -145 39 -377q18 -203 18 -242q27 162 70 312l141 516h177l145 -521q57 -205 72 -307q6 92 65 619l70 663h170l-187 -1462h-190l-168 580q-43 147 -66 282q-31 -168 -65 -284l-156 -578h-190zM336 1886v21h219q88 -182 174 -301v-27h-121 q-163 139 -272 307z" />
+<glyph unicode="&#x1e81;" d="M-4 1098h162l98 -543q39 -215 57 -393h6q33 195 68 358l133 578h193l127 -578q43 -188 67 -358h6q29 225 60 393l102 543h158l-225 -1098h-195l-131 596l-68 330h-6l-65 -334l-135 -592h-189zM303 1548v21h219q88 -182 174 -301v-27h-121q-163 139 -272 307z" />
+<glyph unicode="&#x1e82;" d="M2 1462h170l88 -663q18 -145 39 -377q18 -203 18 -242q27 162 70 312l141 516h177l145 -521q57 -205 72 -307q6 92 65 619l70 663h170l-187 -1462h-190l-168 580q-43 147 -66 282q-31 -168 -65 -284l-156 -578h-190zM500 1579v27q92 127 174 301h219v-21 q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x1e83;" d="M-4 1098h162l98 -543q39 -215 57 -393h6q33 195 68 358l133 578h193l127 -578q43 -188 67 -358h6q29 225 60 393l102 543h158l-225 -1098h-195l-131 596l-68 330h-6l-65 -334l-135 -592h-189zM522 1241v27q92 127 174 301h219v-21q-109 -168 -272 -307h-121z" />
+<glyph unicode="&#x1e84;" d="M2 1462h170l88 -663q18 -145 39 -377q18 -203 18 -242q27 162 70 312l141 516h177l145 -521q57 -205 72 -307q6 92 65 619l70 663h170l-187 -1462h-190l-168 580q-43 147 -66 282q-31 -168 -65 -284l-156 -578h-190zM334 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5 t-96 102.5zM709 1732.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#x1e85;" d="M-4 1098h162l98 -543q39 -215 57 -393h6q33 195 68 358l133 578h193l127 -578q43 -188 67 -358h6q29 225 60 393l102 543h158l-225 -1098h-195l-131 596l-68 330h-6l-65 -334l-135 -592h-189zM330 1394.5q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5zM705 1394.5 q0 102.5 96 102.5t96 -102.5t-96 -102.5t-96 102.5z" />
+<glyph unicode="&#x1ef2;" d="M33 1462h203l376 -739l381 739h201l-487 -893v-569h-187v559zM303 1886v21h219q88 -182 174 -301v-27h-121q-163 139 -272 307z" />
+<glyph unicode="&#x1ef3;" d="M82 1098h188l262 -654q82 -203 89 -290h6q20 106 90 292l239 652h189l-475 -1241q-70 -178 -156 -263q-89 -86 -246 -86q-94 0 -168 17v145q61 -12 136 -12q96 0 149 41t96 141l58 150zM314 1548v21h219q88 -182 174 -301v-27h-121q-163 139 -272 307z" />
+<glyph unicode="&#x1f4d;" d="M229 735q0 750 534 750q258 0 392 -195q137 -199 137 -557q0 -362 -137 -557q-138 -197 -394 -196q-532 -1 -532 755zM426 733q0 -590 335 -590q174 0 254 145.5t80 444.5q0 305 -82 445q-84 143 -250 143q-337 0 -337 -588zM-311 1255q0 78 59 136q61 57 183 88v-76 q-55 -18 -88 -45q-29 -23 -29 -47q0 -18 16 -29l33 -16q18 -10 33 -21q16 -12 16 -41q0 -39 -24.5 -57.5t-71.5 -18.5q-57 0 -92 35t-35 92zM-2 1135v26l23 68l24 76l25 81q4 16 10 44t8 32h207v-20l-43 -70l-51 -80q-6 -10 -59 -80q-31 -41 -62 -77h-82z" />
+<glyph unicode="&#x2000;" />
+<glyph unicode="&#x2001;" />
+<glyph unicode="&#x2002;" />
+<glyph unicode="&#x2003;" />
+<glyph unicode="&#x2004;" />
+<glyph unicode="&#x2005;" />
+<glyph unicode="&#x2006;" />
+<glyph unicode="&#x2007;" />
+<glyph unicode="&#x2008;" />
+<glyph unicode="&#x2009;" />
+<glyph unicode="&#x200a;" />
+<glyph unicode="&#x200b;" />
+<glyph unicode="&#x2010;" d="M285 465v168h659v-168h-659z" />
+<glyph unicode="&#x2011;" d="M285 465v168h659v-168h-659z" />
+<glyph unicode="&#x2012;" d="M285 465v168h659v-168h-659z" />
+<glyph unicode="&#x2013;" d="M184 465v168h860v-168h-860z" />
+<glyph unicode="&#x2014;" d="M-6 465v168h1241v-168h-1241z" />
+<glyph unicode="&#x2015;" d="M-6 465v168h1241v-168h-1241z" />
+<glyph unicode="&#x2017;" d="M-20 -45h1269v-139h-1269v139zM-20 -324h1269v-139h-1269v139z" />
+<glyph unicode="&#x2018;" d="M446 983q57 217 177 479h157q-66 -276 -100 -501h-219z" />
+<glyph unicode="&#x2019;" d="M446 961q61 254 101 501h219l14 -22q-53 -207 -176 -479h-158z" />
+<glyph unicode="&#x201a;" d="M457 -264q76 309 100 502h199l14 -23q-53 -207 -176 -479h-137z" />
+<glyph unicode="&#x201b;" d="M446 1440l15 22h219q41 -270 100 -501h-157q-126 278 -177 479z" />
+<glyph unicode="&#x201c;" d="M233 983q57 217 177 479h157q-66 -276 -100 -501h-219zM659 983q57 217 177 479h157q-66 -276 -100 -501h-219z" />
+<glyph unicode="&#x201d;" d="M233 961q61 254 101 501h219l14 -22q-53 -207 -176 -479h-158zM659 961q61 254 101 501h219l14 -22q-53 -207 -176 -479h-158z" />
+<glyph unicode="&#x201e;" d="M244 -264q76 309 100 502h199l14 -23q-53 -207 -176 -479h-137zM670 -264q76 309 100 502h199l14 -23q-55 -209 -176 -479h-137z" />
+<glyph unicode="&#x2020;" d="M240 989v180l311 -30l-55 417h217l-56 -417l332 30v-180l-332 31l56 -1020h-217l55 1020z" />
+<glyph unicode="&#x2021;" d="M229 346v180l332 -30l-47 290l47 275l-332 -31v180l332 -30l-55 376h217l-55 -376l331 30v-180l-331 31l47 -275l-47 -290l331 30v-180l-331 31l55 -377h-217l55 377z" />
+<glyph unicode="&#x2022;" d="M379 748q0 262 235.5 262t235.5 -262q0 -129 -64 -195q-65 -68 -172 -68q-113 0 -174 68t-61 195z" />
+<glyph unicode="&#x2026;" d="M78 110.5q0 139.5 127 139.5t127 -139.5t-127 -139.5t-127 139.5zM487 110.5q0 139.5 127 139.5t127 -139.5t-127 -139.5t-127 139.5zM897 110.5q0 139.5 127 139.5t127 -139.5t-127 -139.5t-127 139.5z" />
+<glyph unicode="&#x202f;" horiz-adv-x="430" />
+<glyph unicode="&#x2030;" d="M4 655l698 289l41 -100l-698 -287zM20 1171q0 309 244 310q113 0 176 -80q63 -78 64 -230q0 -311 -244 -311q-113 0 -176.5 82t-63.5 229zM156 1171q0 -102 22.5 -153t84 -51t83.5 51q20 47 21 153q0 119 -23 158q-25 43 -82 43q-55 0 -82 -45q-24 -43 -24 -156zM195 311 q0 309 243 310q111 0 176 -80q63 -78 64 -230q0 -311 -244 -311q-115 0 -176 82q-63 86 -63 229zM330 311q0 -104 22 -155q20 -49 84 -49.5t84 49.5q20 47 21 155q0 119 -23 158q-25 43 -82 43q-55 0 -82 -45q-24 -43 -24 -156zM725 311q0 309 244 310q113 0 176 -80 q63 -78 63 -230q0 -311 -243 -311q-115 0 -177 82q-63 86 -63 229zM860 311q0 -104 23 -155q23 -49 84 -49.5t84 49.5q20 47 20 155q0 113 -22 158q-20 43 -82 43q-59 0 -84 -43q-23 -39 -23 -158z" />
+<glyph unicode="&#x2032;" d="M496 1462h237l-41 -528h-155z" />
+<glyph unicode="&#x2033;" d="M285 1462h237l-41 -528h-155zM707 1462h237l-41 -528h-155z" />
+<glyph unicode="&#x2039;" d="M401 526v27l310 414l116 -78l-237 -348l237 -348l-116 -78z" />
+<glyph unicode="&#x203a;" d="M401 193l238 348l-238 348l117 78l309 -414v-27l-309 -411z" />
+<glyph unicode="&#x203c;" d="M718 110.5q0 139.5 127 139.5t127 -139.5t-127 -139.5t-127 139.5zM735 1462h223l-51 -1048h-121zM256 110.5q0 139.5 127 139.5t127 -139.5t-127 -139.5t-127 139.5zM273 1462h223l-51 -1048h-121z" />
+<glyph unicode="&#x2044;" d="M170 0l729 1462h158l-729 -1462h-158z" />
+<glyph unicode="&#x205f;" horiz-adv-x="538" />
+<glyph unicode="&#x207f;" d="M317 797v665h125l17 -104h8q68 121 207 121q109 0 174 -66q63 -63 63 -184v-432h-147v413q0 150 -127 150q-98 0 -135 -53q-37 -52 -37 -172v-338h-148z" />
+<glyph unicode="&#x20a3;" d="M129 262v137h176v1063h752v-164h-574v-516h535v-164h-535v-219h293v-137h-293v-262h-178v262h-176z" />
+<glyph unicode="&#x20a4;" d="M119 0v154q201 49 200 284v21h-198v137h198v158h-198v137h198v221q0 166 109 268q106 100 289 101q193 0 346 -80l-66 -144q-143 72 -272 72q-223 0 -223 -246v-192h377v-137h-377v-158h377v-137h-377v-19q0 -199 -140 -274h748v-166h-991z" />
+<glyph unicode="&#x20a7;" d="M82 0v1462h205q451 0 450 -428q0 -219 -114 -344q-113 -121 -342 -121h-41v-569h-158zM240 715h41q293 0 292 309q0 291 -268 291h-65v-600zM688 618v70l115 51l65 215h86v-211h209v-125h-209v-348q0 -154 113 -153q63 0 123 20v-125q-70 -33 -166 -32q-221 0 -221 282 v356h-115z" />
+<glyph unicode="&#x20ac;" d="M96 502v137h148l-2 39l2 119h-148v137h160q41 262 180 405q141 143 359 144q193 0 335 -92l-79 -146q-123 74 -242 74q-133 0 -234 -100q-96 -96 -133 -285h432v-137h-446q0 -6 -1 -14.5t-1 -14.5v-25v-61q0 -29 2 -43h385v-137h-367q74 -358 369 -359q139 0 268 58v-162 q-125 -59 -282 -59q-444 0 -541 522h-164z" />
+<glyph unicode="&#x2105;" d="M8 1126q0 168 90 258q88 88 252 89q100 0 182 -37l-32 -107q-80 33 -150 33q-199 0 -198 -234q0 -229 194 -229q104 0 176 33v-107q-74 -37 -182 -37q-156 0 -244 86t-88 252zM156 0l729 1462h157l-729 -1462h-157zM616 334q0 164 82 252q84 90 224 90q129 0 217 -94 q84 -90 84 -248q0 -160 -82 -250q-84 -92 -223 -92q-131 0 -218 92q-84 90 -84 250zM762 334q0 -233 158 -234q156 0 155 234q0 231 -155 231q-158 0 -158 -231z" />
+<glyph unicode="&#x2113;" d="M227 510v121q66 16 193 59v494q0 137 69 219q68 80 201 80q109 0 172.5 -82t63.5 -219q0 -354 -340 -541v-301q0 -221 145 -221q143 0 154 213h114q-18 -352 -286 -352q-138 0 -215 92q-78 94 -78 264v231q-105 -37 -193 -57zM586 770q207 121 207 406q0 188 -103 188 q-53 0 -78 -41q-27 -43 -26 -147v-406z" />
+<glyph unicode="&#x2116;" d="M25 0v1462h176l323 -1163h6q-14 285 -14 403v760h133v-1462h-174l-325 1169h-9q18 -252 19 -417v-752h-135zM705 623q0 346 253 346q115 0 182.5 -92.5t67.5 -253.5q0 -168 -65.5 -258.5t-188.5 -90.5q-115 0 -182 92.5t-67 256.5zM745 0v147h414v-147h-414zM844 623 q0 -111 24 -170q25 -57 88 -58q61 0 86 58q25 59 25 170q0 113 -24.5 168t-86.5 55q-63 0 -87.5 -55t-24.5 -168z" />
+<glyph unicode="&#x2122;" d="M0 1354v108h481v-108h-178v-613h-127v613h-176zM526 741v721h187l139 -534l149 534h179v-721h-127v342q0 74 10 207h-12l-154 -549h-100l-146 549h-12l10 -180v-369h-123z" />
+<glyph unicode="&#x2126;" d="M74 0v164h266q-254 233 -254 661q0 313 139 486q141 174 391 174q248 0 390 -174q141 -176 141 -486q0 -428 -256 -661h268v-164h-469v147q260 229 260 674q0 500 -335.5 500t-335.5 -500q0 -442 262 -674v-147h-467z" />
+<glyph unicode="&#x212e;" d="M82 530q0 260 154 414q152 152 376 152q229 0 381 -156q150 -152 150 -405v-5h-828v-356q123 -123 297 -123q254 0 396 234l71 -41q-98 -158 -207 -217q-111 -61 -260 -62q-242 0 -385 162q-145 163 -145 403zM315 616h596v277q-119 119 -301 119q-172 0 -295 -117v-279z " />
+<glyph unicode="&#x215b;" d="M19 1309l219 151h135v-788h-146v465q0 84 9 200q-43 -45 -74 -65l-70 -51zM115 0l729 1462h158l-729 -1462h-158zM647 211q0 131 139 204q-115 80 -114 193q0 90 71 145q70 55 184.5 55.5t182.5 -53.5q70 -55 70 -147q0 -117 -140 -184q166 -86 166 -207 q0 -104 -75.5 -166t-200.5 -62q-133 0 -209 60q-74 60 -74 162zM793 211q0 -117 131 -117q135 0 135 117q0 89 -135 147l-13 6q-118 -65 -118 -153zM819 606q0 -80 109 -133q106 49 106 133q0 96 -108 96q-107 0 -107 -96z" />
+<glyph unicode="&#x215c;" d="M10 705v124q113 -66 203 -65q150 0 149 137q0 125 -147 125h-72v104h70q123 0 123 127q0 111 -97 111q-74 0 -161 -70l-66 86q111 92 238 93q113 0 174 -54q63 -55 63 -149q0 -139 -149 -189q176 -41 176 -186q0 -117 -74 -180q-72 -63 -215 -64q-132 1 -215 50zM154 0 l729 1462h158l-729 -1462h-158zM667 211q0 131 139 204q-115 80 -114 193q0 90 71 145q70 55 184.5 55.5t182.5 -53.5q70 -55 70 -147q0 -117 -140 -184q166 -86 166 -207q0 -104 -75.5 -166t-200.5 -62q-133 0 -209 60q-74 60 -74 162zM813 211q0 -117 131 -117 q135 0 135 117q0 89 -135 147l-13 6q-118 -65 -118 -153zM839 606q0 -80 109 -133q106 49 106 133q0 96 -108 96q-107 0 -107 -96z" />
+<glyph unicode="&#x215d;" d="M25 705v129q102 -68 207 -68q162 0 162 147q0 145 -166 146q-59 0 -125 -17l-62 39l31 381h397v-110h-288l-17 -193q33 6 96 6q115 0 191 -65q74 -63 74 -174q0 -127 -74 -199q-72 -70 -221 -70q-129 1 -205 48zM154 0l729 1462h158l-729 -1462h-158zM667 211 q0 131 139 204q-115 80 -114 193q0 90 71 145q70 55 184.5 55.5t182.5 -53.5q70 -55 70 -147q0 -117 -140 -184q166 -86 166 -207q0 -104 -75.5 -166t-200.5 -62q-133 0 -209 60q-74 60 -74 162zM813 211q0 -117 131 -117q135 0 135 117q0 89 -135 147l-13 6 q-118 -65 -118 -153zM839 606q0 -80 109 -133q106 49 106 133q0 96 -108 96q-107 0 -107 -96z" />
+<glyph unicode="&#x215e;" d="M27 1341v121h548v-100l-309 -690h-155l309 669h-393zM88 0l729 1462h158l-729 -1462h-158zM667 211q0 131 139 204q-115 80 -114 193q0 90 71 145q70 55 184.5 55.5t182.5 -53.5q70 -55 70 -147q0 -117 -140 -184q166 -86 166 -207q0 -104 -75.5 -166t-200.5 -62 q-133 0 -209 60q-74 60 -74 162zM813 211q0 -117 131 -117q135 0 135 117q0 89 -135 147l-13 6q-118 -65 -118 -153zM839 606q0 -80 109 -133q106 49 106 133q0 96 -108 96q-107 0 -107 -96z" />
+<glyph unicode="&#x2202;" d="M121 375q0 250 137 442.5t383 192.5q184 0 283 -148l2 39q10 184 -58 303q-68 121 -219 121q-131 0 -258 -84v174q135 61 283 62q432 0 432 -543q0 -391 -168 -672q-169 -283 -455 -282q-362 0 -362 395zM309 369q0 -236 187 -236q137 0 247.5 153.5t147.5 393.5 q-20 84 -86 137t-139 53q-160 0 -258.5 -159.5t-98.5 -341.5z" />
+<glyph unicode="&#x2206;" d="M74 0v113l446 1349h187l448 -1351v-111h-1081zM274 164h678l-247 758q-57 176 -93 340q-47 -207 -88 -334z" />
+<glyph unicode="&#x220f;" d="M156 -492v1954h956v-1954h-186v1788h-584v-1788h-186z" />
+<glyph unicode="&#x2211;" d="M74 -377l583 914l-567 811v114h1014v-164h-754l529 -759l-555 -867h845v-164h-1095v115z" />
+<glyph unicode="&#x2212;" d="M152 647v150h923v-150h-923z" />
+<glyph unicode="&#x221a;" d="M23 764v143h296l230 -663l512 1452h145l-594 -1710h-133l-276 778h-180z" />
+<glyph unicode="&#x221e;" d="M70 723q0 133 75 225q74 90 193 90q166 0 274 -219q117 213 281 213q117 0 190.5 -86t73.5 -229q0 -133 -76 -223q-78 -92 -188 -93q-172 0 -283 220q-117 -213 -272 -213q-117 0 -192.5 88t-75.5 227zM205 721q0 -80 41 -131t106 -51q102 0 189 184q-83 184 -191 184 q-63 0 -104 -53t-41 -133zM684 717q86 -184 193 -185q66 0 104 54q41 57 41 133q0 82 -41 131q-43 51 -107 51q-104 0 -190 -184z" />
+<glyph unicode="&#x222b;" d="M236 -326q61 -25 116 -24q180 0 180 233v1319q0 354 330 354q88 0 131 -18v-147q-59 27 -114 26q-172 0 -172 -233v-1321q0 -176 -89 -264q-90 -90 -249 -91q-78 0 -133 19v147z" />
+<glyph unicode="&#x2248;" d="M152 379v162q98 109 247 108q102 0 248 -63q129 -55 201 -56q106 0 227 121v-162q-98 -109 -248 -108q-102 0 -247 63q-133 55 -201 56q-106 0 -227 -121zM152 788v162q98 109 247 109q100 0 248 -64q127 -55 201 -55q111 0 227 121v-162q-98 -109 -248 -108 q-102 0 -247 63q-129 55 -201 55q-112 0 -227 -121z" />
+<glyph unicode="&#x2260;" d="M152 442v150h317l121 260h-438v149h507l134 283l137 -59l-105 -224h250v-149h-319l-123 -260h442v-150h-512l-129 -278l-137 57l102 221h-247z" />
+<glyph unicode="&#x2264;" d="M152 0v150h923v-150h-923zM152 672v102l923 451v-160l-715 -342l715 -342v-160z" />
+<glyph unicode="&#x2265;" d="M152 0v150h923v-150h-923zM152 221v160l714 342l-714 342v160l923 -451v-102z" />
+<glyph unicode="&#x25ca;" d="M125 735l450 740h76l453 -738l-453 -737h-76zM309 737l305 -514l306 514l-306 512z" />
+<glyph unicode="&#xe000;" horiz-adv-x="1100" d="M0 1100h1100v-1100h-1100v1100z" />
+<glyph unicode="&#xfb01;" d="M49 961v75l195 68v96q0 190 75.5 278.5t255.5 88.5q96 0 197 -37l-47 -141q-82 29 -143 28q-90 0 -123 -51q-33 -53 -33 -164v-104h246v-137h-246v-961h-182v961h-195zM854 1394.5q0 114.5 106.5 114.5t106.5 -114q0 -58 -31 -86q-33 -29 -75 -29q-107 0 -107 114.5z M868 0v1098h183v-1098h-183z" />
+<glyph unicode="&#xfb02;" d="M49 961v75l195 68v96q0 190 75.5 278.5t255.5 88.5q96 0 197 -37l-47 -141q-82 29 -143 28q-90 0 -123 -51q-33 -53 -33 -164v-104h246v-137h-246v-961h-182v961h-195zM868 0v1556h183v-1556h-183z" />
+<glyph unicode="&#xfb03;" d="M66 971v65l100 62v82q0 109 20 176q23 76 58 112q37 39 96 60q55 18 127 18q57 0 92 -10q47 -14 78 -25q43 33 88 43q53 12 115 13q59 0 98 -11q49 -14 82 -26l-41 -131q-18 8 -64 20q-31 8 -71 8q-37 0 -66 -12q-27 -12 -45 -37q-16 -23 -26 -69q-8 -39 -9 -107v-104 h367v-1098h-164v971h-203v-971h-163v971h-205v-971h-164v971h-100zM330 1098h205v102q0 115 24 193q-29 8 -43 10q-29 4 -45 4q-39 0 -61 -10q-27 -12 -45 -37q-14 -18 -25 -70q-10 -47 -10 -108v-84z" />
+<glyph unicode="&#xfb04;" d="M66 971v65l100 62v82q0 109 20 176q23 76 58 112q37 39 96 60q55 18 127 18q57 0 92 -10q47 -14 78 -25q43 33 88 43q53 12 115 13q55 0 94 -11h131v-1556h-164v1421q-20 4 -29 4q-4 0 -14 1t-14 1q-37 0 -66 -12q-27 -12 -45 -37q-16 -23 -26 -69q-8 -39 -9 -107v-104 h142v-127h-142v-971h-163v971h-205v-971h-164v971h-100zM330 1098h205v102q0 115 24 193q-29 8 -43 10q-29 4 -45 4q-39 0 -61 -10q-27 -12 -45 -37q-14 -18 -25 -70q-10 -47 -10 -108v-84z" />
+<glyph unicode="&#xfeff;" />
+<glyph unicode="&#xfffc;" d="M55 39v270h111v-270h-111zM55 -80h111v-194h192v-109h-303v303zM55 430v272h111v-272h-111zM55 823v271h111v-271h-111zM55 1214v304h303v-111h-192v-193h-111zM254 1083.5q0 55.5 12 98.5q12 45 39 78q23 29 64 47t94 18t92 -18q45 -20 66 -47q27 -33 38 -78 q12 -43 12.5 -98.5t-12 -98.5t-38.5 -76q-25 -31 -66 -49q-39 -18 -92 -18t-94 18q-39 18 -64 49q-27 33 -39 76t-12 98.5zM354 1083.5q0 -75.5 27 -116.5t82 -41q59 0 82 41q27 47 26.5 116.5t-26.5 116.5q-23 41 -82 41q-55 0 -82 -41t-27 -116.5zM479 -274h271v-109h-271 v109zM479 1407v111h271v-111h-271zM535 326v469h137q92 0 133 -27q43 -28 43 -92q0 -40 -19 -68q-18 -27 -53 -33v-4q12 -2 33 -10q10 -4 27 -20q12 -12 18 -31q8 -25 8 -47q0 -63 -43 -100t-119 -37h-165zM633 408h59q37 0 53 18q14 16 15 47q0 27 -15 41q-16 16 -57 16 h-55v-122zM633 610h51q37 0 51.5 12.5t14.5 39t-16.5 39t-53.5 12.5h-47v-103zM709 -111q4 -2 15 -3t17 -1q12 -2 43 -2t47 15q20 16 21 55v244h-94v77h266v-77h-72v-242q0 -80 -45 -119q-43 -37 -112 -37q-37 0 -52 2q-25 4 -34 6v82zM870 -274h195v194h109v-303h-304v109z M870 1407v111h304v-304h-109v193h-195zM1065 39v270h109v-270h-109zM1065 430v272h109v-272h-109zM1065 823v271h109v-271h-109z" />
+<glyph unicode="&#xfffd;" d="M4 618l610 938l613 -938l-613 -937zM342 1014l66 -160q51 29 106 51q49 20 96 21q53 0 78 -27t25 -68q0 -25 -6.5 -47t-16.5 -36q-12 -18 -31 -37q-10 -10 -47 -43q-31 -29 -53 -54q-23 -27 -35 -53q-16 -39 -20 -55q-6 -31 -6 -66v-55h170v43q0 16 4 41q2 16 12 33 q6 10 29 33q27 27 45 40l61 62q25 23 45 59q18 29 27 66q8 33 8 82q0 125 -76 192q-78 68 -211 68q-35 0 -71 -6q-29 -4 -72 -21q-12 -4 -66 -28q-28 -12 -61 -35zM477 139.5q0 -67.5 33 -94.5q35 -29 82 -29q18 0 41 7q20 6 37 22q18 18 26 39q8 23 9 55q0 35 -9 58 q-8 20 -26 39q-14 14 -37 20t-41 6q-47 0 -82 -29q-33 -26 -33 -93.5z" />
+<glyph d="M231 1559h170q10 -104 50 -144q43 -43 161 -43q193 0 211 187h174q-20 -317 -389 -318q-195 0 -281 74t-96 244z" />
+<glyph d="M135 -303q131 -39 289 -39q119 0 182 57q66 59 66 158v1081l-420 21v123h602v-1215q0 -180 -113 -278q-111 -96 -319 -97q-160 0 -287 35v154z" />
+<glyph d="M494 1229v26l26 107q27 127 35 194h180v-20q0 -14 -43 -113q-49 -111 -102 -194h-96z" />
+<glyph d="M483 -426q63 145 84 301h178v-20q0 -22 -49 -123q-51 -109 -114 -185h-99v27z" />
+<glyph d="M483 1241v21q0 20 45 118q45 100 119 189h98v-27q-61 -145 -83 -301h-179z" />
+<glyph d="M313 1026q0 453 299 453q150 0 226 -117q78 -119 77 -336q0 -457 -303 -457q-141 0 -221 117q-78 115 -78 340zM461 1026q0 -326 151 -326q156 0 156 326q0 324 -156 324q-151 0 -151 -324z" />
+<glyph d="M293 854v98l377 523h141v-508h84v-113h-84v-174h-143v174h-375zM438 967h230v176q0 83 6 172q-37 -70 -80 -131z" />
+<glyph d="M336 705v129q102 -68 207 -68q162 0 162 147q0 145 -166 146q-59 0 -125 -17l-62 39l31 381h397v-110h-288l-17 -193q33 6 96 6q115 0 191 -65q74 -63 74 -174q0 -127 -74 -199q-72 -70 -221 -70q-129 1 -205 48z" />
+<glyph d="M313 913q0 408 484 580l45 -109q-329 -111 -381 -325h10q61 92 201 92q115 0 178 -76q66 -78 65 -205q0 -133 -83.5 -217t-215.5 -84q-137 0 -219 93q-84 93 -84 251zM455 889q0 -84 47 -141.5t121 -57.5q68 0 110 45q41 43 41 133q0 172 -147 172q-74 0 -123 -42.5 t-49 -108.5z" />
+<glyph d="M367 1341v121h548v-100l-309 -690h-155l309 669h-393z" />
+<glyph d="M305 877q0 131 139 204q-115 80 -114 193q0 90 71 145q70 55 184.5 55.5t182.5 -53.5q70 -55 70 -147q0 -117 -140 -184q166 -86 166 -207q0 -104 -75.5 -166t-200.5 -62q-133 0 -209 60q-74 60 -74 162zM451 877q0 -117 131 -117q135 0 135 117q0 89 -135 147l-13 6 q-118 -65 -118 -153zM477 1272q0 -80 109 -133q106 49 106 133q0 96 -108 96q-107 0 -107 -96z" />
+<glyph d="M313 1178q0 133 80 219q78 84 211 84q141 0 227 -103q84 -98 84 -288q0 -520 -413 -521q-66 0 -111 15v125q41 -23 101 -23q272 0 286 315h-8q-71 -98 -197 -98q-123 0 -190 74q-70 76 -70 201zM453 1180q0 -164 149 -164q72 0 121 43t49 100q0 78 -45 141 q-43 61 -121 62q-68 0 -110 -47q-43 -46 -43 -135z" />
+<glyph d="M158 547q0 268 112 422q111 150 305 149q203 0 314 -168h8l27 148h147v-1121q0 -225 -119 -346q-121 -123 -336 -123q-195 0 -352 76v170q186 -96 350 -96q274 0 275 309v10q0 41 12 170h-12q-109 -168 -314 -167q-193 0 -305 149.5t-112 417.5zM346 545q0 -414 264 -414 q147 0 211 88q66 90 68 287v41q0 227 -67.5 323.5t-213.5 96.5q-262 0 -262 -422z" />
+<glyph d="M-18 735q0 362 163 557q162 193 473 193q299 0 465 -199q166 -200 166 -553q0 -549 -379 -708l338 -373l-153 -109l-367 441q-41 -4 -72 -4q-309 0 -471 196q-163 199 -163 559zM178 733q0 -590 438 -590q436 0 437 590q0 588 -435 588q-440 0 -440 -588z" />
+<glyph d="M348 1163l383 299h150v-1462h-176v913q0 147 8 361q-43 -47 -121 -113l-148 -121z" />
+<glyph d="M346 946v193q236 111 369 323h166v-1462h-179v823l5 408q-119 -154 -361 -285z" />
+<glyph d="M371 1092v127l301 34l71 209h113v-1462h-176v909q0 111 8 183h-317z" />
+<glyph d="M301 1255q0 78 59 136q61 57 183 88v-76q-55 -18 -88 -45q-29 -23 -29 -47q0 -18 16 -29l33 -16q18 -10 33 -21q16 -12 16 -41q0 -39 -24.5 -57.5t-71.5 -18.5q-57 0 -92 35t-35 92zM610 1135v26l23 68l24 76l25 81q4 16 10 44t8 32h207v-20l-43 -70l-51 -80 q-6 -10 -59 -80q-31 -41 -62 -77h-82z" />
+</font>
+</defs></svg> \ No newline at end of file
diff --git a/apps/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.ttf b/apps/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.ttf
new file mode 100644
index 00000000000..e125bc1f314
--- /dev/null
+++ b/apps/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.ttf
Binary files differ
diff --git a/apps/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.woff b/apps/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.woff
new file mode 100644
index 00000000000..31d51be4a70
--- /dev/null
+++ b/apps/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.woff
Binary files differ
diff --git a/apps/files_texteditor/css/DroidSansMono/Google Android License.txt b/apps/files_texteditor/css/DroidSansMono/Google Android License.txt
new file mode 100644
index 00000000000..0a010886a1e
--- /dev/null
+++ b/apps/files_texteditor/css/DroidSansMono/Google Android License.txt
@@ -0,0 +1,18 @@
+Copyright (C) 2008 The Android Open Source Project
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+##########
+
+This directory contains the fonts for the platform. They are licensed
+under the Apache 2 license.
diff --git a/apps/files_texteditor/css/DroidSansMono/demo.html b/apps/files_texteditor/css/DroidSansMono/demo.html
new file mode 100644
index 00000000000..e305598817d
--- /dev/null
+++ b/apps/files_texteditor/css/DroidSansMono/demo.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+
+ <title>Font Face Demo</title>
+ <link rel="stylesheet" href="stylesheet.css" type="text/css" charset="utf-8">
+ <style type="text/css" media="screen">
+ h1.fontface {font: 60px/68px 'DroidSansMonoRegular', Arial, sans-serif;letter-spacing: 0;}
+
+ p.style1 {font: 18px/27px 'DroidSansMonoRegular', Arial, sans-serif;}
+
+ #container {
+ width: 800px;
+ margin-left: auto;
+ margin-right: auto;
+ }
+ </style>
+</head>
+
+<body>
+ <div id="container">
+ <h1 class="fontface">Font-face Demo for the Droid Sans Mono Font</h1>
+
+
+
+ <p class="style1">Droid Sans Mono Regular - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+
+ </div>
+</body>
+</html>
diff --git a/apps/files_texteditor/css/DroidSansMono/stylesheet.css b/apps/files_texteditor/css/DroidSansMono/stylesheet.css
new file mode 100644
index 00000000000..4d814b262d3
--- /dev/null
+++ b/apps/files_texteditor/css/DroidSansMono/stylesheet.css
@@ -0,0 +1,15 @@
+/* Generated by Font Squirrel (http://www.fontsquirrel.com) on June 13, 2012 02:50:54 PM America/New_York */
+
+
+
+@font-face {
+ font-family: 'Droid Sans Mono';
+ src: url('%appswebroot%/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.eot');
+ src: url('%appswebroot%/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.eot?#iefix') format('embedded-opentype'),
+ url('%appswebroot%/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.woff') format('woff'),
+ url('%appswebroot%/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.ttf') format('truetype'),
+ url('%appswebroot%/files_texteditor/css/DroidSansMono/DroidSansMono-webfont.svg#DroidSansMonoRegular') format('svg');
+ font-weight: normal;
+ font-style: normal;
+
+}
diff --git a/apps/files_texteditor/js/aceeditor/ace.js b/apps/files_texteditor/js/aceeditor/ace.js
index 6043589ac1f..679230926e9 100644
--- a/apps/files_texteditor/js/aceeditor/ace.js
+++ b/apps/files_texteditor/js/aceeditor/ace.js
@@ -1,4 +1,4 @@
-(function(){function g(a){if(typeof requirejs!="undefined"){var e=b.define;b.define=function(a,b,c){return typeof c!="function"?e.apply(this,arguments):e(a,b,function(a,d,e){return b[2]=="module"&&(e.packaged=!0),c.apply(this,arguments)})},b.define.packaged=!0;return}var f=function(a,b){return d("",a,b)};f.packaged=!0;var g=b;a&&(b[a]||(b[a]={}),g=b[a]),g.define&&(c.original=g.define),g.define=c,g.require&&(d.original=g.require),g.require=f}var a="",b=function(){return this}(),c=function(a,b,d){if(typeof a!="string"){c.original?c.original.apply(window,arguments):(console.error("dropping module because define wasn't a string."),console.trace());return}arguments.length==2&&(d=b),c.modules||(c.modules={}),c.modules[a]=d},d=function(a,b,c){if(Object.prototype.toString.call(b)==="[object Array]"){var e=[];for(var g=0,h=b.length;g<h;++g){var i=f(a,b[g]);if(!i&&d.original)return d.original.apply(window,arguments);e.push(i)}c&&c.apply(null,e)}else{if(typeof b=="string"){var j=f(a,b);return!j&&d.original?d.original.apply(window,arguments):(c&&c(),j)}if(d.original)return d.original.apply(window,arguments)}},e=function(a,b){if(b.indexOf("!")!==-1){var c=b.split("!");return e(a,c[0])+"!"+e(a,c[1])}if(b.charAt(0)=="."){var d=a.split("/").slice(0,-1).join("/");b=d+"/"+b;while(b.indexOf(".")!==-1&&f!=b){var f=b;b=b.replace(/\/\.\//,"/").replace(/[^\/]+\/\.\.\//,"")}}return b},f=function(a,b){b=e(a,b);var f=c.modules[b];if(!f)return null;if(typeof f=="function"){var g={},h={id:b,uri:"",exports:g,packaged:!0},i=function(a,c){return d(b,a,c)},j=f(i,g,h);return g=j||h.exports,c.modules[b]=g,g}return f};g(a)})(),define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/multi_select","ace/worker/worker_client","ace/keyboard/hash_handler","ace/keyboard/state_handler","ace/placeholder","ace/config","ace/theme/textmate"],function(a,b,c){"use strict",a("./lib/fixoldbrowsers");var d=a("./lib/dom"),e=a("./lib/event"),f=a("./editor").Editor,g=a("./edit_session").EditSession,h=a("./undomanager").UndoManager,i=a("./virtual_renderer").VirtualRenderer,j=a("./multi_select").MultiSelect;a("./worker/worker_client"),a("./keyboard/hash_handler"),a("./keyboard/state_handler"),a("./placeholder"),a("./config").init(),b.edit=function(b){typeof b=="string"&&(b=document.getElementById(b));var c=new g(d.getInnerText(b));c.setUndoManager(new h),b.innerHTML="";var k=new f(new i(b,a("./theme/textmate")));new j(k),k.setSession(c);var l={};return l.document=c,l.editor=k,k.resize(),e.addListener(window,"resize",function(){k.resize()}),b.env=l,k.env=l,k}}),define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],function(a,b,c){"use strict",a("./regexp"),a("./es5-shim")}),define("ace/lib/regexp",["require","exports","module"],function(a,b,c){function g(a){return(a.global?"g":"")+(a.ignoreCase?"i":"")+(a.multiline?"m":"")+(a.extended?"x":"")+(a.sticky?"y":"")}function h(a,b,c){if(Array.prototype.indexOf)return a.indexOf(b,c);for(var d=c||0;d<a.length;d++)if(a[d]===b)return d;return-1}"use strict";var d={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},e=d.exec.call(/()??/,"")[1]===undefined,f=function(){var a=/^/g;return d.test.call(a,""),!a.lastIndex}();RegExp.prototype.exec=function(a){var b=d.exec.apply(this,arguments),c,i;if(typeof a=="string"&&b){!e&&b.length>1&&h(b,"")>-1&&(i=RegExp(this.source,d.replace.call(g(this),"g","")),d.replace.call(a.slice(b.index),i,function(){for(var a=1;a<arguments.length-2;a++)arguments[a]===undefined&&(b[a]=undefined)}));if(this._xregexp&&this._xregexp.captureNames)for(var j=1;j<b.length;j++)c=this._xregexp.captureNames[j-1],c&&(b[c]=b[j]);!f&&this.global&&!b[0].length&&this.lastIndex>b.index&&this.lastIndex--}return b},f||(RegExp.prototype.test=function(a){var b=d.exec.call(this,a);return b&&this.global&&!b[0].length&&this.lastIndex>b.index&&this.lastIndex--,!!b})}),define("ace/lib/es5-shim",["require","exports","module"],function(a,b,c){function p(a){try{return Object.defineProperty(a,"sentinel",{}),"sentinel"in a}catch(b){}}Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=g.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,h=c.apply(f,d.concat(g.call(arguments)));return h!==null&&Object(h)===h?h:f}return c.apply(b,d.concat(g.call(arguments)))};return e});var d=Function.prototype.call,e=Array.prototype,f=Object.prototype,g=e.slice,h=d.bind(f.toString),i=d.bind(f.hasOwnProperty),j,k,l,m,n;if(n=i(f,"__defineGetter__"))j=d.bind(f.__defineGetter__),k=d.bind(f.__defineSetter__),l=d.bind(f.__lookupGetter__),m=d.bind(f.__lookupSetter__);Array.isArray||(Array.isArray=function(b){return h(b)=="[object Array]"}),Array.prototype.forEach||(Array.prototype.forEach=function(b){var c=G(this),d=arguments[1],e=0,f=c.length>>>0;if(h(b)!="[object Function]")throw new TypeError;while(e<f)e in c&&b.call(d,c[e],e,c),e++}),Array.prototype.map||(Array.prototype.map=function(b){var c=G(this),d=c.length>>>0,e=Array(d),f=arguments[1];if(h(b)!="[object Function]")throw new TypeError;for(var g=0;g<d;g++)g in c&&(e[g]=b.call(f,c[g],g,c));return e}),Array.prototype.filter||(Array.prototype.filter=function(b){var c=G(this),d=c.length>>>0,e=[],f=arguments[1];if(h(b)!="[object Function]")throw new TypeError;for(var g=0;g<d;g++)g in c&&b.call(f,c[g],g,c)&&e.push(c[g]);return e}),Array.prototype.every||(Array.prototype.every=function(b){var c=G(this),d=c.length>>>0,e=arguments[1];if(h(b)!="[object Function]")throw new TypeError;for(var f=0;f<d;f++)if(f in c&&!b.call(e,c[f],f,c))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(b){var c=G(this),d=c.length>>>0,e=arguments[1];if(h(b)!="[object Function]")throw new TypeError;for(var f=0;f<d;f++)if(f in c&&b.call(e,c[f],f,c))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(b){var c=G(this),d=c.length>>>0;if(h(b)!="[object Function]")throw new TypeError;if(!d&&arguments.length==1)throw new TypeError;var e=0,f;if(arguments.length>=2)f=arguments[1];else do{if(e in c){f=c[e++];break}if(++e>=d)throw new TypeError}while(!0);for(;e<d;e++)e in c&&(f=b.call(void 0,f,c[e],e,c));return f}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(b){var c=G(this),d=c.length>>>0;if(h(b)!="[object Function]")throw new TypeError;if(!d&&arguments.length==1)throw new TypeError;var e,f=d-1;if(arguments.length>=2)e=arguments[1];else do{if(f in c){e=c[f--];break}if(--f<0)throw new TypeError}while(!0);do f in this&&(e=b.call(void 0,e,c[f],f,c));while(f--);return e}),Array.prototype.indexOf||(Array.prototype.indexOf=function(b){var c=G(this),d=c.length>>>0;if(!d)return-1;var e=0;arguments.length>1&&(e=E(arguments[1])),e=e>=0?e:Math.max(0,d+e);for(;e<d;e++)if(e in c&&c[e]===b)return e;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(b){var c=G(this),d=c.length>>>0;if(!d)return-1;var e=d-1;arguments.length>1&&(e=Math.min(e,E(arguments[1]))),e=e>=0?e:d-Math.abs(e);for(;e>=0;e--)if(e in c&&b===c[e])return e;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(b){return b.__proto__||(b.constructor?b.constructor.prototype:f)});if(!Object.getOwnPropertyDescriptor){var o="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(b,c){if(typeof b!="object"&&typeof b!="function"||b===null)throw new TypeError(o+b);if(!i(b,c))return;var d,e,g;d={enumerable:!0,configurable:!0};if(n){var h=b.__proto__;b.__proto__=f;var e=l(b,c),g=m(b,c);b.__proto__=h;if(e||g)return e&&(d.get=e),g&&(d.set=g),d}return d.value=b[c],d}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(b){return Object.keys(b)}),Object.create||(Object.create=function(b,c){var d;if(b===null)d={__proto__:null};else{if(typeof b!="object")throw new TypeError("typeof prototype["+typeof b+"] != 'object'");var e=function(){};e.prototype=b,d=new e,d.__proto__=b}return c!==void 0&&Object.defineProperties(d,c),d});if(Object.defineProperty){var q=p({}),r=typeof document=="undefined"||p(document.createElement("div"));if(!q||!r)var s=Object.defineProperty}if(!Object.defineProperty||s){var t="Property description must be an object: ",u="Object.defineProperty called on non-object: ",v="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(b,c,d){if(typeof b!="object"&&typeof b!="function"||b===null)throw new TypeError(u+b);if(typeof d!="object"&&typeof d!="function"||d===null)throw new TypeError(t+d);if(s)try{return s.call(Object,b,c,d)}catch(e){}if(i(d,"value"))if(n&&(l(b,c)||m(b,c))){var g=b.__proto__;b.__proto__=f,delete b[c],b[c]=d.value,b.__proto__=g}else b[c]=d.value;else{if(!n)throw new TypeError(v);i(d,"get")&&j(b,c,d.get),i(d,"set")&&k(b,c,d.set)}return b}}Object.defineProperties||(Object.defineProperties=function(b,c){for(var d in c)i(c,d)&&Object.defineProperty(b,d,c[d]);return b}),Object.seal||(Object.seal=function(b){return b}),Object.freeze||(Object.freeze=function(b){return b});try{Object.freeze(function(){})}catch(w){Object.freeze=function(b){return function(c){return typeof c=="function"?c:b(c)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(b){return b}),Object.isSealed||(Object.isSealed=function(b){return!1}),Object.isFrozen||(Object.isFrozen=function(b){return!1}),Object.isExtensible||(Object.isExtensible=function(b){if(Object(b)===b)throw new TypeError;var c="";while(i(b,c))c+="?";b[c]=!0;var d=i(b,c);return delete b[c],d});if(!Object.keys){var x=!0,y=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],z=y.length;for(var A in{toString:null})x=!1;Object.keys=function H(a){if(typeof a!="object"&&typeof a!="function"||a===null)throw new TypeError("Object.keys called on a non-object");var H=[];for(var b in a)i(a,b)&&H.push(b);if(x)for(var c=0,d=z;c<d;c++){var e=y[c];i(a,e)&&H.push(e)}return H}}if(!Date.prototype.toISOString||(new Date(-621987552e5)).toISOString().indexOf("-000001")===-1)Date.prototype.toISOString=function(){var b,c,d,e;if(!isFinite(this))throw new RangeError;b=[this.getUTCMonth()+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()],e=this.getUTCFullYear(),e=(e<0?"-":e>9999?"+":"")+("00000"+Math.abs(e)).slice(0<=e&&e<=9999?-4:-6),c=b.length;while(c--)d=b[c],d<10&&(b[c]="0"+d);return e+"-"+b.slice(0,2).join("-")+"T"+b.slice(2).join(":")+"."+("000"+this.getUTCMilliseconds()).slice(-3)+"Z"};Date.now||(Date.now=function(){return(new Date).getTime()}),Date.prototype.toJSON||(Date.prototype.toJSON=function(b){if(typeof this.toISOString!="function")throw new TypeError;return this.toISOString()}),Date.parse("+275760-09-13T00:00:00.000Z")!==864e13&&(Date=function(a){var b=function e(b,c,d,f,g,h,i){var j=arguments.length;if(this instanceof a){var k=j==1&&String(b)===b?new a(e.parse(b)):j>=7?new a(b,c,d,f,g,h,i):j>=6?new a(b,c,d,f,g,h):j>=5?new a(b,c,d,f,g):j>=4?new a(b,c,d,f):j>=3?new a(b,c,d):j>=2?new a(b,c):j>=1?new a(b):new a;return k.constructor=e,k}return a.apply(this,arguments)},c=new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$");for(var d in a)b[d]=a[d];return b.now=a.now,b.UTC=a.UTC,b.prototype=a.prototype,b.prototype.constructor=b,b.parse=function(d){var e=c.exec(d);if(e){e.shift();for(var f=1;f<7;f++)e[f]=+(e[f]||(f<3?1:0)),f==1&&e[f]--;var g=+e.pop(),h=+e.pop(),i=e.pop(),j=0;if(i){if(h>23||g>59)return NaN;j=(h*60+g)*6e4*(i=="+"?-1:1)}var k=+e[0];return 0<=k&&k<=99?(e[0]=k+400,a.UTC.apply(this,e)+j-126227808e5):a.UTC.apply(this,e)+j}return a.parse.apply(this,arguments)},b}(Date));var B=" \n \f\r   ᠎ â€â€‚         âŸã€€\u2028\u2029";if(!String.prototype.trim||B.trim()){B="["+B+"]";var C=new RegExp("^"+B+B+"*"),D=new RegExp(B+B+"*$");String.prototype.trim=function(){return String(this).replace(C,"").replace(D,"")}}var E=function(a){return a=+a,a!==a?a=0:a!==0&&a!==1/0&&a!==-Infinity&&(a=(a>0||-1)*Math.floor(Math.abs(a))),a},F="a"[0]!="a",G=function(a){if(a==null)throw new TypeError;return F&&typeof a=="string"&&a?a.split(""):Object(a)}}),define("ace/lib/dom",["require","exports","module"],function(a,b,c){"use strict";var d="http://www.w3.org/1999/xhtml";b.createElement=function(a,b){return document.createElementNS?document.createElementNS(b||d,a):document.createElement(a)},b.setText=function(a,b){a.innerText!==undefined&&(a.innerText=b),a.textContent!==undefined&&(a.textContent=b)},b.hasCssClass=function(a,b){var c=a.className.split(/\s+/g);return c.indexOf(b)!==-1},b.addCssClass=function(a,c){b.hasCssClass(a,c)||(a.className+=" "+c)},b.removeCssClass=function(a,b){var c=a.className.split(/\s+/g);for(;;){var d=c.indexOf(b);if(d==-1)break;c.splice(d,1)}a.className=c.join(" ")},b.toggleCssClass=function(a,b){var c=a.className.split(/\s+/g),d=!0;for(;;){var e=c.indexOf(b);if(e==-1)break;d=!1,c.splice(e,1)}return d&&c.push(b),a.className=c.join(" "),d},b.setCssClass=function(a,c,d){d?b.addCssClass(a,c):b.removeCssClass(a,c)},b.hasCssString=function(a,b){var c=0,d;b=b||document;if(b.createStyleSheet&&(d=b.styleSheets)){while(c<d.length)if(d[c++].owningElement.id===a)return!0}else if(d=b.getElementsByTagName("style"))while(c<d.length)if(d[c++].id===a)return!0;return!1},b.importCssString=function(c,e,f){f=f||document;if(e&&b.hasCssString(e,f))return null;var g;if(f.createStyleSheet)g=f.createStyleSheet(),g.cssText=c,e&&(g.owningElement.id=e);else{g=f.createElementNS?f.createElementNS(d,"style"):f.createElement("style"),g.appendChild(f.createTextNode(c)),e&&(g.id=e);var h=f.getElementsByTagName("head")[0]||f.documentElement;h.appendChild(g)}},b.importCssStylsheet=function(a,c){if(c.createStyleSheet)c.createStyleSheet(a);else{var d=b.createElement("link");d.rel="stylesheet",d.href=a;var e=c.getElementsByTagName("head")[0]||c.documentElement;e.appendChild(d)}},b.getInnerWidth=function(a){return parseInt(b.computedStyle(a,"paddingLeft"),10)+parseInt(b.computedStyle(a,"paddingRight"),10)+a.clientWidth},b.getInnerHeight=function(a){return parseInt(b.computedStyle(a,"paddingTop"),10)+parseInt(b.computedStyle(a,"paddingBottom"),10)+a.clientHeight},window.pageYOffset!==undefined?(b.getPageScrollTop=function(){return window.pageYOffset},b.getPageScrollLeft=function(){return window.pageXOffset}):(b.getPageScrollTop=function(){return document.body.scrollTop},b.getPageScrollLeft=function(){return document.body.scrollLeft}),window.getComputedStyle?b.computedStyle=function(a,b){return b?(window.getComputedStyle(a,"")||{})[b]||"":window.getComputedStyle(a,"")||{}}:b.computedStyle=function(a,b){return b?a.currentStyle[b]:a.currentStyle},b.scrollbarWidth=function(a){var c=b.createElement("p");c.style.width="100%",c.style.minWidth="0px",c.style.height="200px";var d=b.createElement("div"),e=d.style;e.position="absolute",e.left="-10000px",e.overflow="hidden",e.width="200px",e.minWidth="0px",e.height="150px",d.appendChild(c);var f=a.body||a.documentElement;f.appendChild(d);var g=c.offsetWidth;e.overflow="scroll";var h=c.offsetWidth;return g==h&&(h=d.clientWidth),f.removeChild(d),g-h},b.setInnerHtml=function(a,b){var c=a.cloneNode(!1);return c.innerHTML=b,a.parentNode.replaceChild(c,a),c},b.setInnerText=function(a,b){var c=a.ownerDocument;c.body&&"textContent"in c.body?a.textContent=b:a.innerText=b},b.getInnerText=function(a){var b=a.ownerDocument;return b.body&&"textContent"in b.body?a.textContent:a.innerText||a.textContent||""},b.getParentWindow=function(a){return a.defaultView||a.parentWindow}}),define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent","ace/lib/dom"],function(a,b,c){function g(a,b,c){var f=0;e.isOpera&&e.isMac?f=0|(b.metaKey?1:0)|(b.altKey?2:0)|(b.shiftKey?4:0)|(b.ctrlKey?8:0):f=0|(b.ctrlKey?1:0)|(b.altKey?2:0)|(b.shiftKey?4:0)|(b.metaKey?8:0);if(c in d.MODIFIER_KEYS){switch(d.MODIFIER_KEYS[c]){case"Alt":f=2;break;case"Shift":f=4;break;case"Ctrl":f=1;break;default:f=8}c=0}return f&8&&(c==91||c==93)&&(c=0),!!f||c in d.FUNCTION_KEYS||c in d.PRINTABLE_KEYS?a(b,f,c):!1}"use strict";var d=a("./keys"),e=a("./useragent"),f=a("./dom");b.addListener=function(a,b,c){if(a.addEventListener)return a.addEventListener(b,c,!1);if(a.attachEvent){var d=function(){c(window.event)};c._wrapper=d,a.attachEvent("on"+b,d)}},b.removeListener=function(a,b,c){if(a.removeEventListener)return a.removeEventListener(b,c,!1);a.detachEvent&&a.detachEvent("on"+b,c._wrapper||c)},b.stopEvent=function(a){return b.stopPropagation(a),b.preventDefault(a),!1},b.stopPropagation=function(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0},b.preventDefault=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1},b.getDocumentX=function(a){return a.clientX?a.clientX+f.getPageScrollLeft():a.pageX},b.getDocumentY=function(a){return a.clientY?a.clientY+f.getPageScrollTop():a.pageY},b.getButton=function(a){return a.type=="dblclick"?0:a.type=="contextmenu"?2:a.preventDefault?a.button:{1:0,2:2,4:1}[a.button]},document.documentElement.setCapture?b.capture=function(a,c,d){function e(a){return c(a),b.stopPropagation(a)}function g(e){c(e),f||(f=!0,d(e)),b.removeListener(a,"mousemove",c),b.removeListener(a,"mouseup",g),b.removeListener(a,"losecapture",g),a.releaseCapture()}var f=!1;b.addListener(a,"mousemove",c),b.addListener(a,"mouseup",g),b.addListener(a,"losecapture",g),a.setCapture()}:b.capture=function(a,b,c){function d(a){b(a),a.stopPropagation()}function e(a){b&&b(a),c&&c(a),document.removeEventListener("mousemove",d,!0),document.removeEventListener("mouseup",e,!0),a.stopPropagation()}document.addEventListener("mousemove",d,!0),document.addEventListener("mouseup",e,!0)},b.addMouseWheelListener=function(a,c){var d=8,e=function(a){a.wheelDelta!==undefined?a.wheelDeltaX!==undefined?(a.wheelX=-a.wheelDeltaX/d,a.wheelY=-a.wheelDeltaY/d):(a.wheelX=0,a.wheelY=-a.wheelDelta/d):a.axis&&a.axis==a.HORIZONTAL_AXIS?(a.wheelX=(a.detail||0)*5,a.wheelY=0):(a.wheelX=0,a.wheelY=(a.detail||0)*5),c(a)};b.addListener(a,"DOMMouseScroll",e),b.addListener(a,"mousewheel",e)},b.addMultiMouseDownListener=function(a,c,d,f,g){var h=0,i,j,k=function(a){h+=1,h==1&&(i=a.clientX,j=a.clientY,setTimeout(function(){h=0},f||600));var e=b.getButton(a)==c;if(!e||Math.abs(a.clientX-i)>5||Math.abs(a.clientY-j)>5)h=0;h==d&&(h=0,g(a));if(e)return b.preventDefault(a)};b.addListener(a,"mousedown",k),e.isOldIE&&b.addListener(a,"dblclick",k)},b.addCommandKeyListener=function(a,c){var d=b.addListener;if(e.isOldGecko||e.isOpera){var f=null;d(a,"keydown",function(a){f=a.keyCode}),d(a,"keypress",function(a){return g(c,a,f)})}else{var h=null;d(a,"keydown",function(a){return h=a.keyIdentifier||a.keyCode,g(c,a,a.keyCode)})}};if(window.postMessage){var h=1;b.nextTick=function(a,c){c=c||window;var d="zero-timeout-message-"+h;b.addListener(c,"message",function e(f){f.data==d&&(b.stopPropagation(f),b.removeListener(c,"message",e),a())}),c.postMessage(d,"*")}}else b.nextTick=function(a,b){b=b||window,window.setTimeout(a,0)}}),define("ace/lib/keys",["require","exports","module","ace/lib/oop"],function(a,b,c){"use strict";var d=a("./oop"),e=function(){var a={MODIFIER_KEYS:{16:"Shift",17:"Ctrl",18:"Alt",224:"Meta"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,meta:8,command:8},FUNCTION_KEYS:{8:"Backspace",9:"Tab",13:"Return",19:"Pause",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"Print",45:"Insert",46:"Delete",96:"Numpad0",97:"Numpad1",98:"Numpad2",99:"Numpad3",100:"Numpad4",101:"Numpad5",102:"Numpad6",103:"Numpad7",104:"Numpad8",105:"Numpad9",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"Numlock",145:"Scrolllock"},PRINTABLE_KEYS:{32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",61:"=",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",107:"+",109:"-",110:".",188:",",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:'"'}};for(var b in a.FUNCTION_KEYS){var c=a.FUNCTION_KEYS[b].toUpperCase();a[c]=parseInt(b,10)}return d.mixin(a,a.MODIFIER_KEYS),d.mixin(a,a.PRINTABLE_KEYS),d.mixin(a,a.FUNCTION_KEYS),a}();d.mixin(b,e),b.keyCodeToString=function(a){return(e[a]||String.fromCharCode(a)).toLowerCase()}}),define("ace/lib/oop",["require","exports","module"],function(a,b,c){"use strict",b.inherits=function(){var a=function(){};return function(b,c){a.prototype=c.prototype,b.super_=c.prototype,b.prototype=new a,b.prototype.constructor=b}}(),b.mixin=function(a,b){for(var c in b)a[c]=b[c]},b.implement=function(a,c){b.mixin(a,c)}}),define("ace/lib/useragent",["require","exports","module"],function(a,b,c){"use strict";var d=(navigator.platform.match(/mac|win|linux/i)||["other"])[0].toLowerCase(),e=navigator.userAgent;b.isWin=d=="win",b.isMac=d=="mac",b.isLinux=d=="linux",b.isIE=navigator.appName=="Microsoft Internet Explorer"&&parseFloat(navigator.userAgent.match(/MSIE ([0-9]+[\.0-9]+)/)[1]),b.isOldIE=b.isIE&&b.isIE<9,b.isGecko=b.isMozilla=window.controllers&&window.navigator.product==="Gecko",b.isOldGecko=b.isGecko&&parseInt((navigator.userAgent.match(/rv\:(\d+)/)||[])[1],10)<4,b.isOpera=window.opera&&Object.prototype.toString.call(window.opera)=="[object Opera]",b.isWebKit=parseFloat(e.split("WebKit/")[1])||undefined,b.isChrome=parseFloat(e.split(" Chrome/")[1])||undefined,b.isAIR=e.indexOf("AdobeAIR")>=0,b.isIPad=e.indexOf("iPad")>=0,b.isTouchPad=e.indexOf("TouchPad")>=0,b.OS={LINUX:"LINUX",MAC:"MAC",WINDOWS:"WINDOWS"},b.getOS=function(){return b.isMac?b.OS.MAC:b.isLinux?b.OS.LINUX:b.OS.WINDOWS}}),define("ace/editor",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/oop","ace/lib/lang","ace/lib/useragent","ace/keyboard/textinput","ace/mouse/mouse_handler","ace/mouse/fold_handler","ace/keyboard/keybinding","ace/edit_session","ace/search","ace/range","ace/lib/event_emitter","ace/commands/command_manager","ace/commands/default_commands"],function(a,b,c){"use strict",a("./lib/fixoldbrowsers");var d=a("./lib/oop"),e=a("./lib/lang"),f=a("./lib/useragent"),g=a("./keyboard/textinput").TextInput,h=a("./mouse/mouse_handler").MouseHandler,i=a("./mouse/fold_handler").FoldHandler,j=a("./keyboard/keybinding").KeyBinding,k=a("./edit_session").EditSession,l=a("./search").Search,m=a("./range").Range,n=a("./lib/event_emitter").EventEmitter,o=a("./commands/command_manager").CommandManager,p=a("./commands/default_commands").commands,q=function(a,b){var c=a.getContainerElement();this.container=c,this.renderer=a,this.textInput=new g(a.getTextAreaContainer(),this),this.keyBinding=new j(this),f.isIPad||(this.$mouseHandler=new h(this),new i(this)),this.$blockScrolling=0,this.$search=(new l).set({wrap:!0}),this.commands=new o(f.isMac?"mac":"win",p),this.setSession(b||new k(""))};(function(){d.implement(this,n),this.setKeyboardHandler=function(a){this.keyBinding.setKeyboardHandler(a)},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(a){if(this.session==a)return;if(this.session){var b=this.session;this.session.removeEventListener("change",this.$onDocumentChange),this.session.removeEventListener("changeMode",this.$onChangeMode),this.session.removeEventListener("tokenizerUpdate",this.$onTokenizerUpdate),this.session.removeEventListener("changeTabSize",this.$onChangeTabSize),this.session.removeEventListener("changeWrapLimit",this.$onChangeWrapLimit),this.session.removeEventListener("changeWrapMode",this.$onChangeWrapMode),this.session.removeEventListener("onChangeFold",this.$onChangeFold),this.session.removeEventListener("changeFrontMarker",this.$onChangeFrontMarker),this.session.removeEventListener("changeBackMarker",this.$onChangeBackMarker),this.session.removeEventListener("changeBreakpoint",this.$onChangeBreakpoint),this.session.removeEventListener("changeAnnotation",this.$onChangeAnnotation),this.session.removeEventListener("changeOverwrite",this.$onCursorChange),this.session.removeEventListener("changeScrollTop",this.$onScrollTopChange),this.session.removeEventListener("changeLeftTop",this.$onScrollLeftChange);var c=this.session.getSelection();c.removeEventListener("changeCursor",this.$onCursorChange),c.removeEventListener("changeSelection",this.$onSelectionChange)}this.session=a,this.$onDocumentChange=this.onDocumentChange.bind(this),a.addEventListener("change",this.$onDocumentChange),this.renderer.setSession(a),this.$onChangeMode=this.onChangeMode.bind(this),a.addEventListener("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),a.addEventListener("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.updateText.bind(this.renderer),a.addEventListener("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),a.addEventListener("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),a.addEventListener("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),a.addEventListener("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.addEventListener("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.addEventListener("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.addEventListener("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.addEventListener("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.addEventListener("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.addEventListener("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.addEventListener("changeScrollLeft",this.$onScrollLeftChange),this.selection=a.getSelection(),this.selection.addEventListener("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.addEventListener("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull(),this._emit("changeSession",{session:a,oldSession:b})},this.getSession=function(){return this.session},this.getSelection=function(){return this.selection},this.resize=function(){this.renderer.onResize()},this.setTheme=function(a){this.renderer.setTheme(a)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(a){this.renderer.setStyle(a)},this.unsetStyle=function(a){this.renderer.unsetStyle(a)},this.setFontSize=function(a){this.container.style.fontSize=a,this.renderer.updateFontSize()},this.$highlightBrackets=function(){this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null);if(this.$highlightPending)return;var a=this;this.$highlightPending=!0,setTimeout(function(){a.$highlightPending=!1;var b=a.session.findMatchingBracket(a.getCursorPosition());if(b){var c=new m(b.row,b.column,b.row,b.column+1);a.session.$bracketHighlight=a.session.addMarker(c,"ace_bracket","text")}},10)},this.focus=function(){var a=this;setTimeout(function(){a.textInput.focus()}),this.textInput.focus()},this.isFocused=function(){return this.textInput.isFocused()},this.blur=function(){this.textInput.blur()},this.onFocus=function(){this.renderer.showCursor(),this.renderer.visualizeFocus(),this._emit("focus")},this.onBlur=function(){this.renderer.hideCursor(),this.renderer.visualizeBlur(),this._emit("blur")},this.onDocumentChange=function(a){var b=a.data,c=b.range,d;c.start.row==c.end.row&&b.action!="insertLines"&&b.action!="removeLines"?d=c.end.row:d=Infinity,this.renderer.updateLines(c.start.row,d),this._emit("change",a),this.onCursorChange()},this.onTokenizerUpdate=function(a){var b=a.data;this.renderer.updateLines(b.first,b.last)},this.onScrollTopChange=function(){this.renderer.scrollToY(this.session.getScrollTop())},this.onScrollLeftChange=function(){this.renderer.scrollToX(this.session.getScrollLeft())},this.onCursorChange=function(){this.renderer.updateCursor(),this.$blockScrolling||this.renderer.scrollCursorIntoView(),this.renderer.moveTextAreaToCursor(this.textInput.getElement()),this.$highlightBrackets(),this.$updateHighlightActiveLine()},this.$updateHighlightActiveLine=function(){var a=this.getSession();a.$highlightLineMarker&&a.removeMarker(a.$highlightLineMarker),typeof this.$lastrow=="number"&&this.renderer.removeGutterDecoration(this.$lastrow,"ace_gutter_active_line"),a.$highlightLineMarker=null,this.$lastrow=null;if(this.getHighlightActiveLine()){var b=this.getCursorPosition(),c=this.session.getFoldLine(b.row);if(this.getSelectionStyle()!="line"||!this.selection.isMultiLine()){var d;c?d=new m(c.start.row,0,c.end.row+1,0):d=new m(b.row,0,b.row+1,0),a.$highlightLineMarker=a.addMarker(d,"ace_active_line","background")}this.renderer.addGutterDecoration(this.$lastrow=b.row,"ace_gutter_active_line")}},this.onSelectionChange=function(a){var b=this.getSession();b.$selectionMarker&&b.removeMarker(b.$selectionMarker),b.$selectionMarker=null;if(!this.selection.isEmpty()){var c=this.selection.getRange(),d=this.getSelectionStyle();b.$selectionMarker=b.addMarker(c,"ace_selection",d)}else this.$updateHighlightActiveLine();this.$highlightSelectedWord&&this.session.getMode().highlightSelection(this)},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.setBreakpoints(this.session.getBreakpoints())},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(){this.renderer.updateText()},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getCopyText=function(){var a="";return this.selection.isEmpty()||(a=this.session.getTextRange(this.getSelectionRange())),this._emit("copy",a),a},this.onCut=function(){this.commands.exec("cut",this)},this.insert=function(a){var b=this.session,c=b.getMode(),d=this.getCursorPosition();if(this.getBehavioursEnabled()){var e=c.transformAction(b.getState(d.row),"insertion",this,b,a);e&&(a=e.text)}a=a.replace(" ",this.session.getTabString());if(!this.selection.isEmpty())d=this.session.remove(this.getSelectionRange()),this.clearSelection();else if(this.session.getOverwrite()){var f=new m.fromPoints(d,d);f.end.column+=a.length,this.session.remove(f)}this.clearSelection();var g=d.column,h=b.getState(d.row),i=c.checkOutdent(h,b.getLine(d.row),a),j=b.getLine(d.row),k=c.getNextLineIndent(h,j.slice(0,d.column),b.getTabString()),l=b.insert(d,a);e&&e.selection&&(e.selection.length==2?this.selection.setSelectionRange(new m(d.row,g+e.selection[0],d.row,g+e.selection[1])):this.selection.setSelectionRange(new m(d.row+e.selection[0],e.selection[1],d.row+e.selection[2],e.selection[3])));var h=b.getState(d.row);if(b.getDocument().isNewLine(a)){this.moveCursorTo(d.row+1,0);var n=b.getTabSize(),o=Number.MAX_VALUE;for(var p=d.row+1;p<=l.row;++p){var q=0;j=b.getLine(p);for(var r=0;r<j.length;++r)if(j.charAt(r)==" ")q+=n;else{if(j.charAt(r)!=" ")break;q+=1}/[^\s]/.test(j)&&(o=Math.min(q,o))}for(var p=d.row+1;p<=l.row;++p){var s=o;j=b.getLine(p);for(var r=0;r<j.length&&s>0;++r)j.charAt(r)==" "?s-=n:j.charAt(r)==" "&&(s-=1);b.remove(new m(p,0,p,r))}b.indentRows(d.row+1,l.row,k)}i&&c.autoOutdent(h,b,d.row)},this.onTextInput=function(a,b){b&&this._emit("paste",a),this.keyBinding.onTextInput(a,b)},this.onCommandKey=function(a,b,c){this.keyBinding.onCommandKey(a,b,c)},this.setOverwrite=function(a){this.session.setOverwrite(a)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(a){this.$mouseHandler.setScrollSpeed(a)},this.getScrollSpeed=function(){return this.$mouseHandler.getScrollSpeed()},this.setDragDelay=function(a){this.$mouseHandler.setDragDelay(a)},this.getDragDelay=function(){return this.$mouseHandler.getDragDelay()},this.$selectionStyle="line",this.setSelectionStyle=function(a){if(this.$selectionStyle==a)return;this.$selectionStyle=a,this.onSelectionChange(),this._emit("changeSelectionStyle",{data:a})},this.getSelectionStyle=function(){return this.$selectionStyle},this.$highlightActiveLine=!0,this.setHighlightActiveLine=function(a){if(this.$highlightActiveLine==a)return;this.$highlightActiveLine=a,this.$updateHighlightActiveLine()},this.getHighlightActiveLine=function(){return this.$highlightActiveLine},this.$highlightSelectedWord=!0,this.setHighlightSelectedWord=function(a){if(this.$highlightSelectedWord==a)return;this.$highlightSelectedWord=a,a?this.session.getMode().highlightSelection(this):this.session.getMode().clearSelectionHighlight(this)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(a){this.renderer.setAnimatedScroll(a)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(a){if(this.getShowInvisibles()==a)return;this.renderer.setShowInvisibles(a)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setShowPrintMargin=function(a){this.renderer.setShowPrintMargin(a)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(a){this.renderer.setPrintMarginColumn(a)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.$readOnly=!1,this.setReadOnly=function(a){this.$readOnly=a},this.getReadOnly=function(){return this.$readOnly},this.$modeBehaviours=!0,this.setBehavioursEnabled=function(a){this.$modeBehaviours=a},this.getBehavioursEnabled=function(){return this.$modeBehaviours},this.setShowFoldWidgets=function(a){var b=this.renderer.$gutterLayer;if(b.getShowFoldWidgets()==a)return;this.renderer.$gutterLayer.setShowFoldWidgets(a),this.$showFoldWidgets=a,this.renderer.updateFull()},this.getShowFoldWidgets=function(){return this.renderer.$gutterLayer.getShowFoldWidgets()},this.remove=function(a){this.selection.isEmpty()&&(a=="left"?this.selection.selectLeft():this.selection.selectRight());var b=this.getSelectionRange();if(this.getBehavioursEnabled()){var c=this.session,d=c.getState(b.start.row),e=c.getMode().transformAction(d,"deletion",this,c,b);e&&(b=e)}this.session.remove(b),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var a=this.getSelectionRange();a.start.column==a.end.column&&a.start.row==a.end.row&&(a.end.column=0,a.end.row++),this.session.remove(a),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var a=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(a)},this.transposeLetters=function(){if(!this.selection.isEmpty())return;var a=this.getCursorPosition(),b=a.column;if(b===0)return;var c=this.session.getLine(a.row),d,e;b<c.length?(d=c.charAt(b)+c.charAt(b-1),e=new m(a.row,b-1,a.row,b+1)):(d=c.charAt(b-1)+c.charAt(b-2),e=new m(a.row,b-2,a.row,b)),this.session.replace(e,d)},this.toLowerCase=function(){var a=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var b=this.getSelectionRange(),c=this.session.getTextRange(b);this.session.replace(b,c.toLowerCase()),this.selection.setSelectionRange(a)},this.toUpperCase=function(){var a=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var b=this.getSelectionRange(),c=this.session.getTextRange(b);this.session.replace(b,c.toUpperCase()),this.selection.setSelectionRange(a)},this.indent=function(){var a=this.session,b=this.getSelectionRange();if(!(b.start.row<b.end.row||b.start.column<b.end.column)){var d;if(this.session.getUseSoftTabs()){var f=a.getTabSize(),g=this.getCursorPosition(),h=a.documentToScreenColumn(g.row,g.column),i=f-h%f;d=e.stringRepeat(" ",i)}else d=" ";return this.insert(d)}var c=this.$getSelectedRows();a.indentRows(c.first,c.last," ")},this.blockOutdent=function(){var a=this.session.getSelection();this.session.outdentRows(a.getRange())},this.toggleCommentLines=function(){var a=this.session.getState(this.getCursorPosition().row),b=this.$getSelectedRows();this.session.getMode().toggleCommentLines(a,this.session,b.first,b.last)},this.removeLines=function(){var a=this.$getSelectedRows(),b;a.first===0||a.last+1<this.session.getLength()?b=new m(a.first,0,a.last+1,0):b=new m(a.first-1,this.session.getLine(a.first-1).length,a.last,this.session.getLine(a.last).length),this.session.remove(b),this.clearSelection()},this.moveLinesDown=function(){this.$moveLines(function(a,b){return this.session.moveLinesDown(a,b)})},this.moveLinesUp=function(){this.$moveLines(function(a,b){return this.session.moveLinesUp(a,b)})},this.moveText=function(a,b){return this.$readOnly?null:this.session.moveText(a,b)},this.copyLinesUp=function(){this.$moveLines(function(a,b){return this.session.duplicateLines(a,b),0})},this.copyLinesDown=function(){this.$moveLines(function(a,b){return this.session.duplicateLines(a,b)})},this.$moveLines=function(a){var b=this.$getSelectedRows(),c=this.selection;if(!c.isMultiLine())var d=c.getRange(),e=c.isBackwards();var f=a.call(this,b.first,b.last);d?(d.start.row+=f,d.end.row+=f,c.setSelectionRange(d,e)):(c.setSelectionAnchor(b.last+f+1,0),c.$moveSelection(function(){c.moveCursorTo(b.first+f,0)}))},this.$getSelectedRows=function(){var a=this.getSelectionRange().collapseRows();return{first:a.start.row,last:a.end.row}},this.onCompositionStart=function(a){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(a){this.renderer.setCompositionText(a)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(a){return a>=this.getFirstVisibleRow()&&a<=this.getLastVisibleRow()},this.isRowFullyVisible=function(a){return a>=this.renderer.getFirstFullyVisibleRow()&&a<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$getPageDownRow=function(){return this.renderer.getScrollBottomRow()},this.$getPageUpRow=function(){var a=this.renderer.getScrollTopRow(),b=this.renderer.getScrollBottomRow();return a-(b-a)},this.selectPageDown=function(){var a=this.$getPageDownRow()+Math.floor(this.$getVisibleRowCount()/2);this.scrollPageDown();var b=this.getSelection(),c=this.session.documentToScreenPosition(b.getSelectionLead()),d=this.session.screenToDocumentPosition(a,c.column);b.selectTo(d.row,d.column)},this.selectPageUp=function(){var a=this.renderer.getScrollTopRow()-this.renderer.getScrollBottomRow(),b=this.$getPageUpRow()+Math.round(a/2);this.scrollPageUp();var c=this.getSelection(),d=this.session.documentToScreenPosition(c.getSelectionLead()),e=this.session.screenToDocumentPosition(b,d.column);c.selectTo(e.row,e.column)},this.gotoPageDown=function(){var a=this.$getPageDownRow(),b=this.getCursorPositionScreen().column;this.scrollToRow(a),this.getSelection().moveCursorToScreen(a,b)},this.gotoPageUp=function(){var a=this.$getPageUpRow(),b=this.getCursorPositionScreen().column;this.scrollToRow(a),this.getSelection().moveCursorToScreen(a,b)},this.scrollPageDown=function(){this.scrollToRow(this.$getPageDownRow())},this.scrollPageUp=function(){this.renderer.scrollToRow(this.$getPageUpRow())},this.scrollToRow=function(a){this.renderer.scrollToRow(a)},this.scrollToLine=function(a,b){this.renderer.scrollToLine(a,b)},this.centerSelection=function(){var a=this.getSelectionRange(),b=Math.floor(a.start.row+(a.end.row-a.start.row)/2);this.renderer.scrollToLine(b,!0)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(a,b){this.selection.moveCursorTo(a,b)},this.moveCursorToPosition=function(a){this.selection.moveCursorToPosition(a)},this.jumpToMatching=function(){var a=this.getCursorPosition(),b=this.session.findMatchingBracket(a);b||(a.column+=1,b=this.session.findMatchingBracket(a)),b||(a.column-=2,b=this.session.findMatchingBracket(a)),b&&(this.clearSelection(),this.moveCursorTo(b.row,b.column))},this.gotoLine=function(a,b){this.selection.clearSelection(),this.session.unfold({row:a-1,column:b||0}),this.$blockScrolling+=1,this.moveCursorTo(a-1,b||0),this.$blockScrolling-=1,this.isRowFullyVisible(this.getCursorPosition().row)||this.scrollToLine(a,!0)},this.navigateTo=function(a,b){this.clearSelection(),this.moveCursorTo(a,b)},this.navigateUp=function(a){this.selection.clearSelection(),a=a||1,this.selection.moveCursorBy(-a,0)},this.navigateDown=function(a){this.selection.clearSelection(),a=a||1,this.selection.moveCursorBy(a,0)},this.navigateLeft=function(a){if(!this.selection.isEmpty()){var b=this.getSelectionRange().start;this.moveCursorToPosition(b)}else{a=a||1;while(a--)this.selection.moveCursorLeft()}this.clearSelection()},this.navigateRight=function(a){if(!this.selection.isEmpty()){var b=this.getSelectionRange().end;this.moveCursorToPosition(b)}else{a=a||1;while(a--)this.selection.moveCursorRight()}this.clearSelection()},this.navigateLineStart=function(){this.selection.moveCursorLineStart(),this.clearSelection()},this.navigateLineEnd=function(){this.selection.moveCursorLineEnd(),this.clearSelection()},this.navigateFileEnd=function(){this.selection.moveCursorFileEnd(),this.clearSelection()},this.navigateFileStart=function(){this.selection.moveCursorFileStart(),this.clearSelection()},this.navigateWordRight=function(){this.selection.moveCursorWordRight(),this.clearSelection()},this.navigateWordLeft=function(){this.selection.moveCursorWordLeft(),this.clearSelection()},this.replace=function(a,b){b&&this.$search.set(b);var c=this.$search.find(this.session),d=0;return c?(this.$tryReplace(c,a)&&(d=1),c!==null&&(this.selection.setSelectionRange(c),this.renderer.scrollSelectionIntoView(c.start,c.end)),d):d},this.replaceAll=function(a,b){b&&this.$search.set(b);var c=this.$search.findAll(this.session),d=0;if(!c.length)return d;var e=this.getSelectionRange();this.clearSelection(),this.selection.moveCursorTo(0,0),this.$blockScrolling+=1;for(var f=c.length-1;f>=0;--f)this.$tryReplace(c[f],a)&&d++;return this.selection.setSelectionRange(e),this.$blockScrolling-=1,d},this.$tryReplace=function(a,b){var c=this.session.getTextRange(a);return b=this.$search.replace(c,b),b!==null?(a.end=this.session.replace(a,b),a):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(a,b){this.clearSelection(),b=b||{},b.needle=a,this.$search.set(b),this.$find()},this.findNext=function(a){a=a||{},typeof a.backwards=="undefined"&&(a.backwards=!1),this.$search.set(a),this.$find()},this.findPrevious=function(a){a=a||{},typeof a.backwards=="undefined"&&(a.backwards=!0),this.$search.set(a),this.$find()},this.$find=function(a){this.selection.isEmpty()||this.$search.set({needle:this.session.getTextRange(this.getSelectionRange())}),typeof a!="undefined"&&this.$search.set({backwards:a});var b=this.$search.find(this.session);if(b){this.session.unfold(b),this.$blockScrolling+=1,this.selection.setSelectionRange(b),this.$blockScrolling-=1;if(this.getAnimatedScroll()){var c=this.getCursorPosition();this.isRowFullyVisible(c.row)||this.scrollToLine(c.row,!0)}else this.renderer.scrollSelectionIntoView(b.start,b.end)}},this.undo=function(){this.session.getUndoManager().undo()},this.redo=function(){this.session.getUndoManager().redo()},this.destroy=function(){this.renderer.destroy()}}).call(q.prototype),b.Editor=q}),define("ace/lib/lang",["require","exports","module"],function(a,b,c){"use strict",b.stringReverse=function(a){return a.split("").reverse().join("")},b.stringRepeat=function(a,b){return(new Array(b+1)).join(a)};var d=/^\s\s*/,e=/\s\s*$/;b.stringTrimLeft=function(a){return a.replace(d,"")},b.stringTrimRight=function(a){return a.replace(e,"")},b.copyObject=function(a){var b={};for(var c in a)b[c]=a[c];return b},b.copyArray=function(a){var b=[];for(var c=0,d=a.length;c<d;c++)a[c]&&typeof a[c]=="object"?b[c]=this.copyObject(a[c]):b[c]=a[c];return b},b.deepCopy=function(a){if(typeof a!="object")return a;var b=a.constructor();for(var c in a)typeof a[c]=="object"?b[c]=this.deepCopy(a[c]):b[c]=a[c];return b},b.arrayToMap=function(a){var b={};for(var c=0;c<a.length;c++)b[a[c]]=1;return b},b.arrayRemove=function(a,b){for(var c=0;c<=a.length;c++)b===a[c]&&a.splice(c,1)},b.escapeRegExp=function(a){return a.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},b.deferredCall=function(a){var b=null,c=function(){b=null,a()},d=function(a){return d.cancel(),b=setTimeout(c,a||0),d};return d.schedule=d,d.call=function(){return this.cancel(),a(),d},d.cancel=function(){return clearTimeout(b),b=null,d},d}}),define("ace/keyboard/textinput",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/lib/dom"],function(a,b,c){"use strict";var d=a("../lib/event"),e=a("../lib/useragent"),f=a("../lib/dom"),g=function(a,b){function l(){try{c.select()}catch(a){}}function m(a){if(!i){var d=a||c.value;if(d){d.charCodeAt(d.length-1)==g.charCodeAt(0)?(d=d.slice(0,-1),d&&b.onTextInput(d,j)):b.onTextInput(d,j);if(!v())return!1}}i=!1,j=!1,c.value=g,l()}function v(){return document.activeElement===c}var c=f.createElement("textarea");e.isTouchPad&&c.setAttribute("x-palm-disable-auto-cap",!0),c.style.left="-10000px",c.style.position="fixed",a.insertBefore(c,a.firstChild);var g=String.fromCharCode(0);m();var h=!1,i=!1,j=!1,k="",n=function(a){setTimeout(function(){h||m(a.data)},0)},o=function(a){if(e.isOldIE&&c.value.charCodeAt(0)>128)return;setTimeout(function(){h||m()},0)},p=function(a){h=!0,b.onCompositionStart(),e.isGecko||setTimeout(q,0)},q=function(){if(!h)return;b.onCompositionUpdate(c.value)},r=function(a){h=!1,b.onCompositionEnd()},s=function(a){i=!0;var d=b.getCopyText();d?c.value=d:a.preventDefault(),l(),setTimeout(function(){m()},0)},t=function(a){i=!0;var d=b.getCopyText();d?(c.value=d,b.onCut()):a.preventDefault(),l(),setTimeout(function(){m()},0)};d.addCommandKeyListener(c,b.onCommandKey.bind(b));if(e.isOldIE){var u={13:1,27:1};d.addListener(c,"keyup",function(a){h&&(!c.value||u[a.keyCode])&&setTimeout(r,0);if((c.value.charCodeAt(0)|0)<129)return;h?q():p()})}"onpropertychange"in c&&!("oninput"in c)?d.addListener(c,"propertychange",o):d.addListener(c,"input",n),d.addListener(c,"paste",function(a){j=!0,a.clipboardData&&a.clipboardData.getData?(m(a.clipboardData.getData("text/plain")),a.preventDefault()):o()}),"onbeforecopy"in c&&typeof clipboardData!="undefined"?(d.addListener(c,"beforecopy",function(a){var c=b.getCopyText();c?clipboardData.setData("Text",c):a.preventDefault()}),d.addListener(a,"keydown",function(a){if(a.ctrlKey&&a.keyCode==88){var c=b.getCopyText();c&&(clipboardData.setData("Text",c),b.onCut()),d.preventDefault(a)}})):(d.addListener(c,"copy",s),d.addListener(c,"cut",t)),d.addListener(c,"compositionstart",p),e.isGecko&&d.addListener(c,"text",q),e.isWebKit&&d.addListener(c,"keyup",q),d.addListener(c,"compositionend",r),d.addListener(c,"blur",function(){b.onBlur()}),d.addListener(c,"focus",function(){b.onFocus(),l()}),this.focus=function(){b.onFocus(),l(),c.focus()},this.blur=function(){c.blur()},this.isFocused=v,this.getElement=function(){return c},this.onContextMenu=function(a,b){a&&(k||(k=c.style.cssText),c.style.cssText="position:fixed; z-index:1000;left:"+(a.x-2)+"px; top:"+(a.y-2)+"px;"),b&&(c.value="")},this.onContextMenuClose=function(){setTimeout(function(){k&&(c.style.cssText=k,k=""),m()},0)}};b.TextInput=g}),define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event"],function(a,b,c){"use strict";var d=a("../lib/event"),e=a("./default_handlers").DefaultHandlers,f=a("./default_gutter_handler").GutterHandler,g=a("./mouse_event").MouseEvent,h=function(a){this.editor=a,new e(a),new f(a),d.addListener(a.container,"mousedown",function(b){return a.focus(),d.preventDefault(b)}),d.addListener(a.container,"selectstart",function(a){return d.preventDefault(a)});var b=a.renderer.getMouseEventTarget();d.addListener(b,"mousedown",this.onMouseEvent.bind(this,"mousedown")),d.addListener(b,"click",this.onMouseEvent.bind(this,"click")),d.addListener(b,"mousemove",this.onMouseMove.bind(this,"mousemove")),d.addMultiMouseDownListener(b,0,2,500,this.onMouseEvent.bind(this,"dblclick")),d.addMultiMouseDownListener(b,0,3,600,this.onMouseEvent.bind(this,"tripleclick")),d.addMultiMouseDownListener(b,0,4,600,this.onMouseEvent.bind(this,"quadclick")),d.addMouseWheelListener(a.container,this.onMouseWheel.bind(this,"mousewheel"));var c=a.renderer.$gutter;d.addListener(c,"mousedown",this.onMouseEvent.bind(this,"guttermousedown")),d.addListener(c,"click",this.onMouseEvent.bind(this,"gutterclick")),d.addListener(c,"dblclick",this.onMouseEvent.bind(this,"gutterdblclick")),d.addListener(c,"mousemove",this.onMouseMove.bind(this,"gutter"))};(function(){this.$scrollSpeed=1,this.setScrollSpeed=function(a){this.$scrollSpeed=a},this.getScrollSpeed=function(){return this.$scrollSpeed},this.onMouseEvent=function(a,b){this.editor._emit(a,new g(b,this.editor))},this.$dragDelay=250,this.setDragDelay=function(a){this.$dragDelay=a},this.getDragDelay=function(){return this.$dragDelay},this.onMouseMove=function(a,b){var c=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;if(!c||!c.length)return;this.editor._emit(a,new g(b,this.editor))},this.onMouseWheel=function(a,b){var c=new g(b,this.editor);c.speed=this.$scrollSpeed*2,c.wheelX=b.wheelX,c.wheelY=b.wheelY,this.editor._emit(a,c)}}).call(h.prototype),b.MouseHandler=h}),define("ace/mouse/default_handlers",["require","exports","module","ace/lib/event","ace/lib/dom","ace/lib/browser_focus"],function(a,b,c){function k(a){this.editor=a,this.$clickSelection=null,this.browserFocus=new f,a.setDefaultHandler("mousedown",this.onMouseDown.bind(this)),a.setDefaultHandler("dblclick",this.onDoubleClick.bind(this)),a.setDefaultHandler("tripleclick",this.onTripleClick.bind(this)),a.setDefaultHandler("quadclick",this.onQuadClick.bind(this)),a.setDefaultHandler("mousewheel",this.onScroll.bind(this))}function l(a,b,c,d){return Math.sqrt(Math.pow(c-a,2)+Math.pow(d-b,2))}"use strict";var d=a("../lib/event"),e=a("../lib/dom"),f=a("../lib/browser_focus").BrowserFocus,g=0,h=1,i=2,j=5;(function(){this.onMouseDown=function(a){function C(b){a.getShiftKey()?m.selection.selectToPosition(b):n.$clickSelection||(m.moveCursorToPosition(b),m.selection.clearSelection()),q=h}var b=a.inSelection(),c=a.pageX,f=a.pageY,k=a.getDocumentPosition(),m=this.editor,n=this,o=m.getSelectionRange(),p=o.isEmpty(),q=g;if(b&&(!this.browserFocus.isFocused()||(new Date).getTime()-this.browserFocus.lastFocus<20||!m.isFocused())){m.focus();return}var r=a.getButton();if(r!==0){p&&m.moveCursorToPosition(k),r==2&&(m.textInput.onContextMenu({x:a.clientX,y:a.clientY},p),d.capture(m.container,function(){},m.textInput.onContextMenuClose));return}b||C(k);var s=c,t=f,u=(new Date).getTime(),v,w,x,y=function(a){s=d.getDocumentX(a),t=d.getDocumentY(a)},z=function(a){clearInterval(F),q==g?C(k):q==i&&A(a),n.$clickSelection=null,q=g},A=function(a){e.removeCssClass(m.container,"ace_dragging"),m.session.removeMarker(x),m.$mouseHandler.$clickSelection||v||(m.moveCursorToPosition(k),m.selection.clearSelection());if(!v)return;if(w.contains(v.row,v.column)){v=null;return}m.clearSelection();if(a&&(a.ctrlKey||a.altKey))var b=m.session,c=b.insert(v,b.getTextRange(w));else var c=m.moveText(w,v);if(!c){v=null;return}m.selection.setSelectionRange(c)},B=function(){if(q==g){var a=l(c,f,s,t),b=(new Date).getTime();if(a>j){q=h;var d=m.renderer.screenToTextCoordinates(s,t);C(d)}else if(b-u>m.getDragDelay()){q=i,w=m.getSelectionRange();var k=m.getSelectionStyle();x=m.session.addMarker(w,"ace_selection",k),m.clearSelection(),e.addCssClass(m.container,"ace_dragging")}}q==i?E():q==h&&D()},D=function(){var a,b=m.renderer.screenToTextCoordinates(s,t);n.$clickSelection?n.$clickSelection.contains(b.row,b.column)?m.selection.setSelectionRange(n.$clickSelection):(n.$clickSelection.compare(b.row,b.column)==-1?a=n.$clickSelection.end:a=n.$clickSelection.start,m.selection.setSelectionAnchor(a.row,a.column),m.selection.selectToPosition(b)):m.selection.selectToPosition(b),m.renderer.scrollCursorIntoView()},E=function(){v=m.renderer.screenToTextCoordinates(s,t),m.moveCursorToPosition(v)};d.capture(m.container,y,z);var F=setInterval(B,20);return a.preventDefault()},this.onDoubleClick=function(a){var b=a.getDocumentPosition(),c=this.editor;c.moveCursorToPosition(b),c.selection.selectWord(),this.$clickSelection=c.getSelectionRange()},this.onTripleClick=function(a){var b=a.getDocumentPosition(),c=this.editor;c.moveCursorToPosition(b),c.selection.selectLine(),this.$clickSelection=c.getSelectionRange()},this.onQuadClick=function(a){var b=this.editor;b.selectAll(),this.$clickSelection=b.getSelectionRange()},this.onScroll=function(a){var b=this.editor;b.renderer.scrollBy(a.wheelX*a.speed,a.wheelY*a.speed);if(b.renderer.isScrollableBy(a.wheelX*a.speed,a.wheelY*a.speed))return a.preventDefault()}}).call(k.prototype),b.DefaultHandlers=k}),define("ace/lib/browser_focus",["require","exports","module","ace/lib/oop","ace/lib/event","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("./oop"),e=a("./event"),f=a("./event_emitter").EventEmitter,g=function(a){a=a||window,this.lastFocus=(new Date).getTime(),this._isFocused=!0;var b=this;"onfocusin"in a.document?(e.addListener(a.document,"focusin",function(a){b._setFocused(!0)}),e.addListener(a.document,"focusout",function(a){b._setFocused(!!a.toElement)})):(e.addListener(a,"blur",function(a){b._setFocused(!1)}),e.addListener(a,"focus",function(a){b._setFocused(!0)}))};(function(){d.implement(this,f),this.isFocused=function(){return this._isFocused},this._setFocused=function(a){if(this._isFocused==a)return;a&&(this.lastFocus=(new Date).getTime()),this._isFocused=a,this._emit("changeFocus")}}).call(g.prototype),b.BrowserFocus=g}),define("ace/lib/event_emitter",["require","exports","module"],function(a,b,c){"use strict";var d={};d._emit=d._dispatchEvent=function(a,b){this._eventRegistry=this._eventRegistry||{},this._defaultHandlers=this._defaultHandlers||{};var c=this._eventRegistry[a]||[],d=this._defaultHandlers[a];if(!c.length&&!d)return;b=b||{},b.type=a,b.stopPropagation||(b.stopPropagation=function(){this.propagationStopped=!0}),b.preventDefault||(b.preventDefault=function(){this.defaultPrevented=!0});for(var e=0;e<c.length;e++){c[e](b);if(b.propagationStopped)break}d&&!b.defaultPrevented&&d(b)},d.setDefaultHandler=function(a,b){this._defaultHandlers=this._defaultHandlers||{};if(this._defaultHandlers[a])throw new Error("The default handler for '"+a+"' is already set");this._defaultHandlers[a]=b},d.on=d.addEventListener=function(a,b){this._eventRegistry=this._eventRegistry||{};var c=this._eventRegistry[a];if(!c)var c=this._eventRegistry[a]=[];c.indexOf(b)==-1&&c.push(b)},d.removeListener=d.removeEventListener=function(a,b){this._eventRegistry=this._eventRegistry||{};var c=this._eventRegistry[a];if(!c)return;var d=c.indexOf(b);d!==-1&&c.splice(d,1)},d.removeAllListeners=function(a){this._eventRegistry&&(this._eventRegistry[a]=[])},b.EventEmitter=d}),define("ace/mouse/default_gutter_handler",["require","exports","module"],function(a,b,c){function d(a){a.setDefaultHandler("gutterclick",function(b){var c=b.getDocumentPosition().row,d=a.session.selection;d.moveCursorTo(c,0),d.selectLine()})}"use strict",b.GutterHandler=d}),define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event"],function(a,b,c){"use strict";var d=a("../lib/event"),e=b.MouseEvent=function(a,b){this.domEvent=a,this.editor=b,this.pageX=d.getDocumentX(a),this.pageY=d.getDocumentY(a),this.clientX=a.clientX,this.clientY=a.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){d.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){d.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){if(this.$pos)return this.$pos;var a=d.getDocumentX(this.domEvent),b=d.getDocumentY(this.domEvent);return this.$pos=this.editor.renderer.screenToTextCoordinates(a,b),this.$pos},this.inSelection=function(){if(this.$inSelection!==null)return this.$inSelection;var a=this.editor;if(a.getReadOnly())this.$inSelection=!1;else{var b=a.getSelectionRange();if(b.isEmpty())this.$inSelection=!1;else{var c=this.getDocumentPosition();this.$inSelection=b.contains(c.row,c.column)}}return this.$inSelection},this.getButton=function(){return d.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=function(){return this.domEvent.ctrlKey||this.domEvent.metaKey}}).call(e.prototype)}),define("ace/mouse/fold_handler",["require","exports","module"],function(a,b,c){function d(a){a.on("click",function(b){var c=b.getDocumentPosition(),d=a.session,e=d.getFoldAt(c.row,c.column,1);e&&(b.getAccelKey()?d.removeFold(e):d.expandFold(e),b.stop())}),a.on("gutterclick",function(b){if(b.domEvent.target.className.indexOf("ace_fold-widget")!=-1){var c=b.getDocumentPosition().row;a.session.onFoldWidgetClick(c,b.domEvent),b.stop()}})}"use strict",b.FoldHandler=d}),define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event","ace/commands/default_commands"],function(a,b,c){"use strict";var d=a("../lib/keys"),e=a("../lib/event");a("../commands/default_commands");var f=function(a){this.$editor=a,this.$data={},this.$handlers=[this]};(function(){this.setKeyboardHandler=function(a){if(this.$handlers[this.$handlers.length-1]==a)return;this.$data={},this.$handlers=a?[this,a]:[this]},this.addKeyboardHandler=function(a){this.removeKeyboardHandler(a),this.$handlers.push(a)},this.removeKeyboardHandler=function(a){var b=this.$handlers.indexOf(a);return b==-1?!1:(this.$handlers.splice(b,1),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.$callKeyboardHandlers=function(a,b,c,d){var f;for(var g=this.$handlers.length;g--;){f=this.$handlers[g].handleKeyboard(this.$data,a,b,c,d);if(f&&f.command)break}if(!f||!f.command)return!1;var h=!1,i=this.$editor.commands;return f.command!="null"?h=i.exec(f.command,this.$editor,f.args):h=!0,h&&d&&e.stopEvent(d),h},this.handleKeyboard=function(a,b,c){return{command:this.$editor.commands.findKeyCommand(b,c)}},this.onCommandKey=function(a,b,c){var e=d.keyCodeToString(c);this.$callKeyboardHandlers(b,e,c,a)},this.onTextInput=function(a,b){var c=!1;!b&&a.length==1&&(c=this.$callKeyboardHandlers(0,a)),c||this.$editor.commands.exec("insertstring",this.$editor,a)}}).call(f.prototype),b.KeyBinding=f}),define("ace/commands/default_commands",["require","exports","module","ace/lib/lang"],function(a,b,c){function e(a,b){return{win:a,mac:b}}"use strict";var d=a("../lib/lang");b.commands=[{name:"selectall",bindKey:e("Ctrl-A","Command-A"),exec:function(a){a.selectAll()},readOnly:!0},{name:"centerselection",bindKey:e(null,"Ctrl-L"),exec:function(a){a.centerSelection()},readOnly:!0},{name:"gotoline",bindKey:e("Ctrl-L","Command-L"),exec:function(a){var b=parseInt(prompt("Enter line number:"),10);isNaN(b)||a.gotoLine(b)},readOnly:!0},{name:"fold",bindKey:e("Alt-L","Alt-L"),exec:function(a){a.session.toggleFold(!1)},readOnly:!0},{name:"unfold",bindKey:e("Alt-Shift-L","Alt-Shift-L"),exec:function(a){a.session.toggleFold(!0)},readOnly:!0},{name:"foldall",bindKey:e("Alt-0","Alt-0"),exec:function(a){a.session.foldAll()},readOnly:!0},{name:"unfoldall",bindKey:e("Alt-Shift-0","Alt-Shift-0"),exec:function(a){a.session.unfold()},readOnly:!0},{name:"findnext",bindKey:e("Ctrl-K","Command-G"),exec:function(a){a.findNext()},readOnly:!0},{name:"findprevious",bindKey:e("Ctrl-Shift-K","Command-Shift-G"),exec:function(a){a.findPrevious()},readOnly:!0},{name:"find",bindKey:e("Ctrl-F","Command-F"),exec:function(a){var b=prompt("Find:",a.getCopyText());a.find(b)},readOnly:!0},{name:"overwrite",bindKey:e("Insert","Insert"),exec:function(a){a.toggleOverwrite()},readOnly:!0},{name:"selecttostart",bindKey:e("Ctrl-Shift-Home|Alt-Shift-Up","Command-Shift-Up"),exec:function(a){a.getSelection().selectFileStart()},readOnly:!0},{name:"gotostart",bindKey:e("Ctrl-Home|Ctrl-Up","Command-Home|Command-Up"),exec:function(a){a.navigateFileStart()},readOnly:!0},{name:"selectup",bindKey:e("Shift-Up","Shift-Up"),exec:function(a){a.getSelection().selectUp()},multiSelectAction:"forEach",readOnly:!0},{name:"golineup",bindKey:e("Up","Up|Ctrl-P"),exec:function(a,b){a.navigateUp(b.times)},multiSelectAction:"forEach",readOnly:!0},{name:"selecttoend",bindKey:e("Ctrl-Shift-End|Alt-Shift-Down","Command-Shift-Down"),exec:function(a){a.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0},{name:"gotoend",bindKey:e("Ctrl-End|Ctrl-Down","Command-End|Command-Down"),exec:function(a){a.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0},{name:"selectdown",bindKey:e("Shift-Down","Shift-Down"),exec:function(a){a.getSelection().selectDown()},multiSelectAction:"forEach",readOnly:!0},{name:"golinedown",bindKey:e("Down","Down|Ctrl-N"),exec:function(a,b){a.navigateDown(b.times)},multiSelectAction:"forEach",readOnly:!0},{name:"selectwordleft",bindKey:e("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(a){a.getSelection().selectWordLeft()},multiSelectAction:"forEach",readOnly:!0},{name:"gotowordleft",bindKey:e("Ctrl-Left","Option-Left"),exec:function(a){a.navigateWordLeft()},multiSelectAction:"forEach",readOnly:!0},{name:"selecttolinestart",bindKey:e("Alt-Shift-Left","Command-Shift-Left"),exec:function(a){a.getSelection().selectLineStart()},multiSelectAction:"forEach",readOnly:!0},{name:"gotolinestart",bindKey:e("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(a){a.navigateLineStart()},multiSelectAction:"forEach",readOnly:!0},{name:"selectleft",bindKey:e("Shift-Left","Shift-Left"),exec:function(a){a.getSelection().selectLeft()},multiSelectAction:"forEach",readOnly:!0},{name:"gotoleft",bindKey:e("Left","Left|Ctrl-B"),exec:function(a,b){a.navigateLeft(b.times)},multiSelectAction:"forEach",readOnly:!0},{name:"selectwordright",bindKey:e("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(a){a.getSelection().selectWordRight()},multiSelectAction:"forEach",readOnly:!0},{name:"gotowordright",bindKey:e("Ctrl-Right","Option-Right"),exec:function(a){a.navigateWordRight()},multiSelectAction:"forEach",readOnly:!0},{name:"selecttolineend",bindKey:e("Alt-Shift-Right","Command-Shift-Right"),exec:function(a){a.getSelection().selectLineEnd()},multiSelectAction:"forEach",readOnly:!0},{name:"gotolineend",bindKey:e("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(a){a.navigateLineEnd()},multiSelectAction:"forEach",readOnly:!0},{name:"selectright",bindKey:e("Shift-Right","Shift-Right"),exec:function(a){a.getSelection().selectRight()},multiSelectAction:"forEach",readOnly:!0},{name:"gotoright",bindKey:e("Right","Right|Ctrl-F"),exec:function(a,b){a.navigateRight(b.times)},multiSelectAction:"forEach",readOnly:!0},{name:"selectpagedown",bindKey:e("Shift-PageDown","Shift-PageDown"),exec:function(a){a.selectPageDown()},readOnly:!0},{name:"pagedown",bindKey:e(null,"PageDown"),exec:function(a){a.scrollPageDown()},readOnly:!0},{name:"gotopagedown",bindKey:e("PageDown","Option-PageDown|Ctrl-V"),exec:function(a){a.gotoPageDown()},readOnly:!0},{name:"selectpageup",bindKey:e("Shift-PageUp","Shift-PageUp"),exec:function(a){a.selectPageUp()},readOnly:!0},{name:"pageup",bindKey:e(null,"PageUp"),exec:function(a){a.scrollPageUp()},readOnly:!0},{name:"gotopageup",bindKey:e("PageUp","Option-PageUp"),exec:function(a){a.gotoPageUp()},readOnly:!0},{name:"selectlinestart",bindKey:e("Shift-Home","Shift-Home"),exec:function(a){a.getSelection().selectLineStart()},multiSelectAction:"forEach",readOnly:!0},{name:"selectlineend",bindKey:e("Shift-End","Shift-End"),exec:function(a){a.getSelection().selectLineEnd()},multiSelectAction:"forEach",readOnly:!0},{name:"togglerecording",bindKey:e("Ctrl-Alt-E","Command-Option-E"),exec:function(a){a.commands.toggleRecording()},readOnly:!0},{name:"replaymacro",bindKey:e("Ctrl-Shift-E","Command-Shift-E"),exec:function(a){a.commands.replay(a)},readOnly:!0},{name:"jumptomatching",bindKey:e("Ctrl-Shift-P","Ctrl-Shift-P"),exec:function(a){a.jumpToMatching()},multiSelectAction:"forEach",readOnly:!0},{name:"cut",exec:function(a){var b=a.getSelectionRange();a._emit("cut",b),a.selection.isEmpty()||(a.session.remove(b),a.clearSelection())},multiSelectAction:"forEach"},{name:"removeline",bindKey:e("Ctrl-D","Command-D"),exec:function(a){a.removeLines()},multiSelectAction:"forEach"},{name:"togglecomment",bindKey:e("Ctrl-7","Command-7"),exec:function(a){a.toggleCommentLines()},multiSelectAction:"forEach"},{name:"replace",bindKey:e("Ctrl-R","Command-Option-F"),exec:function(a){var b=prompt("Find:",a.getCopyText());if(!b)return;var c=prompt("Replacement:");if(!c)return;a.replace(c,{needle:b})}},{name:"replaceall",bindKey:e("Ctrl-Shift-R","Command-Shift-Option-F"),exec:function(a){var b=prompt("Find:");if(!b)return;var c=prompt("Replacement:");if(!c)return;a.replaceAll(c,{needle:b})}},{name:"undo",bindKey:e("Ctrl-Z","Command-Z"),exec:function(a){a.undo()}},{name:"redo",bindKey:e("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(a){a.redo()}},{name:"copylinesup",bindKey:e("Ctrl-Alt-Up","Command-Option-Up"),exec:function(a){a.copyLinesUp()}},{name:"movelinesup",bindKey:e("Alt-Up","Option-Up"),exec:function(a){a.moveLinesUp()}},{name:"copylinesdown",bindKey:e("Ctrl-Alt-Down","Command-Option-Down"),exec:function(a){a.copyLinesDown()}},{name:"movelinesdown",bindKey:e("Alt-Down","Option-Down"),exec:function(a){a.moveLinesDown()}},{name:"del",bindKey:e("Delete","Delete|Ctrl-D"),exec:function(a){a.remove("right")},multiSelectAction:"forEach"},{name:"backspace",bindKey:e("Command-Backspace|Option-Backspace|Shift-Backspace|Backspace","Ctrl-Backspace|Command-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(a){a.remove("left")},multiSelectAction:"forEach"},{name:"removetolinestart",bindKey:e("Alt-Backspace","Command-Backspace"),exec:function(a){a.removeToLineStart()},multiSelectAction:"forEach"},{name:"removetolineend",bindKey:e("Alt-Delete","Ctrl-K"),exec:function(a){a.removeToLineEnd()},multiSelectAction:"forEach"},{name:"removewordleft",bindKey:e("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(a){a.removeWordLeft()},multiSelectAction:"forEach"},{name:"removewordright",bindKey:e("Ctrl-Delete","Alt-Delete"),exec:function(a){a.removeWordRight()},multiSelectAction:"forEach"},{name:"outdent",bindKey:e("Shift-Tab","Shift-Tab"),exec:function(a){a.blockOutdent()},multiSelectAction:"forEach"},{name:"indent",bindKey:e("Tab","Tab"),exec:function(a){a.indent()},multiSelectAction:"forEach"},{name:"insertstring",exec:function(a,b){a.insert(b)},multiSelectAction:"forEach"},{name:"inserttext",exec:function(a,b){a.insert(d.stringRepeat(b.text||"",b.times||1))},multiSelectAction:"forEach"},{name:"splitline",bindKey:e(null,"Ctrl-O"),exec:function(a){a.splitLine()},multiSelectAction:"forEach"},{name:"transposeletters",bindKey:e("Ctrl-T","Ctrl-T"),exec:function(a){a.transposeLetters()},multiSelectAction:function(a){a.transposeSelections(1)}},{name:"touppercase",bindKey:e("Ctrl-U","Ctrl-U"),exec:function(a){a.toUpperCase()},multiSelectAction:"forEach"},{name:"tolowercase",bindKey:e("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(a){a.toLowerCase()},multiSelectAction:"forEach"}]}),define("ace/edit_session",["require","exports","module","ace/config","ace/lib/oop","ace/lib/lang","ace/lib/net","ace/lib/event_emitter","ace/selection","ace/mode/text","ace/range","ace/document","ace/background_tokenizer","ace/edit_session/folding","ace/edit_session/bracket_match"],function(a,b,c){"use strict";var d=a("./config"),e=a("./lib/oop"),f=a("./lib/lang"),g=a("./lib/net"),h=a("./lib/event_emitter").EventEmitter,i=a("./selection").Selection,j=a("./mode/text").Mode,k=a("./range").Range,l=a("./document").Document,m=a("./background_tokenizer").BackgroundTokenizer,n=function(a,b){this.$modified=!0,this.$breakpoints=[],this.$frontMarkers={},this.$backMarkers={},this.$markerId=1,this.$rowCache=[],this.$wrapData=[],this.$foldData=[],this.$undoSelect=!0,this.$foldData.toString=function(){var a="";return this.forEach(function(b){a+="\n"+b.toString()}),a},a instanceof l?this.setDocument(a):this.setDocument(new l(a)),this.selection=new i(this),b?this.setMode(b):this.setMode(new j)};(function(){function q(a){return a<4352?!1:a>=4352&&a<=4447||a>=4515&&a<=4519||a>=4602&&a<=4607||a>=9001&&a<=9002||a>=11904&&a<=11929||a>=11931&&a<=12019||a>=12032&&a<=12245||a>=12272&&a<=12283||a>=12288&&a<=12350||a>=12353&&a<=12438||a>=12441&&a<=12543||a>=12549&&a<=12589||a>=12593&&a<=12686||a>=12688&&a<=12730||a>=12736&&a<=12771||a>=12784&&a<=12830||a>=12832&&a<=12871||a>=12880&&a<=13054||a>=13056&&a<=19903||a>=19968&&a<=42124||a>=42128&&a<=42182||a>=43360&&a<=43388||a>=44032&&a<=55203||a>=55216&&a<=55238||a>=55243&&a<=55291||a>=63744&&a<=64255||a>=65040&&a<=65049||a>=65072&&a<=65106||a>=65108&&a<=65126||a>=65128&&a<=65131||a>=65281&&a<=65376||a>=65504&&a<=65510}e.implement(this,h),this.setDocument=function(a){if(this.doc)throw new Error("Document is already set");this.doc=a,a.on("change",this.onChange.bind(this)),this.on("changeFold",this.onChangeFold.bind(this)),this.bgTokenizer&&(this.bgTokenizer.setDocument(this.getDocument()),this.bgTokenizer.start(0))},this.getDocument=function(){return this.doc},this.$resetRowCache=function(a){if(a==0){this.$rowCache=[];return}var b=this.$rowCache;for(var c=0;c<b.length;c++)if(b[c].docRow>=a){b.splice(c,b.length);return}},this.onChangeFold=function(a){var b=a.data;this.$resetRowCache(b.start.row)},this.onChange=function(a){var b=a.data;this.$modified=!0,this.$resetRowCache(b.range.start.row);var c=this.$updateInternalDataOnChange(a);!this.$fromUndo&&this.$undoManager&&!b.ignore&&(this.$deltasDoc.push(b),c&&c.length!=0&&this.$deltasFold.push({action:"removeFolds",folds:c}),this.$informUndoManager.schedule()),this.bgTokenizer.start(b.range.start.row),this._emit("change",a)},this.setValue=function(a){this.doc.setValue(a),this.selection.moveCursorTo(0,0),this.selection.clearSelection(),this.$resetRowCache(0),this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.getUndoManager().reset()},this.getValue=this.toString=function(){return this.doc.getValue()},this.getSelection=function(){return this.selection},this.getState=function(a){return this.bgTokenizer.getState(a)},this.getTokens=function(a,b){return this.bgTokenizer.getTokens(a,b)},this.getTokenAt=function(a,b){var c=this.bgTokenizer.getTokens(a,a)[0].tokens,d,e=0;if(b==null)f=c.length-1,e=this.getLine(a).length;else for(var f=0;f<c.length;f++){e+=c[f].value.length;if(e>=b)break}return d=c[f],d?(d.index=f,d.start=e-d.value.length,d):null},this.setUndoManager=function(a){this.$undoManager=a,this.$resetRowCache(0),this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel();if(a){var b=this;this.$syncInformUndoManager=function(){b.$informUndoManager.cancel(),b.$deltasFold.length&&(b.$deltas.push({group:"fold",deltas:b.$deltasFold}),b.$deltasFold=[]),b.$deltasDoc.length&&(b.$deltas.push({group:"doc",deltas:b.$deltasDoc}),b.$deltasDoc=[]),b.$deltas.length>0&&a.execute({action:"aceupdate",args:[b.$deltas,b]}),b.$deltas=[]},this.$informUndoManager=f.deferredCall(this.$syncInformUndoManager)}},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?f.stringRepeat(" ",this.getTabSize()):" "},this.$useSoftTabs=!0,this.setUseSoftTabs=function(a){if(this.$useSoftTabs===a)return;this.$useSoftTabs=a},this.getUseSoftTabs=function(){return this.$useSoftTabs},this.$tabSize=4,this.setTabSize=function(a){if(isNaN(a)||this.$tabSize===a)return;this.$modified=!0,this.$tabSize=a,this._emit("changeTabSize")},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(a){return this.$useSoftTabs&&a.column%this.$tabSize==0},this.$overwrite=!1,this.setOverwrite=function(a){if(this.$overwrite==a)return;this.$overwrite=a,this._emit("changeOverwrite")},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(a){this.$breakpoints=[];for(var b=0;b<a.length;b++)this.$breakpoints[a[b]]=!0;this._emit("changeBreakpoint",{})},this.clearBreakpoints=function(){this.$breakpoints=[],this._emit("changeBreakpoint",{})},this.setBreakpoint=function(a){this.$breakpoints[a]=!0,this._emit("changeBreakpoint",{})},this.clearBreakpoint=function(a){delete this.$breakpoints[a],this._emit("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.addMarker=function(a,b,c,d){var e=this.$markerId++,f={range:a,type:c||"line",renderer:typeof c=="function"?c:null,clazz:b,inFront:!!d};return d?(this.$frontMarkers[e]=f,this._emit("changeFrontMarker")):(this.$backMarkers[e]=f,this._emit("changeBackMarker")),e},this.removeMarker=function(a){var b=this.$frontMarkers[a]||this.$backMarkers[a];if(!b)return;var c=b.inFront?this.$frontMarkers:this.$backMarkers;b&&(delete c[a],this._emit(b.inFront?"changeFrontMarker":"changeBackMarker"))},this.getMarkers=function(a){return a?this.$frontMarkers:this.$backMarkers},this.setAnnotations=function(a){this.$annotations={};for(var b=0;b<a.length;b++){var c=a[b],d=c.row;this.$annotations[d]?this.$annotations[d].push(c):this.$annotations[d]=[c]}this._emit("changeAnnotation",{})},this.getAnnotations=function(){return this.$annotations||{}},this.clearAnnotations=function(){this.$annotations={},this._emit("changeAnnotation",{})},this.$detectNewLine=function(a){var b=a.match(/^.*?(\r?\n)/m);b?this.$autoNewLine=b[1]:this.$autoNewLine="\n"},this.getWordRange=function(a,b){var c=this.getLine(a),d=!1;b>0&&(d=!!c.charAt(b-1).match(this.tokenRe)),d||(d=!!c.charAt(b).match(this.tokenRe));var e=d?this.tokenRe:this.nonTokenRe,f=b;if(f>0){do f--;while(f>=0&&c.charAt(f).match(e));f++}var g=b;while(g<c.length&&c.charAt(g).match(e))g++;return new k(a,f,a,g)},this.getAWordRange=function(a,b){var c=this.getWordRange(a,b),d=this.getLine(c.end.row);while(d.charAt(c.end.column).match(/[ \t]/))c.end.column+=1;return c},this.setNewLineMode=function(a){this.doc.setNewLineMode(a)},this.getNewLineMode=function(){return this.doc.getNewLineMode()},this.$useWorker=!0,this.setUseWorker=function(a){if(this.$useWorker==a)return;this.$useWorker=a,this.$stopWorker(),a&&this.$startWorker()},this.getUseWorker=function(){return this.$useWorker},this.onReloadTokenizer=function(a){var b=a.data;this.bgTokenizer.start(b.first),this._emit("tokenizerUpdate",a)},this.$modes={},this._loadMode=function(b,c){function i(a){if(e.$modes[b])return c(e.$modes[b]);e.$modes[b]=new a.Mode,e._emit("loadmode",{name:b,mode:e.$modes[b]}),c(e.$modes[b])}function j(a){if(!d.get("packaged"))return a();var c=b.split("/").pop(),e=d.get("modePath")+"/mode-"+c+d.get("suffix");g.loadScript(e,a)}if(this.$modes[b])return c(this.$modes[b]);var e=this,f;try{f=a(b)}catch(h){}if(f)return i(f);j(function(){a([b],i)})},this.$mode=null,this.$origMode=null,this.setMode=function(a){this.$origMode=a;if(typeof a=="string"){var b=this;this._loadMode(a,function(c){if(b.$origMode!==a)return;b.setMode(c)});return}if(this.$mode===a)return;this.$mode=a,this.$stopWorker(),this.$useWorker&&this.$startWorker();var c=a.getTokenizer();if(c.addEventListener!==undefined){var d=this.onReloadTokenizer.bind(this);c.addEventListener("update",d)}if(!this.bgTokenizer){this.bgTokenizer=new m(c);var b=this;this.bgTokenizer.addEventListener("update",function(a){b._emit("tokenizerUpdate",a)})}else this.bgTokenizer.setTokenizer(c);this.bgTokenizer.setDocument(this.getDocument()),this.bgTokenizer.start(0),this.tokenRe=a.tokenRe,this.nonTokenRe=a.nonTokenRe,this.$setFolding(a.foldingRules),this._emit("changeMode")},this.$stopWorker=function(){this.$worker&&this.$worker.terminate(),this.$worker=null},this.$startWorker=function(){if(typeof Worker!="undefined"&&!a.noWorker)try{this.$worker=this.$mode.createWorker(this)}catch(b){console.log("Could not load worker"),console.log(b),this.$worker=null}else this.$worker=null},this.getMode=function(){return this.$mode},this.$scrollTop=0,this.setScrollTop=function(a){a=Math.round(Math.max(0,a));if(this.$scrollTop===a)return;this.$scrollTop=a,this._emit("changeScrollTop",a)},this.getScrollTop=function(){return this.$scrollTop},this.$scrollLeft=0,this.setScrollLeft=function(a){a=Math.round(Math.max(0,a));if(this.$scrollLeft===a)return;this.$scrollLeft=a,this._emit("changeScrollLeft",a)},this.getScrollLeft=function(){return this.$scrollLeft},this.getWidth=function(){return this.$computeWidth(),this.width},this.getScreenWidth=function(){return this.$computeWidth(),this.screenWidth},this.$computeWidth=function(a){if(this.$modified||a){this.$modified=!1;var b=this.doc.getAllLines(),c=0,d=0;for(var e=0;e<b.length;e++){var f=this.getFoldLine(e),g,h;g=b[e];if(f){var i=f.range.end;g=this.getFoldDisplayLine(f),e=i.row}h=g.length,c=Math.max(c,h),this.$useWrapMode||(d=Math.max(d,this.$getStringScreenWidth(g)[0]))}this.width=c,this.$useWrapMode?this.screenWidth=this.$wrapLimit:this.screenWidth=d}},this.getLine=function(a){return this.doc.getLine(a)},this.getLines=function(a,b){return this.doc.getLines(a,b)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(a){return this.doc.getTextRange(a)},this.insert=function(a,b){return this.doc.insert(a,b)},this.remove=function(a){return this.doc.remove(a)},this.undoChanges=function(a,b){if(!a.length)return;this.$fromUndo=!0;var c=null;for(var d=a.length-1;d!=-1;d--){var e=a[d];e.group=="doc"?(this.doc.revertDeltas(e.deltas),c=this.$getUndoSelection(e.deltas,!0,c)):e.deltas.forEach(function(a){this.addFolds(a.folds)},this)}return this.$fromUndo=!1,c&&this.$undoSelect&&!b&&this.selection.setSelectionRange(c),c},this.redoChanges=function(a,b){if(!a.length)return;this.$fromUndo=!0;var c=null;for(var d=0;d<a.length;d++){var e=a[d];e.group=="doc"&&(this.doc.applyDeltas(e.deltas),c=this.$getUndoSelection(e.deltas,!1,c))}return this.$fromUndo=!1,c&&this.$undoSelect&&!b&&this.selection.setSelectionRange(c),c},this.setUndoSelect=function(a){this.$undoSelect=a},this.$getUndoSelection=function(a,b,c){function d(a){var c=a.action=="insertText"||a.action=="insertLines";return b?!c:c}var e=a[0],f,g,h=!1;d(e)?(f=e.range.clone(),h=!0):(f=k.fromPoints(e.range.start,e.range.start),h=!1);for(var i=1;i<a.length;i++)e=a[i],d(e)?(g=e.range.start,f.compare(g.row,g.column)==-1&&f.setStart(e.range.start),g=e.range.end,f.compare(g.row,g.column)==1&&f.setEnd(e.range.end),h=!0):(g=e.range.start,f.compare(g.row,g.column)==-1&&(f=k.fromPoints(e.range.start,e.range.start)),h=!1);if(c!=null){var j=c.compareRange(f);j==1?f.setStart(c.start):j==-1&&f.setEnd(c.end)}return f},this.replace=function(a,b){return this.doc.replace(a,b)},this.moveText=function(a,b){var c=this.getTextRange(a);this.remove(a);var d=b.row,e=b.column;!a.isMultiLine()&&a.start.row==d&&a.end.column<e&&(e-=c.length);if(a.isMultiLine()&&a.end.row<d){var f=this.doc.$split(c);d-=f.length-1}var g=d+a.end.row-a.start.row,h=a.isMultiLine()?a.end.column:e+a.end.column-a.start.column,i=new k(d,e,g,h);return this.insert(i.start,c),i},this.indentRows=function(a,b,c){c=c.replace(/\t/g,this.getTabString());for(var d=a;d<=b;d++)this.insert({row:d,column:0},c)},this.outdentRows=function(a){var b=a.collapseRows(),c=new k(0,0,0,0),d=this.getTabSize();for(var e=b.start.row;e<=b.end.row;++e){var f=this.getLine(e);c.start.row=e,c.end.row=e;for(var g=0;g<d;++g)if(f.charAt(g)!=" ")break;g<d&&f.charAt(g)==" "?(c.start.column=g,c.end.column=g+1):(c.start.column=0,c.end.column=g),this.remove(c)}},this.moveLinesUp=function(a,b){if(a<=0)return 0;var c=this.doc.removeLines(a,b);return this.doc.insertLines(a-1,c),-1},this.moveLinesDown=function(a,b){if(b>=this.doc.getLength()-1)return 0;var c=this.doc.removeLines(a,b);return this.doc.insertLines(a+1,c),1},this.duplicateLines=function(a,b){var a=this.$clipRowToDocument(a),b=this.$clipRowToDocument(b),c=this.getLines(a,b);this.doc.insertLines(a,c);var d=b-a+1;return d},this.$clipRowToDocument=function(a){return Math.max(0,Math.min(a,this.doc.getLength()-1))},this.$clipColumnToRow=function(a,b){return b<0?0:Math.min(this.doc.getLine(a).length,b)},this.$clipPositionToDocument=function(a,b){b=Math.max(0,b);if(a<0)a=0,b=0;else{var c=this.doc.getLength();a>=c?(a=c-1,b=this.doc.getLine(c-1).length):b=Math.min(this.doc.getLine(a).length,b)}return{row:a,column:b}},this.$clipRangeToDocument=function(a){a.start.row<0?(a.start.row=0,a.start.column=0):a.start.column=this.$clipColumnToRow(a.start.row,a.start.column);var b=this.doc.getLength()-1;return a.end.row>b?(a.end.row=b,a.end.column=this.doc.getLine(b).length):a.end.column=this.$clipColumnToRow(a.end.row,a.end.column),a},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(a){if(a!=this.$useWrapMode){this.$useWrapMode=a,this.$modified=!0,this.$resetRowCache(0);if(a){var b=this.getLength();this.$wrapData=[];for(var c=0;c<b;c++)this.$wrapData.push([]);this.$updateWrapData(0,b-1)}this._emit("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(a,b){if(this.$wrapLimitRange.min!==a||this.$wrapLimitRange.max!==b)this.$wrapLimitRange.min=a,this.$wrapLimitRange.max=b,this.$modified=!0,this._emit("changeWrapMode")},this.adjustWrapLimit=function(a){var b=this.$constrainWrapLimit(a);return b!=this.$wrapLimit&&b>0?(this.$wrapLimit=b,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._emit("changeWrapLimit")),!0):!1},this.$constrainWrapLimit=function(a){var b=this.$wrapLimitRange.min;b&&(a=Math.max(b,a));var c=this.$wrapLimitRange.max;return c&&(a=Math.min(c,a)),Math.max(1,a)},this.getWrapLimit=function(){return this.$wrapLimit},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(a){var b=this.$useWrapMode,c,d=a.data.action,e=a.data.range.start.row,f=a.data.range.end.row,g=a.data.range.start,h=a.data.range.end,i=null;d.indexOf("Lines")!=-1?(d=="insertLines"?f=e+a.data.lines.length:f=e,c=a.data.lines?a.data.lines.length:f-e):c=f-e;if(c!=0)if(d.indexOf("remove")!=-1){b&&this.$wrapData.splice(e,c);var j=this.$foldData;i=this.getFoldsInRange(a.data.range),this.removeFolds(i);var k=this.getFoldLine(h.row),l=0;if(k){k.addRemoveChars(h.row,h.column,g.column-h.column),k.shiftRow(-c);var m=this.getFoldLine(e);m&&m!==k&&(m.merge(k),k=m),l=j.indexOf(k)+1}for(l;l<j.length;l++){var k=j[l];k.start.row>=h.row&&k.shiftRow(-c)}f=e}else{var n;if(b){n=[e,0];for(var o=0;o<c;o++)n.push([]);this.$wrapData.splice.apply(this.$wrapData,n)}var j=this.$foldData,k=this.getFoldLine(e),l=0;if(k){var p=k.range.compareInside(g.row,g.column);p==0?(k=k.split(g.row,g.column),k.shiftRow(c),k.addRemoveChars(f,0,h.column-g.column)):p==-1&&(k.addRemoveChars(e,0,h.column-g.column),k.shiftRow(c)),l=j.indexOf(k)+1}for(l;l<j.length;l++){var k=j[l];k.start.row>=e&&k.shiftRow(c)}}else{c=Math.abs(a.data.range.start.column-a.data.range.end.column),d.indexOf("remove")!=-1&&(i=this.getFoldsInRange(a.data.range),this.removeFolds(i),c=-c);var k=this.getFoldLine(e);k&&k.addRemoveChars(e,g.column,c)}return b&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),b&&this.$updateWrapData(e,f),i},this.$updateWrapData=function(a,b){var c=this.doc.getAllLines(),d=this.getTabSize(),e=this.$wrapData,g=this.$wrapLimit,h,k,l=a;b=Math.min(b,c.length-1);while(l<=b){k=this.getFoldLine(l,k);if(!k)h=this.$getDisplayTokens(f.stringTrimRight(c[l])),e[l]=this.$computeWrapSplits(h,g,d),l++;else{h=[],k.walk(function(a,b,d,e){var f;if(a){f=this.$getDisplayTokens(a,h.length),f[0]=i;for(var g=1;g<f.length;g++)f[g]=j}else f=this.$getDisplayTokens(c[b].substring(e,d),h.length);h=h.concat(f)}.bind(this),k.end.row,c[k.end.row].length+1);while(h.length!=0&&h[h.length-1]>=n)h.pop();e[k.start.row]=this.$computeWrapSplits(h,g,d),l=k.end.row+1}}};var b=1,c=2,i=3,j=4,l=9,n=10,o=11,p=12;this.$computeWrapSplits=function(a,b){function g(b){var d=a.slice(e,b),g=d.length;d.join("").replace(/12/g,function(){g-=1}).replace(/2/g,function(){g-=1}),f+=g,c.push(f),e=b}if(a.length==0)return[];var c=[],d=a.length,e=0,f=0;while(d-e>b){var h=e+b;if(a[h]>=n){while(a[h]>=n)h++;g(h);continue}if(a[h]==i||a[h]==j){for(h;h!=e-1;h--)if(a[h]==i)break;if(h>e){g(h);continue}h=e+b;for(h;h<a.length;h++)if(a[h]!=j)break;if(h==a.length)break;g(h);continue}var k=Math.max(h-10,e-1);while(h>k&&a[h]<i)h--;while(h>k&&a[h]==l)h--;if(h>k){g(++h);continue}h=e+b,g(h)}return c},this.$getDisplayTokens=function(a,d){var e=[],f;d=d||0;for(var g=0;g<a.length;g++){var h=a.charCodeAt(g);if(h==9){f=this.getScreenTabSize(e.length+d),e.push(o);for(var i=1;i<f;i++)e.push(p)}else h==32?e.push(n):h>39&&h<48||h>57&&h<64?e.push(l):h>=4352&&q(h)?e.push(b,c):e.push(b)}return e},this.$getStringScreenWidth=function(a,b,c){if(b==0)return[0,0];b==null&&(b=c+a.length*Math.max(this.getTabSize(),2)),c=c||0;var d,e;for(e=0;e<a.length;e++){d=a.charCodeAt(e),d==9?c+=this.getScreenTabSize(c):d>=4352&&q(d)?c+=2:c+=1;if(c>b)break}return[c,e]},this.getRowLength=function(a){return!this.$useWrapMode||!this.$wrapData[a]?1:this.$wrapData[a].length+1},this.getRowHeight=function(a,b){return this.getRowLength(b)*a.lineHeight},this.getScreenLastRowColumn=function(a){var b=this.screenToDocumentPosition(a,Number.MAX_VALUE);return this.documentToScreenColumn(b.row,b.column)},this.getDocumentLastRowColumn=function(a,b){var c=this.documentToScreenRow(a,b);return this.getScreenLastRowColumn(c)},this.getDocumentLastRowColumnPosition=function(a,b){var c=this.documentToScreenRow(a,b);return this.screenToDocumentPosition(c,Number.MAX_VALUE/10)},this.getRowSplitData=function(a){return this.$useWrapMode?this.$wrapData[a]:undefined},this.getScreenTabSize=function(a){return this.$tabSize-a%this.$tabSize},this.screenToDocumentRow=function(a,b){return this.screenToDocumentPosition(a,b).row},this.screenToDocumentColumn=function(a,b){return this.screenToDocumentPosition(a,b).column},this.screenToDocumentPosition=function(a,b){if(a<0)return{row:0,column:0};var c,d=0,e=0,f,g=0,h=0,i=this.$rowCache;for(var j=0;j<i.length;j++){if(!(i[j].screenRow<a))break;g=i[j].screenRow,d=i[j].docRow}var k=!i.length||j==i.length,l=this.getLength()-1,m=this.getNextFoldLine(d),n=m?m.start.row:Infinity;while(g<=a){h=this.getRowLength(d);if(g+h-1>=a||d>=l)break;g+=h,d++,d>n&&(d=m.end.row+1,m=this.getNextFoldLine(d,m),n=m?m.start.row:Infinity),k&&i.push({docRow:d,screenRow:g})}if(m&&m.start.row<=d)c=this.getFoldDisplayLine(m),d=m.start.row;else{if(g+h<=a||d>l)return{row:l,column:this.getLine(l).length};c=this.getLine(d),m=null}if(this.$useWrapMode){var o=this.$wrapData[d];o&&(f=o[a-g],a>g&&o.length&&(e=o[a-g-1]||o[o.length-1],c=c.substring(e)))}return e+=this.$getStringScreenWidth(c,b)[1],this.$useWrapMode&&e>=f&&(e=f-1),m?m.idxToPosition(e):{row:d,column:e}},this.documentToScreenPosition=function(a,b){if(typeof b=="undefined")var c=this.$clipPositionToDocument(a.row,a.column);else c=this.$clipPositionToDocument(a,b);a=c.row,b=c.column;var d;if(this.$useWrapMode){d=this.$wrapData;if(a>d.length-1)return{row:this.getScreenLength(),column:d.length==0?0:d[d.length-1].length-1}}var e=0,f=null,g=null;g=this.getFoldAt(a,b,1),g&&(a=g.start.row,b=g.start.column);var h,i=0,j=this.$rowCache;for(var k=0;k<j.length;k++){if(!(j[k].docRow<a))break;e=j[k].screenRow,i=j[k].docRow}var l=!j.length||k==j.length,m=this.getNextFoldLine(i),n=m?m.start.row:Infinity;while(i<a){if(i>=n){h=m.end.row+1;if(h>a)break;m=this.getNextFoldLine(h,m),n=m?m.start.row:Infinity}else h=i+1;e+=this.getRowLength(i),i=h,l&&j.push({docRow:i,screenRow:e})}var o="";m&&i>=n?(o=this.getFoldDisplayLine(m,a,b),f=m.start.row):(o=this.getLine(a).substring(0,b),f=a);if(this.$useWrapMode){var p=d[f],q=0;while(o.length>=p[q])e++,q++;o=o.substring(p[q-1]||0,o.length)}return{row:e,column:this.$getStringScreenWidth(o)[0]}},this.documentToScreenColumn=function(a,b){return this.documentToScreenPosition(a,b).column},this.documentToScreenRow=function(a,b){return this.documentToScreenPosition(a,b).row},this.getScreenLength=function(){var a=0,b=null;if(!this.$useWrapMode){a=this.getLength();var c=this.$foldData;for(var d=0;d<c.length;d++)b=c[d],a-=b.end.row-b.start.row}else{var e=this.$wrapData.length,f=0,d=0,b=this.$foldData[d++],g=b?b.start.row:Infinity;while(f<e)a+=this.$wrapData[f].length+1,f++,f>g&&(f=b.end.row+1,b=this.$foldData[d++],g=b?b.start.row:Infinity)}return a}}).call(n.prototype),a("./edit_session/folding").Folding.call(n.prototype),a("./edit_session/bracket_match").BracketMatch.call(n.prototype),b.EditSession=n}),define("ace/config",["require","exports","module","ace/lib/lang"],function(a,b,c){function g(a){return a.replace(/-(.)/g,function(a,b){return b.toUpperCase()})}"no use strict";var d=a("./lib/lang"),e=function(){return this}(),f={packaged:!1,workerPath:"",modePath:"",themePath:"",suffix:".js"};b.get=function(a){if(!f.hasOwnProperty(a))throw new Error("Unknown confik key: "+a);return f[a]},b.set=function(a,b){if(!f.hasOwnProperty(a))throw new Error("Unknown confik key: "+a);f[a]=b},b.all=function(){return d.copyObject(f)},b.init=function(){f.packaged=a.packaged||c.packaged||e.define&&define.packaged;if(!e.document)return"";var d={},h="",i,j=document.getElementsByTagName("script");for(var k=0;k<j.length;k++){var l=j[k],m=l.src||l.getAttribute("src");if(!m)continue;var n=l.attributes;for(var o=0,p=n.length;o<p;o++){var q=n[o];q.name.indexOf("data-ace-")===0&&(d[g(q.name.replace(/^data-ace-/,""))]=q.value)}var r=m.match(/^(?:(.*\/)ace\.js|(.*\/)ace((-uncompressed)?(-noconflict)?\.js))(?:\?|$)/);r&&(h=r[1]||r[2],i=r[3])}h&&(d.base=d.base||h,d.packaged=!0),d.suffix=d.suffix||i,d.workerPath=d.workerPath||d.base,d.modePath=d.modePath||d.base,d.themePath=d.themePath||d.base,delete d.base;for(var s in d)typeof d[s]!="undefined"&&b.set(s,d[s])}}),define("ace/lib/net",["require","exports","module"],function(a,b,c){"use strict",b.get=function(a,c){var d=b.createXhr();d.open("GET",a,!0),d.onreadystatechange=function(a){d.readyState===4&&c(d.responseText)},d.send(null)};var d=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];b.createXhr=function(){var a,b,c;if(typeof XMLHttpRequest!="undefined")return new XMLHttpRequest;for(b=0;b<3;b++){c=d[b];try{a=new ActiveXObject(c)}catch(e){}if(a){d=[c];break}}if(!a)throw new Error("createXhr(): XMLHttpRequest not available");return a},b.loadScript=function(a,b){var c=document.getElementsByTagName("head")[0],d=document.createElement("script");d.src=a,c.appendChild(d),d.onload=b}}),define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"],function(a,b,c){"use strict";var d=a("./lib/oop"),e=a("./lib/lang"),f=a("./lib/event_emitter").EventEmitter,g=a("./range").Range,h=function(a){this.session=a,this.doc=a.getDocument(),this.clearSelection(),this.selectionLead=this.doc.createAnchor(0,0),this.selectionAnchor=this.doc.createAnchor(0,0);var b=this;this.selectionLead.on("change",function(a){b._emit("changeCursor"),b.$isEmpty||b._emit("changeSelection"),!b.$keepDesiredColumnOnChange&&a.old.column!=a.value.column&&(b.$desiredColumn=null)}),this.selectionAnchor.on("change",function(){b.$isEmpty||b._emit("changeSelection")})};(function(){d.implement(this,f),this.isEmpty=function(){return this.$isEmpty||this.selectionAnchor.row==this.selectionLead.row&&this.selectionAnchor.column==this.selectionLead.column},this.isMultiLine=function(){return this.isEmpty()?!1:this.getRange().isMultiLine()},this.getCursor=function(){return this.selectionLead.getPosition()},this.setSelectionAnchor=function(a,b){this.selectionAnchor.setPosition(a,b),this.$isEmpty&&(this.$isEmpty=!1,this._emit("changeSelection"))},this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.selectionAnchor.getPosition()},this.getSelectionLead=function(){return this.selectionLead.getPosition()},this.shiftSelection=function(a){if(this.$isEmpty){this.moveCursorTo(this.selectionLead.row,this.selectionLead.column+a);return}var b=this.getSelectionAnchor(),c=this.getSelectionLead(),d=this.isBackwards();(!d||b.column!==0)&&this.setSelectionAnchor(b.row,b.column+a),(d||c.column!==0)&&this.$moveSelection(function(){this.moveCursorTo(c.row,c.column+a)})},this.isBackwards=function(){var a=this.selectionAnchor,b=this.selectionLead;return a.row>b.row||a.row==b.row&&a.column>b.column},this.getRange=function(){var a=this.selectionAnchor,b=this.selectionLead;return this.isEmpty()?g.fromPoints(b,b):this.isBackwards()?g.fromPoints(b,a):g.fromPoints(a,b)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){var a=this.doc.getLength()-1;this.setSelectionAnchor(a,this.doc.getLine(a).length),this.moveCursorTo(0,0)},this.setSelectionRange=function(a,b){b?(this.setSelectionAnchor(a.end.row,a.end.column),this.selectTo(a.start.row,a.start.column)):(this.setSelectionAnchor(a.start.row,a.start.column),this.selectTo(a.end.row,a.end.column)),this.$desiredColumn=null},this.$moveSelection=function(a){var b=this.selectionLead;this.$isEmpty&&this.setSelectionAnchor(b.row,b.column),a.call(this)},this.selectTo=function(a,b){this.$moveSelection(function(){this.moveCursorTo(a,b)})},this.selectToPosition=function(a){this.$moveSelection(function(){this.moveCursorToPosition(a)})},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.selectWord=function(){var a=this.getCursor(),b=this.session.getWordRange(a.row,a.column);this.setSelectionRange(b)},this.selectAWord=function(){var a=this.getCursor(),b=this.session.getAWordRange(a.row,a.column);this.setSelectionRange(b)},this.selectLine=function(){var a=this.selectionLead.row,b,c=this.session.getFoldLine(a);c?(a=c.start.row,b=c.end.row):b=a,this.setSelectionAnchor(a,0),this.$moveSelection(function(){this.moveCursorTo(b+1,0)})},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.moveCursorLeft=function(){var a=this.selectionLead.getPosition(),b;if(b=this.session.getFoldAt(a.row,a.column,-1))this.moveCursorTo(b.start.row,b.start.column);else if(a.column==0)a.row>0&&this.moveCursorTo(a.row-1,this.doc.getLine(a.row-1).length);else{var c=this.session.getTabSize();this.session.isTabStop(a)&&this.doc.getLine(a.row).slice(a.column-c,a.column).split(" ").length-1==c?this.moveCursorBy(0,-c):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var a=this.selectionLead.getPosition(),b;if(b=this.session.getFoldAt(a.row,a.column,1))this.moveCursorTo(b.end.row,b.end.column);else if(this.selectionLead.column==this.doc.getLine(this.selectionLead.row).length)this.selectionLead.row<this.doc.getLength()-1&&this.moveCursorTo(this.selectionLead.row+1,0);else{var c=this.session.getTabSize(),a=this.selectionLead;this.session.isTabStop(a)&&this.doc.getLine(a.row).slice(a.column,a.column+c).split(" ").length-1==c?this.moveCursorBy(0,c):this.moveCursorBy(0,1)}},this.moveCursorLineStart=function(){var a=this.selectionLead.row,b=this.selectionLead.column,c=this.session.documentToScreenRow(a,b),d=this.session.screenToDocumentPosition(c,0),e=this.session.getDisplayLine(a,null,d.row,d.column),f=e.match(/^\s*/);f[0].length==b?this.moveCursorTo(d.row,d.column):this.moveCursorTo(d.row,d.column+f[0].length)},this.moveCursorLineEnd=function(){var a=this.selectionLead,b=this.session.getDocumentLastRowColumnPosition(a.row,a.column);this.moveCursorTo(b.row,b.column)},this.moveCursorFileEnd=function(){var a=this.doc.getLength()-1,b=this.doc.getLine(a).length;this.moveCursorTo(a,b)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorWordRight=function(){var a=this.selectionLead.row,b=this.selectionLead.column,c=this.doc.getLine(a),d=c.substring(b),e;this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var f=this.session.getFoldAt(a,b,1);if(f){this.moveCursorTo(f.end.row,f.end.column);return}if(e=this.session.nonTokenRe.exec(d))b+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,d=c.substring(b);if(b>=c.length){this.moveCursorTo(a,c.length),this.moveCursorRight(),a<this.doc.getLength()-1&&this.moveCursorWordRight();return}if(e=this.session.tokenRe.exec(d))b+=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0;this.moveCursorTo(a,b)},this.moveCursorWordLeft=function(){var a=this.selectionLead.row,b=this.selectionLead.column,c;if(c=this.session.getFoldAt(a,b,-1)){this.moveCursorTo(c.start.row,c.start.column);return}var d=this.session.getFoldStringAt(a,b,-1);d==null&&(d=this.doc.getLine(a).substring(0,b));var f=e.stringReverse(d),g;this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;if(g=this.session.nonTokenRe.exec(f))b-=this.session.nonTokenRe.lastIndex,f=f.slice(this.session.nonTokenRe.lastIndex),this.session.nonTokenRe.lastIndex=0;if(b<=0){this.moveCursorTo(a,0),this.moveCursorLeft(),a>0&&this.moveCursorWordLeft();return}if(g=this.session.tokenRe.exec(f))b-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0;this.moveCursorTo(a,b)},this.moveCursorBy=function(a,b){var c=this.session.documentToScreenPosition(this.selectionLead.row,this.selectionLead.column);b===0&&(this.$desiredColumn?c.column=this.$desiredColumn:this.$desiredColumn=c.column);var d=this.session.screenToDocumentPosition(c.row+a,c.column);this.moveCursorTo(d.row,d.column+b,b===0)},this.moveCursorToPosition=function(a){this.moveCursorTo(a.row,a.column)},this.moveCursorTo=function(a,b,c){var d=this.session.getFoldAt(a,b,1);d&&(a=d.start.row,b=d.start.column),this.$keepDesiredColumnOnChange=!0,this.selectionLead.setPosition(a,b),this.$keepDesiredColumnOnChange=!1,c||(this.$desiredColumn=null)},this.moveCursorToScreen=function(a,b,c){var d=this.session.screenToDocumentPosition(a,b);this.moveCursorTo(d.row,d.column,c)},this.detach=function(){this.selectionLead.detach(),this.selectionAnchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(a){this.setSelectionRange(a,a.cursor==a.start),this.$desiredColumn=a.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(a){var b=this.getRange();return a?(a.start.column=b.start.column,a.start.row=b.start.row,a.end.column=b.end.column,a.end.row=b.end.row):a=b,a.cursor=this.isBackwards()?a.start:a.end,a.desiredColumn=this.$desiredColumn,a}}).call(h.prototype),b.Selection=h}),define("ace/range",["require","exports","module"],function(a,b,c){"use strict";var d=function(a,b,c,d){this.start={row:a,column:b},this.end={row:c,column:d}};(function(){this.isEqual=function(a){return this.start.row==a.start.row&&this.end.row==a.end.row&&this.start.column==a.start.column&&this.end.column==a.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(a,b){return this.compare(a,b)==0},this.compareRange=function(a){var b,c=a.end,d=a.start;return b=this.compare(c.row,c.column),b==1?(b=this.compare(d.row,d.column),b==1?2:b==0?1:0):b==-1?-2:(b=this.compare(d.row,d.column),b==-1?-1:b==1?42:0)},this.comparePoint=function(a){return this.compare(a.row,a.column)},this.containsRange=function(a){return this.comparePoint(a.start)==0&&this.comparePoint(a.end)==0},this.intersectsRange=function(a){var b=this.compareRange(a);return b==-1||b==0||b==1},this.isEnd=function(a,b){return this.end.row==a&&this.end.column==b},this.isStart=function(a,b){return this.start.row==a&&this.start.column==b},this.setStart=function(a,b){typeof a=="object"?(this.start.column=a.column,this.start.row=a.row):(this.start.row=a,this.start.column=b)},this.setEnd=function(a,b){typeof a=="object"?(this.end.column=a.column,this.end.row=a.row):(this.end.row=a,this.end.column=b)},this.inside=function(a,b){return this.compare(a,b)==0?this.isEnd(a,b)||this.isStart(a,b)?!1:!0:!1},this.insideStart=function(a,b){return this.compare(a,b)==0?this.isEnd(a,b)?!1:!0:!1},this.insideEnd=function(a,b){return this.compare(a,b)==0?this.isStart(a,b)?!1:!0:!1},this.compare=function(a,b){return!this.isMultiLine()&&a===this.start.row?b<this.start.column?-1:b>this.end.column?1:0:a<this.start.row?-1:a>this.end.row?1:this.start.row===a?b>=this.start.column?0:-1:this.end.row===a?b<=this.end.column?0:1:0},this.compareStart=function(a,b){return this.start.row==a&&this.start.column==b?-1:this.compare(a,b)},this.compareEnd=function(a,b){return this.end.row==a&&this.end.column==b?1:this.compare(a,b)},this.compareInside=function(a,b){return this.end.row==a&&this.end.column==b?1:this.start.row==a&&this.start.column==b?-1:this.compare(a,b)},this.clipRows=function(a,b){if(this.end.row>b)var c={row:b+1,column:0};if(this.start.row>b)var e={row:b+1,column:0};if(this.start.row<a)var e={row:a,column:0};if(this.end.row<a)var c={row:a,column:0};return d.fromPoints(e||this.start,c||this.end)},this.extend=function(a,b){var c=this.compare(a,b);if(c==0)return this;if(c==-1)var e={row:a,column:b};else var f={row:a,column:b};return d.fromPoints(e||this.start,f||this.end)},this.fixOrientation=function(){if(this.start.row<this.end.row||this.start.row==this.end.row&&this.start.column<this.end.column)return!1;var a=this.start;return this.end=this.start,this.start=a,!0},this.isEmpty=function(){return this.start.row==this.end.row&&this.start.column==this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return d.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new d(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new d(this.start.row,0,this.end.row,0)},this.toScreenRange=function(a){var b=a.documentToScreenPosition(this.start),c=a.documentToScreenPosition(this.end);return new d(b.row,b.column,c.row,c.column)}}).call(d.prototype),d.fromPoints=function(a,b){return new d(a.row,a.column,b.row,b.column)},b.Range=d}),define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour","ace/unicode"],function(a,b,c){"use strict";var d=a("../tokenizer").Tokenizer,e=a("./text_highlight_rules").TextHighlightRules,f=a("./behaviour").Behaviour,g=a("../unicode"),h=function(){this.$tokenizer=new d((new e).getRules()),this.$behaviour=new f};(function(){this.tokenRe=new RegExp("^["+g.packages.L+g.packages.Mn+g.packages.Mc+g.packages.Nd+g.packages.Pc+"\\$_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+g.packages.L+g.packages.Mn+g.packages.Mc+g.packages.Nd+g.packages.Pc+"\\$_]|s])+","g"),this.getTokenizer=function(){return this.$tokenizer},this.toggleCommentLines=function(a,b,c,d){},this.getNextLineIndent=function(a,b,c){return""},this.checkOutdent=function(a,b,c){return!1},this.autoOutdent=function(a,b,c){},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""},this.createWorker=function(a){return null},this.highlightSelection=function(a){var b=a.session;b.$selectionOccurrences||(b.$selectionOccurrences=[]),b.$selectionOccurrences.length&&this.clearSelectionHighlight(a);var c=a.getSelectionRange();if(c.isEmpty()||c.isMultiLine())return;var d=c.start.column-1,e=c.end.column+1,f=b.getLine(c.start.row),g=f.length,h=f.substring(Math.max(d,0),Math.min(e,g));if(d>=0&&/^[\w\d]/.test(h)||e<=g&&/[\w\d]$/.test(h))return;h=f.substring(c.start.column,c.end.column);if(!/^[\w\d]+$/.test(h))return;var i=a.getCursorPosition(),j={wrap:!0,wholeWord:!0,caseSensitive:!0,needle:h},k=a.$search.getOptions();a.$search.set(j);var l=a.$search.findAll(b);l.forEach(function(a){if(!a.contains(i.row,i.column)){var c=b.addMarker(a,"ace_selected_word","text");b.$selectionOccurrences.push(c)}}),a.$search.set(k)},this.clearSelectionHighlight=function(a){if(!a.session.$selectionOccurrences)return;a.session.$selectionOccurrences.forEach(function(b){a.session.removeMarker(b)}),a.session.$selectionOccurrences=[]},this.createModeDelegates=function(a){if(!this.$embeds)return;this.$modes={};for(var b=0;b<this.$embeds.length;b++)a[this.$embeds[b]]&&(this.$modes[this.$embeds[b]]=new a[this.$embeds[b]]);var c=["toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction"];for(var b=0;b<c.length;b++)(function(a){var d=c[b],e=a[d];a[c[b]]=function(){return this.$delegator(d,arguments,e)}})(this)},this.$delegator=function(a,b,c){var d=b[0];for(var e=0;e<this.$embeds.length;e++){if(!this.$modes[this.$embeds[e]])continue;var f=d.split(this.$embeds[e]);if(!f[0]&&f[1]){b[0]=f[1];var g=this.$modes[this.$embeds[e]];return g[a].apply(g,b)}}var h=c.apply(this,b);return c?h:undefined},this.transformAction=function(a,b,c,d,e){if(this.$behaviour){var f=this.$behaviour.getBehaviours();for(var g in f)if(f[g][b]){var h=f[g][b].apply(this,arguments);if(h)return h}}}}).call(h.prototype),b.Mode=h}),define("ace/tokenizer",["require","exports","module"],function(a,b,c){"use strict";var d=function(a,b){b=b?"g"+b:"g",this.rules=a,this.regExps={},this.matchMappings={};for(var c in this.rules){var d=this.rules[c],e=d,f=[],g=0,h=this.matchMappings[c]={};for(var i=0;i<e.length;i++){e[i].regex instanceof RegExp&&(e[i].regex=e[i].regex.toString().slice(1,-1));var j=(new RegExp("(?:("+e[i].regex+")|(.))")).exec("a").length-2,k=e[i].regex.replace(/\\([0-9]+)/g,function(a,b){return"\\"+(parseInt(b,10)+g+1)});if(j>1&&e[i].token.length!==j-1)throw new Error("Matching groups and length of the token array don't match in rule #"+i+" of state "+c);h[g]={rule:i,len:j},g+=j,f.push(k)}this.regExps[c]=new RegExp("(?:("+f.join(")|(")+")|(.))",b)}};(function(){this.getLineTokens=function(a,b){var c=b,d=this.rules[c],e=this.matchMappings[c],f=this.regExps[c];f.lastIndex=0;var g,h=[],i=0,j={type:null,value:""};while(g=f.exec(a)){var k="text",l=null,m=[g[0]];for(var n=0;n<g.length-2;n++){if(g[n+1]===undefined)continue;l=d[e[n].rule],e[n].len>1&&(m=g.slice(n+2,n+1+e[n].len)),typeof l.token=="function"?k=l.token.apply(this,m):k=l.token;var o=l.next;o&&o!==c&&(c=o,d=this.rules[c],e=this.matchMappings[c],i=f.lastIndex,f=this.regExps[c],f.lastIndex=i);break}if(m[0]){typeof k=="string"&&(m=[m.join("")],k=[k]);for(var n=0;n<m.length;n++){if(!m[n])continue;(!l||l.merge||k[n]==="text")&&j.type===k[n]?j.value+=m[n]:(j.type&&h.push(j),j={type:k[n],value:m[n]})}}if(i==a.length)break;i=f.lastIndex}return j.type&&h.push(j),{tokens:h,state:c}}}).call(d.prototype),b.Tokenizer=d}),define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],function(a,b,c){"use strict";var d=a("../lib/lang"),e=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{token:"text",regex:".+"}]}};(function(){this.addRules=function(a,b){for(var c in a){var d=a[c];for(var e=0;e<d.length;e++){var f=d[e];f.next?f.next=b+f.next:f.next=b+c}this.$rules[b+c]=d}},this.getRules=function(){return this.$rules},this.embedRules=function(a,b,c,e){var f=(new a).getRules();if(e)for(var g=0;g<e.length;g++)e[g]=b+e[g];else{e=[];for(var h in f)e.push(b+h)}this.addRules(f,b);for(var g=0;g<e.length;g++)Array.prototype.unshift.apply(this.$rules[e[g]],d.deepCopy(c));this.$embeds||(this.$embeds=[]),this.$embeds.push(b)},this.getEmbeds=function(){return this.$embeds}}).call(e.prototype),b.TextHighlightRules=e}),define("ace/mode/behaviour",["require","exports","module"],function(a,b,c){"use strict";var d=function(){this.$behaviours={}};(function(){this.add=function(a,b,c){switch(undefined){case this.$behaviours:this.$behaviours={};case this.$behaviours[a]:this.$behaviours[a]={}}this.$behaviours[a][b]=c},this.addBehaviours=function(a){for(var b in a)for(var c in a[b])this.add(b,c,a[b][c])},this.remove=function(a){this.$behaviours&&this.$behaviours[a]&&delete this.$behaviours[a]},this.inherit=function(a,b){if(typeof a=="function")var c=(new a).getBehaviours(b);else var c=a.getBehaviours(b);this.addBehaviours(c)},this.getBehaviours=function(a){if(!a)return this.$behaviours;var b={};for(var c=0;c<a.length;c++)this.$behaviours[a[c]]&&(b[a[c]]=this.$behaviours[a[c]]);return b}}).call(d.prototype),b.Behaviour=d}),define("ace/unicode",["require","exports","module"],function(a,b,c){function d(a){var c=/\w{4}/g;for(var d in a)b.packages[d]=a[d].replace(c,"\\u$&")}"use strict",b.packages={},d({L:"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",Ll:"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A",Lu:"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A",Lt:"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC",Lm:"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F",Lo:"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",M:"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26",Mn:"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26",Mc:"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC",Me:"0488048906DE20DD-20E020E2-20E4A670-A672",N:"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nd:"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nl:"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF",No:"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835",P:"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65",Pd:"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D",Ps:"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62",Pe:"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63",Pi:"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20",Pf:"00BB2019201D203A2E032E052E0A2E0D2E1D2E21",Pc:"005F203F20402054FE33FE34FE4D-FE4FFF3F",Po:"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65",S:"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD",Sm:"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC",Sc:"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6",Sk:"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3",So:"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD",Z:"002000A01680180E2000-200A20282029202F205F3000",Zs:"002000A01680180E2000-200A202F205F3000",Zl:"2028",Zp:"2029",C:"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF",Cc:"0000-001F007F-009F",Cf:"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB",Co:"E000-F8FF",Cs:"D800-DFFF",Cn:"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF"})}),define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"],function(a,b,c){"use strict";var d=a("./lib/oop"),e=a("./lib/event_emitter").EventEmitter,f=a("./range").Range,g=a("./anchor").Anchor,h=function(a){this.$lines=[],Array.isArray(a)?this.insertLines(0,a):a.length==0?this.$lines=[""]:this.insert({row:0,column:0},a)};(function(){d.implement(this,e),this.setValue=function(a){var b=this.getLength();this.remove(new f(0,0,b,this.getLine(b-1).length)),this.insert({row:0,column:0},a)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(a,b){return new g(this,a,b)},"aaa".split(/a/).length==0?this.$split=function(a){return a.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(a){return a.split(/\r\n|\r|\n/)},this.$detectNewLine=function(a){var b=a.match(/^.*?(\r\n|\r|\n)/m);b?this.$autoNewLine=b[1]:this.$autoNewLine="\n"},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";case"auto":return this.$autoNewLine}},this.$autoNewLine="\n",this.$newLineMode="auto",this.setNewLineMode=function(a){if(this.$newLineMode===a)return;this.$newLineMode=a},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(a){return a=="\r\n"||a=="\r"||a=="\n"},this.getLine=function(a){return this.$lines[a]||""},this.getLines=function(a,b){return this.$lines.slice(a,b+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(a){if(a.start.row==a.end.row)return this.$lines[a.start.row].substring(a.start.column,a.end.column);var b=[];return b.push(this.$lines[a.start.row].substring(a.start.column)),b.push.apply(b,this.getLines(a.start.row+1,a.end.row-1)),b.push(this.$lines[a.end.row].substring(0,a.end.column)),b.join(this.getNewLineCharacter())},this.$clipPosition=function(a){var b=this.getLength();return a.row>=b&&(a.row=Math.max(0,b-1),a.column=this.getLine(b-1).length),a},this.insert=function(a,b){if(!b||b.length===0)return a;a=this.$clipPosition(a),this.getLength()<=1&&this.$detectNewLine(b);var c=this.$split(b),d=c.splice(0,1)[0],e=c.length==0?null:c.splice(c.length-1,1)[0];return a=this.insertInLine(a,d),e!==null&&(a=this.insertNewLine(a),a=this.insertLines(a.row,c),a=this.insertInLine(a,e||"")),a},this.insertLines=function(a,b){if(b.length==0)return{row:a,column:0};var c=[a,0];c.push.apply(c,b),this.$lines.splice.apply(this.$lines,c);var d=new f(a,0,a+b.length,0),e={action:"insertLines",range:d,lines:b};return this._emit("change",{data:e}),d.end},this.insertNewLine=function(a){a=this.$clipPosition(a);var b=this.$lines[a.row]||"";this.$lines[a.row]=b.substring(0,a.column),this.$lines.splice(a.row+1,0,b.substring(a.column,b.length));var c={row:a.row+1,column:0},d={action:"insertText",range:f.fromPoints(a,c),text:this.getNewLineCharacter()};return this._emit("change",{data:d}),c},this.insertInLine=function(a,b){if(b.length==0)return a;var c=this.$lines[a.row]||"";this.$lines[a.row]=c.substring(0,a.column)+b+c.substring(a.column);var d={row:a.row,column:a.column+b.length},e={action:"insertText",range:f.fromPoints(a,d),text:b};return this._emit("change",{data:e}),d},this.remove=function(a){a.start=this.$clipPosition(a.start),a.end=this.$clipPosition(a.end);if(a.isEmpty())return a.start;var b=a.start.row,c=a.end.row;if(a.isMultiLine()){var d=a.start.column==0?b:b+1,e=c-1;a.end.column>0&&this.removeInLine(c,0,a.end.column),e>=d&&this.removeLines(d,e),d!=b&&(this.removeInLine(b,a.start.column,this.getLine(b).length),this.removeNewLine(a.start.row))}else this.removeInLine(b,a.start.column,a.end.column);return a.start},this.removeInLine=function(a,b,c){if(b==c)return;var d=new f(a,b,a,c),e=this.getLine(a),g=e.substring(b,c),h=e.substring(0,b)+e.substring(c,e.length);this.$lines.splice(a,1,h);var i={action:"removeText",range:d,text:g};return this._emit("change",{data:i}),d.start},this.removeLines=function(a,b){var c=new f(a,0,b+1,0),d=this.$lines.splice(a,b-a+1),e={action:"removeLines",range:c,nl:this.getNewLineCharacter(),lines:d};return this._emit("change",{data:e}),d},this.removeNewLine=function(a){var b=this.getLine(a),c=this.getLine(a+1),d=new f(a,b.length,a+1,0),e=b+c;this.$lines.splice(a,2,e);var g={action:"removeText",range:d,text:this.getNewLineCharacter()};this._emit("change",{data:g})},this.replace=function(a,b){if(b.length==0&&a.isEmpty())return a.start;if(b==this.getTextRange(a))return a.end;this.remove(a);if(b)var c=this.insert(a.start,b);else c=a.start;return c},this.applyDeltas=function(a){for(var b=0;b<a.length;b++){var c=a[b],d=f.fromPoints(c.range.start,c.range.end);c.action=="insertLines"?this.insertLines(d.start.row,c.lines):c.action=="insertText"?this.insert(d.start,c.text):c.action=="removeLines"?this.removeLines(d.start.row,d.end.row-1):c.action=="removeText"&&this.remove(d)}},this.revertDeltas=function(a){for(var b=a.length-1;b>=0;b--){var c=a[b],d=f.fromPoints(c.range.start,c.range.end);c.action=="insertLines"?this.removeLines(d.start.row,d.end.row-1):c.action=="insertText"?this.remove(d):c.action=="removeLines"?this.insertLines(d.start.row,c.lines):c.action=="removeText"&&this.insert(d.start,c.text)}}}).call(h.prototype),b.Document=h}),define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("./lib/oop"),e=a("./lib/event_emitter").EventEmitter,f=b.Anchor=function(a,b,c){this.document=a,typeof c=="undefined"?this.setPosition(b.row,b.column):this.setPosition(b,c),this.$onChange=this.onChange.bind(this),a.on("change",this.$onChange)};(function(){d.implement(this,e),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.onChange=function(a){var b=a.data,c=b.range;if(c.start.row==c.end.row&&c.start.row!=this.row)return;if(c.start.row>this.row)return;if(c.start.row==this.row&&c.start.column>this.column)return;var d=this.row,e=this.column;b.action==="insertText"?c.start.row===d&&c.start.column<=e?c.start.row===c.end.row?e+=c.end.column-c.start.column:(e-=c.start.column,d+=c.end.row-c.start.row):c.start.row!==c.end.row&&c.start.row<d&&(d+=c.end.row-c.start.row):b.action==="insertLines"?c.start.row<=d&&(d+=c.end.row-c.start.row):b.action=="removeText"?c.start.row==d&&c.start.column<e?c.end.column>=e?e=c.start.column:e=Math.max(0,e-(c.end.column-c.start.column)):c.start.row!==c.end.row&&c.start.row<d?(c.end.row==d&&(e=Math.max(0,e-c.end.column)+c.start.column),d-=c.end.row-c.start.row):c.end.row==d&&(d-=c.end.row-c.start.row,e=Math.max(0,e-c.end.column)+c.start.column):b.action=="removeLines"&&c.start.row<=d&&(c.end.row<=d?d-=c.end.row-c.start.row:(d=c.start.row,e=0)),this.setPosition(d,e,!0)},this.setPosition=function(a,b,c){var d;c?d={row:a,column:b}:d=this.$clipPositionToDocument(a,b);if(this.row==d.row&&this.column==d.column)return;var e={row:this.row,column:this.column};this.row=d.row,this.column=d.column,this._emit("change",{old:e,value:d})},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.$clipPositionToDocument=function(a,b){var c={};return a>=this.document.getLength()?(c.row=Math.max(0,this.document.getLength()-1),c.column=this.document.getLine(c.row).length):a<0?(c.row=0,c.column=0):(c.row=a,c.column=Math.min(this.document.getLine(c.row).length,Math.max(0,b))),b<0&&(c.column=0),c}}).call(f.prototype)}),define("ace/background_tokenizer",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("./lib/oop"),e=a("./lib/event_emitter").EventEmitter,f=function(a,b){this.running=!1,this.lines=[],this.currentLine=0,this.tokenizer=a;var c=this;this.$worker=function(){if(!c.running)return;var a=new Date,b=c.currentLine,d=c.doc,e=0,f=d.getLength();while(c.currentLine<f){c.lines[c.currentLine]=c.$tokenizeRows(c.currentLine,c.currentLine)[0],c.currentLine++,e+=1;if(e%5==0&&new Date-a>20){c.fireUpdateEvent(b,c.currentLine-1),c.running=setTimeout(c.$worker,20);return}}c.running=!1,c.fireUpdateEvent(b,f-1)}};(function(){d.implement(this,e),this.setTokenizer=function(a){this.tokenizer=a,this.lines=[],this.start(0)},this.setDocument=function(a){this.doc=a,this.lines=[],this.stop()},this.fireUpdateEvent=function(a,b){var c={first:a,last:b};this._emit("update",{data:c})},this.start=function(a){this.currentLine=Math.min(a||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(a,b){return this.$tokenizeRows(a,b)},this.getState=function(a){return this.$tokenizeRows(a,a)[0].state},this.$tokenizeRows=function(a,b){if(!this.doc||isNaN(a)||isNaN(b))return[{state:"start",tokens:[]}];var c=[],d="start",e=!1;a>0&&this.lines[a-1]?(d=this.lines[a-1].state,e=!0):a==0?(d="start",e=!0):this.lines.length>0&&(d=this.lines[this.lines.length-1].state);var f=this.doc.getLines(a,b);for(var g=a;g<=b;g++)if(!this.lines[g]){var h=this.tokenizer.getLineTokens(f[g-a]||"",d),d=h.state;c.push(h),e&&(this.lines[g]=h)}else{var h=this.lines[g];d=h.state,c.push(h)}return c}}).call(f.prototype),b.BackgroundTokenizer=f}),define("ace/edit_session/folding",["require","exports","module","ace/range","ace/edit_session/fold_line","ace/edit_session/fold","ace/token_iterator"],function(a,b,c){function h(){this.getFoldAt=function(a,b,c){var d=this.getFoldLine(a);if(!d)return null;var e=d.folds;for(var f=0;f<e.length;f++){var g=e[f];if(g.range.contains(a,b)){if(c==1&&g.range.isEnd(a,b))continue;if(c==-1&&g.range.isStart(a,b))continue;return g}}},this.getFoldsInRange=function(a){a=a.clone();var b=a.start,c=a.end,d=this.$foldData,e=[];b.column+=1,c.column-=1;for(var f=0;f<d.length;f++){var g=d[f].range.compareRange(a);if(g==2)continue;if(g==-2)break;var h=d[f].folds;for(var i=0;i<h.length;i++){var j=h[i];g=j.range.compareRange(a);if(g==-2)break;if(g==2)continue;if(g==42)break;e.push(j)}}return e},this.getAllFolds=function(){function c(b){a.push(b);if(!b.subFolds)return;for(var d=0;d<b.subFolds.length;d++)c(b.subFolds[d])}var a=[],b=this.$foldData;for(var d=0;d<b.length;d++)for(var e=0;e<b[d].folds.length;e++)c(b[d].folds[e]);return a},this.getFoldStringAt=function(a,b,c,d){d=d||this.getFoldLine(a);if(!d)return null;var e={end:{column:0}},f,g;for(var h=0;h<d.folds.length;h++){g=d.folds[h];var i=g.range.compareEnd(a,b);if(i==-1){f=this.getLine(g.start.row).substring(e.end.column,g.start.column);break}if(i===0)return null;e=g}return f||(f=this.getLine(g.start.row).substring(e.end.column)),c==-1?f.substring(0,b-e.end.column):c==1?f.substring(b-e.end.column):f},this.getFoldLine=function(a,b){var c=this.$foldData,d=0;b&&(d=c.indexOf(b)),d==-1&&(d=0);for(d;d<c.length;d++){var e=c[d];if(e.start.row<=a&&e.end.row>=a)return e;if(e.end.row>a)return null}return null},this.getNextFoldLine=function(a,b){var c=this.$foldData,d=0;b&&(d=c.indexOf(b)),d==-1&&(d=0);for(d;d<c.length;d++){var e=c[d];if(e.end.row>=a)return e}return null},this.getFoldedRowCount=function(a,b){var c=this.$foldData,d=b-a+1;for(var e=0;e<c.length;e++){var f=c[e],g=f.end.row,h=f.start.row;if(g>=b){h<b&&(h>=a?d-=b-h:d=0);break}g>=a&&(h>=a?d-=g-h:d-=g-a+1)}return d},this.$addFoldLine=function(a){return this.$foldData.push(a),this.$foldData.sort(function(a,b){return a.start.row-b.start.row}),a},this.addFold=function(a,b){var c=this.$foldData,d=!1,g;a instanceof f?g=a:g=new f(b,a),this.$clipRangeToDocument(g.range);var h=g.start.row,i=g.start.column,j=g.end.row,k=g.end.column;if(g.placeholder.length<2)throw"Placeholder has to be at least 2 characters";if(h==j&&k-i<2)throw"The range has to be at least 2 characters width";var l=this.getFoldAt(h,i,1),m=this.getFoldAt(j,k,-1);if(l&&m==l)return l.addSubFold(g);if(l&&!l.range.isStart(h,i)||m&&!m.range.isEnd(j,k))throw"A fold can't intersect already existing fold"+g.range+l.range;var n=this.getFoldsInRange(g.range);n.length>0&&(this.removeFolds(n),g.subFolds=n);for(var o=0;o<c.length;o++){var p=c[o];if(j==p.start.row){p.addFold(g),d=!0;break}if(h==p.end.row){p.addFold(g),d=!0;if(!g.sameRow){var q=c[o+1];if(q&&q.start.row==j){p.merge(q);break}}break}if(j<=p.start.row)break}return d||(p=this.$addFoldLine(new e(this.$foldData,g))),this.$useWrapMode&&this.$updateWrapData(p.start.row,p.start.row),this.$modified=!0,this._emit("changeFold",{data:g}),g},this.addFolds=function(a){a.forEach(function(a){this.addFold(a)},this)},this.removeFold=function(a){var b=a.foldLine,c=b.start.row,d=b.end.row,e=this.$foldData,f=b.folds;if(f.length==1)e.splice(e.indexOf(b),1);else if(b.range.isEnd(a.end.row,a.end.column))f.pop(),b.end.row=f[f.length-1].end.row,b.end.column=f[f.length-1].end.column;else if(b.range.isStart(a.start.row,a.start.column))f.shift(),b.start.row=f[0].start.row,b.start.column=f[0].start.column;else if(a.sameRow)f.splice(f.indexOf(a),1);else{var g=b.split(a.start.row,a.start.column);f=g.folds,f.shift(),g.start.row=f[0].start.row,g.start.column=f[0].start.column}this.$useWrapMode&&this.$updateWrapData(c,d),this.$modified=!0,this._emit("changeFold",{data:a})},this.removeFolds=function(a){var b=[];for(var c=0;c<a.length;c++)b.push(a[c]);b.forEach(function(a){this.removeFold(a)},this),this.$modified=!0},this.expandFold=function(a){this.removeFold(a),a.subFolds.forEach(function(a){this.addFold(a)},this),a.subFolds=[]},this.expandFolds=function(a){a.forEach(function(a){this.expandFold(a)},this)},this.unfold=function(a,b){var c,e;a==null?c=new d(0,0,this.getLength(),0):typeof a=="number"?c=new d(a,0,a,this.getLine(a).length):"row"in a?c=d.fromPoints(a,a):c=a,e=this.getFoldsInRange(c);if(b)this.removeFolds(e);else while(e.length)this.expandFolds(e),e=this.getFoldsInRange(c)},this.isRowFolded=function(a,b){return!!this.getFoldLine(a,b)},this.getRowFoldEnd=function(a,b){var c=this.getFoldLine(a,b);return c?c.end.row:a},this.getFoldDisplayLine=function(a,b,c,d,e){d==null&&(d=a.start.row,e=0),b==null&&(b=a.end.row,c=this.getLine(b).length);var f=this.doc,g="";return a.walk(function(a,b,c,h){if(b<d)return;if(b==d){if(c<e)return;h=Math.max(e,h)}a?g+=a:g+=f.getLine(b).substring(h,c)}.bind(this),b,c),g},this.getDisplayLine=function(a,b,c,d){var e=this.getFoldLine(a);if(!e){var f;return f=this.doc.getLine(a),f.substring(d||0,b||f.length)}return this.getFoldDisplayLine(e,a,b,c,d)},this.$cloneFoldData=function(){var a=[];return a=this.$foldData.map(function(b){var c=b.folds.map(function(a){return a.clone()});return new e(a,c)}),a},this.toggleFold=function(a){var b=this.selection,c=b.getRange(),d,e;if(c.isEmpty()){var f=c.start;d=this.getFoldAt(f.row,f.column);if(d){this.expandFold(d);return}(e=this.findMatchingBracket(f))?c.comparePoint(e)==1?c.end=e:(c.start=e,c.start.column++,c.end.column--):(e=this.findMatchingBracket({row:f.row,column:f.column+1}))?(c.comparePoint(e)==1?c.end=e:c.start=e,c.start.column++):c=this.getCommentFoldRange(f.row,f.column)||c}else{var g=this.getFoldsInRange(c);if(a&&g.length){this.expandFolds(g);return}g.length==1&&(d=g[0])}d||(d=this.getFoldAt(c.start.row,c.start.column));if(d&&d.range.toString()==c.toString()){this.expandFold(d);return}var h="...";if(!c.isMultiLine()){h=this.getTextRange(c);if(h.length<4)return;h=h.trim().substring(0,2)+".."}this.addFold(h,c)},this.getCommentFoldRange=function(a,b){var c=new g(this,a,b),e=c.getCurrentToken();if(e&&/^comment|string/.test(e.type)){var f=new d,h=new RegExp(e.type.replace(/\..*/,"\\."));do e=c.stepBackward();while(e&&h.test(e.type));c.stepForward(),f.start.row=c.getCurrentTokenRow(),f.start.column=c.getCurrentTokenColumn()+2,c=new g(this,a,b);do e=c.stepForward();while(e&&h.test(e.type));return e=c.stepBackward(),f.end.row=c.getCurrentTokenRow(),f.end.column=c.getCurrentTokenColumn()+e.value.length,f}},this.foldAll=function(a,b){var c=this.foldWidgets;b=b||this.getLength();for(var d=a||0;d<b;d++){c[d]==null&&(c[d]=this.getFoldWidget(d));if(c[d]!="start")continue;var e=this.getFoldWidgetRange(d);if(e&&e.end.row<b)try{this.addFold("...",e)}catch(f){}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(a){if(!this.$foldStyles[a])throw new Error("invalid fold style: "+a+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle==a)return;this.$foldStyle=a,a=="manual"&&this.unfold();var b=this.$foldMode;this.$setFolding(null),this.$setFolding(b)},this.$setFolding=function(a){if(this.$foldMode==a)return;this.$foldMode=a,this.removeListener("change",this.$updateFoldWidgets),this._emit("changeAnnotation");if(!a||this.$foldStyle=="manual"){this.foldWidgets=null;return}this.foldWidgets=[],this.getFoldWidget=a.getFoldWidget.bind(a,this,this.$foldStyle),this.getFoldWidgetRange=a.getFoldWidgetRange.bind(a,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets)},this.onFoldWidgetClick=function(a,b){var c=this.getFoldWidget(a),d=this.getLine(a),e=b.shiftKey,f=e||b.ctrlKey||b.altKey||b.metaKey,g;c=="end"?g=this.getFoldAt(a,0,-1):g=this.getFoldAt(a,d.length,1);if(g){f?this.removeFold(g):this.expandFold(g);return}var h=this.getFoldWidgetRange(a);if(h){if(!h.isMultiLine()){g=this.getFoldAt(h.start.row,h.start.column,1);if(g&&h.isEqual(g.range)){this.removeFold(g);return}}e||this.addFold("...",h),f&&this.foldAll(h.start.row+1,h.end.row)}else f&&this.foldAll(a+1,this.getLength()),b.target.className+=" invalid"},this.updateFoldWidgets=function(a){var b=a.data,c=b.range,d=c.start.row,e=c.end.row-d;if(e===0)this.foldWidgets[d]=null;else if(b.action=="removeText"||b.action=="removeLines")this.foldWidgets.splice(d,e+1,null);else{var f=Array(e+1);f.unshift(d,1),this.foldWidgets.splice.apply(this.foldWidgets,f)}}}"use strict";var d=a("../range").Range,e=a("./fold_line").FoldLine,f=a("./fold").Fold,g=a("../token_iterator").TokenIterator;b.Folding=h}),define("ace/edit_session/fold_line",["require","exports","module","ace/range"],function(a,b,c){function e(a,b){this.foldData=a,Array.isArray(b)?this.folds=b:b=this.folds=[b];var c=b[b.length-1];this.range=new d(b[0].start.row,b[0].start.column,c.end.row,c.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach(function(a){a.setFoldLine(this)},this)}"use strict";var d=a("../range").Range;(function(){this.shiftRow=function(a){this.start.row+=a,this.end.row+=a,this.folds.forEach(function(b){b.start.row+=a,b.end.row+=a})},this.addFold=function(a){if(a.sameRow){if(a.start.row<this.startRow||a.endRow>this.endRow)throw"Can't add a fold to this FoldLine as it has no connection";this.folds.push(a),this.folds.sort(function(a,b){return-a.range.compareEnd(b.start.row,b.start.column)}),this.range.compareEnd(a.start.row,a.start.column)>0?(this.end.row=a.end.row,this.end.column=a.end.column):this.range.compareStart(a.end.row,a.end.column)<0&&(this.start.row=a.start.row,this.start.column=a.start.column)}else if(a.start.row==this.end.row)this.folds.push(a),this.end.row=a.end.row,this.end.column=a.end.column;else{if(a.end.row!=this.start.row)throw"Trying to add fold to FoldRow that doesn't have a matching row";this.folds.unshift(a),this.start.row=a.start.row,this.start.column=a.start.column}a.foldLine=this},this.containsRow=function(a){return a>=this.start.row&&a<=this.end.row},this.walk=function(a,b,c){var d=0,e=this.folds,f,g,h,i=!0;b==null&&(b=this.end.row,c=this.end.column);for(var j=0;j<e.length;j++){f=e[j],g=f.range.compareStart(b,c);if(g==-1){a(null,b,c,d,i);return}h=a(null,f.start.row,f.start.column,d,i),h=!h&&a(f.placeholder,f.start.row,f.start.column,d);if(h||g==0)return;i=!f.sameRow,d=f.end.column}a(null,b,c,d,i)},this.getNextFoldTo=function(a,b){var c,d;for(var e=0;e<this.folds.length;e++){c=this.folds[e],d=c.range.compareEnd(a,b);if(d==-1)return{fold:c,kind:"after"};if(d==0)return{fold:c,kind:"inside"}}return null},this.addRemoveChars=function(a,b,c){var d=this.getNextFoldTo(a,b),e,f;if(d){e=d.fold;if(d.kind=="inside"&&e.start.column!=b&&e.start.row!=a)throw"Moving characters inside of a fold should never be reached";if(e.start.row==a){f=this.folds;var g=f.indexOf(e);g==0&&(this.start.column+=c);for(g;g<f.length;g++){e=f[g],e.start.column+=c;if(!e.sameRow)return;e.end.column+=c}this.end.column+=c}}},this.split=function(a,b){var c=this.getNextFoldTo(a,b).fold,d=this.folds,f=this.foldData;if(!c)return null;var g=d.indexOf(c),h=d[g-1];this.end.row=h.end.row,this.end.column=h.end.column,d=d.splice(g,d.length-g);var i=new e(f,d);return f.splice(f.indexOf(this)+1,0,i),i},this.merge=function(a){var b=a.folds;for(var c=0;c<b.length;c++)this.addFold(b[c]);var d=this.foldData;d.splice(d.indexOf(a),1)},this.toString=function(){var a=[this.range.toString()+": ["];return this.folds.forEach(function(b){a.push(" "+b.toString())}),a.push("]"),a.join("\n")},this.idxToPosition=function(a){var b=0,c;for(var d=0;d<this.folds.length;d++){var c=this.folds[d];a-=c.start.column-b;if(a<0)return{row:c.start.row,column:c.start.column+a};a-=c.placeholder.length;if(a<0)return c.start;b=c.end.column}return{row:this.end.row,column:this.end.column+a}}}).call(e.prototype),b.FoldLine=e}),define("ace/edit_session/fold",["require","exports","module"],function(a,b,c){"use strict";var d=b.Fold=function(a,b){this.foldLine=null,this.placeholder=b,this.range=a,this.start=a.start,this.end=a.end,this.sameRow=a.start.row==a.end.row,this.subFolds=[]};(function(){this.toString=function(){return'"'+this.placeholder+'" '+this.range.toString()},this.setFoldLine=function(a){this.foldLine=a,this.subFolds.forEach(function(b){b.setFoldLine(a)})},this.clone=function(){var a=this.range.clone(),b=new d(a,this.placeholder);return this.subFolds.forEach(function(a){b.subFolds.push(a.clone())}),b},this.addSubFold=function(a){if(this.range.isEqual(a))return this;if(!this.range.containsRange(a))throw"A fold can't intersect already existing fold"+a.range+this.range;var b=a.range.start.row,c=a.range.start.column;for(var d=0,e=-1;d<this.subFolds.length;d++){e=this.subFolds[d].range.compare(b,c);if(e!=1)break}var f=this.subFolds[d];if(e==0)return f.addSubFold(a);var b=a.range.end.row,c=a.range.end.column;for(var g=d,e=-1;g<this.subFolds.length;g++){e=this.subFolds[g].range.compare(b,c);if(e!=1)break}var h=this.subFolds[g];if(e==0)throw"A fold can't intersect already existing fold"+a.range+this.range;var i=this.subFolds.splice(d,g-d,a);return a.setFoldLine(this.foldLine),a}}).call(d.prototype)}),define("ace/token_iterator",["require","exports","module"],function(a,b,c){"use strict";var d=function(a,b,c){this.$session=a,this.$row=b,this.$rowTokens=a.getTokens(b,b)[0].tokens;var d=a.getTokenAt(b,c);this.$tokenIndex=d?d.index:-1};(function(){this.stepBackward=function(){this.$tokenIndex-=1;while(this.$tokenIndex<0){this.$row-=1;if(this.$row<0)return this.$row=0,null;this.$rowTokens=this.$session.getTokens(this.$row,this.$row)[0].tokens,this.$tokenIndex=this.$rowTokens.length-1}return this.$rowTokens[this.$tokenIndex]},this.stepForward=function(){var a=this.$session.getLength();this.$tokenIndex+=1;while(this.$tokenIndex>=this.$rowTokens.length){this.$row+=1;if(this.$row>=a)return this.$row=a-1,null;this.$rowTokens=this.$session.getTokens(this.$row,this.$row)[0].tokens,this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var a=this.$rowTokens,b=this.$tokenIndex,c=a[b].start;if(c!==undefined)return c;c=0;while(b>0)b-=1,c+=a[b].value.length;return c}}).call(d.prototype),b.TokenIterator=d}),define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator"],function(a,b,c){function e(){this.findMatchingBracket=function(a){if(a.column==0)return null;var b=this.getLine(a.row).charAt(a.column-1);if(b=="")return null;var c=b.match(/([\(\[\{])|([\)\]\}])/);return c?c[1]?this.$findClosingBracket(c[1],a):this.$findOpeningBracket(c[2],a):null},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{"},this.$findOpeningBracket=function(a,b){var c=this.$brackets[a],e=1,f=new d(this,b.row,b.column),g=f.getCurrentToken();if(!g)return null;var h=new RegExp("(\\.?"+g.type.replace(".","|").replace("rparen","lparen|rparen")+")+"),i=b.column-f.getCurrentTokenColumn()-2,j=g.value;for(;;){while(i>=0){var k=j.charAt(i);if(k==c){e-=1;if(e==0)return{row:f.getCurrentTokenRow(),column:i+f.getCurrentTokenColumn()}}else k==a&&(e+=1);i-=1}do g=f.stepBackward();while(g&&!h.test(g.type));if(g==null)break;j=g.value,i=j.length-1}return null},this.$findClosingBracket=function(a,b){var c=this.$brackets[a],e=1,f=new d(this,b.row,b.column),g=f.getCurrentToken();if(!g)return null;var h=new RegExp("(\\.?"+g.type.replace(".","|").replace("lparen","lparen|rparen")+")+"),i=b.column-f.getCurrentTokenColumn();for(;;){var j=g.value,k=j.length;while(i<k){var l=j.charAt(i);if(l==c){e-=1;if(e==0)return{row:f.getCurrentTokenRow(),column:i+f.getCurrentTokenColumn()}}else l==a&&(e+=1);i+=1}do g=f.stepForward();while(g&&!h.test(g.type));if(g==null)break;i=0}return null}}"use strict";var d=a("../token_iterator").TokenIterator;b.BracketMatch=e}),define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(a,b,c){"use strict";var d=a("./lib/lang"),e=a("./lib/oop"),f=a("./range").Range,g=function(){this.$options={needle:"",backwards:!1,wrap:!1,caseSensitive:!1,wholeWord:!1,scope:g.ALL,regExp:!1}};g.ALL=1,g.SELECTION=2,function(){this.set=function(a){return e.mixin(this.$options,a),this},this.getOptions=function(){return d.copyObject(this.$options)},this.find=function(a){if(!this.$options.needle)return null;if(this.$options.backwards)var b=this.$backwardMatchIterator(a);else b=this.$forwardMatchIterator(a);var c=null;return b.forEach(function(a){return c=a,!0}),c},this.findAll=function(a){var b=this.$options;if(!b.needle)return[];if(b.backwards)var c=this.$backwardMatchIterator(a);else c=this.$forwardMatchIterator(a);var d=!b.start&&b.wrap&&b.scope==g.ALL;d&&(b.start={row:0,column:0});var e=[];return c.forEach(function(a){e.push(a)}),d&&(b.start=null),e},this.replace=function(a,b){var c=this.$assembleRegExp(),d=c.exec(a);return d&&d[0].length==a.length?this.$options.regExp?a.replace(c,b):b:null},this.$forwardMatchIterator=function(a){var b=this.$assembleRegExp(),c=this;return{forEach:function(d){c.$forwardLineIterator(a).forEach(function(a,e,f){e&&(a=a.substring(e));var g=[];a.replace(b,function(a){var b=arguments[arguments.length-2];return g.push({str:a,offset:e+b}),a});for(var h=0;h<g.length;h++){var i=g[h],j=c.$rangeFromMatch(f,i.offset,i.str.length);if(d(j))return!0}})}}},this.$backwardMatchIterator=function(a){var b=this.$assembleRegExp(),c=this;return{forEach:function(d){c.$backwardLineIterator(a).forEach(function(a,e,f){e&&(a=a.substring(e));var g=[];a.replace(b,function(a,b){return g.push({str:a,offset:e+b}),a});for(var h=g.length-1;h>=0;h--){var i=g[h],j=c.$rangeFromMatch(f,i.offset,i.str.length);if(d(j))return!0}})}}},this.$rangeFromMatch=function(a,b,c){return new f(a,b,a,b+c)},this.$assembleRegExp=function(){if(this.$options.regExp)var a=this.$options.needle;else a=d.escapeRegExp(this.$options.needle);this.$options.wholeWord&&(a="\\b"+a+"\\b");var b="g";this.$options.caseSensitive||(b+="i");var c=new RegExp(a,b);return c},this.$forwardLineIterator=function(a){function k(e){var f=a.getLine(e);return b&&e==c.end.row&&(f=f.substring(0,c.end.column)),j&&e==d.row&&(f=f.substring(0,d.column)),f}var b=this.$options.scope==g.SELECTION,c=this.$options.range||a.getSelection().getRange(),d=this.$options.start||c[b?"start":"end"],e=b?c.start.row:0,f=b?c.start.column:0,h=b?c.end.row:a.getLength()-1,i=this.$options.wrap,j=!1;return{forEach:function(a){var b=d.row,c=k(b),g=d.column,l=!1;j=!1;while(!a(c,g,b)){if(l)return;b++,g=0;if(b>h){if(!i)return;b=e,g=f,j=!0}b==d.row&&(l=!0),c=k(b)}}}},this.$backwardLineIterator=function(a){var b=this.$options.scope==g.SELECTION,c=this.$options.range||a.getSelection().getRange(),d=this.$options.start||c[b?"end":"start"],e=b?c.start.row:0,f=b?c.start.column:0,h=b?c.end.row:a.getLength()-1,i=this.$options.wrap;return{forEach:function(g){var j=d.row,k=a.getLine(j).substring(0,d.column),l=0,m=!1,n=!1;while(!g(k,l,j)){if(m)return;j--,l=0;if(j<e){if(!i)return;j=h,n=!0}j==d.row&&(m=!0),k=a.getLine(j),b&&(j==e?l=f:j==h&&(k=k.substring(0,c.end.column))),n&&j==d.row&&(l=d.column)}}}}}.call(g.prototype),b.Search=g}),define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../keyboard/hash_handler").HashHandler,f=a("../lib/event_emitter").EventEmitter,g=function(a,b){this.platform=a,this.commands={},this.commmandKeyBinding={},this.addCommands(b),this.setDefaultHandler("exec",function(a){a.command.exec(a.editor,a.args||{})})};d.inherits(g,e),function(){d.implement(this,f),this.exec=function(a,b,c){return typeof a=="string"&&(a=this.commands[a]),a?b&&b.$readOnly&&!a.readOnly?!1:(this._emit("exec",{editor:b,command:a,args:c}),!0):!1},this.toggleRecording=function(){if(this.$inReplay)return;return this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(a){this.macro.push([a.command,a.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(a){if(this.$inReplay||!this.macro)return;if(this.recording)return this.toggleRecording();try{this.$inReplay=!0,this.macro.forEach(function(b){typeof b=="string"?this.exec(b,a):this.exec(b[0],a,b[1])},this)}finally{this.$inReplay=!1}},this.trimMacro=function(a){return a.map(function(a){return typeof a[0]!="string"&&(a[0]=a[0].name),a[1]||(a=a[0]),a})}}.call(g.prototype),b.CommandManager=g}),define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys"],function(a,b,c){function e(a,b){this.platform=b,this.commands={},this.commmandKeyBinding={},this.addCommands(a)}"use strict";var d=a("../lib/keys");(function(){function a(a,c,e){var f,g=0,h=b(a.toLowerCase());for(var i=0,j=h.length;i<j;i++)d.KEY_MODS[h[i]]?g|=d.KEY_MODS[h[i]]:f=h[i]||"-";return{key:f,hashId:g}}function b(a){return a.trim().split(new RegExp("[\\s ]*\\-[\\s ]*","g"),999)}this.addCommand=function(a){this.commands[a.name]&&this.removeCommand(a),this.commands[a.name]=a,a.bindKey&&this._buildKeyHash(a)},this.removeCommand=function(a){var b=typeof a=="string"?a:a.name;a=this.commands[b],delete this.commands[b];var c=this.commmandKeyBinding;for(var d in c)for(var e in c[d])c[d][e]==a&&delete c[d][e]},this.addCommands=function(a){a&&Object.keys(a).forEach(function(b){var c=a[b];if(typeof c=="string")return this.bindKey(c,b);typeof c=="function"&&(c={exec:c}),c.name||(c.name=b),this.addCommand(c)},this)},this.removeCommands=function(a){Object.keys(a).forEach(function(b){this.removeCommand(a[b])},this)},this.bindKey=function(b,c){if(!b)return;var d=this.commmandKeyBinding;b.split("|").forEach(function(b){var e=a(b,c),f=e.hashId;(d[f]||(d[f]={}))[e.key]=c})},this.bindKeys=function(a){Object.keys(a).forEach(function(b){this.bindKey(b,a[b])},this)},this._buildKeyHash=function(a){var b=a.bindKey;if(!b)return;var c=typeof b=="string"?b:b[this.platform];this.bindKey(c,a)},this.findKeyCommand=function(b,c){var d=this.commmandKeyBinding;return d[b]&&d[b][c.toLowerCase()]},this.handleKeyboard=function(a,b,c,d){return{command:this.findKeyCommand(b,c)}}}).call(e.prototype),b.HashHandler=e}),define("ace/undomanager",["require","exports","module"],function(a,b,c){"use strict";var d=function(){this.reset()};(function(){this.execute=function(a){var b=a.args[0];this.$doc=a.args[1],this.$undoStack.push(b),this.$redoStack=[]},this.undo=function(a){var b=this.$undoStack.pop(),c=null;return b&&(c=this.$doc.undoChanges(b,a),this.$redoStack.push(b)),c},this.redo=function(a){var b=this.$redoStack.pop(),c=null;return b&&(c=this.$doc.redoChanges(b,a),this.$undoStack.push(b)),c},this.reset=function(){this.$undoStack=[],this.$redoStack=[]},this.hasUndo=function(){return this.$undoStack.length>0},this.hasRedo=function(){return this.$redoStack.length>0}}).call(d.prototype),b.UndoManager=d}),define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/useragent","ace/config","ace/lib/net","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/renderloop","ace/lib/event_emitter","text!ace/css/editor.css"],function(a,b,c){"use strict";var d=a("./lib/oop"),e=a("./lib/dom"),f=a("./lib/event"),g=a("./lib/useragent"),h=a("./config"),i=a("./lib/net"),j=a("./layer/gutter").Gutter,k=a("./layer/marker").Marker,l=a("./layer/text").Text,m=a("./layer/cursor").Cursor,n=a("./scrollbar").ScrollBar,o=a("./renderloop").RenderLoop,p=a("./lib/event_emitter").EventEmitter,q=a("text!./css/editor.css");e.importCssString(q,"ace_editor");var r=function(a,b){var c=this;this.container=a,e.addCssClass(a,"ace_editor"),this.setTheme(b),this.$gutter=e.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.scroller=e.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=e.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new j(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onResize.bind(this,!0)),this.$markerBack=new k(this.content);var d=this.$textLayer=new l(this.content);this.canvas=d.element,this.$markerFront=new k(this.content),this.characterWidth=d.getCharacterWidth(),this.lineHeight=d.getLineHeight(),this.$cursorLayer=new m(this.content),this.$cursorPadding=8,this.$horizScroll=!0,this.$horizScrollAlwaysVisible=!0,this.$animatedScroll=!1,this.scrollBar=new n(a),this.scrollBar.addEventListener("scroll",function(a){c.session.setScrollTop(a.data)}),this.scrollTop=0,this.scrollLeft=0,f.addListener(this.scroller,"scroll",function(){var a=c.scroller.scrollLeft;c.scrollLeft=a,c.session.setScrollLeft(a),a==0?c.$gutter.className="ace_gutter":c.$gutter.className="ace_gutter horscroll"}),this.cursorPos={row:0,column:0},this.$textLayer.addEventListener("changeCharacterSize",function(){c.characterWidth=d.getCharacterWidth(),c.lineHeight=d.getLineHeight(),c.$updatePrintMargin(),c.onResize(!0),c.$loop.schedule(c.CHANGE_FULL)}),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:1,characterWidth:1,minHeight:1,maxHeight:1,offset:0,height:1},this.$loop=new o(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.setPadding(4),this.$updatePrintMargin()};(function(){this.showGutter=!0,this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,d.implement(this,p),this.setSession=function(a){this.session=a,this.$cursorLayer.setSession(a),this.$markerBack.setSession(a),this.$markerFront.setSession(a),this.$gutterLayer.setSession(a),this.$textLayer.setSession(a),this.$loop.schedule(this.CHANGE_FULL)},this.updateLines=function(a,b){b===undefined&&(b=Infinity),this.$changedLines?(this.$changedLines.firstRow>a&&(this.$changedLines.firstRow=a),this.$changedLines.lastRow<b&&(this.$changedLines.lastRow=b)):this.$changedLines={firstRow:a,lastRow:b},this.$loop.schedule(this.CHANGE_LINES)},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(){this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.onResize=function(a){var b=this.CHANGE_SIZE,c=this.$size,d=e.getInnerHeight(this.container);if(a||c.height!=d)c.height=d,this.scroller.style.height=d+"px",c.scrollerHeight=this.scroller.clientHeight,this.scrollBar.setHeight(c.scrollerHeight),this.session&&(this.session.setScrollTop(this.getScrollTop()),b|=this.CHANGE_FULL);var f=e.getInnerWidth(this.container);if(a||c.width!=f){c.width=f;var g=this.showGutter?this.$gutter.offsetWidth:0;this.scroller.style.left=g+"px",c.scrollerWidth=Math.max(0,f-g-this.scrollBar.getWidth()),this.scroller.style.width=c.scrollerWidth+"px";if(this.session.getUseWrapMode()&&this.adjustWrapLimit()||a)b|=this.CHANGE_FULL}this.$loop.schedule(b)},this.adjustWrapLimit=function(){var a=this.$size.scrollerWidth-this.$padding*2,b=Math.floor(a/this.characterWidth);return this.session.adjustWrapLimit(b)},this.setAnimatedScroll=function(a){this.$animatedScroll=a},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(a){this.$textLayer.setShowInvisibles(a)&&this.$loop.schedule(this.CHANGE_TEXT)},this.getShowInvisibles=function(){return this.$textLayer.showInvisibles},this.$showPrintMargin=!0,this.setShowPrintMargin=function(a){this.$showPrintMargin=a,this.$updatePrintMargin()},this.getShowPrintMargin=function(){return this.$showPrintMargin},this.$printMarginColumn=80,this.setPrintMarginColumn=function(a){this.$printMarginColumn=a,this.$updatePrintMargin()},this.getPrintMarginColumn=function(){return this.$printMarginColumn},this.getShowGutter=function(){return this.showGutter},this.setShowGutter=function(a){if(this.showGutter===a)return;this.$gutter.style.display=a?"block":"none",this.showGutter=a,this.onResize(!0)},this.$updatePrintMargin=function(){var a;if(!this.$showPrintMargin&&!this.$printMarginEl)return;this.$printMarginEl||(a=e.createElement("div"),a.className="ace_print_margin_layer",this.$printMarginEl=e.createElement("div"),this.$printMarginEl.className="ace_print_margin",a.appendChild(this.$printMarginEl),this.content.insertBefore(a,this.$textLayer.element));var b=this.$printMarginEl.style;b.left=this.characterWidth*this.$printMarginColumn+this.$padding+"px",b.visibility=this.$showPrintMargin?"visible":"hidden"},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.content},this.getTextAreaContainer=function(){return this.container},this.moveTextAreaToCursor=function(a){if(g.isIE)return;if(this.layerConfig.lastRow===0)return;var b=this.$cursorLayer.getPixelPosition();if(!b)return;var c=this.content.getBoundingClientRect(),d=this.layerConfig.offset;a.style.left=c.left+b.left+"px",a.style.top=c.top+b.top-this.scrollTop+d+"px"},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(this.layerConfig.offset===0?0:1)},this.getLastFullyVisibleRow=function(){var a=Math.floor((this.layerConfig.height+this.layerConfig.offset)/this.layerConfig.lineHeight);return this.layerConfig.firstRow-1+a},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(a){this.$padding=a,this.$textLayer.setPadding(a),this.$cursorLayer.setPadding(a),this.$markerFront.setPadding(a),this.$markerBack.setPadding(a),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.getHScrollBarAlwaysVisible=function(){return this.$horizScrollAlwaysVisible},this.setHScrollBarAlwaysVisible=function(a){this.$horizScrollAlwaysVisible!=a&&(this.$horizScrollAlwaysVisible=a,(!this.$horizScrollAlwaysVisible||!this.$horizScroll)&&this.$loop.schedule(this.CHANGE_SCROLL))},this.$updateScrollBar=function(){this.scrollBar.setInnerHeight(this.layerConfig.maxHeight),this.scrollBar.setScrollTop(this.scrollTop)},this.$renderChanges=function(a){if(!a||!this.session||!this.container.offsetWidth)return;(a&this.CHANGE_FULL||a&this.CHANGE_SIZE||a&this.CHANGE_TEXT||a&this.CHANGE_LINES||a&this.CHANGE_SCROLL)&&this.$computeLayerConfig();if(a&this.CHANGE_H_SCROLL){this.scroller.scrollLeft=this.scrollLeft;var b=this.scroller.scrollLeft;this.scrollLeft=b,this.session.setScrollLeft(b)}if(a&this.CHANGE_FULL){this.$textLayer.checkForSizeChanges(),this.$updateScrollBar(),this.$textLayer.update(this.layerConfig),this.showGutter&&this.$gutterLayer.update(this.layerConfig),this.$markerBack.update(this.layerConfig),this.$markerFront.update(this.layerConfig),this.$cursorLayer.update(this.layerConfig);return}if(a&this.CHANGE_SCROLL){this.$updateScrollBar(),a&this.CHANGE_TEXT||a&this.CHANGE_LINES?this.$textLayer.update(this.layerConfig):this.$textLayer.scrollLines(this.layerConfig),this.showGutter&&this.$gutterLayer.update(this.layerConfig),this.$markerBack.update(this.layerConfig),this.$markerFront.update(this.layerConfig),this.$cursorLayer.update(this.layerConfig);return}a&this.CHANGE_TEXT?(this.$textLayer.update(this.layerConfig),this.showGutter&&this.$gutterLayer.update(this.layerConfig)):a&this.CHANGE_LINES?this.$updateLines()&&(this.$updateScrollBar(),this.showGutter&&this.$gutterLayer.update(this.layerConfig)):a&this.CHANGE_GUTTER&&this.showGutter&&this.$gutterLayer.update(this.layerConfig),a&this.CHANGE_CURSOR&&this.$cursorLayer.update(this.layerConfig),a&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(this.layerConfig),a&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(this.layerConfig),a&this.CHANGE_SIZE&&this.$updateScrollBar()},this.$computeLayerConfig=function(){var a=this.session,b=this.scrollTop%this.lineHeight,c=this.$size.scrollerHeight+this.lineHeight,d=this.$getLongestLine(),e=this.$horizScrollAlwaysVisible||this.$size.scrollerWidth-d<0,f=this.$horizScroll!==e;this.$horizScroll=e,f&&(this.scroller.style.overflowX=e?"scroll":"hidden",e||this.session.setScrollLeft(0));var g=this.session.getScreenLength()*this.lineHeight;this.session.setScrollTop(Math.max(0,Math.min(this.scrollTop,g-this.$size.scrollerHeight)));var h=Math.ceil(c/this.lineHeight)-1,i=Math.max(0,Math.round((this.scrollTop-b)/this.lineHeight)),j=i+h,k,l,m={lineHeight:this.lineHeight};i=a.screenToDocumentRow(i,0);var n=a.getFoldLine(i);n&&(i=n.start.row),k=a.documentToScreenRow(i,0),l=a.getRowHeight(m,i),j=Math.min(a.screenToDocumentRow(j,0),a.getLength()-1),c=this.$size.scrollerHeight+a.getRowHeight(m,j)+l,b=this.scrollTop-k*this.lineHeight,this.layerConfig={width:d,padding:this.$padding,firstRow:i,firstRowScreen:k,lastRow:j,lineHeight:this.lineHeight,characterWidth:this.characterWidth,minHeight:c,maxHeight:g,offset:b,height:this.$size.scrollerHeight},this.$gutterLayer.element.style.marginTop=-b+"px",this.content.style.marginTop=-b+"px",this.content.style.width=d+2*this.$padding+"px",this.content.style.height=c+"px",f&&this.onResize(!0)},this.$updateLines=function(){var a=this.$changedLines.firstRow,b=this.$changedLines.lastRow;this.$changedLines=null;var c=this.layerConfig;if(c.width!=this.$getLongestLine())return this.$textLayer.update(c);if(a>c.lastRow+1)return;if(b<c.firstRow)return;if(b===Infinity){this.showGutter&&this.$gutterLayer.update(c),this.$textLayer.update(c);return}return this.$textLayer.updateLines(c,a,b),!0},this.$getLongestLine=function(){var a=this.session.getScreenWidth();return this.$textLayer.showInvisibles&&(a+=1),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(a*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(a,b){this.$gutterLayer.addGutterDecoration(a,b),this.$loop.schedule(this.CHANGE_GUTTER)},this.removeGutterDecoration=function(a,b){this.$gutterLayer.removeGutterDecoration(a,b),this.$loop.schedule(this.CHANGE_GUTTER)},this.setBreakpoints=function(a){this.$gutterLayer.setBreakpoints(a),this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(a){this.$gutterLayer.setAnnotations(a),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollSelectionIntoView=function(a,b){this.scrollCursorIntoView(a),this.scrollCursorIntoView(b)},this.scrollCursorIntoView=function(a){if(this.$size.scrollerHeight===0)return;var b=this.$cursorLayer.getPixelPosition(a),c=b.left,d=b.top;this.scrollTop>d&&this.session.setScrollTop(d),this.scrollTop+this.$size.scrollerHeight<d+this.lineHeight&&this.session.setScrollTop(d+this.lineHeight-this.$size.scrollerHeight);var e=this.scrollLeft;e>c&&(c<this.$padding+2*this.layerConfig.characterWidth&&(c=0),this.session.setScrollLeft(c)),e+this.$size.scrollerWidth<c+this.characterWidth&&this.session.setScrollLeft(Math.round(c+this.characterWidth-this.$size.scrollerWidth))},this.getScrollTop=function(){return this.session.getScrollTop()},this.getScrollLeft=function(){return this.session.getScrollLeft()},this.getScrollTopRow=function(){return this.scrollTop/this.lineHeight},this.getScrollBottomRow=function(){return Math.max(0,Math.floor((this.scrollTop+this.$size.scrollerHeight)/this.lineHeight)-1)},this.scrollToRow=function(a){this.session.setScrollTop(a*this.lineHeight)},this.STEPS=10,this.$calcSteps=function(a,b){var c=0,d=this.STEPS,e=[],f=function(a,b,c){return(a/=.5)<1?c/2*Math.pow(a,3)+b:c/2*(Math.pow(a-2,3)+2)+b};for(c=0;c<d;++c)e.push(f(c/this.STEPS,a,b-a));return e.push(b),e},this.scrollToLine=function(a,b){var c=this.$cursorLayer.getPixelPosition({row:a,column:0}),d=c.top;b&&(d-=this.$size.scrollerHeight/2);if(this.$animatedScroll&&Math.abs(d-this.scrollTop)<1e4){var e=this,f=e.$calcSteps(this.scrollTop,d);clearInterval(this.$timer),this.$timer=setInterval(function(){e.session.setScrollTop(f.shift()),f.length||clearInterval(e.$timer)},10)}else this.session.setScrollTop(d)},this.scrollToY=function(a){this.scrollTop!==a&&(this.$loop.schedule(this.CHANGE_SCROLL),this.scrollTop=a)},this.scrollToX=function(a){a<=this.$padding&&(a=0),this.scrollLeft!==a&&(this.scrollLeft=a),this.$loop.schedule(this.CHANGE_H_SCROLL)},this.scrollBy=function(a,b){b&&this.session.setScrollTop(this.session.getScrollTop()+b),a&&this.session.setScrollLeft(this.session.getScrollLeft()+a)},this.isScrollableBy=function(a,b){if(b<0&&this.session.getScrollTop()>0)return!0;if(b>0&&this.session.getScrollTop()+this.$size.scrollerHeight<this.layerConfig.maxHeight)return!0},this.pixelToScreenCoordinates=function(a,b){var c=this.scroller.getBoundingClientRect(),d=Math.round((a+this.scrollLeft-c.left-this.$padding-e.getPageScrollLeft())/this.characterWidth),f=Math.floor((b+this.scrollTop-c.top-e.getPageScrollTop())/this.lineHeight);return{row:f,column:d}},this.screenToTextCoordinates=function(a,b){var c=this.scroller.getBoundingClientRect(),d=Math.round((a+this.scrollLeft-c.left-this.$padding-e.getPageScrollLeft())/this.characterWidth),f=Math.floor((b+this.scrollTop-c.top-e.getPageScrollTop())/this.lineHeight);return this.session.screenToDocumentPosition(f,Math.max(d,0))},this.textToScreenCoordinates=function(a,b){var c=this.scroller.getBoundingClientRect(),d=this.session.documentToScreenPosition(a,b),e=this.$padding+Math.round(d.column*this.characterWidth),f=d.row*this.lineHeight;return{pageX:c.left+e-this.scrollLeft,pageY:c.top+f-this.scrollTop}},this.visualizeFocus=function(){e.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){e.removeCssClass(this.container,"ace_focus")},this.showComposition=function(a){this.$composition||(this.$composition=e.createElement("div"),this.$composition.className="ace_composition",this.content.appendChild(this.$composition)),this.$composition.innerHTML="&#160;";var b=this.$cursorLayer.getPixelPosition(),c=this.$composition.style;c.top=b.top+"px",c.left=b.left+this.$padding+"px",c.height=this.lineHeight+"px",this.hideCursor()},this.setCompositionText=function(a){e.setInnerText(this.$composition,a)},this.hideComposition=function(){this.showCursor();if(!this.$composition)return;var a=this.$composition.style;a.top="-10000px",a.left="-10000px"},this._loadTheme=function(a,b){if(!h.get("packaged"))return b();var c=a.split("/").pop(),d=h.get("themePath")+"/theme-"+c+h.get("suffix");i.loadScript(d,b)},this.setTheme=function(b){function h(a){e.importCssString(a.cssText,a.cssClass,c.container.ownerDocument),c.$theme&&e.removeCssClass(c.container,c.$theme),c.$theme=a?a.cssClass:null,c.$theme&&e.addCssClass(c.container,c.$theme),a&&a.isDark?e.addCssClass(c.container,"ace_dark"):e.removeCssClass(c.container,"ace_dark"),c.$size&&(c.$size.width=0,c.onResize())}var c=this;this.$themeValue=b;if(!b||typeof b=="string"){var d=b||"ace/theme/textmate",f;try{f=a(d)}catch(g){}if(f)return h(f);c._loadTheme(d,function(){a([d],function(a){if(c.$themeValue!==b)return;h(a)})})}else h(b)},this.getTheme=function(){return this.$themeValue},this.setStyle=function(b){e.addCssClass(this.container,b)},this.unsetStyle=function(b){e.removeCssClass(this.container,b)},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(r.prototype),b.VirtualRenderer=r}),define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("../lib/dom"),e=a("../lib/oop"),f=a("../lib/event_emitter").EventEmitter,g=function(a){this.element=d.createElement("div"),this.element.className="ace_layer ace_gutter-layer",a.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$breakpoints=[],this.$annotations=[],this.$decorations=[]};(function(){e.implement(this,f),this.setSession=function(a){this.session=a},this.addGutterDecoration=function(a,b){this.$decorations[a]||(this.$decorations[a]=""),this.$decorations[a]+=" "+b},this.removeGutterDecoration=function(a,b){this.$decorations[a]=this.$decorations[a].replace(" "+b,"")},this.setBreakpoints=function(a){this.$breakpoints=a.concat()},this.setAnnotations=function(a){this.$annotations=[];for(var b in a)if(a.hasOwnProperty(b)){var c=a[b];if(!c)continue;var d=this.$annotations[b]={text:[]};for(var e=0;e<c.length;e++){var f=c[e],g=f.text.replace(/"/g,"&quot;").replace(/'/g,"&#8217;").replace(/</,"&lt;");d.text.indexOf(g)===-1&&d.text.push(g);var h=f.type;h=="error"?d.className="ace_error":h=="warning"&&d.className!="ace_error"?d.className="ace_warning":h=="info"&&!d.className&&(d.className="ace_info")}}},this.update=function(a){this.$config=a;var b={className:"",text:[]},c=[],e=a.firstRow,f=a.lastRow,g=this.session.getNextFoldLine(e),h=g?g.start.row:Infinity,i=this.$showFoldWidgets&&this.session.foldWidgets;for(;;){e>h&&(e=g.end.row+1,g=this.session.getNextFoldLine(e,g),h=g?g.start.row:Infinity);if(e>f)break;var j=this.$annotations[e]||b;c.push("<div class='ace_gutter-cell",this.$decorations[e]||"",this.$breakpoints[e]?" ace_breakpoint ":" ",j.className,"' title='",j.text.join("\n"),"' style='height:",a.lineHeight,"px;'>",e+1);if(i){var k=i[e];k==null&&(k=i[e]=this.session.getFoldWidget(e)),k&&c.push("<span class='ace_fold-widget ",k,k=="start"&&e==h&&e<g.end.row?" closed":" open","'></span>")}var l=this.session.getRowLength(e)-1;while(l--)c.push("</div><div class='ace_gutter-cell' style='height:",a.lineHeight,"px'>¦");c.push("</div>"),e++}this.element=d.setInnerHtml(this.element,c.join("")),this.element.style.height=a.minHeight+"px";var m=this.element.offsetWidth;m!==this.gutterWidth&&(this.gutterWidth=m,this._emit("changeGutterWidth",m))},this.$showFoldWidgets=!0,this.setShowFoldWidgets=function(a){a?d.addCssClass(this.element,"ace_folding-enabled"):d.removeCssClass(this.element,"ace_folding-enabled"),this.$showFoldWidgets=a},this.getShowFoldWidgets=function(){return this.$showFoldWidgets}}).call(g.prototype),b.Gutter=g}),define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],function(a,b,c){"use strict";var d=a("../range").Range,e=a("../lib/dom"),f=function(a){this.element=e.createElement("div"),this.element.className="ace_layer ace_marker-layer",a.appendChild(this.element)};(function(){this.$padding=0,this.setPadding=function(a){this.$padding=a},this.setSession=function(a){this.session=a},this.setMarkers=function(a){this.markers=a},this.update=function(a){var a=a||this.config;if(!a)return;this.config=a;var b=[];for(var c in this.markers){var d=this.markers[c],f=d.range.clipRows(a.firstRow,a.lastRow);if(f.isEmpty())continue;f=f.toScreenRange(this.session);if(d.renderer){var g=this.$getTop(f.start.row,a),h=Math.round(this.$padding+f.start.column*a.characterWidth);d.renderer(b,f,h,g,a)}else f.isMultiLine()?d.type=="text"?this.drawTextMarker(b,f,d.clazz,a):this.drawMultiLineMarker(b,f,d.clazz,a,d.type):this.drawSingleLineMarker(b,f,d.clazz,a,null,d.type)}this.element=e.setInnerHtml(this.element,b.join(""))},this.$getTop=function(a,b){return(a-b.firstRowScreen)*b.lineHeight},this.drawTextMarker=function(a,b,c,e){var f=b.start.row,g=new d(f,b.start.column,f,this.session.getScreenLastRowColumn(f));this.drawSingleLineMarker(a,g,c,e,1,"text"),f=b.end.row,g=new d(f,0,f,b.end.column),this.drawSingleLineMarker(a,g,c,e,0,"text");for(f=b.start.row+1;f<b.end.row;f++)g.start.row=f,g.end.row=f,g.end.column=this.session.getScreenLastRowColumn(f),this.drawSingleLineMarker(a,g,c,e,1,"text")},this.drawMultiLineMarker=function(a,b,c,d,e){var f=e==="background"?0:this.$padding,g=d.width+2*this.$padding-f,h=d.lineHeight,i=Math.round(g-b.start.column*d.characterWidth),j=this.$getTop(b.start.row,d),k=Math.round(f+b.start.column*d.characterWidth);a.push("<div class='",c,"' style='","height:",h,"px;","width:",i,"px;","top:",j,"px;","left:",k,"px;'></div>"),j=this.$getTop(b.end.row,d),i=Math.round(b.end.column*d.characterWidth),a.push("<div class='",c,"' style='","height:",h,"px;","width:",i,"px;","top:",j,"px;","left:",f,"px;'></div>"),h=(b.end.row-b.start.row-1)*d.lineHeight;if(h<0)return;j=this.$getTop(b.start.row+1,d),a.push("<div class='",c,"' style='","height:",h,"px;","width:",g,"px;","top:",j,"px;","left:",f,"px;'></div>")},this.drawSingleLineMarker=function(a,b,c,d,e,f){var g=f==="background"?0:this.$padding,h=d.lineHeight;if(f==="background")var i=d.width;else i=Math.round((b.end.column+(e||0)-b.start.column)*d.characterWidth);var j=this.$getTop(b.start.row,d),k=Math.round(g+b.start.column*d.characterWidth);a.push("<div class='",c,"' style='","height:",h,"px;","width:",i,"px;","top:",j,"px;","left:",k,"px;'></div>")}}).call(f.prototype),b.Marker=f}),define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/dom"),f=a("../lib/lang"),g=a("../lib/useragent"),h=a("../lib/event_emitter").EventEmitter,i=function(a){this.element=e.createElement("div"),this.element.className="ace_layer ace_text-layer",a.appendChild(this.element),this.$characterSize=this.$measureSizes()||{width:0,height:0},this.$pollSizeChanges()};(function(){d.implement(this,h),this.EOF_CHAR="¶",this.EOL_CHAR="¬",this.TAB_CHAR="→",this.SPACE_CHAR="·",this.$padding=0,this.setPadding=function(a){this.$padding=a,this.element.style.padding="0 "+a+"px"},this.getLineHeight=function(){return this.$characterSize.height||1},this.getCharacterWidth=function(){return this.$characterSize.width||1},this.checkForSizeChanges=function(){var a=this.$measureSizes();a&&(this.$characterSize.width!==a.width||this.$characterSize.height!==a.height)&&(this.$characterSize=a,this._emit("changeCharacterSize",{data:a}))},this.$pollSizeChanges=function(){var a=this;this.$pollSizeChangesTimer=setInterval(function(){a.checkForSizeChanges()},500)},this.$fontStyles={fontFamily:1,fontSize:1,fontWeight:1,fontStyle:1,lineHeight:1},this.$measureSizes=g.isIE||g.isOldGecko?function(){var a=1e3;if(!this.$measureNode){var b=this.$measureNode=e.createElement("div"),c=b.style;c.width=c.height="auto",c.left=c.top=-a*40+"px",c.visibility="hidden",c.position="fixed",c.overflow="visible",c.whiteSpace="nowrap",b.innerHTML=f.stringRepeat("Xy",a);if(this.element.ownerDocument.body)this.element.ownerDocument.body.appendChild(b);else{var d=this.element.parentNode;while(!e.hasCssClass(d,"ace_editor"))d=d.parentNode;d.appendChild(b)}}if(!this.element.offsetWidth)return null;var c=this.$measureNode.style,g=e.computedStyle(this.element);for(var h in this.$fontStyles)c[h]=g[h];var i={height:this.$measureNode.offsetHeight,width:this.$measureNode.offsetWidth/(a*2)};return i.width==0||i.height==0?null:i}:function(){if(!this.$measureNode){var a=this.$measureNode=e.createElement("div"),b=a.style;b.width=b.height="auto",b.left=b.top="-100px",b.visibility="hidden",b.position="fixed",b.overflow="visible",b.whiteSpace="nowrap",a.innerHTML="X";var c=this.element.parentNode;while(c&&!e.hasCssClass(c,"ace_editor"))c=c.parentNode;if(!c)return this.$measureNode=null;c.appendChild(a)}var d=this.$measureNode.getBoundingClientRect(),f={height:d.height,width:d.width};return f.width==0||f.height==0?null:f},this.setSession=function(a){this.session=a},this.showInvisibles=!1,this.setShowInvisibles=function(a){return this.showInvisibles==a?!1:(this.showInvisibles=a,!0)},this.$tabStrings=[],this.$computeTabString=function(){var a=this.session.getTabSize(),b=this.$tabStrings=[0];for(var c=1;c<a+1;c++)this.showInvisibles?b.push("<span class='ace_invisible'>"+this.TAB_CHAR+(new Array(c)).join("&#160;")+"</span>"):b.push((new Array(c+1)).join("&#160;"))},this.updateLines=function(a,b,c){this.$computeTabString(),(this.config.lastRow!=a.lastRow||this.config.firstRow!=a.firstRow)&&this.scrollLines(a),this.config=a;var d=Math.max(b,a.firstRow),f=Math.min(c,a.lastRow),g=this.element.childNodes,h=0;for(var i=a.firstRow;i<d;i++){var j=this.session.getFoldLine(i);if(j){if(j.containsRow(d)){d=j.start.row;break}i=j.end.row}h++}for(var k=d;k<=f;k++){var l=g[h++];if(!l)continue;var m=[],n=this.session.getTokens(k,k);this.$renderLine(m,k,n[0].tokens,!this.$useLineGroups()),l=e.setInnerHtml(l,m.join("")),k=this.session.getRowFoldEnd(k)}},this.scrollLines=function(a){this.$computeTabString();var b=this.config;this.config=a;if(!b||b.lastRow<a.firstRow)return this.update(a);if(a.lastRow<b.firstRow)return this.update(a);var c=this.element;if(b.firstRow<a.firstRow)for(var d=this.session.getFoldedRowCount(b.firstRow,a.firstRow-1);d>0;d--)c.removeChild(c.firstChild);if(b.lastRow>a.lastRow)for(var d=this.session.getFoldedRowCount(a.lastRow+1,b.lastRow);d>0;d--)c.removeChild(c.lastChild);if(a.firstRow<b.firstRow){var e=this.$renderLinesFragment(a,a.firstRow,b.firstRow-1);c.firstChild?c.insertBefore(e,c.firstChild):c.appendChild(e)}if(a.lastRow>b.lastRow){var e=this.$renderLinesFragment(a,b.lastRow+1,a.lastRow);c.appendChild(e)}},this.$renderLinesFragment=function(a,b,c){var d=this.element.ownerDocument.createDocumentFragment(),f=b,g=this.session.getNextFoldLine(f),h=g?g.start.row:Infinity;for(;;){f>h&&(f=g.end.row+1,g=this.session.getNextFoldLine(f,g),h=g?g.start.row:Infinity);if(f>c)break;var i=e.createElement("div"),j=[],k=this.session.getTokens(f,f);k.length==1&&this.$renderLine(j,f,k[0].tokens,!1),i.innerHTML=j.join("");if(this.$useLineGroups())i.className="ace_line_group",d.appendChild(i);else{var l=i.childNodes;while(l.length)d.appendChild(l[0])}f++}return d},this.update=function(a){this.$computeTabString(),this.config=a;var b=[],c=a.firstRow,d=a.lastRow,f=c,g=this.session.getNextFoldLine(f),h=g?g.start.row:Infinity;for(;;){f>h&&(f=g.end.row+1,g=this.session.getNextFoldLine(f,g),h=g?g.start.row:Infinity);if(f>d)break;this.$useLineGroups()&&b.push("<div class='ace_line_group'>");var i=this.session.getTokens(f,f);i.length==1&&this.$renderLine(b,f,i[0].tokens,!1),this.$useLineGroups()&&b.push("</div>"),f++}this.element=e.setInnerHtml(this.element,b.join(""))},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(a,b,c,d){var e=this,f=/\t|&|<|( +)|([\v\f \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000])|[\u1100-\u115F]|[\u11A3-\u11A7]|[\u11FA-\u11FF]|[\u2329-\u232A]|[\u2E80-\u2E99]|[\u2E9B-\u2EF3]|[\u2F00-\u2FD5]|[\u2FF0-\u2FFB]|[\u3000-\u303E]|[\u3041-\u3096]|[\u3099-\u30FF]|[\u3105-\u312D]|[\u3131-\u318E]|[\u3190-\u31BA]|[\u31C0-\u31E3]|[\u31F0-\u321E]|[\u3220-\u3247]|[\u3250-\u32FE]|[\u3300-\u4DBF]|[\u4E00-\uA48C]|[\uA490-\uA4C6]|[\uA960-\uA97C]|[\uAC00-\uD7A3]|[\uD7B0-\uD7C6]|[\uD7CB-\uD7FB]|[\uF900-\uFAFF]|[\uFE10-\uFE19]|[\uFE30-\uFE52]|[\uFE54-\uFE66]|[\uFE68-\uFE6B]|[\uFF01-\uFF60]|[\uFFE0-\uFFE6]/g,h=function(a,c,d,f,h){if(a.charCodeAt(0)==32)return(new Array(a.length+1)).join("&#160;");if(a==" "){var i=e.session.getScreenTabSize(b+f);return b+=i-1,e.$tabStrings[i]}if(a=="&")return g.isOldGecko?"&":"&amp;";if(a=="<")return"&lt;";if(a==" "){var j=e.showInvisibles?"ace_cjk ace_invisible":"ace_cjk",k=e.showInvisibles?e.SPACE_CHAR:"";return b+=1,"<span class='"+j+"' style='width:"+e.config.characterWidth*2+"px'>"+k+"</span>"}if(a.match(/[\v\f \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000]/)){if(e.showInvisibles){var k=(new Array(a.length+1)).join(e.SPACE_CHAR);return"<span class='ace_invisible'>"+k+"</span>"}return"&#160;"}return b+=1,"<span class='ace_cjk' style='width:"+e.config.characterWidth*2+"px'>"+a+"</span>"},i=d.replace(f,h);if(!this.$textToken[c.type]){var j="ace_"+c.type.replace(/\./g," ace_"),k="";c.type=="fold"&&(k=" style='width:"+c.value.length*this.config.characterWidth+"px;' "),a.push("<span class='",j,"'",k,">",i,"</span>")}else a.push(i);return b+d.length},this.$renderLineCore=function(a,b,c,d,e){var f=0,g=0,h,i=0,j=this;!d||d.length==0?h=Number.MAX_VALUE:h=d[0],e||a.push("<div class='ace_line' style='height:",this.config.lineHeight,"px","'>");for(var k=0;k<c.length;k++){var l=c[k],m=l.value;if(f+m.length<h)i=j.$renderToken(a,i,l,m),f+=m.length;else{while(f+m.length>=h)i=j.$renderToken(a,i,l,m.substring(0,h-f)),m=m.substring(h-f),f=h,e||a.push("</div>","<div class='ace_line' style='height:",this.config.lineHeight,"px","'>"),g++,i=0,h=d[g]||Number.MAX_VALUE;m.length!=0&&(f+=m.length,i=j.$renderToken(a,i,l,m))}}this.showInvisibles&&(b!==this.session.getLength()-1?a.push("<span class='ace_invisible'>"+this.EOL_CHAR+"</span>"):a.push("<span class='ace_invisible'>"+this.EOF_CHAR+"</span>")),e||a.push("</div>")},this.$renderLine=function(a,b,c,d){if(!this.session.isRowFolded(b)){var e=this.session.getRowSplitData(b);this.$renderLineCore(a,b,c,e,d)}else this.$renderFoldLine(a,b,c,d)},this.$renderFoldLine=function(a,b,c,d){function h(a,b,c){var d=0,e=0;while(e+a[d].value.length<b){e+=a[d].value.length,d++;if(d==a.length)return}if(e!=b){var f=a[d].value.substring(b-e);f.length>c-b&&(f=f.substring(0,c-b)),g.push({type:a[d].type,value:f}),e=b+f.length,d+=1}while(e<c){var f=a[d].value;f.length+e>c&&(f=f.substring(0,c-e)),g.push({type:a[d].type,value:f}),e+=f.length,d+=1}}var e=this.session,f=e.getFoldLine(b),g=[];f.walk(function(a,b,d,e,f){a?g.push({type:"fold",value:a}):(f&&(c=this.session.getTokens(b,b)[0].tokens),c.length!=0&&h(c,e,d))}.bind(this),f.end.row,this.session.getLine(f.end.row).length);var i=this.session.$useWrapMode?this.session.$wrapData[b]:null;this.$renderLineCore(a,b,g,i,d)},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(i.prototype),b.Text=i}),define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],function(a,b,c){"use strict";var d=a("../lib/dom"),e=function(a){this.element=d.createElement("div"),this.element.className="ace_layer ace_cursor-layer",a.appendChild(this.element),this.isVisible=!1,this.cursors=[],this.cursor=this.addCursor()};(function(){this.$padding=0,this.setPadding=function(a){this.$padding=a},this.setSession=function(a){this.session=a},this.addCursor=function(){var a=d.createElement("div"),b="ace_cursor";return this.isVisible||(b+=" ace_hidden"),this.overwrite&&(b+=" ace_overwrite"),a.className=b,this.element.appendChild(a),this.cursors.push(a),a},this.removeCursor=function(){if(this.cursors.length>1){var a=this.cursors.pop();return a.parentNode.removeChild(a),a}},this.hideCursor=function(){this.isVisible=!1;for(var a=this.cursors.length;a--;)d.addCssClass(this.cursors[a],"ace_hidden");clearInterval(this.blinkId)},this.showCursor=function(){this.isVisible=!0;for(var a=this.cursors.length;a--;)d.removeCssClass(this.cursors[a],"ace_hidden");this.element.style.visibility="",this.restartTimer()},this.restartTimer=function(){clearInterval(this.blinkId);if(!this.isVisible)return;var a=this.element;this.blinkId=setInterval(function(){a.style.visibility="hidden",setTimeout(function(){a.style.visibility="visible"},400)},1e3)},this.getPixelPosition=function(a,b){if(!this.config||!this.session)return{left:0,top:0};a||(a=this.session.selection.getCursor());var c=this.session.documentToScreenPosition(a),d=Math.round(this.$padding+c.column*this.config.characterWidth),e=(c.row-(b?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:d,top:e}},this.update=function(a){this.config=a;if(this.session.selectionMarkerCount>1){var b=this.session.$selectionMarkers,c=0,d,e=0;for(var c=b.length;c--;){d=b[c];var f=this.getPixelPosition(d.cursor,!0),g=(this.cursors[e++]||this.addCursor()).style;g.left=f.left+"px",g.top=f.top+"px",g.width=a.characterWidth+"px",g.height=a.lineHeight+"px"}if(e>1)while(this.cursors.length>e)this.removeCursor()}else{var f=this.getPixelPosition(null,!0),g=this.cursor.style;g.left=f.left+"px",g.top=f.top+"px",g.width=a.characterWidth+"px",g.height=a.lineHeight+"px";while(this.cursors.length>1)this.removeCursor()}var h=this.session.getOverwrite();h!=this.overwrite&&this.$setOverite(h),this.restartTimer()},this.$setOverite=function(a){this.overwrite=a;for(var b=this.cursors.length;b--;)a?d.addCssClass(this.cursors[b],"ace_overwrite"):d.removeCssClass(this.cursors[b],"ace_overwrite")},this.destroy=function(){clearInterval(this.blinkId)}}).call(e.prototype),b.Cursor=e}),define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("./lib/oop"),e=a("./lib/dom"),f=a("./lib/event"),g=a("./lib/event_emitter").EventEmitter,h=function(a){this.element=e.createElement("div"),this.element.className="ace_sb",this.inner=e.createElement("div"),this.element.appendChild(this.inner),a.appendChild(this.element),this.width=e.scrollbarWidth(a.ownerDocument),this.element.style.width=(this.width||15)+5+"px",f.addListener(this.element,"scroll",this.onScroll.bind(this))};(function(){d.implement(this,g),this.onScroll=function(){this._emit("scroll",{data:this.element.scrollTop})},this.getWidth=function(){return this.width},this.setHeight=function(a){this.element.style.height=a+"px"},this.setInnerHeight=function(a){this.inner.style.height=a+"px"},this.setScrollTop=function(a){this.element.scrollTop=a}}).call(h.prototype),b.ScrollBar=h}),define("ace/renderloop",["require","exports","module","ace/lib/event"],function(a,b,c){"use strict";var d=a("./lib/event"),e=function(a,b){this.onRender=a,this.pending=!1,this.changes=0,this.window=b||window};(function(){this.schedule=function(a){this.changes=this.changes|a;if(!this.pending){this.pending=!0;var b=this;d.nextTick(function(){b.pending=!1;var a;while(a=b.changes)b.changes=0,b.onRender(a)},this.window)}}}).call(e.prototype),b.RenderLoop=e}),define("text!ace/css/editor.css",[],"@import url(//fonts.googleapis.com/css?family=Droid+Sans+Mono);\n\n.ace_editor {\n position: absolute;\n overflow: hidden;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Droid Sans Mono', 'Consolas', monospace;\n font-size: 12px;\n}\n\n.ace_scroller {\n position: absolute;\n overflow-x: scroll;\n overflow-y: hidden;\n}\n\n.ace_content {\n position: absolute;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n cursor: text;\n}\n\n.ace_composition {\n position: absolute;\n background: #555;\n color: #DDD;\n z-index: 4;\n}\n\n.ace_gutter {\n position: absolute;\n overflow : hidden;\n height: 100%;\n width: auto;\n cursor: default;\n z-index: 1000;\n}\n\n.ace_gutter.horscroll {\n box-shadow: 0px 0px 20px rgba(0,0,0,0.4);\n}\n\n.ace_gutter-cell {\n padding-left: 19px;\n padding-right: 6px;\n}\n\n.ace_gutter-cell.ace_error {\n background-image: url(\"data:image/gif,GIF89a%10%00%10%00%D5%00%00%F5or%F5%87%88%F5nr%F4ns%EBmq%F5z%7F%DDJT%DEKS%DFOW%F1Yc%F2ah%CE(7%CE)8%D18E%DD%40M%F2KZ%EBU%60%F4%60m%DCir%C8%16(%C8%19*%CE%255%F1%3FR%F1%3FS%E6%AB%B5%CA%5DI%CEn%5E%F7%A2%9A%C9G%3E%E0a%5B%F7%89%85%F5yy%F6%82%80%ED%82%80%FF%BF%BF%E3%C4%C4%FF%FF%FF%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%01%00%00%25%00%2C%00%00%00%00%10%00%10%00%00%06p%C0%92pH%2C%1A%8F%C8%D2H%93%E1d4%23%E4%88%D3%09mB%1DN%B48%F5%90%40%60%92G%5B%94%20%3E%22%D2%87%24%FA%20%24%C5%06A%00%20%B1%07%02B%A38%89X.v%17%82%11%13q%10%0Fi%24%0F%8B%10%7BD%12%0Ei%09%92%09%0EpD%18%15%24%0A%9Ci%05%0C%18F%18%0B%07%04%01%04%06%A0H%18%12%0D%14%0D%12%A1I%B3%B4%B5IA%00%3B\");\n background-repeat: no-repeat;\n background-position: 2px center;\n}\n\n.ace_gutter-cell.ace_warning {\n background-image: url(\"data:image/gif,GIF89a%10%00%10%00%D5%00%00%FF%DBr%FF%DE%81%FF%E2%8D%FF%E2%8F%FF%E4%96%FF%E3%97%FF%E5%9D%FF%E6%9E%FF%EE%C1%FF%C8Z%FF%CDk%FF%D0s%FF%D4%81%FF%D5%82%FF%D5%83%FF%DC%97%FF%DE%9D%FF%E7%B8%FF%CCl%7BQ%13%80U%15%82W%16%81U%16%89%5B%18%87%5B%18%8C%5E%1A%94d%1D%C5%83-%C9%87%2F%C6%84.%C6%85.%CD%8B2%C9%871%CB%8A3%CD%8B5%DC%98%3F%DF%9BB%E0%9CC%E1%A5U%CB%871%CF%8B5%D1%8D6%DB%97%40%DF%9AB%DD%99B%E3%B0p%E7%CC%AE%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%01%00%00%2F%00%2C%00%00%00%00%10%00%10%00%00%06a%C0%97pH%2C%1A%8FH%A1%ABTr%25%87%2B%04%82%F4%7C%B9X%91%08%CB%99%1C!%26%13%84*iJ9(%15G%CA%84%14%01%1A%97%0C%03%80%3A%9A%3E%81%84%3E%11%08%B1%8B%20%02%12%0F%18%1A%0F%0A%03'F%1C%04%0B%10%16%18%10%0B%05%1CF%1D-%06%07%9A%9A-%1EG%1B%A0%A1%A0U%A4%A5%A6BA%00%3B\");\n background-repeat: no-repeat;\n background-position: 2px center;\n}\n\n.ace_gutter-cell.ace_info {\n background-image: url(\"data:image/gif;base64,R0lGODlhEAAQAMQAAAAAAEFBQVJSUl5eXmRkZGtra39/f4WFhYmJiZGRkaampry8vMPDw8zMzNXV1dzc3OTk5Orq6vDw8P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABQALAAAAAAQABAAAAUuICWOZGmeaBml5XGwFCQSBGyXRSAwtqQIiRuiwIM5BoYVbEFIyGCQoeJGrVptIQA7\");\n background-repeat: no-repeat;\n background-position: 2px center;\n}\n\n.ace_editor .ace_sb {\n position: absolute;\n overflow-x: hidden;\n overflow-y: scroll;\n right: 0;\n}\n\n.ace_editor .ace_sb div {\n position: absolute;\n width: 1px;\n left: 0;\n}\n\n.ace_editor .ace_print_margin_layer {\n z-index: 0;\n position: absolute;\n overflow: hidden;\n margin: 0;\n left: 0;\n height: 100%;\n width: 100%;\n}\n\n.ace_editor .ace_print_margin {\n position: absolute;\n height: 100%;\n}\n\n.ace_editor textarea {\n position: fixed;\n z-index: 0;\n width: 10px;\n height: 30px;\n opacity: 0;\n background: transparent;\n appearance: none;\n -moz-appearance: none;\n border: none;\n resize: none;\n outline: none;\n overflow: hidden;\n}\n\n.ace_layer {\n z-index: 1;\n position: absolute;\n overflow: hidden;\n white-space: nowrap;\n height: 100%;\n width: 100%;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n /* setting pointer-events: auto; on node under the mouse, which changes\n during scroll, will break mouse wheel scrolling in Safari */\n pointer-events: none;\n}\n\n.ace_gutter .ace_layer {\n position: relative;\n min-width: 40px;\n text-align: right;\n pointer-events: auto;\n}\n\n.ace_text-layer {\n color: black;\n}\n\n.ace_cjk {\n display: inline-block;\n text-align: center;\n}\n\n.ace_cursor-layer {\n z-index: 4;\n}\n\n.ace_cursor {\n z-index: 4;\n position: absolute;\n}\n\n.ace_cursor.ace_hidden {\n opacity: 0.2;\n}\n\n.ace_line {\n white-space: nowrap;\n}\n\n.ace_marker-layer .ace_step {\n position: absolute;\n z-index: 3;\n}\n\n.ace_marker-layer .ace_selection {\n position: absolute;\n z-index: 5;\n}\n\n.ace_marker-layer .ace_bracket {\n position: absolute;\n z-index: 6;\n}\n\n.ace_marker-layer .ace_active_line {\n position: absolute;\n z-index: 2;\n}\n\n.ace_gutter .ace_gutter_active_line{\n background-color : #dcdcdc;\n}\n\n.ace_marker-layer .ace_selected_word {\n position: absolute;\n z-index: 4;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n}\n\n.ace_line .ace_fold {\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n \n display: inline-block;\n height: 11px;\n margin-top: -2px;\n vertical-align: middle;\n\n background-image: \n url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%11%00%00%00%09%08%06%00%00%00%D4%E8%C7%0C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%B5IDAT(%15%A5%91%3D%0E%02!%10%85ac%E1%05%D6%CE%D6%C6%CE%D2%E8%ED%CD%DE%C0%C6%D6N.%E0V%F8%3D%9Ca%891XH%C2%BE%D9y%3F%90!%E6%9C%C3%BFk%E5%011%C6-%F5%C8N%04%DF%BD%FF%89%DFt%83DN%60%3E%F3%AB%A0%DE%1A%5Dg%BE%10Q%97%1B%40%9C%A8o%10%8F%5E%828%B4%1B%60%87%F6%02%26%85%1Ch%1E%C1%2B%5Bk%FF%86%EE%B7j%09%9A%DA%9B%ACe%A3%F9%EC%DA!9%B4%D5%A6%81%86%86%98%CC%3C%5B%40%FA%81%B3%E9%CB%23%94%C16Azo%05%D4%E1%C1%95a%3B%8A'%A0%E8%CC%17%22%85%1D%BA%00%A2%FA%DC%0A%94%D1%D1%8D%8B%3A%84%17B%C7%60%1A%25Z%FC%8D%00%00%00%00IEND%AEB%60%82\"),\n url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%007%08%06%00%00%00%C4%DD%80C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%3AIDAT8%11c%FC%FF%FF%7F%18%03%1A%60%01%F2%3F%A0%891%80%04%FF%11-%F8%17%9BJ%E2%05%B1ZD%81v%26t%E7%80%F8%A3%82h%A12%1A%20%A3%01%02%0F%01%BA%25%06%00%19%C0%0D%AEF%D5%3ES%00%00%00%00IEND%AEB%60%82\");\n background-repeat: no-repeat, repeat-x;\n background-position: center center, top left;\n color: transparent;\n\n border: 1px solid black;\n -moz-border-radius: 2px;\n -webkit-border-radius: 2px;\n border-radius: 2px;\n \n cursor: pointer;\n pointer-events: auto;\n}\n\n.ace_dark .ace_fold {\n}\n\n.ace_fold:hover{\n background-image: \n url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%11%00%00%00%09%08%06%00%00%00%D4%E8%C7%0C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%B5IDAT(%15%A5%91%3D%0E%02!%10%85ac%E1%05%D6%CE%D6%C6%CE%D2%E8%ED%CD%DE%C0%C6%D6N.%E0V%F8%3D%9Ca%891XH%C2%BE%D9y%3F%90!%E6%9C%C3%BFk%E5%011%C6-%F5%C8N%04%DF%BD%FF%89%DFt%83DN%60%3E%F3%AB%A0%DE%1A%5Dg%BE%10Q%97%1B%40%9C%A8o%10%8F%5E%828%B4%1B%60%87%F6%02%26%85%1Ch%1E%C1%2B%5Bk%FF%86%EE%B7j%09%9A%DA%9B%ACe%A3%F9%EC%DA!9%B4%D5%A6%81%86%86%98%CC%3C%5B%40%FA%81%B3%E9%CB%23%94%C16Azo%05%D4%E1%C1%95a%3B%8A'%A0%E8%CC%17%22%85%1D%BA%00%A2%FA%DC%0A%94%D1%D1%8D%8B%3A%84%17B%C7%60%1A%25Z%FC%8D%00%00%00%00IEND%AEB%60%82\"),\n url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%007%08%06%00%00%00%C4%DD%80C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%003IDAT8%11c%FC%FF%FF%7F%3E%03%1A%60%01%F2%3F%A3%891%80%04%FFQ%26%F8w%C0%B43%A1%DB%0C%E2%8F%0A%A2%85%CAh%80%8C%06%08%3C%04%E8%96%18%00%A3S%0D%CD%CF%D8%C1%9D%00%00%00%00IEND%AEB%60%82\");\n background-repeat: no-repeat, repeat-x;\n background-position: center center, top left;\n}\n\n.ace_dragging .ace_content {\n cursor: move;\n}\n\n.ace_folding-enabled > .ace_gutter-cell {\n padding-right: 13px;\n}\n\n.ace_fold-widget {\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n\n margin: 0 -12px 1px 1px;\n display: inline-block;\n height: 14px;\n width: 11px;\n vertical-align: text-bottom;\n \n background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%00%05%08%06%00%00%00%8Do%26%E5%00%00%004IDATx%DAe%8A%B1%0D%000%0C%C2%F2%2CK%96%BC%D0%8F9%81%88H%E9%D0%0E%96%C0%10%92%3E%02%80%5E%82%E4%A9*-%EEsw%C8%CC%11%EE%96w%D8%DC%E9*Eh%0C%151(%00%00%00%00IEND%AEB%60%82\");\n background-repeat: no-repeat;\n background-position: center 5px;\n\n border-radius: 3px;\n}\n\n.ace_fold-widget.end {\n background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%00%05%08%06%00%00%00%8Do%26%E5%00%00%004IDATx%DAm%C7%C1%09%000%08C%D1%8C%ECE%C8E(%8E%EC%02)%1EZJ%F1%C1'%04%07I%E1%E5%EE%CAL%F5%A2%99%99%22%E2%D6%1FU%B5%FE0%D9x%A7%26Wz5%0E%D5%00%00%00%00IEND%AEB%60%82\");\n}\n\n.ace_fold-widget.closed {\n background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%03%00%00%00%06%08%06%00%00%00%06%E5%24%0C%00%00%009IDATx%DA5%CA%C1%09%000%08%03%C0%AC*(%3E%04%C1%0D%BA%B1%23%A4Uh%E0%20%81%C0%CC%F8%82%81%AA%A2%AArGfr%88%08%11%11%1C%DD%7D%E0%EE%5B%F6%F6%CB%B8%05Q%2F%E9tai%D9%00%00%00%00IEND%AEB%60%82\");\n}\n\n.ace_fold-widget:hover {\n border: 1px solid rgba(0, 0, 0, 0.3);\n background-color: rgba(255, 255, 255, 0.2);\n -moz-box-shadow:inset 0 1px 1px rgba(255, 255, 255, 0.7);\n -moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\n -webkit-box-shadow:inset 0 1px 1px rgba(255, 255, 255, 0.7);\n -webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\n box-shadow:inset 0 1px 1px rgba(255, 255, 255, 0.7);\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\n background-position: center 4px;\n}\n\n.ace_fold-widget:active {\n border: 1px solid rgba(0, 0, 0, 0.4);\n background-color: rgba(0, 0, 0, 0.05);\n -moz-box-shadow:inset 0 1px 1px rgba(255, 255, 255);\n -moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\n -webkit-box-shadow:inset 0 1px 1px rgba(255, 255, 255);\n -webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\n box-shadow:inset 0 1px 1px rgba(255, 255, 255);\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\n}\n\n.ace_fold-widget.invalid {\n background-color: #FFB4B4;\n border-color: #DE5555;\n}\n"),define("ace/multi_select",["require","exports","module","ace/range_list","ace/range","ace/selection","ace/mouse/multi_select_handler","ace/commands/multi_select_commands","ace/search","ace/edit_session","ace/editor"],function(a,b,c){function j(a,b,c){return i.$options.wrap=!0,i.$options.needle=b,i.$options.backwards=c==-1,i.find(a)}function m(a,b){return a.row==b.row&&a.column==b.column}function n(a){a.$onAddRange=a.$onAddRange.bind(a),a.$onRemoveRange=a.$onRemoveRange.bind(a),a.$onMultiSelect=a.$onMultiSelect.bind(a),a.$onSingleSelect=a.$onSingleSelect.bind(a),b.onSessionChange.call(a,a),a.on("changeSession",b.onSessionChange.bind(a)),a.on("mousedown",g),a.commands.addCommands(b.commands.defaultCommands)}var d=a("./range_list").RangeList,e=a("./range").Range,f=a("./selection").Selection,g=a("./mouse/multi_select_handler").onMouseDown;b.commands=a("./commands/multi_select_commands");var h=a("./search").Search,i=new h,k=a("./edit_session").EditSession;(function(){this.getSelectionMarkers=function(){return this.$selectionMarkers}}).call(k.prototype),function(){this.ranges=null,this.rangeList=null,this.addRange=function(a){if(!this.inMultiSelectMode&&this.rangeCount==0){var b=this.toOrientedRange();if(!a||!a.isEqual(b))this.rangeList.add(b),this.$onAddRange(b)}if(!a)return;a.cursor||(a.cursor=a.end);var c=this.rangeList.add(a);this.$onAddRange(a),c.length&&this.$onRemoveRange(c),this.rangeCount>0&&!this.inMultiSelectMode&&(this._emit("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session))},this.toSingleRange=function(a){a=a||this.ranges[0];var b=this.rangeList.removeAll();b.length&&this.$onRemoveRange(b),a&&this.fromOrientedRange(a)},this.substractPoint=function(a){var b=this.rangeList.substractPoint(a);if(b)return this.$onRemoveRange(b),b[0]},this.mergeOverlappingRanges=function(){var a=this.rangeList.merge();a.length?this.$onRemoveRange(a):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(a){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(a),this.fromOrientedRange(a),this._emit("addRange",{range:a})},this.$onRemoveRange=function(a){this.rangeCount=this.rangeList.ranges.length;if(this.rangeCount==1&&this.inMultiSelectMode){var b=this.rangeList.ranges.pop();a.push(b),this.rangeCount=0}for(var c=a.length;c--;){var d=this.ranges.indexOf(a[c]);this.ranges.splice(d,1)}this._emit("removeRange",{ranges:a}),this.rangeCount==0&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._emit("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),b=b||this.ranges[0],b&&!b.isEqual(this.getRange())&&this.fromOrientedRange(b)},this.$initRangeList=function(){if(this.rangeList)return;this.rangeList=new d,this.ranges=[],this.rangeCount=0},this.getAllRanges=function(){return this.rangeList.ranges.concat()},this.splitIntoLines=function(){if(this.rangeCount>1){var a=this.rangeList.ranges,b=a[a.length-1],c=e.fromPoints(a[0].start,b.end);this.toSingleRange(),this.setSelectionRange(c,b.cursor==b.start)}else{var d=this.session.documentToScreenPosition(this.selectionLead),f=this.session.documentToScreenPosition(this.selectionAnchor),g=this.rectangularRangeBlock(d,f);g.forEach(this.addRange,this)}},this.rectangularRangeBlock=function(a,b,c){var d=[],f=a.column<b.column;if(f)var g=a.column,h=b.column;else var g=b.column,h=a.column;var i=a.row<b.row;if(i)var j=a.row,k=b.row;else var j=b.row,k=a.row;g<0&&(g=0),j<0&&(j=0),j==k&&(c=!0);for(var l=j;l<=k;l++){var n=e.fromPoints(this.session.screenToDocumentPosition(l,g),this.session.screenToDocumentPosition(l,h));if(n.isEmpty()){if(o&&m(n.end,o))break;var o=n.end}n.cursor=f?n.start:n.end,d.push(n)}i&&d.reverse();if(!c){var p=d.length-1;while(d[p].isEmpty()&&p>0)p--;if(p>0){var q=0;while(d[q].isEmpty())q++}for(var r=p;r>=q;r--)d[r].isEmpty()&&d.splice(r,1)}return d}}.call(f.prototype);var l=a("./editor").Editor;(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(a){a.cursor||(a.cursor=a.end);var b=this.getSelectionStyle();return a.marker=this.session.addMarker(a,"ace_selection",b),this.session.$selectionMarkers.push(a),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,a},this.removeSelectionMarkers=function(a){for(var b=a.length;b--;){var c=a[b];if(!c.marker)continue;this.session.removeMarker(c.marker);var d=this.session.$selectionMarkers.indexOf(c);d!=-1&&this.session.$selectionMarkers.splice(d,1)}this.session.selectionMarkerCount=this.session.$selectionMarkers.length},this.$onAddRange=function(a){this.addSelectionMarker(a.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(a){this.removeSelectionMarkers(a.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(a){if(this.inMultiSelectMode)return;this.inMultiSelectMode=!0,this.setStyle("multiselect"),this.keyBinding.addKeyboardHandler(b.commands.keyboardHandler),this.commands.on("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onSingleSelect=function(a){if(this.session.multiSelect.inVirtualMode)return;this.inMultiSelectMode=!1,this.unsetStyle("multiselect"),this.keyBinding.removeKeyboardHandler(b.commands.keyboardHandler),this.commands.removeEventListener("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelectExec=function(a){var b=a.command,c=a.editor;b.multiSelectAction?b.multiSelectAction=="forEach"?c.forEachSelection(b,a.args):b.multiSelectAction=="single"?(c.exitMultiSelectMode(),b.exec(c,a.args||{})):b.multiSelectAction(c,a.args||{}):(b.exec(c,a.args||{}),c.multiSelect.addRange(c.multiSelect.toOrientedRange()),c.multiSelect.mergeOverlappingRanges()),a.preventDefault()},this.forEachSelection=function(a,b){if(this.inVirtualSelectionMode)return;var c=this.session,d=this.selection,e=d.rangeList,g=d._eventRegistry;d._eventRegistry={};var h=new f(c);this.inVirtualSelectionMode=!0;for(var i=e.ranges.length;i--;)h.fromOrientedRange(e.ranges[i]),this.selection=c.selection=h,a.exec(this,b||{}),h.toOrientedRange(e.ranges[i]);h.detach(),this.selection=c.selection=d,this.inVirtualSelectionMode=!1,d._eventRegistry=g,d.mergeOverlappingRanges(),this.onCursorChange(),this.onSelectionChange()},this.exitMultiSelectMode=function(){if(this.inVirtualSelectionMode)return;this.multiSelect.toSingleRange()},this.getCopyText=function(){var a="";if(this.inMultiSelectMode){var b=this.multiSelect.rangeList.ranges;a=[];for(var c=0;c<b.length;c++)a.push(this.session.getTextRange(b[c]));a=a.join(this.session.getDocument().getNewLineCharacter())}else this.selection.isEmpty()||(a=this.session.getTextRange(this.getSelectionRange()));return a},this.selectMoreLines=function(a,b){var c=this.selection.toOrientedRange(),d=c.cursor==c.end,f=this.session.documentToScreenPosition(c.cursor);this.selection.$desiredColumn&&(f.column=this.selection.$desiredColumn);var g=this.session.screenToDocumentPosition(f.row+a,f.column);if(!c.isEmpty())var h=this.session.documentToScreenPosition(d?c.end:c.start),i=this.session.screenToDocumentPosition(h.row+a,h.column);else var i=g;if(d){var j=e.fromPoints(g,i);j.cursor=j.start}else{var j=e.fromPoints(i,g);j.cursor=j.end}j.desiredColumn=f.column;if(!this.selection.inMultiSelectMode)this.selection.addRange(c);else if(b)var k=c.cursor;this.selection.addRange(j),k&&this.selection.substractPoint(k)},this.transposeSelections=function(a){var b=this.session,c=b.multiSelect,d=c.ranges;for(var e=d.length;e--;){var f=d[e];if(f.isEmpty()){var g=b.getWordRange(f.start.row,f.start.column);f.start.row=g.start.row,f.start.column=g.start.column,f.end.row=g.end.row,f.end.column=g.end.column}}c.mergeOverlappingRanges();var h=[];for(var e=d.length;e--;){var f=d[e];h.unshift(b.getTextRange(f))}a<0?h.unshift(h.pop()):h.push(h.shift());for(var e=d.length;e--;){var f=d[e],g=f.clone();b.replace(f,h[e]),f.start.row=g.start.row,f.start.column=g.start.column}},this.selectMore=function(a,b){var c=this.session,d=c.multiSelect,e=d.toOrientedRange();if(e.isEmpty()){var e=c.getWordRange(e.start.row,e.start.column);e.cursor=e.end,this.multiSelect.addRange(e)}var f=c.getTextRange(e),g=j(c,f,a);g&&(g.cursor=a==-1?g.start:g.end,this.multiSelect.addRange(g)),b&&this.multiSelect.substractPoint(e.cursor)}}).call(l.prototype),b.onSessionChange=function(a){var b=a.session;b.multiSelect||(b.$selectionMarkers=[],b.selection.$initRangeList(),b.multiSelect=b.selection),this.multiSelect=b.multiSelect;var c=a.oldSession;c&&(c.multiSelect&&c.multiSelect.editor==this&&(c.multiSelect.editor=null),b.multiSelect.removeEventListener("addRange",this.$onAddRange),b.multiSelect.removeEventListener("removeRange",this.$onRemoveRange),b.multiSelect.removeEventListener("multiSelect",this.$onMultiSelect),b.multiSelect.removeEventListener("singleSelect",this.$onSingleSelect)),b.multiSelect.on("addRange",this.$onAddRange),b.multiSelect.on("removeRange",this.$onRemoveRange),b.multiSelect.on("multiSelect",this.$onMultiSelect),b.multiSelect.on("singleSelect",this.$onSingleSelect),this.inMultiSelectMode!=b.selection.inMultiSelectMode&&(b.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},b.MultiSelect=n}),define("ace/range_list",["require","exports","module"],function(a,b,c){"use strict";var d=function(){this.ranges=[]};(function(){this.comparePoints=function(a,b){return a.row-b.row||a.column-b.column},this.pointIndex=function(a,b){var c=this.ranges;for(var d=b||0;d<c.length;d++){var e=c[d],f=this.comparePoints(a,e.end);if(f>0)continue;return f==0?d:(f=this.comparePoints(a,e.start),f>=0?d:-d-1)}return-d-1},this.add=function(a){var b=this.pointIndex(a.start);b<0&&(b=-b-1);var c=this.pointIndex(a.end,b);return c<0?c=-c-1:c++,this.ranges.splice(b,c-b,a)},this.addList=function(a){var b=[];for(var c=a.length;c--;)b.push.call(b,this.add(a[c]));return b},this.substractPoint=function(a){var b=this.pointIndex(a);if(b>=0)return this.ranges.splice(b,1)},this.merge=function(){var a=[],b=this.ranges,c=b[0],d;for(var e=1;e<b.length;e++){d=c,c=b[e];var f=this.comparePoints(d.end,c.start);if(f<0)continue;if(f==0&&!d.isEmpty()&&!c.isEmpty())continue;this.comparePoints(d.end,c.end)<0&&(d.end.row=c.end.row,d.end.column=c.end.column),b.splice(e,1),a.push(c),c=d,e--}return a},this.contains=function(a,b){return this.pointIndex({row:a,column:b})>=0},this.containsPoint=function(a){return this.pointIndex(a)>=0},this.rangeAtPoint=function(a){var b=this.pointIndex(a);if(b>=0)return this.ranges[b]},this.clipRows=function(a,b){var c=this.ranges;if(c[0].start.row>b||c[c.length-1].start.row<a)return[];var d=this.pointIndex({row:a,column:0});d<0&&(d=-d-1);var e=this.pointIndex({row:b,column:0},d);e<0&&(e=-e-1);var f=[];for(var g=d;g<e;g++)f.push(c[g]);return f},this.removeAll=function(){return this.ranges.splice(0,this.ranges.length)},this.attach=function(a){this.session&&this.detach(),this.session=a,this.onChange=this.$onChange.bind(this),this.session.on("change",this.onChange)},this.detach=function(){if(!this.session)return;this.session.removeListener("change",this.onChange),this.session=null},this.$onChange=function(a){var b=a.data.range;if(a.data.action[0]=="i")var c=b.start,d=b.end;else var d=b.start,c=b.end;var e=c.row,f=d.row,g=f-e,h=-c.column+d.column,i=this.ranges;for(var j=0,k=i.length;j<k;j++){var l=i[j];if(l.end.row<e)continue;if(l.start.row>e)break;l.start.row==e&&l.start.column>=c.column&&(l.start.column+=h,l.start.row+=g),l.end.row==e&&l.end.column>=c.column&&(l.end.column+=h,l.end.row+=g)}if(g!=0&&j<k)for(;j<k;j++){var l=i[j];l.start.row+=g,l.end.row+=g}}}).call(d.prototype),b.RangeList=d}),define("ace/mouse/multi_select_handler",["require","exports","module","ace/lib/event"],function(a,b,c){function e(a,b){return a.row==b.row&&a.column==b.column}function f(a){var b=a.domEvent,c=b.altKey,f=b.shiftKey,g=a.getAccelKey(),h=a.getButton();if(!g&&!c){if(a.editor.inMultiSelectMode)if(h==0)a.editor.exitMultiSelectMode();else if(h==2){var i=a.editor,j=i.selection.isEmpty();i.textInput.onContextMenu({x:a.clientX,y:a.clientY},j),d.capture(i.container,function(){},i.textInput.onContextMenuClose),a.stop()}return}var i=a.editor,k=i.selection,l=i.inMultiSelectMode,m=a.getDocumentPosition(),n=k.getCursor(),o=a.inSelection()||k.isEmpty()&&e(m,n),p=a.pageX,q=a.pageY,r=function(a){p=d.getDocumentX(a),q=d.getDocumentY(a)},s=function(){var a=i.renderer.pixelToScreenCoordinates(p,q),b=t.screenToDocumentPosition(a.row,a.column);if(e(v,a)&&e(b,k.selectionLead))return;v=a,i.selection.moveCursorToPosition(b),i.selection.clearSelection(),i.renderer.scrollCursorIntoView(),i.removeSelectionMarkers(x),x=k.rectangularRangeBlock(v,u),x.forEach(i.addSelectionMarker,i),i.updateSelectionMarkers()},t=i.session,u=i.renderer.pixelToScreenCoordinates(p,q),v=u;if(g&&!f&&!c&&h==0){if(!l&&o)return;l||k.addRange(k.toOrientedRange());var w=k.rangeList.rangeAtPoint(m);d.capture(i.container,function(){},function(){var a=k.toOrientedRange();w&&a.isEmpty()&&e(w.cursor,a.cursor)?k.substractPoint(a.cursor):k.addRange(a)})}else if(!f&&c&&h==0){a.stop(),l&&!g?k.toSingleRange():!l&&g&&k.addRange(),k.moveCursorToPosition(m),k.clearSelection();var x=[],y=function(a){clearInterval(A),i.removeSelectionMarkers(x);for(var b=0;b<x.length;b++)k.addRange(x[b])},z=s;d.capture(i.container,r,y);var A=setInterval(function(){z()},20);return a.preventDefault()}}var d=a("../lib/event");b.onMouseDown=f}),define("ace/commands/multi_select_commands",["require","exports","module","ace/keyboard/hash_handler"],function(a,b,c){b.defaultCommands=[{name:"addCursorAbove",exec:function(a){a.selectMoreLines(-1)},bindKey:{win:"Ctrl-Alt-Up",mac:"Ctrl-Alt-Up"},readonly:!0},{name:"addCursorBelow",exec:function(a){a.selectMoreLines(1)},bindKey:{win:"Ctrl-Alt-Down",mac:"Ctrl-Alt-Down"},readonly:!0},{name:"addCursorAboveSkipCurrent",exec:function(a){a.selectMoreLines(-1,!0)},bindKey:{win:"Ctrl-Alt-Shift-Up",mac:"Ctrl-Alt-Shift-Up"},readonly:!0},{name:"addCursorBelowSkipCurrent",exec:function(a){a.selectMoreLines(1,!0)},bindKey:{win:"Ctrl-Alt-Shift-Down",mac:"Ctrl-Alt-Shift-Down"},readonly:!0},{name:"selectMoreBefore",exec:function(a){a.selectMore(-1)},bindKey:{win:"Ctrl-Alt-Left",mac:"Ctrl-Alt-Left"},readonly:!0},{name:"selectMoreAfter",exec:function(a){a.selectMore(1)},bindKey:{win:"Ctrl-Alt-Right",mac:"Ctrl-Alt-Right"},readonly:!0},{name:"selectNextBefore",exec:function(a){a.selectMore(-1,!0)},bindKey:{win:"Ctrl-Alt-Shift-Left",mac:"Ctrl-Alt-Shift-Left"},readonly:!0},{name:"selectNextAfter",exec:function(a){a.selectMore(1,!0)},bindKey:{win:"Ctrl-Alt-Shift-Right",mac:"Ctrl-Alt-Shift-Right"},readonly:!0},{name:"splitIntoLines",exec:function(a){a.multiSelect.splitIntoLines()},bindKey:{win:"Ctrl-Shift-L",mac:"Ctrl-Shift-L"},readonly:!0}],b.multiEditCommands=[{name:"singleSelection",bindKey:"esc",exec:function(a){a.exitMultiSelectMode()},readonly:!0}];var d=a("../keyboard/hash_handler").HashHandler;b.keyboardHandler=new d(b.multiEditCommands)}),define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/config"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/event_emitter").EventEmitter,f=a("../config"),g=function(b,c,d,e){this.changeListener=this.changeListener.bind(this);if(f.get("packaged"))this.$worker=new Worker(f.get("workerPath")+"/"+c);else{var g=this.$normalizePath(a.nameToUrl("ace/worker/worker",null,"_"));this.$worker=new Worker(g);var h={};for(var i=0;i<b.length;i++){var j=b[i],k=this.$normalizePath(a.nameToUrl(j,null,"_").replace(/.js$/,""));h[j]=k}}this.$worker.postMessage({init:!0,tlns:h,module:d,classname:e}),this.callbackId=1,this.callbacks={};var l=this;this.$worker.onerror=function(a){throw window.console&&console.log&&console.log(a),a},this.$worker.onmessage=function(a){var b=a.data;switch(b.type){case"log":window.console&&console.log&&console.log(b.data);break;case"event":l._emit(b.name,{data:b.data});break;case"call":var c=l.callbacks[b.id];c&&(c(b.data),delete l.callbacks[b.id])}}};(function(){d.implement(this,e),this.$normalizePath=function(a){return a=a.replace(/^[a-z]+:\/\/[^\/]+/,""),a=location.protocol+"//"+location.host+(a.charAt(0)=="/"?"":location.pathname.replace(/\/[^\/]*$/,""))+"/"+a.replace(/^[\/]+/,""),a},this.terminate=function(){this._emit("terminate",{}),this.$worker.terminate(),this.$worker=null,this.$doc.removeEventListener("change",this.changeListener),this.$doc=null},this.send=function(a,b){this.$worker.postMessage({command:a,args:b})},this.call=function(a,b,c){if(c){var d=this.callbackId++;this.callbacks[d]=c,b.push(d)}this.send(a,b)},this.emit=function(a,b){try{this.$worker.postMessage({event:a,data:{data:b.data}})}catch(c){}},this.attachToDocument=function(a){this.$doc&&this.terminate(),this.$doc=a,this.call("setValue",[a.getValue()]),a.on("change",this.changeListener)},this.changeListener=function(a){a.range={start:a.data.range.start,end:a.data.range.end},this.emit("change",a)}}).call(g.prototype),b.WorkerClient=g}),define("ace/keyboard/state_handler",["require","exports","module"],function(a,b,c){function e(a){this.keymapping=this.$buildKeymappingRegex(a)}"use strict";var d=!1;e.prototype={$buildKeymappingRegex:function(a){for(var b in a)this.$buildBindingsRegex(a[b]);return a},$buildBindingsRegex:function(a){a.forEach(function(a){a.key?a.key=new RegExp("^"+a.key+"$"):Array.isArray(a.regex)?("key"in a||(a.key=new RegExp("^"+a.regex[1]+"$")),a.regex=new RegExp(a.regex.join("")+"$")):a.regex&&(a.regex=new RegExp(a.regex+"$"))})},$composeBuffer:function(a,b,c,d){if(a.state==null||a.buffer==null)a.state="start",a.buffer="";var e=[];b&1&&e.push("ctrl"),b&8&&e.push("command"),b&2&&e.push("option"),b&4&&e.push("shift"),c&&e.push(c);var f=e.join("-"),g=a.buffer+f;b!=2&&(a.buffer=g);var h={bufferToUse:g,symbolicName:f};return d&&(h.keyIdentifier=d.keyIdentifier),h},$find:function(a,b,c,e,f,g){var h={};return this.keymapping[a.state].some(function(i){var j;if(i.key&&!i.key.test(c))return!1;if(i.regex&&!(j=i.regex.exec(b)))return!1;if(i.match&&!i.match(b,e,f,c,g))return!1;if(i.disallowMatches)for(var k=0;k<i.disallowMatches.length;k++)if(!!j[i.disallowMatches[k]])return!1;if(i.exec){h.command=i.exec;if(i.params){var l;h.args={},i.params.forEach(function(a){a.match!=null&&j!=null?l=j[a.match]||a.defaultValue:l=a.defaultValue,a.type==="number"&&(l=parseInt(l)),h.args[a.name]=l})}a.buffer=""}return i.then&&(a.state=i.then,a.buffer=""),h.command==null&&(h.command="null"),d&&console.log("KeyboardStateMapper#find",i),!0}),h.command?h:(a.buffer="",!1)},handleKeyboard:function(a,b,c,e,f){if(b==0||c!=""&&c!=String.fromCharCode(0)){var g=this.$composeBuffer(a,b,c,f),h=g.bufferToUse,i=g.symbolicName,j=g.keyIdentifier;return g=this.$find(a,h,i,b,c,j),d&&console.log("KeyboardStateMapper#match",h,i,g),g}return null}},b.matchCharacterOnly=function(a,b,c,d){return b==0?!0:b==4&&c.length==1?!0:!1},b.StateHandler=e}),define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],function(a,b,c){"use strict";var d=a("./range").Range,e=a("./lib/event_emitter").EventEmitter,f=a("./lib/oop"),g=function(a,b,c,d,e,f){var g=this;this.length=b,this.session=a,this.doc=a.getDocument(),this.mainClass=e,this.othersClass=f,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=d,this.$onCursorChange=function(){setTimeout(function(){g.onCursorChange()})},this.$pos=c;var h=a.getUndoManager().$undoStack||a.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=h.length,this.setup(),a.selection.on("changeCursor",this.$onCursorChange)};(function(){f.implement(this,e),this.setup=function(){var a=this,b=this.doc,c=this.session,e=this.$pos;this.pos=b.createAnchor(e.row,e.column),this.markerId=c.addMarker(new d(e.row,e.column,e.row,e.column+this.length),this.mainClass,null,!1),this.pos.on("change",function(b){c.removeMarker(a.markerId),a.markerId=c.addMarker(new d(b.value.row,b.value.column,b.value.row,b.value.column+a.length),a.mainClass,null,!1)}),this.others=[],this.$others.forEach(function(c){var d=b.createAnchor(c.row,c.column);a.others.push(d)}),c.setUndoSelect(!1)},this.showOtherMarkers=function(){if(this.othersActive)return;var a=this.session,b=this;this.othersActive=!0,this.others.forEach(function(c){c.markerId=a.addMarker(new d(c.row,c.column,c.row,c.column+b.length),b.othersClass,null,!1),c.on("change",function(e){a.removeMarker(c.markerId),c.markerId=a.addMarker(new d(e.value.row,e.value.column,e.value.row,e.value.column+b.length),b.othersClass,null,!1)})})},this.hideOtherMarkers=function(){if(!this.othersActive)return;this.othersActive=!1;for(var a=0;a<this.others.length;a++)this.session.removeMarker(this.others[a].markerId)},this.onUpdate=function(a){var b=a.data,c=b.range;if(c.start.row!==c.end.row)return;if(c.start.row!==this.pos.row)return;if(this.$updating)return;this.$updating=!0;var e=b.action==="insertText"?c.end.column-c.start.column:c.start.column-c.end.column;if(c.start.column>=this.pos.column&&c.start.column<=this.pos.column+this.length+1){var f=c.start.column-this.pos.column;this.length+=e;if(!this.session.$fromUndo){if(b.action==="insertText")for(var g=this.others.length-1;g>=0;g--){var h=this.others[g],i={row:h.row,column:h.column+f};h.row===c.start.row&&c.start.column<h.column&&(i.column+=e),this.doc.insert(i,b.text)}else if(b.action==="removeText")for(var g=this.others.length-1;g>=0;g--){var h=this.others[g],i={row:h.row,column:h.column+f};h.row===c.start.row&&c.start.column<h.column&&(i.column+=e),this.doc.remove(new d(i.row,i.column,i.row,i.column-e))}c.start.column===this.pos.column&&b.action==="insertText"?setTimeout(function(){this.pos.setPosition(this.pos.row,this.pos.column-e);for(var a=0;a<this.others.length;a++){var b=this.others[a],d={row:b.row,column:b.column-e};b.row===c.start.row&&c.start.column<b.column&&(d.column+=e),b.setPosition(d.row,d.column)}}.bind(this),0):c.start.column===this.pos.column&&b.action==="removeText"&&setTimeout(function(){for(var a=0;a<this.others.length;a++){var b=this.others[a];b.row===c.start.row&&c.start.column<b.column&&b.setPosition(b.row,b.column-e)}}.bind(this),0)}this.pos._emit("change",{value:this.pos});for(var g=0;g<this.others.length;g++)this.others[g]._emit("change",{value:this.others[g]})}this.$updating=!1},this.onCursorChange=function(a){if(this.$updating)return;var b=this.session.selection.getCursor();b.row===this.pos.row&&b.column>=this.pos.column&&b.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",a)):(this.hideOtherMarkers(),this._emit("cursorLeave",a))},this.detach=function(){this.session.removeMarker(this.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.pos.detach();for(var a=0;a<this.others.length;a++)this.others[a].detach();this.session.setUndoSelect(!0)},this.cancel=function(){if(this.$undoStackDepth===-1)throw Error("Canceling placeholders only supported with undo manager attached to session.");var a=this.session.getUndoManager(),b=(a.$undoStack||a.$undostack).length-this.$undoStackDepth;for(var c=0;c<b;c++)a.undo(!0)}}).call(g.prototype),b.PlaceHolder=g}),define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],function(a,b,c){"use strict",b.isDark=!1,b.cssClass="ace-tm",b.cssText=".ace-tm .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-tm .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-tm .ace_gutter { background: #e8e8e8; color: #333;}.ace-tm .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-tm .ace_fold { background-color: #6B72E6;}.ace-tm .ace_text-layer { cursor: text;}.ace-tm .ace_cursor { border-left: 1px solid black;}.ace-tm .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid black;} .ace-tm .ace_line .ace_invisible { color: rgb(191, 191, 191);}.ace-tm .ace_line .ace_storage,.ace-tm .ace_line .ace_keyword { color: blue;}.ace-tm .ace_line .ace_constant { color: rgb(197, 6, 11);}.ace-tm .ace_line .ace_constant.ace_buildin { color: rgb(88, 72, 246);}.ace-tm .ace_line .ace_constant.ace_language { color: rgb(88, 92, 246);}.ace-tm .ace_line .ace_constant.ace_library { color: rgb(6, 150, 14);}.ace-tm .ace_line .ace_invalid { background-color: rgb(153, 0, 0); color: white;}.ace-tm .ace_line .ace_support.ace_function { color: rgb(60, 76, 114);}.ace-tm .ace_line .ace_support.ace_constant { color: rgb(6, 150, 14);}.ace-tm .ace_line .ace_support.ace_type,.ace-tm .ace_line .ace_support.ace_class { color: rgb(109, 121, 222);}.ace-tm .ace_line .ace_keyword.ace_operator { color: rgb(104, 118, 135);}.ace-tm .ace_line .ace_string { color: rgb(3, 106, 7);}.ace-tm .ace_line .ace_comment { color: rgb(76, 136, 107);}.ace-tm .ace_line .ace_comment.ace_doc { color: rgb(0, 102, 255);}.ace-tm .ace_line .ace_comment.ace_doc.ace_tag { color: rgb(128, 159, 191);}.ace-tm .ace_line .ace_constant.ace_numeric { color: rgb(0, 0, 205);}.ace-tm .ace_line .ace_variable { color: rgb(49, 132, 149);}.ace-tm .ace_line .ace_xml_pe { color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function { color: #0000A2;}.ace-tm .ace_markup.ace_markupine { text-decoration:underline;}.ace-tm .ace_markup.ace_heading { color: rgb(12, 7, 255);}.ace-tm .ace_markup.ace_list { color:rgb(185, 6, 144);}.ace-tm .ace_marker-layer .ace_selection { background: rgb(181, 213, 255);}.ace-tm .ace_marker-layer .ace_step { background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack { background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active_line { background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_marker-layer .ace_selected_word { background: rgb(250, 250, 255); border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_meta.ace_tag { color:rgb(28, 2, 255);}.ace-tm .ace_string.ace_regex { color: rgb(255, 0, 0)}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)});
+(function(){function g(a){if(typeof requirejs!="undefined"){var e=b.define;b.define=function(a,b,c){return typeof c!="function"?e.apply(this,arguments):e(a,b,function(a,d,e){return b[2]=="module"&&(e.packaged=!0),c.apply(this,arguments)})},b.define.packaged=!0;return}var f=function(a,b){return d("",a,b)};f.packaged=!0;var g=b;a&&(b[a]||(b[a]={}),g=b[a]),g.define&&(c.original=g.define),g.define=c,g.require&&(d.original=g.require),g.require=f}var a="",b=function(){return this}(),c=function(a,b,d){if(typeof a!="string"){c.original?c.original.apply(window,arguments):(console.error("dropping module because define wasn't a string."),console.trace());return}arguments.length==2&&(d=b),c.modules||(c.modules={}),c.modules[a]=d},d=function(a,b,c){if(Object.prototype.toString.call(b)==="[object Array]"){var e=[];for(var g=0,h=b.length;g<h;++g){var i=f(a,b[g]);if(!i&&d.original)return d.original.apply(window,arguments);e.push(i)}c&&c.apply(null,e)}else{if(typeof b=="string"){var j=f(a,b);return!j&&d.original?d.original.apply(window,arguments):(c&&c(),j)}if(d.original)return d.original.apply(window,arguments)}},e=function(a,b){if(b.indexOf("!")!==-1){var c=b.split("!");return e(a,c[0])+"!"+e(a,c[1])}if(b.charAt(0)=="."){var d=a.split("/").slice(0,-1).join("/");b=d+"/"+b;while(b.indexOf(".")!==-1&&f!=b){var f=b;b=b.replace(/\/\.\//,"/").replace(/[^\/]+\/\.\.\//,"")}}return b},f=function(a,b){b=e(a,b);var f=c.modules[b];if(!f)return null;if(typeof f=="function"){var g={},h={id:b,uri:"",exports:g,packaged:!0},i=function(a,c){return d(b,a,c)},j=f(i,g,h);return g=j||h.exports,c.modules[b]=g,g}return f};g(a)})(),define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/multi_select","ace/worker/worker_client","ace/keyboard/hash_handler","ace/keyboard/state_handler","ace/placeholder","ace/config","ace/theme/textmate"],function(a,b,c){"use strict",a("./lib/fixoldbrowsers");var d=a("./lib/dom"),e=a("./lib/event"),f=a("./editor").Editor,g=a("./edit_session").EditSession,h=a("./undomanager").UndoManager,i=a("./virtual_renderer").VirtualRenderer,j=a("./multi_select").MultiSelect;a("./worker/worker_client"),a("./keyboard/hash_handler"),a("./keyboard/state_handler"),a("./placeholder"),a("./config").init(),b.edit=function(b){typeof b=="string"&&(b=document.getElementById(b));var c=new g(d.getInnerText(b));c.setUndoManager(new h),b.innerHTML="";var k=new f(new i(b,a("./theme/textmate")));new j(k),k.setSession(c);var l={};return l.document=c,l.editor=k,k.resize(),e.addListener(window,"resize",function(){k.resize()}),b.env=l,k.env=l,k}}),define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],function(a,b,c){"use strict",a("./regexp"),a("./es5-shim")}),define("ace/lib/regexp",["require","exports","module"],function(a,b,c){function g(a){return(a.global?"g":"")+(a.ignoreCase?"i":"")+(a.multiline?"m":"")+(a.extended?"x":"")+(a.sticky?"y":"")}function h(a,b,c){if(Array.prototype.indexOf)return a.indexOf(b,c);for(var d=c||0;d<a.length;d++)if(a[d]===b)return d;return-1}"use strict";var d={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},e=d.exec.call(/()??/,"")[1]===undefined,f=function(){var a=/^/g;return d.test.call(a,""),!a.lastIndex}();RegExp.prototype.exec=function(a){var b=d.exec.apply(this,arguments),c,i;if(typeof a=="string"&&b){!e&&b.length>1&&h(b,"")>-1&&(i=RegExp(this.source,d.replace.call(g(this),"g","")),d.replace.call(a.slice(b.index),i,function(){for(var a=1;a<arguments.length-2;a++)arguments[a]===undefined&&(b[a]=undefined)}));if(this._xregexp&&this._xregexp.captureNames)for(var j=1;j<b.length;j++)c=this._xregexp.captureNames[j-1],c&&(b[c]=b[j]);!f&&this.global&&!b[0].length&&this.lastIndex>b.index&&this.lastIndex--}return b},f||(RegExp.prototype.test=function(a){var b=d.exec.call(this,a);return b&&this.global&&!b[0].length&&this.lastIndex>b.index&&this.lastIndex--,!!b})}),define("ace/lib/es5-shim",["require","exports","module"],function(a,b,c){function p(a){try{return Object.defineProperty(a,"sentinel",{}),"sentinel"in a}catch(b){}}Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=g.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,h=c.apply(f,d.concat(g.call(arguments)));return h!==null&&Object(h)===h?h:f}return c.apply(b,d.concat(g.call(arguments)))};return e});var d=Function.prototype.call,e=Array.prototype,f=Object.prototype,g=e.slice,h=d.bind(f.toString),i=d.bind(f.hasOwnProperty),j,k,l,m,n;if(n=i(f,"__defineGetter__"))j=d.bind(f.__defineGetter__),k=d.bind(f.__defineSetter__),l=d.bind(f.__lookupGetter__),m=d.bind(f.__lookupSetter__);Array.isArray||(Array.isArray=function(b){return h(b)=="[object Array]"}),Array.prototype.forEach||(Array.prototype.forEach=function(b){var c=G(this),d=arguments[1],e=0,f=c.length>>>0;if(h(b)!="[object Function]")throw new TypeError;while(e<f)e in c&&b.call(d,c[e],e,c),e++}),Array.prototype.map||(Array.prototype.map=function(b){var c=G(this),d=c.length>>>0,e=Array(d),f=arguments[1];if(h(b)!="[object Function]")throw new TypeError;for(var g=0;g<d;g++)g in c&&(e[g]=b.call(f,c[g],g,c));return e}),Array.prototype.filter||(Array.prototype.filter=function(b){var c=G(this),d=c.length>>>0,e=[],f=arguments[1];if(h(b)!="[object Function]")throw new TypeError;for(var g=0;g<d;g++)g in c&&b.call(f,c[g],g,c)&&e.push(c[g]);return e}),Array.prototype.every||(Array.prototype.every=function(b){var c=G(this),d=c.length>>>0,e=arguments[1];if(h(b)!="[object Function]")throw new TypeError;for(var f=0;f<d;f++)if(f in c&&!b.call(e,c[f],f,c))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(b){var c=G(this),d=c.length>>>0,e=arguments[1];if(h(b)!="[object Function]")throw new TypeError;for(var f=0;f<d;f++)if(f in c&&b.call(e,c[f],f,c))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(b){var c=G(this),d=c.length>>>0;if(h(b)!="[object Function]")throw new TypeError;if(!d&&arguments.length==1)throw new TypeError;var e=0,f;if(arguments.length>=2)f=arguments[1];else do{if(e in c){f=c[e++];break}if(++e>=d)throw new TypeError}while(!0);for(;e<d;e++)e in c&&(f=b.call(void 0,f,c[e],e,c));return f}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(b){var c=G(this),d=c.length>>>0;if(h(b)!="[object Function]")throw new TypeError;if(!d&&arguments.length==1)throw new TypeError;var e,f=d-1;if(arguments.length>=2)e=arguments[1];else do{if(f in c){e=c[f--];break}if(--f<0)throw new TypeError}while(!0);do f in this&&(e=b.call(void 0,e,c[f],f,c));while(f--);return e}),Array.prototype.indexOf||(Array.prototype.indexOf=function(b){var c=G(this),d=c.length>>>0;if(!d)return-1;var e=0;arguments.length>1&&(e=E(arguments[1])),e=e>=0?e:Math.max(0,d+e);for(;e<d;e++)if(e in c&&c[e]===b)return e;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(b){var c=G(this),d=c.length>>>0;if(!d)return-1;var e=d-1;arguments.length>1&&(e=Math.min(e,E(arguments[1]))),e=e>=0?e:d-Math.abs(e);for(;e>=0;e--)if(e in c&&b===c[e])return e;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(b){return b.__proto__||(b.constructor?b.constructor.prototype:f)});if(!Object.getOwnPropertyDescriptor){var o="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(b,c){if(typeof b!="object"&&typeof b!="function"||b===null)throw new TypeError(o+b);if(!i(b,c))return;var d,e,g;d={enumerable:!0,configurable:!0};if(n){var h=b.__proto__;b.__proto__=f;var e=l(b,c),g=m(b,c);b.__proto__=h;if(e||g)return e&&(d.get=e),g&&(d.set=g),d}return d.value=b[c],d}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(b){return Object.keys(b)}),Object.create||(Object.create=function(b,c){var d;if(b===null)d={__proto__:null};else{if(typeof b!="object")throw new TypeError("typeof prototype["+typeof b+"] != 'object'");var e=function(){};e.prototype=b,d=new e,d.__proto__=b}return c!==void 0&&Object.defineProperties(d,c),d});if(Object.defineProperty){var q=p({}),r=typeof document=="undefined"||p(document.createElement("div"));if(!q||!r)var s=Object.defineProperty}if(!Object.defineProperty||s){var t="Property description must be an object: ",u="Object.defineProperty called on non-object: ",v="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(b,c,d){if(typeof b!="object"&&typeof b!="function"||b===null)throw new TypeError(u+b);if(typeof d!="object"&&typeof d!="function"||d===null)throw new TypeError(t+d);if(s)try{return s.call(Object,b,c,d)}catch(e){}if(i(d,"value"))if(n&&(l(b,c)||m(b,c))){var g=b.__proto__;b.__proto__=f,delete b[c],b[c]=d.value,b.__proto__=g}else b[c]=d.value;else{if(!n)throw new TypeError(v);i(d,"get")&&j(b,c,d.get),i(d,"set")&&k(b,c,d.set)}return b}}Object.defineProperties||(Object.defineProperties=function(b,c){for(var d in c)i(c,d)&&Object.defineProperty(b,d,c[d]);return b}),Object.seal||(Object.seal=function(b){return b}),Object.freeze||(Object.freeze=function(b){return b});try{Object.freeze(function(){})}catch(w){Object.freeze=function(b){return function(c){return typeof c=="function"?c:b(c)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(b){return b}),Object.isSealed||(Object.isSealed=function(b){return!1}),Object.isFrozen||(Object.isFrozen=function(b){return!1}),Object.isExtensible||(Object.isExtensible=function(b){if(Object(b)===b)throw new TypeError;var c="";while(i(b,c))c+="?";b[c]=!0;var d=i(b,c);return delete b[c],d});if(!Object.keys){var x=!0,y=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],z=y.length;for(var A in{toString:null})x=!1;Object.keys=function H(a){if(typeof a!="object"&&typeof a!="function"||a===null)throw new TypeError("Object.keys called on a non-object");var H=[];for(var b in a)i(a,b)&&H.push(b);if(x)for(var c=0,d=z;c<d;c++){var e=y[c];i(a,e)&&H.push(e)}return H}}if(!Date.prototype.toISOString||(new Date(-621987552e5)).toISOString().indexOf("-000001")===-1)Date.prototype.toISOString=function(){var b,c,d,e;if(!isFinite(this))throw new RangeError;b=[this.getUTCMonth()+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()],e=this.getUTCFullYear(),e=(e<0?"-":e>9999?"+":"")+("00000"+Math.abs(e)).slice(0<=e&&e<=9999?-4:-6),c=b.length;while(c--)d=b[c],d<10&&(b[c]="0"+d);return e+"-"+b.slice(0,2).join("-")+"T"+b.slice(2).join(":")+"."+("000"+this.getUTCMilliseconds()).slice(-3)+"Z"};Date.now||(Date.now=function(){return(new Date).getTime()}),Date.prototype.toJSON||(Date.prototype.toJSON=function(b){if(typeof this.toISOString!="function")throw new TypeError;return this.toISOString()}),Date.parse("+275760-09-13T00:00:00.000Z")!==864e13&&(Date=function(a){var b=function e(b,c,d,f,g,h,i){var j=arguments.length;if(this instanceof a){var k=j==1&&String(b)===b?new a(e.parse(b)):j>=7?new a(b,c,d,f,g,h,i):j>=6?new a(b,c,d,f,g,h):j>=5?new a(b,c,d,f,g):j>=4?new a(b,c,d,f):j>=3?new a(b,c,d):j>=2?new a(b,c):j>=1?new a(b):new a;return k.constructor=e,k}return a.apply(this,arguments)},c=new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$");for(var d in a)b[d]=a[d];return b.now=a.now,b.UTC=a.UTC,b.prototype=a.prototype,b.prototype.constructor=b,b.parse=function(d){var e=c.exec(d);if(e){e.shift();for(var f=1;f<7;f++)e[f]=+(e[f]||(f<3?1:0)),f==1&&e[f]--;var g=+e.pop(),h=+e.pop(),i=e.pop(),j=0;if(i){if(h>23||g>59)return NaN;j=(h*60+g)*6e4*(i=="+"?-1:1)}var k=+e[0];return 0<=k&&k<=99?(e[0]=k+400,a.UTC.apply(this,e)+j-126227808e5):a.UTC.apply(this,e)+j}return a.parse.apply(this,arguments)},b}(Date));var B=" \n \f\r   ᠎ â€â€‚         âŸã€€\u2028\u2029";if(!String.prototype.trim||B.trim()){B="["+B+"]";var C=new RegExp("^"+B+B+"*"),D=new RegExp(B+B+"*$");String.prototype.trim=function(){return String(this).replace(C,"").replace(D,"")}}var E=function(a){return a=+a,a!==a?a=0:a!==0&&a!==1/0&&a!==-Infinity&&(a=(a>0||-1)*Math.floor(Math.abs(a))),a},F="a"[0]!="a",G=function(a){if(a==null)throw new TypeError;return F&&typeof a=="string"&&a?a.split(""):Object(a)}}),define("ace/lib/dom",["require","exports","module"],function(a,b,c){"use strict";var d="http://www.w3.org/1999/xhtml";b.createElement=function(a,b){return document.createElementNS?document.createElementNS(b||d,a):document.createElement(a)},b.setText=function(a,b){a.innerText!==undefined&&(a.innerText=b),a.textContent!==undefined&&(a.textContent=b)},b.hasCssClass=function(a,b){var c=a.className.split(/\s+/g);return c.indexOf(b)!==-1},b.addCssClass=function(a,c){b.hasCssClass(a,c)||(a.className+=" "+c)},b.removeCssClass=function(a,b){var c=a.className.split(/\s+/g);for(;;){var d=c.indexOf(b);if(d==-1)break;c.splice(d,1)}a.className=c.join(" ")},b.toggleCssClass=function(a,b){var c=a.className.split(/\s+/g),d=!0;for(;;){var e=c.indexOf(b);if(e==-1)break;d=!1,c.splice(e,1)}return d&&c.push(b),a.className=c.join(" "),d},b.setCssClass=function(a,c,d){d?b.addCssClass(a,c):b.removeCssClass(a,c)},b.hasCssString=function(a,b){var c=0,d;b=b||document;if(b.createStyleSheet&&(d=b.styleSheets)){while(c<d.length)if(d[c++].owningElement.id===a)return!0}else if(d=b.getElementsByTagName("style"))while(c<d.length)if(d[c++].id===a)return!0;return!1},b.importCssString=function(c,e,f){f=f||document;if(e&&b.hasCssString(e,f))return null;var g;if(f.createStyleSheet)g=f.createStyleSheet(),g.cssText=c,e&&(g.owningElement.id=e);else{g=f.createElementNS?f.createElementNS(d,"style"):f.createElement("style"),g.appendChild(f.createTextNode(c)),e&&(g.id=e);var h=f.getElementsByTagName("head")[0]||f.documentElement;h.appendChild(g)}},b.importCssStylsheet=function(a,c){if(c.createStyleSheet)c.createStyleSheet(a);else{var d=b.createElement("link");d.rel="stylesheet",d.href=a;var e=c.getElementsByTagName("head")[0]||c.documentElement;e.appendChild(d)}},b.getInnerWidth=function(a){return parseInt(b.computedStyle(a,"paddingLeft"),10)+parseInt(b.computedStyle(a,"paddingRight"),10)+a.clientWidth},b.getInnerHeight=function(a){return parseInt(b.computedStyle(a,"paddingTop"),10)+parseInt(b.computedStyle(a,"paddingBottom"),10)+a.clientHeight},window.pageYOffset!==undefined?(b.getPageScrollTop=function(){return window.pageYOffset},b.getPageScrollLeft=function(){return window.pageXOffset}):(b.getPageScrollTop=function(){return document.body.scrollTop},b.getPageScrollLeft=function(){return document.body.scrollLeft}),window.getComputedStyle?b.computedStyle=function(a,b){return b?(window.getComputedStyle(a,"")||{})[b]||"":window.getComputedStyle(a,"")||{}}:b.computedStyle=function(a,b){return b?a.currentStyle[b]:a.currentStyle},b.scrollbarWidth=function(a){var c=b.createElement("p");c.style.width="100%",c.style.minWidth="0px",c.style.height="200px";var d=b.createElement("div"),e=d.style;e.position="absolute",e.left="-10000px",e.overflow="hidden",e.width="200px",e.minWidth="0px",e.height="150px",d.appendChild(c);var f=a.body||a.documentElement;f.appendChild(d);var g=c.offsetWidth;e.overflow="scroll";var h=c.offsetWidth;return g==h&&(h=d.clientWidth),f.removeChild(d),g-h},b.setInnerHtml=function(a,b){var c=a.cloneNode(!1);return c.innerHTML=b,a.parentNode.replaceChild(c,a),c},b.setInnerText=function(a,b){var c=a.ownerDocument;c.body&&"textContent"in c.body?a.textContent=b:a.innerText=b},b.getInnerText=function(a){var b=a.ownerDocument;return b.body&&"textContent"in b.body?a.textContent:a.innerText||a.textContent||""},b.getParentWindow=function(a){return a.defaultView||a.parentWindow}}),define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent","ace/lib/dom"],function(a,b,c){function g(a,b,c){var f=0;e.isOpera&&e.isMac?f=0|(b.metaKey?1:0)|(b.altKey?2:0)|(b.shiftKey?4:0)|(b.ctrlKey?8:0):f=0|(b.ctrlKey?1:0)|(b.altKey?2:0)|(b.shiftKey?4:0)|(b.metaKey?8:0);if(c in d.MODIFIER_KEYS){switch(d.MODIFIER_KEYS[c]){case"Alt":f=2;break;case"Shift":f=4;break;case"Ctrl":f=1;break;default:f=8}c=0}return f&8&&(c==91||c==93)&&(c=0),!!f||c in d.FUNCTION_KEYS||c in d.PRINTABLE_KEYS?a(b,f,c):!1}"use strict";var d=a("./keys"),e=a("./useragent"),f=a("./dom");b.addListener=function(a,b,c){if(a.addEventListener)return a.addEventListener(b,c,!1);if(a.attachEvent){var d=function(){c(window.event)};c._wrapper=d,a.attachEvent("on"+b,d)}},b.removeListener=function(a,b,c){if(a.removeEventListener)return a.removeEventListener(b,c,!1);a.detachEvent&&a.detachEvent("on"+b,c._wrapper||c)},b.stopEvent=function(a){return b.stopPropagation(a),b.preventDefault(a),!1},b.stopPropagation=function(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0},b.preventDefault=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1},b.getDocumentX=function(a){return a.clientX?a.clientX+f.getPageScrollLeft():a.pageX},b.getDocumentY=function(a){return a.clientY?a.clientY+f.getPageScrollTop():a.pageY},b.getButton=function(a){return a.type=="dblclick"?0:a.type=="contextmenu"?2:a.preventDefault?a.button:{1:0,2:2,4:1}[a.button]},document.documentElement.setCapture?b.capture=function(a,c,d){function e(a){return c(a),b.stopPropagation(a)}function g(e){c(e),f||(f=!0,d(e)),b.removeListener(a,"mousemove",c),b.removeListener(a,"mouseup",g),b.removeListener(a,"losecapture",g),a.releaseCapture()}var f=!1;b.addListener(a,"mousemove",c),b.addListener(a,"mouseup",g),b.addListener(a,"losecapture",g),a.setCapture()}:b.capture=function(a,b,c){function d(a){b(a),a.stopPropagation()}function e(a){b&&b(a),c&&c(a),document.removeEventListener("mousemove",d,!0),document.removeEventListener("mouseup",e,!0),a.stopPropagation()}document.addEventListener("mousemove",d,!0),document.addEventListener("mouseup",e,!0)},b.addMouseWheelListener=function(a,c){var d=8,e=function(a){a.wheelDelta!==undefined?a.wheelDeltaX!==undefined?(a.wheelX=-a.wheelDeltaX/d,a.wheelY=-a.wheelDeltaY/d):(a.wheelX=0,a.wheelY=-a.wheelDelta/d):a.axis&&a.axis==a.HORIZONTAL_AXIS?(a.wheelX=(a.detail||0)*5,a.wheelY=0):(a.wheelX=0,a.wheelY=(a.detail||0)*5),c(a)};b.addListener(a,"DOMMouseScroll",e),b.addListener(a,"mousewheel",e)},b.addMultiMouseDownListener=function(a,c,d,f,g){var h=0,i,j,k=function(a){h+=1,h==1&&(i=a.clientX,j=a.clientY,setTimeout(function(){h=0},f||600));var e=b.getButton(a)==c;if(!e||Math.abs(a.clientX-i)>5||Math.abs(a.clientY-j)>5)h=0;h==d&&(h=0,g(a));if(e)return b.preventDefault(a)};b.addListener(a,"mousedown",k),e.isOldIE&&b.addListener(a,"dblclick",k)},b.addCommandKeyListener=function(a,c){var d=b.addListener;if(e.isOldGecko||e.isOpera){var f=null;d(a,"keydown",function(a){f=a.keyCode}),d(a,"keypress",function(a){return g(c,a,f)})}else{var h=null;d(a,"keydown",function(a){return h=a.keyIdentifier||a.keyCode,g(c,a,a.keyCode)})}};if(window.postMessage){var h=1;b.nextTick=function(a,c){c=c||window;var d="zero-timeout-message-"+h;b.addListener(c,"message",function e(f){f.data==d&&(b.stopPropagation(f),b.removeListener(c,"message",e),a())}),c.postMessage(d,"*")}}else b.nextTick=function(a,b){b=b||window,window.setTimeout(a,0)}}),define("ace/lib/keys",["require","exports","module","ace/lib/oop"],function(a,b,c){"use strict";var d=a("./oop"),e=function(){var a={MODIFIER_KEYS:{16:"Shift",17:"Ctrl",18:"Alt",224:"Meta"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,meta:8,command:8},FUNCTION_KEYS:{8:"Backspace",9:"Tab",13:"Return",19:"Pause",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"Print",45:"Insert",46:"Delete",96:"Numpad0",97:"Numpad1",98:"Numpad2",99:"Numpad3",100:"Numpad4",101:"Numpad5",102:"Numpad6",103:"Numpad7",104:"Numpad8",105:"Numpad9",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"Numlock",145:"Scrolllock"},PRINTABLE_KEYS:{32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",61:"=",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",107:"+",109:"-",110:".",188:",",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:'"'}};for(var b in a.FUNCTION_KEYS){var c=a.FUNCTION_KEYS[b].toUpperCase();a[c]=parseInt(b,10)}return d.mixin(a,a.MODIFIER_KEYS),d.mixin(a,a.PRINTABLE_KEYS),d.mixin(a,a.FUNCTION_KEYS),a}();d.mixin(b,e),b.keyCodeToString=function(a){return(e[a]||String.fromCharCode(a)).toLowerCase()}}),define("ace/lib/oop",["require","exports","module"],function(a,b,c){"use strict",b.inherits=function(){var a=function(){};return function(b,c){a.prototype=c.prototype,b.super_=c.prototype,b.prototype=new a,b.prototype.constructor=b}}(),b.mixin=function(a,b){for(var c in b)a[c]=b[c]},b.implement=function(a,c){b.mixin(a,c)}}),define("ace/lib/useragent",["require","exports","module"],function(a,b,c){"use strict";var d=(navigator.platform.match(/mac|win|linux/i)||["other"])[0].toLowerCase(),e=navigator.userAgent;b.isWin=d=="win",b.isMac=d=="mac",b.isLinux=d=="linux",b.isIE=navigator.appName=="Microsoft Internet Explorer"&&parseFloat(navigator.userAgent.match(/MSIE ([0-9]+[\.0-9]+)/)[1]),b.isOldIE=b.isIE&&b.isIE<9,b.isGecko=b.isMozilla=window.controllers&&window.navigator.product==="Gecko",b.isOldGecko=b.isGecko&&parseInt((navigator.userAgent.match(/rv\:(\d+)/)||[])[1],10)<4,b.isOpera=window.opera&&Object.prototype.toString.call(window.opera)=="[object Opera]",b.isWebKit=parseFloat(e.split("WebKit/")[1])||undefined,b.isChrome=parseFloat(e.split(" Chrome/")[1])||undefined,b.isAIR=e.indexOf("AdobeAIR")>=0,b.isIPad=e.indexOf("iPad")>=0,b.isTouchPad=e.indexOf("TouchPad")>=0,b.OS={LINUX:"LINUX",MAC:"MAC",WINDOWS:"WINDOWS"},b.getOS=function(){return b.isMac?b.OS.MAC:b.isLinux?b.OS.LINUX:b.OS.WINDOWS}}),define("ace/editor",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/oop","ace/lib/lang","ace/lib/useragent","ace/keyboard/textinput","ace/mouse/mouse_handler","ace/mouse/fold_handler","ace/keyboard/keybinding","ace/edit_session","ace/search","ace/range","ace/lib/event_emitter","ace/commands/command_manager","ace/commands/default_commands"],function(a,b,c){"use strict",a("./lib/fixoldbrowsers");var d=a("./lib/oop"),e=a("./lib/lang"),f=a("./lib/useragent"),g=a("./keyboard/textinput").TextInput,h=a("./mouse/mouse_handler").MouseHandler,i=a("./mouse/fold_handler").FoldHandler,j=a("./keyboard/keybinding").KeyBinding,k=a("./edit_session").EditSession,l=a("./search").Search,m=a("./range").Range,n=a("./lib/event_emitter").EventEmitter,o=a("./commands/command_manager").CommandManager,p=a("./commands/default_commands").commands,q=function(a,b){var c=a.getContainerElement();this.container=c,this.renderer=a,this.textInput=new g(a.getTextAreaContainer(),this),this.keyBinding=new j(this),f.isIPad||(this.$mouseHandler=new h(this),new i(this)),this.$blockScrolling=0,this.$search=(new l).set({wrap:!0}),this.commands=new o(f.isMac?"mac":"win",p),this.setSession(b||new k(""))};(function(){d.implement(this,n),this.setKeyboardHandler=function(a){this.keyBinding.setKeyboardHandler(a)},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(a){if(this.session==a)return;if(this.session){var b=this.session;this.session.removeEventListener("change",this.$onDocumentChange),this.session.removeEventListener("changeMode",this.$onChangeMode),this.session.removeEventListener("tokenizerUpdate",this.$onTokenizerUpdate),this.session.removeEventListener("changeTabSize",this.$onChangeTabSize),this.session.removeEventListener("changeWrapLimit",this.$onChangeWrapLimit),this.session.removeEventListener("changeWrapMode",this.$onChangeWrapMode),this.session.removeEventListener("onChangeFold",this.$onChangeFold),this.session.removeEventListener("changeFrontMarker",this.$onChangeFrontMarker),this.session.removeEventListener("changeBackMarker",this.$onChangeBackMarker),this.session.removeEventListener("changeBreakpoint",this.$onChangeBreakpoint),this.session.removeEventListener("changeAnnotation",this.$onChangeAnnotation),this.session.removeEventListener("changeOverwrite",this.$onCursorChange),this.session.removeEventListener("changeScrollTop",this.$onScrollTopChange),this.session.removeEventListener("changeLeftTop",this.$onScrollLeftChange);var c=this.session.getSelection();c.removeEventListener("changeCursor",this.$onCursorChange),c.removeEventListener("changeSelection",this.$onSelectionChange)}this.session=a,this.$onDocumentChange=this.onDocumentChange.bind(this),a.addEventListener("change",this.$onDocumentChange),this.renderer.setSession(a),this.$onChangeMode=this.onChangeMode.bind(this),a.addEventListener("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),a.addEventListener("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.updateText.bind(this.renderer),a.addEventListener("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),a.addEventListener("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),a.addEventListener("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),a.addEventListener("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.addEventListener("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.addEventListener("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.addEventListener("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.addEventListener("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.addEventListener("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.addEventListener("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.addEventListener("changeScrollLeft",this.$onScrollLeftChange),this.selection=a.getSelection(),this.selection.addEventListener("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.addEventListener("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull(),this._emit("changeSession",{session:a,oldSession:b})},this.getSession=function(){return this.session},this.getSelection=function(){return this.selection},this.resize=function(){this.renderer.onResize()},this.setTheme=function(a){this.renderer.setTheme(a)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(a){this.renderer.setStyle(a)},this.unsetStyle=function(a){this.renderer.unsetStyle(a)},this.setFontSize=function(a){this.container.style.fontSize=a,this.renderer.updateFontSize()},this.$highlightBrackets=function(){this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null);if(this.$highlightPending)return;var a=this;this.$highlightPending=!0,setTimeout(function(){a.$highlightPending=!1;var b=a.session.findMatchingBracket(a.getCursorPosition());if(b){var c=new m(b.row,b.column,b.row,b.column+1);a.session.$bracketHighlight=a.session.addMarker(c,"ace_bracket","text")}},10)},this.focus=function(){var a=this;setTimeout(function(){a.textInput.focus()}),this.textInput.focus()},this.isFocused=function(){return this.textInput.isFocused()},this.blur=function(){this.textInput.blur()},this.onFocus=function(){this.renderer.showCursor(),this.renderer.visualizeFocus(),this._emit("focus")},this.onBlur=function(){this.renderer.hideCursor(),this.renderer.visualizeBlur(),this._emit("blur")},this.onDocumentChange=function(a){var b=a.data,c=b.range,d;c.start.row==c.end.row&&b.action!="insertLines"&&b.action!="removeLines"?d=c.end.row:d=Infinity,this.renderer.updateLines(c.start.row,d),this._emit("change",a),this.onCursorChange()},this.onTokenizerUpdate=function(a){var b=a.data;this.renderer.updateLines(b.first,b.last)},this.onScrollTopChange=function(){this.renderer.scrollToY(this.session.getScrollTop())},this.onScrollLeftChange=function(){this.renderer.scrollToX(this.session.getScrollLeft())},this.onCursorChange=function(){this.renderer.updateCursor(),this.$blockScrolling||this.renderer.scrollCursorIntoView(),this.renderer.moveTextAreaToCursor(this.textInput.getElement()),this.$highlightBrackets(),this.$updateHighlightActiveLine()},this.$updateHighlightActiveLine=function(){var a=this.getSession();a.$highlightLineMarker&&a.removeMarker(a.$highlightLineMarker),typeof this.$lastrow=="number"&&this.renderer.removeGutterDecoration(this.$lastrow,"ace_gutter_active_line"),a.$highlightLineMarker=null,this.$lastrow=null;if(this.getHighlightActiveLine()){var b=this.getCursorPosition(),c=this.session.getFoldLine(b.row);if(this.getSelectionStyle()!="line"||!this.selection.isMultiLine()){var d;c?d=new m(c.start.row,0,c.end.row+1,0):d=new m(b.row,0,b.row+1,0),a.$highlightLineMarker=a.addMarker(d,"ace_active_line","background")}this.renderer.addGutterDecoration(this.$lastrow=b.row,"ace_gutter_active_line")}},this.onSelectionChange=function(a){var b=this.getSession();b.$selectionMarker&&b.removeMarker(b.$selectionMarker),b.$selectionMarker=null;if(!this.selection.isEmpty()){var c=this.selection.getRange(),d=this.getSelectionStyle();b.$selectionMarker=b.addMarker(c,"ace_selection",d)}else this.$updateHighlightActiveLine();this.$highlightSelectedWord&&this.session.getMode().highlightSelection(this)},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.setBreakpoints(this.session.getBreakpoints())},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(){this.renderer.updateText()},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getCopyText=function(){var a="";return this.selection.isEmpty()||(a=this.session.getTextRange(this.getSelectionRange())),this._emit("copy",a),a},this.onCut=function(){this.commands.exec("cut",this)},this.insert=function(a){var b=this.session,c=b.getMode(),d=this.getCursorPosition();if(this.getBehavioursEnabled()){var e=c.transformAction(b.getState(d.row),"insertion",this,b,a);e&&(a=e.text)}a=a.replace(" ",this.session.getTabString());if(!this.selection.isEmpty())d=this.session.remove(this.getSelectionRange()),this.clearSelection();else if(this.session.getOverwrite()){var f=new m.fromPoints(d,d);f.end.column+=a.length,this.session.remove(f)}this.clearSelection();var g=d.column,h=b.getState(d.row),i=c.checkOutdent(h,b.getLine(d.row),a),j=b.getLine(d.row),k=c.getNextLineIndent(h,j.slice(0,d.column),b.getTabString()),l=b.insert(d,a);e&&e.selection&&(e.selection.length==2?this.selection.setSelectionRange(new m(d.row,g+e.selection[0],d.row,g+e.selection[1])):this.selection.setSelectionRange(new m(d.row+e.selection[0],e.selection[1],d.row+e.selection[2],e.selection[3])));var h=b.getState(d.row);if(b.getDocument().isNewLine(a)){this.moveCursorTo(d.row+1,0);var n=b.getTabSize(),o=Number.MAX_VALUE;for(var p=d.row+1;p<=l.row;++p){var q=0;j=b.getLine(p);for(var r=0;r<j.length;++r)if(j.charAt(r)==" ")q+=n;else{if(j.charAt(r)!=" ")break;q+=1}/[^\s]/.test(j)&&(o=Math.min(q,o))}for(var p=d.row+1;p<=l.row;++p){var s=o;j=b.getLine(p);for(var r=0;r<j.length&&s>0;++r)j.charAt(r)==" "?s-=n:j.charAt(r)==" "&&(s-=1);b.remove(new m(p,0,p,r))}b.indentRows(d.row+1,l.row,k)}i&&c.autoOutdent(h,b,d.row)},this.onTextInput=function(a,b){b&&this._emit("paste",a),this.keyBinding.onTextInput(a,b)},this.onCommandKey=function(a,b,c){this.keyBinding.onCommandKey(a,b,c)},this.setOverwrite=function(a){this.session.setOverwrite(a)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(a){this.$mouseHandler.setScrollSpeed(a)},this.getScrollSpeed=function(){return this.$mouseHandler.getScrollSpeed()},this.setDragDelay=function(a){this.$mouseHandler.setDragDelay(a)},this.getDragDelay=function(){return this.$mouseHandler.getDragDelay()},this.$selectionStyle="line",this.setSelectionStyle=function(a){if(this.$selectionStyle==a)return;this.$selectionStyle=a,this.onSelectionChange(),this._emit("changeSelectionStyle",{data:a})},this.getSelectionStyle=function(){return this.$selectionStyle},this.$highlightActiveLine=!0,this.setHighlightActiveLine=function(a){if(this.$highlightActiveLine==a)return;this.$highlightActiveLine=a,this.$updateHighlightActiveLine()},this.getHighlightActiveLine=function(){return this.$highlightActiveLine},this.$highlightSelectedWord=!0,this.setHighlightSelectedWord=function(a){if(this.$highlightSelectedWord==a)return;this.$highlightSelectedWord=a,a?this.session.getMode().highlightSelection(this):this.session.getMode().clearSelectionHighlight(this)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(a){this.renderer.setAnimatedScroll(a)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(a){if(this.getShowInvisibles()==a)return;this.renderer.setShowInvisibles(a)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setShowPrintMargin=function(a){this.renderer.setShowPrintMargin(a)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(a){this.renderer.setPrintMarginColumn(a)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.$readOnly=!1,this.setReadOnly=function(a){this.$readOnly=a},this.getReadOnly=function(){return this.$readOnly},this.$modeBehaviours=!0,this.setBehavioursEnabled=function(a){this.$modeBehaviours=a},this.getBehavioursEnabled=function(){return this.$modeBehaviours},this.setShowFoldWidgets=function(a){var b=this.renderer.$gutterLayer;if(b.getShowFoldWidgets()==a)return;this.renderer.$gutterLayer.setShowFoldWidgets(a),this.$showFoldWidgets=a,this.renderer.updateFull()},this.getShowFoldWidgets=function(){return this.renderer.$gutterLayer.getShowFoldWidgets()},this.remove=function(a){this.selection.isEmpty()&&(a=="left"?this.selection.selectLeft():this.selection.selectRight());var b=this.getSelectionRange();if(this.getBehavioursEnabled()){var c=this.session,d=c.getState(b.start.row),e=c.getMode().transformAction(d,"deletion",this,c,b);e&&(b=e)}this.session.remove(b),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var a=this.getSelectionRange();a.start.column==a.end.column&&a.start.row==a.end.row&&(a.end.column=0,a.end.row++),this.session.remove(a),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var a=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(a)},this.transposeLetters=function(){if(!this.selection.isEmpty())return;var a=this.getCursorPosition(),b=a.column;if(b===0)return;var c=this.session.getLine(a.row),d,e;b<c.length?(d=c.charAt(b)+c.charAt(b-1),e=new m(a.row,b-1,a.row,b+1)):(d=c.charAt(b-1)+c.charAt(b-2),e=new m(a.row,b-2,a.row,b)),this.session.replace(e,d)},this.toLowerCase=function(){var a=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var b=this.getSelectionRange(),c=this.session.getTextRange(b);this.session.replace(b,c.toLowerCase()),this.selection.setSelectionRange(a)},this.toUpperCase=function(){var a=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var b=this.getSelectionRange(),c=this.session.getTextRange(b);this.session.replace(b,c.toUpperCase()),this.selection.setSelectionRange(a)},this.indent=function(){var a=this.session,b=this.getSelectionRange();if(!(b.start.row<b.end.row||b.start.column<b.end.column)){var d;if(this.session.getUseSoftTabs()){var f=a.getTabSize(),g=this.getCursorPosition(),h=a.documentToScreenColumn(g.row,g.column),i=f-h%f;d=e.stringRepeat(" ",i)}else d=" ";return this.insert(d)}var c=this.$getSelectedRows();a.indentRows(c.first,c.last," ")},this.blockOutdent=function(){var a=this.session.getSelection();this.session.outdentRows(a.getRange())},this.toggleCommentLines=function(){var a=this.session.getState(this.getCursorPosition().row),b=this.$getSelectedRows();this.session.getMode().toggleCommentLines(a,this.session,b.first,b.last)},this.removeLines=function(){var a=this.$getSelectedRows(),b;a.first===0||a.last+1<this.session.getLength()?b=new m(a.first,0,a.last+1,0):b=new m(a.first-1,this.session.getLine(a.first-1).length,a.last,this.session.getLine(a.last).length),this.session.remove(b),this.clearSelection()},this.moveLinesDown=function(){this.$moveLines(function(a,b){return this.session.moveLinesDown(a,b)})},this.moveLinesUp=function(){this.$moveLines(function(a,b){return this.session.moveLinesUp(a,b)})},this.moveText=function(a,b){return this.$readOnly?null:this.session.moveText(a,b)},this.copyLinesUp=function(){this.$moveLines(function(a,b){return this.session.duplicateLines(a,b),0})},this.copyLinesDown=function(){this.$moveLines(function(a,b){return this.session.duplicateLines(a,b)})},this.$moveLines=function(a){var b=this.$getSelectedRows(),c=this.selection;if(!c.isMultiLine())var d=c.getRange(),e=c.isBackwards();var f=a.call(this,b.first,b.last);d?(d.start.row+=f,d.end.row+=f,c.setSelectionRange(d,e)):(c.setSelectionAnchor(b.last+f+1,0),c.$moveSelection(function(){c.moveCursorTo(b.first+f,0)}))},this.$getSelectedRows=function(){var a=this.getSelectionRange().collapseRows();return{first:a.start.row,last:a.end.row}},this.onCompositionStart=function(a){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(a){this.renderer.setCompositionText(a)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(a){return a>=this.getFirstVisibleRow()&&a<=this.getLastVisibleRow()},this.isRowFullyVisible=function(a){return a>=this.renderer.getFirstFullyVisibleRow()&&a<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$getPageDownRow=function(){return this.renderer.getScrollBottomRow()},this.$getPageUpRow=function(){var a=this.renderer.getScrollTopRow(),b=this.renderer.getScrollBottomRow();return a-(b-a)},this.selectPageDown=function(){var a=this.$getPageDownRow()+Math.floor(this.$getVisibleRowCount()/2);this.scrollPageDown();var b=this.getSelection(),c=this.session.documentToScreenPosition(b.getSelectionLead()),d=this.session.screenToDocumentPosition(a,c.column);b.selectTo(d.row,d.column)},this.selectPageUp=function(){var a=this.renderer.getScrollTopRow()-this.renderer.getScrollBottomRow(),b=this.$getPageUpRow()+Math.round(a/2);this.scrollPageUp();var c=this.getSelection(),d=this.session.documentToScreenPosition(c.getSelectionLead()),e=this.session.screenToDocumentPosition(b,d.column);c.selectTo(e.row,e.column)},this.gotoPageDown=function(){var a=this.$getPageDownRow(),b=this.getCursorPositionScreen().column;this.scrollToRow(a),this.getSelection().moveCursorToScreen(a,b)},this.gotoPageUp=function(){var a=this.$getPageUpRow(),b=this.getCursorPositionScreen().column;this.scrollToRow(a),this.getSelection().moveCursorToScreen(a,b)},this.scrollPageDown=function(){this.scrollToRow(this.$getPageDownRow())},this.scrollPageUp=function(){this.renderer.scrollToRow(this.$getPageUpRow())},this.scrollToRow=function(a){this.renderer.scrollToRow(a)},this.scrollToLine=function(a,b){this.renderer.scrollToLine(a,b)},this.centerSelection=function(){var a=this.getSelectionRange(),b=Math.floor(a.start.row+(a.end.row-a.start.row)/2);this.renderer.scrollToLine(b,!0)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(a,b){this.selection.moveCursorTo(a,b)},this.moveCursorToPosition=function(a){this.selection.moveCursorToPosition(a)},this.jumpToMatching=function(){var a=this.getCursorPosition(),b=this.session.findMatchingBracket(a);b||(a.column+=1,b=this.session.findMatchingBracket(a)),b||(a.column-=2,b=this.session.findMatchingBracket(a)),b&&(this.clearSelection(),this.moveCursorTo(b.row,b.column))},this.gotoLine=function(a,b){this.selection.clearSelection(),this.session.unfold({row:a-1,column:b||0}),this.$blockScrolling+=1,this.moveCursorTo(a-1,b||0),this.$blockScrolling-=1,this.isRowFullyVisible(this.getCursorPosition().row)||this.scrollToLine(a,!0)},this.navigateTo=function(a,b){this.clearSelection(),this.moveCursorTo(a,b)},this.navigateUp=function(a){this.selection.clearSelection(),a=a||1,this.selection.moveCursorBy(-a,0)},this.navigateDown=function(a){this.selection.clearSelection(),a=a||1,this.selection.moveCursorBy(a,0)},this.navigateLeft=function(a){if(!this.selection.isEmpty()){var b=this.getSelectionRange().start;this.moveCursorToPosition(b)}else{a=a||1;while(a--)this.selection.moveCursorLeft()}this.clearSelection()},this.navigateRight=function(a){if(!this.selection.isEmpty()){var b=this.getSelectionRange().end;this.moveCursorToPosition(b)}else{a=a||1;while(a--)this.selection.moveCursorRight()}this.clearSelection()},this.navigateLineStart=function(){this.selection.moveCursorLineStart(),this.clearSelection()},this.navigateLineEnd=function(){this.selection.moveCursorLineEnd(),this.clearSelection()},this.navigateFileEnd=function(){this.selection.moveCursorFileEnd(),this.clearSelection()},this.navigateFileStart=function(){this.selection.moveCursorFileStart(),this.clearSelection()},this.navigateWordRight=function(){this.selection.moveCursorWordRight(),this.clearSelection()},this.navigateWordLeft=function(){this.selection.moveCursorWordLeft(),this.clearSelection()},this.replace=function(a,b){b&&this.$search.set(b);var c=this.$search.find(this.session),d=0;return c?(this.$tryReplace(c,a)&&(d=1),c!==null&&(this.selection.setSelectionRange(c),this.renderer.scrollSelectionIntoView(c.start,c.end)),d):d},this.replaceAll=function(a,b){b&&this.$search.set(b);var c=this.$search.findAll(this.session),d=0;if(!c.length)return d;var e=this.getSelectionRange();this.clearSelection(),this.selection.moveCursorTo(0,0),this.$blockScrolling+=1;for(var f=c.length-1;f>=0;--f)this.$tryReplace(c[f],a)&&d++;return this.selection.setSelectionRange(e),this.$blockScrolling-=1,d},this.$tryReplace=function(a,b){var c=this.session.getTextRange(a);return b=this.$search.replace(c,b),b!==null?(a.end=this.session.replace(a,b),a):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(a,b){this.clearSelection(),b=b||{},b.needle=a,this.$search.set(b),this.$find()},this.findNext=function(a){a=a||{},typeof a.backwards=="undefined"&&(a.backwards=!1),this.$search.set(a),this.$find()},this.findPrevious=function(a){a=a||{},typeof a.backwards=="undefined"&&(a.backwards=!0),this.$search.set(a),this.$find()},this.$find=function(a){this.selection.isEmpty()||this.$search.set({needle:this.session.getTextRange(this.getSelectionRange())}),typeof a!="undefined"&&this.$search.set({backwards:a});var b=this.$search.find(this.session);if(b){this.session.unfold(b),this.$blockScrolling+=1,this.selection.setSelectionRange(b),this.$blockScrolling-=1;if(this.getAnimatedScroll()){var c=this.getCursorPosition();this.isRowFullyVisible(c.row)||this.scrollToLine(c.row,!0)}else this.renderer.scrollSelectionIntoView(b.start,b.end)}},this.undo=function(){this.session.getUndoManager().undo()},this.redo=function(){this.session.getUndoManager().redo()},this.destroy=function(){this.renderer.destroy()}}).call(q.prototype),b.Editor=q}),define("ace/lib/lang",["require","exports","module"],function(a,b,c){"use strict",b.stringReverse=function(a){return a.split("").reverse().join("")},b.stringRepeat=function(a,b){return(new Array(b+1)).join(a)};var d=/^\s\s*/,e=/\s\s*$/;b.stringTrimLeft=function(a){return a.replace(d,"")},b.stringTrimRight=function(a){return a.replace(e,"")},b.copyObject=function(a){var b={};for(var c in a)b[c]=a[c];return b},b.copyArray=function(a){var b=[];for(var c=0,d=a.length;c<d;c++)a[c]&&typeof a[c]=="object"?b[c]=this.copyObject(a[c]):b[c]=a[c];return b},b.deepCopy=function(a){if(typeof a!="object")return a;var b=a.constructor();for(var c in a)typeof a[c]=="object"?b[c]=this.deepCopy(a[c]):b[c]=a[c];return b},b.arrayToMap=function(a){var b={};for(var c=0;c<a.length;c++)b[a[c]]=1;return b},b.arrayRemove=function(a,b){for(var c=0;c<=a.length;c++)b===a[c]&&a.splice(c,1)},b.escapeRegExp=function(a){return a.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},b.deferredCall=function(a){var b=null,c=function(){b=null,a()},d=function(a){return d.cancel(),b=setTimeout(c,a||0),d};return d.schedule=d,d.call=function(){return this.cancel(),a(),d},d.cancel=function(){return clearTimeout(b),b=null,d},d}}),define("ace/keyboard/textinput",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/lib/dom"],function(a,b,c){"use strict";var d=a("../lib/event"),e=a("../lib/useragent"),f=a("../lib/dom"),g=function(a,b){function l(){try{c.select()}catch(a){}}function m(a){if(!i){var d=a||c.value;if(d){d.charCodeAt(d.length-1)==g.charCodeAt(0)?(d=d.slice(0,-1),d&&b.onTextInput(d,j)):b.onTextInput(d,j);if(!v())return!1}}i=!1,j=!1,c.value=g,l()}function v(){return document.activeElement===c}var c=f.createElement("textarea");e.isTouchPad&&c.setAttribute("x-palm-disable-auto-cap",!0),c.style.left="-10000px",c.style.position="fixed",a.insertBefore(c,a.firstChild);var g=String.fromCharCode(0);m();var h=!1,i=!1,j=!1,k="",n=function(a){setTimeout(function(){h||m(a.data)},0)},o=function(a){if(e.isOldIE&&c.value.charCodeAt(0)>128)return;setTimeout(function(){h||m()},0)},p=function(a){h=!0,b.onCompositionStart(),e.isGecko||setTimeout(q,0)},q=function(){if(!h)return;b.onCompositionUpdate(c.value)},r=function(a){h=!1,b.onCompositionEnd()},s=function(a){i=!0;var d=b.getCopyText();d?c.value=d:a.preventDefault(),l(),setTimeout(function(){m()},0)},t=function(a){i=!0;var d=b.getCopyText();d?(c.value=d,b.onCut()):a.preventDefault(),l(),setTimeout(function(){m()},0)};d.addCommandKeyListener(c,b.onCommandKey.bind(b));if(e.isOldIE){var u={13:1,27:1};d.addListener(c,"keyup",function(a){h&&(!c.value||u[a.keyCode])&&setTimeout(r,0);if((c.value.charCodeAt(0)|0)<129)return;h?q():p()})}"onpropertychange"in c&&!("oninput"in c)?d.addListener(c,"propertychange",o):d.addListener(c,"input",n),d.addListener(c,"paste",function(a){j=!0,a.clipboardData&&a.clipboardData.getData?(m(a.clipboardData.getData("text/plain")),a.preventDefault()):o()}),"onbeforecopy"in c&&typeof clipboardData!="undefined"?(d.addListener(c,"beforecopy",function(a){var c=b.getCopyText();c?clipboardData.setData("Text",c):a.preventDefault()}),d.addListener(a,"keydown",function(a){if(a.ctrlKey&&a.keyCode==88){var c=b.getCopyText();c&&(clipboardData.setData("Text",c),b.onCut()),d.preventDefault(a)}})):(d.addListener(c,"copy",s),d.addListener(c,"cut",t)),d.addListener(c,"compositionstart",p),e.isGecko&&d.addListener(c,"text",q),e.isWebKit&&d.addListener(c,"keyup",q),d.addListener(c,"compositionend",r),d.addListener(c,"blur",function(){b.onBlur()}),d.addListener(c,"focus",function(){b.onFocus(),l()}),this.focus=function(){b.onFocus(),l(),c.focus()},this.blur=function(){c.blur()},this.isFocused=v,this.getElement=function(){return c},this.onContextMenu=function(a,b){a&&(k||(k=c.style.cssText),c.style.cssText="position:fixed; z-index:1000;left:"+(a.x-2)+"px; top:"+(a.y-2)+"px;"),b&&(c.value="")},this.onContextMenuClose=function(){setTimeout(function(){k&&(c.style.cssText=k,k=""),m()},0)}};b.TextInput=g}),define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event"],function(a,b,c){"use strict";var d=a("../lib/event"),e=a("./default_handlers").DefaultHandlers,f=a("./default_gutter_handler").GutterHandler,g=a("./mouse_event").MouseEvent,h=function(a){this.editor=a,new e(a),new f(a),d.addListener(a.container,"mousedown",function(b){return a.focus(),d.preventDefault(b)}),d.addListener(a.container,"selectstart",function(a){return d.preventDefault(a)});var b=a.renderer.getMouseEventTarget();d.addListener(b,"mousedown",this.onMouseEvent.bind(this,"mousedown")),d.addListener(b,"click",this.onMouseEvent.bind(this,"click")),d.addListener(b,"mousemove",this.onMouseMove.bind(this,"mousemove")),d.addMultiMouseDownListener(b,0,2,500,this.onMouseEvent.bind(this,"dblclick")),d.addMultiMouseDownListener(b,0,3,600,this.onMouseEvent.bind(this,"tripleclick")),d.addMultiMouseDownListener(b,0,4,600,this.onMouseEvent.bind(this,"quadclick")),d.addMouseWheelListener(a.container,this.onMouseWheel.bind(this,"mousewheel"));var c=a.renderer.$gutter;d.addListener(c,"mousedown",this.onMouseEvent.bind(this,"guttermousedown")),d.addListener(c,"click",this.onMouseEvent.bind(this,"gutterclick")),d.addListener(c,"dblclick",this.onMouseEvent.bind(this,"gutterdblclick")),d.addListener(c,"mousemove",this.onMouseMove.bind(this,"gutter"))};(function(){this.$scrollSpeed=1,this.setScrollSpeed=function(a){this.$scrollSpeed=a},this.getScrollSpeed=function(){return this.$scrollSpeed},this.onMouseEvent=function(a,b){this.editor._emit(a,new g(b,this.editor))},this.$dragDelay=250,this.setDragDelay=function(a){this.$dragDelay=a},this.getDragDelay=function(){return this.$dragDelay},this.onMouseMove=function(a,b){var c=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;if(!c||!c.length)return;this.editor._emit(a,new g(b,this.editor))},this.onMouseWheel=function(a,b){var c=new g(b,this.editor);c.speed=this.$scrollSpeed*2,c.wheelX=b.wheelX,c.wheelY=b.wheelY,this.editor._emit(a,c)}}).call(h.prototype),b.MouseHandler=h}),define("ace/mouse/default_handlers",["require","exports","module","ace/lib/event","ace/lib/dom","ace/lib/browser_focus"],function(a,b,c){function k(a){this.editor=a,this.$clickSelection=null,this.browserFocus=new f,a.setDefaultHandler("mousedown",this.onMouseDown.bind(this)),a.setDefaultHandler("dblclick",this.onDoubleClick.bind(this)),a.setDefaultHandler("tripleclick",this.onTripleClick.bind(this)),a.setDefaultHandler("quadclick",this.onQuadClick.bind(this)),a.setDefaultHandler("mousewheel",this.onScroll.bind(this))}function l(a,b,c,d){return Math.sqrt(Math.pow(c-a,2)+Math.pow(d-b,2))}"use strict";var d=a("../lib/event"),e=a("../lib/dom"),f=a("../lib/browser_focus").BrowserFocus,g=0,h=1,i=2,j=5;(function(){this.onMouseDown=function(a){function C(b){a.getShiftKey()?m.selection.selectToPosition(b):n.$clickSelection||(m.moveCursorToPosition(b),m.selection.clearSelection()),q=h}var b=a.inSelection(),c=a.pageX,f=a.pageY,k=a.getDocumentPosition(),m=this.editor,n=this,o=m.getSelectionRange(),p=o.isEmpty(),q=g;if(b&&(!this.browserFocus.isFocused()||(new Date).getTime()-this.browserFocus.lastFocus<20||!m.isFocused())){m.focus();return}var r=a.getButton();if(r!==0){p&&m.moveCursorToPosition(k),r==2&&(m.textInput.onContextMenu({x:a.clientX,y:a.clientY},p),d.capture(m.container,function(){},m.textInput.onContextMenuClose));return}b||C(k);var s=c,t=f,u=(new Date).getTime(),v,w,x,y=function(a){s=d.getDocumentX(a),t=d.getDocumentY(a)},z=function(a){clearInterval(F),q==g?C(k):q==i&&A(a),n.$clickSelection=null,q=g},A=function(a){e.removeCssClass(m.container,"ace_dragging"),m.session.removeMarker(x),m.$mouseHandler.$clickSelection||v||(m.moveCursorToPosition(k),m.selection.clearSelection());if(!v)return;if(w.contains(v.row,v.column)){v=null;return}m.clearSelection();if(a&&(a.ctrlKey||a.altKey))var b=m.session,c=b.insert(v,b.getTextRange(w));else var c=m.moveText(w,v);if(!c){v=null;return}m.selection.setSelectionRange(c)},B=function(){if(q==g){var a=l(c,f,s,t),b=(new Date).getTime();if(a>j){q=h;var d=m.renderer.screenToTextCoordinates(s,t);C(d)}else if(b-u>m.getDragDelay()){q=i,w=m.getSelectionRange();var k=m.getSelectionStyle();x=m.session.addMarker(w,"ace_selection",k),m.clearSelection(),e.addCssClass(m.container,"ace_dragging")}}q==i?E():q==h&&D()},D=function(){var a,b=m.renderer.screenToTextCoordinates(s,t);n.$clickSelection?n.$clickSelection.contains(b.row,b.column)?m.selection.setSelectionRange(n.$clickSelection):(n.$clickSelection.compare(b.row,b.column)==-1?a=n.$clickSelection.end:a=n.$clickSelection.start,m.selection.setSelectionAnchor(a.row,a.column),m.selection.selectToPosition(b)):m.selection.selectToPosition(b),m.renderer.scrollCursorIntoView()},E=function(){v=m.renderer.screenToTextCoordinates(s,t),m.moveCursorToPosition(v)};d.capture(m.container,y,z);var F=setInterval(B,20);return a.preventDefault()},this.onDoubleClick=function(a){var b=a.getDocumentPosition(),c=this.editor;c.moveCursorToPosition(b),c.selection.selectWord(),this.$clickSelection=c.getSelectionRange()},this.onTripleClick=function(a){var b=a.getDocumentPosition(),c=this.editor;c.moveCursorToPosition(b),c.selection.selectLine(),this.$clickSelection=c.getSelectionRange()},this.onQuadClick=function(a){var b=this.editor;b.selectAll(),this.$clickSelection=b.getSelectionRange()},this.onScroll=function(a){var b=this.editor;b.renderer.scrollBy(a.wheelX*a.speed,a.wheelY*a.speed);if(b.renderer.isScrollableBy(a.wheelX*a.speed,a.wheelY*a.speed))return a.preventDefault()}}).call(k.prototype),b.DefaultHandlers=k}),define("ace/lib/browser_focus",["require","exports","module","ace/lib/oop","ace/lib/event","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("./oop"),e=a("./event"),f=a("./event_emitter").EventEmitter,g=function(a){a=a||window,this.lastFocus=(new Date).getTime(),this._isFocused=!0;var b=this;"onfocusin"in a.document?(e.addListener(a.document,"focusin",function(a){b._setFocused(!0)}),e.addListener(a.document,"focusout",function(a){b._setFocused(!!a.toElement)})):(e.addListener(a,"blur",function(a){b._setFocused(!1)}),e.addListener(a,"focus",function(a){b._setFocused(!0)}))};(function(){d.implement(this,f),this.isFocused=function(){return this._isFocused},this._setFocused=function(a){if(this._isFocused==a)return;a&&(this.lastFocus=(new Date).getTime()),this._isFocused=a,this._emit("changeFocus")}}).call(g.prototype),b.BrowserFocus=g}),define("ace/lib/event_emitter",["require","exports","module"],function(a,b,c){"use strict";var d={};d._emit=d._dispatchEvent=function(a,b){this._eventRegistry=this._eventRegistry||{},this._defaultHandlers=this._defaultHandlers||{};var c=this._eventRegistry[a]||[],d=this._defaultHandlers[a];if(!c.length&&!d)return;b=b||{},b.type=a,b.stopPropagation||(b.stopPropagation=function(){this.propagationStopped=!0}),b.preventDefault||(b.preventDefault=function(){this.defaultPrevented=!0});for(var e=0;e<c.length;e++){c[e](b);if(b.propagationStopped)break}d&&!b.defaultPrevented&&d(b)},d.setDefaultHandler=function(a,b){this._defaultHandlers=this._defaultHandlers||{};if(this._defaultHandlers[a])throw new Error("The default handler for '"+a+"' is already set");this._defaultHandlers[a]=b},d.on=d.addEventListener=function(a,b){this._eventRegistry=this._eventRegistry||{};var c=this._eventRegistry[a];if(!c)var c=this._eventRegistry[a]=[];c.indexOf(b)==-1&&c.push(b)},d.removeListener=d.removeEventListener=function(a,b){this._eventRegistry=this._eventRegistry||{};var c=this._eventRegistry[a];if(!c)return;var d=c.indexOf(b);d!==-1&&c.splice(d,1)},d.removeAllListeners=function(a){this._eventRegistry&&(this._eventRegistry[a]=[])},b.EventEmitter=d}),define("ace/mouse/default_gutter_handler",["require","exports","module"],function(a,b,c){function d(a){a.setDefaultHandler("gutterclick",function(b){var c=b.getDocumentPosition().row,d=a.session.selection;d.moveCursorTo(c,0),d.selectLine()})}"use strict",b.GutterHandler=d}),define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event"],function(a,b,c){"use strict";var d=a("../lib/event"),e=b.MouseEvent=function(a,b){this.domEvent=a,this.editor=b,this.pageX=d.getDocumentX(a),this.pageY=d.getDocumentY(a),this.clientX=a.clientX,this.clientY=a.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){d.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){d.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){if(this.$pos)return this.$pos;var a=d.getDocumentX(this.domEvent),b=d.getDocumentY(this.domEvent);return this.$pos=this.editor.renderer.screenToTextCoordinates(a,b),this.$pos},this.inSelection=function(){if(this.$inSelection!==null)return this.$inSelection;var a=this.editor;if(a.getReadOnly())this.$inSelection=!1;else{var b=a.getSelectionRange();if(b.isEmpty())this.$inSelection=!1;else{var c=this.getDocumentPosition();this.$inSelection=b.contains(c.row,c.column)}}return this.$inSelection},this.getButton=function(){return d.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=function(){return this.domEvent.ctrlKey||this.domEvent.metaKey}}).call(e.prototype)}),define("ace/mouse/fold_handler",["require","exports","module"],function(a,b,c){function d(a){a.on("click",function(b){var c=b.getDocumentPosition(),d=a.session,e=d.getFoldAt(c.row,c.column,1);e&&(b.getAccelKey()?d.removeFold(e):d.expandFold(e),b.stop())}),a.on("gutterclick",function(b){if(b.domEvent.target.className.indexOf("ace_fold-widget")!=-1){var c=b.getDocumentPosition().row;a.session.onFoldWidgetClick(c,b.domEvent),b.stop()}})}"use strict",b.FoldHandler=d}),define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event","ace/commands/default_commands"],function(a,b,c){"use strict";var d=a("../lib/keys"),e=a("../lib/event");a("../commands/default_commands");var f=function(a){this.$editor=a,this.$data={},this.$handlers=[this]};(function(){this.setKeyboardHandler=function(a){if(this.$handlers[this.$handlers.length-1]==a)return;this.$data={},this.$handlers=a?[this,a]:[this]},this.addKeyboardHandler=function(a){this.removeKeyboardHandler(a),this.$handlers.push(a)},this.removeKeyboardHandler=function(a){var b=this.$handlers.indexOf(a);return b==-1?!1:(this.$handlers.splice(b,1),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.$callKeyboardHandlers=function(a,b,c,d){var f;for(var g=this.$handlers.length;g--;){f=this.$handlers[g].handleKeyboard(this.$data,a,b,c,d);if(f&&f.command)break}if(!f||!f.command)return!1;var h=!1,i=this.$editor.commands;return f.command!="null"?h=i.exec(f.command,this.$editor,f.args):h=!0,h&&d&&e.stopEvent(d),h},this.handleKeyboard=function(a,b,c){return{command:this.$editor.commands.findKeyCommand(b,c)}},this.onCommandKey=function(a,b,c){var e=d.keyCodeToString(c);this.$callKeyboardHandlers(b,e,c,a)},this.onTextInput=function(a,b){var c=!1;!b&&a.length==1&&(c=this.$callKeyboardHandlers(0,a)),c||this.$editor.commands.exec("insertstring",this.$editor,a)}}).call(f.prototype),b.KeyBinding=f}),define("ace/commands/default_commands",["require","exports","module","ace/lib/lang"],function(a,b,c){function e(a,b){return{win:a,mac:b}}"use strict";var d=a("../lib/lang");b.commands=[{name:"selectall",bindKey:e("Ctrl-A","Command-A"),exec:function(a){a.selectAll()},readOnly:!0},{name:"centerselection",bindKey:e(null,"Ctrl-L"),exec:function(a){a.centerSelection()},readOnly:!0},{name:"gotoline",bindKey:e("Ctrl-L","Command-L"),exec:function(a){var b=parseInt(prompt("Enter line number:"),10);isNaN(b)||a.gotoLine(b)},readOnly:!0},{name:"fold",bindKey:e("Alt-L","Alt-L"),exec:function(a){a.session.toggleFold(!1)},readOnly:!0},{name:"unfold",bindKey:e("Alt-Shift-L","Alt-Shift-L"),exec:function(a){a.session.toggleFold(!0)},readOnly:!0},{name:"foldall",bindKey:e("Alt-0","Alt-0"),exec:function(a){a.session.foldAll()},readOnly:!0},{name:"unfoldall",bindKey:e("Alt-Shift-0","Alt-Shift-0"),exec:function(a){a.session.unfold()},readOnly:!0},{name:"findnext",bindKey:e("Ctrl-K","Command-G"),exec:function(a){a.findNext()},readOnly:!0},{name:"findprevious",bindKey:e("Ctrl-Shift-K","Command-Shift-G"),exec:function(a){a.findPrevious()},readOnly:!0},{name:"find",bindKey:e("Ctrl-F","Command-F"),exec:function(a){var b=prompt("Find:",a.getCopyText());a.find(b)},readOnly:!0},{name:"overwrite",bindKey:e("Insert","Insert"),exec:function(a){a.toggleOverwrite()},readOnly:!0},{name:"selecttostart",bindKey:e("Ctrl-Shift-Home|Alt-Shift-Up","Command-Shift-Up"),exec:function(a){a.getSelection().selectFileStart()},readOnly:!0},{name:"gotostart",bindKey:e("Ctrl-Home|Ctrl-Up","Command-Home|Command-Up"),exec:function(a){a.navigateFileStart()},readOnly:!0},{name:"selectup",bindKey:e("Shift-Up","Shift-Up"),exec:function(a){a.getSelection().selectUp()},multiSelectAction:"forEach",readOnly:!0},{name:"golineup",bindKey:e("Up","Up|Ctrl-P"),exec:function(a,b){a.navigateUp(b.times)},multiSelectAction:"forEach",readOnly:!0},{name:"selecttoend",bindKey:e("Ctrl-Shift-End|Alt-Shift-Down","Command-Shift-Down"),exec:function(a){a.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0},{name:"gotoend",bindKey:e("Ctrl-End|Ctrl-Down","Command-End|Command-Down"),exec:function(a){a.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0},{name:"selectdown",bindKey:e("Shift-Down","Shift-Down"),exec:function(a){a.getSelection().selectDown()},multiSelectAction:"forEach",readOnly:!0},{name:"golinedown",bindKey:e("Down","Down|Ctrl-N"),exec:function(a,b){a.navigateDown(b.times)},multiSelectAction:"forEach",readOnly:!0},{name:"selectwordleft",bindKey:e("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(a){a.getSelection().selectWordLeft()},multiSelectAction:"forEach",readOnly:!0},{name:"gotowordleft",bindKey:e("Ctrl-Left","Option-Left"),exec:function(a){a.navigateWordLeft()},multiSelectAction:"forEach",readOnly:!0},{name:"selecttolinestart",bindKey:e("Alt-Shift-Left","Command-Shift-Left"),exec:function(a){a.getSelection().selectLineStart()},multiSelectAction:"forEach",readOnly:!0},{name:"gotolinestart",bindKey:e("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(a){a.navigateLineStart()},multiSelectAction:"forEach",readOnly:!0},{name:"selectleft",bindKey:e("Shift-Left","Shift-Left"),exec:function(a){a.getSelection().selectLeft()},multiSelectAction:"forEach",readOnly:!0},{name:"gotoleft",bindKey:e("Left","Left|Ctrl-B"),exec:function(a,b){a.navigateLeft(b.times)},multiSelectAction:"forEach",readOnly:!0},{name:"selectwordright",bindKey:e("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(a){a.getSelection().selectWordRight()},multiSelectAction:"forEach",readOnly:!0},{name:"gotowordright",bindKey:e("Ctrl-Right","Option-Right"),exec:function(a){a.navigateWordRight()},multiSelectAction:"forEach",readOnly:!0},{name:"selecttolineend",bindKey:e("Alt-Shift-Right","Command-Shift-Right"),exec:function(a){a.getSelection().selectLineEnd()},multiSelectAction:"forEach",readOnly:!0},{name:"gotolineend",bindKey:e("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(a){a.navigateLineEnd()},multiSelectAction:"forEach",readOnly:!0},{name:"selectright",bindKey:e("Shift-Right","Shift-Right"),exec:function(a){a.getSelection().selectRight()},multiSelectAction:"forEach",readOnly:!0},{name:"gotoright",bindKey:e("Right","Right|Ctrl-F"),exec:function(a,b){a.navigateRight(b.times)},multiSelectAction:"forEach",readOnly:!0},{name:"selectpagedown",bindKey:e("Shift-PageDown","Shift-PageDown"),exec:function(a){a.selectPageDown()},readOnly:!0},{name:"pagedown",bindKey:e(null,"PageDown"),exec:function(a){a.scrollPageDown()},readOnly:!0},{name:"gotopagedown",bindKey:e("PageDown","Option-PageDown|Ctrl-V"),exec:function(a){a.gotoPageDown()},readOnly:!0},{name:"selectpageup",bindKey:e("Shift-PageUp","Shift-PageUp"),exec:function(a){a.selectPageUp()},readOnly:!0},{name:"pageup",bindKey:e(null,"PageUp"),exec:function(a){a.scrollPageUp()},readOnly:!0},{name:"gotopageup",bindKey:e("PageUp","Option-PageUp"),exec:function(a){a.gotoPageUp()},readOnly:!0},{name:"selectlinestart",bindKey:e("Shift-Home","Shift-Home"),exec:function(a){a.getSelection().selectLineStart()},multiSelectAction:"forEach",readOnly:!0},{name:"selectlineend",bindKey:e("Shift-End","Shift-End"),exec:function(a){a.getSelection().selectLineEnd()},multiSelectAction:"forEach",readOnly:!0},{name:"togglerecording",bindKey:e("Ctrl-Alt-E","Command-Option-E"),exec:function(a){a.commands.toggleRecording()},readOnly:!0},{name:"replaymacro",bindKey:e("Ctrl-Shift-E","Command-Shift-E"),exec:function(a){a.commands.replay(a)},readOnly:!0},{name:"jumptomatching",bindKey:e("Ctrl-Shift-P","Ctrl-Shift-P"),exec:function(a){a.jumpToMatching()},multiSelectAction:"forEach",readOnly:!0},{name:"cut",exec:function(a){var b=a.getSelectionRange();a._emit("cut",b),a.selection.isEmpty()||(a.session.remove(b),a.clearSelection())},multiSelectAction:"forEach"},{name:"removeline",bindKey:e("Ctrl-D","Command-D"),exec:function(a){a.removeLines()},multiSelectAction:"forEach"},{name:"togglecomment",bindKey:e("Ctrl-7","Command-7"),exec:function(a){a.toggleCommentLines()},multiSelectAction:"forEach"},{name:"replace",bindKey:e("Ctrl-R","Command-Option-F"),exec:function(a){var b=prompt("Find:",a.getCopyText());if(!b)return;var c=prompt("Replacement:");if(!c)return;a.replace(c,{needle:b})}},{name:"replaceall",bindKey:e("Ctrl-Shift-R","Command-Shift-Option-F"),exec:function(a){var b=prompt("Find:");if(!b)return;var c=prompt("Replacement:");if(!c)return;a.replaceAll(c,{needle:b})}},{name:"undo",bindKey:e("Ctrl-Z","Command-Z"),exec:function(a){a.undo()}},{name:"redo",bindKey:e("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(a){a.redo()}},{name:"copylinesup",bindKey:e("Ctrl-Alt-Up","Command-Option-Up"),exec:function(a){a.copyLinesUp()}},{name:"movelinesup",bindKey:e("Alt-Up","Option-Up"),exec:function(a){a.moveLinesUp()}},{name:"copylinesdown",bindKey:e("Ctrl-Alt-Down","Command-Option-Down"),exec:function(a){a.copyLinesDown()}},{name:"movelinesdown",bindKey:e("Alt-Down","Option-Down"),exec:function(a){a.moveLinesDown()}},{name:"del",bindKey:e("Delete","Delete|Ctrl-D"),exec:function(a){a.remove("right")},multiSelectAction:"forEach"},{name:"backspace",bindKey:e("Command-Backspace|Option-Backspace|Shift-Backspace|Backspace","Ctrl-Backspace|Command-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(a){a.remove("left")},multiSelectAction:"forEach"},{name:"removetolinestart",bindKey:e("Alt-Backspace","Command-Backspace"),exec:function(a){a.removeToLineStart()},multiSelectAction:"forEach"},{name:"removetolineend",bindKey:e("Alt-Delete","Ctrl-K"),exec:function(a){a.removeToLineEnd()},multiSelectAction:"forEach"},{name:"removewordleft",bindKey:e("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(a){a.removeWordLeft()},multiSelectAction:"forEach"},{name:"removewordright",bindKey:e("Ctrl-Delete","Alt-Delete"),exec:function(a){a.removeWordRight()},multiSelectAction:"forEach"},{name:"outdent",bindKey:e("Shift-Tab","Shift-Tab"),exec:function(a){a.blockOutdent()},multiSelectAction:"forEach"},{name:"indent",bindKey:e("Tab","Tab"),exec:function(a){a.indent()},multiSelectAction:"forEach"},{name:"insertstring",exec:function(a,b){a.insert(b)},multiSelectAction:"forEach"},{name:"inserttext",exec:function(a,b){a.insert(d.stringRepeat(b.text||"",b.times||1))},multiSelectAction:"forEach"},{name:"splitline",bindKey:e(null,"Ctrl-O"),exec:function(a){a.splitLine()},multiSelectAction:"forEach"},{name:"transposeletters",bindKey:e("Ctrl-T","Ctrl-T"),exec:function(a){a.transposeLetters()},multiSelectAction:function(a){a.transposeSelections(1)}},{name:"touppercase",bindKey:e("Ctrl-U","Ctrl-U"),exec:function(a){a.toUpperCase()},multiSelectAction:"forEach"},{name:"tolowercase",bindKey:e("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(a){a.toLowerCase()},multiSelectAction:"forEach"}]}),define("ace/edit_session",["require","exports","module","ace/config","ace/lib/oop","ace/lib/lang","ace/lib/net","ace/lib/event_emitter","ace/selection","ace/mode/text","ace/range","ace/document","ace/background_tokenizer","ace/edit_session/folding","ace/edit_session/bracket_match"],function(a,b,c){"use strict";var d=a("./config"),e=a("./lib/oop"),f=a("./lib/lang"),g=a("./lib/net"),h=a("./lib/event_emitter").EventEmitter,i=a("./selection").Selection,j=a("./mode/text").Mode,k=a("./range").Range,l=a("./document").Document,m=a("./background_tokenizer").BackgroundTokenizer,n=function(a,b){this.$modified=!0,this.$breakpoints=[],this.$frontMarkers={},this.$backMarkers={},this.$markerId=1,this.$rowCache=[],this.$wrapData=[],this.$foldData=[],this.$undoSelect=!0,this.$foldData.toString=function(){var a="";return this.forEach(function(b){a+="\n"+b.toString()}),a},a instanceof l?this.setDocument(a):this.setDocument(new l(a)),this.selection=new i(this),b?this.setMode(b):this.setMode(new j)};(function(){function q(a){return a<4352?!1:a>=4352&&a<=4447||a>=4515&&a<=4519||a>=4602&&a<=4607||a>=9001&&a<=9002||a>=11904&&a<=11929||a>=11931&&a<=12019||a>=12032&&a<=12245||a>=12272&&a<=12283||a>=12288&&a<=12350||a>=12353&&a<=12438||a>=12441&&a<=12543||a>=12549&&a<=12589||a>=12593&&a<=12686||a>=12688&&a<=12730||a>=12736&&a<=12771||a>=12784&&a<=12830||a>=12832&&a<=12871||a>=12880&&a<=13054||a>=13056&&a<=19903||a>=19968&&a<=42124||a>=42128&&a<=42182||a>=43360&&a<=43388||a>=44032&&a<=55203||a>=55216&&a<=55238||a>=55243&&a<=55291||a>=63744&&a<=64255||a>=65040&&a<=65049||a>=65072&&a<=65106||a>=65108&&a<=65126||a>=65128&&a<=65131||a>=65281&&a<=65376||a>=65504&&a<=65510}e.implement(this,h),this.setDocument=function(a){if(this.doc)throw new Error("Document is already set");this.doc=a,a.on("change",this.onChange.bind(this)),this.on("changeFold",this.onChangeFold.bind(this)),this.bgTokenizer&&(this.bgTokenizer.setDocument(this.getDocument()),this.bgTokenizer.start(0))},this.getDocument=function(){return this.doc},this.$resetRowCache=function(a){if(a==0){this.$rowCache=[];return}var b=this.$rowCache;for(var c=0;c<b.length;c++)if(b[c].docRow>=a){b.splice(c,b.length);return}},this.onChangeFold=function(a){var b=a.data;this.$resetRowCache(b.start.row)},this.onChange=function(a){var b=a.data;this.$modified=!0,this.$resetRowCache(b.range.start.row);var c=this.$updateInternalDataOnChange(a);!this.$fromUndo&&this.$undoManager&&!b.ignore&&(this.$deltasDoc.push(b),c&&c.length!=0&&this.$deltasFold.push({action:"removeFolds",folds:c}),this.$informUndoManager.schedule()),this.bgTokenizer.start(b.range.start.row),this._emit("change",a)},this.setValue=function(a){this.doc.setValue(a),this.selection.moveCursorTo(0,0),this.selection.clearSelection(),this.$resetRowCache(0),this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.getUndoManager().reset()},this.getValue=this.toString=function(){return this.doc.getValue()},this.getSelection=function(){return this.selection},this.getState=function(a){return this.bgTokenizer.getState(a)},this.getTokens=function(a,b){return this.bgTokenizer.getTokens(a,b)},this.getTokenAt=function(a,b){var c=this.bgTokenizer.getTokens(a,a)[0].tokens,d,e=0;if(b==null)f=c.length-1,e=this.getLine(a).length;else for(var f=0;f<c.length;f++){e+=c[f].value.length;if(e>=b)break}return d=c[f],d?(d.index=f,d.start=e-d.value.length,d):null},this.setUndoManager=function(a){this.$undoManager=a,this.$resetRowCache(0),this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel();if(a){var b=this;this.$syncInformUndoManager=function(){b.$informUndoManager.cancel(),b.$deltasFold.length&&(b.$deltas.push({group:"fold",deltas:b.$deltasFold}),b.$deltasFold=[]),b.$deltasDoc.length&&(b.$deltas.push({group:"doc",deltas:b.$deltasDoc}),b.$deltasDoc=[]),b.$deltas.length>0&&a.execute({action:"aceupdate",args:[b.$deltas,b]}),b.$deltas=[]},this.$informUndoManager=f.deferredCall(this.$syncInformUndoManager)}},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?f.stringRepeat(" ",this.getTabSize()):" "},this.$useSoftTabs=!0,this.setUseSoftTabs=function(a){if(this.$useSoftTabs===a)return;this.$useSoftTabs=a},this.getUseSoftTabs=function(){return this.$useSoftTabs},this.$tabSize=4,this.setTabSize=function(a){if(isNaN(a)||this.$tabSize===a)return;this.$modified=!0,this.$tabSize=a,this._emit("changeTabSize")},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(a){return this.$useSoftTabs&&a.column%this.$tabSize==0},this.$overwrite=!1,this.setOverwrite=function(a){if(this.$overwrite==a)return;this.$overwrite=a,this._emit("changeOverwrite")},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(a){this.$breakpoints=[];for(var b=0;b<a.length;b++)this.$breakpoints[a[b]]=!0;this._emit("changeBreakpoint",{})},this.clearBreakpoints=function(){this.$breakpoints=[],this._emit("changeBreakpoint",{})},this.setBreakpoint=function(a){this.$breakpoints[a]=!0,this._emit("changeBreakpoint",{})},this.clearBreakpoint=function(a){delete this.$breakpoints[a],this._emit("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.addMarker=function(a,b,c,d){var e=this.$markerId++,f={range:a,type:c||"line",renderer:typeof c=="function"?c:null,clazz:b,inFront:!!d};return d?(this.$frontMarkers[e]=f,this._emit("changeFrontMarker")):(this.$backMarkers[e]=f,this._emit("changeBackMarker")),e},this.removeMarker=function(a){var b=this.$frontMarkers[a]||this.$backMarkers[a];if(!b)return;var c=b.inFront?this.$frontMarkers:this.$backMarkers;b&&(delete c[a],this._emit(b.inFront?"changeFrontMarker":"changeBackMarker"))},this.getMarkers=function(a){return a?this.$frontMarkers:this.$backMarkers},this.setAnnotations=function(a){this.$annotations={};for(var b=0;b<a.length;b++){var c=a[b],d=c.row;this.$annotations[d]?this.$annotations[d].push(c):this.$annotations[d]=[c]}this._emit("changeAnnotation",{})},this.getAnnotations=function(){return this.$annotations||{}},this.clearAnnotations=function(){this.$annotations={},this._emit("changeAnnotation",{})},this.$detectNewLine=function(a){var b=a.match(/^.*?(\r?\n)/m);b?this.$autoNewLine=b[1]:this.$autoNewLine="\n"},this.getWordRange=function(a,b){var c=this.getLine(a),d=!1;b>0&&(d=!!c.charAt(b-1).match(this.tokenRe)),d||(d=!!c.charAt(b).match(this.tokenRe));var e=d?this.tokenRe:this.nonTokenRe,f=b;if(f>0){do f--;while(f>=0&&c.charAt(f).match(e));f++}var g=b;while(g<c.length&&c.charAt(g).match(e))g++;return new k(a,f,a,g)},this.getAWordRange=function(a,b){var c=this.getWordRange(a,b),d=this.getLine(c.end.row);while(d.charAt(c.end.column).match(/[ \t]/))c.end.column+=1;return c},this.setNewLineMode=function(a){this.doc.setNewLineMode(a)},this.getNewLineMode=function(){return this.doc.getNewLineMode()},this.$useWorker=!0,this.setUseWorker=function(a){if(this.$useWorker==a)return;this.$useWorker=a,this.$stopWorker(),a&&this.$startWorker()},this.getUseWorker=function(){return this.$useWorker},this.onReloadTokenizer=function(a){var b=a.data;this.bgTokenizer.start(b.first),this._emit("tokenizerUpdate",a)},this.$modes={},this._loadMode=function(b,c){function i(a){if(e.$modes[b])return c(e.$modes[b]);e.$modes[b]=new a.Mode,e._emit("loadmode",{name:b,mode:e.$modes[b]}),c(e.$modes[b])}function j(a){if(!d.get("packaged"))return a();var c=b.split("/").pop(),e=d.get("modePath")+"/mode-"+c+d.get("suffix");g.loadScript(e,a)}if(this.$modes[b])return c(this.$modes[b]);var e=this,f;try{f=a(b)}catch(h){}if(f)return i(f);j(function(){a([b],i)})},this.$mode=null,this.$origMode=null,this.setMode=function(a){this.$origMode=a;if(typeof a=="string"){var b=this;this._loadMode(a,function(c){if(b.$origMode!==a)return;b.setMode(c)});return}if(this.$mode===a)return;this.$mode=a,this.$stopWorker(),this.$useWorker&&this.$startWorker();var c=a.getTokenizer();if(c.addEventListener!==undefined){var d=this.onReloadTokenizer.bind(this);c.addEventListener("update",d)}if(!this.bgTokenizer){this.bgTokenizer=new m(c);var b=this;this.bgTokenizer.addEventListener("update",function(a){b._emit("tokenizerUpdate",a)})}else this.bgTokenizer.setTokenizer(c);this.bgTokenizer.setDocument(this.getDocument()),this.bgTokenizer.start(0),this.tokenRe=a.tokenRe,this.nonTokenRe=a.nonTokenRe,this.$setFolding(a.foldingRules),this._emit("changeMode")},this.$stopWorker=function(){this.$worker&&this.$worker.terminate(),this.$worker=null},this.$startWorker=function(){if(typeof Worker!="undefined"&&!a.noWorker)try{this.$worker=this.$mode.createWorker(this)}catch(b){console.log("Could not load worker"),console.log(b),this.$worker=null}else this.$worker=null},this.getMode=function(){return this.$mode},this.$scrollTop=0,this.setScrollTop=function(a){a=Math.round(Math.max(0,a));if(this.$scrollTop===a)return;this.$scrollTop=a,this._emit("changeScrollTop",a)},this.getScrollTop=function(){return this.$scrollTop},this.$scrollLeft=0,this.setScrollLeft=function(a){a=Math.round(Math.max(0,a));if(this.$scrollLeft===a)return;this.$scrollLeft=a,this._emit("changeScrollLeft",a)},this.getScrollLeft=function(){return this.$scrollLeft},this.getWidth=function(){return this.$computeWidth(),this.width},this.getScreenWidth=function(){return this.$computeWidth(),this.screenWidth},this.$computeWidth=function(a){if(this.$modified||a){this.$modified=!1;var b=this.doc.getAllLines(),c=0,d=0;for(var e=0;e<b.length;e++){var f=this.getFoldLine(e),g,h;g=b[e];if(f){var i=f.range.end;g=this.getFoldDisplayLine(f),e=i.row}h=g.length,c=Math.max(c,h),this.$useWrapMode||(d=Math.max(d,this.$getStringScreenWidth(g)[0]))}this.width=c,this.$useWrapMode?this.screenWidth=this.$wrapLimit:this.screenWidth=d}},this.getLine=function(a){return this.doc.getLine(a)},this.getLines=function(a,b){return this.doc.getLines(a,b)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(a){return this.doc.getTextRange(a)},this.insert=function(a,b){return this.doc.insert(a,b)},this.remove=function(a){return this.doc.remove(a)},this.undoChanges=function(a,b){if(!a.length)return;this.$fromUndo=!0;var c=null;for(var d=a.length-1;d!=-1;d--){var e=a[d];e.group=="doc"?(this.doc.revertDeltas(e.deltas),c=this.$getUndoSelection(e.deltas,!0,c)):e.deltas.forEach(function(a){this.addFolds(a.folds)},this)}return this.$fromUndo=!1,c&&this.$undoSelect&&!b&&this.selection.setSelectionRange(c),c},this.redoChanges=function(a,b){if(!a.length)return;this.$fromUndo=!0;var c=null;for(var d=0;d<a.length;d++){var e=a[d];e.group=="doc"&&(this.doc.applyDeltas(e.deltas),c=this.$getUndoSelection(e.deltas,!1,c))}return this.$fromUndo=!1,c&&this.$undoSelect&&!b&&this.selection.setSelectionRange(c),c},this.setUndoSelect=function(a){this.$undoSelect=a},this.$getUndoSelection=function(a,b,c){function d(a){var c=a.action=="insertText"||a.action=="insertLines";return b?!c:c}var e=a[0],f,g,h=!1;d(e)?(f=e.range.clone(),h=!0):(f=k.fromPoints(e.range.start,e.range.start),h=!1);for(var i=1;i<a.length;i++)e=a[i],d(e)?(g=e.range.start,f.compare(g.row,g.column)==-1&&f.setStart(e.range.start),g=e.range.end,f.compare(g.row,g.column)==1&&f.setEnd(e.range.end),h=!0):(g=e.range.start,f.compare(g.row,g.column)==-1&&(f=k.fromPoints(e.range.start,e.range.start)),h=!1);if(c!=null){var j=c.compareRange(f);j==1?f.setStart(c.start):j==-1&&f.setEnd(c.end)}return f},this.replace=function(a,b){return this.doc.replace(a,b)},this.moveText=function(a,b){var c=this.getTextRange(a);this.remove(a);var d=b.row,e=b.column;!a.isMultiLine()&&a.start.row==d&&a.end.column<e&&(e-=c.length);if(a.isMultiLine()&&a.end.row<d){var f=this.doc.$split(c);d-=f.length-1}var g=d+a.end.row-a.start.row,h=a.isMultiLine()?a.end.column:e+a.end.column-a.start.column,i=new k(d,e,g,h);return this.insert(i.start,c),i},this.indentRows=function(a,b,c){c=c.replace(/\t/g,this.getTabString());for(var d=a;d<=b;d++)this.insert({row:d,column:0},c)},this.outdentRows=function(a){var b=a.collapseRows(),c=new k(0,0,0,0),d=this.getTabSize();for(var e=b.start.row;e<=b.end.row;++e){var f=this.getLine(e);c.start.row=e,c.end.row=e;for(var g=0;g<d;++g)if(f.charAt(g)!=" ")break;g<d&&f.charAt(g)==" "?(c.start.column=g,c.end.column=g+1):(c.start.column=0,c.end.column=g),this.remove(c)}},this.moveLinesUp=function(a,b){if(a<=0)return 0;var c=this.doc.removeLines(a,b);return this.doc.insertLines(a-1,c),-1},this.moveLinesDown=function(a,b){if(b>=this.doc.getLength()-1)return 0;var c=this.doc.removeLines(a,b);return this.doc.insertLines(a+1,c),1},this.duplicateLines=function(a,b){var a=this.$clipRowToDocument(a),b=this.$clipRowToDocument(b),c=this.getLines(a,b);this.doc.insertLines(a,c);var d=b-a+1;return d},this.$clipRowToDocument=function(a){return Math.max(0,Math.min(a,this.doc.getLength()-1))},this.$clipColumnToRow=function(a,b){return b<0?0:Math.min(this.doc.getLine(a).length,b)},this.$clipPositionToDocument=function(a,b){b=Math.max(0,b);if(a<0)a=0,b=0;else{var c=this.doc.getLength();a>=c?(a=c-1,b=this.doc.getLine(c-1).length):b=Math.min(this.doc.getLine(a).length,b)}return{row:a,column:b}},this.$clipRangeToDocument=function(a){a.start.row<0?(a.start.row=0,a.start.column=0):a.start.column=this.$clipColumnToRow(a.start.row,a.start.column);var b=this.doc.getLength()-1;return a.end.row>b?(a.end.row=b,a.end.column=this.doc.getLine(b).length):a.end.column=this.$clipColumnToRow(a.end.row,a.end.column),a},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(a){if(a!=this.$useWrapMode){this.$useWrapMode=a,this.$modified=!0,this.$resetRowCache(0);if(a){var b=this.getLength();this.$wrapData=[];for(var c=0;c<b;c++)this.$wrapData.push([]);this.$updateWrapData(0,b-1)}this._emit("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(a,b){if(this.$wrapLimitRange.min!==a||this.$wrapLimitRange.max!==b)this.$wrapLimitRange.min=a,this.$wrapLimitRange.max=b,this.$modified=!0,this._emit("changeWrapMode")},this.adjustWrapLimit=function(a){var b=this.$constrainWrapLimit(a);return b!=this.$wrapLimit&&b>0?(this.$wrapLimit=b,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._emit("changeWrapLimit")),!0):!1},this.$constrainWrapLimit=function(a){var b=this.$wrapLimitRange.min;b&&(a=Math.max(b,a));var c=this.$wrapLimitRange.max;return c&&(a=Math.min(c,a)),Math.max(1,a)},this.getWrapLimit=function(){return this.$wrapLimit},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(a){var b=this.$useWrapMode,c,d=a.data.action,e=a.data.range.start.row,f=a.data.range.end.row,g=a.data.range.start,h=a.data.range.end,i=null;d.indexOf("Lines")!=-1?(d=="insertLines"?f=e+a.data.lines.length:f=e,c=a.data.lines?a.data.lines.length:f-e):c=f-e;if(c!=0)if(d.indexOf("remove")!=-1){b&&this.$wrapData.splice(e,c);var j=this.$foldData;i=this.getFoldsInRange(a.data.range),this.removeFolds(i);var k=this.getFoldLine(h.row),l=0;if(k){k.addRemoveChars(h.row,h.column,g.column-h.column),k.shiftRow(-c);var m=this.getFoldLine(e);m&&m!==k&&(m.merge(k),k=m),l=j.indexOf(k)+1}for(l;l<j.length;l++){var k=j[l];k.start.row>=h.row&&k.shiftRow(-c)}f=e}else{var n;if(b){n=[e,0];for(var o=0;o<c;o++)n.push([]);this.$wrapData.splice.apply(this.$wrapData,n)}var j=this.$foldData,k=this.getFoldLine(e),l=0;if(k){var p=k.range.compareInside(g.row,g.column);p==0?(k=k.split(g.row,g.column),k.shiftRow(c),k.addRemoveChars(f,0,h.column-g.column)):p==-1&&(k.addRemoveChars(e,0,h.column-g.column),k.shiftRow(c)),l=j.indexOf(k)+1}for(l;l<j.length;l++){var k=j[l];k.start.row>=e&&k.shiftRow(c)}}else{c=Math.abs(a.data.range.start.column-a.data.range.end.column),d.indexOf("remove")!=-1&&(i=this.getFoldsInRange(a.data.range),this.removeFolds(i),c=-c);var k=this.getFoldLine(e);k&&k.addRemoveChars(e,g.column,c)}return b&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),b&&this.$updateWrapData(e,f),i},this.$updateWrapData=function(a,b){var c=this.doc.getAllLines(),d=this.getTabSize(),e=this.$wrapData,g=this.$wrapLimit,h,k,l=a;b=Math.min(b,c.length-1);while(l<=b){k=this.getFoldLine(l,k);if(!k)h=this.$getDisplayTokens(f.stringTrimRight(c[l])),e[l]=this.$computeWrapSplits(h,g,d),l++;else{h=[],k.walk(function(a,b,d,e){var f;if(a){f=this.$getDisplayTokens(a,h.length),f[0]=i;for(var g=1;g<f.length;g++)f[g]=j}else f=this.$getDisplayTokens(c[b].substring(e,d),h.length);h=h.concat(f)}.bind(this),k.end.row,c[k.end.row].length+1);while(h.length!=0&&h[h.length-1]>=n)h.pop();e[k.start.row]=this.$computeWrapSplits(h,g,d),l=k.end.row+1}}};var b=1,c=2,i=3,j=4,l=9,n=10,o=11,p=12;this.$computeWrapSplits=function(a,b){function g(b){var d=a.slice(e,b),g=d.length;d.join("").replace(/12/g,function(){g-=1}).replace(/2/g,function(){g-=1}),f+=g,c.push(f),e=b}if(a.length==0)return[];var c=[],d=a.length,e=0,f=0;while(d-e>b){var h=e+b;if(a[h]>=n){while(a[h]>=n)h++;g(h);continue}if(a[h]==i||a[h]==j){for(h;h!=e-1;h--)if(a[h]==i)break;if(h>e){g(h);continue}h=e+b;for(h;h<a.length;h++)if(a[h]!=j)break;if(h==a.length)break;g(h);continue}var k=Math.max(h-10,e-1);while(h>k&&a[h]<i)h--;while(h>k&&a[h]==l)h--;if(h>k){g(++h);continue}h=e+b,g(h)}return c},this.$getDisplayTokens=function(a,d){var e=[],f;d=d||0;for(var g=0;g<a.length;g++){var h=a.charCodeAt(g);if(h==9){f=this.getScreenTabSize(e.length+d),e.push(o);for(var i=1;i<f;i++)e.push(p)}else h==32?e.push(n):h>39&&h<48||h>57&&h<64?e.push(l):h>=4352&&q(h)?e.push(b,c):e.push(b)}return e},this.$getStringScreenWidth=function(a,b,c){if(b==0)return[0,0];b==null&&(b=c+a.length*Math.max(this.getTabSize(),2)),c=c||0;var d,e;for(e=0;e<a.length;e++){d=a.charCodeAt(e),d==9?c+=this.getScreenTabSize(c):d>=4352&&q(d)?c+=2:c+=1;if(c>b)break}return[c,e]},this.getRowLength=function(a){return!this.$useWrapMode||!this.$wrapData[a]?1:this.$wrapData[a].length+1},this.getRowHeight=function(a,b){return this.getRowLength(b)*a.lineHeight},this.getScreenLastRowColumn=function(a){var b=this.screenToDocumentPosition(a,Number.MAX_VALUE);return this.documentToScreenColumn(b.row,b.column)},this.getDocumentLastRowColumn=function(a,b){var c=this.documentToScreenRow(a,b);return this.getScreenLastRowColumn(c)},this.getDocumentLastRowColumnPosition=function(a,b){var c=this.documentToScreenRow(a,b);return this.screenToDocumentPosition(c,Number.MAX_VALUE/10)},this.getRowSplitData=function(a){return this.$useWrapMode?this.$wrapData[a]:undefined},this.getScreenTabSize=function(a){return this.$tabSize-a%this.$tabSize},this.screenToDocumentRow=function(a,b){return this.screenToDocumentPosition(a,b).row},this.screenToDocumentColumn=function(a,b){return this.screenToDocumentPosition(a,b).column},this.screenToDocumentPosition=function(a,b){if(a<0)return{row:0,column:0};var c,d=0,e=0,f,g=0,h=0,i=this.$rowCache;for(var j=0;j<i.length;j++){if(!(i[j].screenRow<a))break;g=i[j].screenRow,d=i[j].docRow}var k=!i.length||j==i.length,l=this.getLength()-1,m=this.getNextFoldLine(d),n=m?m.start.row:Infinity;while(g<=a){h=this.getRowLength(d);if(g+h-1>=a||d>=l)break;g+=h,d++,d>n&&(d=m.end.row+1,m=this.getNextFoldLine(d,m),n=m?m.start.row:Infinity),k&&i.push({docRow:d,screenRow:g})}if(m&&m.start.row<=d)c=this.getFoldDisplayLine(m),d=m.start.row;else{if(g+h<=a||d>l)return{row:l,column:this.getLine(l).length};c=this.getLine(d),m=null}if(this.$useWrapMode){var o=this.$wrapData[d];o&&(f=o[a-g],a>g&&o.length&&(e=o[a-g-1]||o[o.length-1],c=c.substring(e)))}return e+=this.$getStringScreenWidth(c,b)[1],this.$useWrapMode&&e>=f&&(e=f-1),m?m.idxToPosition(e):{row:d,column:e}},this.documentToScreenPosition=function(a,b){if(typeof b=="undefined")var c=this.$clipPositionToDocument(a.row,a.column);else c=this.$clipPositionToDocument(a,b);a=c.row,b=c.column;var d;if(this.$useWrapMode){d=this.$wrapData;if(a>d.length-1)return{row:this.getScreenLength(),column:d.length==0?0:d[d.length-1].length-1}}var e=0,f=null,g=null;g=this.getFoldAt(a,b,1),g&&(a=g.start.row,b=g.start.column);var h,i=0,j=this.$rowCache;for(var k=0;k<j.length;k++){if(!(j[k].docRow<a))break;e=j[k].screenRow,i=j[k].docRow}var l=!j.length||k==j.length,m=this.getNextFoldLine(i),n=m?m.start.row:Infinity;while(i<a){if(i>=n){h=m.end.row+1;if(h>a)break;m=this.getNextFoldLine(h,m),n=m?m.start.row:Infinity}else h=i+1;e+=this.getRowLength(i),i=h,l&&j.push({docRow:i,screenRow:e})}var o="";m&&i>=n?(o=this.getFoldDisplayLine(m,a,b),f=m.start.row):(o=this.getLine(a).substring(0,b),f=a);if(this.$useWrapMode){var p=d[f],q=0;while(o.length>=p[q])e++,q++;o=o.substring(p[q-1]||0,o.length)}return{row:e,column:this.$getStringScreenWidth(o)[0]}},this.documentToScreenColumn=function(a,b){return this.documentToScreenPosition(a,b).column},this.documentToScreenRow=function(a,b){return this.documentToScreenPosition(a,b).row},this.getScreenLength=function(){var a=0,b=null;if(!this.$useWrapMode){a=this.getLength();var c=this.$foldData;for(var d=0;d<c.length;d++)b=c[d],a-=b.end.row-b.start.row}else{var e=this.$wrapData.length,f=0,d=0,b=this.$foldData[d++],g=b?b.start.row:Infinity;while(f<e)a+=this.$wrapData[f].length+1,f++,f>g&&(f=b.end.row+1,b=this.$foldData[d++],g=b?b.start.row:Infinity)}return a}}).call(n.prototype),a("./edit_session/folding").Folding.call(n.prototype),a("./edit_session/bracket_match").BracketMatch.call(n.prototype),b.EditSession=n}),define("ace/config",["require","exports","module","ace/lib/lang"],function(a,b,c){function g(a){return a.replace(/-(.)/g,function(a,b){return b.toUpperCase()})}"no use strict";var d=a("./lib/lang"),e=function(){return this}(),f={packaged:!1,workerPath:"",modePath:"",themePath:"",suffix:".js"};b.get=function(a){if(!f.hasOwnProperty(a))throw new Error("Unknown confik key: "+a);return f[a]},b.set=function(a,b){if(!f.hasOwnProperty(a))throw new Error("Unknown confik key: "+a);f[a]=b},b.all=function(){return d.copyObject(f)},b.init=function(){f.packaged=a.packaged||c.packaged||e.define&&define.packaged;if(!e.document)return"";var d={},h="",i,j=document.getElementsByTagName("script");for(var k=0;k<j.length;k++){var l=j[k],m=l.src||l.getAttribute("src");if(!m)continue;var n=l.attributes;for(var o=0,p=n.length;o<p;o++){var q=n[o];q.name.indexOf("data-ace-")===0&&(d[g(q.name.replace(/^data-ace-/,""))]=q.value)}var r=m.match(/^(?:(.*\/)ace\.js|(.*\/)ace((-uncompressed)?(-noconflict)?\.js))(?:\?|$)/);r&&(h=r[1]||r[2],i=r[3])}h&&(d.base=d.base||h,d.packaged=!0),d.suffix=d.suffix||i,d.workerPath=d.workerPath||d.base,d.modePath=d.modePath||d.base,d.themePath=d.themePath||d.base,delete d.base;for(var s in d)typeof d[s]!="undefined"&&b.set(s,d[s])}}),define("ace/lib/net",["require","exports","module"],function(a,b,c){"use strict",b.get=function(a,c){var d=b.createXhr();d.open("GET",a,!0),d.onreadystatechange=function(a){d.readyState===4&&c(d.responseText)},d.send(null)};var d=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];b.createXhr=function(){var a,b,c;if(typeof XMLHttpRequest!="undefined")return new XMLHttpRequest;for(b=0;b<3;b++){c=d[b];try{a=new ActiveXObject(c)}catch(e){}if(a){d=[c];break}}if(!a)throw new Error("createXhr(): XMLHttpRequest not available");return a},b.loadScript=function(a,b){var c=document.getElementsByTagName("head")[0],d=document.createElement("script");d.src=a,c.appendChild(d),d.onload=b}}),define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"],function(a,b,c){"use strict";var d=a("./lib/oop"),e=a("./lib/lang"),f=a("./lib/event_emitter").EventEmitter,g=a("./range").Range,h=function(a){this.session=a,this.doc=a.getDocument(),this.clearSelection(),this.selectionLead=this.doc.createAnchor(0,0),this.selectionAnchor=this.doc.createAnchor(0,0);var b=this;this.selectionLead.on("change",function(a){b._emit("changeCursor"),b.$isEmpty||b._emit("changeSelection"),!b.$keepDesiredColumnOnChange&&a.old.column!=a.value.column&&(b.$desiredColumn=null)}),this.selectionAnchor.on("change",function(){b.$isEmpty||b._emit("changeSelection")})};(function(){d.implement(this,f),this.isEmpty=function(){return this.$isEmpty||this.selectionAnchor.row==this.selectionLead.row&&this.selectionAnchor.column==this.selectionLead.column},this.isMultiLine=function(){return this.isEmpty()?!1:this.getRange().isMultiLine()},this.getCursor=function(){return this.selectionLead.getPosition()},this.setSelectionAnchor=function(a,b){this.selectionAnchor.setPosition(a,b),this.$isEmpty&&(this.$isEmpty=!1,this._emit("changeSelection"))},this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.selectionAnchor.getPosition()},this.getSelectionLead=function(){return this.selectionLead.getPosition()},this.shiftSelection=function(a){if(this.$isEmpty){this.moveCursorTo(this.selectionLead.row,this.selectionLead.column+a);return}var b=this.getSelectionAnchor(),c=this.getSelectionLead(),d=this.isBackwards();(!d||b.column!==0)&&this.setSelectionAnchor(b.row,b.column+a),(d||c.column!==0)&&this.$moveSelection(function(){this.moveCursorTo(c.row,c.column+a)})},this.isBackwards=function(){var a=this.selectionAnchor,b=this.selectionLead;return a.row>b.row||a.row==b.row&&a.column>b.column},this.getRange=function(){var a=this.selectionAnchor,b=this.selectionLead;return this.isEmpty()?g.fromPoints(b,b):this.isBackwards()?g.fromPoints(b,a):g.fromPoints(a,b)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){var a=this.doc.getLength()-1;this.setSelectionAnchor(a,this.doc.getLine(a).length),this.moveCursorTo(0,0)},this.setSelectionRange=function(a,b){b?(this.setSelectionAnchor(a.end.row,a.end.column),this.selectTo(a.start.row,a.start.column)):(this.setSelectionAnchor(a.start.row,a.start.column),this.selectTo(a.end.row,a.end.column)),this.$desiredColumn=null},this.$moveSelection=function(a){var b=this.selectionLead;this.$isEmpty&&this.setSelectionAnchor(b.row,b.column),a.call(this)},this.selectTo=function(a,b){this.$moveSelection(function(){this.moveCursorTo(a,b)})},this.selectToPosition=function(a){this.$moveSelection(function(){this.moveCursorToPosition(a)})},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.selectWord=function(){var a=this.getCursor(),b=this.session.getWordRange(a.row,a.column);this.setSelectionRange(b)},this.selectAWord=function(){var a=this.getCursor(),b=this.session.getAWordRange(a.row,a.column);this.setSelectionRange(b)},this.selectLine=function(){var a=this.selectionLead.row,b,c=this.session.getFoldLine(a);c?(a=c.start.row,b=c.end.row):b=a,this.setSelectionAnchor(a,0),this.$moveSelection(function(){this.moveCursorTo(b+1,0)})},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.moveCursorLeft=function(){var a=this.selectionLead.getPosition(),b;if(b=this.session.getFoldAt(a.row,a.column,-1))this.moveCursorTo(b.start.row,b.start.column);else if(a.column==0)a.row>0&&this.moveCursorTo(a.row-1,this.doc.getLine(a.row-1).length);else{var c=this.session.getTabSize();this.session.isTabStop(a)&&this.doc.getLine(a.row).slice(a.column-c,a.column).split(" ").length-1==c?this.moveCursorBy(0,-c):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var a=this.selectionLead.getPosition(),b;if(b=this.session.getFoldAt(a.row,a.column,1))this.moveCursorTo(b.end.row,b.end.column);else if(this.selectionLead.column==this.doc.getLine(this.selectionLead.row).length)this.selectionLead.row<this.doc.getLength()-1&&this.moveCursorTo(this.selectionLead.row+1,0);else{var c=this.session.getTabSize(),a=this.selectionLead;this.session.isTabStop(a)&&this.doc.getLine(a.row).slice(a.column,a.column+c).split(" ").length-1==c?this.moveCursorBy(0,c):this.moveCursorBy(0,1)}},this.moveCursorLineStart=function(){var a=this.selectionLead.row,b=this.selectionLead.column,c=this.session.documentToScreenRow(a,b),d=this.session.screenToDocumentPosition(c,0),e=this.session.getDisplayLine(a,null,d.row,d.column),f=e.match(/^\s*/);f[0].length==b?this.moveCursorTo(d.row,d.column):this.moveCursorTo(d.row,d.column+f[0].length)},this.moveCursorLineEnd=function(){var a=this.selectionLead,b=this.session.getDocumentLastRowColumnPosition(a.row,a.column);this.moveCursorTo(b.row,b.column)},this.moveCursorFileEnd=function(){var a=this.doc.getLength()-1,b=this.doc.getLine(a).length;this.moveCursorTo(a,b)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorWordRight=function(){var a=this.selectionLead.row,b=this.selectionLead.column,c=this.doc.getLine(a),d=c.substring(b),e;this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var f=this.session.getFoldAt(a,b,1);if(f){this.moveCursorTo(f.end.row,f.end.column);return}if(e=this.session.nonTokenRe.exec(d))b+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,d=c.substring(b);if(b>=c.length){this.moveCursorTo(a,c.length),this.moveCursorRight(),a<this.doc.getLength()-1&&this.moveCursorWordRight();return}if(e=this.session.tokenRe.exec(d))b+=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0;this.moveCursorTo(a,b)},this.moveCursorWordLeft=function(){var a=this.selectionLead.row,b=this.selectionLead.column,c;if(c=this.session.getFoldAt(a,b,-1)){this.moveCursorTo(c.start.row,c.start.column);return}var d=this.session.getFoldStringAt(a,b,-1);d==null&&(d=this.doc.getLine(a).substring(0,b));var f=e.stringReverse(d),g;this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;if(g=this.session.nonTokenRe.exec(f))b-=this.session.nonTokenRe.lastIndex,f=f.slice(this.session.nonTokenRe.lastIndex),this.session.nonTokenRe.lastIndex=0;if(b<=0){this.moveCursorTo(a,0),this.moveCursorLeft(),a>0&&this.moveCursorWordLeft();return}if(g=this.session.tokenRe.exec(f))b-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0;this.moveCursorTo(a,b)},this.moveCursorBy=function(a,b){var c=this.session.documentToScreenPosition(this.selectionLead.row,this.selectionLead.column);b===0&&(this.$desiredColumn?c.column=this.$desiredColumn:this.$desiredColumn=c.column);var d=this.session.screenToDocumentPosition(c.row+a,c.column);this.moveCursorTo(d.row,d.column+b,b===0)},this.moveCursorToPosition=function(a){this.moveCursorTo(a.row,a.column)},this.moveCursorTo=function(a,b,c){var d=this.session.getFoldAt(a,b,1);d&&(a=d.start.row,b=d.start.column),this.$keepDesiredColumnOnChange=!0,this.selectionLead.setPosition(a,b),this.$keepDesiredColumnOnChange=!1,c||(this.$desiredColumn=null)},this.moveCursorToScreen=function(a,b,c){var d=this.session.screenToDocumentPosition(a,b);this.moveCursorTo(d.row,d.column,c)},this.detach=function(){this.selectionLead.detach(),this.selectionAnchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(a){this.setSelectionRange(a,a.cursor==a.start),this.$desiredColumn=a.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(a){var b=this.getRange();return a?(a.start.column=b.start.column,a.start.row=b.start.row,a.end.column=b.end.column,a.end.row=b.end.row):a=b,a.cursor=this.isBackwards()?a.start:a.end,a.desiredColumn=this.$desiredColumn,a}}).call(h.prototype),b.Selection=h}),define("ace/range",["require","exports","module"],function(a,b,c){"use strict";var d=function(a,b,c,d){this.start={row:a,column:b},this.end={row:c,column:d}};(function(){this.isEqual=function(a){return this.start.row==a.start.row&&this.end.row==a.end.row&&this.start.column==a.start.column&&this.end.column==a.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(a,b){return this.compare(a,b)==0},this.compareRange=function(a){var b,c=a.end,d=a.start;return b=this.compare(c.row,c.column),b==1?(b=this.compare(d.row,d.column),b==1?2:b==0?1:0):b==-1?-2:(b=this.compare(d.row,d.column),b==-1?-1:b==1?42:0)},this.comparePoint=function(a){return this.compare(a.row,a.column)},this.containsRange=function(a){return this.comparePoint(a.start)==0&&this.comparePoint(a.end)==0},this.intersectsRange=function(a){var b=this.compareRange(a);return b==-1||b==0||b==1},this.isEnd=function(a,b){return this.end.row==a&&this.end.column==b},this.isStart=function(a,b){return this.start.row==a&&this.start.column==b},this.setStart=function(a,b){typeof a=="object"?(this.start.column=a.column,this.start.row=a.row):(this.start.row=a,this.start.column=b)},this.setEnd=function(a,b){typeof a=="object"?(this.end.column=a.column,this.end.row=a.row):(this.end.row=a,this.end.column=b)},this.inside=function(a,b){return this.compare(a,b)==0?this.isEnd(a,b)||this.isStart(a,b)?!1:!0:!1},this.insideStart=function(a,b){return this.compare(a,b)==0?this.isEnd(a,b)?!1:!0:!1},this.insideEnd=function(a,b){return this.compare(a,b)==0?this.isStart(a,b)?!1:!0:!1},this.compare=function(a,b){return!this.isMultiLine()&&a===this.start.row?b<this.start.column?-1:b>this.end.column?1:0:a<this.start.row?-1:a>this.end.row?1:this.start.row===a?b>=this.start.column?0:-1:this.end.row===a?b<=this.end.column?0:1:0},this.compareStart=function(a,b){return this.start.row==a&&this.start.column==b?-1:this.compare(a,b)},this.compareEnd=function(a,b){return this.end.row==a&&this.end.column==b?1:this.compare(a,b)},this.compareInside=function(a,b){return this.end.row==a&&this.end.column==b?1:this.start.row==a&&this.start.column==b?-1:this.compare(a,b)},this.clipRows=function(a,b){if(this.end.row>b)var c={row:b+1,column:0};if(this.start.row>b)var e={row:b+1,column:0};if(this.start.row<a)var e={row:a,column:0};if(this.end.row<a)var c={row:a,column:0};return d.fromPoints(e||this.start,c||this.end)},this.extend=function(a,b){var c=this.compare(a,b);if(c==0)return this;if(c==-1)var e={row:a,column:b};else var f={row:a,column:b};return d.fromPoints(e||this.start,f||this.end)},this.fixOrientation=function(){if(this.start.row<this.end.row||this.start.row==this.end.row&&this.start.column<this.end.column)return!1;var a=this.start;return this.end=this.start,this.start=a,!0},this.isEmpty=function(){return this.start.row==this.end.row&&this.start.column==this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return d.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new d(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new d(this.start.row,0,this.end.row,0)},this.toScreenRange=function(a){var b=a.documentToScreenPosition(this.start),c=a.documentToScreenPosition(this.end);return new d(b.row,b.column,c.row,c.column)}}).call(d.prototype),d.fromPoints=function(a,b){return new d(a.row,a.column,b.row,b.column)},b.Range=d}),define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour","ace/unicode"],function(a,b,c){"use strict";var d=a("../tokenizer").Tokenizer,e=a("./text_highlight_rules").TextHighlightRules,f=a("./behaviour").Behaviour,g=a("../unicode"),h=function(){this.$tokenizer=new d((new e).getRules()),this.$behaviour=new f};(function(){this.tokenRe=new RegExp("^["+g.packages.L+g.packages.Mn+g.packages.Mc+g.packages.Nd+g.packages.Pc+"\\$_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+g.packages.L+g.packages.Mn+g.packages.Mc+g.packages.Nd+g.packages.Pc+"\\$_]|s])+","g"),this.getTokenizer=function(){return this.$tokenizer},this.toggleCommentLines=function(a,b,c,d){},this.getNextLineIndent=function(a,b,c){return""},this.checkOutdent=function(a,b,c){return!1},this.autoOutdent=function(a,b,c){},this.$getIndent=function(a){var b=a.match(/^(\s+)/);return b?b[1]:""},this.createWorker=function(a){return null},this.highlightSelection=function(a){var b=a.session;b.$selectionOccurrences||(b.$selectionOccurrences=[]),b.$selectionOccurrences.length&&this.clearSelectionHighlight(a);var c=a.getSelectionRange();if(c.isEmpty()||c.isMultiLine())return;var d=c.start.column-1,e=c.end.column+1,f=b.getLine(c.start.row),g=f.length,h=f.substring(Math.max(d,0),Math.min(e,g));if(d>=0&&/^[\w\d]/.test(h)||e<=g&&/[\w\d]$/.test(h))return;h=f.substring(c.start.column,c.end.column);if(!/^[\w\d]+$/.test(h))return;var i=a.getCursorPosition(),j={wrap:!0,wholeWord:!0,caseSensitive:!0,needle:h},k=a.$search.getOptions();a.$search.set(j);var l=a.$search.findAll(b);l.forEach(function(a){if(!a.contains(i.row,i.column)){var c=b.addMarker(a,"ace_selected_word","text");b.$selectionOccurrences.push(c)}}),a.$search.set(k)},this.clearSelectionHighlight=function(a){if(!a.session.$selectionOccurrences)return;a.session.$selectionOccurrences.forEach(function(b){a.session.removeMarker(b)}),a.session.$selectionOccurrences=[]},this.createModeDelegates=function(a){if(!this.$embeds)return;this.$modes={};for(var b=0;b<this.$embeds.length;b++)a[this.$embeds[b]]&&(this.$modes[this.$embeds[b]]=new a[this.$embeds[b]]);var c=["toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction"];for(var b=0;b<c.length;b++)(function(a){var d=c[b],e=a[d];a[c[b]]=function(){return this.$delegator(d,arguments,e)}})(this)},this.$delegator=function(a,b,c){var d=b[0];for(var e=0;e<this.$embeds.length;e++){if(!this.$modes[this.$embeds[e]])continue;var f=d.split(this.$embeds[e]);if(!f[0]&&f[1]){b[0]=f[1];var g=this.$modes[this.$embeds[e]];return g[a].apply(g,b)}}var h=c.apply(this,b);return c?h:undefined},this.transformAction=function(a,b,c,d,e){if(this.$behaviour){var f=this.$behaviour.getBehaviours();for(var g in f)if(f[g][b]){var h=f[g][b].apply(this,arguments);if(h)return h}}}}).call(h.prototype),b.Mode=h}),define("ace/tokenizer",["require","exports","module"],function(a,b,c){"use strict";var d=function(a,b){b=b?"g"+b:"g",this.rules=a,this.regExps={},this.matchMappings={};for(var c in this.rules){var d=this.rules[c],e=d,f=[],g=0,h=this.matchMappings[c]={};for(var i=0;i<e.length;i++){e[i].regex instanceof RegExp&&(e[i].regex=e[i].regex.toString().slice(1,-1));var j=(new RegExp("(?:("+e[i].regex+")|(.))")).exec("a").length-2,k=e[i].regex.replace(/\\([0-9]+)/g,function(a,b){return"\\"+(parseInt(b,10)+g+1)});if(j>1&&e[i].token.length!==j-1)throw new Error("Matching groups and length of the token array don't match in rule #"+i+" of state "+c);h[g]={rule:i,len:j},g+=j,f.push(k)}this.regExps[c]=new RegExp("(?:("+f.join(")|(")+")|(.))",b)}};(function(){this.getLineTokens=function(a,b){var c=b,d=this.rules[c],e=this.matchMappings[c],f=this.regExps[c];f.lastIndex=0;var g,h=[],i=0,j={type:null,value:""};while(g=f.exec(a)){var k="text",l=null,m=[g[0]];for(var n=0;n<g.length-2;n++){if(g[n+1]===undefined)continue;l=d[e[n].rule],e[n].len>1&&(m=g.slice(n+2,n+1+e[n].len)),typeof l.token=="function"?k=l.token.apply(this,m):k=l.token;var o=l.next;o&&o!==c&&(c=o,d=this.rules[c],e=this.matchMappings[c],i=f.lastIndex,f=this.regExps[c],f.lastIndex=i);break}if(m[0]){typeof k=="string"&&(m=[m.join("")],k=[k]);for(var n=0;n<m.length;n++){if(!m[n])continue;(!l||l.merge||k[n]==="text")&&j.type===k[n]?j.value+=m[n]:(j.type&&h.push(j),j={type:k[n],value:m[n]})}}if(i==a.length)break;i=f.lastIndex}return j.type&&h.push(j),{tokens:h,state:c}}}).call(d.prototype),b.Tokenizer=d}),define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],function(a,b,c){"use strict";var d=a("../lib/lang"),e=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{token:"text",regex:".+"}]}};(function(){this.addRules=function(a,b){for(var c in a){var d=a[c];for(var e=0;e<d.length;e++){var f=d[e];f.next?f.next=b+f.next:f.next=b+c}this.$rules[b+c]=d}},this.getRules=function(){return this.$rules},this.embedRules=function(a,b,c,e){var f=(new a).getRules();if(e)for(var g=0;g<e.length;g++)e[g]=b+e[g];else{e=[];for(var h in f)e.push(b+h)}this.addRules(f,b);for(var g=0;g<e.length;g++)Array.prototype.unshift.apply(this.$rules[e[g]],d.deepCopy(c));this.$embeds||(this.$embeds=[]),this.$embeds.push(b)},this.getEmbeds=function(){return this.$embeds}}).call(e.prototype),b.TextHighlightRules=e}),define("ace/mode/behaviour",["require","exports","module"],function(a,b,c){"use strict";var d=function(){this.$behaviours={}};(function(){this.add=function(a,b,c){switch(undefined){case this.$behaviours:this.$behaviours={};case this.$behaviours[a]:this.$behaviours[a]={}}this.$behaviours[a][b]=c},this.addBehaviours=function(a){for(var b in a)for(var c in a[b])this.add(b,c,a[b][c])},this.remove=function(a){this.$behaviours&&this.$behaviours[a]&&delete this.$behaviours[a]},this.inherit=function(a,b){if(typeof a=="function")var c=(new a).getBehaviours(b);else var c=a.getBehaviours(b);this.addBehaviours(c)},this.getBehaviours=function(a){if(!a)return this.$behaviours;var b={};for(var c=0;c<a.length;c++)this.$behaviours[a[c]]&&(b[a[c]]=this.$behaviours[a[c]]);return b}}).call(d.prototype),b.Behaviour=d}),define("ace/unicode",["require","exports","module"],function(a,b,c){function d(a){var c=/\w{4}/g;for(var d in a)b.packages[d]=a[d].replace(c,"\\u$&")}"use strict",b.packages={},d({L:"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",Ll:"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A",Lu:"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A",Lt:"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC",Lm:"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F",Lo:"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",M:"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26",Mn:"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26",Mc:"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC",Me:"0488048906DE20DD-20E020E2-20E4A670-A672",N:"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nd:"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nl:"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF",No:"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835",P:"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65",Pd:"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D",Ps:"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62",Pe:"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63",Pi:"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20",Pf:"00BB2019201D203A2E032E052E0A2E0D2E1D2E21",Pc:"005F203F20402054FE33FE34FE4D-FE4FFF3F",Po:"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65",S:"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD",Sm:"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC",Sc:"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6",Sk:"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3",So:"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD",Z:"002000A01680180E2000-200A20282029202F205F3000",Zs:"002000A01680180E2000-200A202F205F3000",Zl:"2028",Zp:"2029",C:"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF",Cc:"0000-001F007F-009F",Cf:"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB",Co:"E000-F8FF",Cs:"D800-DFFF",Cn:"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF"})}),define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"],function(a,b,c){"use strict";var d=a("./lib/oop"),e=a("./lib/event_emitter").EventEmitter,f=a("./range").Range,g=a("./anchor").Anchor,h=function(a){this.$lines=[],Array.isArray(a)?this.insertLines(0,a):a.length==0?this.$lines=[""]:this.insert({row:0,column:0},a)};(function(){d.implement(this,e),this.setValue=function(a){var b=this.getLength();this.remove(new f(0,0,b,this.getLine(b-1).length)),this.insert({row:0,column:0},a)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(a,b){return new g(this,a,b)},"aaa".split(/a/).length==0?this.$split=function(a){return a.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(a){return a.split(/\r\n|\r|\n/)},this.$detectNewLine=function(a){var b=a.match(/^.*?(\r\n|\r|\n)/m);b?this.$autoNewLine=b[1]:this.$autoNewLine="\n"},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";case"auto":return this.$autoNewLine}},this.$autoNewLine="\n",this.$newLineMode="auto",this.setNewLineMode=function(a){if(this.$newLineMode===a)return;this.$newLineMode=a},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(a){return a=="\r\n"||a=="\r"||a=="\n"},this.getLine=function(a){return this.$lines[a]||""},this.getLines=function(a,b){return this.$lines.slice(a,b+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(a){if(a.start.row==a.end.row)return this.$lines[a.start.row].substring(a.start.column,a.end.column);var b=[];return b.push(this.$lines[a.start.row].substring(a.start.column)),b.push.apply(b,this.getLines(a.start.row+1,a.end.row-1)),b.push(this.$lines[a.end.row].substring(0,a.end.column)),b.join(this.getNewLineCharacter())},this.$clipPosition=function(a){var b=this.getLength();return a.row>=b&&(a.row=Math.max(0,b-1),a.column=this.getLine(b-1).length),a},this.insert=function(a,b){if(!b||b.length===0)return a;a=this.$clipPosition(a),this.getLength()<=1&&this.$detectNewLine(b);var c=this.$split(b),d=c.splice(0,1)[0],e=c.length==0?null:c.splice(c.length-1,1)[0];return a=this.insertInLine(a,d),e!==null&&(a=this.insertNewLine(a),a=this.insertLines(a.row,c),a=this.insertInLine(a,e||"")),a},this.insertLines=function(a,b){if(b.length==0)return{row:a,column:0};var c=[a,0];c.push.apply(c,b),this.$lines.splice.apply(this.$lines,c);var d=new f(a,0,a+b.length,0),e={action:"insertLines",range:d,lines:b};return this._emit("change",{data:e}),d.end},this.insertNewLine=function(a){a=this.$clipPosition(a);var b=this.$lines[a.row]||"";this.$lines[a.row]=b.substring(0,a.column),this.$lines.splice(a.row+1,0,b.substring(a.column,b.length));var c={row:a.row+1,column:0},d={action:"insertText",range:f.fromPoints(a,c),text:this.getNewLineCharacter()};return this._emit("change",{data:d}),c},this.insertInLine=function(a,b){if(b.length==0)return a;var c=this.$lines[a.row]||"";this.$lines[a.row]=c.substring(0,a.column)+b+c.substring(a.column);var d={row:a.row,column:a.column+b.length},e={action:"insertText",range:f.fromPoints(a,d),text:b};return this._emit("change",{data:e}),d},this.remove=function(a){a.start=this.$clipPosition(a.start),a.end=this.$clipPosition(a.end);if(a.isEmpty())return a.start;var b=a.start.row,c=a.end.row;if(a.isMultiLine()){var d=a.start.column==0?b:b+1,e=c-1;a.end.column>0&&this.removeInLine(c,0,a.end.column),e>=d&&this.removeLines(d,e),d!=b&&(this.removeInLine(b,a.start.column,this.getLine(b).length),this.removeNewLine(a.start.row))}else this.removeInLine(b,a.start.column,a.end.column);return a.start},this.removeInLine=function(a,b,c){if(b==c)return;var d=new f(a,b,a,c),e=this.getLine(a),g=e.substring(b,c),h=e.substring(0,b)+e.substring(c,e.length);this.$lines.splice(a,1,h);var i={action:"removeText",range:d,text:g};return this._emit("change",{data:i}),d.start},this.removeLines=function(a,b){var c=new f(a,0,b+1,0),d=this.$lines.splice(a,b-a+1),e={action:"removeLines",range:c,nl:this.getNewLineCharacter(),lines:d};return this._emit("change",{data:e}),d},this.removeNewLine=function(a){var b=this.getLine(a),c=this.getLine(a+1),d=new f(a,b.length,a+1,0),e=b+c;this.$lines.splice(a,2,e);var g={action:"removeText",range:d,text:this.getNewLineCharacter()};this._emit("change",{data:g})},this.replace=function(a,b){if(b.length==0&&a.isEmpty())return a.start;if(b==this.getTextRange(a))return a.end;this.remove(a);if(b)var c=this.insert(a.start,b);else c=a.start;return c},this.applyDeltas=function(a){for(var b=0;b<a.length;b++){var c=a[b],d=f.fromPoints(c.range.start,c.range.end);c.action=="insertLines"?this.insertLines(d.start.row,c.lines):c.action=="insertText"?this.insert(d.start,c.text):c.action=="removeLines"?this.removeLines(d.start.row,d.end.row-1):c.action=="removeText"&&this.remove(d)}},this.revertDeltas=function(a){for(var b=a.length-1;b>=0;b--){var c=a[b],d=f.fromPoints(c.range.start,c.range.end);c.action=="insertLines"?this.removeLines(d.start.row,d.end.row-1):c.action=="insertText"?this.remove(d):c.action=="removeLines"?this.insertLines(d.start.row,c.lines):c.action=="removeText"&&this.insert(d.start,c.text)}}}).call(h.prototype),b.Document=h}),define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("./lib/oop"),e=a("./lib/event_emitter").EventEmitter,f=b.Anchor=function(a,b,c){this.document=a,typeof c=="undefined"?this.setPosition(b.row,b.column):this.setPosition(b,c),this.$onChange=this.onChange.bind(this),a.on("change",this.$onChange)};(function(){d.implement(this,e),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.onChange=function(a){var b=a.data,c=b.range;if(c.start.row==c.end.row&&c.start.row!=this.row)return;if(c.start.row>this.row)return;if(c.start.row==this.row&&c.start.column>this.column)return;var d=this.row,e=this.column;b.action==="insertText"?c.start.row===d&&c.start.column<=e?c.start.row===c.end.row?e+=c.end.column-c.start.column:(e-=c.start.column,d+=c.end.row-c.start.row):c.start.row!==c.end.row&&c.start.row<d&&(d+=c.end.row-c.start.row):b.action==="insertLines"?c.start.row<=d&&(d+=c.end.row-c.start.row):b.action=="removeText"?c.start.row==d&&c.start.column<e?c.end.column>=e?e=c.start.column:e=Math.max(0,e-(c.end.column-c.start.column)):c.start.row!==c.end.row&&c.start.row<d?(c.end.row==d&&(e=Math.max(0,e-c.end.column)+c.start.column),d-=c.end.row-c.start.row):c.end.row==d&&(d-=c.end.row-c.start.row,e=Math.max(0,e-c.end.column)+c.start.column):b.action=="removeLines"&&c.start.row<=d&&(c.end.row<=d?d-=c.end.row-c.start.row:(d=c.start.row,e=0)),this.setPosition(d,e,!0)},this.setPosition=function(a,b,c){var d;c?d={row:a,column:b}:d=this.$clipPositionToDocument(a,b);if(this.row==d.row&&this.column==d.column)return;var e={row:this.row,column:this.column};this.row=d.row,this.column=d.column,this._emit("change",{old:e,value:d})},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.$clipPositionToDocument=function(a,b){var c={};return a>=this.document.getLength()?(c.row=Math.max(0,this.document.getLength()-1),c.column=this.document.getLine(c.row).length):a<0?(c.row=0,c.column=0):(c.row=a,c.column=Math.min(this.document.getLine(c.row).length,Math.max(0,b))),b<0&&(c.column=0),c}}).call(f.prototype)}),define("ace/background_tokenizer",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("./lib/oop"),e=a("./lib/event_emitter").EventEmitter,f=function(a,b){this.running=!1,this.lines=[],this.currentLine=0,this.tokenizer=a;var c=this;this.$worker=function(){if(!c.running)return;var a=new Date,b=c.currentLine,d=c.doc,e=0,f=d.getLength();while(c.currentLine<f){c.lines[c.currentLine]=c.$tokenizeRows(c.currentLine,c.currentLine)[0],c.currentLine++,e+=1;if(e%5==0&&new Date-a>20){c.fireUpdateEvent(b,c.currentLine-1),c.running=setTimeout(c.$worker,20);return}}c.running=!1,c.fireUpdateEvent(b,f-1)}};(function(){d.implement(this,e),this.setTokenizer=function(a){this.tokenizer=a,this.lines=[],this.start(0)},this.setDocument=function(a){this.doc=a,this.lines=[],this.stop()},this.fireUpdateEvent=function(a,b){var c={first:a,last:b};this._emit("update",{data:c})},this.start=function(a){this.currentLine=Math.min(a||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(a,b){return this.$tokenizeRows(a,b)},this.getState=function(a){return this.$tokenizeRows(a,a)[0].state},this.$tokenizeRows=function(a,b){if(!this.doc||isNaN(a)||isNaN(b))return[{state:"start",tokens:[]}];var c=[],d="start",e=!1;a>0&&this.lines[a-1]?(d=this.lines[a-1].state,e=!0):a==0?(d="start",e=!0):this.lines.length>0&&(d=this.lines[this.lines.length-1].state);var f=this.doc.getLines(a,b);for(var g=a;g<=b;g++)if(!this.lines[g]){var h=this.tokenizer.getLineTokens(f[g-a]||"",d),d=h.state;c.push(h),e&&(this.lines[g]=h)}else{var h=this.lines[g];d=h.state,c.push(h)}return c}}).call(f.prototype),b.BackgroundTokenizer=f}),define("ace/edit_session/folding",["require","exports","module","ace/range","ace/edit_session/fold_line","ace/edit_session/fold","ace/token_iterator"],function(a,b,c){function h(){this.getFoldAt=function(a,b,c){var d=this.getFoldLine(a);if(!d)return null;var e=d.folds;for(var f=0;f<e.length;f++){var g=e[f];if(g.range.contains(a,b)){if(c==1&&g.range.isEnd(a,b))continue;if(c==-1&&g.range.isStart(a,b))continue;return g}}},this.getFoldsInRange=function(a){a=a.clone();var b=a.start,c=a.end,d=this.$foldData,e=[];b.column+=1,c.column-=1;for(var f=0;f<d.length;f++){var g=d[f].range.compareRange(a);if(g==2)continue;if(g==-2)break;var h=d[f].folds;for(var i=0;i<h.length;i++){var j=h[i];g=j.range.compareRange(a);if(g==-2)break;if(g==2)continue;if(g==42)break;e.push(j)}}return e},this.getAllFolds=function(){function c(b){a.push(b);if(!b.subFolds)return;for(var d=0;d<b.subFolds.length;d++)c(b.subFolds[d])}var a=[],b=this.$foldData;for(var d=0;d<b.length;d++)for(var e=0;e<b[d].folds.length;e++)c(b[d].folds[e]);return a},this.getFoldStringAt=function(a,b,c,d){d=d||this.getFoldLine(a);if(!d)return null;var e={end:{column:0}},f,g;for(var h=0;h<d.folds.length;h++){g=d.folds[h];var i=g.range.compareEnd(a,b);if(i==-1){f=this.getLine(g.start.row).substring(e.end.column,g.start.column);break}if(i===0)return null;e=g}return f||(f=this.getLine(g.start.row).substring(e.end.column)),c==-1?f.substring(0,b-e.end.column):c==1?f.substring(b-e.end.column):f},this.getFoldLine=function(a,b){var c=this.$foldData,d=0;b&&(d=c.indexOf(b)),d==-1&&(d=0);for(d;d<c.length;d++){var e=c[d];if(e.start.row<=a&&e.end.row>=a)return e;if(e.end.row>a)return null}return null},this.getNextFoldLine=function(a,b){var c=this.$foldData,d=0;b&&(d=c.indexOf(b)),d==-1&&(d=0);for(d;d<c.length;d++){var e=c[d];if(e.end.row>=a)return e}return null},this.getFoldedRowCount=function(a,b){var c=this.$foldData,d=b-a+1;for(var e=0;e<c.length;e++){var f=c[e],g=f.end.row,h=f.start.row;if(g>=b){h<b&&(h>=a?d-=b-h:d=0);break}g>=a&&(h>=a?d-=g-h:d-=g-a+1)}return d},this.$addFoldLine=function(a){return this.$foldData.push(a),this.$foldData.sort(function(a,b){return a.start.row-b.start.row}),a},this.addFold=function(a,b){var c=this.$foldData,d=!1,g;a instanceof f?g=a:g=new f(b,a),this.$clipRangeToDocument(g.range);var h=g.start.row,i=g.start.column,j=g.end.row,k=g.end.column;if(g.placeholder.length<2)throw"Placeholder has to be at least 2 characters";if(h==j&&k-i<2)throw"The range has to be at least 2 characters width";var l=this.getFoldAt(h,i,1),m=this.getFoldAt(j,k,-1);if(l&&m==l)return l.addSubFold(g);if(l&&!l.range.isStart(h,i)||m&&!m.range.isEnd(j,k))throw"A fold can't intersect already existing fold"+g.range+l.range;var n=this.getFoldsInRange(g.range);n.length>0&&(this.removeFolds(n),g.subFolds=n);for(var o=0;o<c.length;o++){var p=c[o];if(j==p.start.row){p.addFold(g),d=!0;break}if(h==p.end.row){p.addFold(g),d=!0;if(!g.sameRow){var q=c[o+1];if(q&&q.start.row==j){p.merge(q);break}}break}if(j<=p.start.row)break}return d||(p=this.$addFoldLine(new e(this.$foldData,g))),this.$useWrapMode&&this.$updateWrapData(p.start.row,p.start.row),this.$modified=!0,this._emit("changeFold",{data:g}),g},this.addFolds=function(a){a.forEach(function(a){this.addFold(a)},this)},this.removeFold=function(a){var b=a.foldLine,c=b.start.row,d=b.end.row,e=this.$foldData,f=b.folds;if(f.length==1)e.splice(e.indexOf(b),1);else if(b.range.isEnd(a.end.row,a.end.column))f.pop(),b.end.row=f[f.length-1].end.row,b.end.column=f[f.length-1].end.column;else if(b.range.isStart(a.start.row,a.start.column))f.shift(),b.start.row=f[0].start.row,b.start.column=f[0].start.column;else if(a.sameRow)f.splice(f.indexOf(a),1);else{var g=b.split(a.start.row,a.start.column);f=g.folds,f.shift(),g.start.row=f[0].start.row,g.start.column=f[0].start.column}this.$useWrapMode&&this.$updateWrapData(c,d),this.$modified=!0,this._emit("changeFold",{data:a})},this.removeFolds=function(a){var b=[];for(var c=0;c<a.length;c++)b.push(a[c]);b.forEach(function(a){this.removeFold(a)},this),this.$modified=!0},this.expandFold=function(a){this.removeFold(a),a.subFolds.forEach(function(a){this.addFold(a)},this),a.subFolds=[]},this.expandFolds=function(a){a.forEach(function(a){this.expandFold(a)},this)},this.unfold=function(a,b){var c,e;a==null?c=new d(0,0,this.getLength(),0):typeof a=="number"?c=new d(a,0,a,this.getLine(a).length):"row"in a?c=d.fromPoints(a,a):c=a,e=this.getFoldsInRange(c);if(b)this.removeFolds(e);else while(e.length)this.expandFolds(e),e=this.getFoldsInRange(c)},this.isRowFolded=function(a,b){return!!this.getFoldLine(a,b)},this.getRowFoldEnd=function(a,b){var c=this.getFoldLine(a,b);return c?c.end.row:a},this.getFoldDisplayLine=function(a,b,c,d,e){d==null&&(d=a.start.row,e=0),b==null&&(b=a.end.row,c=this.getLine(b).length);var f=this.doc,g="";return a.walk(function(a,b,c,h){if(b<d)return;if(b==d){if(c<e)return;h=Math.max(e,h)}a?g+=a:g+=f.getLine(b).substring(h,c)}.bind(this),b,c),g},this.getDisplayLine=function(a,b,c,d){var e=this.getFoldLine(a);if(!e){var f;return f=this.doc.getLine(a),f.substring(d||0,b||f.length)}return this.getFoldDisplayLine(e,a,b,c,d)},this.$cloneFoldData=function(){var a=[];return a=this.$foldData.map(function(b){var c=b.folds.map(function(a){return a.clone()});return new e(a,c)}),a},this.toggleFold=function(a){var b=this.selection,c=b.getRange(),d,e;if(c.isEmpty()){var f=c.start;d=this.getFoldAt(f.row,f.column);if(d){this.expandFold(d);return}(e=this.findMatchingBracket(f))?c.comparePoint(e)==1?c.end=e:(c.start=e,c.start.column++,c.end.column--):(e=this.findMatchingBracket({row:f.row,column:f.column+1}))?(c.comparePoint(e)==1?c.end=e:c.start=e,c.start.column++):c=this.getCommentFoldRange(f.row,f.column)||c}else{var g=this.getFoldsInRange(c);if(a&&g.length){this.expandFolds(g);return}g.length==1&&(d=g[0])}d||(d=this.getFoldAt(c.start.row,c.start.column));if(d&&d.range.toString()==c.toString()){this.expandFold(d);return}var h="...";if(!c.isMultiLine()){h=this.getTextRange(c);if(h.length<4)return;h=h.trim().substring(0,2)+".."}this.addFold(h,c)},this.getCommentFoldRange=function(a,b){var c=new g(this,a,b),e=c.getCurrentToken();if(e&&/^comment|string/.test(e.type)){var f=new d,h=new RegExp(e.type.replace(/\..*/,"\\."));do e=c.stepBackward();while(e&&h.test(e.type));c.stepForward(),f.start.row=c.getCurrentTokenRow(),f.start.column=c.getCurrentTokenColumn()+2,c=new g(this,a,b);do e=c.stepForward();while(e&&h.test(e.type));return e=c.stepBackward(),f.end.row=c.getCurrentTokenRow(),f.end.column=c.getCurrentTokenColumn()+e.value.length,f}},this.foldAll=function(a,b){var c=this.foldWidgets;b=b||this.getLength();for(var d=a||0;d<b;d++){c[d]==null&&(c[d]=this.getFoldWidget(d));if(c[d]!="start")continue;var e=this.getFoldWidgetRange(d);if(e&&e.end.row<b)try{this.addFold("...",e)}catch(f){}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(a){if(!this.$foldStyles[a])throw new Error("invalid fold style: "+a+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle==a)return;this.$foldStyle=a,a=="manual"&&this.unfold();var b=this.$foldMode;this.$setFolding(null),this.$setFolding(b)},this.$setFolding=function(a){if(this.$foldMode==a)return;this.$foldMode=a,this.removeListener("change",this.$updateFoldWidgets),this._emit("changeAnnotation");if(!a||this.$foldStyle=="manual"){this.foldWidgets=null;return}this.foldWidgets=[],this.getFoldWidget=a.getFoldWidget.bind(a,this,this.$foldStyle),this.getFoldWidgetRange=a.getFoldWidgetRange.bind(a,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets)},this.onFoldWidgetClick=function(a,b){var c=this.getFoldWidget(a),d=this.getLine(a),e=b.shiftKey,f=e||b.ctrlKey||b.altKey||b.metaKey,g;c=="end"?g=this.getFoldAt(a,0,-1):g=this.getFoldAt(a,d.length,1);if(g){f?this.removeFold(g):this.expandFold(g);return}var h=this.getFoldWidgetRange(a);if(h){if(!h.isMultiLine()){g=this.getFoldAt(h.start.row,h.start.column,1);if(g&&h.isEqual(g.range)){this.removeFold(g);return}}e||this.addFold("...",h),f&&this.foldAll(h.start.row+1,h.end.row)}else f&&this.foldAll(a+1,this.getLength()),b.target.className+=" invalid"},this.updateFoldWidgets=function(a){var b=a.data,c=b.range,d=c.start.row,e=c.end.row-d;if(e===0)this.foldWidgets[d]=null;else if(b.action=="removeText"||b.action=="removeLines")this.foldWidgets.splice(d,e+1,null);else{var f=Array(e+1);f.unshift(d,1),this.foldWidgets.splice.apply(this.foldWidgets,f)}}}"use strict";var d=a("../range").Range,e=a("./fold_line").FoldLine,f=a("./fold").Fold,g=a("../token_iterator").TokenIterator;b.Folding=h}),define("ace/edit_session/fold_line",["require","exports","module","ace/range"],function(a,b,c){function e(a,b){this.foldData=a,Array.isArray(b)?this.folds=b:b=this.folds=[b];var c=b[b.length-1];this.range=new d(b[0].start.row,b[0].start.column,c.end.row,c.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach(function(a){a.setFoldLine(this)},this)}"use strict";var d=a("../range").Range;(function(){this.shiftRow=function(a){this.start.row+=a,this.end.row+=a,this.folds.forEach(function(b){b.start.row+=a,b.end.row+=a})},this.addFold=function(a){if(a.sameRow){if(a.start.row<this.startRow||a.endRow>this.endRow)throw"Can't add a fold to this FoldLine as it has no connection";this.folds.push(a),this.folds.sort(function(a,b){return-a.range.compareEnd(b.start.row,b.start.column)}),this.range.compareEnd(a.start.row,a.start.column)>0?(this.end.row=a.end.row,this.end.column=a.end.column):this.range.compareStart(a.end.row,a.end.column)<0&&(this.start.row=a.start.row,this.start.column=a.start.column)}else if(a.start.row==this.end.row)this.folds.push(a),this.end.row=a.end.row,this.end.column=a.end.column;else{if(a.end.row!=this.start.row)throw"Trying to add fold to FoldRow that doesn't have a matching row";this.folds.unshift(a),this.start.row=a.start.row,this.start.column=a.start.column}a.foldLine=this},this.containsRow=function(a){return a>=this.start.row&&a<=this.end.row},this.walk=function(a,b,c){var d=0,e=this.folds,f,g,h,i=!0;b==null&&(b=this.end.row,c=this.end.column);for(var j=0;j<e.length;j++){f=e[j],g=f.range.compareStart(b,c);if(g==-1){a(null,b,c,d,i);return}h=a(null,f.start.row,f.start.column,d,i),h=!h&&a(f.placeholder,f.start.row,f.start.column,d);if(h||g==0)return;i=!f.sameRow,d=f.end.column}a(null,b,c,d,i)},this.getNextFoldTo=function(a,b){var c,d;for(var e=0;e<this.folds.length;e++){c=this.folds[e],d=c.range.compareEnd(a,b);if(d==-1)return{fold:c,kind:"after"};if(d==0)return{fold:c,kind:"inside"}}return null},this.addRemoveChars=function(a,b,c){var d=this.getNextFoldTo(a,b),e,f;if(d){e=d.fold;if(d.kind=="inside"&&e.start.column!=b&&e.start.row!=a)throw"Moving characters inside of a fold should never be reached";if(e.start.row==a){f=this.folds;var g=f.indexOf(e);g==0&&(this.start.column+=c);for(g;g<f.length;g++){e=f[g],e.start.column+=c;if(!e.sameRow)return;e.end.column+=c}this.end.column+=c}}},this.split=function(a,b){var c=this.getNextFoldTo(a,b).fold,d=this.folds,f=this.foldData;if(!c)return null;var g=d.indexOf(c),h=d[g-1];this.end.row=h.end.row,this.end.column=h.end.column,d=d.splice(g,d.length-g);var i=new e(f,d);return f.splice(f.indexOf(this)+1,0,i),i},this.merge=function(a){var b=a.folds;for(var c=0;c<b.length;c++)this.addFold(b[c]);var d=this.foldData;d.splice(d.indexOf(a),1)},this.toString=function(){var a=[this.range.toString()+": ["];return this.folds.forEach(function(b){a.push(" "+b.toString())}),a.push("]"),a.join("\n")},this.idxToPosition=function(a){var b=0,c;for(var d=0;d<this.folds.length;d++){var c=this.folds[d];a-=c.start.column-b;if(a<0)return{row:c.start.row,column:c.start.column+a};a-=c.placeholder.length;if(a<0)return c.start;b=c.end.column}return{row:this.end.row,column:this.end.column+a}}}).call(e.prototype),b.FoldLine=e}),define("ace/edit_session/fold",["require","exports","module"],function(a,b,c){"use strict";var d=b.Fold=function(a,b){this.foldLine=null,this.placeholder=b,this.range=a,this.start=a.start,this.end=a.end,this.sameRow=a.start.row==a.end.row,this.subFolds=[]};(function(){this.toString=function(){return'"'+this.placeholder+'" '+this.range.toString()},this.setFoldLine=function(a){this.foldLine=a,this.subFolds.forEach(function(b){b.setFoldLine(a)})},this.clone=function(){var a=this.range.clone(),b=new d(a,this.placeholder);return this.subFolds.forEach(function(a){b.subFolds.push(a.clone())}),b},this.addSubFold=function(a){if(this.range.isEqual(a))return this;if(!this.range.containsRange(a))throw"A fold can't intersect already existing fold"+a.range+this.range;var b=a.range.start.row,c=a.range.start.column;for(var d=0,e=-1;d<this.subFolds.length;d++){e=this.subFolds[d].range.compare(b,c);if(e!=1)break}var f=this.subFolds[d];if(e==0)return f.addSubFold(a);var b=a.range.end.row,c=a.range.end.column;for(var g=d,e=-1;g<this.subFolds.length;g++){e=this.subFolds[g].range.compare(b,c);if(e!=1)break}var h=this.subFolds[g];if(e==0)throw"A fold can't intersect already existing fold"+a.range+this.range;var i=this.subFolds.splice(d,g-d,a);return a.setFoldLine(this.foldLine),a}}).call(d.prototype)}),define("ace/token_iterator",["require","exports","module"],function(a,b,c){"use strict";var d=function(a,b,c){this.$session=a,this.$row=b,this.$rowTokens=a.getTokens(b,b)[0].tokens;var d=a.getTokenAt(b,c);this.$tokenIndex=d?d.index:-1};(function(){this.stepBackward=function(){this.$tokenIndex-=1;while(this.$tokenIndex<0){this.$row-=1;if(this.$row<0)return this.$row=0,null;this.$rowTokens=this.$session.getTokens(this.$row,this.$row)[0].tokens,this.$tokenIndex=this.$rowTokens.length-1}return this.$rowTokens[this.$tokenIndex]},this.stepForward=function(){var a=this.$session.getLength();this.$tokenIndex+=1;while(this.$tokenIndex>=this.$rowTokens.length){this.$row+=1;if(this.$row>=a)return this.$row=a-1,null;this.$rowTokens=this.$session.getTokens(this.$row,this.$row)[0].tokens,this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var a=this.$rowTokens,b=this.$tokenIndex,c=a[b].start;if(c!==undefined)return c;c=0;while(b>0)b-=1,c+=a[b].value.length;return c}}).call(d.prototype),b.TokenIterator=d}),define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator"],function(a,b,c){function e(){this.findMatchingBracket=function(a){if(a.column==0)return null;var b=this.getLine(a.row).charAt(a.column-1);if(b=="")return null;var c=b.match(/([\(\[\{])|([\)\]\}])/);return c?c[1]?this.$findClosingBracket(c[1],a):this.$findOpeningBracket(c[2],a):null},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{"},this.$findOpeningBracket=function(a,b){var c=this.$brackets[a],e=1,f=new d(this,b.row,b.column),g=f.getCurrentToken();if(!g)return null;var h=new RegExp("(\\.?"+g.type.replace(".","|").replace("rparen","lparen|rparen")+")+"),i=b.column-f.getCurrentTokenColumn()-2,j=g.value;for(;;){while(i>=0){var k=j.charAt(i);if(k==c){e-=1;if(e==0)return{row:f.getCurrentTokenRow(),column:i+f.getCurrentTokenColumn()}}else k==a&&(e+=1);i-=1}do g=f.stepBackward();while(g&&!h.test(g.type));if(g==null)break;j=g.value,i=j.length-1}return null},this.$findClosingBracket=function(a,b){var c=this.$brackets[a],e=1,f=new d(this,b.row,b.column),g=f.getCurrentToken();if(!g)return null;var h=new RegExp("(\\.?"+g.type.replace(".","|").replace("lparen","lparen|rparen")+")+"),i=b.column-f.getCurrentTokenColumn();for(;;){var j=g.value,k=j.length;while(i<k){var l=j.charAt(i);if(l==c){e-=1;if(e==0)return{row:f.getCurrentTokenRow(),column:i+f.getCurrentTokenColumn()}}else l==a&&(e+=1);i+=1}do g=f.stepForward();while(g&&!h.test(g.type));if(g==null)break;i=0}return null}}"use strict";var d=a("../token_iterator").TokenIterator;b.BracketMatch=e}),define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(a,b,c){"use strict";var d=a("./lib/lang"),e=a("./lib/oop"),f=a("./range").Range,g=function(){this.$options={needle:"",backwards:!1,wrap:!1,caseSensitive:!1,wholeWord:!1,scope:g.ALL,regExp:!1}};g.ALL=1,g.SELECTION=2,function(){this.set=function(a){return e.mixin(this.$options,a),this},this.getOptions=function(){return d.copyObject(this.$options)},this.find=function(a){if(!this.$options.needle)return null;if(this.$options.backwards)var b=this.$backwardMatchIterator(a);else b=this.$forwardMatchIterator(a);var c=null;return b.forEach(function(a){return c=a,!0}),c},this.findAll=function(a){var b=this.$options;if(!b.needle)return[];if(b.backwards)var c=this.$backwardMatchIterator(a);else c=this.$forwardMatchIterator(a);var d=!b.start&&b.wrap&&b.scope==g.ALL;d&&(b.start={row:0,column:0});var e=[];return c.forEach(function(a){e.push(a)}),d&&(b.start=null),e},this.replace=function(a,b){var c=this.$assembleRegExp(),d=c.exec(a);return d&&d[0].length==a.length?this.$options.regExp?a.replace(c,b):b:null},this.$forwardMatchIterator=function(a){var b=this.$assembleRegExp(),c=this;return{forEach:function(d){c.$forwardLineIterator(a).forEach(function(a,e,f){e&&(a=a.substring(e));var g=[];a.replace(b,function(a){var b=arguments[arguments.length-2];return g.push({str:a,offset:e+b}),a});for(var h=0;h<g.length;h++){var i=g[h],j=c.$rangeFromMatch(f,i.offset,i.str.length);if(d(j))return!0}})}}},this.$backwardMatchIterator=function(a){var b=this.$assembleRegExp(),c=this;return{forEach:function(d){c.$backwardLineIterator(a).forEach(function(a,e,f){e&&(a=a.substring(e));var g=[];a.replace(b,function(a,b){return g.push({str:a,offset:e+b}),a});for(var h=g.length-1;h>=0;h--){var i=g[h],j=c.$rangeFromMatch(f,i.offset,i.str.length);if(d(j))return!0}})}}},this.$rangeFromMatch=function(a,b,c){return new f(a,b,a,b+c)},this.$assembleRegExp=function(){if(this.$options.regExp)var a=this.$options.needle;else a=d.escapeRegExp(this.$options.needle);this.$options.wholeWord&&(a="\\b"+a+"\\b");var b="g";this.$options.caseSensitive||(b+="i");var c=new RegExp(a,b);return c},this.$forwardLineIterator=function(a){function k(e){var f=a.getLine(e);return b&&e==c.end.row&&(f=f.substring(0,c.end.column)),j&&e==d.row&&(f=f.substring(0,d.column)),f}var b=this.$options.scope==g.SELECTION,c=this.$options.range||a.getSelection().getRange(),d=this.$options.start||c[b?"start":"end"],e=b?c.start.row:0,f=b?c.start.column:0,h=b?c.end.row:a.getLength()-1,i=this.$options.wrap,j=!1;return{forEach:function(a){var b=d.row,c=k(b),g=d.column,l=!1;j=!1;while(!a(c,g,b)){if(l)return;b++,g=0;if(b>h){if(!i)return;b=e,g=f,j=!0}b==d.row&&(l=!0),c=k(b)}}}},this.$backwardLineIterator=function(a){var b=this.$options.scope==g.SELECTION,c=this.$options.range||a.getSelection().getRange(),d=this.$options.start||c[b?"end":"start"],e=b?c.start.row:0,f=b?c.start.column:0,h=b?c.end.row:a.getLength()-1,i=this.$options.wrap;return{forEach:function(g){var j=d.row,k=a.getLine(j).substring(0,d.column),l=0,m=!1,n=!1;while(!g(k,l,j)){if(m)return;j--,l=0;if(j<e){if(!i)return;j=h,n=!0}j==d.row&&(m=!0),k=a.getLine(j),b&&(j==e?l=f:j==h&&(k=k.substring(0,c.end.column))),n&&j==d.row&&(l=d.column)}}}}}.call(g.prototype),b.Search=g}),define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../keyboard/hash_handler").HashHandler,f=a("../lib/event_emitter").EventEmitter,g=function(a,b){this.platform=a,this.commands={},this.commmandKeyBinding={},this.addCommands(b),this.setDefaultHandler("exec",function(a){a.command.exec(a.editor,a.args||{})})};d.inherits(g,e),function(){d.implement(this,f),this.exec=function(a,b,c){return typeof a=="string"&&(a=this.commands[a]),a?b&&b.$readOnly&&!a.readOnly?!1:(this._emit("exec",{editor:b,command:a,args:c}),!0):!1},this.toggleRecording=function(){if(this.$inReplay)return;return this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(a){this.macro.push([a.command,a.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(a){if(this.$inReplay||!this.macro)return;if(this.recording)return this.toggleRecording();try{this.$inReplay=!0,this.macro.forEach(function(b){typeof b=="string"?this.exec(b,a):this.exec(b[0],a,b[1])},this)}finally{this.$inReplay=!1}},this.trimMacro=function(a){return a.map(function(a){return typeof a[0]!="string"&&(a[0]=a[0].name),a[1]||(a=a[0]),a})}}.call(g.prototype),b.CommandManager=g}),define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys"],function(a,b,c){function e(a,b){this.platform=b,this.commands={},this.commmandKeyBinding={},this.addCommands(a)}"use strict";var d=a("../lib/keys");(function(){function a(a,c,e){var f,g=0,h=b(a.toLowerCase());for(var i=0,j=h.length;i<j;i++)d.KEY_MODS[h[i]]?g|=d.KEY_MODS[h[i]]:f=h[i]||"-";return{key:f,hashId:g}}function b(a){return a.trim().split(new RegExp("[\\s ]*\\-[\\s ]*","g"),999)}this.addCommand=function(a){this.commands[a.name]&&this.removeCommand(a),this.commands[a.name]=a,a.bindKey&&this._buildKeyHash(a)},this.removeCommand=function(a){var b=typeof a=="string"?a:a.name;a=this.commands[b],delete this.commands[b];var c=this.commmandKeyBinding;for(var d in c)for(var e in c[d])c[d][e]==a&&delete c[d][e]},this.addCommands=function(a){a&&Object.keys(a).forEach(function(b){var c=a[b];if(typeof c=="string")return this.bindKey(c,b);typeof c=="function"&&(c={exec:c}),c.name||(c.name=b),this.addCommand(c)},this)},this.removeCommands=function(a){Object.keys(a).forEach(function(b){this.removeCommand(a[b])},this)},this.bindKey=function(b,c){if(!b)return;var d=this.commmandKeyBinding;b.split("|").forEach(function(b){var e=a(b,c),f=e.hashId;(d[f]||(d[f]={}))[e.key]=c})},this.bindKeys=function(a){Object.keys(a).forEach(function(b){this.bindKey(b,a[b])},this)},this._buildKeyHash=function(a){var b=a.bindKey;if(!b)return;var c=typeof b=="string"?b:b[this.platform];this.bindKey(c,a)},this.findKeyCommand=function(b,c){var d=this.commmandKeyBinding;return d[b]&&d[b][c.toLowerCase()]},this.handleKeyboard=function(a,b,c,d){return{command:this.findKeyCommand(b,c)}}}).call(e.prototype),b.HashHandler=e}),define("ace/undomanager",["require","exports","module"],function(a,b,c){"use strict";var d=function(){this.reset()};(function(){this.execute=function(a){var b=a.args[0];this.$doc=a.args[1],this.$undoStack.push(b),this.$redoStack=[]},this.undo=function(a){var b=this.$undoStack.pop(),c=null;return b&&(c=this.$doc.undoChanges(b,a),this.$redoStack.push(b)),c},this.redo=function(a){var b=this.$redoStack.pop(),c=null;return b&&(c=this.$doc.redoChanges(b,a),this.$undoStack.push(b)),c},this.reset=function(){this.$undoStack=[],this.$redoStack=[]},this.hasUndo=function(){return this.$undoStack.length>0},this.hasRedo=function(){return this.$redoStack.length>0}}).call(d.prototype),b.UndoManager=d}),define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/useragent","ace/config","ace/lib/net","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/renderloop","ace/lib/event_emitter","text!ace/css/editor.css"],function(a,b,c){"use strict";var d=a("./lib/oop"),e=a("./lib/dom"),f=a("./lib/event"),g=a("./lib/useragent"),h=a("./config"),i=a("./lib/net"),j=a("./layer/gutter").Gutter,k=a("./layer/marker").Marker,l=a("./layer/text").Text,m=a("./layer/cursor").Cursor,n=a("./scrollbar").ScrollBar,o=a("./renderloop").RenderLoop,p=a("./lib/event_emitter").EventEmitter,q=a("text!./css/editor.css");e.importCssString(q,"ace_editor");var r=function(a,b){var c=this;this.container=a,e.addCssClass(a,"ace_editor"),this.setTheme(b),this.$gutter=e.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.scroller=e.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=e.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new j(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onResize.bind(this,!0)),this.$markerBack=new k(this.content);var d=this.$textLayer=new l(this.content);this.canvas=d.element,this.$markerFront=new k(this.content),this.characterWidth=d.getCharacterWidth(),this.lineHeight=d.getLineHeight(),this.$cursorLayer=new m(this.content),this.$cursorPadding=8,this.$horizScroll=!0,this.$horizScrollAlwaysVisible=!0,this.$animatedScroll=!1,this.scrollBar=new n(a),this.scrollBar.addEventListener("scroll",function(a){c.session.setScrollTop(a.data)}),this.scrollTop=0,this.scrollLeft=0,f.addListener(this.scroller,"scroll",function(){var a=c.scroller.scrollLeft;c.scrollLeft=a,c.session.setScrollLeft(a),a==0?c.$gutter.className="ace_gutter":c.$gutter.className="ace_gutter horscroll"}),this.cursorPos={row:0,column:0},this.$textLayer.addEventListener("changeCharacterSize",function(){c.characterWidth=d.getCharacterWidth(),c.lineHeight=d.getLineHeight(),c.$updatePrintMargin(),c.onResize(!0),c.$loop.schedule(c.CHANGE_FULL)}),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:1,characterWidth:1,minHeight:1,maxHeight:1,offset:0,height:1},this.$loop=new o(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.setPadding(4),this.$updatePrintMargin()};(function(){this.showGutter=!0,this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,d.implement(this,p),this.setSession=function(a){this.session=a,this.$cursorLayer.setSession(a),this.$markerBack.setSession(a),this.$markerFront.setSession(a),this.$gutterLayer.setSession(a),this.$textLayer.setSession(a),this.$loop.schedule(this.CHANGE_FULL)},this.updateLines=function(a,b){b===undefined&&(b=Infinity),this.$changedLines?(this.$changedLines.firstRow>a&&(this.$changedLines.firstRow=a),this.$changedLines.lastRow<b&&(this.$changedLines.lastRow=b)):this.$changedLines={firstRow:a,lastRow:b},this.$loop.schedule(this.CHANGE_LINES)},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(){this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.onResize=function(a){var b=this.CHANGE_SIZE,c=this.$size,d=e.getInnerHeight(this.container);if(a||c.height!=d)c.height=d,this.scroller.style.height=d+"px",c.scrollerHeight=this.scroller.clientHeight,this.scrollBar.setHeight(c.scrollerHeight),this.session&&(this.session.setScrollTop(this.getScrollTop()),b|=this.CHANGE_FULL);var f=e.getInnerWidth(this.container);if(a||c.width!=f){c.width=f;var g=this.showGutter?this.$gutter.offsetWidth:0;this.scroller.style.left=g+"px",c.scrollerWidth=Math.max(0,f-g-this.scrollBar.getWidth()),this.scroller.style.width=c.scrollerWidth+"px";if(this.session.getUseWrapMode()&&this.adjustWrapLimit()||a)b|=this.CHANGE_FULL}this.$loop.schedule(b)},this.adjustWrapLimit=function(){var a=this.$size.scrollerWidth-this.$padding*2,b=Math.floor(a/this.characterWidth);return this.session.adjustWrapLimit(b)},this.setAnimatedScroll=function(a){this.$animatedScroll=a},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(a){this.$textLayer.setShowInvisibles(a)&&this.$loop.schedule(this.CHANGE_TEXT)},this.getShowInvisibles=function(){return this.$textLayer.showInvisibles},this.$showPrintMargin=!0,this.setShowPrintMargin=function(a){this.$showPrintMargin=a,this.$updatePrintMargin()},this.getShowPrintMargin=function(){return this.$showPrintMargin},this.$printMarginColumn=80,this.setPrintMarginColumn=function(a){this.$printMarginColumn=a,this.$updatePrintMargin()},this.getPrintMarginColumn=function(){return this.$printMarginColumn},this.getShowGutter=function(){return this.showGutter},this.setShowGutter=function(a){if(this.showGutter===a)return;this.$gutter.style.display=a?"block":"none",this.showGutter=a,this.onResize(!0)},this.$updatePrintMargin=function(){var a;if(!this.$showPrintMargin&&!this.$printMarginEl)return;this.$printMarginEl||(a=e.createElement("div"),a.className="ace_print_margin_layer",this.$printMarginEl=e.createElement("div"),this.$printMarginEl.className="ace_print_margin",a.appendChild(this.$printMarginEl),this.content.insertBefore(a,this.$textLayer.element));var b=this.$printMarginEl.style;b.left=this.characterWidth*this.$printMarginColumn+this.$padding+"px",b.visibility=this.$showPrintMargin?"visible":"hidden"},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.content},this.getTextAreaContainer=function(){return this.container},this.moveTextAreaToCursor=function(a){if(g.isIE)return;if(this.layerConfig.lastRow===0)return;var b=this.$cursorLayer.getPixelPosition();if(!b)return;var c=this.content.getBoundingClientRect(),d=this.layerConfig.offset;a.style.left=c.left+b.left+"px",a.style.top=c.top+b.top-this.scrollTop+d+"px"},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(this.layerConfig.offset===0?0:1)},this.getLastFullyVisibleRow=function(){var a=Math.floor((this.layerConfig.height+this.layerConfig.offset)/this.layerConfig.lineHeight);return this.layerConfig.firstRow-1+a},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(a){this.$padding=a,this.$textLayer.setPadding(a),this.$cursorLayer.setPadding(a),this.$markerFront.setPadding(a),this.$markerBack.setPadding(a),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.getHScrollBarAlwaysVisible=function(){return this.$horizScrollAlwaysVisible},this.setHScrollBarAlwaysVisible=function(a){this.$horizScrollAlwaysVisible!=a&&(this.$horizScrollAlwaysVisible=a,(!this.$horizScrollAlwaysVisible||!this.$horizScroll)&&this.$loop.schedule(this.CHANGE_SCROLL))},this.$updateScrollBar=function(){this.scrollBar.setInnerHeight(this.layerConfig.maxHeight),this.scrollBar.setScrollTop(this.scrollTop)},this.$renderChanges=function(a){if(!a||!this.session||!this.container.offsetWidth)return;(a&this.CHANGE_FULL||a&this.CHANGE_SIZE||a&this.CHANGE_TEXT||a&this.CHANGE_LINES||a&this.CHANGE_SCROLL)&&this.$computeLayerConfig();if(a&this.CHANGE_H_SCROLL){this.scroller.scrollLeft=this.scrollLeft;var b=this.scroller.scrollLeft;this.scrollLeft=b,this.session.setScrollLeft(b)}if(a&this.CHANGE_FULL){this.$textLayer.checkForSizeChanges(),this.$updateScrollBar(),this.$textLayer.update(this.layerConfig),this.showGutter&&this.$gutterLayer.update(this.layerConfig),this.$markerBack.update(this.layerConfig),this.$markerFront.update(this.layerConfig),this.$cursorLayer.update(this.layerConfig);return}if(a&this.CHANGE_SCROLL){this.$updateScrollBar(),a&this.CHANGE_TEXT||a&this.CHANGE_LINES?this.$textLayer.update(this.layerConfig):this.$textLayer.scrollLines(this.layerConfig),this.showGutter&&this.$gutterLayer.update(this.layerConfig),this.$markerBack.update(this.layerConfig),this.$markerFront.update(this.layerConfig),this.$cursorLayer.update(this.layerConfig);return}a&this.CHANGE_TEXT?(this.$textLayer.update(this.layerConfig),this.showGutter&&this.$gutterLayer.update(this.layerConfig)):a&this.CHANGE_LINES?this.$updateLines()&&(this.$updateScrollBar(),this.showGutter&&this.$gutterLayer.update(this.layerConfig)):a&this.CHANGE_GUTTER&&this.showGutter&&this.$gutterLayer.update(this.layerConfig),a&this.CHANGE_CURSOR&&this.$cursorLayer.update(this.layerConfig),a&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(this.layerConfig),a&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(this.layerConfig),a&this.CHANGE_SIZE&&this.$updateScrollBar()},this.$computeLayerConfig=function(){var a=this.session,b=this.scrollTop%this.lineHeight,c=this.$size.scrollerHeight+this.lineHeight,d=this.$getLongestLine(),e=this.$horizScrollAlwaysVisible||this.$size.scrollerWidth-d<0,f=this.$horizScroll!==e;this.$horizScroll=e,f&&(this.scroller.style.overflowX=e?"scroll":"hidden",e||this.session.setScrollLeft(0));var g=this.session.getScreenLength()*this.lineHeight;this.session.setScrollTop(Math.max(0,Math.min(this.scrollTop,g-this.$size.scrollerHeight)));var h=Math.ceil(c/this.lineHeight)-1,i=Math.max(0,Math.round((this.scrollTop-b)/this.lineHeight)),j=i+h,k,l,m={lineHeight:this.lineHeight};i=a.screenToDocumentRow(i,0);var n=a.getFoldLine(i);n&&(i=n.start.row),k=a.documentToScreenRow(i,0),l=a.getRowHeight(m,i),j=Math.min(a.screenToDocumentRow(j,0),a.getLength()-1),c=this.$size.scrollerHeight+a.getRowHeight(m,j)+l,b=this.scrollTop-k*this.lineHeight,this.layerConfig={width:d,padding:this.$padding,firstRow:i,firstRowScreen:k,lastRow:j,lineHeight:this.lineHeight,characterWidth:this.characterWidth,minHeight:c,maxHeight:g,offset:b,height:this.$size.scrollerHeight},this.$gutterLayer.element.style.marginTop=-b+"px",this.content.style.marginTop=-b+"px",this.content.style.width=d+2*this.$padding+"px",this.content.style.height=c+"px",f&&this.onResize(!0)},this.$updateLines=function(){var a=this.$changedLines.firstRow,b=this.$changedLines.lastRow;this.$changedLines=null;var c=this.layerConfig;if(c.width!=this.$getLongestLine())return this.$textLayer.update(c);if(a>c.lastRow+1)return;if(b<c.firstRow)return;if(b===Infinity){this.showGutter&&this.$gutterLayer.update(c),this.$textLayer.update(c);return}return this.$textLayer.updateLines(c,a,b),!0},this.$getLongestLine=function(){var a=this.session.getScreenWidth();return this.$textLayer.showInvisibles&&(a+=1),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(a*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(a,b){this.$gutterLayer.addGutterDecoration(a,b),this.$loop.schedule(this.CHANGE_GUTTER)},this.removeGutterDecoration=function(a,b){this.$gutterLayer.removeGutterDecoration(a,b),this.$loop.schedule(this.CHANGE_GUTTER)},this.setBreakpoints=function(a){this.$gutterLayer.setBreakpoints(a),this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(a){this.$gutterLayer.setAnnotations(a),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollSelectionIntoView=function(a,b){this.scrollCursorIntoView(a),this.scrollCursorIntoView(b)},this.scrollCursorIntoView=function(a){if(this.$size.scrollerHeight===0)return;var b=this.$cursorLayer.getPixelPosition(a),c=b.left,d=b.top;this.scrollTop>d&&this.session.setScrollTop(d),this.scrollTop+this.$size.scrollerHeight<d+this.lineHeight&&this.session.setScrollTop(d+this.lineHeight-this.$size.scrollerHeight);var e=this.scrollLeft;e>c&&(c<this.$padding+2*this.layerConfig.characterWidth&&(c=0),this.session.setScrollLeft(c)),e+this.$size.scrollerWidth<c+this.characterWidth&&this.session.setScrollLeft(Math.round(c+this.characterWidth-this.$size.scrollerWidth))},this.getScrollTop=function(){return this.session.getScrollTop()},this.getScrollLeft=function(){return this.session.getScrollLeft()},this.getScrollTopRow=function(){return this.scrollTop/this.lineHeight},this.getScrollBottomRow=function(){return Math.max(0,Math.floor((this.scrollTop+this.$size.scrollerHeight)/this.lineHeight)-1)},this.scrollToRow=function(a){this.session.setScrollTop(a*this.lineHeight)},this.STEPS=10,this.$calcSteps=function(a,b){var c=0,d=this.STEPS,e=[],f=function(a,b,c){return(a/=.5)<1?c/2*Math.pow(a,3)+b:c/2*(Math.pow(a-2,3)+2)+b};for(c=0;c<d;++c)e.push(f(c/this.STEPS,a,b-a));return e.push(b),e},this.scrollToLine=function(a,b){var c=this.$cursorLayer.getPixelPosition({row:a,column:0}),d=c.top;b&&(d-=this.$size.scrollerHeight/2);if(this.$animatedScroll&&Math.abs(d-this.scrollTop)<1e4){var e=this,f=e.$calcSteps(this.scrollTop,d);clearInterval(this.$timer),this.$timer=setInterval(function(){e.session.setScrollTop(f.shift()),f.length||clearInterval(e.$timer)},10)}else this.session.setScrollTop(d)},this.scrollToY=function(a){this.scrollTop!==a&&(this.$loop.schedule(this.CHANGE_SCROLL),this.scrollTop=a)},this.scrollToX=function(a){a<=this.$padding&&(a=0),this.scrollLeft!==a&&(this.scrollLeft=a),this.$loop.schedule(this.CHANGE_H_SCROLL)},this.scrollBy=function(a,b){b&&this.session.setScrollTop(this.session.getScrollTop()+b),a&&this.session.setScrollLeft(this.session.getScrollLeft()+a)},this.isScrollableBy=function(a,b){if(b<0&&this.session.getScrollTop()>0)return!0;if(b>0&&this.session.getScrollTop()+this.$size.scrollerHeight<this.layerConfig.maxHeight)return!0},this.pixelToScreenCoordinates=function(a,b){var c=this.scroller.getBoundingClientRect(),d=Math.round((a+this.scrollLeft-c.left-this.$padding-e.getPageScrollLeft())/this.characterWidth),f=Math.floor((b+this.scrollTop-c.top-e.getPageScrollTop())/this.lineHeight);return{row:f,column:d}},this.screenToTextCoordinates=function(a,b){var c=this.scroller.getBoundingClientRect(),d=Math.round((a+this.scrollLeft-c.left-this.$padding-e.getPageScrollLeft())/this.characterWidth),f=Math.floor((b+this.scrollTop-c.top-e.getPageScrollTop())/this.lineHeight);return this.session.screenToDocumentPosition(f,Math.max(d,0))},this.textToScreenCoordinates=function(a,b){var c=this.scroller.getBoundingClientRect(),d=this.session.documentToScreenPosition(a,b),e=this.$padding+Math.round(d.column*this.characterWidth),f=d.row*this.lineHeight;return{pageX:c.left+e-this.scrollLeft,pageY:c.top+f-this.scrollTop}},this.visualizeFocus=function(){e.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){e.removeCssClass(this.container,"ace_focus")},this.showComposition=function(a){this.$composition||(this.$composition=e.createElement("div"),this.$composition.className="ace_composition",this.content.appendChild(this.$composition)),this.$composition.innerHTML="&#160;";var b=this.$cursorLayer.getPixelPosition(),c=this.$composition.style;c.top=b.top+"px",c.left=b.left+this.$padding+"px",c.height=this.lineHeight+"px",this.hideCursor()},this.setCompositionText=function(a){e.setInnerText(this.$composition,a)},this.hideComposition=function(){this.showCursor();if(!this.$composition)return;var a=this.$composition.style;a.top="-10000px",a.left="-10000px"},this._loadTheme=function(a,b){if(!h.get("packaged"))return b();var c=a.split("/").pop(),d=h.get("themePath")+"/theme-"+c+h.get("suffix");i.loadScript(d,b)},this.setTheme=function(b){function h(a){e.importCssString(a.cssText,a.cssClass,c.container.ownerDocument),c.$theme&&e.removeCssClass(c.container,c.$theme),c.$theme=a?a.cssClass:null,c.$theme&&e.addCssClass(c.container,c.$theme),a&&a.isDark?e.addCssClass(c.container,"ace_dark"):e.removeCssClass(c.container,"ace_dark"),c.$size&&(c.$size.width=0,c.onResize())}var c=this;this.$themeValue=b;if(!b||typeof b=="string"){var d=b||"ace/theme/textmate",f;try{f=a(d)}catch(g){}if(f)return h(f);c._loadTheme(d,function(){a([d],function(a){if(c.$themeValue!==b)return;h(a)})})}else h(b)},this.getTheme=function(){return this.$themeValue},this.setStyle=function(b){e.addCssClass(this.container,b)},this.unsetStyle=function(b){e.removeCssClass(this.container,b)},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(r.prototype),b.VirtualRenderer=r}),define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("../lib/dom"),e=a("../lib/oop"),f=a("../lib/event_emitter").EventEmitter,g=function(a){this.element=d.createElement("div"),this.element.className="ace_layer ace_gutter-layer",a.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$breakpoints=[],this.$annotations=[],this.$decorations=[]};(function(){e.implement(this,f),this.setSession=function(a){this.session=a},this.addGutterDecoration=function(a,b){this.$decorations[a]||(this.$decorations[a]=""),this.$decorations[a]+=" "+b},this.removeGutterDecoration=function(a,b){this.$decorations[a]=this.$decorations[a].replace(" "+b,"")},this.setBreakpoints=function(a){this.$breakpoints=a.concat()},this.setAnnotations=function(a){this.$annotations=[];for(var b in a)if(a.hasOwnProperty(b)){var c=a[b];if(!c)continue;var d=this.$annotations[b]={text:[]};for(var e=0;e<c.length;e++){var f=c[e],g=f.text.replace(/"/g,"&quot;").replace(/'/g,"&#8217;").replace(/</,"&lt;");d.text.indexOf(g)===-1&&d.text.push(g);var h=f.type;h=="error"?d.className="ace_error":h=="warning"&&d.className!="ace_error"?d.className="ace_warning":h=="info"&&!d.className&&(d.className="ace_info")}}},this.update=function(a){this.$config=a;var b={className:"",text:[]},c=[],e=a.firstRow,f=a.lastRow,g=this.session.getNextFoldLine(e),h=g?g.start.row:Infinity,i=this.$showFoldWidgets&&this.session.foldWidgets;for(;;){e>h&&(e=g.end.row+1,g=this.session.getNextFoldLine(e,g),h=g?g.start.row:Infinity);if(e>f)break;var j=this.$annotations[e]||b;c.push("<div class='ace_gutter-cell",this.$decorations[e]||"",this.$breakpoints[e]?" ace_breakpoint ":" ",j.className,"' title='",j.text.join("\n"),"' style='height:",a.lineHeight,"px;'>",e+1);if(i){var k=i[e];k==null&&(k=i[e]=this.session.getFoldWidget(e)),k&&c.push("<span class='ace_fold-widget ",k,k=="start"&&e==h&&e<g.end.row?" closed":" open","'></span>")}var l=this.session.getRowLength(e)-1;while(l--)c.push("</div><div class='ace_gutter-cell' style='height:",a.lineHeight,"px'>¦");c.push("</div>"),e++}this.element=d.setInnerHtml(this.element,c.join("")),this.element.style.height=a.minHeight+"px";var m=this.element.offsetWidth;m!==this.gutterWidth&&(this.gutterWidth=m,this._emit("changeGutterWidth",m))},this.$showFoldWidgets=!0,this.setShowFoldWidgets=function(a){a?d.addCssClass(this.element,"ace_folding-enabled"):d.removeCssClass(this.element,"ace_folding-enabled"),this.$showFoldWidgets=a},this.getShowFoldWidgets=function(){return this.$showFoldWidgets}}).call(g.prototype),b.Gutter=g}),define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],function(a,b,c){"use strict";var d=a("../range").Range,e=a("../lib/dom"),f=function(a){this.element=e.createElement("div"),this.element.className="ace_layer ace_marker-layer",a.appendChild(this.element)};(function(){this.$padding=0,this.setPadding=function(a){this.$padding=a},this.setSession=function(a){this.session=a},this.setMarkers=function(a){this.markers=a},this.update=function(a){var a=a||this.config;if(!a)return;this.config=a;var b=[];for(var c in this.markers){var d=this.markers[c],f=d.range.clipRows(a.firstRow,a.lastRow);if(f.isEmpty())continue;f=f.toScreenRange(this.session);if(d.renderer){var g=this.$getTop(f.start.row,a),h=Math.round(this.$padding+f.start.column*a.characterWidth);d.renderer(b,f,h,g,a)}else f.isMultiLine()?d.type=="text"?this.drawTextMarker(b,f,d.clazz,a):this.drawMultiLineMarker(b,f,d.clazz,a,d.type):this.drawSingleLineMarker(b,f,d.clazz,a,null,d.type)}this.element=e.setInnerHtml(this.element,b.join(""))},this.$getTop=function(a,b){return(a-b.firstRowScreen)*b.lineHeight},this.drawTextMarker=function(a,b,c,e){var f=b.start.row,g=new d(f,b.start.column,f,this.session.getScreenLastRowColumn(f));this.drawSingleLineMarker(a,g,c,e,1,"text"),f=b.end.row,g=new d(f,0,f,b.end.column),this.drawSingleLineMarker(a,g,c,e,0,"text");for(f=b.start.row+1;f<b.end.row;f++)g.start.row=f,g.end.row=f,g.end.column=this.session.getScreenLastRowColumn(f),this.drawSingleLineMarker(a,g,c,e,1,"text")},this.drawMultiLineMarker=function(a,b,c,d,e){var f=e==="background"?0:this.$padding,g=d.width+2*this.$padding-f,h=d.lineHeight,i=Math.round(g-b.start.column*d.characterWidth),j=this.$getTop(b.start.row,d),k=Math.round(f+b.start.column*d.characterWidth);a.push("<div class='",c,"' style='","height:",h,"px;","width:",i,"px;","top:",j,"px;","left:",k,"px;'></div>"),j=this.$getTop(b.end.row,d),i=Math.round(b.end.column*d.characterWidth),a.push("<div class='",c,"' style='","height:",h,"px;","width:",i,"px;","top:",j,"px;","left:",f,"px;'></div>"),h=(b.end.row-b.start.row-1)*d.lineHeight;if(h<0)return;j=this.$getTop(b.start.row+1,d),a.push("<div class='",c,"' style='","height:",h,"px;","width:",g,"px;","top:",j,"px;","left:",f,"px;'></div>")},this.drawSingleLineMarker=function(a,b,c,d,e,f){var g=f==="background"?0:this.$padding,h=d.lineHeight;if(f==="background")var i=d.width;else i=Math.round((b.end.column+(e||0)-b.start.column)*d.characterWidth);var j=this.$getTop(b.start.row,d),k=Math.round(g+b.start.column*d.characterWidth);a.push("<div class='",c,"' style='","height:",h,"px;","width:",i,"px;","top:",j,"px;","left:",k,"px;'></div>")}}).call(f.prototype),b.Marker=f}),define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/dom"),f=a("../lib/lang"),g=a("../lib/useragent"),h=a("../lib/event_emitter").EventEmitter,i=function(a){this.element=e.createElement("div"),this.element.className="ace_layer ace_text-layer",a.appendChild(this.element),this.$characterSize=this.$measureSizes()||{width:0,height:0},this.$pollSizeChanges()};(function(){d.implement(this,h),this.EOF_CHAR="¶",this.EOL_CHAR="¬",this.TAB_CHAR="→",this.SPACE_CHAR="·",this.$padding=0,this.setPadding=function(a){this.$padding=a,this.element.style.padding="0 "+a+"px"},this.getLineHeight=function(){return this.$characterSize.height||1},this.getCharacterWidth=function(){return this.$characterSize.width||1},this.checkForSizeChanges=function(){var a=this.$measureSizes();a&&(this.$characterSize.width!==a.width||this.$characterSize.height!==a.height)&&(this.$characterSize=a,this._emit("changeCharacterSize",{data:a}))},this.$pollSizeChanges=function(){var a=this;this.$pollSizeChangesTimer=setInterval(function(){a.checkForSizeChanges()},500)},this.$fontStyles={fontFamily:1,fontSize:1,fontWeight:1,fontStyle:1,lineHeight:1},this.$measureSizes=g.isIE||g.isOldGecko?function(){var a=1e3;if(!this.$measureNode){var b=this.$measureNode=e.createElement("div"),c=b.style;c.width=c.height="auto",c.left=c.top=-a*40+"px",c.visibility="hidden",c.position="fixed",c.overflow="visible",c.whiteSpace="nowrap",b.innerHTML=f.stringRepeat("Xy",a);if(this.element.ownerDocument.body)this.element.ownerDocument.body.appendChild(b);else{var d=this.element.parentNode;while(!e.hasCssClass(d,"ace_editor"))d=d.parentNode;d.appendChild(b)}}if(!this.element.offsetWidth)return null;var c=this.$measureNode.style,g=e.computedStyle(this.element);for(var h in this.$fontStyles)c[h]=g[h];var i={height:this.$measureNode.offsetHeight,width:this.$measureNode.offsetWidth/(a*2)};return i.width==0||i.height==0?null:i}:function(){if(!this.$measureNode){var a=this.$measureNode=e.createElement("div"),b=a.style;b.width=b.height="auto",b.left=b.top="-100px",b.visibility="hidden",b.position="fixed",b.overflow="visible",b.whiteSpace="nowrap",a.innerHTML="X";var c=this.element.parentNode;while(c&&!e.hasCssClass(c,"ace_editor"))c=c.parentNode;if(!c)return this.$measureNode=null;c.appendChild(a)}var d=this.$measureNode.getBoundingClientRect(),f={height:d.height,width:d.width};return f.width==0||f.height==0?null:f},this.setSession=function(a){this.session=a},this.showInvisibles=!1,this.setShowInvisibles=function(a){return this.showInvisibles==a?!1:(this.showInvisibles=a,!0)},this.$tabStrings=[],this.$computeTabString=function(){var a=this.session.getTabSize(),b=this.$tabStrings=[0];for(var c=1;c<a+1;c++)this.showInvisibles?b.push("<span class='ace_invisible'>"+this.TAB_CHAR+(new Array(c)).join("&#160;")+"</span>"):b.push((new Array(c+1)).join("&#160;"))},this.updateLines=function(a,b,c){this.$computeTabString(),(this.config.lastRow!=a.lastRow||this.config.firstRow!=a.firstRow)&&this.scrollLines(a),this.config=a;var d=Math.max(b,a.firstRow),f=Math.min(c,a.lastRow),g=this.element.childNodes,h=0;for(var i=a.firstRow;i<d;i++){var j=this.session.getFoldLine(i);if(j){if(j.containsRow(d)){d=j.start.row;break}i=j.end.row}h++}for(var k=d;k<=f;k++){var l=g[h++];if(!l)continue;var m=[],n=this.session.getTokens(k,k);this.$renderLine(m,k,n[0].tokens,!this.$useLineGroups()),l=e.setInnerHtml(l,m.join("")),k=this.session.getRowFoldEnd(k)}},this.scrollLines=function(a){this.$computeTabString();var b=this.config;this.config=a;if(!b||b.lastRow<a.firstRow)return this.update(a);if(a.lastRow<b.firstRow)return this.update(a);var c=this.element;if(b.firstRow<a.firstRow)for(var d=this.session.getFoldedRowCount(b.firstRow,a.firstRow-1);d>0;d--)c.removeChild(c.firstChild);if(b.lastRow>a.lastRow)for(var d=this.session.getFoldedRowCount(a.lastRow+1,b.lastRow);d>0;d--)c.removeChild(c.lastChild);if(a.firstRow<b.firstRow){var e=this.$renderLinesFragment(a,a.firstRow,b.firstRow-1);c.firstChild?c.insertBefore(e,c.firstChild):c.appendChild(e)}if(a.lastRow>b.lastRow){var e=this.$renderLinesFragment(a,b.lastRow+1,a.lastRow);c.appendChild(e)}},this.$renderLinesFragment=function(a,b,c){var d=this.element.ownerDocument.createDocumentFragment(),f=b,g=this.session.getNextFoldLine(f),h=g?g.start.row:Infinity;for(;;){f>h&&(f=g.end.row+1,g=this.session.getNextFoldLine(f,g),h=g?g.start.row:Infinity);if(f>c)break;var i=e.createElement("div"),j=[],k=this.session.getTokens(f,f);k.length==1&&this.$renderLine(j,f,k[0].tokens,!1),i.innerHTML=j.join("");if(this.$useLineGroups())i.className="ace_line_group",d.appendChild(i);else{var l=i.childNodes;while(l.length)d.appendChild(l[0])}f++}return d},this.update=function(a){this.$computeTabString(),this.config=a;var b=[],c=a.firstRow,d=a.lastRow,f=c,g=this.session.getNextFoldLine(f),h=g?g.start.row:Infinity;for(;;){f>h&&(f=g.end.row+1,g=this.session.getNextFoldLine(f,g),h=g?g.start.row:Infinity);if(f>d)break;this.$useLineGroups()&&b.push("<div class='ace_line_group'>");var i=this.session.getTokens(f,f);i.length==1&&this.$renderLine(b,f,i[0].tokens,!1),this.$useLineGroups()&&b.push("</div>"),f++}this.element=e.setInnerHtml(this.element,b.join(""))},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(a,b,c,d){var e=this,f=/\t|&|<|( +)|([\v\f \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000])|[\u1100-\u115F]|[\u11A3-\u11A7]|[\u11FA-\u11FF]|[\u2329-\u232A]|[\u2E80-\u2E99]|[\u2E9B-\u2EF3]|[\u2F00-\u2FD5]|[\u2FF0-\u2FFB]|[\u3000-\u303E]|[\u3041-\u3096]|[\u3099-\u30FF]|[\u3105-\u312D]|[\u3131-\u318E]|[\u3190-\u31BA]|[\u31C0-\u31E3]|[\u31F0-\u321E]|[\u3220-\u3247]|[\u3250-\u32FE]|[\u3300-\u4DBF]|[\u4E00-\uA48C]|[\uA490-\uA4C6]|[\uA960-\uA97C]|[\uAC00-\uD7A3]|[\uD7B0-\uD7C6]|[\uD7CB-\uD7FB]|[\uF900-\uFAFF]|[\uFE10-\uFE19]|[\uFE30-\uFE52]|[\uFE54-\uFE66]|[\uFE68-\uFE6B]|[\uFF01-\uFF60]|[\uFFE0-\uFFE6]/g,h=function(a,c,d,f,h){if(a.charCodeAt(0)==32)return(new Array(a.length+1)).join("&#160;");if(a==" "){var i=e.session.getScreenTabSize(b+f);return b+=i-1,e.$tabStrings[i]}if(a=="&")return g.isOldGecko?"&":"&amp;";if(a=="<")return"&lt;";if(a==" "){var j=e.showInvisibles?"ace_cjk ace_invisible":"ace_cjk",k=e.showInvisibles?e.SPACE_CHAR:"";return b+=1,"<span class='"+j+"' style='width:"+e.config.characterWidth*2+"px'>"+k+"</span>"}if(a.match(/[\v\f \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000]/)){if(e.showInvisibles){var k=(new Array(a.length+1)).join(e.SPACE_CHAR);return"<span class='ace_invisible'>"+k+"</span>"}return"&#160;"}return b+=1,"<span class='ace_cjk' style='width:"+e.config.characterWidth*2+"px'>"+a+"</span>"},i=d.replace(f,h);if(!this.$textToken[c.type]){var j="ace_"+c.type.replace(/\./g," ace_"),k="";c.type=="fold"&&(k=" style='width:"+c.value.length*this.config.characterWidth+"px;' "),a.push("<span class='",j,"'",k,">",i,"</span>")}else a.push(i);return b+d.length},this.$renderLineCore=function(a,b,c,d,e){var f=0,g=0,h,i=0,j=this;!d||d.length==0?h=Number.MAX_VALUE:h=d[0],e||a.push("<div class='ace_line' style='height:",this.config.lineHeight,"px","'>");for(var k=0;k<c.length;k++){var l=c[k],m=l.value;if(f+m.length<h)i=j.$renderToken(a,i,l,m),f+=m.length;else{while(f+m.length>=h)i=j.$renderToken(a,i,l,m.substring(0,h-f)),m=m.substring(h-f),f=h,e||a.push("</div>","<div class='ace_line' style='height:",this.config.lineHeight,"px","'>"),g++,i=0,h=d[g]||Number.MAX_VALUE;m.length!=0&&(f+=m.length,i=j.$renderToken(a,i,l,m))}}this.showInvisibles&&(b!==this.session.getLength()-1?a.push("<span class='ace_invisible'>"+this.EOL_CHAR+"</span>"):a.push("<span class='ace_invisible'>"+this.EOF_CHAR+"</span>")),e||a.push("</div>")},this.$renderLine=function(a,b,c,d){if(!this.session.isRowFolded(b)){var e=this.session.getRowSplitData(b);this.$renderLineCore(a,b,c,e,d)}else this.$renderFoldLine(a,b,c,d)},this.$renderFoldLine=function(a,b,c,d){function h(a,b,c){var d=0,e=0;while(e+a[d].value.length<b){e+=a[d].value.length,d++;if(d==a.length)return}if(e!=b){var f=a[d].value.substring(b-e);f.length>c-b&&(f=f.substring(0,c-b)),g.push({type:a[d].type,value:f}),e=b+f.length,d+=1}while(e<c){var f=a[d].value;f.length+e>c&&(f=f.substring(0,c-e)),g.push({type:a[d].type,value:f}),e+=f.length,d+=1}}var e=this.session,f=e.getFoldLine(b),g=[];f.walk(function(a,b,d,e,f){a?g.push({type:"fold",value:a}):(f&&(c=this.session.getTokens(b,b)[0].tokens),c.length!=0&&h(c,e,d))}.bind(this),f.end.row,this.session.getLine(f.end.row).length);var i=this.session.$useWrapMode?this.session.$wrapData[b]:null;this.$renderLineCore(a,b,g,i,d)},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(i.prototype),b.Text=i}),define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],function(a,b,c){"use strict";var d=a("../lib/dom"),e=function(a){this.element=d.createElement("div"),this.element.className="ace_layer ace_cursor-layer",a.appendChild(this.element),this.isVisible=!1,this.cursors=[],this.cursor=this.addCursor()};(function(){this.$padding=0,this.setPadding=function(a){this.$padding=a},this.setSession=function(a){this.session=a},this.addCursor=function(){var a=d.createElement("div"),b="ace_cursor";return this.isVisible||(b+=" ace_hidden"),this.overwrite&&(b+=" ace_overwrite"),a.className=b,this.element.appendChild(a),this.cursors.push(a),a},this.removeCursor=function(){if(this.cursors.length>1){var a=this.cursors.pop();return a.parentNode.removeChild(a),a}},this.hideCursor=function(){this.isVisible=!1;for(var a=this.cursors.length;a--;)d.addCssClass(this.cursors[a],"ace_hidden");clearInterval(this.blinkId)},this.showCursor=function(){this.isVisible=!0;for(var a=this.cursors.length;a--;)d.removeCssClass(this.cursors[a],"ace_hidden");this.element.style.visibility="",this.restartTimer()},this.restartTimer=function(){clearInterval(this.blinkId);if(!this.isVisible)return;var a=this.element;this.blinkId=setInterval(function(){a.style.visibility="hidden",setTimeout(function(){a.style.visibility="visible"},400)},1e3)},this.getPixelPosition=function(a,b){if(!this.config||!this.session)return{left:0,top:0};a||(a=this.session.selection.getCursor());var c=this.session.documentToScreenPosition(a),d=Math.round(this.$padding+c.column*this.config.characterWidth),e=(c.row-(b?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:d,top:e}},this.update=function(a){this.config=a;if(this.session.selectionMarkerCount>1){var b=this.session.$selectionMarkers,c=0,d,e=0;for(var c=b.length;c--;){d=b[c];var f=this.getPixelPosition(d.cursor,!0),g=(this.cursors[e++]||this.addCursor()).style;g.left=f.left+"px",g.top=f.top+"px",g.width=a.characterWidth+"px",g.height=a.lineHeight+"px"}if(e>1)while(this.cursors.length>e)this.removeCursor()}else{var f=this.getPixelPosition(null,!0),g=this.cursor.style;g.left=f.left+"px",g.top=f.top+"px",g.width=a.characterWidth+"px",g.height=a.lineHeight+"px";while(this.cursors.length>1)this.removeCursor()}var h=this.session.getOverwrite();h!=this.overwrite&&this.$setOverite(h),this.restartTimer()},this.$setOverite=function(a){this.overwrite=a;for(var b=this.cursors.length;b--;)a?d.addCssClass(this.cursors[b],"ace_overwrite"):d.removeCssClass(this.cursors[b],"ace_overwrite")},this.destroy=function(){clearInterval(this.blinkId)}}).call(e.prototype),b.Cursor=e}),define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],function(a,b,c){"use strict";var d=a("./lib/oop"),e=a("./lib/dom"),f=a("./lib/event"),g=a("./lib/event_emitter").EventEmitter,h=function(a){this.element=e.createElement("div"),this.element.className="ace_sb",this.inner=e.createElement("div"),this.element.appendChild(this.inner),a.appendChild(this.element),this.width=e.scrollbarWidth(a.ownerDocument),this.element.style.width=(this.width||15)+5+"px",f.addListener(this.element,"scroll",this.onScroll.bind(this))};(function(){d.implement(this,g),this.onScroll=function(){this._emit("scroll",{data:this.element.scrollTop})},this.getWidth=function(){return this.width},this.setHeight=function(a){this.element.style.height=a+"px"},this.setInnerHeight=function(a){this.inner.style.height=a+"px"},this.setScrollTop=function(a){this.element.scrollTop=a}}).call(h.prototype),b.ScrollBar=h}),define("ace/renderloop",["require","exports","module","ace/lib/event"],function(a,b,c){"use strict";var d=a("./lib/event"),e=function(a,b){this.onRender=a,this.pending=!1,this.changes=0,this.window=b||window};(function(){this.schedule=function(a){this.changes=this.changes|a;if(!this.pending){this.pending=!0;var b=this;d.nextTick(function(){b.pending=!1;var a;while(a=b.changes)b.changes=0,b.onRender(a)},this.window)}}}).call(e.prototype),b.RenderLoop=e}),define("text!ace/css/editor.css",[],".ace_editor {\n position: absolute;\n overflow: hidden;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Droid Sans Mono', 'Consolas', monospace;\n font-size: 12px;\n}\n\n.ace_scroller {\n position: absolute;\n overflow-x: scroll;\n overflow-y: hidden;\n}\n\n.ace_content {\n position: absolute;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n cursor: text;\n}\n\n.ace_composition {\n position: absolute;\n background: #555;\n color: #DDD;\n z-index: 4;\n}\n\n.ace_gutter {\n position: absolute;\n overflow : hidden;\n height: 100%;\n width: auto;\n cursor: default;\n z-index: 1000;\n}\n\n.ace_gutter.horscroll {\n box-shadow: 0px 0px 20px rgba(0,0,0,0.4);\n}\n\n.ace_gutter-cell {\n padding-left: 19px;\n padding-right: 6px;\n}\n\n.ace_gutter-cell.ace_error {\n background-image: url(\"data:image/gif,GIF89a%10%00%10%00%D5%00%00%F5or%F5%87%88%F5nr%F4ns%EBmq%F5z%7F%DDJT%DEKS%DFOW%F1Yc%F2ah%CE(7%CE)8%D18E%DD%40M%F2KZ%EBU%60%F4%60m%DCir%C8%16(%C8%19*%CE%255%F1%3FR%F1%3FS%E6%AB%B5%CA%5DI%CEn%5E%F7%A2%9A%C9G%3E%E0a%5B%F7%89%85%F5yy%F6%82%80%ED%82%80%FF%BF%BF%E3%C4%C4%FF%FF%FF%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%01%00%00%25%00%2C%00%00%00%00%10%00%10%00%00%06p%C0%92pH%2C%1A%8F%C8%D2H%93%E1d4%23%E4%88%D3%09mB%1DN%B48%F5%90%40%60%92G%5B%94%20%3E%22%D2%87%24%FA%20%24%C5%06A%00%20%B1%07%02B%A38%89X.v%17%82%11%13q%10%0Fi%24%0F%8B%10%7BD%12%0Ei%09%92%09%0EpD%18%15%24%0A%9Ci%05%0C%18F%18%0B%07%04%01%04%06%A0H%18%12%0D%14%0D%12%A1I%B3%B4%B5IA%00%3B\");\n background-repeat: no-repeat;\n background-position: 2px center;\n}\n\n.ace_gutter-cell.ace_warning {\n background-image: url(\"data:image/gif,GIF89a%10%00%10%00%D5%00%00%FF%DBr%FF%DE%81%FF%E2%8D%FF%E2%8F%FF%E4%96%FF%E3%97%FF%E5%9D%FF%E6%9E%FF%EE%C1%FF%C8Z%FF%CDk%FF%D0s%FF%D4%81%FF%D5%82%FF%D5%83%FF%DC%97%FF%DE%9D%FF%E7%B8%FF%CCl%7BQ%13%80U%15%82W%16%81U%16%89%5B%18%87%5B%18%8C%5E%1A%94d%1D%C5%83-%C9%87%2F%C6%84.%C6%85.%CD%8B2%C9%871%CB%8A3%CD%8B5%DC%98%3F%DF%9BB%E0%9CC%E1%A5U%CB%871%CF%8B5%D1%8D6%DB%97%40%DF%9AB%DD%99B%E3%B0p%E7%CC%AE%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%01%00%00%2F%00%2C%00%00%00%00%10%00%10%00%00%06a%C0%97pH%2C%1A%8FH%A1%ABTr%25%87%2B%04%82%F4%7C%B9X%91%08%CB%99%1C!%26%13%84*iJ9(%15G%CA%84%14%01%1A%97%0C%03%80%3A%9A%3E%81%84%3E%11%08%B1%8B%20%02%12%0F%18%1A%0F%0A%03'F%1C%04%0B%10%16%18%10%0B%05%1CF%1D-%06%07%9A%9A-%1EG%1B%A0%A1%A0U%A4%A5%A6BA%00%3B\");\n background-repeat: no-repeat;\n background-position: 2px center;\n}\n\n.ace_gutter-cell.ace_info {\n background-image: url(\"data:image/gif;base64,R0lGODlhEAAQAMQAAAAAAEFBQVJSUl5eXmRkZGtra39/f4WFhYmJiZGRkaampry8vMPDw8zMzNXV1dzc3OTk5Orq6vDw8P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABQALAAAAAAQABAAAAUuICWOZGmeaBml5XGwFCQSBGyXRSAwtqQIiRuiwIM5BoYVbEFIyGCQoeJGrVptIQA7\");\n background-repeat: no-repeat;\n background-position: 2px center;\n}\n\n.ace_editor .ace_sb {\n position: absolute;\n overflow-x: hidden;\n overflow-y: scroll;\n right: 0;\n}\n\n.ace_editor .ace_sb div {\n position: absolute;\n width: 1px;\n left: 0;\n}\n\n.ace_editor .ace_print_margin_layer {\n z-index: 0;\n position: absolute;\n overflow: hidden;\n margin: 0;\n left: 0;\n height: 100%;\n width: 100%;\n}\n\n.ace_editor .ace_print_margin {\n position: absolute;\n height: 100%;\n}\n\n.ace_editor textarea {\n position: fixed;\n z-index: 0;\n width: 10px;\n height: 30px;\n opacity: 0;\n background: transparent;\n appearance: none;\n -moz-appearance: none;\n border: none;\n resize: none;\n outline: none;\n overflow: hidden;\n}\n\n.ace_layer {\n z-index: 1;\n position: absolute;\n overflow: hidden;\n white-space: nowrap;\n height: 100%;\n width: 100%;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n /* setting pointer-events: auto; on node under the mouse, which changes\n during scroll, will break mouse wheel scrolling in Safari */\n pointer-events: none;\n}\n\n.ace_gutter .ace_layer {\n position: relative;\n min-width: 40px;\n text-align: right;\n pointer-events: auto;\n}\n\n.ace_text-layer {\n color: black;\n}\n\n.ace_cjk {\n display: inline-block;\n text-align: center;\n}\n\n.ace_cursor-layer {\n z-index: 4;\n}\n\n.ace_cursor {\n z-index: 4;\n position: absolute;\n}\n\n.ace_cursor.ace_hidden {\n opacity: 0.2;\n}\n\n.ace_line {\n white-space: nowrap;\n}\n\n.ace_marker-layer .ace_step {\n position: absolute;\n z-index: 3;\n}\n\n.ace_marker-layer .ace_selection {\n position: absolute;\n z-index: 5;\n}\n\n.ace_marker-layer .ace_bracket {\n position: absolute;\n z-index: 6;\n}\n\n.ace_marker-layer .ace_active_line {\n position: absolute;\n z-index: 2;\n}\n\n.ace_gutter .ace_gutter_active_line{\n background-color : #dcdcdc;\n}\n\n.ace_marker-layer .ace_selected_word {\n position: absolute;\n z-index: 4;\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n}\n\n.ace_line .ace_fold {\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n \n display: inline-block;\n height: 11px;\n margin-top: -2px;\n vertical-align: middle;\n\n background-image: \n url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%11%00%00%00%09%08%06%00%00%00%D4%E8%C7%0C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%B5IDAT(%15%A5%91%3D%0E%02!%10%85ac%E1%05%D6%CE%D6%C6%CE%D2%E8%ED%CD%DE%C0%C6%D6N.%E0V%F8%3D%9Ca%891XH%C2%BE%D9y%3F%90!%E6%9C%C3%BFk%E5%011%C6-%F5%C8N%04%DF%BD%FF%89%DFt%83DN%60%3E%F3%AB%A0%DE%1A%5Dg%BE%10Q%97%1B%40%9C%A8o%10%8F%5E%828%B4%1B%60%87%F6%02%26%85%1Ch%1E%C1%2B%5Bk%FF%86%EE%B7j%09%9A%DA%9B%ACe%A3%F9%EC%DA!9%B4%D5%A6%81%86%86%98%CC%3C%5B%40%FA%81%B3%E9%CB%23%94%C16Azo%05%D4%E1%C1%95a%3B%8A'%A0%E8%CC%17%22%85%1D%BA%00%A2%FA%DC%0A%94%D1%D1%8D%8B%3A%84%17B%C7%60%1A%25Z%FC%8D%00%00%00%00IEND%AEB%60%82\"),\n url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%007%08%06%00%00%00%C4%DD%80C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%3AIDAT8%11c%FC%FF%FF%7F%18%03%1A%60%01%F2%3F%A0%891%80%04%FF%11-%F8%17%9BJ%E2%05%B1ZD%81v%26t%E7%80%F8%A3%82h%A12%1A%20%A3%01%02%0F%01%BA%25%06%00%19%C0%0D%AEF%D5%3ES%00%00%00%00IEND%AEB%60%82\");\n background-repeat: no-repeat, repeat-x;\n background-position: center center, top left;\n color: transparent;\n\n border: 1px solid black;\n -moz-border-radius: 2px;\n -webkit-border-radius: 2px;\n border-radius: 2px;\n \n cursor: pointer;\n pointer-events: auto;\n}\n\n.ace_dark .ace_fold {\n}\n\n.ace_fold:hover{\n background-image: \n url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%11%00%00%00%09%08%06%00%00%00%D4%E8%C7%0C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%00%B5IDAT(%15%A5%91%3D%0E%02!%10%85ac%E1%05%D6%CE%D6%C6%CE%D2%E8%ED%CD%DE%C0%C6%D6N.%E0V%F8%3D%9Ca%891XH%C2%BE%D9y%3F%90!%E6%9C%C3%BFk%E5%011%C6-%F5%C8N%04%DF%BD%FF%89%DFt%83DN%60%3E%F3%AB%A0%DE%1A%5Dg%BE%10Q%97%1B%40%9C%A8o%10%8F%5E%828%B4%1B%60%87%F6%02%26%85%1Ch%1E%C1%2B%5Bk%FF%86%EE%B7j%09%9A%DA%9B%ACe%A3%F9%EC%DA!9%B4%D5%A6%81%86%86%98%CC%3C%5B%40%FA%81%B3%E9%CB%23%94%C16Azo%05%D4%E1%C1%95a%3B%8A'%A0%E8%CC%17%22%85%1D%BA%00%A2%FA%DC%0A%94%D1%D1%8D%8B%3A%84%17B%C7%60%1A%25Z%FC%8D%00%00%00%00IEND%AEB%60%82\"),\n url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%007%08%06%00%00%00%C4%DD%80C%00%00%03%1EiCCPICC%20Profile%00%00x%01%85T%DFk%D3P%14%FE%DAe%9D%B0%E1%8B%3Ag%11%09%3Eh%91ndStC%9C%B6kW%BA%CDZ%EA6%B7!H%9B%A6m%5C%9A%C6%24%ED~%B0%07%D9%8Bo%3A%C5w%F1%07%3E%F9%07%0C%D9%83o%7B%92%0D%C6%14a%F8%AC%88%22L%F6%22%B3%9E%9B4M'S%03%B9%F7%BB%DF%F9%EE9'%E7%E4%5E%A0%F9qZ%D3%14%2F%0F%14USO%C5%C2%FC%C4%E4%14%DF%F2%01%5E%1CC%2B%FChM%8B%86%16J%26G%40%0F%D3%B2y%EF%B3%F3%0E%1E%C6lt%EEo%DF%AB%FEc%D5%9A%95%0C%11%F0%1C%20%BE%945%C4%22%E1Y%A0i%5C%D4t%13%E0%D6%89%EF%9D15%C2%CDLsX%A7%04%09%1Fg8oc%81%E1%8C%8D%23%96f45%40%9A%09%C2%07%C5B%3AK%B8%408%98i%E0%F3%0D%D8%CE%81%14%E4'%26%A9%92.%8B%3C%ABER%2F%E5dE%B2%0C%F6%F0%1Fs%83%F2_%B0%A8%94%E9%9B%AD%E7%10%8Dm%9A%19N%D1%7C%8A%DE%1F9%7Dp%8C%E6%00%D5%C1%3F_%18%BDA%B8%9DpX6%E3%A35~B%CD%24%AE%11%26%BD%E7%EEti%98%EDe%9A%97Y)%12%25%1C%24%BCbT%AE3li%E6%0B%03%89%9A%E6%D3%ED%F4P%92%B0%9F4%BF43Y%F3%E3%EDP%95%04%EB1%C5%F5%F6KF%F4%BA%BD%D7%DB%91%93%07%E35%3E%A7)%D6%7F%40%FE%BD%F7%F5r%8A%E5y%92%F0%EB%B4%1E%8D%D5%F4%5B%92%3AV%DB%DB%E4%CD%A6%23%C3%C4wQ%3F%03HB%82%8E%1Cd(%E0%91B%0Ca%9Ac%C4%AA%F8L%16%19%22J%A4%D2itTy%B28%D6%3B(%93%96%ED%1CGx%C9_%0E%B8%5E%16%F5%5B%B2%B8%F6%E0%FB%9E%DD%25%D7%8E%BC%15%85%C5%B7%A3%D8Q%ED%B5%81%E9%BA%B2%13%9A%1B%7Fua%A5%A3n%E17%B9%E5%9B%1Bm%AB%0B%08Q%FE%8A%E5%B1H%5Ee%CAO%82Q%D7u6%E6%90S%97%FCu%0B%CF2%94%EE%25v%12X%0C%BA%AC%F0%5E%F8*l%0AO%85%17%C2%97%BF%D4%C8%CE%DE%AD%11%CB%80q%2C%3E%AB%9ES%CD%C6%EC%25%D2L%D2%EBd%B8%BF%8A%F5B%C6%18%F9%901CZ%9D%BE%24M%9C%8A9%F2%DAP%0B'%06w%82%EB%E6%E2%5C%2F%D7%07%9E%BB%CC%5D%E1%FA%B9%08%AD.r%23%8E%C2%17%F5E%7C!%F0%BE3%BE%3E_%B7o%88a%A7%DB%BE%D3d%EB%A31Z%EB%BB%D3%91%BA%A2%B1z%94%8F%DB'%F6%3D%8E%AA%13%19%B2%B1%BE%B1~V%08%2B%B4%A2cjJ%B3tO%00%03%25mN%97%F3%05%93%EF%11%84%0B%7C%88%AE-%89%8F%ABbW%90O%2B%0Ao%99%0C%5E%97%0CI%AFH%D9.%B0%3B%8F%ED%03%B6S%D6%5D%E6i_s9%F3*p%E9%1B%FD%C3%EB.7U%06%5E%19%C0%D1s.%17%A03u%E4%09%B0%7C%5E%2C%EB%15%DB%1F%3C%9E%B7%80%91%3B%DBc%AD%3Dma%BA%8B%3EV%AB%DBt.%5B%1E%01%BB%0F%AB%D5%9F%CF%AA%D5%DD%E7%E4%7F%0Bx%A3%FC%06%A9%23%0A%D6%C2%A1_2%00%00%00%09pHYs%00%00%0B%13%00%00%0B%13%01%00%9A%9C%18%00%00%003IDAT8%11c%FC%FF%FF%7F%3E%03%1A%60%01%F2%3F%A3%891%80%04%FFQ%26%F8w%C0%B43%A1%DB%0C%E2%8F%0A%A2%85%CAh%80%8C%06%08%3C%04%E8%96%18%00%A3S%0D%CD%CF%D8%C1%9D%00%00%00%00IEND%AEB%60%82\");\n background-repeat: no-repeat, repeat-x;\n background-position: center center, top left;\n}\n\n.ace_dragging .ace_content {\n cursor: move;\n}\n\n.ace_folding-enabled > .ace_gutter-cell {\n padding-right: 13px;\n}\n\n.ace_fold-widget {\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n\n margin: 0 -12px 1px 1px;\n display: inline-block;\n height: 14px;\n width: 11px;\n vertical-align: text-bottom;\n \n background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%00%05%08%06%00%00%00%8Do%26%E5%00%00%004IDATx%DAe%8A%B1%0D%000%0C%C2%F2%2CK%96%BC%D0%8F9%81%88H%E9%D0%0E%96%C0%10%92%3E%02%80%5E%82%E4%A9*-%EEsw%C8%CC%11%EE%96w%D8%DC%E9*Eh%0C%151(%00%00%00%00IEND%AEB%60%82\");\n background-repeat: no-repeat;\n background-position: center 5px;\n\n border-radius: 3px;\n}\n\n.ace_fold-widget.end {\n background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%00%05%08%06%00%00%00%8Do%26%E5%00%00%004IDATx%DAm%C7%C1%09%000%08C%D1%8C%ECE%C8E(%8E%EC%02)%1EZJ%F1%C1'%04%07I%E1%E5%EE%CAL%F5%A2%99%99%22%E2%D6%1FU%B5%FE0%D9x%A7%26Wz5%0E%D5%00%00%00%00IEND%AEB%60%82\");\n}\n\n.ace_fold-widget.closed {\n background-image: url(\"data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%03%00%00%00%06%08%06%00%00%00%06%E5%24%0C%00%00%009IDATx%DA5%CA%C1%09%000%08%03%C0%AC*(%3E%04%C1%0D%BA%B1%23%A4Uh%E0%20%81%C0%CC%F8%82%81%AA%A2%AArGfr%88%08%11%11%1C%DD%7D%E0%EE%5B%F6%F6%CB%B8%05Q%2F%E9tai%D9%00%00%00%00IEND%AEB%60%82\");\n}\n\n.ace_fold-widget:hover {\n border: 1px solid rgba(0, 0, 0, 0.3);\n background-color: rgba(255, 255, 255, 0.2);\n -moz-box-shadow:inset 0 1px 1px rgba(255, 255, 255, 0.7);\n -moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\n -webkit-box-shadow:inset 0 1px 1px rgba(255, 255, 255, 0.7);\n -webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\n box-shadow:inset 0 1px 1px rgba(255, 255, 255, 0.7);\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\n background-position: center 4px;\n}\n\n.ace_fold-widget:active {\n border: 1px solid rgba(0, 0, 0, 0.4);\n background-color: rgba(0, 0, 0, 0.05);\n -moz-box-shadow:inset 0 1px 1px rgba(255, 255, 255);\n -moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\n -webkit-box-shadow:inset 0 1px 1px rgba(255, 255, 255);\n -webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\n box-shadow:inset 0 1px 1px rgba(255, 255, 255);\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\n}\n\n.ace_fold-widget.invalid {\n background-color: #FFB4B4;\n border-color: #DE5555;\n}\n"),define("ace/multi_select",["require","exports","module","ace/range_list","ace/range","ace/selection","ace/mouse/multi_select_handler","ace/commands/multi_select_commands","ace/search","ace/edit_session","ace/editor"],function(a,b,c){function j(a,b,c){return i.$options.wrap=!0,i.$options.needle=b,i.$options.backwards=c==-1,i.find(a)}function m(a,b){return a.row==b.row&&a.column==b.column}function n(a){a.$onAddRange=a.$onAddRange.bind(a),a.$onRemoveRange=a.$onRemoveRange.bind(a),a.$onMultiSelect=a.$onMultiSelect.bind(a),a.$onSingleSelect=a.$onSingleSelect.bind(a),b.onSessionChange.call(a,a),a.on("changeSession",b.onSessionChange.bind(a)),a.on("mousedown",g),a.commands.addCommands(b.commands.defaultCommands)}var d=a("./range_list").RangeList,e=a("./range").Range,f=a("./selection").Selection,g=a("./mouse/multi_select_handler").onMouseDown;b.commands=a("./commands/multi_select_commands");var h=a("./search").Search,i=new h,k=a("./edit_session").EditSession;(function(){this.getSelectionMarkers=function(){return this.$selectionMarkers}}).call(k.prototype),function(){this.ranges=null,this.rangeList=null,this.addRange=function(a){if(!this.inMultiSelectMode&&this.rangeCount==0){var b=this.toOrientedRange();if(!a||!a.isEqual(b))this.rangeList.add(b),this.$onAddRange(b)}if(!a)return;a.cursor||(a.cursor=a.end);var c=this.rangeList.add(a);this.$onAddRange(a),c.length&&this.$onRemoveRange(c),this.rangeCount>0&&!this.inMultiSelectMode&&(this._emit("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session))},this.toSingleRange=function(a){a=a||this.ranges[0];var b=this.rangeList.removeAll();b.length&&this.$onRemoveRange(b),a&&this.fromOrientedRange(a)},this.substractPoint=function(a){var b=this.rangeList.substractPoint(a);if(b)return this.$onRemoveRange(b),b[0]},this.mergeOverlappingRanges=function(){var a=this.rangeList.merge();a.length?this.$onRemoveRange(a):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(a){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(a),this.fromOrientedRange(a),this._emit("addRange",{range:a})},this.$onRemoveRange=function(a){this.rangeCount=this.rangeList.ranges.length;if(this.rangeCount==1&&this.inMultiSelectMode){var b=this.rangeList.ranges.pop();a.push(b),this.rangeCount=0}for(var c=a.length;c--;){var d=this.ranges.indexOf(a[c]);this.ranges.splice(d,1)}this._emit("removeRange",{ranges:a}),this.rangeCount==0&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._emit("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),b=b||this.ranges[0],b&&!b.isEqual(this.getRange())&&this.fromOrientedRange(b)},this.$initRangeList=function(){if(this.rangeList)return;this.rangeList=new d,this.ranges=[],this.rangeCount=0},this.getAllRanges=function(){return this.rangeList.ranges.concat()},this.splitIntoLines=function(){if(this.rangeCount>1){var a=this.rangeList.ranges,b=a[a.length-1],c=e.fromPoints(a[0].start,b.end);this.toSingleRange(),this.setSelectionRange(c,b.cursor==b.start)}else{var d=this.session.documentToScreenPosition(this.selectionLead),f=this.session.documentToScreenPosition(this.selectionAnchor),g=this.rectangularRangeBlock(d,f);g.forEach(this.addRange,this)}},this.rectangularRangeBlock=function(a,b,c){var d=[],f=a.column<b.column;if(f)var g=a.column,h=b.column;else var g=b.column,h=a.column;var i=a.row<b.row;if(i)var j=a.row,k=b.row;else var j=b.row,k=a.row;g<0&&(g=0),j<0&&(j=0),j==k&&(c=!0);for(var l=j;l<=k;l++){var n=e.fromPoints(this.session.screenToDocumentPosition(l,g),this.session.screenToDocumentPosition(l,h));if(n.isEmpty()){if(o&&m(n.end,o))break;var o=n.end}n.cursor=f?n.start:n.end,d.push(n)}i&&d.reverse();if(!c){var p=d.length-1;while(d[p].isEmpty()&&p>0)p--;if(p>0){var q=0;while(d[q].isEmpty())q++}for(var r=p;r>=q;r--)d[r].isEmpty()&&d.splice(r,1)}return d}}.call(f.prototype);var l=a("./editor").Editor;(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(a){a.cursor||(a.cursor=a.end);var b=this.getSelectionStyle();return a.marker=this.session.addMarker(a,"ace_selection",b),this.session.$selectionMarkers.push(a),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,a},this.removeSelectionMarkers=function(a){for(var b=a.length;b--;){var c=a[b];if(!c.marker)continue;this.session.removeMarker(c.marker);var d=this.session.$selectionMarkers.indexOf(c);d!=-1&&this.session.$selectionMarkers.splice(d,1)}this.session.selectionMarkerCount=this.session.$selectionMarkers.length},this.$onAddRange=function(a){this.addSelectionMarker(a.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(a){this.removeSelectionMarkers(a.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(a){if(this.inMultiSelectMode)return;this.inMultiSelectMode=!0,this.setStyle("multiselect"),this.keyBinding.addKeyboardHandler(b.commands.keyboardHandler),this.commands.on("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onSingleSelect=function(a){if(this.session.multiSelect.inVirtualMode)return;this.inMultiSelectMode=!1,this.unsetStyle("multiselect"),this.keyBinding.removeKeyboardHandler(b.commands.keyboardHandler),this.commands.removeEventListener("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelectExec=function(a){var b=a.command,c=a.editor;b.multiSelectAction?b.multiSelectAction=="forEach"?c.forEachSelection(b,a.args):b.multiSelectAction=="single"?(c.exitMultiSelectMode(),b.exec(c,a.args||{})):b.multiSelectAction(c,a.args||{}):(b.exec(c,a.args||{}),c.multiSelect.addRange(c.multiSelect.toOrientedRange()),c.multiSelect.mergeOverlappingRanges()),a.preventDefault()},this.forEachSelection=function(a,b){if(this.inVirtualSelectionMode)return;var c=this.session,d=this.selection,e=d.rangeList,g=d._eventRegistry;d._eventRegistry={};var h=new f(c);this.inVirtualSelectionMode=!0;for(var i=e.ranges.length;i--;)h.fromOrientedRange(e.ranges[i]),this.selection=c.selection=h,a.exec(this,b||{}),h.toOrientedRange(e.ranges[i]);h.detach(),this.selection=c.selection=d,this.inVirtualSelectionMode=!1,d._eventRegistry=g,d.mergeOverlappingRanges(),this.onCursorChange(),this.onSelectionChange()},this.exitMultiSelectMode=function(){if(this.inVirtualSelectionMode)return;this.multiSelect.toSingleRange()},this.getCopyText=function(){var a="";if(this.inMultiSelectMode){var b=this.multiSelect.rangeList.ranges;a=[];for(var c=0;c<b.length;c++)a.push(this.session.getTextRange(b[c]));a=a.join(this.session.getDocument().getNewLineCharacter())}else this.selection.isEmpty()||(a=this.session.getTextRange(this.getSelectionRange()));return a},this.selectMoreLines=function(a,b){var c=this.selection.toOrientedRange(),d=c.cursor==c.end,f=this.session.documentToScreenPosition(c.cursor);this.selection.$desiredColumn&&(f.column=this.selection.$desiredColumn);var g=this.session.screenToDocumentPosition(f.row+a,f.column);if(!c.isEmpty())var h=this.session.documentToScreenPosition(d?c.end:c.start),i=this.session.screenToDocumentPosition(h.row+a,h.column);else var i=g;if(d){var j=e.fromPoints(g,i);j.cursor=j.start}else{var j=e.fromPoints(i,g);j.cursor=j.end}j.desiredColumn=f.column;if(!this.selection.inMultiSelectMode)this.selection.addRange(c);else if(b)var k=c.cursor;this.selection.addRange(j),k&&this.selection.substractPoint(k)},this.transposeSelections=function(a){var b=this.session,c=b.multiSelect,d=c.ranges;for(var e=d.length;e--;){var f=d[e];if(f.isEmpty()){var g=b.getWordRange(f.start.row,f.start.column);f.start.row=g.start.row,f.start.column=g.start.column,f.end.row=g.end.row,f.end.column=g.end.column}}c.mergeOverlappingRanges();var h=[];for(var e=d.length;e--;){var f=d[e];h.unshift(b.getTextRange(f))}a<0?h.unshift(h.pop()):h.push(h.shift());for(var e=d.length;e--;){var f=d[e],g=f.clone();b.replace(f,h[e]),f.start.row=g.start.row,f.start.column=g.start.column}},this.selectMore=function(a,b){var c=this.session,d=c.multiSelect,e=d.toOrientedRange();if(e.isEmpty()){var e=c.getWordRange(e.start.row,e.start.column);e.cursor=e.end,this.multiSelect.addRange(e)}var f=c.getTextRange(e),g=j(c,f,a);g&&(g.cursor=a==-1?g.start:g.end,this.multiSelect.addRange(g)),b&&this.multiSelect.substractPoint(e.cursor)}}).call(l.prototype),b.onSessionChange=function(a){var b=a.session;b.multiSelect||(b.$selectionMarkers=[],b.selection.$initRangeList(),b.multiSelect=b.selection),this.multiSelect=b.multiSelect;var c=a.oldSession;c&&(c.multiSelect&&c.multiSelect.editor==this&&(c.multiSelect.editor=null),b.multiSelect.removeEventListener("addRange",this.$onAddRange),b.multiSelect.removeEventListener("removeRange",this.$onRemoveRange),b.multiSelect.removeEventListener("multiSelect",this.$onMultiSelect),b.multiSelect.removeEventListener("singleSelect",this.$onSingleSelect)),b.multiSelect.on("addRange",this.$onAddRange),b.multiSelect.on("removeRange",this.$onRemoveRange),b.multiSelect.on("multiSelect",this.$onMultiSelect),b.multiSelect.on("singleSelect",this.$onSingleSelect),this.inMultiSelectMode!=b.selection.inMultiSelectMode&&(b.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},b.MultiSelect=n}),define("ace/range_list",["require","exports","module"],function(a,b,c){"use strict";var d=function(){this.ranges=[]};(function(){this.comparePoints=function(a,b){return a.row-b.row||a.column-b.column},this.pointIndex=function(a,b){var c=this.ranges;for(var d=b||0;d<c.length;d++){var e=c[d],f=this.comparePoints(a,e.end);if(f>0)continue;return f==0?d:(f=this.comparePoints(a,e.start),f>=0?d:-d-1)}return-d-1},this.add=function(a){var b=this.pointIndex(a.start);b<0&&(b=-b-1);var c=this.pointIndex(a.end,b);return c<0?c=-c-1:c++,this.ranges.splice(b,c-b,a)},this.addList=function(a){var b=[];for(var c=a.length;c--;)b.push.call(b,this.add(a[c]));return b},this.substractPoint=function(a){var b=this.pointIndex(a);if(b>=0)return this.ranges.splice(b,1)},this.merge=function(){var a=[],b=this.ranges,c=b[0],d;for(var e=1;e<b.length;e++){d=c,c=b[e];var f=this.comparePoints(d.end,c.start);if(f<0)continue;if(f==0&&!d.isEmpty()&&!c.isEmpty())continue;this.comparePoints(d.end,c.end)<0&&(d.end.row=c.end.row,d.end.column=c.end.column),b.splice(e,1),a.push(c),c=d,e--}return a},this.contains=function(a,b){return this.pointIndex({row:a,column:b})>=0},this.containsPoint=function(a){return this.pointIndex(a)>=0},this.rangeAtPoint=function(a){var b=this.pointIndex(a);if(b>=0)return this.ranges[b]},this.clipRows=function(a,b){var c=this.ranges;if(c[0].start.row>b||c[c.length-1].start.row<a)return[];var d=this.pointIndex({row:a,column:0});d<0&&(d=-d-1);var e=this.pointIndex({row:b,column:0},d);e<0&&(e=-e-1);var f=[];for(var g=d;g<e;g++)f.push(c[g]);return f},this.removeAll=function(){return this.ranges.splice(0,this.ranges.length)},this.attach=function(a){this.session&&this.detach(),this.session=a,this.onChange=this.$onChange.bind(this),this.session.on("change",this.onChange)},this.detach=function(){if(!this.session)return;this.session.removeListener("change",this.onChange),this.session=null},this.$onChange=function(a){var b=a.data.range;if(a.data.action[0]=="i")var c=b.start,d=b.end;else var d=b.start,c=b.end;var e=c.row,f=d.row,g=f-e,h=-c.column+d.column,i=this.ranges;for(var j=0,k=i.length;j<k;j++){var l=i[j];if(l.end.row<e)continue;if(l.start.row>e)break;l.start.row==e&&l.start.column>=c.column&&(l.start.column+=h,l.start.row+=g),l.end.row==e&&l.end.column>=c.column&&(l.end.column+=h,l.end.row+=g)}if(g!=0&&j<k)for(;j<k;j++){var l=i[j];l.start.row+=g,l.end.row+=g}}}).call(d.prototype),b.RangeList=d}),define("ace/mouse/multi_select_handler",["require","exports","module","ace/lib/event"],function(a,b,c){function e(a,b){return a.row==b.row&&a.column==b.column}function f(a){var b=a.domEvent,c=b.altKey,f=b.shiftKey,g=a.getAccelKey(),h=a.getButton();if(!g&&!c){if(a.editor.inMultiSelectMode)if(h==0)a.editor.exitMultiSelectMode();else if(h==2){var i=a.editor,j=i.selection.isEmpty();i.textInput.onContextMenu({x:a.clientX,y:a.clientY},j),d.capture(i.container,function(){},i.textInput.onContextMenuClose),a.stop()}return}var i=a.editor,k=i.selection,l=i.inMultiSelectMode,m=a.getDocumentPosition(),n=k.getCursor(),o=a.inSelection()||k.isEmpty()&&e(m,n),p=a.pageX,q=a.pageY,r=function(a){p=d.getDocumentX(a),q=d.getDocumentY(a)},s=function(){var a=i.renderer.pixelToScreenCoordinates(p,q),b=t.screenToDocumentPosition(a.row,a.column);if(e(v,a)&&e(b,k.selectionLead))return;v=a,i.selection.moveCursorToPosition(b),i.selection.clearSelection(),i.renderer.scrollCursorIntoView(),i.removeSelectionMarkers(x),x=k.rectangularRangeBlock(v,u),x.forEach(i.addSelectionMarker,i),i.updateSelectionMarkers()},t=i.session,u=i.renderer.pixelToScreenCoordinates(p,q),v=u;if(g&&!f&&!c&&h==0){if(!l&&o)return;l||k.addRange(k.toOrientedRange());var w=k.rangeList.rangeAtPoint(m);d.capture(i.container,function(){},function(){var a=k.toOrientedRange();w&&a.isEmpty()&&e(w.cursor,a.cursor)?k.substractPoint(a.cursor):k.addRange(a)})}else if(!f&&c&&h==0){a.stop(),l&&!g?k.toSingleRange():!l&&g&&k.addRange(),k.moveCursorToPosition(m),k.clearSelection();var x=[],y=function(a){clearInterval(A),i.removeSelectionMarkers(x);for(var b=0;b<x.length;b++)k.addRange(x[b])},z=s;d.capture(i.container,r,y);var A=setInterval(function(){z()},20);return a.preventDefault()}}var d=a("../lib/event");b.onMouseDown=f}),define("ace/commands/multi_select_commands",["require","exports","module","ace/keyboard/hash_handler"],function(a,b,c){b.defaultCommands=[{name:"addCursorAbove",exec:function(a){a.selectMoreLines(-1)},bindKey:{win:"Ctrl-Alt-Up",mac:"Ctrl-Alt-Up"},readonly:!0},{name:"addCursorBelow",exec:function(a){a.selectMoreLines(1)},bindKey:{win:"Ctrl-Alt-Down",mac:"Ctrl-Alt-Down"},readonly:!0},{name:"addCursorAboveSkipCurrent",exec:function(a){a.selectMoreLines(-1,!0)},bindKey:{win:"Ctrl-Alt-Shift-Up",mac:"Ctrl-Alt-Shift-Up"},readonly:!0},{name:"addCursorBelowSkipCurrent",exec:function(a){a.selectMoreLines(1,!0)},bindKey:{win:"Ctrl-Alt-Shift-Down",mac:"Ctrl-Alt-Shift-Down"},readonly:!0},{name:"selectMoreBefore",exec:function(a){a.selectMore(-1)},bindKey:{win:"Ctrl-Alt-Left",mac:"Ctrl-Alt-Left"},readonly:!0},{name:"selectMoreAfter",exec:function(a){a.selectMore(1)},bindKey:{win:"Ctrl-Alt-Right",mac:"Ctrl-Alt-Right"},readonly:!0},{name:"selectNextBefore",exec:function(a){a.selectMore(-1,!0)},bindKey:{win:"Ctrl-Alt-Shift-Left",mac:"Ctrl-Alt-Shift-Left"},readonly:!0},{name:"selectNextAfter",exec:function(a){a.selectMore(1,!0)},bindKey:{win:"Ctrl-Alt-Shift-Right",mac:"Ctrl-Alt-Shift-Right"},readonly:!0},{name:"splitIntoLines",exec:function(a){a.multiSelect.splitIntoLines()},bindKey:{win:"Ctrl-Shift-L",mac:"Ctrl-Shift-L"},readonly:!0}],b.multiEditCommands=[{name:"singleSelection",bindKey:"esc",exec:function(a){a.exitMultiSelectMode()},readonly:!0}];var d=a("../keyboard/hash_handler").HashHandler;b.keyboardHandler=new d(b.multiEditCommands)}),define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/config"],function(a,b,c){"use strict";var d=a("../lib/oop"),e=a("../lib/event_emitter").EventEmitter,f=a("../config"),g=function(b,c,d,e){this.changeListener=this.changeListener.bind(this);if(f.get("packaged"))this.$worker=new Worker(f.get("workerPath")+"/"+c);else{var g=this.$normalizePath(a.nameToUrl("ace/worker/worker",null,"_"));this.$worker=new Worker(g);var h={};for(var i=0;i<b.length;i++){var j=b[i],k=this.$normalizePath(a.nameToUrl(j,null,"_").replace(/.js$/,""));h[j]=k}}this.$worker.postMessage({init:!0,tlns:h,module:d,classname:e}),this.callbackId=1,this.callbacks={};var l=this;this.$worker.onerror=function(a){throw window.console&&console.log&&console.log(a),a},this.$worker.onmessage=function(a){var b=a.data;switch(b.type){case"log":window.console&&console.log&&console.log(b.data);break;case"event":l._emit(b.name,{data:b.data});break;case"call":var c=l.callbacks[b.id];c&&(c(b.data),delete l.callbacks[b.id])}}};(function(){d.implement(this,e),this.$normalizePath=function(a){return a=a.replace(/^[a-z]+:\/\/[^\/]+/,""),a=location.protocol+"//"+location.host+(a.charAt(0)=="/"?"":location.pathname.replace(/\/[^\/]*$/,""))+"/"+a.replace(/^[\/]+/,""),a},this.terminate=function(){this._emit("terminate",{}),this.$worker.terminate(),this.$worker=null,this.$doc.removeEventListener("change",this.changeListener),this.$doc=null},this.send=function(a,b){this.$worker.postMessage({command:a,args:b})},this.call=function(a,b,c){if(c){var d=this.callbackId++;this.callbacks[d]=c,b.push(d)}this.send(a,b)},this.emit=function(a,b){try{this.$worker.postMessage({event:a,data:{data:b.data}})}catch(c){}},this.attachToDocument=function(a){this.$doc&&this.terminate(),this.$doc=a,this.call("setValue",[a.getValue()]),a.on("change",this.changeListener)},this.changeListener=function(a){a.range={start:a.data.range.start,end:a.data.range.end},this.emit("change",a)}}).call(g.prototype),b.WorkerClient=g}),define("ace/keyboard/state_handler",["require","exports","module"],function(a,b,c){function e(a){this.keymapping=this.$buildKeymappingRegex(a)}"use strict";var d=!1;e.prototype={$buildKeymappingRegex:function(a){for(var b in a)this.$buildBindingsRegex(a[b]);return a},$buildBindingsRegex:function(a){a.forEach(function(a){a.key?a.key=new RegExp("^"+a.key+"$"):Array.isArray(a.regex)?("key"in a||(a.key=new RegExp("^"+a.regex[1]+"$")),a.regex=new RegExp(a.regex.join("")+"$")):a.regex&&(a.regex=new RegExp(a.regex+"$"))})},$composeBuffer:function(a,b,c,d){if(a.state==null||a.buffer==null)a.state="start",a.buffer="";var e=[];b&1&&e.push("ctrl"),b&8&&e.push("command"),b&2&&e.push("option"),b&4&&e.push("shift"),c&&e.push(c);var f=e.join("-"),g=a.buffer+f;b!=2&&(a.buffer=g);var h={bufferToUse:g,symbolicName:f};return d&&(h.keyIdentifier=d.keyIdentifier),h},$find:function(a,b,c,e,f,g){var h={};return this.keymapping[a.state].some(function(i){var j;if(i.key&&!i.key.test(c))return!1;if(i.regex&&!(j=i.regex.exec(b)))return!1;if(i.match&&!i.match(b,e,f,c,g))return!1;if(i.disallowMatches)for(var k=0;k<i.disallowMatches.length;k++)if(!!j[i.disallowMatches[k]])return!1;if(i.exec){h.command=i.exec;if(i.params){var l;h.args={},i.params.forEach(function(a){a.match!=null&&j!=null?l=j[a.match]||a.defaultValue:l=a.defaultValue,a.type==="number"&&(l=parseInt(l)),h.args[a.name]=l})}a.buffer=""}return i.then&&(a.state=i.then,a.buffer=""),h.command==null&&(h.command="null"),d&&console.log("KeyboardStateMapper#find",i),!0}),h.command?h:(a.buffer="",!1)},handleKeyboard:function(a,b,c,e,f){if(b==0||c!=""&&c!=String.fromCharCode(0)){var g=this.$composeBuffer(a,b,c,f),h=g.bufferToUse,i=g.symbolicName,j=g.keyIdentifier;return g=this.$find(a,h,i,b,c,j),d&&console.log("KeyboardStateMapper#match",h,i,g),g}return null}},b.matchCharacterOnly=function(a,b,c,d){return b==0?!0:b==4&&c.length==1?!0:!1},b.StateHandler=e}),define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],function(a,b,c){"use strict";var d=a("./range").Range,e=a("./lib/event_emitter").EventEmitter,f=a("./lib/oop"),g=function(a,b,c,d,e,f){var g=this;this.length=b,this.session=a,this.doc=a.getDocument(),this.mainClass=e,this.othersClass=f,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=d,this.$onCursorChange=function(){setTimeout(function(){g.onCursorChange()})},this.$pos=c;var h=a.getUndoManager().$undoStack||a.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=h.length,this.setup(),a.selection.on("changeCursor",this.$onCursorChange)};(function(){f.implement(this,e),this.setup=function(){var a=this,b=this.doc,c=this.session,e=this.$pos;this.pos=b.createAnchor(e.row,e.column),this.markerId=c.addMarker(new d(e.row,e.column,e.row,e.column+this.length),this.mainClass,null,!1),this.pos.on("change",function(b){c.removeMarker(a.markerId),a.markerId=c.addMarker(new d(b.value.row,b.value.column,b.value.row,b.value.column+a.length),a.mainClass,null,!1)}),this.others=[],this.$others.forEach(function(c){var d=b.createAnchor(c.row,c.column);a.others.push(d)}),c.setUndoSelect(!1)},this.showOtherMarkers=function(){if(this.othersActive)return;var a=this.session,b=this;this.othersActive=!0,this.others.forEach(function(c){c.markerId=a.addMarker(new d(c.row,c.column,c.row,c.column+b.length),b.othersClass,null,!1),c.on("change",function(e){a.removeMarker(c.markerId),c.markerId=a.addMarker(new d(e.value.row,e.value.column,e.value.row,e.value.column+b.length),b.othersClass,null,!1)})})},this.hideOtherMarkers=function(){if(!this.othersActive)return;this.othersActive=!1;for(var a=0;a<this.others.length;a++)this.session.removeMarker(this.others[a].markerId)},this.onUpdate=function(a){var b=a.data,c=b.range;if(c.start.row!==c.end.row)return;if(c.start.row!==this.pos.row)return;if(this.$updating)return;this.$updating=!0;var e=b.action==="insertText"?c.end.column-c.start.column:c.start.column-c.end.column;if(c.start.column>=this.pos.column&&c.start.column<=this.pos.column+this.length+1){var f=c.start.column-this.pos.column;this.length+=e;if(!this.session.$fromUndo){if(b.action==="insertText")for(var g=this.others.length-1;g>=0;g--){var h=this.others[g],i={row:h.row,column:h.column+f};h.row===c.start.row&&c.start.column<h.column&&(i.column+=e),this.doc.insert(i,b.text)}else if(b.action==="removeText")for(var g=this.others.length-1;g>=0;g--){var h=this.others[g],i={row:h.row,column:h.column+f};h.row===c.start.row&&c.start.column<h.column&&(i.column+=e),this.doc.remove(new d(i.row,i.column,i.row,i.column-e))}c.start.column===this.pos.column&&b.action==="insertText"?setTimeout(function(){this.pos.setPosition(this.pos.row,this.pos.column-e);for(var a=0;a<this.others.length;a++){var b=this.others[a],d={row:b.row,column:b.column-e};b.row===c.start.row&&c.start.column<b.column&&(d.column+=e),b.setPosition(d.row,d.column)}}.bind(this),0):c.start.column===this.pos.column&&b.action==="removeText"&&setTimeout(function(){for(var a=0;a<this.others.length;a++){var b=this.others[a];b.row===c.start.row&&c.start.column<b.column&&b.setPosition(b.row,b.column-e)}}.bind(this),0)}this.pos._emit("change",{value:this.pos});for(var g=0;g<this.others.length;g++)this.others[g]._emit("change",{value:this.others[g]})}this.$updating=!1},this.onCursorChange=function(a){if(this.$updating)return;var b=this.session.selection.getCursor();b.row===this.pos.row&&b.column>=this.pos.column&&b.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",a)):(this.hideOtherMarkers(),this._emit("cursorLeave",a))},this.detach=function(){this.session.removeMarker(this.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.pos.detach();for(var a=0;a<this.others.length;a++)this.others[a].detach();this.session.setUndoSelect(!0)},this.cancel=function(){if(this.$undoStackDepth===-1)throw Error("Canceling placeholders only supported with undo manager attached to session.");var a=this.session.getUndoManager(),b=(a.$undoStack||a.$undostack).length-this.$undoStackDepth;for(var c=0;c<b;c++)a.undo(!0)}}).call(g.prototype),b.PlaceHolder=g}),define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],function(a,b,c){"use strict",b.isDark=!1,b.cssClass="ace-tm",b.cssText=".ace-tm .ace_editor { border: 2px solid rgb(159, 159, 159);}.ace-tm .ace_editor.ace_focus { border: 2px solid #327fbd;}.ace-tm .ace_gutter { background: #e8e8e8; color: #333;}.ace-tm .ace_print_margin { width: 1px; background: #e8e8e8;}.ace-tm .ace_fold { background-color: #6B72E6;}.ace-tm .ace_text-layer { cursor: text;}.ace-tm .ace_cursor { border-left: 1px solid black;}.ace-tm .ace_cursor.ace_overwrite { border-left: 0px; border-bottom: 1px solid black;} .ace-tm .ace_line .ace_invisible { color: rgb(191, 191, 191);}.ace-tm .ace_line .ace_storage,.ace-tm .ace_line .ace_keyword { color: blue;}.ace-tm .ace_line .ace_constant { color: rgb(197, 6, 11);}.ace-tm .ace_line .ace_constant.ace_buildin { color: rgb(88, 72, 246);}.ace-tm .ace_line .ace_constant.ace_language { color: rgb(88, 92, 246);}.ace-tm .ace_line .ace_constant.ace_library { color: rgb(6, 150, 14);}.ace-tm .ace_line .ace_invalid { background-color: rgb(153, 0, 0); color: white;}.ace-tm .ace_line .ace_support.ace_function { color: rgb(60, 76, 114);}.ace-tm .ace_line .ace_support.ace_constant { color: rgb(6, 150, 14);}.ace-tm .ace_line .ace_support.ace_type,.ace-tm .ace_line .ace_support.ace_class { color: rgb(109, 121, 222);}.ace-tm .ace_line .ace_keyword.ace_operator { color: rgb(104, 118, 135);}.ace-tm .ace_line .ace_string { color: rgb(3, 106, 7);}.ace-tm .ace_line .ace_comment { color: rgb(76, 136, 107);}.ace-tm .ace_line .ace_comment.ace_doc { color: rgb(0, 102, 255);}.ace-tm .ace_line .ace_comment.ace_doc.ace_tag { color: rgb(128, 159, 191);}.ace-tm .ace_line .ace_constant.ace_numeric { color: rgb(0, 0, 205);}.ace-tm .ace_line .ace_variable { color: rgb(49, 132, 149);}.ace-tm .ace_line .ace_xml_pe { color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function { color: #0000A2;}.ace-tm .ace_markup.ace_markupine { text-decoration:underline;}.ace-tm .ace_markup.ace_heading { color: rgb(12, 7, 255);}.ace-tm .ace_markup.ace_list { color:rgb(185, 6, 144);}.ace-tm .ace_marker-layer .ace_selection { background: rgb(181, 213, 255);}.ace-tm .ace_marker-layer .ace_step { background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack { background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket { margin: -1px 0 0 -1px; border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active_line { background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_marker-layer .ace_selected_word { background: rgb(250, 250, 255); border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_meta.ace_tag { color:rgb(28, 2, 255);}.ace-tm .ace_string.ace_regex { color: rgb(255, 0, 0)}";var d=a("../lib/dom");d.importCssString(b.cssText,b.cssClass)});
(function() {
window.require(["ace/ace"], function(a) {
if (!window.ace)
@@ -7,4 +7,3 @@
ace[key] = a[key];
});
})();
- \ No newline at end of file
diff --git a/apps/files_texteditor/js/editor.js b/apps/files_texteditor/js/editor.js
index 70bb74a9101..3784ea1032f 100644
--- a/apps/files_texteditor/js/editor.js
+++ b/apps/files_texteditor/js/editor.js
@@ -222,9 +222,17 @@ function showFileEditor(dir,filename){
}
});
// Add the ctrl+s event
- window.aceEditor.commands.addCommand({ name: "save", bindKey: { win: "Ctrl-S", mac: "Command-S", sender: "editor" }, exec: function(){
+ window.aceEditor.commands.addCommand({
+ name: "save",
+ bindKey: {
+ win: "Ctrl-S",
+ mac: "Command-S",
+ sender: "editor"
+ },
+ exec: function(){
doFileSave();
- } });
+ }
+ });
});
} else {
// Failed to get the file.
@@ -297,11 +305,11 @@ $(window).resize(function() {
var is_editor_shown = false;
$(document).ready(function(){
if(typeof FileActions!=='undefined'){
- FileActions.register('text','Edit','',function(filename){
+ FileActions.register('text','Edit', FileActions.PERMISSION_READ, '',function(filename){
showFileEditor($('#dir').val(),filename);
});
FileActions.setDefault('text','Edit');
- FileActions.register('application/xml','Edit','',function(filename){
+ FileActions.register('application/xml','Edit', FileActions.PERMISSION_READ, '',function(filename){
showFileEditor($('#dir').val(),filename);
});
FileActions.setDefault('application/xml','Edit');
diff --git a/apps/files_sharing/list.php b/apps/files_versions/ajax/expireAll.php
index 2fd24840d36..2a678c7f0a5 100644
--- a/apps/files_sharing/list.php
+++ b/apps/files_versions/ajax/expireAll.php
@@ -1,9 +1,10 @@
<?php
+
/**
- * ownCloud
+ * ownCloud - user_migrate
*
- * @author Michael Gapczynski
- * @copyright 2011 Michael Gapczynski GapczynskiM@gmail.com
+ * @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
@@ -20,18 +21,24 @@
*
*/
+// TODO: Allow admins to expire versions of any user
+// TODO: Provide feedback as to how many versions were deleted
-require_once('lib_share.php');
-
-OCP\User::checkLoggedIn();
-OCP\App::checkAppEnabled('files_sharing');
-
-OCP\App::setActiveNavigationEntry("files_sharing_list");
-
-OCP\Util::addscript("files_sharing", "list");
+// Check user and app status
+OCP\JSON::checkLoggedIn();
+OCP\App::checkAppEnabled('files_versions');
+OCP\JSON::callCheck();
-$tmpl = new OCP\Template("files_sharing", "list", "user");
-$tmpl->assign("shared_items", OC_Share::getMySharedItems());
-$tmpl->printPage();
+$versions = new OCA_Versions\Storage();
-?>
+if( $versions->expireAll() ){
+
+ OCP\JSON::success();
+ die();
+
+} else {
+
+ OCP\JSON::error();
+ die();
+
+} \ No newline at end of file
diff --git a/apps/files_versions/ajax/getVersions.php b/apps/files_versions/ajax/getVersions.php
index 92ca3ed8984..1a0e21732cc 100644
--- a/apps/files_versions/ajax/getVersions.php
+++ b/apps/files_versions/ajax/getVersions.php
@@ -1,15 +1,18 @@
<?php
OCP\JSON::checkAppEnabled('files_versions');
-require_once('apps/files_versions/versions.php');
-
$userDirectory = "/".OCP\USER::getUser()."/files";
$source = $_GET['source'];
if( OCA_Versions\Storage::isversioned( $source ) ) {
$count=5; //show the newest revisions
- $versions = OCA_Versions\Storage::getversions( $source, $count);
+ $versions = OCA_Versions\Storage::getVersions( $source, $count);
+ $versionsFormatted = array();
+
+ foreach ( $versions AS $version ) {
+ $versionsFormatted[] = OCP\Util::formatDate( $version['version'] );
+ }
$versionsSorted = array_reverse( $versions );
diff --git a/apps/files_versions/ajax/rollbackVersion.php b/apps/files_versions/ajax/rollbackVersion.php
index 77c6102ea76..24d71a914a4 100644
--- a/apps/files_versions/ajax/rollbackVersion.php
+++ b/apps/files_versions/ajax/rollbackVersion.php
@@ -3,8 +3,6 @@
OCP\JSON::checkAppEnabled('files_versions');
OCP\JSON::callCheck();
-require_once('apps/files_versions/versions.php');
-
$userDirectory = "/".OCP\USER::getUser()."/files";
$file = $_GET['file'];
diff --git a/apps/files_versions/ajax/togglesettings.php b/apps/files_versions/ajax/togglesettings.php
index d513d12dd6c..546b37ae1aa 100644
--- a/apps/files_versions/ajax/togglesettings.php
+++ b/apps/files_versions/ajax/togglesettings.php
@@ -2,10 +2,9 @@
OCP\JSON::checkAppEnabled('files_versions');
OCP\JSON::checkAdminUser();
+OCP\JSON::callCheck();
if (OCP\Config::getSystemValue('versions', 'true')=='true') {
OCP\Config::setSystemValue('versions', 'false');
} else {
OCP\Config::setSystemValue('versions', 'true');
}
-
-?>
diff --git a/apps/files_versions/appinfo/api.php b/apps/files_versions/appinfo/api.php
new file mode 100644
index 00000000000..a7386bc2c9f
--- /dev/null
+++ b/apps/files_versions/appinfo/api.php
@@ -0,0 +1,36 @@
+<?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/>.
+*/
+
+return array(
+ 'list' => array('method' => 'GET', 'class' => 'Storage', 'function' => 'getVersions',
+ 'parameters' => array(
+ 'file' => array('required' => true, 'type' => 'string')
+ )
+ ),
+ 'revert' => array('method' => 'POST', 'class' => 'Storage', 'function' => 'rollback',
+ 'parameters' => array(
+ 'file' => array('required' => true, 'type' => 'string'),
+ 'time' => array('required' => true, 'type' => 'int')
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/apps/files_versions/appinfo/app.php b/apps/files_versions/appinfo/app.php
index fd31a0bb67a..9ac7f6d5cde 100644
--- a/apps/files_versions/appinfo/app.php
+++ b/apps/files_versions/appinfo/app.php
@@ -1,17 +1,16 @@
<?php
-require_once('apps/files_versions/versions.php');
-
-// Add an entry in the app list
-OCP\App::register( array(
- 'order' => 10,
- 'id' => 'files_versions',
- 'name' => 'Versioning' ));
+//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';
OCP\App::registerAdmin('files_versions', 'settings');
+OCP\App::registerPersonal('files_versions','settings-personal');
+
OCP\Util::addscript('files_versions', 'versions');
// Listen to write signals
-OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_post_write, "OCA_Versions\Storage", "write_hook");
-
-?>
+OCP\Util::connectHook('OC_Filesystem', 'post_write', "OCA_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
diff --git a/apps/files_versions/appinfo/update.php b/apps/files_versions/appinfo/update.php
new file mode 100644
index 00000000000..9569ca10485
--- /dev/null
+++ b/apps/files_versions/appinfo/update.php
@@ -0,0 +1,16 @@
+<?php
+
+$installedVersion=OCP\Config::getAppValue('files_versions', 'installed_version');
+// move versions to new directory
+if (version_compare($installedVersion, '1.0.2', '<')) {
+ $users = \OCP\User::getUsers();
+ $datadir = \OCP\Config::getSystemValue('datadirectory').'/';
+ foreach ($users as $user) {
+ $oldPath = $datadir.$user.'/versions';
+ $newPath = $datadir.$user.'/files_versions';
+ if(is_dir($oldPath)) {
+ rename($oldPath, $newPath);
+ }
+ }
+
+}
diff --git a/apps/files_versions/appinfo/version b/apps/files_versions/appinfo/version
index 7f207341d5d..e6d5cb833c6 100644
--- a/apps/files_versions/appinfo/version
+++ b/apps/files_versions/appinfo/version
@@ -1 +1 @@
-1.0.1 \ No newline at end of file
+1.0.2 \ No newline at end of file
diff --git a/apps/files_versions/history.php b/apps/files_versions/history.php
index f12dc618f23..27dc8bfc382 100644
--- a/apps/files_versions/history.php
+++ b/apps/files_versions/history.php
@@ -4,7 +4,7 @@
* ownCloud - History page of the Versions App
*
* @author Frank Karlitschek
- * @copyright 2011 Frank Karlitschek karlitschek@kde.org
+ * @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
@@ -28,23 +28,24 @@ $tmpl = new OCP\Template( 'files_versions', 'history', 'user' );
if ( isset( $_GET['path'] ) ) {
$path = $_GET['path'];
- $path = strip_tags( $path );
+ $path = $path;
$tmpl->assign( 'path', $path );
+ $versions = new OCA_Versions\Storage();
// roll back to old version if button clicked
if( isset( $_GET['revert'] ) ) {
- if( \OCA_Versions\Storage::rollback( $path, $_GET['revert'] ) ) {
+ if( $versions->rollback( $path, $_GET['revert'] ) ) {
$tmpl->assign( 'outcome_stat', 'success' );
- $tmpl->assign( 'outcome_msg', "File {$_GET['path']} was reverted to version ".OCP\Util::formatDate( $_GET['revert'] ) );
+ $tmpl->assign( 'outcome_msg', "File {$_GET['path']} was reverted to version ".OCP\Util::formatDate( doubleval($_GET['revert']) ) );
} else {
$tmpl->assign( 'outcome_stat', 'failure' );
- $tmpl->assign( 'outcome_msg', "File {$_GET['path']} could not be reverted to version ".OCP\Util::formatDate( $_GET['revert'] ) );
+ $tmpl->assign( 'outcome_msg', "File {$_GET['path']} could not be reverted to version ".OCP\Util::formatDate( doubleval($_GET['revert']) ) );
}
@@ -54,7 +55,7 @@ if ( isset( $_GET['path'] ) ) {
if( OCA_Versions\Storage::isversioned( $path ) ) {
$count = 999; //show the newest revisions
- $versions = OCA_Versions\Storage::getversions( $path, $count );
+ $versions = OCA_Versions\Storage::getVersions( $path, $count);
$tmpl->assign( 'versions', array_reverse( $versions ) );
@@ -70,5 +71,3 @@ if ( isset( $_GET['path'] ) ) {
}
$tmpl->printPage( );
-
-?>
diff --git a/apps/files_versions/js/settings-personal.js b/apps/files_versions/js/settings-personal.js
new file mode 100644
index 00000000000..6ea8c1a950f
--- /dev/null
+++ b/apps/files_versions/js/settings-personal.js
@@ -0,0 +1,39 @@
+// 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/js/versions.js b/apps/files_versions/js/versions.js
index 5e46b2a0eed..c5c1553f1a8 100644
--- a/apps/files_versions/js/versions.js
+++ b/apps/files_versions/js/versions.js
@@ -11,7 +11,7 @@ $(document).ready(function() {
$(document).ready(function(){
if (typeof FileActions !== 'undefined') {
// Add history button to files/index.php
- FileActions.register('file','History',function(){return OC.imagePath('core','actions/history')},function(filename){
+ FileActions.register('file','History', FileActions.PERMISSION_UPDATE, function(){return OC.imagePath('core','actions/history')},function(filename){
if (scanFiles.scanning){return;}//workaround to prevent additional http request block scanning feedback
@@ -33,7 +33,7 @@ $(document).ready(function(){
});
function createVersionsDropdown(filename, files) {
-
+
var historyUrl = OC.linkTo('files_versions', 'history.php') + '?path='+encodeURIComponent( $( '#dir' ).val() ).replace( /%2F/g, '/' )+'/'+encodeURIComponent( filename );
var html = '<div id="dropdown" class="drop" data-file="'+files+'">';
@@ -104,9 +104,9 @@ function createVersionsDropdown(filename, files) {
}
function addVersion(revision ) {
- name=formatDate(revision*1000);
+ name=formatDate(revision.version*1000);
var version=$('<option/>');
- version.attr('value',revision);
+ version.attr('value',revision.version);
version.text(name);
// } else {
diff --git a/apps/files_versions/l10n/.gitkeep b/apps/files_versions/l10n/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/apps/files_versions/l10n/.gitkeep
diff --git a/apps/files_versions/l10n/ca.php b/apps/files_versions/l10n/ca.php
new file mode 100644
index 00000000000..8388556bec6
--- /dev/null
+++ b/apps/files_versions/l10n/ca.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "Expira totes les versions",
+"Enable Files Versioning" => "Habilita les versions de fitxers"
+);
diff --git a/apps/files_versions/l10n/cs_CZ.php b/apps/files_versions/l10n/cs_CZ.php
new file mode 100644
index 00000000000..3297648fa30
--- /dev/null
+++ b/apps/files_versions/l10n/cs_CZ.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "Vypršení všech verzí",
+"Enable Files Versioning" => "Povolit verzování souborů"
+);
diff --git a/apps/files_versions/l10n/de.php b/apps/files_versions/l10n/de.php
new file mode 100644
index 00000000000..3d1a0a43f5e
--- /dev/null
+++ b/apps/files_versions/l10n/de.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "Alle Versionen löschen",
+"Enable Files Versioning" => "Datei-Versionierung aktivieren"
+);
diff --git a/apps/files_versions/l10n/el.php b/apps/files_versions/l10n/el.php
new file mode 100644
index 00000000000..8953c96bd11
--- /dev/null
+++ b/apps/files_versions/l10n/el.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "Λήξη όλων των εκδόσεων",
+"Enable Files Versioning" => "ΕνεÏγοποίηση παÏακολοÏθησης εκδόσεων αÏχείων"
+);
diff --git a/apps/files_versions/l10n/eo.php b/apps/files_versions/l10n/eo.php
new file mode 100644
index 00000000000..8ec0895638a
--- /dev/null
+++ b/apps/files_versions/l10n/eo.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "Eksvalidigi ĉiujn eldonojn",
+"Enable Files Versioning" => "Kapabligi dosiereldonkontrolon"
+);
diff --git a/apps/files_versions/l10n/es.php b/apps/files_versions/l10n/es.php
new file mode 100644
index 00000000000..d5be72b1741
--- /dev/null
+++ b/apps/files_versions/l10n/es.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Enable Files Versioning" => "Habilitar versionamiento de archivos"
+);
diff --git a/apps/files_versions/l10n/et_EE.php b/apps/files_versions/l10n/et_EE.php
new file mode 100644
index 00000000000..d136ae241ce
--- /dev/null
+++ b/apps/files_versions/l10n/et_EE.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "Kõikide versioonide aegumine",
+"Enable Files Versioning" => "Luba failide versioonihaldus"
+);
diff --git a/apps/files_versions/l10n/fa.php b/apps/files_versions/l10n/fa.php
new file mode 100644
index 00000000000..e2dc6cba63f
--- /dev/null
+++ b/apps/files_versions/l10n/fa.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "انقضای تمامی نسخه‌ها",
+"Enable Files Versioning" => "Ùعال‌کردن پرونده‌های نسخه‌بندی"
+);
diff --git a/apps/files_versions/l10n/fi_FI.php b/apps/files_versions/l10n/fi_FI.php
new file mode 100644
index 00000000000..c5092daf998
--- /dev/null
+++ b/apps/files_versions/l10n/fi_FI.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "Vanhenna kaikki versiot",
+"Enable Files Versioning" => "Käytä tiedostojen versiointia"
+);
diff --git a/apps/files_versions/l10n/fr.php b/apps/files_versions/l10n/fr.php
new file mode 100644
index 00000000000..02209f543b1
--- /dev/null
+++ b/apps/files_versions/l10n/fr.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "Supprimer les versions intermédiaires",
+"Enable Files Versioning" => "Activer le versionnage"
+);
diff --git a/apps/files_versions/l10n/it.php b/apps/files_versions/l10n/it.php
new file mode 100644
index 00000000000..9711ce18aa8
--- /dev/null
+++ b/apps/files_versions/l10n/it.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "Scadenza di tutte le versioni",
+"Enable Files Versioning" => "Abilita controllo di versione"
+);
diff --git a/apps/files_versions/l10n/ja_JP.php b/apps/files_versions/l10n/ja_JP.php
new file mode 100644
index 00000000000..ec5e32f3e29
--- /dev/null
+++ b/apps/files_versions/l10n/ja_JP.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "ã™ã¹ã¦ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’削除ã™ã‚‹",
+"Enable Files Versioning" => "ファイルã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç®¡ç†ã‚’有効ã«ã™ã‚‹"
+);
diff --git a/apps/files_versions/l10n/lt_LT.php b/apps/files_versions/l10n/lt_LT.php
new file mode 100644
index 00000000000..5da209f31b9
--- /dev/null
+++ b/apps/files_versions/l10n/lt_LT.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "Panaikinti visų versijų galiojimą",
+"Enable Files Versioning" => "Įjungti failų versijų vedimą"
+);
diff --git a/apps/files_versions/l10n/nb_NO.php b/apps/files_versions/l10n/nb_NO.php
new file mode 100644
index 00000000000..55cc12113d7
--- /dev/null
+++ b/apps/files_versions/l10n/nb_NO.php
@@ -0,0 +1,3 @@
+<?php $TRANSLATIONS = array(
+"Enable Files Versioning" => "Slå på versjonering"
+);
diff --git a/apps/files_versions/l10n/pl.php b/apps/files_versions/l10n/pl.php
new file mode 100644
index 00000000000..faf2d39e709
--- /dev/null
+++ b/apps/files_versions/l10n/pl.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "WygasajÄ… wszystkie wersje",
+"Enable Files Versioning" => "Włącz wersjonowanie plików"
+);
diff --git a/apps/files_versions/l10n/sl.php b/apps/files_versions/l10n/sl.php
new file mode 100644
index 00000000000..e7db55930c1
--- /dev/null
+++ b/apps/files_versions/l10n/sl.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "Zastaraj vse razliÄice",
+"Enable Files Versioning" => "OmogoÄi sledenje razliÄicam datotek"
+);
diff --git a/apps/files_versions/l10n/sv.php b/apps/files_versions/l10n/sv.php
new file mode 100644
index 00000000000..03d4d54d0b9
--- /dev/null
+++ b/apps/files_versions/l10n/sv.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "Upphör alla versioner",
+"Enable Files Versioning" => "Aktivera versionshantering"
+);
diff --git a/apps/files_versions/l10n/th_TH.php b/apps/files_versions/l10n/th_TH.php
new file mode 100644
index 00000000000..e880840f4b9
--- /dev/null
+++ b/apps/files_versions/l10n/th_TH.php
@@ -0,0 +1,4 @@
+<?php $TRANSLATIONS = array(
+"Expire all versions" => "หมดอายุทุà¸à¸£à¸¸à¹ˆà¸™",
+"Enable Files Versioning" => "เปิดใช้งานคุณสมบัติà¸à¸²à¸£à¹à¸¢à¸à¸ªà¸–านะรุ่นหรือเวอร์ชั่นของไฟล์"
+);
diff --git a/apps/files_versions/lib/hooks.php b/apps/files_versions/lib/hooks.php
new file mode 100644
index 00000000000..bfc8fd3a378
--- /dev/null
+++ b/apps/files_versions/lib/hooks.php
@@ -0,0 +1,75 @@
+<?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.
+ */
+
+/**
+ * This class contains all hooks.
+ */
+
+namespace OCA_Versions;
+
+class Hooks {
+
+ /**
+ * listen to write event.
+ */
+ public static function write_hook( $params ) {
+
+ if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
+
+ $versions = new Storage( new \OC_FilesystemView('') );
+
+ $path = $params[\OC_Filesystem::signal_param_path];
+
+ if($path<>'') $versions->store( $path );
+
+ }
+ }
+
+
+ /**
+ * @brief Erase versions of deleted file
+ * @param array
+ *
+ * This function is connected to the delete signal of OC_Filesystem
+ * 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']);
+ }
+ }
+ }
+
+ /**
+ * @brief rename/move versions of renamed/moved files
+ * @param array with oldpath and newpath
+ *
+ * This function is connected to the rename signal of OC_Filesystem and adjust the name and location
+ * 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'],0700,true);
+ $versions = Storage::getVersions($rel_oldpath);
+ foreach ($versions as $v){
+ rename($abs_oldpath.$v['version'], $abs_newpath.$v['version']);
+ }
+ }
+ }
+
+}
diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php
new file mode 100644
index 00000000000..f146676757d
--- /dev/null
+++ b/apps/files_versions/lib/versions.php
@@ -0,0 +1,306 @@
+<?php
+/**
+ * Copyright (c) 2012 Frank Karlitschek <frank@owncloud.org>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+/**
+ * Versions
+ *
+ * A class to handle the versioning of files.
+ */
+
+namespace OCA_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;
+
+ private $view;
+
+ function __construct() {
+
+ $this->view = \OCP\Files::getStorage('files_versions');
+
+ }
+
+ /**
+ * listen to write event.
+ */
+ public static function write_hook($params) {
+ if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
+ $path = $params[\OC_Filesystem::signal_param_path];
+ if($path<>'') $this->store($path);
+ }
+ }
+
+
+
+ /**
+ * store a new version of a file.
+ */
+ public function store($filename) {
+ if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
+
+ $files_view = \OCP\Files::getStorage("files");
+ $users_view = \OCP\Files::getStorage("files_versions");
+ $users_view->chroot(\OCP\User::getUser().'/');
+
+ if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {
+ $pos = strpos($source, '/files', 1);
+ $uid = substr($source, 1, $pos - 1);
+ $filename = substr($source, $pos + 6);
+ } else {
+ $uid = \OCP\User::getUser();
+ }
+
+ $versionsFolderName=\OCP\Config::getSystemValue('datadirectory') . $this->view->getAbsolutePath('');
+
+ //check if source file already exist as version to avoid recursions.
+ if ($users_view->file_exists($filename)) {
+ return false;
+ }
+
+ // check if filename is a directory
+ if($files_view->is_dir($filename)){
+ 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;
+ }
+ }
+
+ // 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()) {
+ $matches=glob($versionsFolderName.'/'.$filename.'.v*');
+ sort($matches);
+ $parts=explode('.v',end($matches));
+ if((end($parts)+Storage::DEFAULTMININTERVAL)>time()){
+ return false;
+ }
+ }
+
+
+ // create all parent folders
+ $info=pathinfo($filename);
+ if(!file_exists($versionsFolderName.'/'.$info['dirname'])) mkdir($versionsFolderName.'/'.$info['dirname'],0700,true);
+
+ // store a new version of a file
+ @$users_view->copy('files'.$filename, 'files_versions'.$filename.'.v'.time());
+
+ // expire old revisions if necessary
+ Storage::expire($filename);
+ }
+ }
+
+
+ /**
+ * rollback to an old version of a file.
+ */
+ public static function rollback($filename,$revision) {
+
+ if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
+ $users_view = \OCP\Files::getStorage("files_versions");
+ $users_view->chroot(\OCP\User::getUser().'/');
+
+ if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {
+ $pos = strpos($source, '/files', 1);
+ $uid = substr($source, 1, $pos - 1);
+ $filename = substr($source, $pos + 6);
+ } else {
+ $uid = \OCP\User::getUser();
+ }
+
+ // rollback
+ if( @$users_view->copy('files_versions'.$filename.'.v'.$revision, 'files'.$filename) ) {
+
+ return true;
+
+ }else{
+
+ return false;
+
+ }
+
+ }
+
+ }
+
+ /**
+ * check if old versions of a file exist.
+ */
+ public static function isversioned($filename) {
+ if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
+ $versions_fileview = \OCP\Files::getStorage("files_versions");
+ if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {
+ $pos = strpos($source, '/files', 1);
+ $filename = substr($source, $pos + 6);
+ }
+
+ $versionsFolderName=\OCP\Config::getSystemValue('datadirectory'). $versions_fileview->getAbsolutePath('');
+
+ // check for old versions
+ $matches=glob($versionsFolderName.$filename.'.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
+ * @param $filename file to find versions of, relative to the user files dir
+ * @param $count number of versions to return
+ * @returns array
+ */
+ public static function getVersions( $filename, $count = 0 ) {
+
+ if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {
+
+ if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {
+ $pos = strpos($source, '/files', 1);
+ $uid = substr($source, 1, $pos - 1);
+ $filename = substr($source, $pos + 6);
+ } else {
+ $uid = \OCP\User::getUser();
+ }
+ $versions_fileview = \OCP\Files::getStorage('files_versions');
+ $versionsFolderName = \OCP\Config::getSystemValue('datadirectory'). $versions_fileview->getAbsolutePath('');
+ $versions = array();
+
+ // fetch for old versions
+ $matches = glob( $versionsFolderName.'/'.$filename.'.v*' );
+
+ sort( $matches );
+
+ $i = 0;
+
+ $files_view = \OCP\Files::getStorage('files');
+ $local_file = $files_view->getLocalFile($filename);
+ foreach( $matches as $ma ) {
+
+ $i++;
+ $versions[$i]['cur'] = 0;
+ $parts = explode( '.v', $ma );
+ $versions[$i]['version'] = ( end( $parts ) );
+
+ // 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 );
+
+ }
+
+ $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
+ */
+ public static function expire($filename) {
+ if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
+
+ if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {
+ $pos = strpos($source, '/files', 1);
+ $uid = substr($source, 1, $pos - 1);
+ $filename = substr($source, $pos + 6);
+ } else {
+ $uid = \OCP\User::getUser();
+ }
+ $versions_fileview = \OCP\Files::getStorage("files_versions");
+ $versionsFolderName=\OCP\Config::getSystemValue('datadirectory'). $versions_fileview->getAbsolutePath('');
+
+ // check for old versions
+ $matches = glob( $versionsFolderName.'/'.$filename.'.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( $versionsFolderName.'/'.$filename.'.v'.$de );
+
+ }
+ }
+ }
+ }
+
+ /**
+ * @brief Erase all old versions of all user files
+ * @return true/false
+ */
+ public function expireAll() {
+ return $this->view->deleteAll('', true);
+ }
+}
diff --git a/apps/files_versions/settings-personal.php b/apps/files_versions/settings-personal.php
new file mode 100644
index 00000000000..db80172979d
--- /dev/null
+++ b/apps/files_versions/settings-personal.php
@@ -0,0 +1,8 @@
+<?php
+
+$tmpl = new OCP\Template( 'files_versions', 'settings-personal');
+
+OCP\Util::addscript('files_versions','settings-personal');
+
+return $tmpl->fetchPage();
+?> \ No newline at end of file
diff --git a/apps/files_versions/settings.php b/apps/files_versions/settings.php
index 5f9e60fc589..f2873b8f7c2 100644
--- a/apps/files_versions/settings.php
+++ b/apps/files_versions/settings.php
@@ -7,4 +7,3 @@ OCP\Util::addscript( 'files_versions', 'versions' );
$tmpl = new OCP\Template( 'files_versions', 'settings');
return $tmpl->fetchPage();
-?>
diff --git a/apps/files_versions/templates/history.php b/apps/files_versions/templates/history.php
index 58fea75a0d0..1b442556421 100644
--- a/apps/files_versions/templates/history.php
+++ b/apps/files_versions/templates/history.php
@@ -20,11 +20,11 @@ if( isset( $_['message'] ) ) {
echo('<p><em>Revert a file to a previous version by clicking on its revert button</em></p><br />');
foreach ( $_['versions'] as $v ) {
-
echo ' ';
- echo OCP\Util::formatDate( $v );
- echo ' <a href="'.OCP\Util::linkTo('files_versions', 'history.php').'?path='.urlencode( $_['path'] ).'&revert='. $v .'" class="button">Revert</a><br /><br />';
-
+ echo OCP\Util::formatDate( doubleval($v['version']) );
+ echo ' <a href="'.OCP\Util::linkTo('files_versions', 'history.php').'?path='.urlencode( $_['path'] ).'&revert='. $v['version'] .'" class="button">Revert</a><br /><br />';
+ if ( $v['cur'] ) { echo ' (<b>Current</b>)'; }
+ echo '<br /><br />';
}
}
diff --git a/apps/files_versions/templates/settings-personal.php b/apps/files_versions/templates/settings-personal.php
new file mode 100644
index 00000000000..fe9ba381e58
--- /dev/null
+++ b/apps/files_versions/templates/settings-personal.php
@@ -0,0 +1,9 @@
+<form id="versions">
+ <fieldset class="personalblock">
+ <legend>
+ <strong>Versions</strong><!-- translate using echo $l->t('foo'); -->
+ </legend>
+ <p>This will delete all existing backup versions of your files</p><!-- translate using echo $l->t('foo'); -->
+ <button id="expireAllBtn">Expire all versions<img style="display: none;" class="expireAllLoading" src="<?php echo OCP\Util::imagePath('core', 'loading.gif'); ?>" /></button>
+ </fieldset>
+</form>
diff --git a/apps/files_versions/versions.php b/apps/files_versions/versions.php
deleted file mode 100644
index c8fc26dfb9c..00000000000
--- a/apps/files_versions/versions.php
+++ /dev/null
@@ -1,263 +0,0 @@
-<?php
-/**
- * Copyright (c) 2012 Frank Karlitschek <frank@owncloud.org>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
-
-/**
- * Versions
- *
- * A class to handle the versioning of files.
- */
-
-namespace OCA_Versions;
-
-class Storage {
-
-
- // config.php configuration:
- // - files_versions
- // - files_versionsfolder
- // - files_versionsblacklist
- // - files_versionsmaxfilesize
- // - files_versionsinterval
- // - files_versionmaxversions
- //
- // todo:
- // - port to oc_filesystem to enable network transparency
- // - check if it works well together with encryption
- // - implement expire all function. And find a place to call it ;-)
- // - add transparent compression. first test if it´s worth it.
-
- const DEFAULTENABLED=true;
- const DEFAULTFOLDER='versions';
- const DEFAULTBLACKLIST='avi mp3 mpg mp4 ctmp';
- const DEFAULTMAXFILESIZE=1048576; // 10MB
- const DEFAULTMININTERVAL=120; // 2 min
- const DEFAULTMAXVERSIONS=50;
-
- /**
- * init the versioning and create the versions folder.
- */
- public static function init() {
- if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
- // create versions folder
- $foldername=\OCP\Config::getSystemValue('datadirectory').'/'. \OCP\USER::getUser() .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER);
- if(!is_dir($foldername)){
- mkdir($foldername);
- }
- }
- }
-
-
- /**
- * listen to write event.
- */
- public static function write_hook($params) {
- if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
- $path = $params[\OC_Filesystem::signal_param_path];
- if($path<>'') Storage::store($path);
- }
- }
-
-
-
- /**
- * store a new version of a file.
- */
- public static function store($filename) {
- if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
- if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {
- $pos = strpos($source, '/files', 1);
- $uid = substr($source, 1, $pos - 1);
- $filename = substr($source, $pos + 6);
- } else {
- $uid = \OCP\User::getUser();
- }
- $versionsfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. $uid .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER);
- $filesfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. $uid .'/files';
- Storage::init();
-
- // check if filename is a directory
- if(is_dir($filesfoldername.'/'.$filename)){
- 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;
- }
- }
-
- // check filesize
- if(filesize($filesfoldername.'/'.$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()) {
- $matches=glob($versionsfoldername.'/'.$filename.'.v*');
- sort($matches);
- $parts=explode('.v',end($matches));
- if((end($parts)+Storage::DEFAULTMININTERVAL)>time()){
- return false;
- }
- }
-
-
- // create all parent folders
- $info=pathinfo($filename);
- @mkdir($versionsfoldername.'/'.$info['dirname'],0700,true);
-
- // store a new version of a file
- copy($filesfoldername.'/'.$filename,$versionsfoldername.'/'.$filename.'.v'.time());
-
- // expire old revisions
- Storage::expire($filename);
- }
- }
-
-
- /**
- * rollback to an old version of a file.
- */
- public static function rollback($filename,$revision) {
-
- if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
- if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {
- $pos = strpos($source, '/files', 1);
- $uid = substr($source, 1, $pos - 1);
- $filename = substr($source, $pos + 6);
- } else {
- $uid = \OCP\User::getUser();
- }
- $versionsfoldername=\OCP\Config::getSystemValue('datadirectory').'/'.$uid .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER);
-
- $filesfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. $uid .'/files';
-
- // rollback
- if ( @copy($versionsfoldername.'/'.$filename.'.v'.$revision,$filesfoldername.'/'.$filename) ) {
-
- return true;
-
- }else{
-
- return false;
-
- }
-
- }
-
- }
-
- /**
- * check if old versions of a file exist.
- */
- public static function isversioned($filename) {
- if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
- if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {
- $pos = strpos($source, '/files', 1);
- $uid = substr($source, 1, $pos - 1);
- $filename = substr($source, $pos + 6);
- } else {
- $uid = \OCP\User::getUser();
- }
- $versionsfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. $uid .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER);
-
- // check for old versions
- $matches=glob($versionsfoldername.'/'.$filename.'.v*');
- if(count($matches)>1){
- return true;
- }else{
- return false;
- }
- }else{
- return(false);
- }
- }
-
-
-
- /**
- * get a list of old versions of a file.
- */
- public static function getversions($filename,$count=0) {
- if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
- if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {
- $pos = strpos($source, '/files', 1);
- $uid = substr($source, 1, $pos - 1);
- $filename = substr($source, $pos + 6);
- } else {
- $uid = \OCP\User::getUser();
- }
- $versionsfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. $uid .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER);
- $versions=array();
-
- // fetch for old versions
- $matches=glob($versionsfoldername.'/'.$filename.'.v*');
- sort($matches);
- foreach($matches as $ma) {
- $parts=explode('.v',$ma);
- $versions[]=(end($parts));
- }
-
- // only show the newest commits
- if($count<>0 and (count($versions)>$count)) {
- $versions=array_slice($versions,count($versions)-$count);
- }
-
- return($versions);
-
-
- }else{
- return(array());
- }
- }
-
-
-
- /**
- * expire old versions of a file.
- */
- public static function expire($filename) {
- if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
- if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {
- $pos = strpos($source, '/files', 1);
- $uid = substr($source, 1, $pos - 1);
- $filename = substr($source, $pos + 6);
- } else {
- $uid = \OCP\User::getUser();
- }
- $versionsfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. $uid .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER);
-
- // check for old versions
- $matches=glob($versionsfoldername.'/'.$filename.'.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($versionsfoldername.'/'.$filename.'.v'.$de);
- }
- }
- }
- }
-
- /**
- * expire all old versions.
- */
- public static function expireall($filename) {
- // todo this should go through all the versions directories and delete all the not needed files and not needed directories.
- // useful to be included in a cleanup cronjob.
- }
-
-
-}
diff --git a/apps/gallery/ajax/createAlbum.php b/apps/gallery/ajax/createAlbum.php
index e13dac6ad1a..71e7fd1aa5e 100644
--- a/apps/gallery/ajax/createAlbum.php
+++ b/apps/gallery/ajax/createAlbum.php
@@ -29,5 +29,3 @@ OCP\JSON::callCheck();
OC_Gallery_Album::create(OCP\USER::getUser(), $_GET['album_name']);
OCP\JSON::success(array('name' => $_GET['album_name']));
-
-?>
diff --git a/apps/gallery/ajax/galleryOp.php b/apps/gallery/ajax/galleryOp.php
index 0cd825f3e50..ab8c64e28ad 100644
--- a/apps/gallery/ajax/galleryOp.php
+++ b/apps/gallery/ajax/galleryOp.php
@@ -42,7 +42,8 @@ function handleRemove($name) {
function handleGetThumbnails($albumname) {
OCP\Response::enableCaching(3600 * 24); // 24 hour
- $thumbnail = OC::$CONFIG_DATADIRECTORY.'/../gallery/'.urldecode($albumname).'.png';
+ $view = OCP\Files::getStorage('gallery');
+ $thumbnail = $view->fopen(urldecode($albumname).'.png', 'r');
header('Content-Type: '.OC_Image::getMimeTypeForFile($thumbnail));
OCP\Response::sendFile($thumbnail);
}
@@ -185,4 +186,3 @@ if ($_GET['operation']) {
OCP\JSON::error(array('cause' => 'Unknown operation'));
}
}
-?>
diff --git a/apps/gallery/ajax/sharing.php b/apps/gallery/ajax/sharing.php
index c3d5989ae57..bf8169ef1e2 100644
--- a/apps/gallery/ajax/sharing.php
+++ b/apps/gallery/ajax/sharing.php
@@ -81,7 +81,8 @@ function handleGetThumbnail($token, $imgpath) {
function handleGetAlbumThumbnail($token, $albumname)
{
$owner = OC_Gallery_Sharing::getTokenOwner($token);
- $file = OCP\Config::getSystemValue("datadirectory").'/'. $owner .'/gallery/'.$albumname.'.png';
+ $view = OCP\Files::getStorage('gallery');
+ $file = $view->fopen($albumname.'.png', 'r');
$image = new OC_Image($file);
if ($image->valid()) {
$image->centerCrop();
@@ -94,7 +95,8 @@ function handleGetAlbumThumbnail($token, $albumname)
function handleGetPhoto($token, $photo) {
$owner = OC_Gallery_Sharing::getTokenOwner($token);
- $file = OCP\Config::getSystemValue( "datadirectory", OC::$SERVERROOT."/data" ).'/'.$owner.'/files'.urldecode($photo);
+ $view = OCP\Files::getStorage('files');
+ $file = $view->fopen(urldecode($photo), 'r');
header('Content-Type: '.OC_Image::getMimeTypeForFile($file));
OCP\Response::sendFile($file);
}
diff --git a/apps/gallery/ajax/thumbnail.php b/apps/gallery/ajax/thumbnail.php
index 4fc9eba992d..5bf1d420dc4 100644
--- a/apps/gallery/ajax/thumbnail.php
+++ b/apps/gallery/ajax/thumbnail.php
@@ -23,6 +23,7 @@
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('gallery');
+session_write_close();
require_once('apps/gallery/lib/managers.php');
diff --git a/apps/gallery/ajax/viewImage.php b/apps/gallery/ajax/viewImage.php
new file mode 100644
index 00000000000..daf0ab741f0
--- /dev/null
+++ b/apps/gallery/ajax/viewImage.php
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * ownCloud - gallery application
+ *
+ * @author Ike Devolder
+ * @copyright 2012 Ike Devolder
+ *
+ * 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 Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+OCP\JSON::checkLoggedIn();
+OCP\JSON::checkAppEnabled('gallery');
+
+$img = $_GET['img'];
+
+$image = OC_Gallery_Photo::getViewImage($img);
+if ($image) {
+ OCP\Response::enableCaching(3600 * 24); // 24 hour
+ $image->show();
+}
diff --git a/apps/gallery/appinfo/app.php b/apps/gallery/appinfo/app.php
index 3d38b85b7e0..9103f66441d 100644
--- a/apps/gallery/appinfo/app.php
+++ b/apps/gallery/appinfo/app.php
@@ -21,20 +21,18 @@
*
*/
-OC::$CLASSPATH['OC_Gallery_Album'] = 'apps/gallery/lib/album.php';
-OC::$CLASSPATH['OC_Gallery_Photo'] = 'apps/gallery/lib/photo.php';
-OC::$CLASSPATH['OC_Gallery_Scanner'] = 'apps/gallery/lib/scanner.php';
-OC::$CLASSPATH['OC_Gallery_Sharing'] = 'apps/gallery/lib/sharing.php';
-OC::$CLASSPATH['OC_Gallery_Hooks_Handlers'] = 'apps/gallery/lib/hooks_handlers.php';
-OC::$CLASSPATH['Pictures_Managers'] = 'apps/gallery/lib/managers.php';
-OC::$CLASSPATH['Pictures_Tiles'] = 'apps/gallery/lib/tiles.php';
+OC::$CLASSPATH['OC_Gallery_Album'] = 'gallery/lib/album.php';
+OC::$CLASSPATH['OC_Gallery_Photo'] = 'gallery/lib/photo.php';
+OC::$CLASSPATH['OC_Gallery_Scanner'] = 'gallery/lib/scanner.php';
+OC::$CLASSPATH['OC_Gallery_Sharing'] = 'gallery/lib/sharing.php';
+OC::$CLASSPATH['OC_Gallery_Hooks_Handlers'] = 'gallery/lib/hooks_handlers.php';
+OC::$CLASSPATH['Pictures_Managers'] = 'gallery/lib/managers.php';
+OC::$CLASSPATH['Pictures_Tiles'] = 'gallery/lib/tiles.php';
+OC::$CLASSPATH['OC_Share_Backend_Photo'] = 'gallery/lib/share.php';
-$l = OC_L10N::get('gallery');
+// OCP\Share::registerBackend('photo', new OC_Share_Backend_Photo());
-OCP\App::register(array(
- 'order' => 20,
- 'id' => 'gallery',
- 'name' => 'Pictures'));
+$l = OC_L10N::get('gallery');
OCP\App::addNavigationEntry( array(
'id' => 'gallery_index',
@@ -45,7 +43,7 @@ OCP\App::addNavigationEntry( array(
class OC_GallerySearchProvider extends OC_Search_Provider{
function search($query){
- $stmt = OCP\DB::prepare('SELECT * FROM `*PREFIX*gallery_albums` WHERE `uid_owner` = ? AND `album_name` LIKE ?');
+ $stmt = OCP\DB::prepare('SELECT * FROM *PREFIX*gallery_albums WHERE uid_owner = ? AND album_name LIKE ?');
$result = $stmt->execute(array(OCP\USER::getUser(),'%'.$query.'%'));
$results=array();
while($row=$result->fetchRow()){
@@ -57,4 +55,4 @@ class OC_GallerySearchProvider extends OC_Search_Provider{
//OC_Search::registerProvider('OC_GallerySearchProvider');
-require_once('apps/gallery/lib/hooks_handlers.php');
+require_once('gallery/lib/hooks_handlers.php');
diff --git a/apps/gallery/appinfo/update.php b/apps/gallery/appinfo/update.php
index c112bb3f890..c1d22127428 100644
--- a/apps/gallery/appinfo/update.php
+++ b/apps/gallery/appinfo/update.php
@@ -2,10 +2,10 @@
$currentVersion=OC_Appconfig::getValue('gallery', 'installed_version');
if (version_compare($currentVersion, '0.5.0', '<')) {
- $stmt = OCP\DB::prepare('DROP TABLE IF EXISTS `*PREFIX*gallery_photos`');
+ $stmt = OCP\DB::prepare('DROP TABLE IF EXISTS *PREFIX*gallery_photos');
$stmt->execute();
- $stmt = OCP\DB::prepare('DROP TABLE IF EXISTS `*PREFIX*gallery_albums`');
+ $stmt = OCP\DB::prepare('DROP TABLE IF EXISTS *PREFIX*gallery_albums');
$stmt->execute();
- \OC_DB::createDbFromStructure(OC::$APPSROOT.'/apps/'.$appid.'/appinfo/database.xml');
+ \OC_DB::createDbFromStructure(OC_App::getAppPath($appid).'/appinfo/database.xml');
}
diff --git a/apps/gallery/appinfo/version b/apps/gallery/appinfo/version
index 8f0916f768f..4b9fcbec101 100644
--- a/apps/gallery/appinfo/version
+++ b/apps/gallery/appinfo/version
@@ -1 +1 @@
-0.5.0
+0.5.1
diff --git a/apps/gallery/css/sharing.css b/apps/gallery/css/sharing.css
index d061fc3e6c1..4712369cc84 100644
--- a/apps/gallery/css/sharing.css
+++ b/apps/gallery/css/sharing.css
@@ -5,4 +5,4 @@ div.gallery_box:hover { color: black; }
div.gallery_box h1 {font-size: 17px; font-weight: normal;}
div#breadcrumb { border: 0; width: 70%; margin: 0 auto; padding: 25px 0; font-family: Verdana; text-align: center;}
span.breadcrumbelement { margin: 10px; margin-right: 0; cursor: pointer;}
-span.inside { background-image: url('%appswebroot%/apps/gallery/img/breadcrumb.png'); padding-left: 20px; background-position: left; background-repeat: no-repeat;}
+span.inside { background-image: url('%appswebroot%/gallery/img/breadcrumb.png'); padding-left: 20px; background-position: left; background-repeat: no-repeat;}
diff --git a/apps/gallery/css/styles.css b/apps/gallery/css/styles.css
index 98d36515493..63f645662dd 100644
--- a/apps/gallery/css/styles.css
+++ b/apps/gallery/css/styles.css
@@ -1,6 +1,14 @@
#gallerycontent { margin-top: 2.8em; overflow: visible; }
-#g-settings {position: absolute; left 13.5em; top: 0;}
+#g-settings {position: absolute; left: 13.5em; top: 0;}
div#controls input[type=button] { -webkit-transition: opacity 0.5s ease-in-out; -moz-transition: opacity 0.5s ease-in-out; -o-transition: opacity 0.5s ease-in-out; opacity: 1; position:absolute; right:13.5em; top:0em; }
input[type=button]:disabled { opacity: 0.5 }
.ui-dialog tr {background-color: #eee;}
.ui-dialog input {width: 90%;}
+
+div.gallery_div {position:relative; display: inline-block; height: 150px; width: 150px; margin: 5px;}
+div.miniature_border {position:absolute; height: 150px; -moz-transition-duration: 0.2s; -o-transition-duration:0.2s; -webkit-transition-duration: .2s; background-position: 50%;}
+div.line {display:inline-block; border: 0; width: auto; height: 160px}
+div.gallery_div img{position:absolute; top: 1; left: 0; -moz-transition-duration: 0.3s; -o-transition-duration:0.3s; -webkit-transition-duration: 0.3s; height:150px; width: auto;}
+div.gallery_div img.shrinker {width:80px !important;}
+div.title { opacity: 0; text-align: center; vertical-align: middle; font-family: Arial; font-size: 12px; border: 0; position: absolute; text-overflow: ellipsis; bottom: 20px; right:-5px; height:auto; padding: 5px; width: 140px; background-color: black; color: white; -webkit-transition: opacity 0.5s; z-index:1000; border-radius: 7px}
+div.visible { opacity: 0.8;}
diff --git a/apps/gallery/css/supersized.css b/apps/gallery/css/supersized.css
new file mode 100644
index 00000000000..57ee7e23a50
--- /dev/null
+++ b/apps/gallery/css/supersized.css
@@ -0,0 +1,25 @@
+/*
+
+ Supersized - Fullscreen Slideshow jQuery Plugin
+ Version : 3.2.7
+ Site : www.buildinternet.com/project/supersized
+
+ Author : Sam Dunn
+ Company : One Mighty Roar (www.onemightyroar.com)
+ License : MIT License / GPL License
+
+*/
+#supersized-holder #supersized-loader { display:none; position:absolute; top:50%; left:50%; z-index:0; width:60px; height:60px; margin:-30px 0 0 -30px; text-indent:-999em; background:url('%appswebroot%/gallery/img/supersized/progress.gif') no-repeat center center;}
+
+#supersized-holder #supersized { visibility:hidden; display:block; position:fixed; left:0; top:0; overflow:hidden; z-index:200; height:100%; width:100%; }
+#supersized-holder #supersized img { width:auto; height:auto; position:relative; display:none; outline:none; border:none; }
+#supersized-holder #supersized.speed img { -ms-interpolation-mode:nearest-neighbor; image-rendering: -moz-crisp-edges; } /*Speed*/
+#supersized-holder #supersized.quality img { -ms-interpolation-mode:bicubic; image-rendering: optimizeQuality; } /*Quality*/
+
+#supersized-holder #supersized li { display:block; list-style:none; z-index:150; position:fixed; overflow:hidden; top:0; left:0; width:100%; height:100%; background:#111; }
+#supersized-holder #supersized a { width:100%; height:100%; display:block; }
+#supersized-holder #supersized li.prevslide { z-index:160; }
+#supersized-holder #supersized li.activeslide { z-index:170; }
+#supersized-holder #supersized li.image-loading { background:#111 url('%appswebroot%/gallery/img/supersized/progress.gif') no-repeat center center; width:100%; height:100%; }
+#supersized-holder #supersized li.image-loading img{ visibility:hidden; }
+#supersized-holder #supersized li.prevslide img, #supersized-holder #supersized li.activeslide img{ display:inline; }
diff --git a/apps/gallery/css/supersized.shutter.css b/apps/gallery/css/supersized.shutter.css
new file mode 100644
index 00000000000..428c254c3b2
--- /dev/null
+++ b/apps/gallery/css/supersized.shutter.css
@@ -0,0 +1,74 @@
+/*
+
+ Supersized - Fullscreen Slideshow jQuery Plugin
+ Version : 3.2.7
+ Site : www.buildinternet.com/project/supersized
+
+ Theme : Shutter 1.2
+ Author : Sam Dunn
+ Company : One Mighty Roar (www.onemightyroar.com)
+ License : MIT License / GPL License
+
+*/
+
+/* Controls Bar
+----------------------------*/
+#slideshow-content #slideshow-controls-wrapper { margin:0 auto; height:42px; width:100%; bottom:0px; left:0; z-index:204; background:url('%appswebroot%/gallery/img/supersized/nav-bg.png') repeat-x; position:fixed; }
+#slideshow-content #slideshow-controls { overflow:hidden; height:100%; position:relative; text-align:left; z-index:205; }
+#slideshow-content #slidecounter { float:left; color:#999; font:14px "Helvetica Neue", Helvetica, Arial, sans-serif; text-shadow:#000 0 -1px 0; margin:0px 10px 0 15px; line-height:42px; }
+#slideshow-content #slidecaption { overflow:hidden; float:left; color:#FFF; font:400 14px "Helvetica Neue", Helvetica, Arial, sans-serif; text-shadow:#000 1px 1px 2px; margin:0 20px 0 0; line-height:42px; }
+
+/*#navigation { float:right; margin:0px 20px 0 0; }*/
+#slideshow-content #play-button{ float:left; margin-top:1px;border-right:1px solid #333; background:url('%appswebroot%/gallery/img/supersized/bg-hover.png') repeat-x 0 44px; }
+#slideshow-content #play-button:hover{ background-position:0 1px; cursor:pointer; }
+
+#slideshow-content #prevslide, #nextslide{ position:fixed; height:43px; width:43px; top:50%; margin-top:-21px; opacity:0.6; z-index:204; }
+#slideshow-content #prevslide{ left:10px; background:url('%appswebroot%/gallery/img/supersized/back.png'); }
+#slideshow-content #nextslide{ right:10px; background:url('%appswebroot%/gallery/img/supersized/forward.png'); }
+#slideshow-content #prevslide:active, #nextslide:active{ margin-top:-19px; }
+#slideshow-content #prevslide:hover, #nextslide:hover{ cursor:pointer; }
+
+#slideshow-content ul#slide-list{ padding:15px 0; float:left; position:absolute; left:50%; }
+#slideshow-content ul#slide-list li{ list-style:none; width:12px; height:12px; float:left; margin:0 5px 0 0; }
+#slideshow-content ul#slide-list li.current-slide a, ul#slide-list li.current-slide a:hover{ background-position:0 0px; }
+#slideshow-content ul#slide-list li a{ display:block; width:12px; height:12px; background:url('%appswebroot%/gallery/img/supersized/nav-dot.png') no-repeat 0 -24px; }
+#slideshow-content ul#slide-list li a:hover{ background-position:0 -12px; cursor:pointer; }
+
+#slideshow-content #tray-button{ float:right; margin-top:1px; border-left:1px solid #333; background:url('%appswebroot%/gallery/img/supersized/bg-hover.png') repeat-x 0 44px; }
+#slideshow-content #tray-button:hover{ background-position:0 1px; cursor:pointer; }
+
+
+/* Progress Bar
+----------------------------*/
+#slideshow-content #progress-back{ z-index:205; position:fixed; bottom:42px; left:0; height:8px; width:100%; background:url('%appswebroot%/gallery/img/supersized/progress-back.png') repeat-x; }
+#slideshow-content #progress-bar{ position:relative; height:8px; width:100%; background:url('%appswebroot%/gallery/img/supersized/progress-bar.png') repeat-x; }
+
+
+/* Thumbnail Navigation
+----------------------------*/
+#slideshow-content #nextthumb, #slideshow-content #prevthumb { z-index:202; display:none; position:fixed; bottom:61px; height:75px; width:100px; overflow:hidden; background:#ddd; border:1px solid #fff; -webkit-box-shadow:0 0 5px #000; }
+#slideshow-content #nextthumb { right:12px; }
+#slideshow-content #prevthumb { left:12px; }
+#slideshow-content #nextthumb img, #slideshow-content #prevthumb img { width:150px; height:auto; }
+#slideshow-content #nextthumb:active, #slideshow-content #prevthumb:active { bottom:59px; }
+#slideshow-content #nextthumb:hover, #slideshow-content #prevthumb:hover { cursor:pointer; }
+
+
+/* Thumbnail Tray
+----------------------------*/
+#slideshow-content #thumb-tray{ position:fixed; z-index:203; bottom:0; left:0; background:url('%appswebroot%/gallery/img/supersized/bg-black.png'); height:150px; width:100%; overflow:hidden; text-align:center; -moz-box-shadow: 0px 0px 4px #000; -webkit-box-shadow: 0px 0px 4px #000; box-shadow: 0px 0px 4px #000; }
+
+#slideshow-content #thumb-back, #slideshow-content #thumb-forward{ position:absolute; z-index:5; bottom:42px; height:108px; width:40px; }
+#slideshow-content #thumb-back{ left:0; background: url('%appswebroot%/gallery/img/supersized/thumb-back.png') no-repeat center center;}
+#slideshow-content #thumb-forward{ right:0; background:url('%appswebroot%/gallery/img/supersized/thumb-forward.png') no-repeat center center;}
+#slideshow-content #thumb-back:hover, #slideshow-content #thumb-forward:hover{ cursor:pointer; background-color:rgba(256,256,256, 0.1); }
+#slideshow-content #thumb-back:hover{ border-right:1px solid rgba(256,256,256, 0.2); }
+#slideshow-content #thumb-forward:hover{ border-left:1px solid rgba(256,256,256, 0.2); }
+
+
+#slideshow-content ul#thumb-list{ display:inline-block; list-style:none; position:relative; left:0px; padding:0 0px; }
+#slideshow-content ul#thumb-list li{ background:#111; list-style:none; display:inline; width:150px; height:108px; overflow:hidden; float:left; margin:0; }
+#slideshow-content ul#thumb-list li img { width:200px; height:auto; opacity:0.5; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; filter:alpha(opacity=60); -webkit-transition: all 100ms ease-in-out; -moz-transition: all 100ms ease-in-out; -o-transition: all 100ms ease-in-out; -ms-transition: all 100ms ease-in-out; transition: all 100ms ease-in-out; }
+#slideshow-content ul#thumb-list li.current-thumb img, #slideshow-content ul#thumb-list li:hover img{ opacity:1; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); }
+#slideshow-content ul#thumb-list li:hover{ cursor:pointer; }
+
diff --git a/apps/gallery/img/breadcrumb.png b/apps/gallery/img/breadcrumb.png
index a252a751554..adbef1e576d 100644
--- a/apps/gallery/img/breadcrumb.png
+++ b/apps/gallery/img/breadcrumb.png
Binary files differ
diff --git a/apps/gallery/img/delete.png b/apps/gallery/img/delete.png
index bc0c782882d..fa8e18183ed 100644
--- a/apps/gallery/img/delete.png
+++ b/apps/gallery/img/delete.png
Binary files differ
diff --git a/apps/gallery/img/rename.png b/apps/gallery/img/rename.png
index 9993a092df1..3af6840071b 100644
--- a/apps/gallery/img/rename.png
+++ b/apps/gallery/img/rename.png
Binary files differ
diff --git a/apps/gallery/img/share.png b/apps/gallery/img/share.png
index 62c4627f317..099e4d6ab35 100644
--- a/apps/gallery/img/share.png
+++ b/apps/gallery/img/share.png
Binary files differ
diff --git a/apps/gallery/img/supersized/back.png b/apps/gallery/img/supersized/back.png
new file mode 100644
index 00000000000..f0e809ece09
--- /dev/null
+++ b/apps/gallery/img/supersized/back.png
Binary files differ
diff --git a/apps/gallery/img/supersized/bg-black.png b/apps/gallery/img/supersized/bg-black.png
new file mode 100644
index 00000000000..e7ce54412b8
--- /dev/null
+++ b/apps/gallery/img/supersized/bg-black.png
Binary files differ
diff --git a/apps/gallery/img/supersized/bg-hover.png b/apps/gallery/img/supersized/bg-hover.png
new file mode 100644
index 00000000000..1ca2022e106
--- /dev/null
+++ b/apps/gallery/img/supersized/bg-hover.png
Binary files differ
diff --git a/apps/gallery/img/supersized/button-tray-down.png b/apps/gallery/img/supersized/button-tray-down.png
new file mode 100644
index 00000000000..15645ae34ef
--- /dev/null
+++ b/apps/gallery/img/supersized/button-tray-down.png
Binary files differ
diff --git a/apps/gallery/img/supersized/button-tray-up.png b/apps/gallery/img/supersized/button-tray-up.png
new file mode 100644
index 00000000000..0ee91d25ba0
--- /dev/null
+++ b/apps/gallery/img/supersized/button-tray-up.png
Binary files differ
diff --git a/apps/gallery/img/supersized/forward.png b/apps/gallery/img/supersized/forward.png
new file mode 100644
index 00000000000..a6408f75118
--- /dev/null
+++ b/apps/gallery/img/supersized/forward.png
Binary files differ
diff --git a/apps/gallery/img/supersized/nav-bg.png b/apps/gallery/img/supersized/nav-bg.png
new file mode 100644
index 00000000000..c1a9fc170f4
--- /dev/null
+++ b/apps/gallery/img/supersized/nav-bg.png
Binary files differ
diff --git a/apps/gallery/img/supersized/nav-dot.png b/apps/gallery/img/supersized/nav-dot.png
new file mode 100644
index 00000000000..4319ed04213
--- /dev/null
+++ b/apps/gallery/img/supersized/nav-dot.png
Binary files differ
diff --git a/apps/gallery/img/supersized/pause.png b/apps/gallery/img/supersized/pause.png
new file mode 100644
index 00000000000..1e81d1856b6
--- /dev/null
+++ b/apps/gallery/img/supersized/pause.png
Binary files differ
diff --git a/apps/gallery/img/supersized/play.png b/apps/gallery/img/supersized/play.png
new file mode 100644
index 00000000000..df94a034986
--- /dev/null
+++ b/apps/gallery/img/supersized/play.png
Binary files differ
diff --git a/apps/gallery/img/supersized/progress-back.png b/apps/gallery/img/supersized/progress-back.png
new file mode 100644
index 00000000000..95992f1410c
--- /dev/null
+++ b/apps/gallery/img/supersized/progress-back.png
Binary files differ
diff --git a/apps/gallery/img/supersized/progress-bar.png b/apps/gallery/img/supersized/progress-bar.png
new file mode 100644
index 00000000000..9758d178831
--- /dev/null
+++ b/apps/gallery/img/supersized/progress-bar.png
Binary files differ
diff --git a/apps/gallery/img/supersized/progress.gif b/apps/gallery/img/supersized/progress.gif
new file mode 100644
index 00000000000..f3e45e0569c
--- /dev/null
+++ b/apps/gallery/img/supersized/progress.gif
Binary files differ
diff --git a/apps/gallery/img/supersized/supersized-logo.png b/apps/gallery/img/supersized/supersized-logo.png
new file mode 100644
index 00000000000..cc106293292
--- /dev/null
+++ b/apps/gallery/img/supersized/supersized-logo.png
Binary files differ
diff --git a/apps/gallery/img/supersized/thumb-back.png b/apps/gallery/img/supersized/thumb-back.png
new file mode 100644
index 00000000000..b86a9110ee4
--- /dev/null
+++ b/apps/gallery/img/supersized/thumb-back.png
Binary files differ
diff --git a/apps/gallery/img/supersized/thumb-forward.png b/apps/gallery/img/supersized/thumb-forward.png
new file mode 100644
index 00000000000..bff5ec1108a
--- /dev/null
+++ b/apps/gallery/img/supersized/thumb-forward.png
Binary files differ
diff --git a/apps/gallery/index.php b/apps/gallery/index.php
index b87d99bb6cc..ce79f8f8782 100644
--- a/apps/gallery/index.php
+++ b/apps/gallery/index.php
@@ -30,7 +30,76 @@ OCP\App::setActiveNavigationEntry( 'gallery_index' );
OCP\Util::addStyle('files', 'files');
OCP\Util::addStyle('gallery', 'styles');
OCP\Util::addScript('gallery', 'pictures');
+OCP\Util::addStyle( 'gallery', 'supersized' );
+OCP\Util::addStyle( 'gallery', 'supersized.shutter' );
+OCP\Util::addScript('gallery', 'slideshow');
+OCP\Util::addScript('gallery', 'jquery.easing.min');
+OCP\Util::addScript('gallery', 'supersized.3.2.7.min');
+OCP\Util::addScript('gallery', 'supersized.shutter.min');
+
+include 'gallery/lib/tiles.php';
+
+$root = !empty($_GET['root']) ? $_GET['root'] : '/';
+$images = \OC_FileCache::searchByMime('image', null, '/'.\OCP\USER::getUser().'/files'.$root);
+sort($images);
+
+$tl = new \OC\Pictures\TilesLine();
+$ts = new \OC\Pictures\TileStack(array(), '');
+$previous_element = @$images[0];
+
+$root_images = array();
+$second_level_images = array();
+
+$fallback_images = array(); // if the folder only cotains subfolders with images -> these are taken for the stack preview
+
+for($i = 0; $i < count($images); $i++) {
+ $prev_dir_arr = explode('/', $previous_element);
+ $dir_arr = explode('/', $images[$i]);
+
+ if(count($dir_arr) == 1) { // getting the images in this directory
+ $root_images[] = $root.$images[$i];
+ } else {
+ if(strcmp($prev_dir_arr[0], $dir_arr[0]) != 0) { // if we entered a new directory
+ if(count($second_level_images) == 0) { // if we don't have images in this directory
+ if(count($fallback_images) != 0) { // but have fallback_images
+ $tl->addTile(new \OC\Pictures\TileStack($fallback_images, $prev_dir_arr[0]));
+ $fallback_images = array();
+ }
+ } else { // if we collected images for this directory
+ $tl->addTile(new \OC\Pictures\TileStack($second_level_images, $prev_dir_arr[0]));
+ $fallback_images = array();
+ $second_level_images = array();
+ }
+ }
+ if (count($dir_arr) == 2) { // These are the pics in our current subdir
+ $second_level_images[] = $root.$images[$i];
+ $fallback_images = array();
+ } else { // These are images from the deeper directories
+ if(count($second_level_images) == 0) {
+ $fallback_images[] = $root.$images[$i];
+ }
+ }
+ // have us a little something to compare against
+ $previous_element = $images[$i];
+ }
+}
+
+// if last element in the directory was a directory we don't want to miss it :)
+if(count($second_level_images)>0) {
+ $tl->addTile(new \OC\Pictures\TileStack($second_level_images, $prev_dir_arr[0]));
+}
+
+// if last element in the directory was a directory with no second_level_images we also don't want to miss it ...
+if(count($fallback_images)>0) {
+ $tl->addTile(new \OC\Pictures\TileStack($fallback_images, $prev_dir_arr[0]));
+}
+
+// and finally our images actually stored in the root folder
+for($i = 0; $i<count($root_images); $i++) {
+ $tl->addTile(new \OC\Pictures\TileSingle($root_images[$i]));
+}
$tmpl = new OCP\Template( 'gallery', 'index', 'user' );
+$tmpl->assign('root', $root, false);
+$tmpl->assign('tl', $tl, false);
$tmpl->printPage();
-?>
diff --git a/apps/gallery/js/albums.js b/apps/gallery/js/albums.js
index 413c71471a3..62d3f783ece 100644
--- a/apps/gallery/js/albums.js
+++ b/apps/gallery/js/albums.js
@@ -79,7 +79,7 @@ Albums={
});
element.append(local);
}
- var photoDisplayTemplate = '<div class="gallery_box"><div class="dummy"></div><div><a rel="images" href="'+OC.linkTo('files','download.php')+'?file=URLPATH"><img src="'+OC.filePath('gallery','ajax','thumbnail.php')+'?img=IMGPATH"></a></div></div>';
+ var photoDisplayTemplate = '<div class="gallery_box"><div class="dummy"></div><div><a rel="images" href="'+OC.linkTo('gallery/ajax','viewImage.php')+'?img=URLPATH"><img src="'+OC.filePath('gallery','ajax','thumbnail.php')+'?img=IMGPATH"></a></div></div>';
for (var i in Albums.photos) {
element.append(photoDisplayTemplate.replace("IMGPATH", escape(Albums.photos[i])).replace("URLPATH", escape(Albums.photos[i])));
}
diff --git a/apps/gallery/js/jquery.easing.min.js b/apps/gallery/js/jquery.easing.min.js
new file mode 100644
index 00000000000..bbf8410391a
--- /dev/null
+++ b/apps/gallery/js/jquery.easing.min.js
@@ -0,0 +1,71 @@
+/*
+ * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
+ *
+ * Uses the built in easing capabilities added In jQuery 1.1
+ * to offer multiple easing options
+ *
+ * TERMS OF USE - jQuery Easing
+ *
+ * Open source under the BSD License.
+ *
+ * Copyright å© 2008 George McGinley Smith
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * Neither the name of the author nor the names of contributors may be used to endorse
+ * or promote products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+*/
+
+jQuery.easing.jswing=jQuery.easing.swing;jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(e,f,a,h,g){return jQuery.easing[jQuery.easing.def](e,f,a,h,g)},easeInQuad:function(e,f,a,h,g){return h*(f/=g)*f+a},easeOutQuad:function(e,f,a,h,g){return -h*(f/=g)*(f-2)+a},easeInOutQuad:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f+a}return -h/2*((--f)*(f-2)-1)+a},easeInCubic:function(e,f,a,h,g){return h*(f/=g)*f*f+a},easeOutCubic:function(e,f,a,h,g){return h*((f=f/g-1)*f*f+1)+a},easeInOutCubic:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f+a}return h/2*((f-=2)*f*f+2)+a},easeInQuart:function(e,f,a,h,g){return h*(f/=g)*f*f*f+a},easeOutQuart:function(e,f,a,h,g){return -h*((f=f/g-1)*f*f*f-1)+a},easeInOutQuart:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f+a}return -h/2*((f-=2)*f*f*f-2)+a},easeInQuint:function(e,f,a,h,g){return h*(f/=g)*f*f*f*f+a},easeOutQuint:function(e,f,a,h,g){return h*((f=f/g-1)*f*f*f*f+1)+a},easeInOutQuint:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f*f+a}return h/2*((f-=2)*f*f*f*f+2)+a},easeInSine:function(e,f,a,h,g){return -h*Math.cos(f/g*(Math.PI/2))+h+a},easeOutSine:function(e,f,a,h,g){return h*Math.sin(f/g*(Math.PI/2))+a},easeInOutSine:function(e,f,a,h,g){return -h/2*(Math.cos(Math.PI*f/g)-1)+a},easeInExpo:function(e,f,a,h,g){return(f==0)?a:h*Math.pow(2,10*(f/g-1))+a},easeOutExpo:function(e,f,a,h,g){return(f==g)?a+h:h*(-Math.pow(2,-10*f/g)+1)+a},easeInOutExpo:function(e,f,a,h,g){if(f==0){return a}if(f==g){return a+h}if((f/=g/2)<1){return h/2*Math.pow(2,10*(f-1))+a}return h/2*(-Math.pow(2,-10*--f)+2)+a},easeInCirc:function(e,f,a,h,g){return -h*(Math.sqrt(1-(f/=g)*f)-1)+a},easeOutCirc:function(e,f,a,h,g){return h*Math.sqrt(1-(f=f/g-1)*f)+a},easeInOutCirc:function(e,f,a,h,g){if((f/=g/2)<1){return -h/2*(Math.sqrt(1-f*f)-1)+a}return h/2*(Math.sqrt(1-(f-=2)*f)+1)+a},easeInElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return -(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e},easeOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return g*Math.pow(2,-10*h)*Math.sin((h*k-i)*(2*Math.PI)/j)+l+e},easeInOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k/2)==2){return e+l}if(!j){j=k*(0.3*1.5)}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}if(h<1){return -0.5*(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e}return g*Math.pow(2,-10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j)*0.5+l+e},easeInBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*(f/=h)*f*((g+1)*f-g)+a},easeOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*((f=f/h-1)*f*((g+1)*f+g)+1)+a},easeInOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}if((f/=h/2)<1){return i/2*(f*f*(((g*=(1.525))+1)*f-g))+a}return i/2*((f-=2)*f*(((g*=(1.525))+1)*f+g)+2)+a},easeInBounce:function(e,f,a,h,g){return h-jQuery.easing.easeOutBounce(e,g-f,0,h,g)+a},easeOutBounce:function(e,f,a,h,g){if((f/=g)<(1/2.75)){return h*(7.5625*f*f)+a}else{if(f<(2/2.75)){return h*(7.5625*(f-=(1.5/2.75))*f+0.75)+a}else{if(f<(2.5/2.75)){return h*(7.5625*(f-=(2.25/2.75))*f+0.9375)+a}else{return h*(7.5625*(f-=(2.625/2.75))*f+0.984375)+a}}}},easeInOutBounce:function(e,f,a,h,g){if(f<g/2){return jQuery.easing.easeInBounce(e,f*2,0,h,g)*0.5+a}return jQuery.easing.easeOutBounce(e,f*2-g,0,h,g)*0.5+h*0.5+a}});
+
+/*
+ *
+ * TERMS OF USE - EASING EQUATIONS
+ *
+ * Open source under the BSD License.
+ *
+ * Copyright å© 2001 Robert Penner
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * Neither the name of the author nor the names of contributors may be used to endorse
+ * or promote products derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */ \ No newline at end of file
diff --git a/apps/gallery/js/pictures.js b/apps/gallery/js/pictures.js
index 678c9bcbf55..47f727e0dee 100644
--- a/apps/gallery/js/pictures.js
+++ b/apps/gallery/js/pictures.js
@@ -1,4 +1,3 @@
-
function constructSharingPath() {
return document.location.protocol + '//' + document.location.host + OC.linkTo('', 'public.php') + '?service=gallery&token=' + Albums.token;
}
@@ -35,3 +34,35 @@ function shareGallery() {
});
});
}
+
+function explode(element) {
+ $('div', element).each(function(index, elem) {
+ if ($(elem).hasClass('title')) {
+ $(elem).addClass('visible');
+ } else {
+ $(elem).css('margin-top', Math.floor(30-(Math.random()*60)) + 'px')
+ .css('margin-left', Math.floor(30-(Math.random()*60))+ 'px')
+ .css('z-index', '999');
+ }
+ });
+}
+
+function deplode(element) {
+ $('div', element).each(function(index, elem) {
+ if ($(elem).hasClass('title')) {
+ $(elem).removeClass('visible');
+ } else {
+ $(elem).css('margin-top', Math.floor(5-(Math.random()*10)) + 'px')
+ .css('margin-left', Math.floor(5-(Math.random()*10))+ 'px')
+ .css('z-index', '3');
+ }
+ });
+}
+
+function openNewGal(album_name) {
+ root = root + decodeURIComponent(album_name) + "/";
+ var url = window.location.protocol+"//"+window.location.hostname+OC.linkTo('gallery', 'index.php');
+ url = url + "?root="+encodeURIComponent(root);
+
+ window.location = url;
+}
diff --git a/apps/gallery/js/slideshow.js b/apps/gallery/js/slideshow.js
new file mode 100644
index 00000000000..cc5dfc44a26
--- /dev/null
+++ b/apps/gallery/js/slideshow.js
@@ -0,0 +1,58 @@
+$(document).ready(function(){
+
+ $.endSlideshow = function () {
+ if($.supersized.vars.slideshow_interval){
+ clearInterval($.supersized.vars.slideshow_interval);
+ };
+
+ $('#supersized-holder').remove();
+ $('#slideshow-content').hide();
+ $('#thumb-list').remove();
+ }
+
+ // add slideshow in holder div
+ $('#slideshow input.start').click(function(){
+
+ var images=[];
+ $('#gallerycontent div a').each(function(i,a){
+ images.push({image : a.href, title : a.title.replace(/</, '&lt;').replace(/>/, '&gt;'), thumb : a.children[0].src, url : 'javascript:$.endSlideshow()'});
+ });
+
+ if (images.length <= 0) {
+ return;
+ }
+
+ $('body').append("<div id='supersized-holder'></div>");
+ $('#supersized-loader').remove();
+ $('#supersized').remove();
+ $('#supersized-holder').append("<div id='supersized-loader'></div><ul id='supersized'></ul>");
+ $('#supersized').show();
+ $('#slideshow-content').show();
+
+
+ jQuery(function($){
+
+ $.supersized({
+
+ // Functionality
+ slide_interval : 3000, // Length between transitions
+ transition : 1, // 0-None, 1-Fade, 2-Slide Top, 3-Slide Right, 4-Slide Bottom, 5-Slide Left, 6-Carousel Right, 7-Carousel Left
+ transition_speed : 700, // Speed of transition
+
+ // Components
+ slide_links : 'blank', // Individual links for each slide (Options: false, 'num', 'name', 'blank')
+ slides : images // Slideshow Images
+
+ });
+ });
+
+ });
+
+ //close slideshow on esc and remove holder
+ $(document).keyup(function(e) {
+ if (e.keyCode == 27) { // esc
+ $.endSlideshow();
+ }
+ });
+
+});
diff --git a/apps/gallery/js/supersized.3.2.7.js b/apps/gallery/js/supersized.3.2.7.js
new file mode 100644
index 00000000000..f5a1c0bbc2d
--- /dev/null
+++ b/apps/gallery/js/supersized.3.2.7.js
@@ -0,0 +1,930 @@
+/*
+
+ Supersized - Fullscreen Slideshow jQuery Plugin
+ Version : 3.2.7
+ Site : www.buildinternet.com/project/supersized
+
+ Author : Sam Dunn
+ Company : One Mighty Roar (www.onemightyroar.com)
+ License : MIT License / GPL License
+
+*/
+
+(function($){
+
+ /* Place Supersized Elements
+ ----------------------------*/
+ $(document).ready(function() {
+ $('body').append('<div id="supersized-loader"></div><ul id="supersized"></ul>');
+ });
+
+
+ $.supersized = function(options){
+
+ /* Variables
+ ----------------------------*/
+ var el = '#supersized',
+ base = this;
+ // Access to jQuery and DOM versions of element
+ base.$el = $(el);
+ base.el = el;
+ vars = $.supersized.vars;
+ // Add a reverse reference to the DOM object
+ base.$el.data("supersized", base);
+ api = base.$el.data('supersized');
+
+ base.init = function(){
+ // Combine options and vars
+ $.supersized.vars = $.extend($.supersized.vars, $.supersized.themeVars);
+ $.supersized.vars.options = $.extend({},$.supersized.defaultOptions, $.supersized.themeOptions, options);
+ base.options = $.supersized.vars.options;
+
+ base._build();
+ };
+
+
+ /* Build Elements
+ ----------------------------*/
+ base._build = function(){
+ // Add in slide markers
+ var thisSlide = 0,
+ slideSet = '',
+ markers = '',
+ markerContent,
+ thumbMarkers = '',
+ thumbImage;
+
+ while(thisSlide <= base.options.slides.length-1){
+ //Determine slide link content
+ switch(base.options.slide_links){
+ case 'num':
+ markerContent = thisSlide;
+ break;
+ case 'name':
+ markerContent = base.options.slides[thisSlide].title;
+ break;
+ case 'blank':
+ markerContent = '';
+ break;
+ }
+
+ slideSet = slideSet+'<li class="slide-'+thisSlide+'"></li>';
+
+ if(thisSlide == base.options.start_slide-1){
+ // Slide links
+ if (base.options.slide_links)markers = markers+'<li class="slide-link-'+thisSlide+' current-slide"><a>'+markerContent+'</a></li>';
+ // Slide Thumbnail Links
+ if (base.options.thumb_links){
+ base.options.slides[thisSlide].thumb ? thumbImage = base.options.slides[thisSlide].thumb : thumbImage = base.options.slides[thisSlide].image;
+ thumbMarkers = thumbMarkers+'<li class="thumb'+thisSlide+' current-thumb"><img src="'+thumbImage+'"/></li>';
+ };
+ }else{
+ // Slide links
+ if (base.options.slide_links) markers = markers+'<li class="slide-link-'+thisSlide+'" ><a>'+markerContent+'</a></li>';
+ // Slide Thumbnail Links
+ if (base.options.thumb_links){
+ base.options.slides[thisSlide].thumb ? thumbImage = base.options.slides[thisSlide].thumb : thumbImage = base.options.slides[thisSlide].image;
+ thumbMarkers = thumbMarkers+'<li class="thumb'+thisSlide+'"><img src="'+thumbImage+'"/></li>';
+ };
+ }
+ thisSlide++;
+ }
+
+ if (base.options.slide_links) $(vars.slide_list).html(markers);
+ if (base.options.thumb_links && vars.thumb_tray.length){
+ $(vars.thumb_tray).append('<ul id="'+vars.thumb_list.replace('#','')+'">'+thumbMarkers+'</ul>');
+ }
+
+ $(base.el).append(slideSet);
+
+ // Add in thumbnails
+ if (base.options.thumbnail_navigation){
+ // Load previous thumbnail
+ vars.current_slide - 1 < 0 ? prevThumb = base.options.slides.length - 1 : prevThumb = vars.current_slide - 1;
+ $(vars.prev_thumb).show().html($("<img/>").attr("src", base.options.slides[prevThumb].image));
+
+ // Load next thumbnail
+ vars.current_slide == base.options.slides.length - 1 ? nextThumb = 0 : nextThumb = vars.current_slide + 1;
+ $(vars.next_thumb).show().html($("<img/>").attr("src", base.options.slides[nextThumb].image));
+ }
+
+ base._start(); // Get things started
+ };
+
+
+ /* Initialize
+ ----------------------------*/
+ base._start = function(){
+
+ // Determine if starting slide random
+ if (base.options.start_slide){
+ vars.current_slide = base.options.start_slide - 1;
+ }else{
+ vars.current_slide = Math.floor(Math.random()*base.options.slides.length); // Generate random slide number
+ }
+
+ // If links should open in new window
+ var linkTarget = base.options.new_window ? ' target="_blank"' : '';
+
+ // Set slideshow quality (Supported only in FF and IE, no Webkit)
+ if (base.options.performance == 3){
+ base.$el.addClass('speed'); // Faster transitions
+ } else if ((base.options.performance == 1) || (base.options.performance == 2)){
+ base.$el.addClass('quality'); // Higher image quality
+ }
+
+ // Shuffle slide order if needed
+ if (base.options.random){
+ arr = base.options.slides;
+ for(var j, x, i = arr.length; i; j = parseInt(Math.random() * i), x = arr[--i], arr[i] = arr[j], arr[j] = x); // Fisher-Yates shuffle algorithm (jsfromhell.com/array/shuffle)
+ base.options.slides = arr;
+ }
+
+ /*-----Load initial set of images-----*/
+
+ if (base.options.slides.length > 1){
+ if(base.options.slides.length > 2){
+ // Set previous image
+ vars.current_slide - 1 < 0 ? loadPrev = base.options.slides.length - 1 : loadPrev = vars.current_slide - 1; // If slide is 1, load last slide as previous
+ var imageLink = (base.options.slides[loadPrev].url) ? "href='" + base.options.slides[loadPrev].url + "'" : "";
+
+ var imgPrev = $('<img src="'+base.options.slides[loadPrev].image+'"/>');
+ var slidePrev = base.el+' li:eq('+loadPrev+')';
+ imgPrev.appendTo(slidePrev).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading prevslide');
+
+ imgPrev.load(function(){
+ $(this).data('origWidth', $(this).width()).data('origHeight', $(this).height());
+ base.resizeNow(); // Resize background image
+ }); // End Load
+ }
+ } else {
+ // Slideshow turned off if there is only one slide
+ base.options.slideshow = 0;
+ }
+
+ // Set current image
+ imageLink = (api.getField('url')) ? "href='" + api.getField('url') + "'" : "";
+ var img = $('<img src="'+api.getField('image')+'"/>');
+
+ var slideCurrent= base.el+' li:eq('+vars.current_slide+')';
+ img.appendTo(slideCurrent).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading activeslide');
+
+ img.load(function(){
+ base._origDim($(this));
+ base.resizeNow(); // Resize background image
+ base.launch();
+ if( typeof theme != 'undefined' && typeof theme._init == "function" ) theme._init(); // Load Theme
+ });
+
+ if (base.options.slides.length > 1){
+ // Set next image
+ vars.current_slide == base.options.slides.length - 1 ? loadNext = 0 : loadNext = vars.current_slide + 1; // If slide is last, load first slide as next
+ imageLink = (base.options.slides[loadNext].url) ? "href='" + base.options.slides[loadNext].url + "'" : "";
+
+ var imgNext = $('<img src="'+base.options.slides[loadNext].image+'"/>');
+ var slideNext = base.el+' li:eq('+loadNext+')';
+ imgNext.appendTo(slideNext).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading');
+
+ imgNext.load(function(){
+ $(this).data('origWidth', $(this).width()).data('origHeight', $(this).height());
+ base.resizeNow(); // Resize background image
+ }); // End Load
+ }
+ /*-----End load initial images-----*/
+
+ // Hide elements to be faded in
+ base.$el.css('visibility','hidden');
+ $('.load-item').hide();
+
+ };
+
+
+ /* Launch Supersized
+ ----------------------------*/
+ base.launch = function(){
+
+ base.$el.css('visibility','visible');
+ $('#supersized-loader').remove(); //Hide loading animation
+
+ // Call theme function for before slide transition
+ if( typeof theme != 'undefined' && typeof theme.beforeAnimation == "function" ) theme.beforeAnimation('next');
+ $('.load-item').show();
+
+ // Keyboard Navigation
+ if (base.options.keyboard_nav){
+ $(document.documentElement).keyup(function (event) {
+
+ if(vars.in_animation) return false; // Abort if currently animating
+
+ // Left Arrow or Down Arrow
+ if ((event.keyCode == 37) || (event.keyCode == 40)) {
+ clearInterval(vars.slideshow_interval); // Stop slideshow, prevent buildup
+ base.prevSlide();
+
+ // Right Arrow or Up Arrow
+ } else if ((event.keyCode == 39) || (event.keyCode == 38)) {
+ clearInterval(vars.slideshow_interval); // Stop slideshow, prevent buildup
+ base.nextSlide();
+
+ // Spacebar
+ } else if (event.keyCode == 32 && !vars.hover_pause) {
+ clearInterval(vars.slideshow_interval); // Stop slideshow, prevent buildup
+ base.playToggle();
+ }
+
+ });
+ }
+
+ // Pause when hover on image
+ if (base.options.slideshow && base.options.pause_hover){
+ $(base.el).hover(function() {
+ if(vars.in_animation) return false; // Abort if currently animating
+ vars.hover_pause = true; // Mark slideshow paused from hover
+ if(!vars.is_paused){
+ vars.hover_pause = 'resume'; // It needs to resume afterwards
+ base.playToggle();
+ }
+ }, function() {
+ if(vars.hover_pause == 'resume'){
+ base.playToggle();
+ vars.hover_pause = false;
+ }
+ });
+ }
+
+ if (base.options.slide_links){
+ // Slide marker clicked
+ $(vars.slide_list+'> li').click(function(){
+
+ index = $(vars.slide_list+'> li').index(this);
+ targetSlide = index + 1;
+
+ base.goTo(targetSlide);
+ return false;
+
+ });
+ }
+
+ // Thumb marker clicked
+ if (base.options.thumb_links){
+ $(vars.thumb_list+'> li').click(function(){
+
+ index = $(vars.thumb_list+'> li').index(this);
+ targetSlide = index + 1;
+
+ api.goTo(targetSlide);
+ return false;
+
+ });
+ }
+
+ // Start slideshow if enabled
+ if (base.options.slideshow && base.options.slides.length > 1){
+
+ // Start slideshow if autoplay enabled
+ if (base.options.autoplay && base.options.slides.length > 1){
+ vars.slideshow_interval = setInterval(base.nextSlide, base.options.slide_interval); // Initiate slide interval
+ }else{
+ vars.is_paused = true; // Mark as paused
+ }
+
+ //Prevent navigation items from being dragged
+ $('.load-item img').bind("contextmenu mousedown",function(){
+ return false;
+ });
+
+ }
+
+ // Adjust image when browser is resized
+ $(window).resize(function(){
+ base.resizeNow();
+ });
+
+ };
+
+
+ /* Resize Images
+ ----------------------------*/
+ base.resizeNow = function(){
+
+ return base.$el.each(function() {
+ // Resize each image seperately
+ $('img', base.el).each(function(){
+
+ thisSlide = $(this);
+ var ratio = (thisSlide.data('origHeight')/thisSlide.data('origWidth')).toFixed(2); // Define image ratio
+
+ // Gather browser size
+ var browserwidth = base.$el.width(),
+ browserheight = base.$el.height(),
+ offset;
+
+ /*-----Resize Image-----*/
+ if (base.options.fit_always){ // Fit always is enabled
+ if ((browserheight/browserwidth) > ratio){
+ resizeWidth();
+ } else {
+ resizeHeight();
+ }
+ }else{ // Normal Resize
+ if ((browserheight <= base.options.min_height) && (browserwidth <= base.options.min_width)){ // If window smaller than minimum width and height
+
+ if ((browserheight/browserwidth) > ratio){
+ base.options.fit_landscape && ratio < 1 ? resizeWidth(true) : resizeHeight(true); // If landscapes are set to fit
+ } else {
+ base.options.fit_portrait && ratio >= 1 ? resizeHeight(true) : resizeWidth(true); // If portraits are set to fit
+ }
+
+ } else if (browserwidth <= base.options.min_width){ // If window only smaller than minimum width
+
+ if ((browserheight/browserwidth) > ratio){
+ base.options.fit_landscape && ratio < 1 ? resizeWidth(true) : resizeHeight(); // If landscapes are set to fit
+ } else {
+ base.options.fit_portrait && ratio >= 1 ? resizeHeight() : resizeWidth(true); // If portraits are set to fit
+ }
+
+ } else if (browserheight <= base.options.min_height){ // If window only smaller than minimum height
+
+ if ((browserheight/browserwidth) > ratio){
+ base.options.fit_landscape && ratio < 1 ? resizeWidth() : resizeHeight(true); // If landscapes are set to fit
+ } else {
+ base.options.fit_portrait && ratio >= 1 ? resizeHeight(true) : resizeWidth(); // If portraits are set to fit
+ }
+
+ } else { // If larger than minimums
+
+ if ((browserheight/browserwidth) > ratio){
+ base.options.fit_landscape && ratio < 1 ? resizeWidth() : resizeHeight(); // If landscapes are set to fit
+ } else {
+ base.options.fit_portrait && ratio >= 1 ? resizeHeight() : resizeWidth(); // If portraits are set to fit
+ }
+
+ }
+ }
+ /*-----End Image Resize-----*/
+
+
+ /*-----Resize Functions-----*/
+
+ function resizeWidth(minimum){
+ if (minimum){ // If minimum height needs to be considered
+ if(thisSlide.width() < browserwidth || thisSlide.width() < base.options.min_width ){
+ if (thisSlide.width() * ratio >= base.options.min_height){
+ thisSlide.width(base.options.min_width);
+ thisSlide.height(thisSlide.width() * ratio);
+ }else{
+ resizeHeight();
+ }
+ }
+ }else{
+ if (base.options.min_height >= browserheight && !base.options.fit_landscape){ // If minimum height needs to be considered
+ if (browserwidth * ratio >= base.options.min_height || (browserwidth * ratio >= base.options.min_height && ratio <= 1)){ // If resizing would push below minimum height or image is a landscape
+ thisSlide.width(browserwidth);
+ thisSlide.height(browserwidth * ratio);
+ } else if (ratio > 1){ // Else the image is portrait
+ thisSlide.height(base.options.min_height);
+ thisSlide.width(thisSlide.height() / ratio);
+ } else if (thisSlide.width() < browserwidth) {
+ thisSlide.width(browserwidth);
+ thisSlide.height(thisSlide.width() * ratio);
+ }
+ }else{ // Otherwise, resize as normal
+ thisSlide.width(browserwidth);
+ thisSlide.height(browserwidth * ratio);
+ }
+ }
+ };
+
+ function resizeHeight(minimum){
+ if (minimum){ // If minimum height needs to be considered
+ if(thisSlide.height() < browserheight){
+ if (thisSlide.height() / ratio >= base.options.min_width){
+ thisSlide.height(base.options.min_height);
+ thisSlide.width(thisSlide.height() / ratio);
+ }else{
+ resizeWidth(true);
+ }
+ }
+ }else{ // Otherwise, resized as normal
+ if (base.options.min_width >= browserwidth){ // If minimum width needs to be considered
+ if (browserheight / ratio >= base.options.min_width || ratio > 1){ // If resizing would push below minimum width or image is a portrait
+ thisSlide.height(browserheight);
+ thisSlide.width(browserheight / ratio);
+ } else if (ratio <= 1){ // Else the image is landscape
+ thisSlide.width(base.options.min_width);
+ thisSlide.height(thisSlide.width() * ratio);
+ }
+ }else{ // Otherwise, resize as normal
+ thisSlide.height(browserheight);
+ thisSlide.width(browserheight / ratio);
+ }
+ }
+ };
+
+ /*-----End Resize Functions-----*/
+
+ if (thisSlide.parents('li').hasClass('image-loading')){
+ $('.image-loading').removeClass('image-loading');
+ }
+
+ // Horizontally Center
+ if (base.options.horizontal_center){
+ $(this).css('left', (browserwidth - $(this).width())/2);
+ }
+
+ // Vertically Center
+ if (base.options.vertical_center){
+ $(this).css('top', (browserheight - $(this).height())/2);
+ }
+
+ });
+
+ // Basic image drag and right click protection
+ if (base.options.image_protect){
+
+ $('img', base.el).bind("contextmenu mousedown",function(){
+ return false;
+ });
+
+ }
+
+ return false;
+
+ });
+
+ };
+
+
+ /* Next Slide
+ ----------------------------*/
+ base.nextSlide = function(){
+
+ if(vars.in_animation || !api.options.slideshow) return false; // Abort if currently animating
+ else vars.in_animation = true; // Otherwise set animation marker
+
+ clearInterval(vars.slideshow_interval); // Stop slideshow
+
+ var slides = base.options.slides, // Pull in slides array
+ liveslide = base.$el.find('.activeslide'); // Find active slide
+ $('.prevslide').removeClass('prevslide');
+ liveslide.removeClass('activeslide').addClass('prevslide'); // Remove active class & update previous slide
+
+ // Get the slide number of new slide
+ vars.current_slide + 1 == base.options.slides.length ? vars.current_slide = 0 : vars.current_slide++;
+
+ var nextslide = $(base.el+' li:eq('+vars.current_slide+')'),
+ prevslide = base.$el.find('.prevslide');
+
+ // If hybrid mode is on drop quality for transition
+ if (base.options.performance == 1) base.$el.removeClass('quality').addClass('speed');
+
+
+ /*-----Load Image-----*/
+
+ loadSlide = false;
+
+ vars.current_slide == base.options.slides.length - 1 ? loadSlide = 0 : loadSlide = vars.current_slide + 1; // Determine next slide
+
+ var targetList = base.el+' li:eq('+loadSlide+')';
+ if (!$(targetList).html()){
+
+ // If links should open in new window
+ var linkTarget = base.options.new_window ? ' target="_blank"' : '';
+
+ imageLink = (base.options.slides[loadSlide].url) ? "href='" + base.options.slides[loadSlide].url + "'" : ""; // If link exists, build it
+ var img = $('<img src="'+base.options.slides[loadSlide].image+'"/>');
+
+ img.appendTo(targetList).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading').css('visibility','hidden');
+
+ img.load(function(){
+ base._origDim($(this));
+ base.resizeNow();
+ }); // End Load
+ };
+
+ // Update thumbnails (if enabled)
+ if (base.options.thumbnail_navigation == 1){
+
+ // Load previous thumbnail
+ vars.current_slide - 1 < 0 ? prevThumb = base.options.slides.length - 1 : prevThumb = vars.current_slide - 1;
+ $(vars.prev_thumb).html($("<img/>").attr("src", base.options.slides[prevThumb].image));
+
+ // Load next thumbnail
+ nextThumb = loadSlide;
+ $(vars.next_thumb).html($("<img/>").attr("src", base.options.slides[nextThumb].image));
+
+ }
+
+
+
+ /*-----End Load Image-----*/
+
+
+ // Call theme function for before slide transition
+ if( typeof theme != 'undefined' && typeof theme.beforeAnimation == "function" ) theme.beforeAnimation('next');
+
+ //Update slide markers
+ if (base.options.slide_links){
+ $('.current-slide').removeClass('current-slide');
+ $(vars.slide_list +'> li' ).eq(vars.current_slide).addClass('current-slide');
+ }
+
+ nextslide.css('visibility','hidden').addClass('activeslide'); // Update active slide
+
+ switch(base.options.transition){
+ case 0: case 'none': // No transition
+ nextslide.css('visibility','visible'); vars.in_animation = false; base.afterAnimation();
+ break;
+ case 1: case 'fade': // Fade
+ nextslide.animate({opacity : 0},0).css('visibility','visible').animate({opacity : 1, avoidTransforms : false}, base.options.transition_speed, function(){ base.afterAnimation(); });
+ break;
+ case 2: case 'slideTop': // Slide Top
+ nextslide.animate({top : -base.$el.height()}, 0 ).css('visibility','visible').animate({ top:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ break;
+ case 3: case 'slideRight': // Slide Right
+ nextslide.animate({left : base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ break;
+ case 4: case 'slideBottom': // Slide Bottom
+ nextslide.animate({top : base.$el.height()}, 0 ).css('visibility','visible').animate({ top:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ break;
+ case 5: case 'slideLeft': // Slide Left
+ nextslide.animate({left : -base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ break;
+ case 6: case 'carouselRight': // Carousel Right
+ nextslide.animate({left : base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ liveslide.animate({ left: -base.$el.width(), avoidTransforms : false }, base.options.transition_speed );
+ break;
+ case 7: case 'carouselLeft': // Carousel Left
+ nextslide.animate({left : -base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ liveslide.animate({ left: base.$el.width(), avoidTransforms : false }, base.options.transition_speed );
+ break;
+ }
+ return false;
+ };
+
+
+ /* Previous Slide
+ ----------------------------*/
+ base.prevSlide = function(){
+
+ if(vars.in_animation || !api.options.slideshow) return false; // Abort if currently animating
+ else vars.in_animation = true; // Otherwise set animation marker
+
+ clearInterval(vars.slideshow_interval); // Stop slideshow
+
+ var slides = base.options.slides, // Pull in slides array
+ liveslide = base.$el.find('.activeslide'); // Find active slide
+ $('.prevslide').removeClass('prevslide');
+ liveslide.removeClass('activeslide').addClass('prevslide'); // Remove active class & update previous slide
+
+ // Get current slide number
+ vars.current_slide == 0 ? vars.current_slide = base.options.slides.length - 1 : vars.current_slide-- ;
+
+ var nextslide = $(base.el+' li:eq('+vars.current_slide+')'),
+ prevslide = base.$el.find('.prevslide');
+
+ // If hybrid mode is on drop quality for transition
+ if (base.options.performance == 1) base.$el.removeClass('quality').addClass('speed');
+
+
+ /*-----Load Image-----*/
+
+ loadSlide = vars.current_slide;
+
+ var targetList = base.el+' li:eq('+loadSlide+')';
+ if (!$(targetList).html()){
+ // If links should open in new window
+ var linkTarget = base.options.new_window ? ' target="_blank"' : '';
+ imageLink = (base.options.slides[loadSlide].url) ? "href='" + base.options.slides[loadSlide].url + "'" : ""; // If link exists, build it
+ var img = $('<img src="'+base.options.slides[loadSlide].image+'"/>');
+
+ img.appendTo(targetList).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading').css('visibility','hidden');
+
+ img.load(function(){
+ base._origDim($(this));
+ base.resizeNow();
+ }); // End Load
+ };
+
+ // Update thumbnails (if enabled)
+ if (base.options.thumbnail_navigation == 1){
+
+ // Load previous thumbnail
+ //prevThumb = loadSlide;
+ loadSlide == 0 ? prevThumb = base.options.slides.length - 1 : prevThumb = loadSlide - 1;
+ $(vars.prev_thumb).html($("<img/>").attr("src", base.options.slides[prevThumb].image));
+
+ // Load next thumbnail
+ vars.current_slide == base.options.slides.length - 1 ? nextThumb = 0 : nextThumb = vars.current_slide + 1;
+ $(vars.next_thumb).html($("<img/>").attr("src", base.options.slides[nextThumb].image));
+ }
+
+ /*-----End Load Image-----*/
+
+
+ // Call theme function for before slide transition
+ if( typeof theme != 'undefined' && typeof theme.beforeAnimation == "function" ) theme.beforeAnimation('prev');
+
+ //Update slide markers
+ if (base.options.slide_links){
+ $('.current-slide').removeClass('current-slide');
+ $(vars.slide_list +'> li' ).eq(vars.current_slide).addClass('current-slide');
+ }
+
+ nextslide.css('visibility','hidden').addClass('activeslide'); // Update active slide
+
+ switch(base.options.transition){
+ case 0: case 'none': // No transition
+ nextslide.css('visibility','visible'); vars.in_animation = false; base.afterAnimation();
+ break;
+ case 1: case 'fade': // Fade
+ nextslide.animate({opacity : 0},0).css('visibility','visible').animate({opacity : 1, avoidTransforms : false}, base.options.transition_speed, function(){ base.afterAnimation(); });
+ break;
+ case 2: case 'slideTop': // Slide Top (reverse)
+ nextslide.animate({top : base.$el.height()}, 0 ).css('visibility','visible').animate({ top:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ break;
+ case 3: case 'slideRight': // Slide Right (reverse)
+ nextslide.animate({left : -base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ break;
+ case 4: case 'slideBottom': // Slide Bottom (reverse)
+ nextslide.animate({top : -base.$el.height()}, 0 ).css('visibility','visible').animate({ top:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ break;
+ case 5: case 'slideLeft': // Slide Left (reverse)
+ nextslide.animate({left : base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ break;
+ case 6: case 'carouselRight': // Carousel Right (reverse)
+ nextslide.animate({left : -base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ liveslide.animate({left : 0}, 0 ).animate({ left: base.$el.width(), avoidTransforms : false}, base.options.transition_speed );
+ break;
+ case 7: case 'carouselLeft': // Carousel Left (reverse)
+ nextslide.animate({left : base.$el.width()}, 0 ).css('visibility','visible').animate({ left:0, avoidTransforms : false }, base.options.transition_speed, function(){ base.afterAnimation(); });
+ liveslide.animate({left : 0}, 0 ).animate({ left: -base.$el.width(), avoidTransforms : false }, base.options.transition_speed );
+ break;
+ }
+ return false;
+ };
+
+
+ /* Play/Pause Toggle
+ ----------------------------*/
+ base.playToggle = function(){
+
+ if (vars.in_animation || !api.options.slideshow) return false; // Abort if currently animating
+
+ if (vars.is_paused){
+
+ vars.is_paused = false;
+
+ // Call theme function for play
+ if( typeof theme != 'undefined' && typeof theme.playToggle == "function" ) theme.playToggle('play');
+
+ // Resume slideshow
+ vars.slideshow_interval = setInterval(base.nextSlide, base.options.slide_interval);
+
+ }else{
+
+ vars.is_paused = true;
+
+ // Call theme function for pause
+ if( typeof theme != 'undefined' && typeof theme.playToggle == "function" ) theme.playToggle('pause');
+
+ // Stop slideshow
+ clearInterval(vars.slideshow_interval);
+
+ }
+
+ return false;
+
+ };
+
+
+ /* Go to specific slide
+ ----------------------------*/
+ base.goTo = function(targetSlide){
+ if (vars.in_animation || !api.options.slideshow) return false; // Abort if currently animating
+
+ var totalSlides = base.options.slides.length;
+
+ // If target outside range
+ if(targetSlide < 0){
+ targetSlide = totalSlides;
+ }else if(targetSlide > totalSlides){
+ targetSlide = 1;
+ }
+ targetSlide = totalSlides - targetSlide + 1;
+
+ clearInterval(vars.slideshow_interval); // Stop slideshow, prevent buildup
+
+ // Call theme function for goTo trigger
+ if (typeof theme != 'undefined' && typeof theme.goTo == "function" ) theme.goTo();
+
+ if (vars.current_slide == totalSlides - targetSlide){
+ if(!(vars.is_paused)){
+ vars.slideshow_interval = setInterval(base.nextSlide, base.options.slide_interval);
+ }
+ return false;
+ }
+
+ // If ahead of current position
+ if(totalSlides - targetSlide > vars.current_slide ){
+
+ // Adjust for new next slide
+ vars.current_slide = totalSlides-targetSlide-1;
+ vars.update_images = 'next';
+ base._placeSlide(vars.update_images);
+
+ //Otherwise it's before current position
+ }else if(totalSlides - targetSlide < vars.current_slide){
+
+ // Adjust for new prev slide
+ vars.current_slide = totalSlides-targetSlide+1;
+ vars.update_images = 'prev';
+ base._placeSlide(vars.update_images);
+
+ }
+
+ // set active markers
+ if (base.options.slide_links){
+ $(vars.slide_list +'> .current-slide').removeClass('current-slide');
+ $(vars.slide_list +'> li').eq((totalSlides-targetSlide)).addClass('current-slide');
+ }
+
+ if (base.options.thumb_links){
+ $(vars.thumb_list +'> .current-thumb').removeClass('current-thumb');
+ $(vars.thumb_list +'> li').eq((totalSlides-targetSlide)).addClass('current-thumb');
+ }
+
+ };
+
+
+ /* Place Slide
+ ----------------------------*/
+ base._placeSlide = function(place){
+
+ // If links should open in new window
+ var linkTarget = base.options.new_window ? ' target="_blank"' : '';
+
+ loadSlide = false;
+
+ if (place == 'next'){
+
+ vars.current_slide == base.options.slides.length - 1 ? loadSlide = 0 : loadSlide = vars.current_slide + 1; // Determine next slide
+
+ var targetList = base.el+' li:eq('+loadSlide+')';
+
+ if (!$(targetList).html()){
+ // If links should open in new window
+ var linkTarget = base.options.new_window ? ' target="_blank"' : '';
+
+ imageLink = (base.options.slides[loadSlide].url) ? "href='" + base.options.slides[loadSlide].url + "'" : ""; // If link exists, build it
+ var img = $('<img src="'+base.options.slides[loadSlide].image+'"/>');
+
+ img.appendTo(targetList).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading').css('visibility','hidden');
+
+ img.load(function(){
+ base._origDim($(this));
+ base.resizeNow();
+ }); // End Load
+ };
+
+ base.nextSlide();
+
+ }else if (place == 'prev'){
+
+ vars.current_slide - 1 < 0 ? loadSlide = base.options.slides.length - 1 : loadSlide = vars.current_slide - 1; // Determine next slide
+
+ var targetList = base.el+' li:eq('+loadSlide+')';
+
+ if (!$(targetList).html()){
+ // If links should open in new window
+ var linkTarget = base.options.new_window ? ' target="_blank"' : '';
+
+ imageLink = (base.options.slides[loadSlide].url) ? "href='" + base.options.slides[loadSlide].url + "'" : ""; // If link exists, build it
+ var img = $('<img src="'+base.options.slides[loadSlide].image+'"/>');
+
+ img.appendTo(targetList).wrap('<a ' + imageLink + linkTarget + '></a>').parent().parent().addClass('image-loading').css('visibility','hidden');
+
+ img.load(function(){
+ base._origDim($(this));
+ base.resizeNow();
+ }); // End Load
+ };
+ base.prevSlide();
+ }
+
+ };
+
+
+ /* Get Original Dimensions
+ ----------------------------*/
+ base._origDim = function(targetSlide){
+ targetSlide.data('origWidth', targetSlide.width()).data('origHeight', targetSlide.height());
+ };
+
+
+ /* After Slide Animation
+ ----------------------------*/
+ base.afterAnimation = function(){
+
+ // If hybrid mode is on swap back to higher image quality
+ if (base.options.performance == 1){
+ base.$el.removeClass('speed').addClass('quality');
+ }
+
+ // Update previous slide
+ if (vars.update_images){
+ vars.current_slide - 1 < 0 ? setPrev = base.options.slides.length - 1 : setPrev = vars.current_slide-1;
+ vars.update_images = false;
+ $('.prevslide').removeClass('prevslide');
+ $(base.el+' li:eq('+setPrev+')').addClass('prevslide');
+ }
+
+ vars.in_animation = false;
+
+ // Resume slideshow
+ if (!vars.is_paused && base.options.slideshow){
+ vars.slideshow_interval = setInterval(base.nextSlide, base.options.slide_interval);
+ if (base.options.stop_loop && vars.current_slide == base.options.slides.length - 1 ) base.playToggle();
+ }
+
+ // Call theme function for after slide transition
+ if (typeof theme != 'undefined' && typeof theme.afterAnimation == "function" ) theme.afterAnimation();
+
+ return false;
+
+ };
+
+ base.getField = function(field){
+ return base.options.slides[vars.current_slide][field];
+ };
+
+ // Make it go!
+ base.init();
+ };
+
+
+ /* Global Variables
+ ----------------------------*/
+ $.supersized.vars = {
+
+ // Elements
+ thumb_tray : '#thumb-tray', // Thumbnail tray
+ thumb_list : '#thumb-list', // Thumbnail list
+ slide_list : '#slide-list', // Slide link list
+
+ // Internal variables
+ current_slide : 0, // Current slide number
+ in_animation : false, // Prevents animations from stacking
+ is_paused : false, // Tracks paused on/off
+ hover_pause : false, // If slideshow is paused from hover
+ slideshow_interval : false, // Stores slideshow timer
+ update_images : false, // Trigger to update images after slide jump
+ options : {} // Stores assembled options list
+
+ };
+
+
+ /* Default Options
+ ----------------------------*/
+ $.supersized.defaultOptions = {
+
+ // Functionality
+ slideshow : 1, // Slideshow on/off
+ autoplay : 1, // Slideshow starts playing automatically
+ start_slide : 1, // Start slide (0 is random)
+ stop_loop : 0, // Stops slideshow on last slide
+ random : 0, // Randomize slide order (Ignores start slide)
+ slide_interval : 5000, // Length between transitions
+ transition : 1, // 0-None, 1-Fade, 2-Slide Top, 3-Slide Right, 4-Slide Bottom, 5-Slide Left, 6-Carousel Right, 7-Carousel Left
+ transition_speed : 750, // Speed of transition
+ new_window : 1, // Image links open in new window/tab
+ pause_hover : 0, // Pause slideshow on hover
+ keyboard_nav : 1, // Keyboard navigation on/off
+ performance : 1, // 0-Normal, 1-Hybrid speed/quality, 2-Optimizes image quality, 3-Optimizes transition speed // (Only works for Firefox/IE, not Webkit)
+ image_protect : 1, // Disables image dragging and right click with Javascript
+
+ // Size & Position
+ fit_always : 0, // Image will never exceed browser width or height (Ignores min. dimensions)
+ fit_landscape : 0, // Landscape images will not exceed browser width
+ fit_portrait : 1, // Portrait images will not exceed browser height
+ min_width : 0, // Min width allowed (in pixels)
+ min_height : 0, // Min height allowed (in pixels)
+ horizontal_center : 1, // Horizontally center background
+ vertical_center : 1, // Vertically center background
+
+
+ // Components
+ slide_links : 1, // Individual links for each slide (Options: false, 'num', 'name', 'blank')
+ thumb_links : 1, // Individual thumb links for each slide
+ thumbnail_navigation : 0 // Thumbnail navigation
+
+ };
+
+ $.fn.supersized = function(options){
+ return this.each(function(){
+ (new $.supersized(options));
+ });
+ };
+
+})(jQuery);
+
diff --git a/apps/gallery/js/supersized.3.2.7.min.js b/apps/gallery/js/supersized.3.2.7.min.js
new file mode 100644
index 00000000000..b9cea9cee1c
--- /dev/null
+++ b/apps/gallery/js/supersized.3.2.7.min.js
@@ -0,0 +1,13 @@
+/*
+
+ Supersized - Fullscreen Slideshow jQuery Plugin
+ Version : 3.2.7
+ Site : www.buildinternet.com/project/supersized
+
+ Author : Sam Dunn
+ Company : One Mighty Roar (www.onemightyroar.com)
+ License : MIT License / GPL License
+
+*/
+
+(function(a){a(document).ready(function(){a("body").append('<div id="supersized-loader"></div><ul id="supersized"></ul>')});a.supersized=function(b){var c="#supersized",d=this;d.$el=a(c);d.el=c;vars=a.supersized.vars;d.$el.data("supersized",d);api=d.$el.data("supersized");d.init=function(){a.supersized.vars=a.extend(a.supersized.vars,a.supersized.themeVars);a.supersized.vars.options=a.extend({},a.supersized.defaultOptions,a.supersized.themeOptions,b);d.options=a.supersized.vars.options;d._build()};d._build=function(){var g=0,e="",j="",h,f="",i;while(g<=d.options.slides.length-1){switch(d.options.slide_links){case"num":h=g;break;case"name":h=d.options.slides[g].title;break;case"blank":h="";break}e=e+'<li class="slide-'+g+'"></li>';if(g==d.options.start_slide-1){if(d.options.slide_links){j=j+'<li class="slide-link-'+g+' current-slide"><a>'+h+"</a></li>"}if(d.options.thumb_links){d.options.slides[g].thumb?i=d.options.slides[g].thumb:i=d.options.slides[g].image;f=f+'<li class="thumb'+g+' current-thumb"><img src="'+i+'"/></li>'}}else{if(d.options.slide_links){j=j+'<li class="slide-link-'+g+'" ><a>'+h+"</a></li>"}if(d.options.thumb_links){d.options.slides[g].thumb?i=d.options.slides[g].thumb:i=d.options.slides[g].image;f=f+'<li class="thumb'+g+'"><img src="'+i+'"/></li>'}}g++}if(d.options.slide_links){a(vars.slide_list).html(j)}if(d.options.thumb_links&&vars.thumb_tray.length){a(vars.thumb_tray).append('<ul id="'+vars.thumb_list.replace("#","")+'">'+f+"</ul>")}a(d.el).append(e);if(d.options.thumbnail_navigation){vars.current_slide-1<0?prevThumb=d.options.slides.length-1:prevThumb=vars.current_slide-1;a(vars.prev_thumb).show().html(a("<img/>").attr("src",d.options.slides[prevThumb].image));vars.current_slide==d.options.slides.length-1?nextThumb=0:nextThumb=vars.current_slide+1;a(vars.next_thumb).show().html(a("<img/>").attr("src",d.options.slides[nextThumb].image))}d._start()};d._start=function(){if(d.options.start_slide){vars.current_slide=d.options.start_slide-1}else{vars.current_slide=Math.floor(Math.random()*d.options.slides.length)}var o=d.options.new_window?' target="_blank"':"";if(d.options.performance==3){d.$el.addClass("speed")}else{if((d.options.performance==1)||(d.options.performance==2)){d.$el.addClass("quality")}}if(d.options.random){arr=d.options.slides;for(var h,m,k=arr.length;k;h=parseInt(Math.random()*k),m=arr[--k],arr[k]=arr[h],arr[h]=m){}d.options.slides=arr}if(d.options.slides.length>1){if(d.options.slides.length>2){vars.current_slide-1<0?loadPrev=d.options.slides.length-1:loadPrev=vars.current_slide-1;var g=(d.options.slides[loadPrev].url)?"href='"+d.options.slides[loadPrev].url+"'":"";var q=a('<img src="'+d.options.slides[loadPrev].image+'"/>');var n=d.el+" li:eq("+loadPrev+")";q.appendTo(n).wrap("<a "+g+o+"></a>").parent().parent().addClass("image-loading prevslide");q.load(function(){a(this).data("origWidth",a(this).width()).data("origHeight",a(this).height());d.resizeNow()})}}else{d.options.slideshow=0}g=(api.getField("url"))?"href='"+api.getField("url")+"'":"";var l=a('<img src="'+api.getField("image")+'"/>');var f=d.el+" li:eq("+vars.current_slide+")";l.appendTo(f).wrap("<a "+g+o+"></a>").parent().parent().addClass("image-loading activeslide");l.load(function(){d._origDim(a(this));d.resizeNow();d.launch();if(typeof theme!="undefined"&&typeof theme._init=="function"){theme._init()}});if(d.options.slides.length>1){vars.current_slide==d.options.slides.length-1?loadNext=0:loadNext=vars.current_slide+1;g=(d.options.slides[loadNext].url)?"href='"+d.options.slides[loadNext].url+"'":"";var e=a('<img src="'+d.options.slides[loadNext].image+'"/>');var p=d.el+" li:eq("+loadNext+")";e.appendTo(p).wrap("<a "+g+o+"></a>").parent().parent().addClass("image-loading");e.load(function(){a(this).data("origWidth",a(this).width()).data("origHeight",a(this).height());d.resizeNow()})}d.$el.css("visibility","hidden");a(".load-item").hide()};d.launch=function(){d.$el.css("visibility","visible");a("#supersized-loader").remove();if(typeof theme!="undefined"&&typeof theme.beforeAnimation=="function"){theme.beforeAnimation("next")}a(".load-item").show();if(d.options.keyboard_nav){a(document.documentElement).keyup(function(e){if(vars.in_animation){return false}if((e.keyCode==37)||(e.keyCode==40)){clearInterval(vars.slideshow_interval);d.prevSlide()}else{if((e.keyCode==39)||(e.keyCode==38)){clearInterval(vars.slideshow_interval);d.nextSlide()}else{if(e.keyCode==32&&!vars.hover_pause){clearInterval(vars.slideshow_interval);d.playToggle()}}}})}if(d.options.slideshow&&d.options.pause_hover){a(d.el).hover(function(){if(vars.in_animation){return false}vars.hover_pause=true;if(!vars.is_paused){vars.hover_pause="resume";d.playToggle()}},function(){if(vars.hover_pause=="resume"){d.playToggle();vars.hover_pause=false}})}if(d.options.slide_links){a(vars.slide_list+"> li").click(function(){index=a(vars.slide_list+"> li").index(this);targetSlide=index+1;d.goTo(targetSlide);return false})}if(d.options.thumb_links){a(vars.thumb_list+"> li").click(function(){index=a(vars.thumb_list+"> li").index(this);targetSlide=index+1;api.goTo(targetSlide);return false})}if(d.options.slideshow&&d.options.slides.length>1){if(d.options.autoplay&&d.options.slides.length>1){vars.slideshow_interval=setInterval(d.nextSlide,d.options.slide_interval)}else{vars.is_paused=true}a(".load-item img").bind("contextmenu mousedown",function(){return false})}a(window).resize(function(){d.resizeNow()})};d.resizeNow=function(){return d.$el.each(function(){a("img",d.el).each(function(){thisSlide=a(this);var f=(thisSlide.data("origHeight")/thisSlide.data("origWidth")).toFixed(2);var e=d.$el.width(),h=d.$el.height(),i;if(d.options.fit_always){if((h/e)>f){g()}else{j()}}else{if((h<=d.options.min_height)&&(e<=d.options.min_width)){if((h/e)>f){d.options.fit_landscape&&f<1?g(true):j(true)}else{d.options.fit_portrait&&f>=1?j(true):g(true)}}else{if(e<=d.options.min_width){if((h/e)>f){d.options.fit_landscape&&f<1?g(true):j()}else{d.options.fit_portrait&&f>=1?j():g(true)}}else{if(h<=d.options.min_height){if((h/e)>f){d.options.fit_landscape&&f<1?g():j(true)}else{d.options.fit_portrait&&f>=1?j(true):g()}}else{if((h/e)>f){d.options.fit_landscape&&f<1?g():j()}else{d.options.fit_portrait&&f>=1?j():g()}}}}}function g(k){if(k){if(thisSlide.width()<e||thisSlide.width()<d.options.min_width){if(thisSlide.width()*f>=d.options.min_height){thisSlide.width(d.options.min_width);thisSlide.height(thisSlide.width()*f)}else{j()}}}else{if(d.options.min_height>=h&&!d.options.fit_landscape){if(e*f>=d.options.min_height||(e*f>=d.options.min_height&&f<=1)){thisSlide.width(e);thisSlide.height(e*f)}else{if(f>1){thisSlide.height(d.options.min_height);thisSlide.width(thisSlide.height()/f)}else{if(thisSlide.width()<e){thisSlide.width(e);thisSlide.height(thisSlide.width()*f)}}}}else{thisSlide.width(e);thisSlide.height(e*f)}}}function j(k){if(k){if(thisSlide.height()<h){if(thisSlide.height()/f>=d.options.min_width){thisSlide.height(d.options.min_height);thisSlide.width(thisSlide.height()/f)}else{g(true)}}}else{if(d.options.min_width>=e){if(h/f>=d.options.min_width||f>1){thisSlide.height(h);thisSlide.width(h/f)}else{if(f<=1){thisSlide.width(d.options.min_width);thisSlide.height(thisSlide.width()*f)}}}else{thisSlide.height(h);thisSlide.width(h/f)}}}if(thisSlide.parents("li").hasClass("image-loading")){a(".image-loading").removeClass("image-loading")}if(d.options.horizontal_center){a(this).css("left",(e-a(this).width())/2)}if(d.options.vertical_center){a(this).css("top",(h-a(this).height())/2)}});if(d.options.image_protect){a("img",d.el).bind("contextmenu mousedown",function(){return false})}return false})};d.nextSlide=function(){if(vars.in_animation||!api.options.slideshow){return false}else{vars.in_animation=true}clearInterval(vars.slideshow_interval);var h=d.options.slides,e=d.$el.find(".activeslide");a(".prevslide").removeClass("prevslide");e.removeClass("activeslide").addClass("prevslide");vars.current_slide+1==d.options.slides.length?vars.current_slide=0:vars.current_slide++;var g=a(d.el+" li:eq("+vars.current_slide+")"),i=d.$el.find(".prevslide");if(d.options.performance==1){d.$el.removeClass("quality").addClass("speed")}loadSlide=false;vars.current_slide==d.options.slides.length-1?loadSlide=0:loadSlide=vars.current_slide+1;var k=d.el+" li:eq("+loadSlide+")";if(!a(k).html()){var j=d.options.new_window?' target="_blank"':"";imageLink=(d.options.slides[loadSlide].url)?"href='"+d.options.slides[loadSlide].url+"'":"";var f=a('<img src="'+d.options.slides[loadSlide].image+'"/>');f.appendTo(k).wrap("<a "+imageLink+j+"></a>").parent().parent().addClass("image-loading").css("visibility","hidden");f.load(function(){d._origDim(a(this));d.resizeNow()})}if(d.options.thumbnail_navigation==1){vars.current_slide-1<0?prevThumb=d.options.slides.length-1:prevThumb=vars.current_slide-1;a(vars.prev_thumb).html(a("<img/>").attr("src",d.options.slides[prevThumb].image));nextThumb=loadSlide;a(vars.next_thumb).html(a("<img/>").attr("src",d.options.slides[nextThumb].image))}if(typeof theme!="undefined"&&typeof theme.beforeAnimation=="function"){theme.beforeAnimation("next")}if(d.options.slide_links){a(".current-slide").removeClass("current-slide");a(vars.slide_list+"> li").eq(vars.current_slide).addClass("current-slide")}g.css("visibility","hidden").addClass("activeslide");switch(d.options.transition){case 0:case"none":g.css("visibility","visible");vars.in_animation=false;d.afterAnimation();break;case 1:case"fade":g.animate({opacity:0},0).css("visibility","visible").animate({opacity:1,avoidTransforms:false},d.options.transition_speed,function(){d.afterAnimation()});break;case 2:case"slideTop":g.animate({top:-d.$el.height()},0).css("visibility","visible").animate({top:0,avoidTransforms:false},d.options.transition_speed,function(){d.afterAnimation()});break;case 3:case"slideRight":g.animate({left:d.$el.width()},0).css("visibility","visible").animate({left:0,avoidTransforms:false},d.options.transition_speed,function(){d.afterAnimation()});break;case 4:case"slideBottom":g.animate({top:d.$el.height()},0).css("visibility","visible").animate({top:0,avoidTransforms:false},d.options.transition_speed,function(){d.afterAnimation()});break;case 5:case"slideLeft":g.animate({left:-d.$el.width()},0).css("visibility","visible").animate({left:0,avoidTransforms:false},d.options.transition_speed,function(){d.afterAnimation()});break;case 6:case"carouselRight":g.animate({left:d.$el.width()},0).css("visibility","visible").animate({left:0,avoidTransforms:false},d.options.transition_speed,function(){d.afterAnimation()});e.animate({left:-d.$el.width(),avoidTransforms:false},d.options.transition_speed);break;case 7:case"carouselLeft":g.animate({left:-d.$el.width()},0).css("visibility","visible").animate({left:0,avoidTransforms:false},d.options.transition_speed,function(){d.afterAnimation()});e.animate({left:d.$el.width(),avoidTransforms:false},d.options.transition_speed);break}return false};d.prevSlide=function(){if(vars.in_animation||!api.options.slideshow){return false}else{vars.in_animation=true}clearInterval(vars.slideshow_interval);var h=d.options.slides,e=d.$el.find(".activeslide");a(".prevslide").removeClass("prevslide");e.removeClass("activeslide").addClass("prevslide");vars.current_slide==0?vars.current_slide=d.options.slides.length-1:vars.current_slide--;var g=a(d.el+" li:eq("+vars.current_slide+")"),i=d.$el.find(".prevslide");if(d.options.performance==1){d.$el.removeClass("quality").addClass("speed")}loadSlide=vars.current_slide;var k=d.el+" li:eq("+loadSlide+")";if(!a(k).html()){var j=d.options.new_window?' target="_blank"':"";imageLink=(d.options.slides[loadSlide].url)?"href='"+d.options.slides[loadSlide].url+"'":"";var f=a('<img src="'+d.options.slides[loadSlide].image+'"/>');f.appendTo(k).wrap("<a "+imageLink+j+"></a>").parent().parent().addClass("image-loading").css("visibility","hidden");f.load(function(){d._origDim(a(this));d.resizeNow()})}if(d.options.thumbnail_navigation==1){loadSlide==0?prevThumb=d.options.slides.length-1:prevThumb=loadSlide-1;a(vars.prev_thumb).html(a("<img/>").attr("src",d.options.slides[prevThumb].image));vars.current_slide==d.options.slides.length-1?nextThumb=0:nextThumb=vars.current_slide+1;a(vars.next_thumb).html(a("<img/>").attr("src",d.options.slides[nextThumb].image))}if(typeof theme!="undefined"&&typeof theme.beforeAnimation=="function"){theme.beforeAnimation("prev")}if(d.options.slide_links){a(".current-slide").removeClass("current-slide");a(vars.slide_list+"> li").eq(vars.current_slide).addClass("current-slide")}g.css("visibility","hidden").addClass("activeslide");switch(d.options.transition){case 0:case"none":g.css("visibility","visible");vars.in_animation=false;d.afterAnimation();break;case 1:case"fade":g.animate({opacity:0},0).css("visibility","visible").animate({opacity:1,avoidTransforms:false},d.options.transition_speed,function(){d.afterAnimation()});break;case 2:case"slideTop":g.animate({top:d.$el.height()},0).css("visibility","visible").animate({top:0,avoidTransforms:false},d.options.transition_speed,function(){d.afterAnimation()});break;case 3:case"slideRight":g.animate({left:-d.$el.width()},0).css("visibility","visible").animate({left:0,avoidTransforms:false},d.options.transition_speed,function(){d.afterAnimation()});break;case 4:case"slideBottom":g.animate({top:-d.$el.height()},0).css("visibility","visible").animate({top:0,avoidTransforms:false},d.options.transition_speed,function(){d.afterAnimation()});break;case 5:case"slideLeft":g.animate({left:d.$el.width()},0).css("visibility","visible").animate({left:0,avoidTransforms:false},d.options.transition_speed,function(){d.afterAnimation()});break;case 6:case"carouselRight":g.animate({left:-d.$el.width()},0).css("visibility","visible").animate({left:0,avoidTransforms:false},d.options.transition_speed,function(){d.afterAnimation()});e.animate({left:0},0).animate({left:d.$el.width(),avoidTransforms:false},d.options.transition_speed);break;case 7:case"carouselLeft":g.animate({left:d.$el.width()},0).css("visibility","visible").animate({left:0,avoidTransforms:false},d.options.transition_speed,function(){d.afterAnimation()});e.animate({left:0},0).animate({left:-d.$el.width(),avoidTransforms:false},d.options.transition_speed);break}return false};d.playToggle=function(){if(vars.in_animation||!api.options.slideshow){return false}if(vars.is_paused){vars.is_paused=false;if(typeof theme!="undefined"&&typeof theme.playToggle=="function"){theme.playToggle("play")}vars.slideshow_interval=setInterval(d.nextSlide,d.options.slide_interval)}else{vars.is_paused=true;if(typeof theme!="undefined"&&typeof theme.playToggle=="function"){theme.playToggle("pause")}clearInterval(vars.slideshow_interval)}return false};d.goTo=function(f){if(vars.in_animation||!api.options.slideshow){return false}var e=d.options.slides.length;if(f<0){f=e}else{if(f>e){f=1}}f=e-f+1;clearInterval(vars.slideshow_interval);if(typeof theme!="undefined"&&typeof theme.goTo=="function"){theme.goTo()}if(vars.current_slide==e-f){if(!(vars.is_paused)){vars.slideshow_interval=setInterval(d.nextSlide,d.options.slide_interval)}return false}if(e-f>vars.current_slide){vars.current_slide=e-f-1;vars.update_images="next";d._placeSlide(vars.update_images)}else{if(e-f<vars.current_slide){vars.current_slide=e-f+1;vars.update_images="prev";d._placeSlide(vars.update_images)}}if(d.options.slide_links){a(vars.slide_list+"> .current-slide").removeClass("current-slide");a(vars.slide_list+"> li").eq((e-f)).addClass("current-slide")}if(d.options.thumb_links){a(vars.thumb_list+"> .current-thumb").removeClass("current-thumb");a(vars.thumb_list+"> li").eq((e-f)).addClass("current-thumb")}};d._placeSlide=function(e){var h=d.options.new_window?' target="_blank"':"";loadSlide=false;if(e=="next"){vars.current_slide==d.options.slides.length-1?loadSlide=0:loadSlide=vars.current_slide+1;var g=d.el+" li:eq("+loadSlide+")";if(!a(g).html()){var h=d.options.new_window?' target="_blank"':"";imageLink=(d.options.slides[loadSlide].url)?"href='"+d.options.slides[loadSlide].url+"'":"";var f=a('<img src="'+d.options.slides[loadSlide].image+'"/>');f.appendTo(g).wrap("<a "+imageLink+h+"></a>").parent().parent().addClass("image-loading").css("visibility","hidden");f.load(function(){d._origDim(a(this));d.resizeNow()})}d.nextSlide()}else{if(e=="prev"){vars.current_slide-1<0?loadSlide=d.options.slides.length-1:loadSlide=vars.current_slide-1;var g=d.el+" li:eq("+loadSlide+")";if(!a(g).html()){var h=d.options.new_window?' target="_blank"':"";imageLink=(d.options.slides[loadSlide].url)?"href='"+d.options.slides[loadSlide].url+"'":"";var f=a('<img src="'+d.options.slides[loadSlide].image+'"/>');f.appendTo(g).wrap("<a "+imageLink+h+"></a>").parent().parent().addClass("image-loading").css("visibility","hidden");f.load(function(){d._origDim(a(this));d.resizeNow()})}d.prevSlide()}}};d._origDim=function(e){e.data("origWidth",e.width()).data("origHeight",e.height())};d.afterAnimation=function(){if(d.options.performance==1){d.$el.removeClass("speed").addClass("quality")}if(vars.update_images){vars.current_slide-1<0?setPrev=d.options.slides.length-1:setPrev=vars.current_slide-1;vars.update_images=false;a(".prevslide").removeClass("prevslide");a(d.el+" li:eq("+setPrev+")").addClass("prevslide")}vars.in_animation=false;if(!vars.is_paused&&d.options.slideshow){vars.slideshow_interval=setInterval(d.nextSlide,d.options.slide_interval);if(d.options.stop_loop&&vars.current_slide==d.options.slides.length-1){d.playToggle()}}if(typeof theme!="undefined"&&typeof theme.afterAnimation=="function"){theme.afterAnimation()}return false};d.getField=function(e){return d.options.slides[vars.current_slide][e]};d.init()};a.supersized.vars={thumb_tray:"#thumb-tray",thumb_list:"#thumb-list",slide_list:"#slide-list",current_slide:0,in_animation:false,is_paused:false,hover_pause:false,slideshow_interval:false,update_images:false,options:{}};a.supersized.defaultOptions={slideshow:1,autoplay:1,start_slide:1,stop_loop:0,random:0,slide_interval:5000,transition:1,transition_speed:750,new_window:1,pause_hover:0,keyboard_nav:1,performance:1,image_protect:1,fit_always:0,fit_landscape:0,fit_portrait:1,min_width:0,min_height:0,horizontal_center:1,vertical_center:1,slide_links:1,thumb_links:1,thumbnail_navigation:0};a.fn.supersized=function(b){return this.each(function(){(new a.supersized(b))})}})(jQuery); \ No newline at end of file
diff --git a/apps/gallery/js/supersized.shutter.js b/apps/gallery/js/supersized.shutter.js
new file mode 100644
index 00000000000..cc3025a94a3
--- /dev/null
+++ b/apps/gallery/js/supersized.shutter.js
@@ -0,0 +1,337 @@
+/*
+
+ Supersized - Fullscreen Slideshow jQuery Plugin
+ Version : 3.2.7
+ Theme : Shutter 1.1
+
+ Site : www.buildinternet.com/project/supersized
+ Author : Sam Dunn
+ Company : One Mighty Roar (www.onemightyroar.com)
+ License : MIT License / GPL License
+
+*/
+
+(function($){
+
+ theme = {
+
+
+ /* Initial Placement
+ ----------------------------*/
+ _init : function(){
+
+ // Center Slide Links
+ if (api.options.slide_links) $(vars.slide_list).css('margin-left', -$(vars.slide_list).width()/2);
+
+ // Start progressbar if autoplay enabled
+ if (api.options.autoplay){
+ if (api.options.progress_bar) theme.progressBar();
+ }else{
+ if ($(vars.play_button).attr('src')) $(vars.play_button).attr("src", vars.image_path + "play.png"); // If pause play button is image, swap src
+ if (api.options.progress_bar) $(vars.progress_bar).stop().animate({left : -$(window).width()}, 0 ); // Place progress bar
+ }
+
+
+ /* Thumbnail Tray
+ ----------------------------*/
+ // Hide tray off screen
+ $(vars.thumb_tray).animate({bottom : -$(vars.thumb_tray).height()}, 0 );
+
+ // Thumbnail Tray Toggle
+ $(vars.tray_button).toggle(function(){
+ $(vars.thumb_tray).stop().animate({bottom : 0, avoidTransforms : true}, 300 );
+ if ($(vars.tray_arrow).attr('src')) $(vars.tray_arrow).attr("src", vars.image_path + "button-tray-down.png");
+ return false;
+ }, function() {
+ $(vars.thumb_tray).stop().animate({bottom : -$(vars.thumb_tray).height(), avoidTransforms : true}, 300 );
+ if ($(vars.tray_arrow).attr('src')) $(vars.tray_arrow).attr("src", vars.image_path + "button-tray-up.png");
+ return false;
+ });
+
+ // Make thumb tray proper size
+ $(vars.thumb_list).width($('> li', vars.thumb_list).length * $('> li', vars.thumb_list).outerWidth(true)); //Adjust to true width of thumb markers
+
+ // Display total slides
+ if ($(vars.slide_total).length){
+ $(vars.slide_total).html(api.options.slides.length);
+ }
+
+
+ /* Thumbnail Tray Navigation
+ ----------------------------*/
+ if (api.options.thumb_links){
+ //Hide thumb arrows if not needed
+ if ($(vars.thumb_list).width() <= $(vars.thumb_tray).width()){
+ $(vars.thumb_back +','+vars.thumb_forward).fadeOut(0);
+ }
+
+ // Thumb Intervals
+ vars.thumb_interval = Math.floor($(vars.thumb_tray).width() / $('> li', vars.thumb_list).outerWidth(true)) * $('> li', vars.thumb_list).outerWidth(true);
+ vars.thumb_page = 0;
+
+ // Cycle thumbs forward
+ $(vars.thumb_forward).click(function(){
+ if (vars.thumb_page - vars.thumb_interval <= -$(vars.thumb_list).width()){
+ vars.thumb_page = 0;
+ $(vars.thumb_list).stop().animate({'left': vars.thumb_page}, {duration:500, easing:'easeOutExpo'});
+ }else{
+ vars.thumb_page = vars.thumb_page - vars.thumb_interval;
+ $(vars.thumb_list).stop().animate({'left': vars.thumb_page}, {duration:500, easing:'easeOutExpo'});
+ }
+ });
+
+ // Cycle thumbs backwards
+ $(vars.thumb_back).click(function(){
+ if (vars.thumb_page + vars.thumb_interval > 0){
+ vars.thumb_page = Math.floor($(vars.thumb_list).width() / vars.thumb_interval) * -vars.thumb_interval;
+ if ($(vars.thumb_list).width() <= -vars.thumb_page) vars.thumb_page = vars.thumb_page + vars.thumb_interval;
+ $(vars.thumb_list).stop().animate({'left': vars.thumb_page}, {duration:500, easing:'easeOutExpo'});
+ }else{
+ vars.thumb_page = vars.thumb_page + vars.thumb_interval;
+ $(vars.thumb_list).stop().animate({'left': vars.thumb_page}, {duration:500, easing:'easeOutExpo'});
+ }
+ });
+
+ }
+
+
+ /* Navigation Items
+ ----------------------------*/
+ $(vars.next_slide).click(function() {
+ api.nextSlide();
+ });
+
+ $(vars.prev_slide).click(function() {
+ api.prevSlide();
+ });
+
+ // Full Opacity on Hover
+ if(jQuery.support.opacity){
+ $(vars.prev_slide +','+vars.next_slide).mouseover(function() {
+ $(this).stop().animate({opacity:1},100);
+ }).mouseout(function(){
+ $(this).stop().animate({opacity:0.6},100);
+ });
+ }
+
+ if (api.options.thumbnail_navigation){
+ // Next thumbnail clicked
+ $(vars.next_thumb).click(function() {
+ api.nextSlide();
+ });
+ // Previous thumbnail clicked
+ $(vars.prev_thumb).click(function() {
+ api.prevSlide();
+ });
+ }
+
+ $(vars.play_button).click(function() {
+ api.playToggle();
+ });
+
+
+ /* Thumbnail Mouse Scrub
+ ----------------------------*/
+ if (api.options.mouse_scrub){
+ $(vars.thumb_tray).mousemove(function(e) {
+ var containerWidth = $(vars.thumb_tray).width(),
+ listWidth = $(vars.thumb_list).width();
+ if (listWidth > containerWidth){
+ var mousePos = 1,
+ diff = e.pageX - mousePos;
+ if (diff > 10 || diff < -10) {
+ mousePos = e.pageX;
+ newX = (containerWidth - listWidth) * (e.pageX/containerWidth);
+ diff = parseInt(Math.abs(parseInt($(vars.thumb_list).css('left'))-newX )).toFixed(0);
+ $(vars.thumb_list).stop().animate({'left':newX}, {duration:diff*3, easing:'easeOutExpo'});
+ }
+ }
+ });
+ }
+
+
+ /* Window Resize
+ ----------------------------*/
+ $(window).resize(function(){
+
+ // Delay progress bar on resize
+ if (api.options.progress_bar && !vars.in_animation){
+ if (vars.slideshow_interval) clearInterval(vars.slideshow_interval);
+ if (api.options.slides.length - 1 > 0) clearInterval(vars.slideshow_interval);
+
+ $(vars.progress_bar).stop().animate({left : -$(window).width()}, 0 );
+
+ if (!vars.progressDelay && api.options.slideshow){
+ // Delay slideshow from resuming so Chrome can refocus images
+ vars.progressDelay = setTimeout(function() {
+ if (!vars.is_paused){
+ theme.progressBar();
+ vars.slideshow_interval = setInterval(api.nextSlide, api.options.slide_interval);
+ }
+ vars.progressDelay = false;
+ }, 1000);
+ }
+ }
+
+ // Thumb Links
+ if (api.options.thumb_links && vars.thumb_tray.length){
+ // Update Thumb Interval & Page
+ vars.thumb_page = 0;
+ vars.thumb_interval = Math.floor($(vars.thumb_tray).width() / $('> li', vars.thumb_list).outerWidth(true)) * $('> li', vars.thumb_list).outerWidth(true);
+
+ // Adjust thumbnail markers
+ if ($(vars.thumb_list).width() > $(vars.thumb_tray).width()){
+ $(vars.thumb_back +','+vars.thumb_forward).fadeIn('fast');
+ $(vars.thumb_list).stop().animate({'left':0}, 200);
+ }else{
+ $(vars.thumb_back +','+vars.thumb_forward).fadeOut('fast');
+ }
+
+ }
+ });
+
+
+ },
+
+
+ /* Go To Slide
+ ----------------------------*/
+ goTo : function(){
+ if (api.options.progress_bar && !vars.is_paused){
+ $(vars.progress_bar).stop().animate({left : -$(window).width()}, 0 );
+ theme.progressBar();
+ }
+ },
+
+ /* Play & Pause Toggle
+ ----------------------------*/
+ playToggle : function(state){
+
+ if (state =='play'){
+ // If image, swap to pause
+ if ($(vars.play_button).attr('src')) $(vars.play_button).attr("src", vars.image_path + "pause.png");
+ if (api.options.progress_bar && !vars.is_paused) theme.progressBar();
+ }else if (state == 'pause'){
+ // If image, swap to play
+ if ($(vars.play_button).attr('src')) $(vars.play_button).attr("src", vars.image_path + "play.png");
+ if (api.options.progress_bar && vars.is_paused)$(vars.progress_bar).stop().animate({left : -$(window).width()}, 0 );
+ }
+
+ },
+
+
+ /* Before Slide Transition
+ ----------------------------*/
+ beforeAnimation : function(direction){
+ if (api.options.progress_bar && !vars.is_paused) $(vars.progress_bar).stop().animate({left : -$(window).width()}, 0 );
+
+ /* Update Fields
+ ----------------------------*/
+ // Update slide caption
+ if ($(vars.slide_caption).length){
+ (api.getField('title')) ? $(vars.slide_caption).html(api.getField('title')) : $(vars.slide_caption).html('');
+ }
+ // Update slide number
+ if (vars.slide_current.length){
+ $(vars.slide_current).html(vars.current_slide + 1);
+ }
+
+
+ // Highlight current thumbnail and adjust row position
+ if (api.options.thumb_links){
+
+ $('.current-thumb').removeClass('current-thumb');
+ $('li', vars.thumb_list).eq(vars.current_slide).addClass('current-thumb');
+
+ // If thumb out of view
+ if ($(vars.thumb_list).width() > $(vars.thumb_tray).width()){
+ // If next slide direction
+ if (direction == 'next'){
+ if (vars.current_slide == 0){
+ vars.thumb_page = 0;
+ $(vars.thumb_list).stop().animate({'left': vars.thumb_page}, {duration:500, easing:'easeOutExpo'});
+ } else if ($('.current-thumb').offset().left - $(vars.thumb_tray).offset().left >= vars.thumb_interval){
+ vars.thumb_page = vars.thumb_page - vars.thumb_interval;
+ $(vars.thumb_list).stop().animate({'left': vars.thumb_page}, {duration:500, easing:'easeOutExpo'});
+ }
+ // If previous slide direction
+ }else if(direction == 'prev'){
+ if (vars.current_slide == api.options.slides.length - 1){
+ vars.thumb_page = Math.floor($(vars.thumb_list).width() / vars.thumb_interval) * -vars.thumb_interval;
+ if ($(vars.thumb_list).width() <= -vars.thumb_page) vars.thumb_page = vars.thumb_page + vars.thumb_interval;
+ $(vars.thumb_list).stop().animate({'left': vars.thumb_page}, {duration:500, easing:'easeOutExpo'});
+ } else if ($('.current-thumb').offset().left - $(vars.thumb_tray).offset().left < 0){
+ if (vars.thumb_page + vars.thumb_interval > 0) return false;
+ vars.thumb_page = vars.thumb_page + vars.thumb_interval;
+ $(vars.thumb_list).stop().animate({'left': vars.thumb_page}, {duration:500, easing:'easeOutExpo'});
+ }
+ }
+ }
+
+
+ }
+
+ },
+
+
+ /* After Slide Transition
+ ----------------------------*/
+ afterAnimation : function(){
+ if (api.options.progress_bar && !vars.is_paused) theme.progressBar(); // Start progress bar
+ },
+
+
+ /* Progress Bar
+ ----------------------------*/
+ progressBar : function(){
+ $(vars.progress_bar).stop().animate({left : -$(window).width()}, 0 ).animate({left:0}, api.options.slide_interval);
+ }
+
+
+ };
+
+
+ /* Theme Specific Variables
+ ----------------------------*/
+ $.supersized.themeVars = {
+
+ // Internal Variables
+ progress_delay : false, // Delay after resize before resuming slideshow
+ thumb_page : false, // Thumbnail page
+ thumb_interval : false, // Thumbnail interval
+ image_path : OC.webroot+"/apps/gallery/img/supersized/", // Default image path
+
+ // General Elements
+ play_button : '#pauseplay', // Play/Pause button
+ next_slide : '#nextslide', // Next slide button
+ prev_slide : '#prevslide', // Prev slide button
+ next_thumb : '#nextthumb', // Next slide thumb button
+ prev_thumb : '#prevthumb', // Prev slide thumb button
+
+ slide_caption : '#slidecaption', // Slide caption
+ slide_current : '.slidenumber', // Current slide number
+ slide_total : '.totalslides', // Total Slides
+ slide_list : '#slide-list', // Slide jump list
+
+ thumb_tray : '#thumb-tray', // Thumbnail tray
+ thumb_list : '#thumb-list', // Thumbnail list
+ thumb_forward : '#thumb-forward', // Cycles forward through thumbnail list
+ thumb_back : '#thumb-back', // Cycles backwards through thumbnail list
+ tray_arrow : '#tray-arrow', // Thumbnail tray button arrow
+ tray_button : '#tray-button', // Thumbnail tray button
+
+ progress_bar : '#progress-bar' // Progress bar
+
+ };
+
+ /* Theme Specific Options
+ ----------------------------*/
+ $.supersized.themeOptions = {
+
+ progress_bar : 1, // Timer for each slide
+ mouse_scrub : 0 // Thumbnails move with mouse
+
+ };
+
+
+})(jQuery);
diff --git a/apps/gallery/js/supersized.shutter.min.js b/apps/gallery/js/supersized.shutter.min.js
new file mode 100644
index 00000000000..52ea4a3384a
--- /dev/null
+++ b/apps/gallery/js/supersized.shutter.min.js
@@ -0,0 +1,14 @@
+/*
+
+ Supersized - Fullscreen Slideshow jQuery Plugin
+ Version : 3.2.7
+ Theme : Shutter 1.1
+
+ Site : www.buildinternet.com/project/supersized
+ Author : Sam Dunn
+ Company : One Mighty Roar (www.onemightyroar.com)
+ License : MIT License / GPL License
+
+*/
+
+(function(a){theme={_init:function(){if(api.options.slide_links){a(vars.slide_list).css("margin-left",-a(vars.slide_list).width()/2)}if(api.options.autoplay){if(api.options.progress_bar){theme.progressBar()}}else{if(a(vars.play_button).attr("src")){a(vars.play_button).attr("src",vars.image_path+"play.png")}if(api.options.progress_bar){a(vars.progress_bar).stop().animate({left:-a(window).width()},0)}}a(vars.thumb_tray).animate({bottom:-a(vars.thumb_tray).height()},0);a(vars.tray_button).toggle(function(){a(vars.thumb_tray).stop().animate({bottom:0,avoidTransforms:true},300);if(a(vars.tray_arrow).attr("src")){a(vars.tray_arrow).attr("src",vars.image_path+"button-tray-down.png")}return false},function(){a(vars.thumb_tray).stop().animate({bottom:-a(vars.thumb_tray).height(),avoidTransforms:true},300);if(a(vars.tray_arrow).attr("src")){a(vars.tray_arrow).attr("src",vars.image_path+"button-tray-up.png")}return false});a(vars.thumb_list).width(a("> li",vars.thumb_list).length*a("> li",vars.thumb_list).outerWidth(true));if(a(vars.slide_total).length){a(vars.slide_total).html(api.options.slides.length)}if(api.options.thumb_links){if(a(vars.thumb_list).width()<=a(vars.thumb_tray).width()){a(vars.thumb_back+","+vars.thumb_forward).fadeOut(0)}vars.thumb_interval=Math.floor(a(vars.thumb_tray).width()/a("> li",vars.thumb_list).outerWidth(true))*a("> li",vars.thumb_list).outerWidth(true);vars.thumb_page=0;a(vars.thumb_forward).click(function(){if(vars.thumb_page-vars.thumb_interval<=-a(vars.thumb_list).width()){vars.thumb_page=0;a(vars.thumb_list).stop().animate({left:vars.thumb_page},{duration:500,easing:"easeOutExpo"})}else{vars.thumb_page=vars.thumb_page-vars.thumb_interval;a(vars.thumb_list).stop().animate({left:vars.thumb_page},{duration:500,easing:"easeOutExpo"})}});a(vars.thumb_back).click(function(){if(vars.thumb_page+vars.thumb_interval>0){vars.thumb_page=Math.floor(a(vars.thumb_list).width()/vars.thumb_interval)*-vars.thumb_interval;if(a(vars.thumb_list).width()<=-vars.thumb_page){vars.thumb_page=vars.thumb_page+vars.thumb_interval}a(vars.thumb_list).stop().animate({left:vars.thumb_page},{duration:500,easing:"easeOutExpo"})}else{vars.thumb_page=vars.thumb_page+vars.thumb_interval;a(vars.thumb_list).stop().animate({left:vars.thumb_page},{duration:500,easing:"easeOutExpo"})}})}a(vars.next_slide).click(function(){api.nextSlide()});a(vars.prev_slide).click(function(){api.prevSlide()});if(jQuery.support.opacity){a(vars.prev_slide+","+vars.next_slide).mouseover(function(){a(this).stop().animate({opacity:1},100)}).mouseout(function(){a(this).stop().animate({opacity:0.6},100)})}if(api.options.thumbnail_navigation){a(vars.next_thumb).click(function(){api.nextSlide()});a(vars.prev_thumb).click(function(){api.prevSlide()})}a(vars.play_button).click(function(){api.playToggle()});if(api.options.mouse_scrub){a(vars.thumb_tray).mousemove(function(f){var c=a(vars.thumb_tray).width(),g=a(vars.thumb_list).width();if(g>c){var b=1,d=f.pageX-b;if(d>10||d<-10){b=f.pageX;newX=(c-g)*(f.pageX/c);d=parseInt(Math.abs(parseInt(a(vars.thumb_list).css("left"))-newX)).toFixed(0);a(vars.thumb_list).stop().animate({left:newX},{duration:d*3,easing:"easeOutExpo"})}}})}a(window).resize(function(){if(api.options.progress_bar&&!vars.in_animation){if(vars.slideshow_interval){clearInterval(vars.slideshow_interval)}if(api.options.slides.length-1>0){clearInterval(vars.slideshow_interval)}a(vars.progress_bar).stop().animate({left:-a(window).width()},0);if(!vars.progressDelay&&api.options.slideshow){vars.progressDelay=setTimeout(function(){if(!vars.is_paused){theme.progressBar();vars.slideshow_interval=setInterval(api.nextSlide,api.options.slide_interval)}vars.progressDelay=false},1000)}}if(api.options.thumb_links&&vars.thumb_tray.length){vars.thumb_page=0;vars.thumb_interval=Math.floor(a(vars.thumb_tray).width()/a("> li",vars.thumb_list).outerWidth(true))*a("> li",vars.thumb_list).outerWidth(true);if(a(vars.thumb_list).width()>a(vars.thumb_tray).width()){a(vars.thumb_back+","+vars.thumb_forward).fadeIn("fast");a(vars.thumb_list).stop().animate({left:0},200)}else{a(vars.thumb_back+","+vars.thumb_forward).fadeOut("fast")}}})},goTo:function(b){if(api.options.progress_bar&&!vars.is_paused){a(vars.progress_bar).stop().animate({left:-a(window).width()},0);theme.progressBar()}},playToggle:function(b){if(b=="play"){if(a(vars.play_button).attr("src")){a(vars.play_button).attr("src",vars.image_path+"pause.png")}if(api.options.progress_bar&&!vars.is_paused){theme.progressBar()}}else{if(b=="pause"){if(a(vars.play_button).attr("src")){a(vars.play_button).attr("src",vars.image_path+"play.png")}if(api.options.progress_bar&&vars.is_paused){a(vars.progress_bar).stop().animate({left:-a(window).width()},0)}}}},beforeAnimation:function(b){if(api.options.progress_bar&&!vars.is_paused){a(vars.progress_bar).stop().animate({left:-a(window).width()},0)}if(a(vars.slide_caption).length){(api.getField("title"))?a(vars.slide_caption).html(api.getField("title")):a(vars.slide_caption).html("")}if(vars.slide_current.length){a(vars.slide_current).html(vars.current_slide+1)}if(api.options.thumb_links){a(".current-thumb").removeClass("current-thumb");a("li",vars.thumb_list).eq(vars.current_slide).addClass("current-thumb");if(a(vars.thumb_list).width()>a(vars.thumb_tray).width()){if(b=="next"){if(vars.current_slide==0){vars.thumb_page=0;a(vars.thumb_list).stop().animate({left:vars.thumb_page},{duration:500,easing:"easeOutExpo"})}else{if(a(".current-thumb").offset().left-a(vars.thumb_tray).offset().left>=vars.thumb_interval){vars.thumb_page=vars.thumb_page-vars.thumb_interval;a(vars.thumb_list).stop().animate({left:vars.thumb_page},{duration:500,easing:"easeOutExpo"})}}}else{if(b=="prev"){if(vars.current_slide==api.options.slides.length-1){vars.thumb_page=Math.floor(a(vars.thumb_list).width()/vars.thumb_interval)*-vars.thumb_interval;if(a(vars.thumb_list).width()<=-vars.thumb_page){vars.thumb_page=vars.thumb_page+vars.thumb_interval}a(vars.thumb_list).stop().animate({left:vars.thumb_page},{duration:500,easing:"easeOutExpo"})}else{if(a(".current-thumb").offset().left-a(vars.thumb_tray).offset().left<0){if(vars.thumb_page+vars.thumb_interval>0){return false}vars.thumb_page=vars.thumb_page+vars.thumb_interval;a(vars.thumb_list).stop().animate({left:vars.thumb_page},{duration:500,easing:"easeOutExpo"})}}}}}}},afterAnimation:function(){if(api.options.progress_bar&&!vars.is_paused){theme.progressBar()}},progressBar:function(){a(vars.progress_bar).stop().animate({left:-a(window).width()},0).animate({left:0},api.options.slide_interval)}};a.supersized.themeVars={progress_delay:false,thumb_page:false,thumb_interval:false,image_path:OC.webroot+"/apps/gallery/img/supersized/",play_button:"#pauseplay",next_slide:"#nextslide",prev_slide:"#prevslide",next_thumb:"#nextthumb",prev_thumb:"#prevthumb",slide_caption:"#slidecaption",slide_current:".slidenumber",slide_total:".totalslides",slide_list:"#slide-list",thumb_tray:"#thumb-tray",thumb_list:"#thumb-list",thumb_forward:"#thumb-forward",thumb_back:"#thumb-back",tray_arrow:"#tray-arrow",tray_button:"#tray-button",progress_bar:"#progress-bar"};a.supersized.themeOptions={progress_bar:1,mouse_scrub:0}})(jQuery);
diff --git a/apps/gallery/l10n/ca.php b/apps/gallery/l10n/ca.php
index 165414fba20..1c5848cee28 100644
--- a/apps/gallery/l10n/ca.php
+++ b/apps/gallery/l10n/ca.php
@@ -1,9 +1,9 @@
<?php $TRANSLATIONS = array(
"Pictures" => "Fotos",
-"Settings" => "Arranjament",
-"Rescan" => "Escaneja de nou",
-"Stop" => "Atura",
-"Share" => "Comparteix",
+"Share gallery" => "Comperteix la galeria",
+"Error: " => "Error: ",
+"Internal error" => "Error intern",
+"Slideshow" => "Passi de diapositives",
"Back" => "Enrera",
"Remove confirmation" => "Elimina la confirmació",
"Do you want to remove album" => "Voleu eliminar l'àlbum",
diff --git a/apps/gallery/l10n/cs_CZ.php b/apps/gallery/l10n/cs_CZ.php
index d008e9d28b3..02d1c02d6e9 100644
--- a/apps/gallery/l10n/cs_CZ.php
+++ b/apps/gallery/l10n/cs_CZ.php
@@ -1,12 +1,7 @@
<?php $TRANSLATIONS = array(
"Pictures" => "Obrázky",
-"Settings" => "Nastavení",
-"Rescan" => "Znovu prohledat",
-"Stop" => "Zastavit",
-"Share" => "Sdílet",
-"Back" => "Zpět",
-"Remove confirmation" => "Potvrzení odebrání",
-"Do you want to remove album" => "Chcete odstranit album?",
-"Change album name" => "Změnit název alba",
-"New album name" => "Název nového alba"
+"Share gallery" => "Sdílet galerii",
+"Error: " => "Chyba: ",
+"Internal error" => "Vnitřní chyba",
+"Slideshow" => "Přehrávání"
);
diff --git a/apps/gallery/l10n/de.php b/apps/gallery/l10n/de.php
index 6c3d9fc7389..cd580cf303c 100644
--- a/apps/gallery/l10n/de.php
+++ b/apps/gallery/l10n/de.php
@@ -1,9 +1,9 @@
<?php $TRANSLATIONS = array(
"Pictures" => "Bilder",
-"Settings" => "Einstellungen",
-"Rescan" => "Erneut Scannen",
-"Stop" => "Stopp",
-"Share" => "Teilen",
+"Share gallery" => "Galerie teilen",
+"Error: " => "Fehler:",
+"Internal error" => "Interner Fehler",
+"Slideshow" => "Slideshow",
"Back" => "Zurück",
"Remove confirmation" => "Bestätigung entfernen",
"Do you want to remove album" => "Soll das Album entfernt werden",
diff --git a/apps/gallery/l10n/el.php b/apps/gallery/l10n/el.php
index 3983011a0c0..47bc3af2bb6 100644
--- a/apps/gallery/l10n/el.php
+++ b/apps/gallery/l10n/el.php
@@ -1,9 +1,9 @@
<?php $TRANSLATIONS = array(
"Pictures" => "Εικόνες",
-"Settings" => "Ρυθμίσεις",
-"Rescan" => "ΕπανασάÏωση",
-"Stop" => "Διακοπή",
-"Share" => "Κοινοποίηση",
+"Share gallery" => "Κοινοποίηση συλλογής",
+"Error: " => "Σφάλμα: ",
+"Internal error" => "ΕσωτεÏικό σφάλμα",
+"Slideshow" => "ΠÏοβολή Διαφανειών",
"Back" => "ΕπιστÏοφή",
"Remove confirmation" => "ΑφαίÏεση επιβεβαίωσης",
"Do you want to remove album" => "Θέλετε να αφαιÏέσετε το άλμπουμ",
diff --git a/apps/gallery/l10n/es.php b/apps/gallery/l10n/es.php
index 03e8d6a4563..aa425a0bd04 100644
--- a/apps/gallery/l10n/es.php
+++ b/apps/gallery/l10n/es.php
@@ -1,9 +1,9 @@
<?php $TRANSLATIONS = array(
"Pictures" => "Imágenes",
-"Settings" => "Preferencias",
-"Rescan" => "Refrescar",
-"Stop" => "Parar",
-"Share" => "Compartir",
+"Share gallery" => "Compartir galería",
+"Error: " => "Fallo ",
+"Internal error" => "Fallo interno",
+"Slideshow" => "Presentación",
"Back" => "Atrás",
"Remove confirmation" => "Borrar confirmación",
"Do you want to remove album" => "¿Quieres eliminar el álbum",
diff --git a/apps/gallery/l10n/fi_FI.php b/apps/gallery/l10n/fi_FI.php
index 267bb5e547e..659289ae41f 100644
--- a/apps/gallery/l10n/fi_FI.php
+++ b/apps/gallery/l10n/fi_FI.php
@@ -1,9 +1,9 @@
<?php $TRANSLATIONS = array(
"Pictures" => "Kuvat",
-"Settings" => "Asetukset",
-"Rescan" => "Etsi uusia",
-"Stop" => "Pysäytä",
-"Share" => "Jaa",
+"Share gallery" => "Jaa galleria",
+"Error: " => "Virhe: ",
+"Internal error" => "Sisäinen virhe",
+"Slideshow" => "Diaesitys",
"Back" => "Takaisin",
"Remove confirmation" => "Poiston vahvistus",
"Do you want to remove album" => "Tahdotko poistaa albumin",
diff --git a/apps/gallery/l10n/fr.php b/apps/gallery/l10n/fr.php
index dfd668ebe89..04421236e10 100644
--- a/apps/gallery/l10n/fr.php
+++ b/apps/gallery/l10n/fr.php
@@ -1,9 +1,9 @@
<?php $TRANSLATIONS = array(
"Pictures" => "Images",
-"Settings" => "Préférences",
-"Rescan" => "Analyser à nouveau",
-"Stop" => "Arrêter",
-"Share" => "Partager",
+"Share gallery" => "Partager la galerie",
+"Error: " => "Erreur :",
+"Internal error" => "Erreur interne",
+"Slideshow" => "Diaporama",
"Back" => "Retour",
"Remove confirmation" => "Enlever la confirmation",
"Do you want to remove album" => "Voulez-vous supprimer l'album",
diff --git a/apps/gallery/l10n/it.php b/apps/gallery/l10n/it.php
index e21a1d6524b..ef8d596e7eb 100644
--- a/apps/gallery/l10n/it.php
+++ b/apps/gallery/l10n/it.php
@@ -1,9 +1,9 @@
<?php $TRANSLATIONS = array(
"Pictures" => "Immagini",
-"Settings" => "Impostazioni",
-"Rescan" => "Nuova scansione",
-"Stop" => "Ferma",
-"Share" => "Condividi",
+"Share gallery" => "Condividi la galleria",
+"Error: " => "Errore: ",
+"Internal error" => "Errore interno",
+"Slideshow" => "Presentazione",
"Back" => "Indietro",
"Remove confirmation" => "Rimuovi conferma",
"Do you want to remove album" => "Vuoi rimuovere l'album",
diff --git a/apps/gallery/l10n/pl.php b/apps/gallery/l10n/pl.php
index 1ff636ac2a0..8c0bd0cb98d 100644
--- a/apps/gallery/l10n/pl.php
+++ b/apps/gallery/l10n/pl.php
@@ -1,9 +1,9 @@
<?php $TRANSLATIONS = array(
"Pictures" => "Zdjęcia",
-"Settings" => "Ustawienia",
-"Rescan" => "Przeszukaj",
-"Stop" => "Stop",
-"Share" => "Współdziel",
+"Share gallery" => "Udostępnij galerię",
+"Error: " => "BÅ‚Ä…d: ",
+"Internal error" => "Błąd wewnętrzny",
+"Slideshow" => "Pokaz slajdów",
"Back" => "Wróć",
"Remove confirmation" => "Usuń potwierdzenie",
"Do you want to remove album" => "Czy chcesz usunąć album",
diff --git a/apps/gallery/l10n/pt_PT.php b/apps/gallery/l10n/pt_PT.php
index 54e99cf2456..8b7aa2a23bc 100644
--- a/apps/gallery/l10n/pt_PT.php
+++ b/apps/gallery/l10n/pt_PT.php
@@ -1,12 +1,7 @@
<?php $TRANSLATIONS = array(
"Pictures" => "Imagens",
-"Settings" => "Definições",
-"Rescan" => "Atualizar",
-"Stop" => "Parar",
-"Share" => "Partilhar",
-"Back" => "Voltar",
-"Remove confirmation" => "Remove confirmação",
-"Do you want to remove album" => "Deseja remover o album",
-"Change album name" => "Mudar o nome do album",
-"New album name" => "Novo nome do album"
+"Share gallery" => "Partilhar a galeria",
+"Error: " => "Erro: ",
+"Internal error" => "Erro interno",
+"Slideshow" => "Slideshow"
);
diff --git a/apps/gallery/l10n/ru.php b/apps/gallery/l10n/ru.php
index f1c530ed289..d6e33e4b017 100644
--- a/apps/gallery/l10n/ru.php
+++ b/apps/gallery/l10n/ru.php
@@ -1,12 +1,7 @@
<?php $TRANSLATIONS = array(
"Pictures" => "РиÑунки",
-"Settings" => "ÐаÑтройки",
-"Rescan" => "Обновить",
-"Stop" => "ОÑтановить",
-"Share" => "ПоделитьÑÑ",
-"Back" => "Ðазад",
-"Remove confirmation" => "Подтверждение удалениÑ",
-"Do you want to remove album" => "Вы хотите удалить альбом?",
-"Change album name" => "Изменить Ð¸Ð¼Ñ Ð°Ð»ÑŒÐ±Ð¾Ð¼Ð°",
-"New album name" => "Ðовое Ð¸Ð¼Ñ Ð°Ð»ÑŒÐ±Ð¾Ð¼Ð°"
+"Share gallery" => "Опубликовать",
+"Error: " => "Ошибка",
+"Internal error" => "ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°",
+"Slideshow" => "Слайдшоу"
);
diff --git a/apps/gallery/l10n/sl.php b/apps/gallery/l10n/sl.php
index 5e061239862..8d3bb9f5887 100644
--- a/apps/gallery/l10n/sl.php
+++ b/apps/gallery/l10n/sl.php
@@ -1,9 +1,9 @@
<?php $TRANSLATIONS = array(
"Pictures" => "Slike",
-"Settings" => "Nastavitve",
-"Rescan" => "Ponovno preiÅ¡Äi",
-"Stop" => "Stop",
-"Share" => "Deli",
+"Share gallery" => "Daj galerijo v souporabo",
+"Error: " => "Napaka: ",
+"Internal error" => "Notranja napaka",
+"Slideshow" => "predstavitev",
"Back" => "Nazaj",
"Remove confirmation" => "Odstrani potrditev",
"Do you want to remove album" => "Ali želite odstraniti album",
diff --git a/apps/gallery/l10n/sv.php b/apps/gallery/l10n/sv.php
index 520d271df10..b63a89d90fc 100644
--- a/apps/gallery/l10n/sv.php
+++ b/apps/gallery/l10n/sv.php
@@ -1,9 +1,9 @@
<?php $TRANSLATIONS = array(
"Pictures" => "Bilder",
-"Settings" => "Inställningar",
-"Rescan" => "Sök igen",
-"Stop" => "Stoppa",
-"Share" => "Dela",
+"Share gallery" => "Dela galleri",
+"Error: " => "Fel:",
+"Internal error" => "Internt fel",
+"Slideshow" => "Bildspel",
"Back" => "Tillbaka",
"Remove confirmation" => "Vill du säkert ta bort",
"Do you want to remove album" => "Vill du ta bort albumet",
diff --git a/apps/gallery/l10n/th_TH.php b/apps/gallery/l10n/th_TH.php
index 34da8dc57fb..9bb699e2644 100644
--- a/apps/gallery/l10n/th_TH.php
+++ b/apps/gallery/l10n/th_TH.php
@@ -1,12 +1,7 @@
<?php $TRANSLATIONS = array(
"Pictures" => "รูปภาพ",
-"Settings" => "ตั้งค่า",
-"Rescan" => "ตรวจสอบอีà¸à¸„รั้ง",
-"Stop" => "หยุด",
-"Share" => "à¹à¸Šà¸£à¹Œ",
-"Back" => "ย้อนà¸à¸¥à¸±à¸š",
-"Remove confirmation" => "à¸à¸²à¸£à¸¢à¸·à¸™à¸¢à¸±à¸™à¸à¸²à¸£à¸¥à¸š",
-"Do you want to remove album" => "คุณต้องà¸à¸²à¸£à¸¥à¸šà¸­à¸±à¸¥à¸šà¸±à¹‰à¸¡à¸­à¸­à¸à¸«à¸£à¸·à¸­à¹„ม่",
-"Change album name" => "เปลี่ยนชื่ออัลบั้ม",
-"New album name" => "ชื่อใหม่ของอัลบั้ม"
+"Share gallery" => "à¹à¸Šà¸£à¹Œà¸‚้อมูลà¹à¸à¸¥à¸­à¸£à¸µà¹ˆ",
+"Error: " => "พบข้อผิดพลาด: ",
+"Internal error" => "เà¸à¸´à¸”ข้อผิดพลาดภายในระบบ",
+"Slideshow" => "ภาพสไลด์โชว์"
);
diff --git a/apps/gallery/l10n/tr.php b/apps/gallery/l10n/tr.php
index c42592448cb..7d007fa66e1 100644
--- a/apps/gallery/l10n/tr.php
+++ b/apps/gallery/l10n/tr.php
@@ -1,9 +1,9 @@
<?php $TRANSLATIONS = array(
"Pictures" => "Resimler",
-"Settings" => "Ayarlar",
-"Rescan" => "Yeniden Tara ",
-"Stop" => "Durdur",
-"Share" => "PaylaÅŸ",
+"Share gallery" => "Galeriyi paylaÅŸ",
+"Error: " => "Hata: ",
+"Internal error" => "İç hata",
+"Slideshow" => "Slide Gösterim",
"Back" => "Geri",
"Remove confirmation" => "Doğrulamayı kaldır",
"Do you want to remove album" => "Albümü silmek istiyor musunuz",
diff --git a/apps/gallery/l10n/vi.php b/apps/gallery/l10n/vi.php
new file mode 100644
index 00000000000..d1d7fc64fca
--- /dev/null
+++ b/apps/gallery/l10n/vi.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"Pictures" => "Hình ảnh",
+"Share gallery" => "Chia sẻ gallery",
+"Error: " => "Lá»—i :",
+"Internal error" => "Lá»—i ná»™i bá»™",
+"Back" => "Trở lại",
+"Remove confirmation" => "Xóa xác nhận",
+"Do you want to remove album" => "Bạn muốn xóa album này ",
+"Change album name" => "Äổi tên album",
+"New album name" => "Tên album mới"
+);
diff --git a/apps/gallery/l10n/zh_CN.php b/apps/gallery/l10n/zh_CN.php
index ffa321f7de6..6aa4fc7f353 100644
--- a/apps/gallery/l10n/zh_CN.php
+++ b/apps/gallery/l10n/zh_CN.php
@@ -1,12 +1,7 @@
<?php $TRANSLATIONS = array(
"Pictures" => "图片",
-"Settings" => "设置",
-"Rescan" => "é‡æ–°æ‰«æ",
-"Stop" => "åœæ­¢",
-"Share" => "分享",
-"Back" => "返回",
-"Remove confirmation" => "移除确认",
-"Do you want to remove album" => "您是å¦æƒ³è¦ç§»é™¤ç›¸å†Œ",
-"Change album name" => "修改相册å称",
-"New album name" => "新相册å称"
+"Share gallery" => "分享图库",
+"Error: " => "错误:",
+"Internal error" => "内部错误",
+"Slideshow" => "å¹»ç¯ç‰‡"
);
diff --git a/apps/gallery/lib/album.php b/apps/gallery/lib/album.php
index b9aa5356292..d1b29a59928 100644
--- a/apps/gallery/lib/album.php
+++ b/apps/gallery/lib/album.php
@@ -77,7 +77,7 @@ class OC_Gallery_Album {
$sql .= ' AND `parent_path` = ?';
$args[] = $parent;
}
- $order = OCP\Config::getUserValue($owner, 'gallery', 'order', 'ASC');
+ $order = OCP\Config::getUserValue($owner, 'gallery', 'order', 'ASC');
$sql .= ' ORDER BY `album_name` ' . $order;
$stmt = OCP\DB::prepare($sql);
@@ -90,25 +90,22 @@ class OC_Gallery_Album {
}
public static function changeThumbnailPath($oldname, $newname) {
-
- $thumbpath = OC::$CONFIG_DATADIRECTORY.'/../gallery/';
- rename($thumbpath.$oldname.'.png', $thumbpath.$newname.'.png');
+ $view = OCP\Files::getStorage('gallery');
+ $view->rename($oldname.'.png', $newname.'.png');
}
public static function getAlbumSize($id){
$sql = 'SELECT COUNT(*) AS `size` FROM `*PREFIX*gallery_photos` WHERE `album_id` = ?';
- $stmt = OCP\DB::prepare($sql);
- $result=$stmt->execute(array($id))->fetchRow();
- return $result['size'];
+ $stmt = OCP\DB::prepare($sql);
+ $result=$stmt->execute(array($id))->fetchRow();
+ return $result['size'];
}
- public static function getIntermediateGallerySize($path) {
- $path .= '%';
+ public static function getIntermediateGallerySize($path) {
+ $path .= '%';
$sql = 'SELECT COUNT(*) AS `size` FROM `*PREFIX*gallery_photos` AS `photos`, `*PREFIX*gallery_albums` AS `albums` WHERE `photos`.`album_id` = `albums`.`album_id` AND `uid_owner` = ? AND `file_path` LIKE ?';
- $stmt = OCP\DB::prepare($sql);
- $result = $stmt->execute(array(OCP\USER::getUser(), $path))->fetchRow();
- return $result['size'];
- }
+ $stmt = OCP\DB::prepare($sql);
+ $result = $stmt->execute(array(OCP\USER::getUser(), $path))->fetchRow();
+ return $result['size'];
+ }
}
-
-?>
diff --git a/apps/gallery/lib/hooks_handlers.php b/apps/gallery/lib/hooks_handlers.php
index a9f4dc6affc..3bafdb5cf4d 100644
--- a/apps/gallery/lib/hooks_handlers.php
+++ b/apps/gallery/lib/hooks_handlers.php
@@ -21,7 +21,7 @@
*
*/
-OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_delete, "OC_Gallery_Hooks_Handlers", "removePhoto");
+OCP\Util::connectHook('OC_Filesystem', 'delete', "OC_Gallery_Hooks_Handlers", "removePhoto");
//OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_post_rename, "OC_Gallery_Hooks_Handlers", "renamePhoto");
require_once(OC::$CLASSPATH['Pictures_Managers']);
@@ -38,5 +38,3 @@ class OC_Gallery_Hooks_Handlers {
//TODO: implement this
}
}
-
-?>
diff --git a/apps/gallery/lib/images_utils.php b/apps/gallery/lib/images_utils.php
index ac3a383c977..f5e37cf1dee 100644
--- a/apps/gallery/lib/images_utils.php
+++ b/apps/gallery/lib/images_utils.php
@@ -60,5 +60,3 @@ function CroppedThumbnail($imgSrc,$thumbnail_width,$thumbnail_height, $tgtImg, $
imagedestroy($process);
imagedestroy($myImage);
}
-
-?>
diff --git a/apps/gallery/lib/managers.php b/apps/gallery/lib/managers.php
index 82356e54dda..666c6d68931 100644
--- a/apps/gallery/lib/managers.php
+++ b/apps/gallery/lib/managers.php
@@ -2,10 +2,9 @@
namespace OC\Pictures;
-require_once('lib/base.php');
-
-class DatabaseManager {
+class DatabaseManager {
private static $instance = null;
+ protected $cache = array();
const TAG = 'DatabaseManager';
public static function getInstance() {
@@ -14,22 +13,44 @@ class DatabaseManager {
return self::$instance;
}
+ protected function getPathData($path) {
+ $stmt = \OCP\DB::prepare('SELECT * FROM `*PREFIX*pictures_images_cache`
+ WHERE `uid_owner` LIKE ? AND `path` LIKE ? AND `path` NOT LIKE ?');
+ $path_match = $path.'/%';
+ $path_notmatch = $path.'/%/%';
+ $result = $stmt->execute(array(\OCP\USER::getUser(), $path_match, $path_notmatch));
+ $this->cache[$path] = array();
+ while (($row = $result->fetchRow()) != false) {
+ $this->cache[$path][$row['path']] = $row;
+ }
+ }
+
+ public function setFileData($path, $width, $height) {
+ $stmt = \OCP\DB::prepare('INSERT INTO `*PREFIX*pictures_images_cache` (`uid_owner`, `path`, `width`, `height`) VALUES (?, ?, ?, ?)');
+ $stmt->execute(array(\OCP\USER::getUser(), $path, $width, $height));
+ $ret = array('path' => $path, 'width' => $width, 'height' => $height);
+ $dir = dirname($path);
+ $this->cache[$dir][$path] = $ret;
+ return $ret;
+ }
+
public function getFileData($path) {
$gallery_path = \OCP\Config::getSystemValue( 'datadirectory' ).'/'.\OC_User::getUser().'/gallery';
$path = $gallery_path.$path;
- $stmt = \OCP\DB::prepare('SELECT * FROM `*PREFIX*pictures_images_cache` WHERE `uid_owner` LIKE ? AND `path` = ?');
- $result = $stmt->execute(array(\OCP\USER::getUser(), $path));
- if (($row = $result->fetchRow()) != false) {
- return $row;
+ $dir = dirname($path);
+ if (!isset($this->cache[$dir])) {
+ $this->getPathData($dir);
+ }
+ if (isset($this->cache[$dir][$path])) {
+ return $this->cache[$dir][$path];
}
$image = new \OC_Image();
if (!$image->loadFromFile($path)) {
return false;
}
- $stmt = \OCP\DB::prepare('INSERT INTO `*PREFIX*pictures_images_cache` (`uid_owner`, `path`, `width`, `height`) VALUES (?, ?, ?, ?)');
- $stmt->execute(array(\OCP\USER::getUser(), $path, $image->width(), $image->height()));
- $ret = array('path' => $path, 'width' => $image->width(), 'height' => $image->height());
+ $ret = $this->setFileData($path, $image->width(), $image->height());
unset($image);
+ $this->cache[$dir][$path] = $ret;
return $ret;
}
@@ -40,6 +61,7 @@ class ThumbnailsManager {
private static $instance = null;
const TAG = 'ThumbnailManager';
+ const THUMBNAIL_HEIGHT = 150;
public static function getInstance() {
if (self::$instance === null)
@@ -48,9 +70,9 @@ class ThumbnailsManager {
}
public function getThumbnail($path) {
- $gallery_path = \OCP\Config::getSystemValue( 'datadirectory' ).'/'.\OC_User::getUser().'/gallery';
- if (file_exists($gallery_path.$path)) {
- return new \OC_Image($gallery_path.$path);
+ $gallery_storage = \OCP\Files::getStorage('gallery');
+ if ($gallery_storage->file_exists($path)) {
+ return new \OC_Image($gallery_storage->getLocalFile($path));
}
if (!\OC_Filesystem::file_exists($path)) {
\OC_Log::write(self::TAG, 'File '.$path.' don\'t exists', \OC_Log::WARN);
@@ -59,27 +81,39 @@ class ThumbnailsManager {
$image = new \OC_Image();
$image->loadFromFile(\OC_Filesystem::getLocalFile($path));
if (!$image->valid()) return false;
-
+
$image->fixOrientation();
-
- $ret = $image->preciseResize(floor((150*$image->width())/$image->height()), 150);
+
+ $ret = $image->preciseResize( floor((self::THUMBNAIL_HEIGHT*$image->width())/$image->height()), self::THUMBNAIL_HEIGHT );
if (!$ret) {
\OC_Log::write(self::TAG, 'Couldn\'t resize image', \OC_Log::ERROR);
unset($image);
return false;
}
-
- $image->save($gallery_path.'/'.$path);
+ $l = $gallery_storage->getLocalFile($path);
+
+ $image->save($l);
return $image;
}
-
+
+ public function getThumbnailWidth($image) {
+ return floor((self::THUMBNAIL_HEIGHT*$image->widthTopLeft())/$image->heightTopLeft());
+ }
+
public function getThumbnailInfo($path) {
$arr = DatabaseManager::getInstance()->getFileData($path);
if (!$arr) {
- $thubnail = $this->getThumbnail($path);
- unset($thubnail);
- $arr = DatabaseManager::getInstance()->getFileData($path);
+ if (!\OC_Filesystem::file_exists($path)) {
+ \OC_Log::write(self::TAG, 'File '.$path.' don\'t exists', \OC_Log::WARN);
+ return false;
+ }
+ $image = new \OC_Image();
+ $image->loadFromFile(\OC_Filesystem::getLocalFile($path));
+ if (!$image->valid()) {
+ return false;
+ }
+ $arr = DatabaseManager::getInstance()->setFileData($path, $this->getThumbnailWidth($image), self::THUMBNAIL_HEIGHT);
}
$ret = array('filepath' => $arr['path'],
'width' => $arr['width'],
@@ -88,13 +122,12 @@ class ThumbnailsManager {
}
public function delete($path) {
- $thumbnail = \OCP\Config::getSystemValue('datadirectory').'/'.\OC_User::getUser()."/gallery".$path;
- if (file_exists($thumbnail)) {
- unlink($thumbnail);
+ $thumbnail_storage = \OCP\Files::getStorage('gallery');
+ if ($thumbnail_storage->file_exists($path)) {
+ $thumbnail_storage->unlink($path);
}
}
private function __construct() {}
}
-?>
diff --git a/apps/gallery/lib/photo.php b/apps/gallery/lib/photo.php
index 1b4f908773e..f073ac9cbbb 100644
--- a/apps/gallery/lib/photo.php
+++ b/apps/gallery/lib/photo.php
@@ -1,26 +1,25 @@
<?php
/**
-* ownCloud - gallery application
-*
-* @author Bartek Przybylski
-* @copyright 2012 Bartek Przybylski bart.p.pl@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 Lesser General Public
-* License along with this library. If not, see <http://www.gnu.org/licenses/>.
-*
-*/
-
+ * ownCloud - gallery application
+ *
+ * @author Bartek Przybylski
+ * @copyright 2012 Bartek Przybylski bart.p.pl@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 Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
class OC_Gallery_Photo {
public static function create($albumId, $img){
$stmt = OCP\DB::prepare('INSERT INTO `*PREFIX*gallery_photos` (`album_id`, `file_path`) VALUES (?, ?)');
@@ -36,62 +35,95 @@ class OC_Gallery_Photo {
$stmt = OCP\DB::prepare($sql);
return $stmt->execute($args);
}
- public static function findForAlbum($owner, $album_name){
+
+ public static function findForAlbum($owner, $album_name) {
$stmt = OCP\DB::prepare('SELECT *'
- .' FROM `*PREFIX*gallery_photos photos`,'
- .' `*PREFIX*gallery_albums albums`'
- .' WHERE `albums`.`uid_owner` = ?'
- .' AND `albums`.`album_name` = ?'
- .' AND `photos`.`album_id` = `albums`.`album_id`');
+ .' FROM `*PREFIX*gallery_photos photos`,'
+ .' `*PREFIX*gallery_albums albums`'
+ .' WHERE `albums`.`uid_owner` = ?'
+ .' AND `albums`.`album_name` = ?'
+ .' AND `photos`.`album_id` = `albums`.`album_id`');
return $stmt->execute(array($owner, $album_name));
}
- public static function removeByPath($path, $album_id) {
- $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*gallery_photos` WHERE `file_path` LIKE ? AND `album_id` = ?');
+ public static function removeByPath($path, $album_id) {
+ $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*gallery_photos` WHERE `file_path` LIKE ? AND `album_id` = ?');
$stmt->execute(array($path, $album_id));
}
public static function removeById($id) {
- $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*gallery_photos` WHERE `photo_id` = ?');
+ $stmt = OCP\DB::prepare('DELETE FROM *PREFIX*gallery_photos WHERE photo_id = ?');
$stmt->execute(array($id));
}
public static function removeByAlbumId($albumid) {
- $stmt = OCP\DB::prepare('DELETE FROM `*PREFIX*gallery_photos` WHERE `album_id` = ?');
+ $stmt = OCP\DB::prepare('DELETE FROM *PREFIX*gallery_photos WHERE album_id = ?');
$stmt->execute(array($albumid));
}
public static function changePath($oldAlbumId, $newAlbumId, $oldpath, $newpath) {
- $stmt = OCP\DB::prepare("UPDATE `*PREFIX*gallery_photos` SET `file_path` = ?, `album_id` = ? WHERE `album_id` = ? AND `file_path` = ?");
+ $stmt = OCP\DB::prepare("UPDATE *PREFIX*gallery_photos SET file_path = ?, album_id = ? WHERE album_id = ? and file_path = ?");
$stmt->execute(array($newpath, $newAlbumId, $oldAlbumId, $oldpath));
}
public static function getThumbnail($image_name, $owner = null) {
+ if (!$owner)
+ $owner = OCP\USER::getUser();
+ $view = OCP\Files::getStorage('gallery');
+ $save_dir = dirname($image_name);
+ if (!$view->is_dir($save_dir)) {
+ $view->mkdir($save_dir);
+ }
+ $view->chroot($view->getRoot() . '/' . $save_dir);
+ $thumb_file = basename($image_name);
+ if ($view->file_exists($thumb_file)) {
+ $image = new OC_Image($view->fopen($thumb_file, 'r'));
+ } else {
+ $image_path = OC_Filesystem::getLocalFile($image_name);
+ if (!file_exists($image_path)) {
+ return null;
+ }
+ $image = new OC_Image($image_path);
+ if ($image->valid()) {
+ $image->centerCrop(200);
+ $image->fixOrientation();
+ $image->save($view->getLocalFile($thumb_file));
+ }
+ }
+ if ($image->valid()) {
+ return $image;
+ } else {
+ $image->destroy();
+ }
+ return null;
+ }
+
+ public static function getViewImage($image_name, $owner = null) {
if (!$owner) $owner = OCP\USER::getUser();
- $save_dir = OCP\Config::getSystemValue("datadirectory").'/'. $owner .'/gallery/';
- $save_dir .= dirname($image_name). '/';
+ $save_dir = OCP\Config::getSystemValue("datadirectory") . '/' . $owner . '/gallery';
+ $save_dir .= dirname($image_name) . '/view/';
$image_path = $image_name;
- $thumb_file = $save_dir . basename($image_name);
+ $view_file = $save_dir . basename($image_name);
if (!is_dir($save_dir)) {
mkdir($save_dir, 0777, true);
}
- if (file_exists($thumb_file)) {
- $image = new OC_Image($thumb_file);
+ if (file_exists($view_file)) {
+ $image = new OC_Image($view_file);
} else {
$image_path = OC_Filesystem::getLocalFile($image_path);
- if(!file_exists($image_path)) {
+ if (!file_exists($image_path)) {
return null;
}
$image = new OC_Image($image_path);
if ($image->valid()) {
- $image->centerCrop(200);
+ $image->resize(1200);
$image->fixOrientation();
- $image->save($thumb_file);
+ $image->save($view_file);
}
}
if ($image->valid()) {
return $image;
- }else{
+ } else {
$image->destroy();
}
return null;
@@ -100,4 +132,5 @@ class OC_Gallery_Photo {
public static function getGalleryRoot() {
return OCP\Config::getUserValue(OCP\USER::getUser(), 'gallery', 'root', '');
}
+
}
diff --git a/apps/gallery/lib/scanner.php b/apps/gallery/lib/scanner.php
index b6c402022bc..79b8ad4923e 100644
--- a/apps/gallery/lib/scanner.php
+++ b/apps/gallery/lib/scanner.php
@@ -81,7 +81,8 @@ class OC_Gallery_Scanner {
$image->destroy();
}
}
- imagepng($thumbnail, OCP\Config::getSystemValue("datadirectory").'/'. OCP\USER::getUser() .'/gallery/' . $albumName.'.png');
+ $view = OCP\Files::getStorage('gallery');
+ imagepng($thumbnail, $view->getLocalFile($albumName.'.png'));
imagedestroy($thumbnail);
}
diff --git a/apps/gallery/lib/share.php b/apps/gallery/lib/share.php
new file mode 100644
index 00000000000..d6c5f40d492
--- /dev/null
+++ b/apps/gallery/lib/share.php
@@ -0,0 +1,42 @@
+<?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/>.
+*/
+
+abstract class OC_Share_Photo_Backend implements OCP\Share_Backend {
+
+ public $dependsOn = 'file';
+ public $supportedFileExtensions = array('jpg', 'png', 'gif');
+
+ public function getSource($item, $uid) {
+ return array('item' => 'blah.jpg', 'file' => $item);
+ }
+
+ public function generateTarget($item, $uid, $exclude = null) {
+ // TODO Make sure target path doesn't exist already
+ return $item;
+ }
+
+ public function formatItems($items, $format, $parameters = null) {
+
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/apps/gallery/lib/tiles.php b/apps/gallery/lib/tiles.php
index 53ea97ff05d..e36d26d3191 100644
--- a/apps/gallery/lib/tiles.php
+++ b/apps/gallery/lib/tiles.php
@@ -33,7 +33,7 @@ class TilesLine {
}
public function setAvailableSpace($space) {
- $available_space = $space;
+ $this->available_space = $space;
}
public function getTilesCount() {
@@ -95,7 +95,7 @@ class TileSingle extends TileBase {
public function get($extra = '') {
// !HACK! file path needs to be encoded twice because files app decode twice url, so any special chars like + or & in filename
// !HACK! will result in failing of opening them
- return '<a rel="images" title="'.htmlentities(basename($this->getPath())).'" href="'.\OCP\Util::linkTo('files', 'download.php').'?file='.urlencode(urlencode($this->getPath())).'"><img rel="images" src="'.\OCP\Util::linkTo('gallery', 'ajax/thumbnail.php').'&filepath='.urlencode($this->getPath()).'" '.$extra.'></a>';
+ return '<a rel="images" title="'.htmlentities(basename($this->getPath())).'" href="'.\OCP\Util::linkTo('gallery','ajax/viewImage.php').'?img='.urlencode(urlencode($this->getPath())).'"><img rel="images" src="'.\OCP\Util::linkTo('gallery', 'ajax/thumbnail.php').'&filepath='.urlencode($this->getPath()).'" '.$extra.'></a>';
}
public function getMiniatureSrc() {
@@ -168,11 +168,9 @@ class TileStack extends TileBase {
}
public function getOnClickAction() {
- return 'javascript:openNewGal(\''.htmlentities($this->stack_name).'\');';
+ return 'javascript:openNewGal(\''.rawurlencode($this->stack_name).'\');';
}
private $tiles_array;
private $stack_name;
}
-
-?>
diff --git a/apps/gallery/lib/tiles_test.php b/apps/gallery/lib/tiles_test.php
index 022a88f75cc..02d567c628d 100644
--- a/apps/gallery/lib/tiles_test.php
+++ b/apps/gallery/lib/tiles_test.php
@@ -83,5 +83,3 @@ if ($ts->getCount() != 0) {
}
echo $tl->get();
-
-?>
diff --git a/apps/gallery/templates/index.php b/apps/gallery/templates/index.php
index a41bf3c47ba..b2efd5342ff 100644
--- a/apps/gallery/templates/index.php
+++ b/apps/gallery/templates/index.php
@@ -1,52 +1,6 @@
-<?php
-
-$l = OC_L10N::get('gallery');
-$root = !empty($_GET['root']) ? $_GET['root'] : '/';
-?>
-<style>
-div.gallery_div {position:relative; display: inline-block; height: 152px; width: 150px; margin: 5px;}
-div.miniature_border {position:absolute; height: 150px; -moz-transition-duration: 0.2s; -o-transition-duration:0.2s; -webkit-transition-duration: .2s; background-position: 50%;}
-div.line {display:inline-block; border: 0; width: auto; height: 160px}
-div.gallery_div img{position:absolute; top: 1; left: 0; -moz-transition-duration: 0.3s; -o-transition-duration:0.3s; -webkit-transition-duration: 0.3s; height:150px; width: auto;}
-div.gallery_div img.shrinker {width:80px !important;}
-div.title { opacity: 0; text-align: center; vertical-align: middle; font-family: Arial; font-size: 12px; border: 0; position: absolute; text-overflow: ellipsis; bottom: 20px; right:-5px; height:auto; padding: 5px; width: 140px; background-color: black; color: white; -webkit-transition: opacity 0.5s; z-index:1000; border-radius: 7px}
-div.visible { opacity: 0.8;}
-</style>
<script type="text/javascript">
-var root = "<?php echo htmlentities($root); ?>";
-
-function explode(element) {
- $('div', element).each(function(index, elem) {
- if ($(elem).hasClass('title')) {
- $(elem).addClass('visible');
- } else {
- $(elem).css('margin-top', Math.floor(30-(Math.random()*60)) + 'px')
- .css('margin-left', Math.floor(30-(Math.random()*60))+ 'px')
- .css('z-index', '999');
- }
- });
-}
-
-function deplode(element) {
- $('div', element).each(function(index, elem) {
- if ($(elem).hasClass('title')) {
- $(elem).removeClass('visible');
- } else {
- $(elem).css('margin-top', Math.floor(5-(Math.random()*10)) + 'px')
- .css('margin-left', Math.floor(5-(Math.random()*10))+ 'px')
- .css('z-index', '3');
- }
- });
-}
-
-function openNewGal(album_name) {
- root = root + album_name + "/";
- var url = window.location.toString().replace(window.location.search, '');
- url = url + "?app=gallery&root="+encodeURIComponent(root);
-
- window.location = url;
-}
+var root = "<?php echo $_['root']; ?>";
$(document).ready(function() {
$("a[rel=images]").fancybox({
@@ -57,85 +11,74 @@ $(document).ready(function() {
</script>
<div id="controls"><?php
- $sr = trim($root, '/');
+ $sr = trim($_['root'], '/');
if (!empty($sr)) {
$paths = explode('/', $sr);
$path = '/';
for ($i = 0; $i < count($paths); $i++) {
$path .= urlencode($paths[$i]).'/';
$classess = 'crumb'.($i == count($paths)-1?' last':'');
- echo '<div class="'.$classess.'" style="background-image:url(\''.\OCP\image_path('core','breadcrumb.png').'\')"><a href="'.\OCP\Util::linkTo('gallery', 'index.php').'&root='.$path.'">'.\OCP\Util::sanitizeHTML($paths[$i]).'</a></div>';
+ echo '<div class="'.$classess.'" style="background-image:url(\''.\OCP\image_path('core','breadcrumb.png').'\')"><a href="'.\OCP\Util::linkTo('gallery', 'index.php').'&root='.$path.'">'.OCP\Util::sanitizeHTML($paths[$i]).'</a></div>';
}
}
-?> <!--<a href="javascript:shareGallery();"><input type="button" value="<?php echo $l->t('Share');?>" /></a>--><br/>
+?>
+ <div id="slideshow">
+ <input type="button" class="start" value="<?php echo $l->t('Slideshow')?>" />
+ </div>
</div>
<div id="gallerycontent">
<?php
+session_write_close();
-include('apps/gallery/lib/tiles.php');
-$root = empty($_GET['root'])?'/':$_GET['root'];
-
-$images = \OC_FileCache::searchByMime('image', null, '/'.\OCP\USER::getUser().'/files'.$root);
-sort($images);
-
-$tl = new \OC\Pictures\TilesLine();
-$ts = new \OC\Pictures\TileStack(array(), '');
-$previous_element = @$images[0];
-
-$root_images = array();
-$second_level_images = array();
-
-$fallback_images = array(); // if the folder only cotains subfolders with images -> these are taken for the stack preview
-
-for($i = 0; $i < count($images); $i++) {
- $prev_dir_arr = explode('/', $previous_element);
- $dir_arr = explode('/', $images[$i]);
-
- if(count($dir_arr) == 1) { // getting the images in this directory
- $root_images[] = $root.$images[$i];
- } else {
- if(strcmp($prev_dir_arr[0], $dir_arr[0]) != 0) { // if we entered a new directory
- if(count($second_level_images) == 0) { // if we don't have images in this directory
- if(count($fallback_images) != 0) { // but have fallback_images
- $tl->addTile(new \OC\Pictures\TileStack($fallback_images, $prev_dir_arr[0]));
- $fallback_images = array();
- }
- } else { // if we collected images for this directory
- $tl->addTile(new \OC\Pictures\TileStack($second_level_images, $prev_dir_arr[0]));
- $fallback_images = array();
- $second_level_images = array();
- }
- }
- if (count($dir_arr) == 2) { // These are the pics in our current subdir
- $second_level_images[] = $root.$images[$i];
- $fallback_images = array();
- } else { // These are images from the deeper directories
- if(count($second_level_images) == 0) {
- $fallback_images[] = $root.$images[$i];
- }
- }
- // have us a little something to compare against
- $previous_element = $images[$i];
- }
-}
+echo $_['tl']->get();
-// if last element in the directory was a directory we don't want to miss it :)
-if(count($second_level_images)>0) {
- $tl->addTile(new \OC\Pictures\TileStack($second_level_images, $prev_dir_arr[0]));
-}
+?>
+</div>
-// if last element in the directory was a directory with no second_level_images we also don't want to miss it ...
-if(count($fallback_images)>0) {
- $tl->addTile(new \OC\Pictures\TileStack($fallback_images, $prev_dir_arr[0]));
-}
+<!-- start supersized block -->
+<div id="slideshow-content" style="display:none;">
-// and finally our images actually stored in the root folder
-for($i = 0; $i<count($root_images); $i++) {
- $tl->addTile(new \OC\Pictures\TileSingle($root_images[$i]));
-}
+ <!--Thumbnail Navigation-->
+ <div id="prevthumb"></div>
+ <div id="nextthumb"></div>
-echo $tl->get();
+ <!--Arrow Navigation-->
+ <a id="prevslide" class="load-item"></a>
+ <a id="nextslide" class="load-item"></a>
-?>
-</div>
+ <div id="thumb-tray" class="load-item">
+ <div id="thumb-back"></div>
+ <div id="thumb-forward"></div>
+ </div>
+
+ <!--Time Bar-->
+ <div id="progress-back" class="load-item">
+ <div id="progress-bar"></div>
+ </div>
+
+ <!--Control Bar-->
+ <div id="slideshow-controls-wrapper" class="load-item">
+ <div id="slideshow-controls">
+
+ <a id="play-button"><img id="pauseplay" src="<?php echo OCP\image_path('gallery', 'supersized/pause.png'); ?>"/></a>
+
+ <!--Slide counter-->
+ <div id="slidecounter">
+ <span class="slidenumber"></span> / <span class="totalslides"></span>
+ </div>
+
+ <!--Slide captions displayed here-->
+ <div id="slidecaption"></div>
+
+ <!--Thumb Tray button-->
+ <a id="tray-button"><img id="tray-arrow" src="<?php echo OCP\image_path('gallery', 'supersized/button-tray-up.png'); ?>"/></a>
+
+ <!--Navigation-->
+ <!--
+ <ul id="slide-list"></ul>
+ -->
+ </div>
+ </div>
+
+</div><!-- end supersized block -->
diff --git a/apps/gallery/templates/view_album.php b/apps/gallery/templates/view_album.php
deleted file mode 100644
index c16ed69c065..00000000000
--- a/apps/gallery/templates/view_album.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-OCP\Util::addStyle('gallery', 'styles');
-OCP\Util::addscript('gallery', 'albums');
-OCP\Util::addscript('gallery', 'album_cover');
-OCP\Util::addscript('files_imageviewer', 'jquery.mousewheel-3.0.4.pack');
-OCP\Util::addscript('files_imageviewer', 'jquery.fancybox-1.3.4.pack');
-OCP\Util::addStyle( 'files_imageviewer', 'jquery.fancybox-1.3.4' );
-$l = OC_L10N::get('gallery');
-?>
-<script type="text/javascript">
- $(document).ready(function() {
- $("a[rel=images]").fancybox({
- 'titlePosition': 'inside'
- });
- });
-</script>
-
-<div id="controls">
- <a href="?"><input type="button" value="<?php echo $l->t('Back');?>" /></a>
-<br/>
-</div>
-
-<div id="gallery_list" class="leftcontent">
-</div>
-
-<div id="gallery_images" class="rightcontent">
-<?php
-foreach ($_['photos'] as $a) {
-?>
-<a rel="images" href="../../files/download.php?file=<?php echo urlencode($a); ?>"><img src="ajax/thumbnail.php?img=<?php echo urlencode($a) ?>"></a>
-<?php
- }
-?>
-</div>
-
-<div id="dialog-confirm" title="<?php echo $l->t('Remove confirmation');?>" style="display: none">
- <p><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span><?php echo $l->t('Do you want to remove album');?> <span id="albumName"></span>?</p>
-</div>
-
-<div id="dialog-form" title="<?php echo $l->t('Change album name');?>" style="display:none">
- <form>
- <fieldset>
- <label for="name"><?php echo $l->t('New album name');?></label>
- <input type="text" name="name" id="name" class="text ui-widget-content ui-corner-all" />
- </fieldset>
- </form>
-</div>
diff --git a/apps/impress/appinfo/app.php b/apps/impress/appinfo/app.php
new file mode 100644
index 00000000000..82f098a030d
--- /dev/null
+++ b/apps/impress/appinfo/app.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * ownCloud - Impress App
+ *
+ * @author Frank Karlitschek
+ * @copyright 2011 Frank Karlitschek karlitschek@kde.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 Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+OCP\Util::addStyle( 'impress', 'style');
+
+OCP\App::register(array('order' => 70, 'id' => 'impress', 'name' => 'Impress'));
+
+OCP\App::addNavigationEntry(array(
+ 'id' => 'impress_index',
+ 'order' => 80,
+ 'href' => OCP\Util::linkTo('impress', 'index.php'),
+ 'icon' => OCP\Util::imagePath('impress', 'impress.png'),
+ 'name' => 'Impress')
+);
+
+
+
+?>
diff --git a/apps/impress/appinfo/info.xml b/apps/impress/appinfo/info.xml
new file mode 100644
index 00000000000..0be9c170f65
--- /dev/null
+++ b/apps/impress/appinfo/info.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<info>
+ <id>impress</id>
+ <name>Impress</name>
+ <description>A Player for impress presentations. Many thanks to Bartek Szopka for creating the wonderful impress.js library who made this app possible.</description>
+ <licence>AGPL</licence>
+ <author>Frank Karlitschek</author>
+ <require>4</require>
+ <shipped>true</shipped>
+</info>
diff --git a/apps/impress/appinfo/version b/apps/impress/appinfo/version
new file mode 100644
index 00000000000..9f8e9b69a33
--- /dev/null
+++ b/apps/impress/appinfo/version
@@ -0,0 +1 @@
+1.0 \ No newline at end of file
diff --git a/apps/impress/css/player.css b/apps/impress/css/player.css
new file mode 100644
index 00000000000..0ed7130fd0b
--- /dev/null
+++ b/apps/impress/css/player.css
@@ -0,0 +1,703 @@
+/*
+ So you like the style of impress.js demo?
+ Or maybe you are just curious how it was done?
+
+ You couldn't find a better place to find out!
+
+ Welcome to the stylesheet impress.js demo presentation.
+
+ Please remember that it is not meant to be a part of impress.js and is
+ not required by impress.js.
+ I expect that anyone creating a presentation for impress.js would create
+ their own set of styles.
+
+ But feel free to read through it and learn how to get the most of what
+ impress.js provides.
+
+ And let me be your guide.
+
+ Shall we begin?
+*/
+
+
+/*
+ We start with a good ol' reset.
+ That's the one by Eric Meyer http://meyerweb.com/eric/tools/css/reset/
+
+ You can probably argue if it is needed here, or not, but for sure it
+ doesn't do any harm and gives us a fresh start.
+*/
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+
+/* HTML5 display-role reset for older browsers */
+article, aside, details, figcaption, figure,
+footer, header, hgroup, menu, nav, section {
+ display: block;
+}
+body {
+ line-height: 1;
+}
+ol, ul {
+ list-style: none;
+}
+blockquote, q {
+ quotes: none;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+ content: '';
+ content: none;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+/*
+ Now here is when interesting things start to appear.
+
+ We set up <body> styles with default font and nice gradient in the background.
+ And yes, there is a lot of repetition there because of -prefixes but we don't
+ want to leave anybody behind.
+*/
+body {
+ font-family: 'PT Sans', sans-serif;
+ min-height: 740px;
+
+ background: rgb(215, 215, 215);
+ background: -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 500, from(rgb(240, 240, 240)), to(rgb(190, 190, 190)));
+ background: -webkit-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
+ background: -moz-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
+ background: -ms-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
+ background: -o-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
+ background: radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
+}
+
+/*
+ Now let's bring some text styles back ...
+*/
+b, strong { font-weight: bold }
+i, em { font-style: italic }
+
+/*
+ ... and give links a nice look.
+*/
+a {
+ color: inherit;
+ text-decoration: none;
+ padding: 0 0.1em;
+ background: rgba(255,255,255,0.5);
+ text-shadow: -1px -1px 2px rgba(100,100,100,0.9);
+ border-radius: 0.2em;
+
+ -webkit-transition: 0.5s;
+ -moz-transition: 0.5s;
+ -ms-transition: 0.5s;
+ -o-transition: 0.5s;
+ transition: 0.5s;
+}
+
+a:hover,
+a:focus {
+ background: rgba(255,255,255,1);
+ text-shadow: -1px -1px 2px rgba(100,100,100,0.5);
+}
+
+/*
+ Because the main point behind the impress.js demo is to demo impress.js
+ we display a fallback message for users with browsers that don't support
+ all the features required by it.
+
+ All of the content will be still fully accessible for them, but I want
+ them to know that they are missing something - that's what the demo is
+ about, isn't it?
+
+ And then we hide the message, when support is detected in the browser.
+*/
+
+.fallback-message {
+ font-family: sans-serif;
+ line-height: 1.3;
+
+ width: 780px;
+ padding: 10px 10px 0;
+ margin: 20px auto;
+
+ border: 1px solid #E4C652;
+ border-radius: 10px;
+ background: #EEDC94;
+}
+
+.fallback-message p {
+ margin-bottom: 10px;
+}
+
+.impress-supported .fallback-message {
+ display: none;
+}
+
+/*
+ Now let's style the presentation steps.
+
+ We start with basics to make sure it displays correctly in everywhere ...
+*/
+
+.step {
+ position: relative;
+ width: 900px;
+ padding: 40px;
+ margin: 20px auto;
+
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ -ms-box-sizing: border-box;
+ -o-box-sizing: border-box;
+ box-sizing: border-box;
+
+ font-family: 'PT Serif', georgia, serif;
+ font-size: 48px;
+ line-height: 1.5;
+}
+
+/*
+ ... and we enhance the styles for impress.js.
+
+ Basically we remove the margin and make inactive steps a little bit transparent.
+*/
+.impress-enabled .step {
+ margin: 0;
+ opacity: 0.3;
+
+ -webkit-transition: opacity 1s;
+ -moz-transition: opacity 1s;
+ -ms-transition: opacity 1s;
+ -o-transition: opacity 1s;
+ transition: opacity 1s;
+}
+
+.impress-enabled .step.active { opacity: 1 }
+
+/*
+ These 'slide' step styles were heavily inspired by HTML5 Slides:
+ http://html5slides.googlecode.com/svn/trunk/styles.css
+
+ ;)
+
+ They cover everything what you see on first three steps of the demo.
+*/
+.slide {
+ display: block;
+
+ width: 900px;
+ height: 700px;
+ padding: 40px 60px;
+
+ background-color: white;
+ border: 1px solid rgba(0, 0, 0, .3);
+ border-radius: 10px;
+ box-shadow: 0 2px 6px rgba(0, 0, 0, .1);
+
+ color: rgb(102, 102, 102);
+ text-shadow: 0 2px 2px rgba(0, 0, 0, .1);
+
+ font-family: 'Open Sans', Arial, sans-serif;
+ font-size: 30px;
+ line-height: 36px;
+ letter-spacing: -1px;
+}
+
+.slide q {
+ display: block;
+ font-size: 50px;
+ line-height: 72px;
+
+ margin-top: 100px;
+}
+
+.slide q strong {
+ white-space: nowrap;
+}
+
+/*
+ And now we start to style each step separately.
+
+ I agree that this may be not the most efficient, object-oriented and
+ scalable way of styling, but most of steps have quite a custom look
+ and typography tricks here and there, so they had to be styles separately.
+
+ First is the title step with a big <h1> (no room for padding) and some
+ 3D positioning along Z axis.
+*/
+
+#title {
+ padding: 0;
+}
+
+#title .try {
+ font-size: 64px;
+ position: absolute;
+ top: -0.5em;
+ left: 1.5em;
+
+ -webkit-transform: translateZ(20px);
+ -moz-transform: translateZ(20px);
+ -ms-transform: translateZ(20px);
+ -o-transform: translateZ(20px);
+ transform: translateZ(20px);
+}
+
+#title h1 {
+ font-size: 190px;
+
+ -webkit-transform: translateZ(50px);
+ -moz-transform: translateZ(50px);
+ -ms-transform: translateZ(50px);
+ -o-transform: translateZ(50px);
+ transform: translateZ(50px);
+}
+
+#title .footnote {
+ font-size: 32px;
+}
+
+/*
+ Second step is nothing special, just a text with a link, so it doesn't need
+ any special styling.
+
+ Let's move to 'big thoughts' with centered text and custom font sizes.
+*/
+#big {
+ width: 600px;
+ text-align: center;
+ font-size: 60px;
+ line-height: 1;
+}
+
+#big b {
+ display: block;
+ font-size: 250px;
+ line-height: 250px;
+}
+
+#big .thoughts {
+ font-size: 90px;
+ line-height: 150px;
+}
+
+/*
+ 'Tiny ideas' just need some tiny styling.
+*/
+#tiny {
+ width: 500px;
+ text-align: center;
+}
+
+/*
+ This step has some animated text ...
+*/
+#ing { width: 500px }
+
+/*
+ ... so we define display to `inline-block` to enable transforms and
+ transition duration to 0.5s ...
+*/
+#ing b {
+ display: inline-block;
+ -webkit-transition: 0.5s;
+ -moz-transition: 0.5s;
+ -ms-transition: 0.5s;
+ -o-transition: 0.5s;
+ transition: 0.5s;
+}
+
+/*
+ ... and we want 'positioning` word to move up a bit when the step gets
+ `present` class ...
+*/
+#ing.present .positioning {
+ -webkit-transform: translateY(-10px);
+ -moz-transform: translateY(-10px);
+ -ms-transform: translateY(-10px);
+ -o-transform: translateY(-10px);
+ transform: translateY(-10px);
+}
+
+/*
+ ... 'rotating' to rotate quater of a second later ...
+*/
+#ing.present .rotating {
+ -webkit-transform: rotate(-10deg);
+ -moz-transform: rotate(-10deg);
+ -ms-transform: rotate(-10deg);
+ -o-transform: rotate(-10deg);
+ transform: rotate(-10deg);
+
+ -webkit-transition-delay: 0.25s;
+ -moz-transition-delay: 0.25s;
+ -ms-transition-delay: 0.25s;
+ -o-transition-delay: 0.25s;
+ transition-delay: 0.25s;
+}
+
+/*
+ ... and 'scaling' to scale down after another quater of a second.
+*/
+#ing.present .scaling {
+ -webkit-transform: scale(0.7);
+ -moz-transform: scale(0.7);
+ -ms-transform: scale(0.7);
+ -o-transform: scale(0.7);
+ transform: scale(0.7);
+
+ -webkit-transition-delay: 0.5s;
+ -moz-transition-delay: 0.5s;
+ -ms-transition-delay: 0.5s;
+ -o-transition-delay: 0.5s;
+ transition-delay: 0.5s;
+}
+
+/*
+ The 'imagination' step is again some boring font-sizing.
+*/
+
+#imagination {
+ width: 600px;
+}
+
+#imagination .imagination {
+ font-size: 78px;
+}
+
+/*
+ There is nothing really special about 'use the source, Luke' step, too,
+ except maybe of the Yoda background.
+
+ As you can see below I've 'hard-coded' it in data URL.
+ That's not the best way to serve images, but because that's just this one
+ I decided it will be OK to have it this way.
+
+ Just make sure you don't blindly copy this approach.
+*/
+#source {
+ width: 700px;
+ padding-bottom: 300px;
+
+ /* Yoda Icon :: Pixel Art from Star Wars http://www.pixeljoint.com/pixelart/1423.htm */
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARgAAAEYCAMAAACwUBm+AAAAAXNSR0IArs4c6QAAAKtQTFRFsAAAvbWSLUUrLEQqY1s8UYJMqJ1vNTEgOiIdIzYhjIFVLhsXZ6lgSEIsP2U8JhcCVzMsSXZEgXdOO145XJdWOl03LzAYMk4vSXNExr+hwcuxRTs1Qmk+RW9Am49eFRANQz4pUoNMQWc+OSMDTz0wLBsCNVMxa2NBOyUDUoNNSnlEWo9VRGxAVzYFl6tXCggHbLNmMUIcHhwTXkk5f3VNRT8wUT8xAAAACQocRBWFFwAAAAF0Uk5TAEDm2GYAAAPCSURBVHja7d3JctNAFIZRMwRCCGEmzPM8z/D+T8bu/ptbXXJFdij5fMt2Wuo+2UgqxVmtttq5WVotLzBgwIABAwYMGDCn0qVqbo69psPqVpWx+1XG5iaavF8wYMCAAQMGDBgwi4DJ6Y6qkxB1HNlcN3a92gbR5P2CAQMGDBgwYMCAWSxMlrU+UY5yu2l9okfV4bAxUVbf7TJnAwMGDBgwYMCAAbMLMHeqbGR82Zy+VR1Ht81nVca6R+UdTLaU24Ruzd3qM/e4yjnAgAEDBgwYMGDA7AJMd1l/3NRdVGcj3eX/2WEhCmDGxnM7yqygu8XIPjJj8iN/MGDAgAEDBgwYMAuDGb8q0RGlLCHLv1t9qDKWn3vdNHVuEI6HPaxO9Jo3GDBgwIABAwYMmIXBdC9ShGgMk+XnkXUeuGcsP/e1+lhNnZsL/G5Vs3OAAQMGDBgwYMCAWSxMR3SzOmraG5atdy9wZKzb+vg16qyqe2FltbnAgAEDBgwYMGDALAxmTJSuN3WA76rnVca6GTnemGN1WoEBAwYMGDBgwIBZGMxUomy4+xO899V4LAg5Xnc2MGDAgAEDBgwYMGA218Wq+2K1LDqvY9xZu8zN8fICdM6btYABAwYMGDBgwIABMzfH0+pGU5afze2tXebmeAfVz+p8BQYMGDBgwIABAwbMPBzZ+oWmfJrln1273FhkbHzee9WWbw7AgAEDBgwYMGDALAKm43hcdctKgblcPamOhuXnXlY5Xs6bsW4FGyQCAwYMGDBgwIABswiYMceZKgvMo+h8mrHLTdn676rj+FEFoTtHd8MwOxEYMGDAgAEDBgyYRcBM5UhXqiymW3R3c9ARhWO/OmjqfjVZy+xEYMCAAQMGDBgwYBYG073OnCV0RFNhMhaOa9WfKmOB6XjHMN1tQmaAAQMGDBgwYMCA2VWY7vXjz1U4croAzgPztwIDBgwYMGDAgAEDZhswh035NBw59Dww3RgYMGDAgAEDBgwYMJuD6f4tXT7NUqfCdBvZLkxXdgQGDBgwYMCAAQNmt2DGj8WzwAfV/w7T/aq7mxwwYMCAAQMGDBgwuwqTOo7uTwTngflSzQ3TdaJvAwEDBgwYMGDAgAED5gSvgbyo5oHZ4Pc+gwEDBgwYMGDAgAEzhOm+5G0qTGaAAQMGDBgwYMCAAXNaMOcnls3tNwWm+zRzp54NDBgwYMCAAQMGDJh5YNL36k1TLuGvVq+qnKMbS5n7tulT9asCAwYMGDBgwIABA2ZumKuztLnjgQEDBgwYMGDAgNl5mH/4/ltKA6vBNAAAAABJRU5ErkJggg==);
+ background-position: bottom right;
+ background-repeat: no-repeat;
+}
+
+#source q {
+ font-size: 60px;
+}
+
+/*
+ And the "it's in 3D" step again brings some 3D typography - just for fun.
+
+ Because we want to position <span> elements in 3D we set transform-style to
+ `preserve-3d` on the paragraph.
+ It is not needed by webkit browsers, but it is in Firefox. It's hard to say
+ which behaviour is correct as 3D transforms spec is not very clear about it.
+*/
+#its-in-3d p {
+ -webkit-transform-style: preserve-3d;
+ -moz-transform-style: preserve-3d; /* Y U need this Firefox?! */
+ -ms-transform-style: preserve-3d;
+ -o-transform-style: preserve-3d;
+ transform-style: preserve-3d;
+}
+
+/*
+ Below we position each word separately along Z axis and we want it to transition
+ to default position in 0.5s when the step gets `present` class.
+
+ Quite a simple idea, but lot's of styles and prefixes.
+*/
+#its-in-3d span,
+#its-in-3d b {
+ display: inline-block;
+ -webkit-transform: translateZ(40px);
+ -moz-transform: translateZ(40px);
+ -ms-transform: translateZ(40px);
+ -o-transform: translateZ(40px);
+ transform: translateZ(40px);
+
+ -webkit-transition: 0.5s;
+ -moz-transition: 0.5s;
+ -ms-transition: 0.5s;
+ -o-transition: 0.5s;
+ transition: 0.5s;
+}
+
+#its-in-3d .have {
+ -webkit-transform: translateZ(-40px);
+ -moz-transform: translateZ(-40px);
+ -ms-transform: translateZ(-40px);
+ -o-transform: translateZ(-40px);
+ transform: translateZ(-40px);
+}
+
+#its-in-3d .you {
+ -webkit-transform: translateZ(20px);
+ -moz-transform: translateZ(20px);
+ -ms-transform: translateZ(20px);
+ -o-transform: translateZ(20px);
+ transform: translateZ(20px);
+}
+
+#its-in-3d .noticed {
+ -webkit-transform: translateZ(-40px);
+ -moz-transform: translateZ(-40px);
+ -ms-transform: translateZ(-40px);
+ -o-transform: translateZ(-40px);
+ transform: translateZ(-40px);
+}
+
+#its-in-3d .its {
+ -webkit-transform: translateZ(60px);
+ -moz-transform: translateZ(60px);
+ -ms-transform: translateZ(60px);
+ -o-transform: translateZ(60px);
+ transform: translateZ(60px);
+}
+
+#its-in-3d .in {
+ -webkit-transform: translateZ(-10px);
+ -moz-transform: translateZ(-10px);
+ -ms-transform: translateZ(-10px);
+ -o-transform: translateZ(-10px);
+ transform: translateZ(-10px);
+}
+
+#its-in-3d .footnote {
+ font-size: 32px;
+
+ -webkit-transform: translateZ(-10px);
+ -moz-transform: translateZ(-10px);
+ -ms-transform: translateZ(-10px);
+ -o-transform: translateZ(-10px);
+ transform: translateZ(-10px);
+}
+
+#its-in-3d.present span,
+#its-in-3d.present b {
+ -webkit-transform: translateZ(0px);
+ -moz-transform: translateZ(0px);
+ -ms-transform: translateZ(0px);
+ -o-transform: translateZ(0px);
+ transform: translateZ(0px);
+}
+
+/*
+ The last step is an overview.
+ There is no content in it, so we make sure it's not visible because we want
+ to be able to click on other steps.
+
+*/
+#overview { display: none }
+
+/*
+ We also make other steps visible and give them a pointer cursor using the
+ `impress-on-` class.
+*/
+.impress-on-overview .step {
+ opacity: 1;
+ cursor: pointer;
+}
+
+
+/*
+ Now, when we have all the steps styled let's give users a hint how to navigate
+ around the presentation.
+
+ The best way to do this would be to use JavaScript, show a delayed hint for a
+ first time users, then hide it and store a status in cookie or localStorage...
+
+ But I wanted to have some CSS fun and avoid additional scripting...
+
+ Let me explain it first, so maybe the transition magic will be more readable
+ when you read the code.
+
+ First of all I wanted the hint to appear only when user is idle for a while.
+ You can't detect the 'idle' state in CSS, but I delayed a appearing of the
+ hint by 5s using transition-delay.
+
+ You also can't detect in CSS if the user is a first-time visitor, so I had to
+ make an assumption that I'll only show the hint on the first step. And when
+ the step is changed hide the hint, because I can assume that user already
+ knows how to navigate.
+
+ To summarize it - hint is shown when the user is on the first step for longer
+ than 5 seconds.
+
+ The other problem I had was caused by the fact that I wanted the hint to fade
+ in and out. It can be easily achieved by transitioning the opacity property.
+ But that also meant that the hint was always on the screen, even if totally
+ transparent. It covered part of the screen and you couldn't correctly clicked
+ through it.
+ Unfortunately you cannot transition between display `block` and `none` in pure
+ CSS, so I needed a way to not only fade out the hint but also move it out of
+ the screen.
+
+ I solved this problem by positioning the hint below the bottom of the screen
+ with CSS transform and moving it up to show it. But I also didn't want this move
+ to be visible. I wanted the hint only to fade in and out visually, so I delayed
+ the fade in transition, so it starts when the hint is already in its correct
+ position on the screen.
+
+ I know, it sounds complicated ... maybe it would be easier with the code?
+*/
+
+.hint {
+ /*
+ We hide the hint until presentation is started and from browsers not supporting
+ impress.js, as they will have a linear scrollable view ...
+ */
+ display: none;
+
+ /*
+ ... and give it some fixed position and nice styles.
+ */
+ position: fixed;
+ left: 0;
+ right: 0;
+ bottom: 200px;
+
+ background: rgba(0,0,0,0.5);
+ color: #EEE;
+ text-align: center;
+
+ font-size: 50px;
+ padding: 20px;
+
+ z-index: 100;
+
+ /*
+ By default we don't want the hint to be visible, so we make it transparent ...
+ */
+ opacity: 0;
+
+ /*
+ ... and position it below the bottom of the screen (relative to it's fixed position)
+ */
+ -webkit-transform: translateY(400px);
+ -moz-transform: translateY(400px);
+ -ms-transform: translateY(400px);
+ -o-transform: translateY(400px);
+ transform: translateY(400px);
+
+ /*
+ Now let's imagine that the hint is visible and we want to fade it out and move out
+ of the screen.
+
+ So we define the transition on the opacity property with 1s duration and another
+ transition on transform property delayed by 1s so it will happen after the fade out
+ on opacity finished.
+
+ This way user will not see the hint moving down.
+ */
+ -webkit-transition: opacity 1s, -webkit-transform 0.5s 1s;
+ -moz-transition: opacity 1s, -moz-transform 0.5s 1s;
+ -ms-transition: opacity 1s, -ms-transform 0.5s 1s;
+ -o-transition: opacity 1s, -o-transform 0.5s 1s;
+ transition: opacity 1s, transform 0.5s 1s;
+}
+
+/*
+ Now we 'enable' the hint when presentation is initialized ...
+*/
+.impress-enabled .hint { display: block }
+
+/*
+ ... and we will show it when the first step (with id 'bored') is active.
+*/
+.impress-on-bored .hint {
+ /*
+ We remove the transparency and position the hint in its default fixed
+ position.
+ */
+ opacity: 1;
+
+ -webkit-transform: translateY(0px);
+ -moz-transform: translateY(0px);
+ -ms-transform: translateY(0px);
+ -o-transform: translateY(0px);
+ transform: translateY(0px);
+
+ /*
+ Now for fade in transition we have the oposite situation from the one
+ above.
+
+ First after 4.5s delay we animate the transform property to move the hint
+ into its correct position and after that we fade it in with opacity
+ transition.
+ */
+ -webkit-transition: opacity 1s 5s, -webkit-transform 0.5s 4.5s;
+ -moz-transition: opacity 1s 5s, -moz-transform 0.5s 4.5s;
+ -ms-transition: opacity 1s 5s, -ms-transform 0.5s 4.5s;
+ -o-transition: opacity 1s 5s, -o-transform 0.5s 4.5s;
+ transition: opacity 1s 5s, transform 0.5s 4.5s;
+}
+
+/*
+ And as the last thing there is a workaround for quite strange bug.
+ It happens a lot in Chrome. I don't remember if I've seen it in Firefox.
+
+ Sometimes the element positioned in 3D (especially when it's moved back
+ along Z axis) is not clickable, because it falls 'behind' the <body>
+ element.
+
+ To prevent this, I decided to make <body> non clickable by setting
+ pointer-events property to `none` value.
+ Value if this property is inherited, so to make everything else clickable
+ I bring it back on the #impress element.
+
+ If you want to know more about `pointer-events` here are some docs:
+ https://developer.mozilla.org/en/CSS/pointer-events
+
+ There is one very important thing to notice about this workaround - it makes
+ everything 'unclickable' except what's in #impress element.
+
+ So use it wisely ... or don't use at all.
+*/
+.impress-enabled { pointer-events: none }
+.impress-enabled #impress { pointer-events: auto }
+
+/*
+ There is one funny thing I just realized.
+
+ Thanks to this workaround above everything except #impress element is invisible
+ for click events. That means that the hint element is also not clickable.
+ So basically all of this transforms and delayed transitions trickery was probably
+ not needed at all...
+
+ But it was fun to learn about it, wasn't it?
+*/
+
+/*
+ That's all I have for you in this file.
+ Thanks for reading. I hope you enjoyed it at least as much as I enjoyed writing it
+ for you.
+*/
diff --git a/apps/impress/css/style.css b/apps/impress/css/style.css
new file mode 100755
index 00000000000..4c7f60ef84b
--- /dev/null
+++ b/apps/impress/css/style.css
@@ -0,0 +1,14 @@
+#emptyfolder { position:absolute; margin:10em 0 0 10em; font-size:1.5em; font-weight:bold; color:#888; text-shadow:#fff 0 1px 0; }
+
+.impresslist { margin-top:40px; padding:5px; width:100%;}
+.impresslist tr:hover { backgound-color:#ccc; }
+.impresslist tr td { padding:5px; }
+
+.docu { position: absolute; right: 13.5em; top: 0em; }
+
+#documentation { margin: 20px; }
+#documentation h1 { font-size:1.8em; font-weight:bold; color:#888; }
+#documentation h2 { font-size:1.5em; font-weight:bold; color:#888; }
+#documentation h2 { font-size:1.2em; font-weight:bold; color:#888; }
+
+.examplecode { font-size:0.9em; font-family:"Courier New","Courier"; background-color:#eee; color:#333; width:90%; height:300px; padding:10px;} \ No newline at end of file
diff --git a/apps/impress/documentation.php b/apps/impress/documentation.php
new file mode 100755
index 00000000000..17a97432a49
--- /dev/null
+++ b/apps/impress/documentation.php
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * ownCloud - Impress App
+ *
+ * @author Frank Karlitschek
+ * @copyright 2011 Frank Karlitschek karlitschek@kde.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 Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+require_once('lib/impress.php');
+
+OCP\User::checkLoggedIn();
+OCP\App::setActiveNavigationEntry( 'impress_index' );
+
+
+
+$tmpl = new OCP\Template('impress', 'documentation', 'user');
+$tmpl->printPage();
+
+
diff --git a/apps/impress/img/impress.png b/apps/impress/img/impress.png
new file mode 100644
index 00000000000..23e14fc623d
--- /dev/null
+++ b/apps/impress/img/impress.png
Binary files differ
diff --git a/apps/impress/img/impress.svg b/apps/impress/img/impress.svg
new file mode 100755
index 00000000000..af1cf89d426
--- /dev/null
+++ b/apps/impress/img/impress.svg
@@ -0,0 +1,1718 @@
+<?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="16"
+ height="16"
+ id="svg11300"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="impress.svg"
+ inkscape:export-filename="/Users/karlitschek/Desktop/impress.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <metadata
+ id="metadata26">
+ <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>
+ <sodipodi:namedview
+ pagecolor="#cccccc"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1646"
+ inkscape:window-height="1184"
+ id="namedview24"
+ showgrid="true"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:zoom="32.000001"
+ inkscape:cx="4.7817607"
+ inkscape:cy="8.2037781"
+ inkscape:window-x="1667"
+ inkscape:window-y="42"
+ inkscape:window-maximized="0"
+ 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:#505050;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>
+ <filter
+ inkscape:collect="always"
+ id="filter4061">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.09528843"
+ id="feGaussianBlur4063" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3785"
+ id="linearGradient4079"
+ x1="2.9539645"
+ y1="7.9553804"
+ x2="8.1727142"
+ y2="7.9553804"
+ gradientUnits="userSpaceOnUse" />
+ </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">
+ <path
+ sodipodi:type="star"
+ style="fill:#999999;fill-opacity:1;filter:url(#filter4061)"
+ id="path3296"
+ sodipodi:sides="3"
+ sodipodi:cx="9"
+ sodipodi:cy="8"
+ sodipodi:r1="4.6360717"
+ sodipodi:r2="2.3180358"
+ sodipodi:arg1="1.0407812"
+ sodipodi:arg2="2.0879787"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="M 11.343749,12 7.8538866,10.014873 4.3640238,8.0297465 7.8281252,6.0000001 11.292227,3.9702536 l 0.02576,4.0148731 z"
+ inkscape:transform-center-x="1.4833295"
+ inkscape:transform-center-y="-0.018522961"
+ transform="matrix(1.2942258,0,0,1.2453693,-0.64803223,-1.9444316)"
+ inkscape:export-filename="/Volumes/www/owncloud/owncloud/apps/impress/img/rect3288.png"
+ inkscape:export-xdpi="120.00002"
+ inkscape:export-ydpi="120.00002" />
+ <rect
+ style="fill:url(#linearGradient4079);fill-opacity:1.0"
+ id="rect3288"
+ width="5.21875"
+ height="11.999999"
+ x="2.9539645"
+ y="1.955381"
+ inkscape:export-xdpi="120.00002"
+ inkscape:export-ydpi="120.00002" />
+ </g>
+</svg>
diff --git a/apps/impress/img/impressbig.png b/apps/impress/img/impressbig.png
new file mode 100644
index 00000000000..3c8d1632b35
--- /dev/null
+++ b/apps/impress/img/impressbig.png
Binary files differ
diff --git a/apps/impress/img/impressbig.svg b/apps/impress/img/impressbig.svg
new file mode 100755
index 00000000000..a4140e4ae15
--- /dev/null
+++ b/apps/impress/img/impressbig.svg
@@ -0,0 +1,1730 @@
+<?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="16"
+ height="16"
+ id="svg11300"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="impressbig.svg"
+ inkscape:export-filename="/Users/karlitschek/Desktop/impress.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <metadata
+ id="metadata26">
+ <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>
+ <sodipodi:namedview
+ pagecolor="#cccccc"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1646"
+ inkscape:window-height="1184"
+ id="namedview24"
+ showgrid="true"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:zoom="45.254835"
+ inkscape:cx="8.0044836"
+ inkscape:cy="9.2830031"
+ inkscape:window-x="1497"
+ inkscape:window-y="26"
+ inkscape:window-maximized="0"
+ 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">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 8 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="16 : 8 : 1"
+ inkscape:persp3d-origin="8 : 5.3333333 : 1"
+ id="perspective4600" />
+ <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:#505050;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>
+ <filter
+ inkscape:collect="always"
+ id="filter4061">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.09528843"
+ id="feGaussianBlur4063" />
+ </filter>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3785"
+ id="linearGradient4079"
+ x1="2.9539645"
+ y1="7.9553804"
+ x2="8.1727142"
+ y2="7.9553804"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3191-577"
+ id="linearGradient4626"
+ x1="-1.7639756"
+ y1="2.3130295"
+ x2="2.824636"
+ y2="2.3130295"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0.70147562,-1.6260591)" />
+ </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">
+ <rect
+ style="fill:#b3b3b3;fill-opacity:1;stroke:#b1b1b1;stroke-width:2.22857141;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect4632"
+ width="12"
+ height="12"
+ x="2"
+ y="2" />
+ <path
+ sodipodi:type="star"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:#4e4e4e;stroke-width:0.84385167;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="path4634"
+ sodipodi:sides="3"
+ sodipodi:cx="6.3639607"
+ sodipodi:cy="-1.3683099"
+ sodipodi:r1="3.1380975"
+ sodipodi:r2="1.5690486"
+ sodipodi:arg1="-0.014083576"
+ sodipodi:arg2="1.033114"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="M 9.5017471,-1.412504 7.1675439,-0.02065715 4.8333409,1.3711899 4.7950677,-1.3462128 4.7567943,-4.0636154 7.1292707,-2.7380596 z"
+ inkscape:transform-center-x="-0.86652303"
+ inkscape:transform-center-y="0.022845587"
+ transform="matrix(1.1322508,0,0,1.0338718,0.24163929,9.4603481)" />
+ </g>
+</svg>
diff --git a/apps/impress/index.php b/apps/impress/index.php
new file mode 100755
index 00000000000..c7213d86614
--- /dev/null
+++ b/apps/impress/index.php
@@ -0,0 +1,37 @@
+<?php
+
+/**
+ * ownCloud - Impress App
+ *
+ * @author Frank Karlitschek
+ * @copyright 2011 Frank Karlitschek karlitschek@kde.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 Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+require_once('lib/impress.php');
+
+OCP\User::checkLoggedIn();
+OCP\App::setActiveNavigationEntry( 'impress_index' );
+
+
+
+$list=\OCA_Impress\Storage::getPresentations();
+
+$tmpl = new OCP\Template('impress', 'presentations', 'user');
+$tmpl->assign('list', $list);
+$tmpl->printPage();
+
+
diff --git a/apps/impress/js/impress.js b/apps/impress/js/impress.js
new file mode 100644
index 00000000000..224a5e2e7e6
--- /dev/null
+++ b/apps/impress/js/impress.js
@@ -0,0 +1,800 @@
+/**
+ * impress.js
+ *
+ * impress.js is a presentation tool based on the power of CSS3 transforms and transitions
+ * in modern browsers and inspired by the idea behind prezi.com.
+ *
+ *
+ * Copyright 2011-2012 Bartek Szopka (@bartaz)
+ *
+ * Released under the MIT and GPL Licenses.
+ *
+ * ------------------------------------------------
+ * author: Bartek Szopka
+ * version: 0.5.3
+ * url: http://bartaz.github.com/impress.js/
+ * source: http://github.com/bartaz/impress.js/
+ */
+
+/*jshint bitwise:true, curly:true, eqeqeq:true, forin:true, latedef:true, newcap:true,
+ noarg:true, noempty:true, undef:true, strict:true, browser:true */
+
+// You are one of those who like to know how thing work inside?
+// Let me show you the cogs that make impress.js run...
+(function ( document, window ) {
+ 'use strict';
+
+ // HELPER FUNCTIONS
+
+ // `pfx` is a function that takes a standard CSS property name as a parameter
+ // and returns it's prefixed version valid for current browser it runs in.
+ // The code is heavily inspired by Modernizr http://www.modernizr.com/
+ var pfx = (function () {
+
+ var style = document.createElement('dummy').style,
+ prefixes = 'Webkit Moz O ms Khtml'.split(' '),
+ memory = {};
+
+ return function ( prop ) {
+ if ( typeof memory[ prop ] === "undefined" ) {
+
+ var ucProp = prop.charAt(0).toUpperCase() + prop.substr(1),
+ props = (prop + ' ' + prefixes.join(ucProp + ' ') + ucProp).split(' ');
+
+ memory[ prop ] = null;
+ for ( var i in props ) {
+ if ( style[ props[i] ] !== undefined ) {
+ memory[ prop ] = props[i];
+ break;
+ }
+ }
+
+ }
+
+ return memory[ prop ];
+ };
+
+ })();
+
+ // `arraify` takes an array-like object and turns it into real Array
+ // to make all the Array.prototype goodness available.
+ var arrayify = function ( a ) {
+ return [].slice.call( a );
+ };
+
+ // `css` function applies the styles given in `props` object to the element
+ // given as `el`. It runs all property names through `pfx` function to make
+ // sure proper prefixed version of the property is used.
+ var css = function ( el, props ) {
+ var key, pkey;
+ for ( key in props ) {
+ if ( props.hasOwnProperty(key) ) {
+ pkey = pfx(key);
+ if ( pkey !== null ) {
+ el.style[pkey] = props[key];
+ }
+ }
+ }
+ return el;
+ };
+
+ // `toNumber` takes a value given as `numeric` parameter and tries to turn
+ // it into a number. If it is not possible it returns 0 (or other value
+ // given as `fallback`).
+ var toNumber = function (numeric, fallback) {
+ return isNaN(numeric) ? (fallback || 0) : Number(numeric);
+ };
+
+ // `byId` returns element with given `id` - you probably have guessed that ;)
+ var byId = function ( id ) {
+ return document.getElementById(id);
+ };
+
+ // `$` returns first element for given CSS `selector` in the `context` of
+ // the given element or whole document.
+ var $ = function ( selector, context ) {
+ context = context || document;
+ return context.querySelector(selector);
+ };
+
+ // `$$` return an array of elements for given CSS `selector` in the `context` of
+ // the given element or whole document.
+ var $$ = function ( selector, context ) {
+ context = context || document;
+ return arrayify( context.querySelectorAll(selector) );
+ };
+
+ // `triggerEvent` builds a custom DOM event with given `eventName` and `detail` data
+ // and triggers it on element given as `el`.
+ var triggerEvent = function (el, eventName, detail) {
+ var event = document.createEvent("CustomEvent");
+ event.initCustomEvent(eventName, true, true, detail);
+ el.dispatchEvent(event);
+ };
+
+ // `translate` builds a translate transform string for given data.
+ var translate = function ( t ) {
+ return " translate3d(" + t.x + "px," + t.y + "px," + t.z + "px) ";
+ };
+
+ // `rotate` builds a rotate transform string for given data.
+ // By default the rotations are in X Y Z order that can be reverted by passing `true`
+ // as second parameter.
+ var rotate = function ( r, revert ) {
+ var rX = " rotateX(" + r.x + "deg) ",
+ rY = " rotateY(" + r.y + "deg) ",
+ rZ = " rotateZ(" + r.z + "deg) ";
+
+ return revert ? rZ+rY+rX : rX+rY+rZ;
+ };
+
+ // `scale` builds a scale transform string for given data.
+ var scale = function ( s ) {
+ return " scale(" + s + ") ";
+ };
+
+ // `perspective` builds a perspective transform string for given data.
+ var perspective = function ( p ) {
+ return " perspective(" + p + "px) ";
+ };
+
+ // `getElementFromHash` returns an element located by id from hash part of
+ // window location.
+ var getElementFromHash = function () {
+ // get id from url # by removing `#` or `#/` from the beginning,
+ // so both "fallback" `#slide-id` and "enhanced" `#/slide-id` will work
+ return byId( window.location.hash.replace(/^#\/?/,"") );
+ };
+
+ // `computeWindowScale` counts the scale factor between window size and size
+ // defined for the presentation in the config.
+ var computeWindowScale = function ( config ) {
+ var hScale = window.innerHeight / config.height,
+ wScale = window.innerWidth / config.width,
+ scale = hScale > wScale ? wScale : hScale;
+
+ if (config.maxScale && scale > config.maxScale) {
+ scale = config.maxScale;
+ }
+
+ if (config.minScale && scale < config.minScale) {
+ scale = config.minScale;
+ }
+
+ return scale;
+ };
+
+ // CHECK SUPPORT
+ var body = document.body;
+
+ var ua = navigator.userAgent.toLowerCase();
+ var impressSupported =
+ // browser should support CSS 3D transtorms
+ ( pfx("perspective") !== null ) &&
+
+ // and `classList` and `dataset` APIs
+ ( body.classList ) &&
+ ( body.dataset ) &&
+
+ // but some mobile devices need to be blacklisted,
+ // because their CSS 3D support or hardware is not
+ // good enough to run impress.js properly, sorry...
+ ( ua.search(/(iphone)|(ipod)|(android)/) === -1 );
+
+ if (!impressSupported) {
+ // we can't be sure that `classList` is supported
+ body.className += " impress-not-supported ";
+ } else {
+ body.classList.remove("impress-not-supported");
+ body.classList.add("impress-supported");
+ }
+
+ // GLOBALS AND DEFAULTS
+
+ // This is were the root elements of all impress.js instances will be kept.
+ // Yes, this means you can have more than one instance on a page, but I'm not
+ // sure if it makes any sense in practice ;)
+ var roots = {};
+
+ // some default config values.
+ var defaults = {
+ width: 1024,
+ height: 768,
+ maxScale: 1,
+ minScale: 0,
+
+ perspective: 1000,
+
+ transitionDuration: 1000
+ };
+
+ // it's just an empty function ... and a useless comment.
+ var empty = function () { return false; };
+
+ // IMPRESS.JS API
+
+ // And that's where interesting things will start to happen.
+ // It's the core `impress` function that returns the impress.js API
+ // for a presentation based on the element with given id ('impress'
+ // by default).
+ var impress = window.impress = function ( rootId ) {
+
+ // If impress.js is not supported by the browser return a dummy API
+ // it may not be a perfect solution but we return early and avoid
+ // running code that may use features not implemented in the browser.
+ if (!impressSupported) {
+ return {
+ init: empty,
+ goto: empty,
+ prev: empty,
+ next: empty
+ };
+ }
+
+ rootId = rootId || "impress";
+
+ // if given root is already initialized just return the API
+ if (roots["impress-root-" + rootId]) {
+ return roots["impress-root-" + rootId];
+ }
+
+ // data of all presentation steps
+ var stepsData = {};
+
+ // element of currently active step
+ var activeStep = null;
+
+ // current state (position, rotation and scale) of the presentation
+ var currentState = null;
+
+ // array of step elements
+ var steps = null;
+
+ // configuration options
+ var config = null;
+
+ // scale factor of the browser window
+ var windowScale = null;
+
+ // root presentation elements
+ var root = byId( rootId );
+ var canvas = document.createElement("div");
+
+ var initialized = false;
+
+ // STEP EVENTS
+ //
+ // There are currently two step events triggered by impress.js
+ // `impress:stepenter` is triggered when the step is shown on the
+ // screen (the transition from the previous one is finished) and
+ // `impress:stepleave` is triggered when the step is left (the
+ // transition to next step just starts).
+
+ // reference to last entered step
+ var lastEntered = null;
+
+ // `onStepEnter` is called whenever the step element is entered
+ // but the event is triggered only if the step is different than
+ // last entered step.
+ var onStepEnter = function (step) {
+ if (lastEntered !== step) {
+ triggerEvent(step, "impress:stepenter");
+ lastEntered = step;
+ }
+ };
+
+ // `onStepLeave` is called whenever the step element is left
+ // but the event is triggered only if the step is the same as
+ // last entered step.
+ var onStepLeave = function (step) {
+ if (lastEntered === step) {
+ triggerEvent(step, "impress:stepleave");
+ lastEntered = null;
+ }
+ };
+
+ // `initStep` initializes given step element by reading data from its
+ // data attributes and setting correct styles.
+ var initStep = function ( el, idx ) {
+ var data = el.dataset,
+ step = {
+ translate: {
+ x: toNumber(data.x),
+ y: toNumber(data.y),
+ z: toNumber(data.z)
+ },
+ rotate: {
+ x: toNumber(data.rotateX),
+ y: toNumber(data.rotateY),
+ z: toNumber(data.rotateZ || data.rotate)
+ },
+ scale: toNumber(data.scale, 1),
+ el: el
+ };
+
+ if ( !el.id ) {
+ el.id = "step-" + (idx + 1);
+ }
+
+ stepsData["impress-" + el.id] = step;
+
+ css(el, {
+ position: "absolute",
+ transform: "translate(-50%,-50%)" +
+ translate(step.translate) +
+ rotate(step.rotate) +
+ scale(step.scale),
+ transformStyle: "preserve-3d"
+ });
+ };
+
+ // `init` API function that initializes (and runs) the presentation.
+ var init = function () {
+ if (initialized) { return; }
+
+ // First we set up the viewport for mobile devices.
+ // For some reason iPad goes nuts when it is not done properly.
+ var meta = $("meta[name='viewport']") || document.createElement("meta");
+ meta.content = "width=device-width, minimum-scale=1, maximum-scale=1, user-scalable=no";
+ if (meta.parentNode !== document.head) {
+ meta.name = 'viewport';
+ document.head.appendChild(meta);
+ }
+
+ // initialize configuration object
+ var rootData = root.dataset;
+ config = {
+ width: toNumber( rootData.width, defaults.width ),
+ height: toNumber( rootData.height, defaults.height ),
+ maxScale: toNumber( rootData.maxScale, defaults.maxScale ),
+ minScale: toNumber( rootData.minScale, defaults.minScale ),
+ perspective: toNumber( rootData.perspective, defaults.perspective ),
+ transitionDuration: toNumber( rootData.transitionDuration, defaults.transitionDuration )
+ };
+
+ windowScale = computeWindowScale( config );
+
+ // wrap steps with "canvas" element
+ arrayify( root.childNodes ).forEach(function ( el ) {
+ canvas.appendChild( el );
+ });
+ root.appendChild(canvas);
+
+ // set initial styles
+ document.documentElement.style.height = "100%";
+
+ css(body, {
+ height: "100%",
+ overflow: "hidden"
+ });
+
+ var rootStyles = {
+ position: "absolute",
+ transformOrigin: "top left",
+ transition: "all 0s ease-in-out",
+ transformStyle: "preserve-3d"
+ };
+
+ css(root, rootStyles);
+ css(root, {
+ top: "50%",
+ left: "50%",
+ transform: perspective( config.perspective/windowScale ) + scale( windowScale )
+ });
+ css(canvas, rootStyles);
+
+ body.classList.remove("impress-disabled");
+ body.classList.add("impress-enabled");
+
+ // get and init steps
+ steps = $$(".step", root);
+ steps.forEach( initStep );
+
+ // set a default initial state of the canvas
+ currentState = {
+ translate: { x: 0, y: 0, z: 0 },
+ rotate: { x: 0, y: 0, z: 0 },
+ scale: 1
+ };
+
+ initialized = true;
+
+ triggerEvent(root, "impress:init", { api: roots[ "impress-root-" + rootId ] });
+ };
+
+ // `getStep` is a helper function that returns a step element defined by parameter.
+ // If a number is given, step with index given by the number is returned, if a string
+ // is given step element with such id is returned, if DOM element is given it is returned
+ // if it is a correct step element.
+ var getStep = function ( step ) {
+ if (typeof step === "number") {
+ step = step < 0 ? steps[ steps.length + step] : steps[ step ];
+ } else if (typeof step === "string") {
+ step = byId(step);
+ }
+ return (step && step.id && stepsData["impress-" + step.id]) ? step : null;
+ };
+
+ // used to reset timeout for `impress:stepenter` event
+ var stepEnterTimeout = null;
+
+ // `goto` API function that moves to step given with `el` parameter (by index, id or element),
+ // with a transition `duration` optionally given as second parameter.
+ var goto = function ( el, duration ) {
+
+ if ( !initialized || !(el = getStep(el)) ) {
+ // presentation not initialized or given element is not a step
+ return false;
+ }
+
+ // Sometimes it's possible to trigger focus on first link with some keyboard action.
+ // Browser in such a case tries to scroll the page to make this element visible
+ // (even that body overflow is set to hidden) and it breaks our careful positioning.
+ //
+ // So, as a lousy (and lazy) workaround we will make the page scroll back to the top
+ // whenever slide is selected
+ //
+ // If you are reading this and know any better way to handle it, I'll be glad to hear about it!
+ window.scrollTo(0, 0);
+
+ var step = stepsData["impress-" + el.id];
+
+ if ( activeStep ) {
+ activeStep.classList.remove("active");
+ body.classList.remove("impress-on-" + activeStep.id);
+ }
+ el.classList.add("active");
+
+ body.classList.add("impress-on-" + el.id);
+
+ // compute target state of the canvas based on given step
+ var target = {
+ rotate: {
+ x: -step.rotate.x,
+ y: -step.rotate.y,
+ z: -step.rotate.z
+ },
+ translate: {
+ x: -step.translate.x,
+ y: -step.translate.y,
+ z: -step.translate.z
+ },
+ scale: 1 / step.scale
+ };
+
+ // Check if the transition is zooming in or not.
+ //
+ // This information is used to alter the transition style:
+ // when we are zooming in - we start with move and rotate transition
+ // and the scaling is delayed, but when we are zooming out we start
+ // with scaling down and move and rotation are delayed.
+ var zoomin = target.scale >= currentState.scale;
+
+ duration = toNumber(duration, config.transitionDuration);
+ var delay = (duration / 2);
+
+ // if the same step is re-selected, force computing window scaling,
+ // because it is likely to be caused by window resize
+ if (el === activeStep) {
+ windowScale = computeWindowScale(config);
+ }
+
+ var targetScale = target.scale * windowScale;
+
+ // trigger leave of currently active element (if it's not the same step again)
+ if (activeStep && activeStep !== el) {
+ onStepLeave(activeStep);
+ }
+
+ // Now we alter transforms of `root` and `canvas` to trigger transitions.
+ //
+ // And here is why there are two elements: `root` and `canvas` - they are
+ // being animated separately:
+ // `root` is used for scaling and `canvas` for translate and rotations.
+ // Transitions on them are triggered with different delays (to make
+ // visually nice and 'natural' looking transitions), so we need to know
+ // that both of them are finished.
+ css(root, {
+ // to keep the perspective look similar for different scales
+ // we need to 'scale' the perspective, too
+ transform: perspective( config.perspective / targetScale ) + scale( targetScale ),
+ transitionDuration: duration + "ms",
+ transitionDelay: (zoomin ? delay : 0) + "ms"
+ });
+
+ css(canvas, {
+ transform: rotate(target.rotate, true) + translate(target.translate),
+ transitionDuration: duration + "ms",
+ transitionDelay: (zoomin ? 0 : delay) + "ms"
+ });
+
+ // Here is a tricky part...
+ //
+ // If there is no change in scale or no change in rotation and translation, it means there was actually
+ // no delay - because there was no transition on `root` or `canvas` elements.
+ // We want to trigger `impress:stepenter` event in the correct moment, so here we compare the current
+ // and target values to check if delay should be taken into account.
+ //
+ // I know that this `if` statement looks scary, but it's pretty simple when you know what is going on
+ // - it's simply comparing all the values.
+ if ( currentState.scale === target.scale ||
+ (currentState.rotate.x === target.rotate.x && currentState.rotate.y === target.rotate.y &&
+ currentState.rotate.z === target.rotate.z && currentState.translate.x === target.translate.x &&
+ currentState.translate.y === target.translate.y && currentState.translate.z === target.translate.z) ) {
+ delay = 0;
+ }
+
+ // store current state
+ currentState = target;
+ activeStep = el;
+
+ // And here is where we trigger `impress:stepenter` event.
+ // We simply set up a timeout to fire it taking transition duration (and possible delay) into account.
+ //
+ // I really wanted to make it in more elegant way. The `transitionend` event seemed to be the best way
+ // to do it, but the fact that I'm using transitions on two separate elements and that the `transitionend`
+ // event is only triggered when there was a transition (change in the values) caused some bugs and
+ // made the code really complicated, cause I had to handle all the conditions separately. And it still
+ // needed a `setTimeout` fallback for the situations when there is no transition at all.
+ // So I decided that I'd rather make the code simpler than use shiny new `transitionend`.
+ //
+ // If you want learn something interesting and see how it was done with `transitionend` go back to
+ // version 0.5.2 of impress.js: http://github.com/bartaz/impress.js/blob/0.5.2/js/impress.js
+ window.clearTimeout(stepEnterTimeout);
+ stepEnterTimeout = window.setTimeout(function() {
+ onStepEnter(activeStep);
+ }, duration + delay);
+
+ return el;
+ };
+
+ // `prev` API function goes to previous step (in document order)
+ var prev = function () {
+ var prev = steps.indexOf( activeStep ) - 1;
+ prev = prev >= 0 ? steps[ prev ] : steps[ steps.length-1 ];
+
+ return goto(prev);
+ };
+
+ // `next` API function goes to next step (in document order)
+ var next = function () {
+ var next = steps.indexOf( activeStep ) + 1;
+ next = next < steps.length ? steps[ next ] : steps[ 0 ];
+
+ return goto(next);
+ };
+
+ // Adding some useful classes to step elements.
+ //
+ // All the steps that have not been shown yet are given `future` class.
+ // When the step is entered the `future` class is removed and the `present`
+ // class is given. When the step is left `present` class is replaced with
+ // `past` class.
+ //
+ // So every step element is always in one of three possible states:
+ // `future`, `present` and `past`.
+ //
+ // There classes can be used in CSS to style different types of steps.
+ // For example the `present` class can be used to trigger some custom
+ // animations when step is shown.
+ root.addEventListener("impress:init", function(){
+ // STEP CLASSES
+ steps.forEach(function (step) {
+ step.classList.add("future");
+ });
+
+ root.addEventListener("impress:stepenter", function (event) {
+ event.target.classList.remove("past");
+ event.target.classList.remove("future");
+ event.target.classList.add("present");
+ }, false);
+
+ root.addEventListener("impress:stepleave", function (event) {
+ event.target.classList.remove("present");
+ event.target.classList.add("past");
+ }, false);
+
+ }, false);
+
+ // Adding hash change support.
+ root.addEventListener("impress:init", function(){
+
+ // last hash detected
+ var lastHash = "";
+
+ // `#/step-id` is used instead of `#step-id` to prevent default browser
+ // scrolling to element in hash.
+ //
+ // And it has to be set after animation finishes, because in Chrome it
+ // makes transtion laggy.
+ // BUG: http://code.google.com/p/chromium/issues/detail?id=62820
+ root.addEventListener("impress:stepenter", function (event) {
+ window.location.hash = lastHash = "#/" + event.target.id;
+ }, false);
+
+ window.addEventListener("hashchange", function () {
+ // When the step is entered hash in the location is updated
+ // (just few lines above from here), so the hash change is
+ // triggered and we would call `goto` again on the same element.
+ //
+ // To avoid this we store last entered hash and compare.
+ if (window.location.hash !== lastHash) {
+ goto( getElementFromHash() );
+ }
+ }, false);
+
+ // START
+ // by selecting step defined in url or first step of the presentation
+ goto(getElementFromHash() || steps[0], 0);
+ }, false);
+
+ body.classList.add("impress-disabled");
+
+ // store and return API for given impress.js root element
+ return (roots[ "impress-root-" + rootId ] = {
+ init: init,
+ goto: goto,
+ next: next,
+ prev: prev
+ });
+
+ };
+
+ // flag that can be used in JS to check if browser have passed the support test
+ impress.supported = impressSupported;
+
+})(document, window);
+
+// NAVIGATION EVENTS
+
+// As you can see this part is separate from the impress.js core code.
+// It's because these navigation actions only need what impress.js provides with
+// its simple API.
+//
+// In future I think about moving it to make them optional, move to separate files
+// and treat more like a 'plugins'.
+(function ( document, window ) {
+ 'use strict';
+
+ // throttling function calls, by Remy Sharp
+ // http://remysharp.com/2010/07/21/throttling-function-calls/
+ var throttle = function (fn, delay) {
+ var timer = null;
+ return function () {
+ var context = this, args = arguments;
+ clearTimeout(timer);
+ timer = setTimeout(function () {
+ fn.apply(context, args);
+ }, delay);
+ };
+ };
+
+ // wait for impress.js to be initialized
+ document.addEventListener("impress:init", function (event) {
+ // Getting API from event data.
+ // So you don't event need to know what is the id of the root element
+ // or anything. `impress:init` event data gives you everything you
+ // need to control the presentation that was just initialized.
+ var api = event.detail.api;
+
+ // KEYBOARD NAVIGATION HANDLERS
+
+ // Prevent default keydown action when one of supported key is pressed.
+ document.addEventListener("keydown", function ( event ) {
+ if ( event.keyCode === 9 || ( event.keyCode >= 32 && event.keyCode <= 34 ) || (event.keyCode >= 37 && event.keyCode <= 40) ) {
+ event.preventDefault();
+ }
+ }, false);
+
+ // Trigger impress action (next or prev) on keyup.
+
+ // Supported keys are:
+ // [space] - quite common in presentation software to move forward
+ // [up] [right] / [down] [left] - again common and natural addition,
+ // [pgdown] / [pgup] - often triggered by remote controllers,
+ // [tab] - this one is quite controversial, but the reason it ended up on
+ // this list is quite an interesting story... Remember that strange part
+ // in the impress.js code where window is scrolled to 0,0 on every presentation
+ // step, because sometimes browser scrolls viewport because of the focused element?
+ // Well, the [tab] key by default navigates around focusable elements, so clicking
+ // it very often caused scrolling to focused element and breaking impress.js
+ // positioning. I didn't want to just prevent this default action, so I used [tab]
+ // as another way to moving to next step... And yes, I know that for the sake of
+ // consistency I should add [shift+tab] as opposite action...
+ document.addEventListener("keyup", function ( event ) {
+ if ( event.keyCode === 9 || ( event.keyCode >= 32 && event.keyCode <= 34 ) || (event.keyCode >= 37 && event.keyCode <= 40) ) {
+ switch( event.keyCode ) {
+ case 33: // pg up
+ case 37: // left
+ case 38: // up
+ api.prev();
+ break;
+ case 9: // tab
+ case 32: // space
+ case 34: // pg down
+ case 39: // right
+ case 40: // down
+ api.next();
+ break;
+ }
+
+ event.preventDefault();
+ }
+ }, false);
+
+ // delegated handler for clicking on the links to presentation steps
+ document.addEventListener("click", function ( event ) {
+ // event delegation with "bubbling"
+ // check if event target (or any of its parents is a link)
+ var target = event.target;
+ while ( (target.tagName !== "A") &&
+ (target !== document.documentElement) ) {
+ target = target.parentNode;
+ }
+
+ if ( target.tagName === "A" ) {
+ var href = target.getAttribute("href");
+
+ // if it's a link to presentation step, target this step
+ if ( href && href[0] === '#' ) {
+ target = document.getElementById( href.slice(1) );
+ }
+ }
+
+ if ( api.goto(target) ) {
+ event.stopImmediatePropagation();
+ event.preventDefault();
+ }
+ }, false);
+
+ // delegated handler for clicking on step elements
+ document.addEventListener("click", function ( event ) {
+ var target = event.target;
+ // find closest step element that is not active
+ while ( !(target.classList.contains("step") && !target.classList.contains("active")) &&
+ (target !== document.documentElement) ) {
+ target = target.parentNode;
+ }
+
+ if ( api.goto(target) ) {
+ event.preventDefault();
+ }
+ }, false);
+
+ // touch handler to detect taps on the left and right side of the screen
+ // based on awesome work of @hakimel: https://github.com/hakimel/reveal.js
+ document.addEventListener("touchstart", function ( event ) {
+ if (event.touches.length === 1) {
+ var x = event.touches[0].clientX,
+ width = window.innerWidth * 0.3,
+ result = null;
+
+ if ( x < width ) {
+ result = api.prev();
+ } else if ( x > window.innerWidth - width ) {
+ result = api.next();
+ }
+
+ if (result) {
+ event.preventDefault();
+ }
+ }
+ }, false);
+
+ // rescale presentation when window is resized
+ window.addEventListener("resize", throttle(function () {
+ // force going to active step again, to trigger rescaling
+ api.goto( document.querySelector(".active"), 500 );
+ }, 250), false);
+
+ }, false);
+
+})(document, window);
+
+// THAT'S ALL FOLKS!
+//
+// Thanks for reading it all.
+// Or thanks for scrolling down and reading the last part.
+//
+// I've learnt a lot when building impress.js and I hope this code and comments
+// will help somebody learn at least some part of it.
diff --git a/apps/impress/lib/impress.php b/apps/impress/lib/impress.php
new file mode 100755
index 00000000000..ca33dbb2325
--- /dev/null
+++ b/apps/impress/lib/impress.php
@@ -0,0 +1,118 @@
+<?php
+
+/**
+ * ownCloud - Impress App
+ *
+ * @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 Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+
+/*
+
+Todo:
+ enable fullscreen presentation
+
+*/
+
+namespace OCA_Impress;
+
+class Storage {
+
+ public static function getPresentations() {
+ $presentations=array();
+ $list=\OC_FileCache::searchByMime('text','impress' );
+ foreach($list as $l) {
+ $info=pathinfo($l);
+ $size=\OC_Filesystem::filesize($l);
+ $mtime=\OC_Filesystem::filemtime($l);
+
+ $entry=array('url'=>$l,'name'=>$info['filename'],'size'=>$size,'mtime'=>$mtime);
+ $presentations[]=$entry;
+ }
+
+
+ return $presentations;
+ }
+
+
+ public static function showHeader($title){
+
+ echo('
+
+ <!doctype html>
+ <html lang="en">
+ <head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=1024" />
+ <title>'.$title.'</title>
+
+
+ <link href="http://fonts.googleapis.com/css?family=Open+Sans:regular,semibold,italic,italicsemibold|PT+Sans:400,700,400italic,700italic|PT+Serif:400,700,400italic,700italic" rel="stylesheet" />
+
+ <link href="'.\OCP\Util::linkToAbsolute('impress','css/player.css').'" rel="stylesheet" />
+ </head>
+
+<body class="impress-not-supported">
+
+
+ <div class="fallback-message">
+ <p>Your browser <b>does not support the features required</b> by impress.js, so you are presented with a simplified version of this presentation.</p>
+ <p>For the best experience please use the latest <b>Chrome</b>, <b>Safari</b> or <b>Firefox</b> browser.</p>
+ </div>
+
+
+ <div id="impress">
+
+
+
+ ');
+
+ }
+
+ public static function showFooter(){
+
+ echo('
+
+ <div class="hint">
+ <p>Make fullscreen and use a spacebar or arrow keys to navigate</p>
+ </div>
+ <script>
+ if ("ontouchstart" in document.documentElement) {
+ document.querySelector(".hint").innerHTML = "<p>Tap on the left or right to navigate</p>";
+ }
+ </script>
+
+ <script src="'.\OCP\Util::linkToAbsolute('impress','js/impress.js').'"></script>
+ <script>impress().init();</script>
+
+ <script>
+
+
+
+ </script>
+
+ </body></html>
+ ');
+
+ }
+
+
+}
+
+?>
diff --git a/apps/impress/player.php b/apps/impress/player.php
new file mode 100755
index 00000000000..12497de54c1
--- /dev/null
+++ b/apps/impress/player.php
@@ -0,0 +1,49 @@
+<?php
+
+/**
+* ownCloud - impress player
+*
+* @author Frank Karlitschek
+* @copyright 2012 Frank Karlitschek ink@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/>.
+*
+*/
+
+require_once('lib/impress.php');
+
+// Check if we are a user
+OCP\User::checkLoggedIn();
+
+$filename = strip_tags($_GET['file']);
+$title = strip_tags($_GET['name']);
+
+if(!OC_Filesystem::file_exists($filename)){
+ header("HTTP/1.0 404 Not Found");
+ $tmpl = new OCP\Template( '', '404', 'guest' );
+ $tmpl->assign('file',$filename);
+ $tmpl->printPage();
+ exit;
+}
+
+header('Content-Type: text/html',true);
+OCP\Response::disableCaching();
+header('Content-Length: '.OC_Filesystem::filesize($filename));
+
+@ob_end_clean();
+
+\OCA_Impress\Storage::showHeader($title);
+OC_Filesystem::readfile( $filename );
+\OCA_Impress\Storage::showFooter();
+
diff --git a/apps/impress/templates/documentation.php b/apps/impress/templates/documentation.php
new file mode 100755
index 00000000000..1995bece255
--- /dev/null
+++ b/apps/impress/templates/documentation.php
@@ -0,0 +1,223 @@
+
+
+<div id="documentation">
+
+<h1>Impress Documentation</h1>
+<br />
+
+
+<h2>What is Impress?</h2>
+Impress is an ownCloud application that can play presentation based on the amazing <a href="http://bartaz.github.com/impress.js">impress.js</a> library.
+<br /><br />
+
+<h2>How do I use it?</h2>
+You have to define your presentation by writing a HTML file manually. But there are great examples and it isn´t that difficult.
+Just put a HTML file with the file extension .impress into your ownCloud and it will show up here in the Impress app automatically.
+If you click on it it opens up in a new windows.
+<br /><br />
+
+<h2>How do I define the presentation?</h2>
+The best way to learn it is to look at the example presenation. We suggest that you copy it and place it into your ownCloud with the name demo.impress and play around with it. You can edit in ownCloud directly with the internal text editor and play it here in the Impress app.
+<br />
+
+<textarea class="examplecode">
+ <!--
+ Each step of the presentation should be an element inside the `#impress` with a class name
+ of `step`. These step elements are positioned, rotated and scaled by impress.js, and
+ the 'camera' shows them on each step of the presentation.
+
+ Positioning information is passed through data attributes.
+
+ In the example below we only specify x and y position of the step element with `data-x="-1000"`
+ and `data-y="-1500` attributes. This means that **the center** of the element (yes, the center)
+ will be positioned in point x = -1000px and y = -1500px of the presentation 'canvas'.
+
+ It will not be rotated or scaled.
+
+ -->
+ <div id="bored" class="step slide active present" data-x="-1000" data-y="-1500" style="position: absolute; -webkit-transform: translate(-50%, -50%) translate3d(-1000px, -1500px, 0px) rotateX(0deg) rotateY(0deg) rotateZ(0deg) scale(1); -webkit-transform-style: preserve-3d; ">
+ <q>Aren't you just <b>bored</b> with all those slides-based presentations?</q>
+ </div>
+
+ <!--
+
+ The `id` attribute of the step element is used to identify it in the URL, but it's optional.
+ If it is not defined, it will get a default value of `step-N` where N is a number of slide.
+
+ So in the example below it'll be `step-2`.
+
+ The hash part of the url when this step is active will be `#/step-2`.
+
+ You can also use `#step-2` in a link, to point directly to this particular step.
+
+ Please note, that while `#/step-2` (with slash) would also work in a link it's not recommended.
+ Using classic `id`-based links like `#step-2` makes these links usable also in fallback mode.
+
+ -->
+ <div class="step slide future" data-x="0" data-y="-1500" id="step-2" style="position: absolute; -webkit-transform: translate(-50%, -50%) translate3d(0px, -1500px, 0px) rotateX(0deg) rotateY(0deg) rotateZ(0deg) scale(1); -webkit-transform-style: preserve-3d; ">
+ <q>Don't you think that presentations given <strong>in modern browsers</strong> shouldn't <strong>copy the limits</strong> of 'classic' slide decks?</q>
+ </div>
+
+ <div class="step slide future" data-x="1000" data-y="-1500" id="step-3" style="position: absolute; -webkit-transform: translate(-50%, -50%) translate3d(1000px, -1500px, 0px) rotateX(0deg) rotateY(0deg) rotateZ(0deg) scale(1); -webkit-transform-style: preserve-3d; ">
+ <q>Would you like to <strong>impress your audience</strong> with <strong>stunning visualization</strong> of your talk?</q>
+ </div>
+
+ <!--
+
+ This is an example of step element being scaled.
+
+ Again, we use a `data-` attribute, this time it's `data-scale="4"`, so it means that this
+ element will be 4 times larger than the others.
+ From presentation and transitions point of view it means, that it will have to be scaled
+ down (4 times) to make it back to it's correct size.
+
+ -->
+ <div id="title" class="step future" data-x="0" data-y="0" data-scale="4" style="position: absolute; -webkit-transform: translate(-50%, -50%) translate3d(0px, 0px, 0px) rotateX(0deg) rotateY(0deg) rotateZ(0deg) scale(4); -webkit-transform-style: preserve-3d; ">
+ <span class="try">then you should try</span>
+ <h1>impress.js<sup>*</sup></h1>
+ <span class="footnote"><sup>*</sup> no rhyme intended</span>
+ </div>
+
+ <!--
+
+ This element introduces rotation.
+
+ Notation shouldn't be a surprise. We use `data-rotate="90"` attribute, meaning that this
+ element should be rotated by 90 degrees clockwise.
+
+ -->
+ <div id="its" class="step future" data-x="850" data-y="3000" data-rotate="90" data-scale="5" style="position: absolute; -webkit-transform: translate(-50%, -50%) translate3d(850px, 3000px, 0px) rotateX(0deg) rotateY(0deg) rotateZ(90deg) scale(5); -webkit-transform-style: preserve-3d; ">
+ <p>It's a <strong>presentation tool</strong> <br>
+ inspired by the idea behind <a href="http://prezi.com/">prezi.com</a> <br>
+ and based on the <strong>power of CSS3 transforms and transitions</strong> in modern browsers.</p>
+ </div>
+
+ <div id="big" class="step future" data-x="3500" data-y="2100" data-rotate="180" data-scale="6" style="position: absolute; -webkit-transform: translate(-50%, -50%) translate3d(3500px, 2100px, 0px) rotateX(0deg) rotateY(0deg) rotateZ(180deg) scale(6); -webkit-transform-style: preserve-3d; ">
+ <p>visualize your <b>big</b> <span class="thoughts">thoughts</span></p>
+ </div>
+
+ <!--
+
+ And now it gets really exiting! We move into third dimension!
+
+ Along with `data-x` and `data-y`, you can define the position on third (Z) axis, with
+ `data-z`. In the example below we use `data-z="-3000"` meaning that element should be
+ positioned far away from us (by 3000px).
+
+ -->
+ <div id="tiny" class="step future" data-x="2825" data-y="2325" data-z="-3000" data-rotate="300" data-scale="1" style="position: absolute; -webkit-transform: translate(-50%, -50%) translate3d(2825px, 2325px, -3000px) rotateX(0deg) rotateY(0deg) rotateZ(300deg) scale(1); -webkit-transform-style: preserve-3d; ">
+ <p>and <b>tiny</b> ideas</p>
+ </div>
+
+ <!--
+
+ This step here doesn't introduce anything new when it comes to data attributes, but you
+ should notice in the demo that some words of this text are being animated.
+ It's a very basic CSS transition that is applied to the elements when this step element is
+ reached.
+
+ At the very beginning of the presentation all step elements are given the class of `future`.
+ It means that they haven't been visited yet.
+
+ When the presentation moves to given step `future` is changed to `present` class name.
+ That's how animation on this step works - text moves when the step has `present` class.
+
+ Finally when the step is left the `present` class is removed from the element and `past`
+ class is added.
+
+ So basically every step element has one of three classes: `future`, `present` and `past`.
+ Only one current step has the `present` class.
+
+ -->
+ <div id="ing" class="step future" data-x="3500" data-y="-850" data-rotate="270" data-scale="6" style="position: absolute; -webkit-transform: translate(-50%, -50%) translate3d(3500px, -850px, 0px) rotateX(0deg) rotateY(0deg) rotateZ(270deg) scale(6); -webkit-transform-style: preserve-3d; ">
+ <p>by <b class="positioning">positioning</b>, <b class="rotating">rotating</b> and <b class="scaling">scaling</b> them on an infinite canvas</p>
+ </div>
+
+ <div id="imagination" class="step future" data-x="6700" data-y="-300" data-scale="6" style="position: absolute; -webkit-transform: translate(-50%, -50%) translate3d(6700px, -300px, 0px) rotateX(0deg) rotateY(0deg) rotateZ(0deg) scale(6); -webkit-transform-style: preserve-3d; ">
+ <p>the only <b>limit</b> is your <b class="imagination">imagination</b></p>
+ </div>
+
+ <div id="source" class="step future" data-x="6300" data-y="2000" data-rotate="20" data-scale="4" style="position: absolute; -webkit-transform: translate(-50%, -50%) translate3d(6300px, 2000px, 0px) rotateX(0deg) rotateY(0deg) rotateZ(20deg) scale(4); -webkit-transform-style: preserve-3d; ">
+ <p>want to know more?</p>
+ <q><a href="http://github.com/bartaz/impress.js">use the source</a>, Luke!</q>
+ </div>
+
+ <div id="one-more-thing" class="step future" data-x="6000" data-y="4000" data-scale="2" style="position: absolute; -webkit-transform: translate(-50%, -50%) translate3d(6000px, 4000px, 0px) rotateX(0deg) rotateY(0deg) rotateZ(0deg) scale(2); -webkit-transform-style: preserve-3d; ">
+ <p>one more thing...</p>
+ </div>
+
+ <!--
+
+ And the last one shows full power and flexibility of impress.js.
+
+ You can not only position element in 3D, but also rotate it around any axis.
+ So this one here will get rotated by -40 degrees (40 degrees anticlockwise) around X axis and
+ 10 degrees (clockwise) around Y axis.
+
+ You can of course rotate it around Z axis with `data-rotate-z` - it has exactly the same effect
+ as `data-rotate` (these two are basically aliases).
+
+ -->
+ <div id="its-in-3d" class="step future" data-x="6200" data-y="4300" data-z="-100" data-rotate-x="-40" data-rotate-y="10" data-scale="2" style="position: absolute; -webkit-transform: translate(-50%, -50%) translate3d(6200px, 4300px, -100px) rotateX(-40deg) rotateY(10deg) rotateZ(0deg) scale(2); -webkit-transform-style: preserve-3d; ">
+ <p><span class="have">have</span> <span class="you">you</span> <span class="noticed">noticed</span> <span class="its">it's</span> <span class="in">in</span> <b>3D<sup>*</sup></b>?</p>
+ <span class="footnote">* beat that, prezi ;)</span>
+ </div>
+
+ <!--
+
+ So to make a summary of all the possible attributes used to position presentation steps, we have:
+
+ * `data-x`, `data-y`, `data-z` - they define the position of **the center** of step element on
+ the canvas in pixels; their default value is 0;
+ * `data-rotate-x`, `data-rotate-y`, 'data-rotate-z`, `data-rotate` - they define the rotation of
+ the element around given axis in degrees; their default value is 0; `data-rotate` and `data-rotate-z`
+ are exactly the same;
+ * `data-scale` - defines the scale of step element; default value is 1
+
+ These values are used by impress.js in CSS transformation functions, so for more information consult
+ CSS transfrom docs: https://developer.mozilla.org/en/CSS/transform
+
+ -->
+ <div id="overview" class="step future" data-x="3000" data-y="1500" data-scale="10" style="position: absolute; -webkit-transform: translate(-50%, -50%) translate3d(3000px, 1500px, 0px) rotateX(0deg) rotateY(0deg) rotateZ(0deg) scale(10); -webkit-transform-style: preserve-3d; ">
+ </div>
+
+ </div></div>
+
+ <!--
+
+ Hint is not related to impress.js in any way.
+
+ But it can show you how to use impress.js features in creative way.
+
+ When the presentation step is shown (selected) its element gets the class of "active" and the body element
+ gets the class based on active step id `impress-on-ID` (where ID is the step's id)... It may not be
+ so clear because of all these "ids" in previous sentence, so for example when the first step (the one with
+ the id of `bored`) is active, body element gets a class of `impress-on-bored`.
+
+ This class is used by this hint below. Check CSS file to see how it's shown with delayed CSS animation when
+ the first step of presentation is visible for a couple of seconds.
+
+ ...
+
+ And when it comes to this piece of JavaScript below ... kids, don't do this at home ;)
+ It's just a quick and dirty workaround to get different hint text for touch devices.
+ In a real world it should be at least placed in separate JS file ... and the touch content should be
+ probably just hidden somewhere in HTML - not hard-coded in the script.
+
+ Just sayin' ;)
+
+ -->
+</textarea>
+
+
+<br /><br />
+
+
+
+<h2>Credits</h2>
+Many thanks to Bartek Szopka for creating the wonderful impress.js library and also the demo presentation who made this app possible.
+<br /><br />
+
+
+
+</div> \ No newline at end of file
diff --git a/apps/impress/templates/presentations.php b/apps/impress/templates/presentations.php
new file mode 100755
index 00000000000..ab75802b359
--- /dev/null
+++ b/apps/impress/templates/presentations.php
@@ -0,0 +1,30 @@
+<?php
+
+
+
+// show toolbar
+echo('<div id="controls">
+ <a href="'.\OCP\Util::linkToAbsolute('impress','documentation.php').'" class="button docu">'.$l->t('Documentation').'</a>
+ </div>
+');
+
+
+if(empty($_['list'])) {
+
+ echo('<div id="emptyfolder">No Impress files are found in your ownCloud. Please upload a .impress file.</div>');
+
+}else{
+
+ echo('<table class="impresslist" >');
+ foreach($_['list'] as $entry) {
+
+ echo('<tr><td width="1"><a target="_blank" href="'.\OCP\Util::linkToAbsolute('impress','player.php').'&file='.urlencode($entry['url']).'&name='.urlencode($entry['name']).'"><img align="left" src="'.\OCP\Util::linkToAbsolute('impress','img/impressbig.png').'"></a></td><td><a target="_blank" href="'.\OCP\Util::linkToAbsolute('impress','player.php').'&file='.urlencode($entry['url']).'&name='.urlencode($entry['name']).'">'.$entry['name'].'</a></td><td>'.\OCP\Util::formatDate($entry['mtime']).'</td><td>'.\OCP\Util::humanFileSize($entry['size']).'</td></tr>');
+
+ }
+ echo('</table>');
+
+
+
+}
+
+
diff --git a/apps/media/ajax/api.php b/apps/media/ajax/api.php
index 37dc6380198..7f5cdb22c12 100644
--- a/apps/media/ajax/api.php
+++ b/apps/media/ajax/api.php
@@ -24,8 +24,6 @@
header('Content-type: text/html; charset=UTF-8') ;
OCP\JSON::checkAppEnabled('media');
-require_once(OC::$APPSROOT . '/apps/media/lib_collection.php');
-require_once(OC::$APPSROOT . '/apps/media/lib_scanner.php');
error_reporting(E_ALL); //no script error reporting because of getID3
@@ -48,6 +46,9 @@ if(!isset($arguments['album'])){
if(!isset($arguments['search'])){
$arguments['search']='';
}
+
+session_write_close();
+
OC_MEDIA_COLLECTION::$uid=OCP\USER::getUser();
if($arguments['action']){
switch($arguments['action']){
@@ -105,6 +106,10 @@ if($arguments['action']){
@ob_end_clean();
$ftype=OC_Filesystem::getMimeType( $arguments['path'] );
+ if(substr($ftype,0,5)!='audio' and $ftype!='application/ogg'){
+ echo 'Not an audio file';
+ exit();
+ }
$songId=OC_MEDIA_COLLECTION::getSongByPath($arguments['path']);
OC_MEDIA_COLLECTION::registerPlay($songId);
@@ -126,4 +131,3 @@ if($arguments['action']){
exit;
}
}
-?> \ No newline at end of file
diff --git a/apps/media/ajax/autoupdate.php b/apps/media/ajax/autoupdate.php
index 3122c7e6754..a5801f1a0e0 100644
--- a/apps/media/ajax/autoupdate.php
+++ b/apps/media/ajax/autoupdate.php
@@ -23,11 +23,6 @@
header('Content-type: text/html; charset=UTF-8') ;
-//no apps or filesystem
-$RUNTIME_NOAPPS=true;
-$RUNTIME_NOSETUPFS=true;
-
-
OCP\JSON::checkAppEnabled('media');
$autoUpdate=(isset($_GET['autoupdate']) and $_GET['autoupdate']=='true');
@@ -35,4 +30,3 @@ $autoUpdate=(isset($_GET['autoupdate']) and $_GET['autoupdate']=='true');
OCP\Config::setUserValue(OCP\USER::getUser(),'media','autoupdate',(integer)$autoUpdate);
OCP\JSON::success(array('data' => $autoUpdate));
-?>
diff --git a/apps/media/appinfo/app.php b/apps/media/appinfo/app.php
index 26cb2045549..75015d627b4 100644
--- a/apps/media/appinfo/app.php
+++ b/apps/media/appinfo/app.php
@@ -22,13 +22,26 @@
$l=OC_L10N::get('media');
-require_once('apps/media/lib_media.php');
+OC::$CLASSPATH['OC_MEDIA'] = 'media/lib_media.php';
+OC::$CLASSPATH['OC_MediaSearchProvider'] = 'media/lib_media.php';
+OC::$CLASSPATH['OC_MEDIA_COLLECTION'] = 'media/lib_collection.php';
+OC::$CLASSPATH['OC_MEDIA_SCANNER'] = 'media/lib_scanner.php';
+
+//we need to have the sha256 hash of passwords for ampache
+OCP\Util::connectHook('OC_User','post_login','OC_MEDIA','loginListener');
+
+//connect to the filesystem for auto updating
+OCP\Util::connectHook('OC_Filesystem','post_write','OC_MEDIA','updateFile');
+
+//listen for file deletions to clean the database if a song is deleted
+OCP\Util::connectHook('OC_Filesystem','post_delete','OC_MEDIA','deleteFile');
+
+//list for file moves to update the database
+OCP\Util::connectHook('OC_Filesystem','post_rename','OC_MEDIA','moveFile');
OCP\Util::addscript('media','loader');
OCP\App::registerPersonal('media','settings');
-OCP\App::register( array( 'order' => 3, 'id' => 'media', 'name' => 'Media' ));
-
OCP\App::addNavigationEntry(array('id' => 'media_index', 'order' => 2, 'href' => OCP\Util::linkTo('media', 'index.php'), 'icon' => OCP\Util::imagePath('core', 'places/music.svg'), 'name' => $l->t('Music')));
OC_Search::registerProvider('OC_MediaSearchProvider');
diff --git a/apps/media/appinfo/version b/apps/media/appinfo/version
index e6adf3fc7bb..44bb5d1f743 100644
--- a/apps/media/appinfo/version
+++ b/apps/media/appinfo/version
@@ -1 +1 @@
-0.4 \ No newline at end of file
+0.4.1 \ No newline at end of file
diff --git a/apps/media/index.php b/apps/media/index.php
index 906d7bacb6e..ae85abc8aab 100644
--- a/apps/media/index.php
+++ b/apps/media/index.php
@@ -28,9 +28,6 @@
OCP\User::checkLoggedIn();
OCP\App::checkAppEnabled('media');
-require_once(OC::$APPSROOT . '/apps/media/lib_collection.php');
-require_once(OC::$APPSROOT . '/apps/media/lib_scanner.php');
-
OCP\Util::addscript('media','player');
OCP\Util::addscript('media','music');
OCP\Util::addscript('media','playlist');
@@ -43,5 +40,3 @@ OCP\App::setActiveNavigationEntry( 'media_index' );
$tmpl = new OCP\Template( 'media', 'music', 'user' );
$tmpl->printPage();
-?>
-
diff --git a/apps/media/js/loader.js b/apps/media/js/loader.js
index 393f8ba914e..ffe9c1cdd61 100644
--- a/apps/media/js/loader.js
+++ b/apps/media/js/loader.js
@@ -45,8 +45,8 @@ $(document).ready(function() {
// FileActions.register('application/ogg','Add to playlist','',addAudio);
if(typeof FileActions!=='undefined'){
- FileActions.register('audio','Play','',playAudio);
- FileActions.register('application/ogg','','Play',playAudio);
+ FileActions.register('audio','Play', FileActions.PERMISSION_READ, '',playAudio);
+ FileActions.register('application/ogg', FileActions.PERMISSION_READ, '','Play',playAudio);
FileActions.setDefault('audio','Play');
FileActions.setDefault('application/ogg','Play');
}
diff --git a/apps/media/js/player.js b/apps/media/js/player.js
index ad406830833..867ea802363 100644
--- a/apps/media/js/player.js
+++ b/apps/media/js/player.js
@@ -40,7 +40,7 @@ var PlayList={
PlayList.init(items[index].type,null); // init calls load that calls play
}else{
PlayList.player.jPlayer("setMedia", items[PlayList.current]);
- $(".jp-current-song").text(items[PlayList.current].name);
+ $(".jp-current-song").html(items[PlayList.current].name);
items[index].playcount++;
PlayList.player.jPlayer("play",time);
if(index>0){
diff --git a/apps/media/l10n/ar.php b/apps/media/l10n/ar.php
index a335f36a1f2..655589df8aa 100644
--- a/apps/media/l10n/ar.php
+++ b/apps/media/l10n/ar.php
@@ -1,5 +1,6 @@
<?php $TRANSLATIONS = array(
"Music" => "الموسيقى",
+"Add album to playlist" => "أض٠الالبوم الى القائمه",
"Play" => "إلعب",
"Pause" => "تجميد",
"Previous" => "السابق",
diff --git a/apps/media/l10n/bg_BG.php b/apps/media/l10n/bg_BG.php
index 1b71b26a165..e6c3c02d17f 100644
--- a/apps/media/l10n/bg_BG.php
+++ b/apps/media/l10n/bg_BG.php
@@ -1,5 +1,6 @@
<?php $TRANSLATIONS = array(
"Music" => "Музика",
+"Add album to playlist" => "ДобавÑне на албума към ÑпиÑъка за изпълнение",
"Play" => "ПуÑни",
"Pause" => "Пауза",
"Previous" => "Предишна",
diff --git a/apps/media/l10n/eo.php b/apps/media/l10n/eo.php
index 429247bbc33..084dbaa480e 100644
--- a/apps/media/l10n/eo.php
+++ b/apps/media/l10n/eo.php
@@ -1,9 +1,10 @@
<?php $TRANSLATIONS = array(
"Music" => "Muziko",
+"Add album to playlist" => "Aldoni albumon al ludlisto",
"Play" => "Ludi",
"Pause" => "PaÅ­zigi",
-"Previous" => "AntaÅ­a",
-"Next" => "Sekva",
+"Previous" => "Maljena",
+"Next" => "Jena",
"Mute" => "Silentigi",
"Unmute" => "Malsilentigi",
"Rescan Collection" => "Reskani la aron",
diff --git a/apps/media/l10n/fr.php b/apps/media/l10n/fr.php
index c96e84d73fd..313a918d021 100644
--- a/apps/media/l10n/fr.php
+++ b/apps/media/l10n/fr.php
@@ -1,6 +1,7 @@
<?php $TRANSLATIONS = array(
"Music" => "Musique",
-"Play" => "Play",
+"Add album to playlist" => "Ajouter l'album à la playlist",
+"Play" => "Lire",
"Pause" => "Pause",
"Previous" => "Précédent",
"Next" => "Suivant",
diff --git a/apps/media/l10n/sv.php b/apps/media/l10n/sv.php
index 75670a48515..1cf5497e7e2 100644
--- a/apps/media/l10n/sv.php
+++ b/apps/media/l10n/sv.php
@@ -1,5 +1,6 @@
<?php $TRANSLATIONS = array(
"Music" => "Musik",
+"Add album to playlist" => "Lägg till album till spellistan",
"Play" => "Spela",
"Pause" => "Paus",
"Previous" => "Föregående",
diff --git a/apps/media/l10n/uk.php b/apps/media/l10n/uk.php
new file mode 100644
index 00000000000..4ac7abbf2b2
--- /dev/null
+++ b/apps/media/l10n/uk.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"Music" => "Музика",
+"Add album to playlist" => "Додати альбом до плейлиÑта",
+"Play" => "Грати",
+"Pause" => "Пауза",
+"Previous" => "Попередній",
+"Next" => "ÐаÑтупний",
+"Mute" => "Звук вкл.",
+"Unmute" => "Звук викл.",
+"Rescan Collection" => "Повторне ÑÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð»ÐµÐºÑ†Ñ–Ñ—",
+"Artist" => "Виконавець",
+"Album" => "Ðльбом",
+"Title" => "Заголовок"
+);
diff --git a/apps/media/l10n/vi.php b/apps/media/l10n/vi.php
new file mode 100644
index 00000000000..01942ba173f
--- /dev/null
+++ b/apps/media/l10n/vi.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"Music" => "Âm nhạc",
+"Add album to playlist" => "Thêm album vào playlist",
+"Play" => "Play",
+"Pause" => "Tạm dừng",
+"Previous" => "Trang trÆ°á»›c",
+"Next" => "Tiếp theo",
+"Mute" => "Tắt",
+"Unmute" => "Bật",
+"Rescan Collection" => "Quét lại bộ sưu tập",
+"Artist" => "Nghệ sỹ",
+"Album" => "Album",
+"Title" => "Tiêu Ä‘á»"
+);
diff --git a/apps/media/l10n/zh_CN.GB2312.php b/apps/media/l10n/zh_CN.GB2312.php
new file mode 100644
index 00000000000..de7e98acd9e
--- /dev/null
+++ b/apps/media/l10n/zh_CN.GB2312.php
@@ -0,0 +1,14 @@
+<?php $TRANSLATIONS = array(
+"Music" => "音ä¹",
+"Add album to playlist" => "添加专辑到播放列表",
+"Play" => "播放",
+"Pause" => "æš‚åœ",
+"Previous" => "å‰é¢çš„",
+"Next" => "下一个",
+"Mute" => "é™éŸ³",
+"Unmute" => "å–消é™éŸ³",
+"Rescan Collection" => "é‡æ–°æ‰«æ收è—",
+"Artist" => "艺术家",
+"Album" => "专辑",
+"Title" => "标题"
+);
diff --git a/apps/media/lib/share/album.php b/apps/media/lib/share/album.php
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/apps/media/lib/share/album.php
diff --git a/apps/media/lib/share/artist.php b/apps/media/lib/share/artist.php
new file mode 100644
index 00000000000..7218fa1a279
--- /dev/null
+++ b/apps/media/lib/share/artist.php
@@ -0,0 +1,65 @@
+<?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/>.
+*/
+
+class OC_Share_Backend_Artist extends OCP\Share_Backend {
+
+ public function getSource($item, $uid) {
+ $query = OCP\DB::prepare('SELECT artist_id FROM *PREFIX*media_artists WHERE artist_id = ? AND song_user = ?');
+ $result = $query->execute(array($item, $uid))->fetchRow();
+ if (is_array($result)) {
+ return array('item' => $item, 'file' => $result['song_path']);
+ }
+ return false;
+ }
+
+ public function generateTarget($item, $uid, $exclude = null) {
+ // TODO Make sure target path doesn't exist already
+ return '/Shared'.$item;
+ }
+
+ public function formatItems($items, $format) {
+ $ids = array();
+ foreach ($items as $id => $info) {
+ $ids[] = $id;
+ }
+ $ids = "'".implode("','", $ids)."'";
+ switch ($format) {
+ case self::FORMAT_SOURCE_PATH:
+ $query = OCP\DB::prepare('SELECT path FROM *PREFIX*fscache WHERE id IN ('.$ids.')');
+ return $query->execute()->fetchAll();
+ case self::FORMAT_FILE_APP:
+ $query = OCP\DB::prepare('SELECT id, path, name, ctime, mtime, mimetype, size, encrypted, versioned, writable FROM *PREFIX*fscache WHERE id IN ('.$ids.')');
+ $result = $query->execute();
+ $files = array();
+ while ($file = $result->fetchRow()) {
+ // Set target path
+ $file['path'] = $items[$file['id']]['item_target'];
+ $file['name'] = basename($file['path']);
+ // TODO Set permissions: $file['writable']
+ $files[] = $file;
+ }
+ return $files;
+ }
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/apps/media/lib/share/song.php b/apps/media/lib/share/song.php
new file mode 100644
index 00000000000..fc69975f353
--- /dev/null
+++ b/apps/media/lib/share/song.php
@@ -0,0 +1,65 @@
+<?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/>.
+*/
+
+class OC_Share_Backend_Song extends OCP\Share_Backend {
+
+ public function getSource($item, $uid) {
+ $query = OCP\DB::prepare('SELECT song_path FROM *PREFIX*media_songs WHERE song_id = ? AND song_user = ?');
+ $result = $query->execute(array($item, $uid))->fetchRow();
+ if (is_array($result)) {
+ return array('item' => $item, 'file' => $result['song_path']);
+ }
+ return false;
+ }
+
+ public function generateTarget($item, $uid, $exclude = null) {
+ // TODO Make sure target path doesn't exist already
+ return '/Shared'.$item;
+ }
+
+ public function formatItems($items, $format) {
+ $ids = array();
+ foreach ($items as $id => $info) {
+ $ids[] = $id;
+ }
+ $ids = "'".implode("','", $ids)."'";
+ switch ($format) {
+ case self::FORMAT_SOURCE_PATH:
+ $query = OCP\DB::prepare('SELECT path FROM *PREFIX*fscache WHERE id IN ('.$ids.')');
+ return $query->execute()->fetchAll();
+ case self::FORMAT_FILE_APP:
+ $query = OCP\DB::prepare('SELECT id, path, name, ctime, mtime, mimetype, size, encrypted, versioned, writable FROM *PREFIX*fscache WHERE id IN ('.$ids.')');
+ $result = $query->execute();
+ $files = array();
+ while ($file = $result->fetchRow()) {
+ // Set target path
+ $file['path'] = $items[$file['id']]['item_target'];
+ $file['name'] = basename($file['path']);
+ // TODO Set permissions: $file['writable']
+ $files[] = $file;
+ }
+ return $files;
+ }
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/apps/media/lib_ampache.php b/apps/media/lib_ampache.php
index 8f8f1e985a6..807d94bcdeb 100644
--- a/apps/media/lib_ampache.php
+++ b/apps/media/lib_ampache.php
@@ -77,7 +77,7 @@ class OC_MEDIA_AMPACHE{
$songs=OC_MEDIA_COLLECTION::getSongCount();
$artists=OC_MEDIA_COLLECTION::getArtistCount();
$albums=OC_MEDIA_COLLECTION::getAlbumCount();
- $query=OCP\DB::prepare("INSERT INTO `*PREFIX*media_sessions` (`session_id`, `token`, `user_id`, `start`) VALUES (NULL, ?, ?, now());");
+ $query=OCP\DB::prepare("INSERT INTO `*PREFIX*media_sessions` (`token`, `user_id`, `start`) VALUES (?, ?, now());");
$query->execute(array($token,$user));
$expire=date('c',time()+600);
echo('<?xml version="1.0" encoding="UTF-8"?>');
@@ -136,8 +136,14 @@ class OC_MEDIA_AMPACHE{
return false;
}
}
+ $CONFIG_DBTYPE = OCP\Config::getSystemValue( "dbtype", "sqlite" );
+ if($CONFIG_DBTYPE == 'psql'){
+ $interval = ' \'600s\'::interval ';
+ }else {
+ $interval = '600';
+ }
//remove old sessions
- $query=OCP\DB::prepare("DELETE FROM `*PREFIX*media_sessions` WHERE `start`<(NOW()-600)");
+ $query=OCP\DB::prepare("DELETE FROM `*PREFIX*media_sessions` WHERE `start`<(NOW() - ".$interval.")");
$query->execute();
$query=OCP\DB::prepare("SELECT `user_id` FROM `*PREFIX*media_sessions` WHERE `token`=?");
@@ -266,7 +272,6 @@ class OC_MEDIA_AMPACHE{
</root>");
return;
}
- global $SITEROOT;
$filter = isset($params['filter']) ? $params['filter'] : '';
$albums=OC_MEDIA_COLLECTION::getAlbums($filter);
$artist=OC_MEDIA_COLLECTION::getArtistName($filter);
@@ -414,5 +419,3 @@ class OC_MEDIA_AMPACHE{
echo('</root>');
}
}
-
-?>
diff --git a/apps/media/lib_collection.php b/apps/media/lib_collection.php
index b59e6f82103..c7265caaecb 100644
--- a/apps/media/lib_collection.php
+++ b/apps/media/lib_collection.php
@@ -27,7 +27,6 @@ class OC_MEDIA_COLLECTION{
public static $uid;
private static $artistIdCache=array();
private static $albumIdCache=array();
- private static $songIdCache=array();
private static $queries=array();
/**
@@ -152,7 +151,7 @@ class OC_MEDIA_COLLECTION{
return $artistId;
}else{
$query=OCP\DB::prepare("INSERT INTO `*PREFIX*media_artists` (`artist_name`) VALUES (?)");
- $result=$query->execute(array($name));
+ $query->execute(array($name));
return self::getArtistId($name);;
}
}
@@ -387,5 +386,3 @@ class OC_MEDIA_COLLECTION{
$query->execute(array($newPath,$oldPath));
}
}
-
-?>
diff --git a/apps/media/lib_media.php b/apps/media/lib_media.php
index f9f10584ddf..ff58e4e7350 100644
--- a/apps/media/lib_media.php
+++ b/apps/media/lib_media.php
@@ -21,26 +21,14 @@
*
*/
-//we need to have the sha256 hash of passwords for ampache
-OCP\Util::connectHook('OC_User','post_login','OC_MEDIA','loginListener');
-
-//connect to the filesystem for auto updating
-OCP\Util::connectHook('OC_Filesystem','post_write','OC_MEDIA','updateFile');
-
-//listen for file deletions to clean the database if a song is deleted
-OCP\Util::connectHook('OC_Filesystem','post_delete','OC_MEDIA','deleteFile');
-
-//list for file moves to update the database
-OCP\Util::connectHook('OC_Filesystem','post_rename','OC_MEDIA','moveFile');
-
class OC_MEDIA{
/**
* get the sha256 hash of the password needed for ampache
* @param array $params, parameters passed from OC_Hook
*/
public static function loginListener($params){
- if(isset($_POST['user']) and $_POST['password']){
- $name=$_POST['user'];
+ if(isset($params['uid']) and $params['password']){
+ $name=$params['uid'];
$query=OCP\DB::prepare("SELECT `user_id` from `*PREFIX*media_users` WHERE `user_id` LIKE ?");
$uid=$query->execute(array($name))->fetchAll();
if(count($uid)==0){
diff --git a/apps/media/lib_scanner.php b/apps/media/lib_scanner.php
index a8218c3a4d0..3c32879eeeb 100644
--- a/apps/media/lib_scanner.php
+++ b/apps/media/lib_scanner.php
@@ -61,7 +61,6 @@ class OC_MEDIA_SCANNER{
* @return boolean
*/
public static function scanFile($path){
- $file=OC_Filesystem::getLocalFile($path);
if(!self::isMusic($path)){
return;
}
@@ -69,6 +68,7 @@ class OC_MEDIA_SCANNER{
self::$getID3=@new getID3();
self::$getID3->encoding='UTF-8';
}
+ $file=OC_Filesystem::getLocalFile($path);
$data=@self::$getID3->analyze($file);
getid3_lib::CopyTagsToComments($data);
if(!isset($data['comments'])){
diff --git a/apps/media/remote.php b/apps/media/remote.php
index 01add42b315..0535077cef1 100644
--- a/apps/media/remote.php
+++ b/apps/media/remote.php
@@ -5,7 +5,7 @@ $RUNTIME_APPTYPES=array('filesystem','authentication');
OC_App::loadApps($RUNTIME_APPTYPES);
if($path_info == '/ampache' || $path_info == '/ampache/'){
- require_once(OC::$APPSROOT . '/apps/media/index.php');
+ require_once(OC_App::getAppPath('media').'/index.php');
}else{
- require_once(OC::$APPSROOT . '/apps/media/server/xml.server.php');
+ require_once(OC_App::getAppPath('media').'/server/xml.server.php');
}
diff --git a/apps/media/server/xml.server.php b/apps/media/server/xml.server.php
index 6cb6c91ca06..796da130a47 100644
--- a/apps/media/server/xml.server.php
+++ b/apps/media/server/xml.server.php
@@ -22,8 +22,8 @@
*/
OCP\App::checkAppEnabled('media');
- require_once(OC::$APPSROOT . '/apps/media/lib_collection.php');
- require_once(OC::$APPSROOT . '/apps/media/lib_ampache.php');
+ require_once(OC_App::getAppPath('media').'/lib_collection.php');
+ require_once(OC_App::getAppPath('media').'/lib_ampache.php');
$arguments=$_POST;
if(!isset($_POST['action']) and isset($_GET['action'])){
diff --git a/apps/media/settings.php b/apps/media/settings.php
index 227298fafec..53738f02f9f 100644
--- a/apps/media/settings.php
+++ b/apps/media/settings.php
@@ -3,4 +3,3 @@
$tmpl = new OCP\Template( 'media', 'settings');
return $tmpl->fetchPage();
-?>
diff --git a/apps/remoteStorage/ajax/revokeToken.php b/apps/remoteStorage/ajax/revokeToken.php
index 699b9e9aeec..e6a68189945 100644
--- a/apps/remoteStorage/ajax/revokeToken.php
+++ b/apps/remoteStorage/ajax/revokeToken.php
@@ -5,7 +5,7 @@
*
* Original:
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @copyright 2012 Frank Karlitschek frank@owncloud.org
*
* Adapted:
* @author Michiel de Jong, 2012
@@ -25,10 +25,6 @@
*
*/
-
-// Do not load FS ...
-$RUNTIME_NOSETUPFS = true;
-
OCP\App::checkAppEnabled('remoteStorage');
require_once('remoteStorage/lib_remoteStorage.php');
diff --git a/apps/remoteStorage/appinfo/app.php b/apps/remoteStorage/appinfo/app.php
index 14b8a3d11df..c278fd73056 100644
--- a/apps/remoteStorage/appinfo/app.php
+++ b/apps/remoteStorage/appinfo/app.php
@@ -1,6 +1,2 @@
<?php
-OCP\App::register( array(
- 'order' => 10,
- 'id' => 'remoteStorage',
- 'name' => 'remoteStorage compatibility' ));
OCP\App::registerPersonal('remoteStorage','settings');
diff --git a/apps/remoteStorage/appinfo/info.xml b/apps/remoteStorage/appinfo/info.xml
index fa878762a05..1388ad9c316 100644
--- a/apps/remoteStorage/appinfo/info.xml
+++ b/apps/remoteStorage/appinfo/info.xml
@@ -7,4 +7,7 @@
<author>Michiel de Jong</author>
<require>4</require>
<shipped>true</shipped>
+ <remote>
+ <remoteStorage>webdav.php</remoteStorage>
+ </remote>
</info>
diff --git a/apps/remoteStorage/appinfo/version b/apps/remoteStorage/appinfo/version
index 490f510fc27..0e2c93950bb 100644
--- a/apps/remoteStorage/appinfo/version
+++ b/apps/remoteStorage/appinfo/version
@@ -1 +1 @@
-0.6 \ No newline at end of file
+0.7 \ No newline at end of file
diff --git a/apps/remoteStorage/appinfo/webfinger.php b/apps/remoteStorage/appinfo/webfinger.php
index 5d481f315f8..e8b237628c4 100644
--- a/apps/remoteStorage/appinfo/webfinger.php
+++ b/apps/remoteStorage/appinfo/webfinger.php
@@ -1,8 +1,8 @@
-<?php if(OC_User::userExists(WF_USER)) { ?>
+<?php if(OC_User::userExists(WF_USER)): ?>
{
"rel":"remoteStorage",
- "template":"<?php echo WF_BASEURL; ?>/apps/remoteStorage/WebDAV.php/<?php echo WF_USER; ?>/remoteStorage/{category}/",
+ "template":"<?php echo WF_BASEURL; ?>/remote.php/remoteStorage/<?php echo WF_USER; ?>/remoteStorage/{category}/",
"api":"WebDAV",
"auth":"<?php echo WF_BASEURL; ?>/?app=remoteStorage&getfile=auth.php&userid=<?php echo WF_USER; ?>"
}
-<?php } ?>
+<?php endif ?>
diff --git a/apps/remoteStorage/auth.php b/apps/remoteStorage/auth.php
index a54be37b2e6..91ca43ea076 100644
--- a/apps/remoteStorage/auth.php
+++ b/apps/remoteStorage/auth.php
@@ -5,7 +5,7 @@
*
* Original:
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @copyright 2012 Frank Karlitschek frank@owncloud.org
*
* Adapted:
* @author Michiel de Jong, 2012
@@ -25,9 +25,7 @@
*
*/
-
-// Do not load FS ...
-$RUNTIME_NOSETUPFS = true;
+header("X-Frame-Options: Sameorigin");
OCP\App::checkAppEnabled('remoteStorage');
require_once('Sabre/autoload.php');
@@ -43,9 +41,9 @@ foreach($_GET as $k => $v) {
$userId=$v;
} else if($k=='redirect_uri'){
$appUrlParts=explode('/', $v);
- $appUrl = $appUrlParts[2];//bit dodgy i guess
+ $appUrl = htmlentities($appUrlParts[2]);//TODO: check if this is equal to client_id
} else if($k=='scope'){
- $categories=$v;
+ $categories=htmlentities($v);
}
}
$currUser = OCP\USER::getUser();
@@ -59,64 +57,23 @@ if($userId && $appUrl && $categories) {
header('Location: '.$_GET['redirect_uri'].'#access_token='.$existingToken.'&token_type=bearer');
} else {
//params ok, logged in ok, but need to click Allow still:
-?>
-<!DOCTYPE html>
-<html>
- <head>
- <title>ownCloud</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <link rel="shortcut icon" href="../../../core/img/favicon.png" /><link rel="apple-touch-icon-precomposed" href="../../../core/img/favicon-touch.png" />
- <link rel="stylesheet" href="../../../core/css/styles.css" type="text/css" media="screen" />
- <link rel="stylesheet" href="../../../core/css/auth.css" type="text/css" media="screen" />
- </head>
- <body id="body-login">
- <div id="login">
- <header>
- <div id="header">
- <img src="../../../core/img/logo.png" alt="ownCloud" />
- </div>
- </header>
- <section id="main">
- <div id="oauth">
- <h2><img src="../../../core/img/remoteStorage-big.png" alt="remoteStorage" /></h2>
- <p><strong><?php $appUrlParts = explode('/', $_GET['redirect_uri']); echo htmlentities($appUrlParts[2]); ?></strong>
- requests read &amp; write access to your
- <?php
- $categories = explode(',', htmlentities($_GET['scope']));
- if(!count($categories)) {
- echo htmlentities($_GET['scope']);
- } else {
- echo '<em>'.$categories[0].'</em>';
- if(count($categories)==2) {
- echo ' and <em>'.$categories[1].'</em>';
- } else if(count($categories)>2) {
- for($i=1; $i<count($categories)-1; $i++) {
- echo ', <em>'.$categories[$i].'</em>';
- }
- echo ', and <em>'.$categories[$i].'</em>';
- }
- }
- ?>.
- </p>
- <form accept-charset="UTF-8" method="post">
- <input id="allow-auth" name="allow" type="submit" value="Allow" />
- <input id="deny-auth" name="deny" type="submit" value="Deny" />
- </form>
- </div>
- </section>
- </div>
- <footer><p class="info"><a href="http://owncloud.org/">ownCloud</a> &ndash; web services under your control</p></footer>
- </body>
-</html>
-<?php
- }//end 'need to click Allow still'
+ $appUrlParts = explode('/', $_GET['redirect_uri']);
+ $host = $appUrlParts[2];
+ $categories = explode(',', $_GET['scope']);
+ OCP\Util::addStyle('', 'auth');
+ OCP\Template::printGuestPage('remoteStorage', 'auth', array(
+ 'host' => $host,
+ 'categories' => $categories,
+ ));
+ }//end 'need to click Allow still'
} else {//login not ok
if($currUser) {
- die('You are logged in as '.$currUser.' instead of '.$userId);
+ die('You are logged in as '.$currUser.' instead of '.htmlentities($userId));
} else {
- header('Location: /?redirect_url='.urlencode('/apps/remoteStorage/auth.php'.$_SERVER['PATH_INFO'].'?'.$_SERVER['QUERY_STRING']));
+ // this will display the login page for us
+ OCP\Util::checkLoggedIn();
}
}
} else {//params not ok
- die('please use e.g. /?app=remoteStorage&getfile=auth.php&userid=admin&redirect_uri=http://host/path&scope=...');
+ die('please use e.g. '.OCP\Util::linkTo('remoteStorage', 'auth.php').'?userid=admin&redirect_uri=http://host/path&scope=...');
}
diff --git a/apps/remoteStorage/img/remoteStorage.png b/apps/remoteStorage/img/remoteStorage.png
new file mode 100644
index 00000000000..10c2be243c2
--- /dev/null
+++ b/apps/remoteStorage/img/remoteStorage.png
Binary files differ
diff --git a/apps/remoteStorage/lib_remoteStorage.php b/apps/remoteStorage/lib_remoteStorage.php
index b6934e87d67..b9e23680037 100644
--- a/apps/remoteStorage/lib_remoteStorage.php
+++ b/apps/remoteStorage/lib_remoteStorage.php
@@ -2,8 +2,8 @@
class OC_remoteStorage {
public static function getValidTokens($ownCloudUser, $category) {
- $query=OCP\DB::prepare("SELECT `token`,`appUrl`,`category` FROM `*PREFIX*authtoken` WHERE `user`=?",100);
- $result=$query->execute(array($ownCloudUser));
+ $stmt=OCP\DB::prepare("SELECT `token`,`appUrl`,`category` FROM `*PREFIX*authtoken` WHERE `user`=?",100);
+ $result=$stmt->execute(array($ownCloudUser));
$ret = array();
while($row=$result->fetchRow()){
if(in_array($category, explode(',', $row['category']))) {
@@ -15,20 +15,19 @@ class OC_remoteStorage {
public static function getTokenFor($appUrl, $categories) {
$user=OCP\USER::getUser();
- $query=OCP\DB::prepare("SELECT `token` FROM `*PREFIX*authtoken` WHERE `user`=? AND `appUrl`=? AND `category`=?",1);
- $result=$query->execute(array($user, $appUrl, $categories));
- $ret = array();
+ $stmt=OCP\DB::prepare("SELECT `token` FROM `*PREFIX*authtoken` WHERE `user`=? AND `appUrl`=? AND `category`=?",1);
+ $result=$stmt->execute(array($user, $appUrl, $categories));
if($row=$result->fetchRow()) {
- return base64_encode('remoteStorage:'.$row['token']);
- } else {
- return false;
- }
+ return base64_encode('remoteStorage:'.$row['token']);
+ } else {
+ return false;
+ }
}
public static function getAllTokens() {
$user=OCP\USER::getUser();
- $query=OCP\DB::prepare("SELECT `token`,`appUrl`,`category` FROM `*PREFIX*authtoken` WHERE `user`=?",100);
- $result=$query->execute(array($user));
+ $stmt=OCP\DB::prepare("SELECT `token`,`appUrl`,`category` FROM `*PREFIX*authtoken` WHERE `user`=?",100);
+ $result=$stmt->execute(array($user));
$ret = array();
while($row=$result->fetchRow()){
$ret[$row['token']] = array(
@@ -41,14 +40,14 @@ class OC_remoteStorage {
public static function deleteToken($token) {
$user=OCP\USER::getUser();
- $query=OCP\DB::prepare("DELETE FROM `*PREFIX*authtoken` WHERE `token`=? AND `user`=?");
- $result=$query->execute(array($token,$user));
+ $stmt=OCP\DB::prepare("DELETE FROM `*PREFIX*authtoken` WHERE `token`=? AND `user`=?");
+ $stmt->execute(array($token,$user));
return 'unknown';//how can we see if any rows were affected?
}
private static function addToken($token, $appUrl, $categories){
$user=OCP\USER::getUser();
- $query=OCP\DB::prepare("INSERT INTO `*PREFIX*authtoken` (`token`,`appUrl`,`user`,`category`) VALUES(?,?,?,?)");
- $result=$query->execute(array($token,$appUrl,$user,$categories));
+ $stmt=OCP\DB::prepare("INSERT INTO `*PREFIX*authtoken` (`token`,`appUrl`,`user`,`category`) VALUES(?,?,?,?)");
+ $stmt->execute(array($token,$appUrl,$user,$categories));
}
public static function createCategories($appUrl, $categories) {
$token=uniqid();
diff --git a/apps/remoteStorage/oauth_ro_auth.php b/apps/remoteStorage/oauth_ro_auth.php
index 12d02d1cf5d..bed3093c3b3 100644
--- a/apps/remoteStorage/oauth_ro_auth.php
+++ b/apps/remoteStorage/oauth_ro_auth.php
@@ -9,10 +9,10 @@
class OC_Connector_Sabre_Auth_ro_oauth extends Sabre_DAV_Auth_Backend_AbstractBasic {
private $validTokens;
- private $category;
+ private $category;
public function __construct($validTokensArg, $categoryArg) {
$this->validTokens = $validTokensArg;
- $this->category = $categoryArg;
+ $this->category = $categoryArg;
}
/**
@@ -25,16 +25,16 @@ class OC_Connector_Sabre_Auth_ro_oauth extends Sabre_DAV_Auth_Backend_AbstractBa
*/
protected function validateUserPass($username, $password){
//always give read-only:
- if(($_SERVER['REQUEST_METHOD'] == 'OPTIONS')
+ if(($_SERVER['REQUEST_METHOD'] == 'OPTIONS')
|| (isset($this->validTokens[$password]))
- || (($_SERVER['REQUEST_METHOD'] == 'GET') && ($this->category == 'public'))
- ) {
+ || (($_SERVER['REQUEST_METHOD'] == 'GET') && ($this->category == 'public'))
+ ) {
OC_Util::setUpFS();
return true;
} else {
- //var_export($_SERVER);
- //var_export($this->validTokens);
- //die('not getting in with "'.$username.'"/"'.$password.'"!');
+ //var_export($_SERVER);
+ //var_export($this->validTokens);
+ //die('not getting in with "'.$username.'"/"'.$password.'"!');
return false;
}
}
@@ -48,8 +48,8 @@ class OC_Connector_Sabre_Auth_ro_oauth extends Sabre_DAV_Auth_Backend_AbstractBa
$userpass = $auth->getUserPass();
if (!$userpass) {
if(($_SERVER['REQUEST_METHOD'] == 'OPTIONS')
- ||(($_SERVER['REQUEST_METHOD'] == 'GET') && ($this->category == 'public'))
- ) {
+ ||(($_SERVER['REQUEST_METHOD'] == 'GET') && ($this->category == 'public'))
+ ) {
$userpass = array('', '');
} else {
$auth->requireLogin();
diff --git a/apps/remoteStorage/remoteStorage.png b/apps/remoteStorage/remoteStorage.png
deleted file mode 100644
index 6b751c09997..00000000000
--- a/apps/remoteStorage/remoteStorage.png
+++ /dev/null
Binary files differ
diff --git a/apps/remoteStorage/settings.php b/apps/remoteStorage/settings.php
index 9c48549fe6d..3be8b0984d8 100644
--- a/apps/remoteStorage/settings.php
+++ b/apps/remoteStorage/settings.php
@@ -4,4 +4,3 @@ require_once('lib_remoteStorage.php');
$tmpl = new OCP\Template( 'remoteStorage', 'settings');
return $tmpl->fetchPage();
-?>
diff --git a/apps/remoteStorage/templates/auth.php b/apps/remoteStorage/templates/auth.php
new file mode 100644
index 00000000000..6a7054eabb0
--- /dev/null
+++ b/apps/remoteStorage/templates/auth.php
@@ -0,0 +1,28 @@
+ <section id="main">
+ <div id="oauth">
+ <h2><img src="<?php echo image_path('', 'remoteStorage-big.png'); ?>" alt="remoteStorage" /></h2>
+ <p><strong><?php echo $_['host'] ?></strong>
+ requests read &amp; write access to your
+ <?php
+ $categories = $_['categories'];
+ if(!count($categories)) {
+ echo $categories[0];
+ } else {
+ echo '<em>'.$categories[0].'</em>';
+ if(count($categories)==2) {
+ echo ' and <em>'.$categories[1].'</em>';
+ } else if(count($categories)>2) {
+ for($i=1; $i<count($categories)-1; $i++) {
+ echo ', <em>'.$categories[$i].'</em>';
+ }
+ echo ', and <em>'.$categories[$i].'</em>';
+ }
+ }
+ ?>.
+ </p>
+ <form accept-charset="UTF-8" method="post">
+ <input id="allow-auth" name="allow" type="submit" value="Allow" />
+ <input id="deny-auth" name="deny" type="submit" value="Deny" />
+ </form>
+ </div>
+ </section>
diff --git a/apps/remoteStorage/templates/settings.php b/apps/remoteStorage/templates/settings.php
index 147378dda39..1d2a188f527 100644
--- a/apps/remoteStorage/templates/settings.php
+++ b/apps/remoteStorage/templates/settings.php
@@ -1,10 +1,6 @@
<fieldset class="personalblock">
- <?php
- echo '<img src="../apps/remoteStorage/remoteStorage.png" style="width:16px"> '
- .'<strong>'.$l->t('remoteStorage').'</strong> user address: '
- .OCP\USER::getUser().'@'.$_SERVER['SERVER_NAME']
- .' (<a href="http://unhosted.org/">more info</a>)';
- ?>
+ <img src="<?php echo image_path('remoteStorage', 'remoteStorage.png') ?>" style="width:16px">
+ <strong><?php echo $l->t('remoteStorage') ?></strong> user address: <?php echo OCP\USER::getUser().'@'.$_SERVER['SERVER_NAME'] ?> (<a href="http://unhosted.org/">more info</a>)
<p><em>Apps that currently have access to your ownCloud:</em></p>
<script>
function revokeToken(token) {
@@ -14,15 +10,13 @@
}
</script>
<ul>
- <?php
- foreach(OC_remoteStorage::getAllTokens() as $token => $details) {
- echo '<li onmouseover="'
- .'document.getElementById(\'revoke_'.$token.'\').style.display=\'inline\';"'
- .'onmouseout="document.getElementById(\'revoke_'.$token.'\').style.display=\'none\';"'
- .'> <strong>'.$details['appUrl'].'</strong>: '.$details['categories']
- .' <a href="#" title="Revoke" class="action" style="display:none" id="revoke_'.$token.'" onclick="'
- .'revokeToken(\''.$token.'\');this.parentNode.style.display=\'none\';"'
- .'><img src="/core/img/actions/delete.svg"></a></li>'."\n";
- }
- ?></ul>
+ <?php foreach(OC_remoteStorage::getAllTokens() as $token => $details) { ?>
+ <li onmouseover="$('#revoke_<?php echo $token ?>').show();" onmouseout="$('#revoke_<?php echo $token ?>').hide();">
+ <strong><?php echo $details['appUrl'] ?></strong>: <?php echo $details['categories'] ?>
+ <a href="#" title="Revoke" class="action" style="display:none" id="revoke_<?php echo $token ?>" onclick="revokeToken('<?php echo $token ?>');$(this).hide();">
+ <img src="<?php echo OCP\Util::imagePath('core', 'actions/delete.svg') ?>">
+ </a>
+ </li>
+ <?php } ?>
+ </ul>
</fieldset>
diff --git a/apps/remoteStorage/WebDAV.php b/apps/remoteStorage/webdav.php
index ab498db07da..8d8ec6a45a1 100644
--- a/apps/remoteStorage/WebDAV.php
+++ b/apps/remoteStorage/webdav.php
@@ -5,7 +5,7 @@
*
* Original:
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @copyright 2012 Frank Karlitschek frank@owncloud.org
*
* Adapted:
* @author Michiel de Jong, 2011
@@ -25,22 +25,7 @@
*
*/
-
-// Do not load FS ...
-$RUNTIME_NOSETUPFS = true;
-
-
-require_once('../../lib/base.php');
-
-require_once('../../lib/user.php');
-require_once('../../lib/public/user.php');
-
-require_once('../../lib/app.php');
-require_once('../../lib/public/app.php');
-
-require_once('../../3rdparty/Sabre/DAV/Auth/IBackend.php');
-require_once('../../3rdparty/Sabre/DAV/Auth/Backend/AbstractBasic.php');
-require_once('../../lib/connector/sabre/auth.php');
+OC_App::loadApps(array('filesystem','authentication'));
OCP\App::checkAppEnabled('remoteStorage');
require_once('lib_remoteStorage.php');
@@ -61,14 +46,15 @@ if(isset($_SERVER['HTTP_ORIGIN'])) {
header('Access-Control-Allow-Origin: *');
}
-$path = substr($_SERVER["REQUEST_URI"], strlen($_SERVER["SCRIPT_NAME"]));
+$path = substr($_SERVER["REQUEST_URI"], strlen($baseuri));
+
$pathParts = explode('/', $path);
// for webdav:
-// 0/ 1 / 2 / 3...
-// /$ownCloudUser/remoteStorage/$category/
+// 0 / 1 / 2...
+// $ownCloudUser/remoteStorage/$category/
-if(count($pathParts) >= 3 && $pathParts[0] == '') {
- list($dummy, $ownCloudUser, $dummy2, $category) = $pathParts;
+if(count($pathParts) >= 2) {
+ list($ownCloudUser, $dummy2, $category) = $pathParts;
OC_Util::setupFS($ownCloudUser);
@@ -77,13 +63,13 @@ if(count($pathParts) >= 3 && $pathParts[0] == '') {
$server = new Sabre_DAV_Server($publicDir);
// Path to our script
- $server->setBaseUri(OC::$WEBROOT."/apps/remoteStorage/WebDAV.php/$ownCloudUser");
+ $server->setBaseUri($baseuri.$ownCloudUser);
// Auth backend
$authBackend = new OC_Connector_Sabre_Auth_ro_oauth(
- OC_remoteStorage::getValidTokens($ownCloudUser, $category),
- $category
- );
+ OC_remoteStorage::getValidTokens($ownCloudUser, $category),
+ $category
+ );
$authPlugin = new Sabre_DAV_Auth_Plugin($authBackend,'ownCloud');//should use $validTokens here
$server->addPlugin($authPlugin);
diff --git a/apps/tasks/ajax/addtask.php b/apps/tasks/ajax/addtask.php
index 188e179236a..d98fdbf3888 100644
--- a/apps/tasks/ajax/addtask.php
+++ b/apps/tasks/ajax/addtask.php
@@ -22,7 +22,7 @@ $request['description'] = null;
$vcalendar = OC_Task_App::createVCalendarFromRequest($request);
$id = OC_Calendar_Object::add($cid, $vcalendar->serialize());
-$user_timezone = OCP\Config::getUserValue(OCP\User::getUser(), 'calendar', 'timezone', date_default_timezone_get());
+$user_timezone = OC_Calendar_App::getTimezone();
$task = OC_Task_App::arrayForJSON($id, $vcalendar->VTODO, $user_timezone);
OCP\JSON::success(array('task' => $task));
diff --git a/apps/tasks/ajax/addtaskform.php b/apps/tasks/ajax/addtaskform.php
deleted file mode 100644
index 2795f393732..00000000000
--- a/apps/tasks/ajax/addtaskform.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-// Init owncloud
-OCP\JSON::checkLoggedIn();
-OCP\JSON::checkAppEnabled('tasks');
-OCP\JSON::callCheck();
-
-$calendars = OC_Calendar_Calendar::allCalendars(OCP\User::getUser(), true);
-$category_options = OC_Calendar_App::getCategoryOptions();
-$percent_options = range(0, 100, 10);
-$priority_options = OC_Task_App::getPriorityOptions();
-$tmpl = new OCP\Template('tasks','part.addtaskform');
-$tmpl->assign('calendars',$calendars);
-$tmpl->assign('category_options', $category_options);
-$tmpl->assign('percent_options', $percent_options);
-$tmpl->assign('priority_options', $priority_options);
-$tmpl->assign('details', new OC_VObject('VTODO'));
-$tmpl->assign('categories', '');
-$page = $tmpl->fetchPage();
-
-OCP\JSON::success(array('data' => array( 'page' => $page )));
diff --git a/apps/tasks/ajax/edittask.php b/apps/tasks/ajax/edittask.php
deleted file mode 100644
index 77ecff13e66..00000000000
--- a/apps/tasks/ajax/edittask.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-// Init owncloud
-OCP\JSON::checkLoggedIn();
-OCP\JSON::checkAppEnabled('tasks');
-OCP\JSON::callCheck();
-
-$l10n = new OC_L10N('tasks');
-
-$id = $_POST['id'];
-$vcalendar = OC_Calendar_App::getVCalendar($id);
-
-$errors = OC_Task_App::validateRequest($_POST);
-if (!empty($errors)) {
- OCP\JSON::error(array('data' => array( 'errors' => $errors )));
- exit();
-}
-
-OC_Task_App::updateVCalendarFromRequest($_POST, $vcalendar);
-OC_Calendar_Object::edit($id, $vcalendar->serialize());
-
-$priority_options = OC_Task_App::getPriorityOptions();
-$tmpl = new OCP\Template('tasks','part.details');
-$tmpl->assign('priority_options', $priority_options);
-$tmpl->assign('details', $vcalendar->VTODO);
-$tmpl->assign('id', $id);
-$page = $tmpl->fetchPage();
-
-$user_timezone = OCP\Config::getUserValue(OCP\User::getUser(), 'calendar', 'timezone', date_default_timezone_get());
-$task = OC_Task_App::arrayForJSON($id, $vcalendar->VTODO, $user_timezone);
-
-OCP\JSON::success(array('data' => array( 'id' => $id, 'page' => $page, 'task' => $task )));
diff --git a/apps/tasks/ajax/edittaskform.php b/apps/tasks/ajax/edittaskform.php
deleted file mode 100644
index e5a0a7297c5..00000000000
--- a/apps/tasks/ajax/edittaskform.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-// Init owncloud
-OCP\JSON::checkLoggedIn();
-OCP\JSON::checkAppEnabled('tasks');
-
-$id = $_GET['id'];
-$details = OC_Calendar_App::getVCalendar($id)->VTODO;
-$categories = $details->getAsString('CATEGORIES');
-
-$category_options = OC_Calendar_App::getCategoryOptions();
-$percent_options = range(0, 100, 10);
-$priority_options = OC_Task_App::getPriorityOptions();
-
-$tmpl = new OCP\Template('tasks','part.edittaskform');
-$tmpl->assign('category_options', $category_options);
-$tmpl->assign('percent_options', $percent_options);
-$tmpl->assign('priority_options', $priority_options);
-$tmpl->assign('id',$id);
-$tmpl->assign('details',$details);
-$tmpl->assign('categories', $categories);
-$page = $tmpl->fetchPage();
-
-OCP\JSON::success(array('data' => array( 'page' => $page )));
diff --git a/apps/tasks/ajax/getdetails.php b/apps/tasks/ajax/getdetails.php
deleted file mode 100644
index 4ce469e0c9c..00000000000
--- a/apps/tasks/ajax/getdetails.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-// Init owncloud
-OCP\JSON::checkLoggedIn();
-OCP\JSON::checkAppEnabled('tasks');
-
-$l10n = new OC_L10N('tasks');
-
-$id = $_GET['id'];
-$task = OC_Calendar_Object::find($id);
-$details = OC_VObject::parse($task['calendardata']);
-if (!$details){
- OCP\JSON::error();
- exit;
-}
-
-$priority_options = OC_Task_App::getPriorityOptions();
-$tmpl = new OCP\Template('tasks','part.details');
-$tmpl->assign('priority_options', $priority_options);
-$tmpl->assign('details',$details->VTODO);
-$tmpl->assign('id',$id);
-$page = $tmpl->fetchPage();
-
-OCP\JSON::success(array('data' => array( 'id' => $id, 'page' => $page )));
diff --git a/apps/tasks/ajax/gettasks.php b/apps/tasks/ajax/gettasks.php
index 011730d0a13..b6183d9cb65 100644
--- a/apps/tasks/ajax/gettasks.php
+++ b/apps/tasks/ajax/gettasks.php
@@ -11,7 +11,7 @@ OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('tasks');
$calendars = OC_Calendar_Calendar::allCalendars(OCP\User::getUser(), true);
-$user_timezone = OCP\Config::getUserValue(OCP\User::getUser(), 'calendar', 'timezone', date_default_timezone_get());
+$user_timezone = OC_Calendar_App::getTimezone();
$tasks = array();
foreach( $calendars as $calendar ){
diff --git a/apps/tasks/ajax/update_property.php b/apps/tasks/ajax/update_property.php
index 46521cf6c58..679cfdefe48 100644
--- a/apps/tasks/ajax/update_property.php
+++ b/apps/tasks/ajax/update_property.php
@@ -9,6 +9,7 @@
// Init owncloud
OCP\JSON::checkLoggedIn();
OCP\JSON::checkAppEnabled('tasks');
+OCP\JSON::callCheck();
$id = $_POST['id'];
$property = $_POST['type'];
@@ -38,7 +39,7 @@ switch($property) {
$type = null;
if ($due != 'false') {
try {
- $timezone = OCP\Config::getUserValue(OCP\User::getUser(), 'calendar', 'timezone', date_default_timezone_get());
+ $timezone = OC_Calendar_App::getTimezone();
$timezone = new DateTimeZone($timezone);
$due = new DateTime('@'.$due);
$due->setTimezone($timezone);
@@ -63,6 +64,6 @@ switch($property) {
}
OC_Calendar_Object::edit($id, $vcalendar->serialize());
-$user_timezone = OCP\Config::getUserValue(OCP\User::getUser(), 'calendar', 'timezone', date_default_timezone_get());
+$user_timezone = OC_Calendar_App::getTimezone();
$task_info = OC_Task_App::arrayForJSON($id, $vtodo, $user_timezone);
OCP\JSON::success(array('data' => $task_info));
diff --git a/apps/tasks/appinfo/app.php b/apps/tasks/appinfo/app.php
index f346e2aa4c0..e7c82d6f247 100644
--- a/apps/tasks/appinfo/app.php
+++ b/apps/tasks/appinfo/app.php
@@ -3,11 +3,6 @@ $l=new OC_L10N('tasks');
OC::$CLASSPATH['OC_Calendar_Calendar'] = 'apps/calendar/lib/calendar.php';
OC::$CLASSPATH['OC_Task_App'] = 'apps/tasks/lib/app.php';
-OCP\App::register( array(
- 'order' => 11,
- 'id' => 'tasks',
- 'name' => 'Tasks' ));
-
OCP\App::addNavigationEntry( array(
'id' => 'tasks_index',
'order' => 11,
diff --git a/apps/tasks/css/style.css b/apps/tasks/css/style.css
index f6333f57b8a..80b6e777b5d 100644
--- a/apps/tasks/css/style.css
+++ b/apps/tasks/css/style.css
@@ -9,7 +9,7 @@
#tasks_lists .active{font-weight:bold;}
#tasks_list h1{background-color:#1D2D44;color:white;font-size:120%;padding:0 0.5em;}
-.task{border-radius:0.4em;position:relative;padding:0.5em 1em;}
+.task{border-radius:0.4em;position:relative;padding:0.4em 1em;}
.task:nth-child(odd){background-color:#F4F4F4;}
.task:hover {background-color:#DDDDDD;}
@@ -42,18 +42,19 @@
.task:hover .tag{opacity:0.5}
.task:hover .tag:hover{opacity:0.8;}
-.task .categories{position:absolute;right:12em;text-align:right;top:0.4em}
+.task .categories{position:absolute;right:12em;text-align:right;top:0.5em}
.task .categories a{background-color:#1d2d44;color:white;}
.task .categories .tag.active{display:none;}
.task input.categories{display:none;top:0;text-align:left;}
-.task .location{background-color:#442d44;color:white;position:absolute;right:0.6em;width:9.2em;text-align:left;top:0.4em}
+.task .location{background-color:#442d44;color:white;position:absolute;right:0.6em;width:9.2em;text-align:left;top:0.5em}
.task input.location{display:none;top:0;text-align:left;right:0.3em;background-color:white;color:#333333;}
.task .more{display:none;margin-top:0.5em;}
.task_less{display:none;}
.task .description{position:relative;left:4em;}
+.task textarea.description{width:35em;height:4em;}
.task .due{position:absolute;right:0.3em;}
.task .due .date{width:6em;}
.task .due .time{width:6em;}
diff --git a/apps/tasks/img/icon.png b/apps/tasks/img/icon.png
index df281f3ba86..e2802ae9387 100644
--- a/apps/tasks/img/icon.png
+++ b/apps/tasks/img/icon.png
Binary files differ
diff --git a/apps/tasks/index.php b/apps/tasks/index.php
index 5e17ca454ec..f1c4d1e765c 100644
--- a/apps/tasks/index.php
+++ b/apps/tasks/index.php
@@ -21,12 +21,11 @@ OCP\Util::addScript('3rdparty/timepicker', 'jquery.ui.timepicker');
OCP\Util::addStyle('3rdparty/timepicker', 'jquery.ui.timepicker');
OCP\Util::addScript('tasks', 'tasks');
OCP\Util::addStyle('tasks', 'style');
-OCP\Util::addScript('contacts','jquery.multi-autocomplete');
-OCP\Util::addScript('','oc-vcategories');
+OCP\Util::addScript('contacts', 'jquery.multi-autocomplete');
+OCP\Util::addScript('', 'oc-vcategories');
OCP\App::setActiveNavigationEntry('tasks_index');
$categories = OC_Calendar_App::getCategoryOptions();
-$l10n = new OC_L10N('tasks');
$priority_options = OC_Task_App::getPriorityOptions();
$output = new OCP\Template('tasks', 'tasks', 'user');
$output->assign('priority_options', $priority_options);
diff --git a/apps/tasks/js/tasks.js b/apps/tasks/js/tasks.js
index bc92965bb0b..de627927507 100644
--- a/apps/tasks/js/tasks.js
+++ b/apps/tasks/js/tasks.js
@@ -469,67 +469,5 @@ $(document).ready(function(){
return false;
});
- $('#tasks_addtaskform input[type="submit"]').live('click',function(){
- $.post('ajax/addtask.php',$('#tasks_addtaskform').serialize(),function(jsondata){
- if(jsondata.status == 'success'){
- $('#task_details').data('id',jsondata.data.id);
- $('#task_details').html(jsondata.data.page);
- $('#tasks_list').append(OC.Tasks.create_task_div(jsondata.data.task));
- }
- else{
- alert(jsondata.data.message);
- }
- }, 'json');
- return false;
- });
-
- $('#tasks_edit').live('click',function(){
- var id = $('#task_details').data('id');
- $.getJSON('ajax/edittaskform.php',{'id':id},function(jsondata){
- if(jsondata.status == 'success'){
- $('#task_details').html(jsondata.data.page);
- $('#task_details #categories').multiple_autocomplete({source: categories});
- }
- else{
- alert(jsondata.data.message);
- }
- });
- return false;
- });
-
- $('#tasks_edittaskform #percent_complete').live('change',function(event){
- if ($(event.target).val() == 100){
- $('#tasks_edittaskform #complete').show();
- }else{
- $('#tasks_edittaskform #complete').hide();
- }
- });
-
- $('#tasks_edittaskform input[type="submit"]').live('click',function(){
- $.post('ajax/edittask.php',$('#tasks_edittaskform').serialize(),function(jsondata){
- $('.error_msg').remove();
- $('.error').removeClass('error');
- if(jsondata.status == 'success'){
- var id = jsondata.data.id;
- $('#task_details').data('id',id);
- $('#task_details').html(jsondata.data.page);
- var task = jsondata.data.task;
- $('#tasks .task[data-id='+id+']')
- .data('task', task)
- .html(OC.Tasks.create_task_div(task).html());
- }
- else{
- var errors = jsondata.data.errors;
- for (k in errors){
- $('#'+k).addClass('error')
- .after('<span class="error_msg">'+errors[k]+'</span>');
- }
- $('.error_msg').effect('highlight', {}, 3000);
- $('.error').effect('highlight', {}, 3000);
- }
- }, 'json');
- return false;
- });
-
OCCategories.app = 'calendar';
});
diff --git a/apps/tasks/l10n/.gitkeep b/apps/tasks/l10n/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/apps/tasks/l10n/.gitkeep
diff --git a/apps/tasks/l10n/ca.php b/apps/tasks/l10n/ca.php
new file mode 100644
index 00000000000..2608d8b9b17
--- /dev/null
+++ b/apps/tasks/l10n/ca.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Invalid date/time" => "data/hora incorrecta",
+"Tasks" => "Tasques",
+"No category" => "Cap categoria",
+"Unspecified" => "Sense especificar",
+"1=highest" => "1=major",
+"5=medium" => "5=mitjana",
+"9=lowest" => "9=inferior",
+"Empty Summary" => "Elimina el resum",
+"Invalid percent complete" => "Percentatge completat no vàlid",
+"Invalid priority" => "Prioritat no vàlida",
+"Add Task" => "Afegeix una tasca",
+"Order Due" => "Ordena per",
+"Order List" => "Ordena per llista",
+"Order Complete" => "Ordena els complets",
+"Order Location" => "Ordena per ubicació",
+"Order Priority" => "Ordena per prioritat",
+"Order Label" => "Ordena per etiqueta",
+"Loading tasks..." => "Carregant les tasques...",
+"Important" => "Important",
+"More" => "Més",
+"Less" => "Menys",
+"Delete" => "Elimina"
+);
diff --git a/apps/tasks/l10n/cs_CZ.php b/apps/tasks/l10n/cs_CZ.php
new file mode 100644
index 00000000000..9da5f7ab607
--- /dev/null
+++ b/apps/tasks/l10n/cs_CZ.php
@@ -0,0 +1,15 @@
+<?php $TRANSLATIONS = array(
+"Invalid date/time" => "Neplatné datum/Äas",
+"Tasks" => "Úkoly",
+"No category" => "Bez kategorie",
+"1=highest" => "1=nejvyšší",
+"5=medium" => "5=střední",
+"9=lowest" => "9=nejnižší",
+"Invalid priority" => "Neplatná priorita",
+"Add Task" => "Přidat úkol",
+"Loading tasks..." => "NaÄítám úkoly...",
+"Important" => "Důležité",
+"More" => "Více",
+"Less" => "Méně",
+"Delete" => "Smazat"
+);
diff --git a/apps/tasks/l10n/da.php b/apps/tasks/l10n/da.php
new file mode 100644
index 00000000000..a413f22d17b
--- /dev/null
+++ b/apps/tasks/l10n/da.php
@@ -0,0 +1,16 @@
+<?php $TRANSLATIONS = array(
+"Invalid date/time" => "Ugyldig dato/tid",
+"Tasks" => "Opgaver",
+"No category" => "Ingen kategori",
+"Unspecified" => "Uspecificeret",
+"1=highest" => "1=højeste",
+"5=medium" => "5=mellem",
+"9=lowest" => "9=laveste",
+"Empty Summary" => "Tom beskrivelse",
+"Add Task" => "Tilføj opgave",
+"Loading tasks..." => "Indlæser opgaver...",
+"Important" => "vigtigt",
+"More" => "Mere",
+"Less" => "Mindre",
+"Delete" => "Slet"
+);
diff --git a/apps/tasks/l10n/de.php b/apps/tasks/l10n/de.php
new file mode 100644
index 00000000000..29b9bf41ec6
--- /dev/null
+++ b/apps/tasks/l10n/de.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Invalid date/time" => "Datum/Uhrzeit ungültig",
+"Tasks" => "Aufgaben",
+"No category" => "Keine Kategorie",
+"Unspecified" => "Nicht angegeben",
+"1=highest" => "1 = am höchsten",
+"5=medium" => "5 = Durchschnitt",
+"9=lowest" => "9 = am niedrigsten",
+"Empty Summary" => "Leere Zusammenfassung",
+"Invalid percent complete" => "Ungültige Prozent abgeschlossen",
+"Invalid priority" => "Falsche Priorität",
+"Add Task" => "Aufgabe hinzufügen",
+"Order Due" => "Nach Fälligkeit sortieren",
+"Order List" => "Nach Kategorie sortieren ",
+"Order Complete" => "Nach Fertigstellung sortieren",
+"Order Location" => "Nach Ort sortieren",
+"Order Priority" => "Nach Priorität sortieren",
+"Order Label" => "Nach Label sortieren",
+"Loading tasks..." => "Lade Aufgaben ...",
+"Important" => "Wichtig",
+"More" => "Mehr",
+"Less" => "Weniger",
+"Delete" => "Löschen"
+);
diff --git a/apps/tasks/l10n/el.php b/apps/tasks/l10n/el.php
new file mode 100644
index 00000000000..cdf2f609e5a
--- /dev/null
+++ b/apps/tasks/l10n/el.php
@@ -0,0 +1,18 @@
+<?php $TRANSLATIONS = array(
+"Invalid date/time" => "Μην έγκυÏη ημεÏομηνία / ÏŽÏα",
+"Tasks" => "ΕÏγασίες",
+"No category" => "ΧωÏίς κατηγοÏία",
+"Unspecified" => "Μη οÏισμένο",
+"1=highest" => "1=υψηλότεÏο",
+"5=medium" => "5=μέτÏιο",
+"9=lowest" => "9=χαμηλότεÏο",
+"Empty Summary" => "Άδεια πεÏίληψη",
+"Invalid percent complete" => "Μη έγκυÏο ποσοστό ολοκλήÏωσης",
+"Invalid priority" => "Μη έγκυÏη Ï€ÏοτεÏαιότητα ",
+"Add Task" => "ΠÏοσθήκη εÏγασίας",
+"Loading tasks..." => "ΦόÏτωση εÏγασιών...",
+"Important" => "Σημαντικό ",
+"More" => "ΠεÏισσότεÏα",
+"Less" => "ΛιγότεÏα",
+"Delete" => "ΔιαγÏαφή"
+);
diff --git a/apps/tasks/l10n/eo.php b/apps/tasks/l10n/eo.php
new file mode 100644
index 00000000000..9919a6ea63e
--- /dev/null
+++ b/apps/tasks/l10n/eo.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Invalid date/time" => "Nevalida dato/horo",
+"Tasks" => "Taskoj",
+"No category" => "Neniu kategorio",
+"Unspecified" => "Nespecifita",
+"1=highest" => "1=plej alta",
+"5=medium" => "5=meza",
+"9=lowest" => "9=plej malalta",
+"Empty Summary" => "Malplena resumo",
+"Invalid percent complete" => "Nevalida plenuma elcento",
+"Invalid priority" => "Nevalida pligravo",
+"Add Task" => "Aldoni taskon",
+"Order Due" => "Ordigi laÅ­ limdato",
+"Order List" => "Ordigi laÅ­ listo",
+"Order Complete" => "Ordigi laÅ­ plenumo",
+"Order Location" => "Ordigi laÅ­ loko",
+"Order Priority" => "Ordigi laÅ­ pligravo",
+"Order Label" => "Ordigi laÅ­ etikedo",
+"Loading tasks..." => "Åœargante taskojn...",
+"Important" => "Grava",
+"More" => "Pli",
+"Less" => "Malpli",
+"Delete" => "Forigi"
+);
diff --git a/apps/tasks/l10n/es.php b/apps/tasks/l10n/es.php
new file mode 100644
index 00000000000..e5f0981de55
--- /dev/null
+++ b/apps/tasks/l10n/es.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Invalid date/time" => "Fecha/hora inválida",
+"Tasks" => "Tareas",
+"No category" => "Sin categoría",
+"Unspecified" => "Sin especificar",
+"1=highest" => "1=mayor",
+"5=medium" => "5=media",
+"9=lowest" => "9=menor",
+"Empty Summary" => "Resumen vacío",
+"Invalid percent complete" => "Porcentaje completado inválido",
+"Invalid priority" => "Prioridad inválida",
+"Add Task" => "Agregar tarea",
+"Order Due" => "Ordenar por",
+"Order List" => "Ordenar por lista",
+"Order Complete" => "Ordenar por completadas",
+"Order Location" => "Ordenar por ubicación",
+"Order Priority" => "Ordenar por prioridad",
+"Order Label" => "Ordenar por etiqueta",
+"Loading tasks..." => "Cargando tareas...",
+"Important" => "Importante",
+"More" => "Más",
+"Less" => "Menos",
+"Delete" => "Borrar"
+);
diff --git a/apps/tasks/l10n/et_EE.php b/apps/tasks/l10n/et_EE.php
new file mode 100644
index 00000000000..56db6ee0327
--- /dev/null
+++ b/apps/tasks/l10n/et_EE.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Invalid date/time" => "Vigane kuupäev/kellaaeg",
+"Tasks" => "Ãœlesanded",
+"No category" => "Kategooriat pole",
+"Unspecified" => "Määramata",
+"1=highest" => "1=kõrgeim",
+"5=medium" => "5=keskmine",
+"9=lowest" => "9=madalaim",
+"Empty Summary" => "Tühi kokkuvõte",
+"Invalid percent complete" => "Vigane edenemise protsent",
+"Invalid priority" => "Vigane tähtsus",
+"Add Task" => "Lisa ülesanne",
+"Order Due" => "Tähtaja järgi",
+"Order List" => "Nimekirja järgi",
+"Order Complete" => "Edenemise järgi",
+"Order Location" => "Asukoha järgi",
+"Order Priority" => "Tähtsuse järjekorras",
+"Order Label" => "Sildi järgi",
+"Loading tasks..." => "Ãœlesannete laadimine...",
+"Important" => "Tähtis",
+"More" => "Rohkem",
+"Less" => "Vähem",
+"Delete" => "Kustuta"
+);
diff --git a/apps/tasks/l10n/fa.php b/apps/tasks/l10n/fa.php
new file mode 100644
index 00000000000..40b5b610f4e
--- /dev/null
+++ b/apps/tasks/l10n/fa.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"Tasks" => "وظایÙ",
+"1=highest" => "1=بیش‌ترین",
+"5=medium" => "5=متوسط",
+"9=lowest" => "9=کم‌ترین",
+"Loading tasks..." => "درحال بارگزاری وظایÙ",
+"Important" => "مهم",
+"More" => "بیش‌تر",
+"Less" => "کم‌تر",
+"Delete" => "حذÙ"
+);
diff --git a/apps/tasks/l10n/fi_FI.php b/apps/tasks/l10n/fi_FI.php
new file mode 100644
index 00000000000..7948e712e9c
--- /dev/null
+++ b/apps/tasks/l10n/fi_FI.php
@@ -0,0 +1,17 @@
+<?php $TRANSLATIONS = array(
+"Invalid date/time" => "Virheellinen päivä tai aika",
+"Tasks" => "Tehtävät",
+"No category" => "Ei luokkaa",
+"Unspecified" => "Määrittelemätön",
+"1=highest" => "1=korkein",
+"5=medium" => "5=keskitaso",
+"9=lowest" => "9=matalin",
+"Empty Summary" => "Tyhjä yhteenveto",
+"Invalid priority" => "Virheellinen prioriteetti",
+"Add Task" => "Lisää tehtävä",
+"Loading tasks..." => "Ladataan tehtäviä...",
+"Important" => "Tärkeä",
+"More" => "Enemmän",
+"Less" => "Vähemmän",
+"Delete" => "Poista"
+);
diff --git a/apps/tasks/l10n/fr.php b/apps/tasks/l10n/fr.php
new file mode 100644
index 00000000000..5b0a0321a87
--- /dev/null
+++ b/apps/tasks/l10n/fr.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Invalid date/time" => "date/heure invalide",
+"Tasks" => "Tâches",
+"No category" => "Sans catégorie",
+"Unspecified" => "Non spécifié",
+"1=highest" => "1=le plus important",
+"5=medium" => "5=importance moyenne",
+"9=lowest" => "9=le moins important",
+"Empty Summary" => "Résumé vide",
+"Invalid percent complete" => "Pourcentage d'achèvement invalide",
+"Invalid priority" => "Priorité invalide",
+"Add Task" => "Ajouter une tâche",
+"Order Due" => "Echéance tâche",
+"Order List" => "Liste tâche",
+"Order Complete" => "Tâche réalisée",
+"Order Location" => "Lieu",
+"Order Priority" => "Priorité",
+"Order Label" => "Etiquette tâche",
+"Loading tasks..." => "Chargement des tâches…",
+"Important" => "Important",
+"More" => "Plus",
+"Less" => "Moins",
+"Delete" => "Supprimer"
+);
diff --git a/apps/tasks/l10n/it.php b/apps/tasks/l10n/it.php
new file mode 100644
index 00000000000..1aac8aac886
--- /dev/null
+++ b/apps/tasks/l10n/it.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Invalid date/time" => "Ora/Data non valida",
+"Tasks" => "Attività",
+"No category" => "Nessuna categoria",
+"Unspecified" => "Non specificata",
+"1=highest" => "1=massima",
+"5=medium" => "5=media",
+"9=lowest" => "9=minima",
+"Empty Summary" => "Riepilogo vuoto",
+"Invalid percent complete" => "Percentuale di completamento non valida",
+"Invalid priority" => "Priorità non valida",
+"Add Task" => "Aggiungi attività",
+"Order Due" => "Ordina per scadenza",
+"Order List" => "Ordina per elenco",
+"Order Complete" => "Ordina per completamento",
+"Order Location" => "Ordina per posizione",
+"Order Priority" => "Ordina per priorità",
+"Order Label" => "Ordina per etichetta",
+"Loading tasks..." => "Caricamento attività in corso...",
+"Important" => "Importante",
+"More" => "Più",
+"Less" => "Meno",
+"Delete" => "Elimina"
+);
diff --git a/apps/tasks/l10n/ja_JP.php b/apps/tasks/l10n/ja_JP.php
new file mode 100644
index 00000000000..b5b526c595a
--- /dev/null
+++ b/apps/tasks/l10n/ja_JP.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Invalid date/time" => "無効ãªæ—¥ä»˜ï¼æ™‚刻",
+"Tasks" => "タスク",
+"No category" => "カテゴリ無ã—",
+"Unspecified" => "未指定",
+"1=highest" => "1=高",
+"5=medium" => "5=中",
+"9=lowest" => "9=低",
+"Empty Summary" => "è¦æ—¨ãŒæœªè¨˜å…¥",
+"Invalid percent complete" => "進æ—ï¼…ãŒä¸æ­£",
+"Invalid priority" => "無効ãªå„ªå…ˆåº¦",
+"Add Task" => "タスクを追加",
+"Order Due" => "期日ã§ä¸¦ã¹æ›¿ãˆ",
+"Order List" => "リストã§ä¸¦ã³æ›¿ãˆ",
+"Order Complete" => "完了ã§ä¸¦ã¹æ›¿ãˆ",
+"Order Location" => "場所ã§ä¸¦ã¹æ›¿ãˆ",
+"Order Priority" => "優先度ã§ä¸¦ã¹æ›¿ãˆ",
+"Order Label" => "ラベルã§ä¸¦ã¹æ›¿ãˆ",
+"Loading tasks..." => "タスクをロード中...",
+"Important" => "é‡è¦",
+"More" => "詳細",
+"Less" => "é–‰ã˜ã‚‹",
+"Delete" => "削除"
+);
diff --git a/apps/tasks/l10n/lt_LT.php b/apps/tasks/l10n/lt_LT.php
new file mode 100644
index 00000000000..7c17fc22242
--- /dev/null
+++ b/apps/tasks/l10n/lt_LT.php
@@ -0,0 +1,10 @@
+<?php $TRANSLATIONS = array(
+"Invalid date/time" => "Netinkama data/laikas",
+"No category" => "Be kategorijos",
+"Empty Summary" => "TuÅ¡Äias apraÅ¡ymas",
+"Invalid percent complete" => "Netinkamas baigimo procentas",
+"Important" => "Svarbūs",
+"More" => "Daugiau",
+"Less" => "Mažiau",
+"Delete" => "IÅ¡trinti"
+);
diff --git a/apps/tasks/l10n/nb_NO.php b/apps/tasks/l10n/nb_NO.php
new file mode 100644
index 00000000000..a6b398857b0
--- /dev/null
+++ b/apps/tasks/l10n/nb_NO.php
@@ -0,0 +1,17 @@
+<?php $TRANSLATIONS = array(
+"Invalid date/time" => "feil i dato/klokkeslett",
+"Tasks" => "Oppgaver",
+"No category" => "Ingen kategori",
+"Unspecified" => "Uspesifisert",
+"1=highest" => "1=høyest",
+"5=medium" => "5=middels",
+"9=lowest" => "9=lavest",
+"Invalid percent complete" => "Feil i prosent fullført",
+"Invalid priority" => "Ulovlig prioritet",
+"Add Task" => "Legg til oppgave",
+"Loading tasks..." => "Henter oppgaver...",
+"Important" => "Viktig",
+"More" => "Mer",
+"Less" => "Mindre",
+"Delete" => "Slett"
+);
diff --git a/apps/tasks/l10n/pl.php b/apps/tasks/l10n/pl.php
new file mode 100644
index 00000000000..48796284869
--- /dev/null
+++ b/apps/tasks/l10n/pl.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Invalid date/time" => "ZÅ‚a data/czas",
+"Tasks" => "Zadania",
+"No category" => "Brak kategorii",
+"Unspecified" => "Nieokreślona",
+"1=highest" => "1=najwyższy",
+"5=medium" => "5=średni",
+"9=lowest" => "9=mało ważny ",
+"Empty Summary" => "Podsumowanie puste",
+"Invalid percent complete" => "Nieprawidłowy procent wykonania",
+"Invalid priority" => "Nieprawidłowy priorytet",
+"Add Task" => "Dodaj zadanie",
+"Order Due" => "Kolejność - domyślna",
+"Order List" => "Kolejność - wg lista",
+"Order Complete" => "Kolejność - wg kompletności",
+"Order Location" => "Kolejność - wg lokalizacja",
+"Order Priority" => "Kolejność - wg priorytetu",
+"Order Label" => "Kolejność - wg nazywy",
+"Loading tasks..." => "ÅadujÄ™ zadania",
+"Important" => "Ważne",
+"More" => "Więcej",
+"Less" => "Mniej",
+"Delete" => "Usuń"
+);
diff --git a/apps/tasks/l10n/ro.php b/apps/tasks/l10n/ro.php
new file mode 100644
index 00000000000..54958582f5b
--- /dev/null
+++ b/apps/tasks/l10n/ro.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Invalid date/time" => "Data/timpul invalid",
+"Tasks" => "Sarcini",
+"No category" => "Fără categorie",
+"Unspecified" => "Nespecificat",
+"1=highest" => "1=cel mai înalt",
+"5=medium" => "5=mediu",
+"9=lowest" => "9=cel mai jos",
+"Empty Summary" => "Rezumat gol",
+"Invalid percent complete" => "Completare procentuală greșită",
+"Invalid priority" => "Prioritare greșită",
+"Add Task" => "Adaugă sarcină",
+"Order Due" => "Comandă până la",
+"Order List" => "Lista de comenzi",
+"Order Complete" => "Comandă executată",
+"Order Location" => "Locația comenzii",
+"Order Priority" => "Prioritarea comenzii",
+"Order Label" => "Eticheta comenzii",
+"Loading tasks..." => "Încărcare sarcini",
+"Important" => "Important",
+"More" => "Mai mult",
+"Less" => "Mai puțin",
+"Delete" => "Șterge"
+);
diff --git a/apps/tasks/l10n/sl.php b/apps/tasks/l10n/sl.php
new file mode 100644
index 00000000000..c235ff0bc47
--- /dev/null
+++ b/apps/tasks/l10n/sl.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Invalid date/time" => "Neveljaven datum/Äas",
+"Tasks" => "Opravila",
+"No category" => "Ni kategorije",
+"Unspecified" => "NedoloÄen",
+"1=highest" => "1=najvišje",
+"5=medium" => "5=srednje",
+"9=lowest" => "9=najnižje",
+"Empty Summary" => "Prazen povzetek",
+"Invalid percent complete" => "Neveljaven odstotek dokonÄanja",
+"Invalid priority" => "Neveljavna prednost",
+"Add Task" => "Dodaj opravilo",
+"Order Due" => "Razvrsti po roku",
+"Order List" => "Razvrsti v seznam",
+"Order Complete" => "Razvrsti po zakljuÄenosti",
+"Order Location" => "Razvrsti po lokacijah",
+"Order Priority" => "Razvrsti po prednosti",
+"Order Label" => "Razvrsti po oznakah",
+"Loading tasks..." => "Nalagam opravila...",
+"Important" => "Pomembno",
+"More" => "VeÄ",
+"Less" => "Manj",
+"Delete" => "Izbriši"
+);
diff --git a/apps/tasks/l10n/sv.php b/apps/tasks/l10n/sv.php
new file mode 100644
index 00000000000..33bab14448f
--- /dev/null
+++ b/apps/tasks/l10n/sv.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Invalid date/time" => "Felaktigt datum/tid",
+"Tasks" => "Uppgifter",
+"No category" => "Ingen kategori",
+"Unspecified" => "Ospecificerad ",
+"1=highest" => "1=högsta",
+"5=medium" => "5=mellan",
+"9=lowest" => "9=lägsta",
+"Empty Summary" => "Tom sammanfattning",
+"Invalid percent complete" => "Ogiltig andel procent klar",
+"Invalid priority" => "Felaktig prioritet",
+"Add Task" => "Lägg till uppgift",
+"Order Due" => "Förfaller",
+"Order List" => "Kategori",
+"Order Complete" => "Slutförd",
+"Order Location" => "Plats",
+"Order Priority" => "Prioritet",
+"Order Label" => "Etikett",
+"Loading tasks..." => "Laddar uppgifter...",
+"Important" => "Viktigt",
+"More" => "Mer",
+"Less" => "Mindre",
+"Delete" => "Radera"
+);
diff --git a/apps/tasks/l10n/th_TH.php b/apps/tasks/l10n/th_TH.php
new file mode 100644
index 00000000000..e4212bf291c
--- /dev/null
+++ b/apps/tasks/l10n/th_TH.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Invalid date/time" => "วันที่ / เวลา ไม่ถูà¸à¸•à¹‰à¸­à¸‡",
+"Tasks" => "งาน",
+"No category" => "ไม่มีหมวดหมู่",
+"Unspecified" => "ยังไม่ได้ระบุ",
+"1=highest" => "1=สูงสุด",
+"5=medium" => "5=ปานà¸à¸¥à¸²à¸‡",
+"9=lowest" => "9=ต่ำสุด",
+"Empty Summary" => "ข้อมูลสรุปยังว่างอยู่",
+"Invalid percent complete" => "สัดส่วนเปอร์เซ็นต์ความสมบูรณ์ไม่ถูà¸à¸•à¹‰à¸­à¸‡",
+"Invalid priority" => "ความสำคัà¸à¹„ม่ถูà¸à¸•à¹‰à¸­à¸‡",
+"Add Task" => "เพิ่มงานใหม่",
+"Order Due" => "จัดเรียงตามà¸à¸³à¸«à¸™à¸”เวลา",
+"Order List" => "จัดเรียงตามรายชื่อ",
+"Order Complete" => "จัดเรียงตามความสมบูรณ์",
+"Order Location" => "จัดเรียงตามตำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่อยู่",
+"Order Priority" => "จัดเรียงตามระดับความสำคัà¸",
+"Order Label" => "จัดเรียงตามป้ายชื่อ",
+"Loading tasks..." => "à¸à¸³à¸¥à¸±à¸‡à¹‚หลดข้อมูลงาน...",
+"Important" => "สำคัà¸",
+"More" => "มาà¸",
+"Less" => "น้อย",
+"Delete" => "ลบ"
+);
diff --git a/apps/tasks/lib/app.php b/apps/tasks/lib/app.php
index 7b908420333..a97c6b95d1d 100644
--- a/apps/tasks/lib/app.php
+++ b/apps/tasks/lib/app.php
@@ -77,24 +77,24 @@ class OC_Task_App {
public static function validateRequest($request)
{
$errors = array();
- if($request['summary'] == ''){
+ if($request['summary'] == '') {
$errors['summary'] = self::$l10n->t('Empty Summary');
}
try {
- $timezone = OCP\Config::getUserValue(OCP\User::getUser(), "calendar", "timezone", "Europe/London");
+ $timezone = OC_Calendar_App::getTimezone();
$timezone = new DateTimeZone($timezone);
new DateTime($request['due'], $timezone);
} catch (Exception $e) {
$errors['due'] = self::$l10n->t('Invalid date/time');
}
- if ($request['percent_complete'] < 0 || $request['percent_complete'] > 100){
+ if ($request['percent_complete'] < 0 || $request['percent_complete'] > 100) {
$errors['percent_complete'] = self::$l10n->t('Invalid percent complete');
}
- if ($request['percent_complete'] == 100 && !empty($request['completed'])){
+ if ($request['percent_complete'] == 100 && !empty($request['completed'])) {
try {
- $timezone = OCP\Config::getUserValue(OCP\User::getUser(), "calendar", "timezone", "Europe/London");
+ $timezone = OC_Calendar_App::getTimezone();
$timezone = new DateTimeZone($timezone);
new DateTime($request['completed'], $timezone);
} catch (Exception $e) {
@@ -147,7 +147,7 @@ class OC_Task_App {
$vtodo->setString('PRIORITY', $priority);
if ($due) {
- $timezone = OCP\Config::getUserValue(OCP\User::getUser(), 'calendar', 'timezone', date_default_timezone_get());
+ $timezone = OC_Calendar_App::getTimezone();
$timezone = new DateTimeZone($timezone);
$due = new DateTime($due, $timezone);
$vtodo->setDateTime('DUE', $due);
@@ -168,18 +168,19 @@ class OC_Task_App {
$vtodo->__unset('PERCENT-COMPLETE');
}
- if ($percent_complete == 100){
- if (!$completed){
+ if ($percent_complete == 100) {
+ if (!$completed) {
$completed = 'now';
}
} else {
$completed = null;
}
if ($completed) {
- $timezone = OCP\Config::getUserValue(OCP\User::getUser(), 'calendar', 'timezone', date_default_timezone_get());
+ $timezone = OC_Calendar_App::getTimezone();
$timezone = new DateTimeZone($timezone);
$completed = new DateTime($completed, $timezone);
$vtodo->setDateTime('COMPLETED', $completed);
+ OCP\Util::emitHook('OC_Task', 'taskCompleted', $vtodo);
} else {
unset($vtodo->COMPLETED);
}
diff --git a/apps/tasks/templates/part.addtaskform.php b/apps/tasks/templates/part.addtaskform.php
deleted file mode 100644
index 0fad5592aa7..00000000000
--- a/apps/tasks/templates/part.addtaskform.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<form id="tasks_addtaskform">
- <?php if(count($_['calendars'])==1): ?>
- <input type="hidden" name="id" value="<?php echo $_['calendars'][0]['id']; ?>">
- <?php else: ?>
- <label for="id"><?php echo $l->t('Calendar'); ?></label>
- <select name="id" size="1">
- <?php foreach($_['calendars'] as $calendar): ?>
- <option value="<?php echo $calendar['id']; ?>"><?php echo $calendar['displayname']; ?></option>
- <?php endforeach; ?>
- </select>
- <br>
- <?php endif; ?>
- <?php echo $this->inc('part.taskform'); ?>
- <input type="submit" name="submit" value="<?php echo $l->t('Create Task'); ?>">
-</form>
diff --git a/apps/tasks/templates/part.details.php b/apps/tasks/templates/part.details.php
deleted file mode 100644
index 89636b6e762..00000000000
--- a/apps/tasks/templates/part.details.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php if(isset($_['details']->SUMMARY)): ?>
-<table>
-<?php
-echo $this->inc('part.property', array('label' => $l->t('Summary'), 'property' => $_['details']->SUMMARY));
-if(isset($_['details']->LOCATION)):
- echo $this->inc('part.property', array('label' => $l->t('Location'), 'property' => $_['details']->LOCATION));
-endif;
-if(isset($_['details']->CATEGORIES)):
- echo $this->inc('part.property', array('label' => $l->t('Categories'), 'property' => $_['details']->CATEGORIES));
-endif;
-if(isset($_['details']->DUE)):
- echo $this->inc('part.property', array('label' => $l->t('Due'), 'property' => $_['details']->DUE[0]));
-endif;
-if(isset($_['details']->PRIORITY)):
- echo $this->inc('part.property', array('label' => $l->t('Priority'), 'property' => $_['details']->PRIORITY[0], 'options' => $_['priority_options']));
-endif;
-if($_['details']->__isset('PERCENT-COMPLETE') || isset($_['details']->COMPLETED)):
-?>
-<tr>
- <th>
- <?php echo $l->t('Complete') ?>
- </th>
- <td>
-<?php if($_['details']->__isset('PERCENT-COMPLETE')):
- echo $_['details']->__get('PERCENT-COMPLETE')->value.' % ';
- endif;
- if(isset($_['details']->COMPLETED)):
- echo $l->t('on '). $l->l('datetime', $_['details']->COMPLETED[0]->getDateTime());
- endif;
- echo '</tr>';
-endif;
-if(isset($_['details']->DESCRIPTION)):
- echo $this->inc('part.property', array('label' => $l->t('Description'), 'property' => $_['details']->DESCRIPTION));
-endif; ?>
-</table>
-<form>
- <input type="button" id="tasks_delete" value="<?php echo $l->t('Delete');?>">
- <input type="button" id="tasks_edit" value="<?php echo $l->t('Edit');?>">
-</form>
-<?php else: ?>
-<?php //var_dump($_['details']); ?>
-<?php endif ?>
diff --git a/apps/tasks/templates/part.edittaskform.php b/apps/tasks/templates/part.edittaskform.php
deleted file mode 100644
index fe123f07ac6..00000000000
--- a/apps/tasks/templates/part.edittaskform.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<form id="tasks_edittaskform">
- <input type="hidden" name="id" value="<?php echo $_['id']; ?>">
- <?php echo $this->inc('part.taskform'); ?>
- <input type="submit" name="submit" value="<?php echo $l->t('Update Task'); ?>">
-</form>
diff --git a/apps/tasks/templates/part.property.php b/apps/tasks/templates/part.property.php
deleted file mode 100644
index 591fd363e6f..00000000000
--- a/apps/tasks/templates/part.property.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<tr>
- <th>
- <?php echo $_['label'] ?>
- </th>
- <td>
- <?php
- switch (get_class($_['property']))
- {
- case 'Sabre_VObject_Element_DateTime':
- echo $l->l('datetime', $_['property']->getDateTime());
- break;
- default:
- $value = $_['property']->value;
- if (isset($_['options']))
- {
- $value = $_['options'][$value];
- }
- echo nl2br($value);
- }
- ?>
- </td>
-</tr>
diff --git a/apps/tasks/templates/part.taskform.php b/apps/tasks/templates/part.taskform.php
deleted file mode 100644
index c00560903b0..00000000000
--- a/apps/tasks/templates/part.taskform.php
+++ /dev/null
@@ -1,36 +0,0 @@
- <label for="summary"><?php echo $l->t('Summary'); ?></label>
- <input type="text" id="summary" name="summary" placeholder="<?php echo $l->t('Summary of the task');?>" value="<?php echo isset($_['details']->SUMMARY) ? $_['details']->SUMMARY[0]->value : '' ?>">
- <br>
- <label for="location"><?php echo $l->t('Location'); ?></label>
- <input type="text" id="location" name="location" placeholder="<?php echo $l->t('Location of the task');?>" value="<?php echo isset($_['details']->LOCATION) ? $_['details']->LOCATION[0]->value : '' ?>">
- <br>
- <label for="categories"><?php echo $l->t('Categories'); ?></label>
- <input id="categories" name="categories" type="text" placeholder="<?php echo $l->t('Separate categories with commas'); ?>" value="<?php echo isset($_['categories']) ? htmlspecialchars($_['categories']) : '' ?>">
- <a class="action edit" onclick="$(this).tipsy('hide');OCCategories.edit();" title="<?php echo $l->t('Edit categories'); ?>"><img alt="<?php echo $l->t('Edit categories'); ?>" src="<?php echo OCP\image_path('core','actions/rename.svg')?>" class="svg action" style="width: 16px; height: 16px;"></a>
- <br>
- <label for="due"><?php echo $l->t('Due'); ?></label>
- <input type="text" id="due" name="due" placeholder="<?php echo $l->t('Due date') ?>" value="<?php echo isset($_['details']->DUE) ? $l->l('datetime', $_['details']->DUE[0]->getDateTime()) : '' ?>">
- <br>
- <select name="percent_complete" id="percent_complete">
- <?php
- foreach($_['percent_options'] as $percent){
- echo '<option value="' . $percent . '"' . (($_['details']->__get('PERCENT-COMPLETE') && $percent == $_['details']->__get('PERCENT-COMPLETE')->value) ? ' selected="selected"' : '') . '>' . $percent . ' %</option>';
- }
- ?>
- </select>
- <label for="percent_complete"><?php echo $l->t('Complete'); ?></label>
- <span id="complete"<?php echo ($_['details']->__get('PERCENT-COMPLETE') && $_['details']->__get('PERCENT-COMPLETE')->value == 100) ? '' : ' style="display:none;"' ?>><label for="completed"><?php echo $l->t('completed on'); ?></label>
- <input type="text" id="completed" name="completed" value="<?php echo isset($_['details']->COMPLETED) ? $l->l('datetime', $_['details']->COMPLETED[0]->getDateTime()) : '' ?>"></span>
- <br>
- <label for="priority"><?php echo $l->t('Priority'); ?></label>
- <select name="priority">
- <?php
- foreach($_['priority_options'] as $priority => $label){
- echo '<option value="' . $priority . '"' . ((isset($_['details']->PRIORITY) && $priority == $_['details']->PRIORITY->value) ? ' selected="selected"' : '') . '>' . $label . '</option>';
- }
- ?>
- </select>
- <br>
- <label for="description"><?php echo $l->t('Description'); ?></label><br>
- <textarea placeholder="<?php echo $l->t('Description of the task');?>" name="description"><?php echo isset($_['details']->DESCRIPTION) ? $_['details']->DESCRIPTION[0]->value : '' ?></textarea>
- <br>
diff --git a/apps/tasks/templates/part.tasks.php b/apps/tasks/templates/part.tasks.php
deleted file mode 100644
index 50be1cd6bed..00000000000
--- a/apps/tasks/templates/part.tasks.php
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php foreach( $_['tasks'] as $task ): ?>
- <li data-id="<?php echo $task['id']; ?>"><a href="index.php?id=<?php echo $task['id']; ?>"><?php echo $task['name']; ?></a> </li>
-<?php endforeach; ?>
diff --git a/apps/user_external/appinfo/app.php b/apps/user_external/appinfo/app.php
new file mode 100644
index 00000000000..c7408ec30d9
--- /dev/null
+++ b/apps/user_external/appinfo/app.php
@@ -0,0 +1,4 @@
+<?php
+OC::$CLASSPATH['OC_User_IMAP']='apps/user_external/lib/imap.php';
+OC::$CLASSPATH['OC_User_SMB']='apps/user_external/lib/smb.php';
+OC::$CLASSPATH['OC_User_FTP']='apps/user_external/lib/ftp.php';
diff --git a/apps/user_external/appinfo/info.xml b/apps/user_external/appinfo/info.xml
new file mode 100644
index 00000000000..1d1dcee5401
--- /dev/null
+++ b/apps/user_external/appinfo/info.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<info>
+ <id>user_external</id>
+ <name>External user support</name>
+ <description>Use external user authentication methods</description>
+ <licence>AGPL</licence>
+ <author>Robin Appelman</author>
+ <require>4</require>
+ <shipped>true</shipped>
+ <types>
+ <authentication/>
+ </types>
+</info>
diff --git a/apps/user_external/appinfo/version b/apps/user_external/appinfo/version
new file mode 100644
index 00000000000..ceab6e11ece
--- /dev/null
+++ b/apps/user_external/appinfo/version
@@ -0,0 +1 @@
+0.1 \ No newline at end of file
diff --git a/apps/user_external/lib/ftp.php b/apps/user_external/lib/ftp.php
new file mode 100644
index 00000000000..e03e17d2b6a
--- /dev/null
+++ b/apps/user_external/lib/ftp.php
@@ -0,0 +1,45 @@
+<?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 OC_User_FTP extends OC_User_Backend{
+ private $host;
+ private $secure;
+ private $protocol;
+
+ public function __construct($host,$secure=false){
+ $this->host=$host;
+ $this->secure=$secure;
+ $this->protocol='ftp';
+ if($this->secure){
+ $this->protocol.='s';
+ }
+ $this->protocol.='://';
+ }
+
+ /**
+ * @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){
+ $url=$this->protocol.$uid.':'.$password.'@'.$this->host.'/';
+ $result=@opendir($url);
+ if(is_resource($result)){
+ return $uid;
+ }else{
+ return false;
+ }
+ }
+
+ public function userExists($uid){
+ return true;
+ }
+}
diff --git a/apps/user_external/lib/imap.php b/apps/user_external/lib/imap.php
new file mode 100644
index 00000000000..584e9804b18
--- /dev/null
+++ b/apps/user_external/lib/imap.php
@@ -0,0 +1,40 @@
+<?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 OC_User_IMAP extends OC_User_Backend{
+ private $mailbox;
+
+ public function __construct($mailbox){
+ $this->mailbox=$mailbox;
+ }
+
+ /**
+ * @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){
+ $mbox = @imap_open($this->mailbox, $uid, $password);
+ imap_errors();
+ imap_alerts();
+ if($mbox){
+ imap_close($mbox);
+ return $uid;
+ }else{
+ return false;
+ }
+ }
+
+ public function userExists($uid){
+ return true;
+ }
+}
+
diff --git a/apps/user_external/lib/smb.php b/apps/user_external/lib/smb.php
new file mode 100644
index 00000000000..44d2b7903d8
--- /dev/null
+++ b/apps/user_external/lib/smb.php
@@ -0,0 +1,43 @@
+<?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 OC_User_SMB extends OC_User_Backend{
+ private $host;
+
+ const smbclient='smbclient';
+ const loginError='NT_STATUS_LOGON_FAILURE';
+
+ public function __construct($host){
+ $this->host=$host;
+ }
+
+ /**
+ * @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){
+ $uidEscaped=escapeshellarg($uid);
+ $password=escapeshellarg($password);
+ $result=array();
+ $command=self::smbclient.' //'.$this->host.'/dummy -U'.$uidEscaped.'%'.$password;
+ $result=exec($command,$result);
+ if(substr($result,-strlen(self::loginError))==self::loginError){
+ return false;
+ }else{
+ return $uid;
+ }
+ }
+
+ public function userExists($uid){
+ return true;
+ }
+} \ No newline at end of file
diff --git a/apps/user_external/tests/config.php b/apps/user_external/tests/config.php
new file mode 100644
index 00000000000..64ee141d32d
--- /dev/null
+++ b/apps/user_external/tests/config.php
@@ -0,0 +1,28 @@
+<?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.
+ */
+
+return array(
+ 'imap'=>array(
+ 'run'=>false,
+ 'mailbox'=>'{imap.gmail.com:993/imap/ssl}INBOX', //see http://php.net/manual/en/function.imap-open.php
+ 'user'=>'foo',//valid username/password combination
+ 'password'=>'bar',
+ ),
+ 'smb'=>array(
+ 'run'=>false,
+ 'host'=>'localhost',
+ 'user'=>'test',//valid username/password combination
+ 'password'=>'test',
+ ),
+ 'ftp'=>array(
+ 'run'=>false,
+ 'host'=>'localhost',
+ 'user'=>'test',//valid username/password combination
+ 'password'=>'test',
+ ),
+);
diff --git a/apps/user_external/tests/ftp.php b/apps/user_external/tests/ftp.php
new file mode 100644
index 00000000000..0cf7565f9c6
--- /dev/null
+++ b/apps/user_external/tests/ftp.php
@@ -0,0 +1,34 @@
+<?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_User_FTP extends UnitTestCase{
+ /**
+ * @var OC_User_IMAP $instance
+ */
+ private $instance;
+
+ private function getConfig(){
+ return include(__DIR__.'/config.php');
+ }
+
+ function skip(){
+ $config=$this->getConfig();
+ $this->skipUnless($config['ftp']['run']);
+ }
+
+ function setUp(){
+ $config=$this->getConfig();
+ $this->instance=new OC_User_FTP($config['ftp']['host']);
+ }
+
+ function testLogin(){
+ $config=$this->getConfig();
+ $this->assertEqual($config['ftp']['user'],$this->instance->checkPassword($config['ftp']['user'],$config['ftp']['password']));
+ $this->assertFalse($this->instance->checkPassword($config['ftp']['user'],$config['ftp']['password'].'foo'));
+ }
+}
diff --git a/apps/user_external/tests/imap.php b/apps/user_external/tests/imap.php
new file mode 100644
index 00000000000..c703b32107f
--- /dev/null
+++ b/apps/user_external/tests/imap.php
@@ -0,0 +1,34 @@
+<?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_User_Imap extends UnitTestCase{
+ /**
+ * @var OC_User_IMAP $instance
+ */
+ private $instance;
+
+ private function getConfig(){
+ return include(__DIR__.'/config.php');
+ }
+
+ function skip(){
+ $config=$this->getConfig();
+ $this->skipUnless($config['imap']['run']);
+ }
+
+ function setUp(){
+ $config=$this->getConfig();
+ $this->instance=new OC_User_IMAP($config['imap']['mailbox']);
+ }
+
+ function testLogin(){
+ $config=$this->getConfig();
+ $this->assertEqual($config['imap']['user'],$this->instance->checkPassword($config['imap']['user'],$config['imap']['password']));
+ $this->assertFalse($this->instance->checkPassword($config['imap']['user'],$config['imap']['password'].'foo'));
+ }
+}
diff --git a/apps/user_external/tests/smb.php b/apps/user_external/tests/smb.php
new file mode 100644
index 00000000000..1ed7eb934be
--- /dev/null
+++ b/apps/user_external/tests/smb.php
@@ -0,0 +1,34 @@
+<?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_User_SMB extends UnitTestCase{
+ /**
+ * @var OC_User_IMAP $instance
+ */
+ private $instance;
+
+ private function getConfig(){
+ return include(__DIR__.'/config.php');
+ }
+
+ function skip(){
+ $config=$this->getConfig();
+ $this->skipUnless($config['smb']['run']);
+ }
+
+ function setUp(){
+ $config=$this->getConfig();
+ $this->instance=new OC_User_SMB($config['smb']['host']);
+ }
+
+ function testLogin(){
+ $config=$this->getConfig();
+ $this->assertEqual($config['smb']['user'],$this->instance->checkPassword($config['smb']['user'],$config['smb']['password']));
+ $this->assertFalse($this->instance->checkPassword($config['smb']['user'],$config['smb']['password'].'foo'));
+ }
+}
diff --git a/apps/user_ldap/ajax/testConfiguration.php b/apps/user_ldap/ajax/testConfiguration.php
new file mode 100644
index 00000000000..a82f7e4c17b
--- /dev/null
+++ b/apps/user_ldap/ajax/testConfiguration.php
@@ -0,0 +1,39 @@
+<?php
+
+/**
+ * ownCloud - user_ldap
+ *
+ * @author Arthur Schiwon
+ * @copyright 2012 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();
+
+$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!'));
+ } else {
+ OCP\JSON::error(array('message' => '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.'));
+}
diff --git a/apps/user_ldap/appinfo/app.php b/apps/user_ldap/appinfo/app.php
index 330574c1d42..0eec7829a4a 100644
--- a/apps/user_ldap/appinfo/app.php
+++ b/apps/user_ldap/appinfo/app.php
@@ -21,15 +21,17 @@
*
*/
-require_once('apps/user_ldap/lib_ldap.php');
-require_once('apps/user_ldap/user_ldap.php');
-require_once('apps/user_ldap/group_ldap.php');
+OCP\App::registerAdmin('user_ldap', 'settings');
-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);
// register user backend
-OC_User::useBackend( 'LDAP' );
-OC_Group::useBackend( new OC_GROUP_LDAP() );
+OC_User::useBackend($userBackend);
+OC_Group::useBackend($groupBackend);
// add settings page to navigation
$entry = array(
@@ -38,3 +40,5 @@ $entry = array(
'href' => OCP\Util::linkTo( 'user_ldap', 'settings.php' ),
'name' => 'LDAP'
);
+
+OCP\Backgroundjob::addRegularTask('OCA\user_ldap\lib\Jobs', 'updateGroups');
diff --git a/apps/user_ldap/appinfo/database.xml b/apps/user_ldap/appinfo/database.xml
index b228fa2796d..a785bbf4221 100644
--- a/apps/user_ldap/appinfo/database.xml
+++ b/apps/user_ldap/appinfo/database.xml
@@ -28,6 +28,14 @@
<default></default>
</field>
+ <field>
+ <name>directory_uuid</name>
+ <type>text</type>
+ <notnull>true</notnull>
+ <length>255</length>
+ <default></default>
+ </field>
+
<index>
<name>ldap_dn_users</name>
<unique>true</unique>
@@ -71,6 +79,14 @@
<default></default>
</field>
+ <field>
+ <name>directory_uuid</name>
+ <type>text</type>
+ <notnull>true</notnull>
+ <length>255</length>
+ <default></default>
+ </field>
+
<index>
<name>ldap_dn_groups</name>
<unique>true</unique>
@@ -92,4 +108,37 @@
</table>
+
+ <table>
+
+ <name>*dbprefix*ldap_group_members</name>
+
+ <declaration>
+
+ <field>
+ <name>owncloudname</name>
+ <type>text</type>
+ <notnull>true</notnull>
+ <length>255</length>
+ <default></default>
+ </field>
+
+ <field>
+ <name>owncloudusers</name>
+ <type>clob</type>
+ <notnull>true</notnull>
+ </field>
+
+ <index>
+ <name>ldap_group_members</name>
+ <unique>true</unique>
+ <field>
+ <name>owncloudname</name>
+ </field>
+ </index>
+
+ </declaration>
+
+ </table>
+
</database> \ No newline at end of file
diff --git a/apps/user_ldap/appinfo/update.php b/apps/user_ldap/appinfo/update.php
index 3ebb19c2fca..9cf1814cf6f 100644
--- a/apps/user_ldap/appinfo/update.php
+++ b/apps/user_ldap/appinfo/update.php
@@ -2,6 +2,11 @@
//from version 0.1 to 0.2
+//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.
+
//settings
$pw = OCP\Config::getAppValue('user_ldap', 'ldap_password');
if(!is_null($pw)) {
@@ -12,25 +17,37 @@ if(!is_null($pw)) {
//detect if we can switch on naming guidelines. We won't do it on conflicts.
//it's a bit spaghetti, but hey.
-$state = OCP\Config::getSystemValue('ldapIgnoreNamingRules', 'doCheck');
-if($state == 'doCheck'){
- $sqlCleanMap = 'DELETE FROM `*PREFIX*ldap_user_mapping`';
-
- require_once(OC::$APPSROOT.'/apps/user_ldap/lib_ldap.php');
- require_once(OC::$APPSROOT.'/apps/user_ldap/user_ldap.php');
-
- OCP\Config::setSystemValue('ldapIgnoreNamingRules', true);
- $LDAP_USER = new OC_USER_LDAP();
- $users_old = $LDAP_USER->getUsers();
- $query = OCP\DB::prepare($sqlCleanMap);
- $query->execute();
+$state = OCP\Config::getSystemValue('ldapIgnoreNamingRules', 'unset');
+if($state == 'unset'){
OCP\Config::setSystemValue('ldapIgnoreNamingRules', false);
- OC_LDAP::init(true);
- $users_new = $LDAP_USER->getUsers();
- $query = OCP\DB::prepare($sqlCleanMap);
- $query->execute();
- if($users_old !== $users_new) {
- //we don't need to check Groups, because they were not supported in 3'
- OCP\Config::setSystemValue('ldapIgnoreNamingRules', true);
+}
+
+// ### 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');
+$userBE = new \OCA\user_ldap\USER_LDAP();
+$userBE->setConnector($connector);
+$groupBE = new \OCA\user_ldap\GROUP_LDAP();
+$groupBE->setConnector($connector);
+
+foreach($objects as $object) {
+ $fetchDNSql = 'SELECT ldap_dn from *PREFIX*ldap_'.$object.'_mapping';
+ $updateSql = 'UPDATE *PREFIX*ldap_'.$object.'_mapping SET ldap_DN = ?, directory_uuid = ? WHERE ldap_dn = ?';
+
+ $query = OCP\DB::prepare($fetchDNSql);
+ $res = $query->execute();
+ $DNs = $res->fetchAll();
+ $updateQuery = OCP\DB::prepare($updateSql);
+ foreach($DNs as $dn) {
+ $newDN = mb_strtolower($dn['ldap_dn'], 'UTF-8');
+ if($object == 'user') {
+ $uuid = $userBE->getUUID($newDN);
+ } else {
+ $uuid = $groupBE->getUUID($newDN);
+ }
+ $updateQuery->execute(array($newDN, $uuid, $dn['ldap_dn']));
}
-} \ No newline at end of file
+}
diff --git a/apps/user_ldap/appinfo/version b/apps/user_ldap/appinfo/version
index 2f4536184bc..e689e4949ef 100644
--- a/apps/user_ldap/appinfo/version
+++ b/apps/user_ldap/appinfo/version
@@ -1 +1 @@
-0.2 \ No newline at end of file
+0.2.0.26 \ No newline at end of file
diff --git a/apps/user_ldap/css/settings.css b/apps/user_ldap/css/settings.css
new file mode 100644
index 00000000000..30c5c175c9b
--- /dev/null
+++ b/apps/user_ldap/css/settings.css
@@ -0,0 +1,10 @@
+#ldap fieldset p label {
+ width: 20%;
+ max-width: 200px;
+ display: inline-block;
+}
+
+#ldap fieldset input {
+ width: 70%;
+ display: inline-block;
+} \ No newline at end of file
diff --git a/apps/user_ldap/group_ldap.php b/apps/user_ldap/group_ldap.php
index a3117b5a41e..b29ebe30c51 100644
--- a/apps/user_ldap/group_ldap.php
+++ b/apps/user_ldap/group_ldap.php
@@ -21,24 +21,17 @@
*
*/
-class OC_GROUP_LDAP extends OC_Group_Backend {
-// //group specific settings
- protected $ldapGroupFilter;
- protected $ldapGroupMemberAssocAttr;
- protected $configured = false;
+namespace OCA\user_ldap;
- protected $_group_user = array();
- protected $_user_groups = array();
- protected $_group_users = array();
- protected $_groups = array();
+class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
+ protected $enabled = false;
- public function __construct() {
- $this->ldapGroupFilter = OCP\Config::getAppValue('user_ldap', 'ldap_group_filter', '(objectClass=posixGroup)');
- $this->ldapGroupMemberAssocAttr = OCP\Config::getAppValue('user_ldap', 'ldap_group_member_assoc_attribute', 'uniqueMember');
-
- if(!empty($this->ldapGroupFilter) && !empty($this->ldapGroupMemberAssocAttr)) {
- $this->configured = true;
+ public function setConnector(lib\Connection &$connection) {
+ parent::setConnector($connection);
+ if(empty($this->connection->ldapGroupFilter) || empty($this->connection->ldapGroupMemberAssocAttr)) {
+ $this->enabled = false;
}
+ $this->enabled = true;
}
/**
@@ -50,31 +43,33 @@ class OC_GROUP_LDAP extends OC_Group_Backend {
* Checks whether the user is member of a group or not.
*/
public function inGroup($uid, $gid) {
- if(!$this->configured) {
+ if(!$this->enabled) {
return false;
}
- if(isset($this->_group_user[$gid][$uid])) {
- return $this->_group_user[$gid][$uid];
+ if($this->connection->isCached('inGroup'.$uid.':'.$gid)) {
+ return $this->connection->getFromCache('inGroup'.$uid.':'.$gid);
}
- $dn_user = OC_LDAP::username2dn($uid);
- $dn_group = OC_LDAP::groupname2dn($gid);
+ $dn_user = $this->username2dn($uid);
+ $dn_group = $this->groupname2dn($gid);
// just in case
if(!$dn_group || !$dn_user) {
+ $this->connection->writeToCache('inGroup'.$uid.':'.$gid, false);
return false;
}
//usually, LDAP attributes are said to be case insensitive. But there are exceptions of course.
- $members = OC_LDAP::readAttribute($dn_group, $this->ldapGroupMemberAssocAttr);
+ $members = $this->readAttribute($dn_group, $this->connection->ldapGroupMemberAssocAttr);
if(!$members) {
+ $this->connection->writeToCache('inGroup'.$uid.':'.$gid, false);
return false;
}
//extra work if we don't get back user DNs
//TODO: this can be done with one LDAP query
- if(strtolower($this->ldapGroupMemberAssocAttr) == 'memberuid') {
+ if(strtolower($this->connection->ldapGroupMemberAssocAttr) == 'memberuid') {
$dns = array();
foreach($members as $mid) {
- $filter = str_replace('%uid', $mid, OC_LDAP::conf('ldapLoginFilter'));
- $ldap_users = OC_LDAP::fetchListOfUsers($filter, 'dn');
+ $filter = str_replace('%uid', $mid, $this->connection->ldapLoginFilter);
+ $ldap_users = $this->fetchListOfUsers($filter, 'dn');
if(count($ldap_users) < 1) {
continue;
}
@@ -83,8 +78,10 @@ class OC_GROUP_LDAP extends OC_Group_Backend {
$members = $dns;
}
- $this->_group_user[$gid][$uid] = in_array($dn_user, $members);
- return $this->_group_user[$gid][$uid];
+ $isInGroup = in_array($dn_user, $members);
+ $this->connection->writeToCache('inGroup'.$uid.':'.$gid, $isInGroup);
+
+ return $isInGroup;
}
/**
@@ -96,86 +93,105 @@ class OC_GROUP_LDAP extends OC_Group_Backend {
* if the user exists at all.
*/
public function getUserGroups($uid) {
- if(!$this->configured) {
+ if(!$this->enabled) {
return array();
}
- if(isset($this->_user_groups[$uid])) {
- return $this->_user_groups[$uid];
+ if($this->connection->isCached('getUserGroups'.$uid)) {
+ return $this->connection->getFromCache('getUserGroups'.$uid);
}
- $userDN = OC_LDAP::username2dn($uid);
+ $userDN = $this->username2dn($uid);
if(!$userDN) {
- $this->_user_groups[$uid] = array();
+ $this->connection->writeToCache('getUserGroups'.$uid, array());
return array();
}
//uniqueMember takes DN, memberuid the uid, so we need to distinguish
- if((strtolower($this->ldapGroupMemberAssocAttr) == 'uniquemember')
- || (strtolower($this->ldapGroupMemberAssocAttr) == 'member')) {
+ if((strtolower($this->connection->ldapGroupMemberAssocAttr) == 'uniquemember')
+ || (strtolower($this->connection->ldapGroupMemberAssocAttr) == 'member')
+ ) {
$uid = $userDN;
- } else if(strtolower($this->ldapGroupMemberAssocAttr) == 'memberuid') {
- $result = OC_LDAP::readAttribute($userDN, 'uid');
+ } else if(strtolower($this->connection->ldapGroupMemberAssocAttr) == 'memberuid') {
+ $result = $this->readAttribute($userDN, 'uid');
$uid = $result[0];
} else {
// just in case
$uid = $userDN;
}
- $filter = OC_LDAP::combineFilterWithAnd(array(
- $this->ldapGroupFilter,
- $this->ldapGroupMemberAssocAttr.'='.$uid
+ $filter = $this->combineFilterWithAnd(array(
+ $this->connection->ldapGroupFilter,
+ $this->connection->ldapGroupMemberAssocAttr.'='.$uid
));
- $groups = OC_LDAP::fetchListOfGroups($filter, array(OC_LDAP::conf('ldapGroupDisplayName'),'dn'));
- $this->_user_groups[$uid] = array_unique(OC_LDAP::ownCloudGroupNames($groups), SORT_LOCALE_STRING);
+ $groups = $this->fetchListOfGroups($filter, array($this->connection->ldapGroupDisplayName,'dn'));
+ $groups = array_unique($this->ownCloudGroupNames($groups), SORT_LOCALE_STRING);
+ $this->connection->writeToCache('getUserGroups'.$uid, $groups);
- return $this->_user_groups[$uid];
+ return $groups;
}
/**
* @brief get a list of all users in a group
* @returns array with user ids
*/
- public function usersInGroup($gid) {
- if(!$this->configured) {
+ public function usersInGroup($gid, $search = '', $limit = -1, $offset = 0) {
+ if(!$this->enabled) {
return array();
}
- if(isset($this->_group_users[$gid])) {
- return $this->_group_users[$gid];
+ $this->groupSearch = $search;
+ if($this->connection->isCached('usersInGroup'.$gid)) {
+ $groupUsers = $this->connection->getFromCache('usersInGroup'.$gid);
+ if(!empty($this->groupSearch)) {
+ $groupUsers = array_filter($groupUsers, array($this, 'groupMatchesFilter'));
+ }
+ if($limit = -1) {
+ $limit = null;
+ }
+ return array_slice($groupUsers, $offset, $limit);
}
- $groupDN = OC_LDAP::groupname2dn($gid);
+ $groupDN = $this->groupname2dn($gid);
if(!$groupDN) {
- $this->_group_users[$gid] = array();
+ $this->connection->writeToCache('usersInGroup'.$gid, array());
return array();
}
- $members = OC_LDAP::readAttribute($groupDN, $this->ldapGroupMemberAssocAttr);
+ $members = $this->readAttribute($groupDN, $this->connection->ldapGroupMemberAssocAttr);
if(!$members) {
- $this->_group_users[$gid] = array();
+ $this->connection->writeToCache('usersInGroup'.$gid, array());
return array();
}
$result = array();
- $isMemberUid = (strtolower($this->ldapGroupMemberAssocAttr) == 'memberuid');
+ $isMemberUid = (strtolower($this->connection->ldapGroupMemberAssocAttr) == 'memberuid');
foreach($members as $member) {
if($isMemberUid) {
- $filter = str_replace('%uid', $member, OC_LDAP::conf('ldapLoginFilter'));
- $ldap_users = OC_LDAP::fetchListOfUsers($filter, 'dn');
+ $filter = \OCP\Util::mb_str_replace('%uid', $member, $this->connection->ldapLoginFilter, 'UTF-8');
+ $ldap_users = $this->fetchListOfUsers($filter, 'dn');
if(count($ldap_users) < 1) {
continue;
}
- $result[] = OC_LDAP::dn2username($ldap_users[0]);
+ $result[] = $this->dn2username($ldap_users[0]);
continue;
} else {
- if($ocname = OC_LDAP::dn2username($member)){
+ if($ocname = $this->dn2username($member)) {
$result[] = $ocname;
}
}
}
if(!$isMemberUid) {
- $result = array_intersect($result, OCP\User::getUsers());
+ $result = array_intersect($result, \OCP\User::getUsers());
}
- $this->_group_users[$gid] = array_unique($result, SORT_LOCALE_STRING);
- return $this->_group_users[$gid];
+ $groupUsers = array_unique($result, SORT_LOCALE_STRING);
+ $this->connection->writeToCache('usersInGroup'.$gid, $groupUsers);
+
+ if(!empty($this->groupSearch)) {
+ $groupUsers = array_filter($groupUsers, array($this, 'groupMatchesFilter'));
+ }
+ if($limit = -1) {
+ $limit = null;
+ }
+ return array_slice($groupUsers, $offset, $limit);
+
}
/**
@@ -184,15 +200,30 @@ class OC_GROUP_LDAP extends OC_Group_Backend {
*
* Returns a list with all groups
*/
- public function getGroups() {
- if(!$this->configured) {
+ public function getGroups($search = '', $limit = -1, $offset = 0) {
+ if(!$this->enabled) {
return array();
}
- if(empty($this->_groups)) {
- $ldap_groups = OC_LDAP::fetchListOfGroups($this->ldapGroupFilter, array(OC_LDAP::conf('ldapGroupDisplayName'), 'dn'));
- $this->_groups = OC_LDAP::ownCloudGroupNames($ldap_groups);
+
+ if($this->connection->isCached('getGroups')) {
+ $ldap_groups = $this->connection->getFromCache('getGroups');
+ } else {
+ $ldap_groups = $this->fetchListOfGroups($this->connection->ldapGroupFilter, array($this->connection->ldapGroupDisplayName, 'dn'));
+ $ldap_groups = $this->ownCloudGroupNames($ldap_groups);
+ $this->connection->writeToCache('getGroups', $ldap_groups);
+ }
+ $this->groupSearch = $search;
+ if(!empty($this->groupSearch)) {
+ $ldap_groups = array_filter($ldap_groups, array($this, 'groupMatchesFilter'));
}
- return $this->_groups;
+ if($limit = -1) {
+ $limit = null;
+ }
+ return array_slice($ldap_groups, $offset, $limit);
+ }
+
+ public function groupMatchesFilter($group) {
+ return (strripos($group, $this->groupSearch) !== false);
}
/**
@@ -203,4 +234,17 @@ class OC_GROUP_LDAP extends OC_Group_Backend {
public function groupExists($gid){
return in_array($gid, $this->getGroups());
}
+
+ /**
+ * @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) {
+ //always returns false, because possible actions are modifying actions. We do not write to LDAP, at least for now.
+ return false;
+ }
} \ No newline at end of file
diff --git a/apps/user_ldap/js/settings.js b/apps/user_ldap/js/settings.js
index cae9655e3df..7063eead96a 100644
--- a/apps/user_ldap/js/settings.js
+++ b/apps/user_ldap/js/settings.js
@@ -1,3 +1,24 @@
$(document).ready(function() {
$('#ldapSettings').tabs();
+ $('#ldap_action_test_connection').button();
+ $('#ldap_action_test_connection').click(function(event){
+ event.preventDefault();
+ $.post(
+ OC.filePath('user_ldap','ajax','testConfiguration.php'),
+ $('#ldap').serialize(),
+ function (result) {
+ if (result.status == 'success') {
+ OC.dialogs.alert(
+ result.message,
+ 'Connection test succeeded'
+ );
+ } else {
+ OC.dialogs.alert(
+ result.message,
+ 'Connection test failed'
+ );
+ }
+ }
+ );
+ });
}); \ No newline at end of file
diff --git a/apps/user_ldap/l10n/.gitkeep b/apps/user_ldap/l10n/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/apps/user_ldap/l10n/.gitkeep
diff --git a/apps/user_ldap/l10n/ca.php b/apps/user_ldap/l10n/ca.php
new file mode 100644
index 00000000000..04b0f8997db
--- /dev/null
+++ b/apps/user_ldap/l10n/ca.php
@@ -0,0 +1,36 @@
+<?php $TRANSLATIONS = array(
+"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",
+"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.",
+"Password" => "Contrasenya",
+"For anonymous access, leave DN and Password empty." => "Per un accés anònim, deixeu la DN i la contrasenya en blanc.",
+"User Login Filter" => "Filtre d'inici de sessió d'usuari",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "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ó.",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "useu el paràmetre de substitució %%uid, per exemple \"uid=%%uid\"",
+"User List Filter" => "Llista de filtres d'usuari",
+"Defines the filter to apply, when retrieving users." => "Defineix el filtre a aplicar quan es mostren usuaris",
+"without any placeholder, e.g. \"objectClass=person\"." => "sense cap paràmetre de substitució, per exemple \"objectClass=persona\"",
+"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\".",
+"Port" => "Port",
+"Base User Tree" => "Arbre base d'usuaris",
+"Base Group Tree" => "Arbre base de grups",
+"Group-Member association" => "Associació membres-grup",
+"Use TLS" => "Usa TLS",
+"Do not use it for SSL connections, it will fail." => "No ho useu en connexions SSL, 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.",
+"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.",
+"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.",
+"in bytes" => "en bytes",
+"in seconds. A change empties the cache." => "en segons. Un canvi buidarà la memòria de cau.",
+"Help" => "Ajuda"
+);
diff --git a/apps/user_ldap/l10n/cs_CZ.php b/apps/user_ldap/l10n/cs_CZ.php
new file mode 100644
index 00000000000..6c0f227fa7a
--- /dev/null
+++ b/apps/user_ldap/l10n/cs_CZ.php
@@ -0,0 +1,36 @@
+<?php $TRANSLATIONS = array(
+"Host" => "Hostitel",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Nelze vynechat protokol vyžadující SSL. ZaÄnÄ›te s ldaps://",
+"Base DN" => "Base DN",
+"You can specify Base DN for users and groups in the Advanced tab" => "V Rozšířeném nastavení můžete specifikovat pro své uživatele a skupiny element Base DN",
+"User DN" => "DN uživatele",
+"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é.",
+"Password" => "Heslo",
+"For anonymous access, leave DN and Password empty." => "Pro anonymní přístup ponechte údaje DN and Heslo prázdné.",
+"User Login Filter" => "Filtr uživatelských loginů",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Definuje filtr, který je aplikován v průběhu logování. %%uid nahrazuje uživatelské jméno během logování.",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "použijte %%uid pro rezervované místo, např. \"uid=%%uid\"",
+"User List Filter" => "Filtr uživateslkých seznamů",
+"Defines the filter to apply, when retrieving users." => "Defunije filtr, který je plaikován při návratu uživatelů.",
+"without any placeholder, e.g. \"objectClass=person\"." => "bez rezervace místa, např. \"objectClass=person\".",
+"Group Filter" => "Filtr skupiny",
+"Defines the filter to apply, when retrieving groups." => "Definuje filtr, který je aplikován při návratu skupin",
+"without any placeholder, e.g. \"objectClass=posixGroup\"." => "bez rezervace místa, např. \"objectClass=posixGroup\".",
+"Port" => "Port",
+"Base User Tree" => "Základní uživatelský strom",
+"Base Group Tree" => "Základní skupinový strom",
+"Group-Member association" => "Asociace Älena skupiny",
+"Use TLS" => "Použijte TLS",
+"Do not use it for SSL connections, it will fail." => "Nepoužívejte pro SSL připojení, připojení selže.",
+"Case insensitve LDAP server (Windows)" => "LDAP server nerozlišující velikost znaků (Windows)",
+"Turn off SSL certificate validation." => "Vypněte 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 pracuje připojení pouze pokud je teto volba aktivní, importujte SSL certifikát LDAP serveru do Vašeho serveru ownCloud.",
+"Not recommended, use for testing only." => "Není doporuÄeno, pouze pro úÄely testování.",
+"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",
+"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",
+"in bytes" => "v bytech",
+"in seconds. A change empties the cache." => "ve vteÅ™inách. ZmÄ›na vyprázdní doÄasnou paměť.",
+"Help" => "Nápověda"
+);
diff --git a/apps/user_ldap/l10n/da.php b/apps/user_ldap/l10n/da.php
new file mode 100644
index 00000000000..f01c7b71108
--- /dev/null
+++ b/apps/user_ldap/l10n/da.php
@@ -0,0 +1,9 @@
+<?php $TRANSLATIONS = array(
+"Host" => "Host",
+"Base DN" => "Base DN",
+"Password" => "Kodeord",
+"Port" => "Port",
+"Use TLS" => "Brug TLS",
+"Not recommended, use for testing only." => "Anbefales ikke, brug kun for at teste.",
+"Help" => "Hjælp"
+);
diff --git a/apps/user_ldap/l10n/de.php b/apps/user_ldap/l10n/de.php
new file mode 100644
index 00000000000..9f917f277c4
--- /dev/null
+++ b/apps/user_ldap/l10n/de.php
@@ -0,0 +1,36 @@
+<?php $TRANSLATIONS = array(
+"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",
+"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.",
+"Password" => "Passwort",
+"For anonymous access, leave DN and Password empty." => "Lassen Sie die Felder von DN und Passwort für anonymen Zugang leer.",
+"User Login Filter" => "Benutzer-Login-Filter",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Bestimmt den angewendeten Filter, wenn eine Anmeldung versucht wird. %%uid ersetzt den Benutzernamen bei dem Anmeldeversuch.",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "verwende %%uid Platzhalter, z. B. \"uid=%%uid\"",
+"User List Filter" => "Benutzer-Filter-Liste",
+"Defines the filter to apply, when retrieving users." => "Definiert den Filter für die Anfrage der Benutzer.",
+"without any placeholder, e.g. \"objectClass=person\"." => "ohne Platzhalter, z.B.: \"objectClass=person\"",
+"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\"",
+"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." => "Verwenden Sie es 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, wird das SSL-Zertifikat des LDAP-Server importiert werden.",
+"Not recommended, use for testing only." => "Nicht empfohlen, nur zu Testzwecken.",
+"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. ",
+"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. ",
+"in bytes" => "in Bytes",
+"in seconds. A change empties the cache." => "in Sekunden. Eine Änderung leert den Cache.",
+"Help" => "Hilfe"
+);
diff --git a/apps/user_ldap/l10n/el.php b/apps/user_ldap/l10n/el.php
new file mode 100644
index 00000000000..2f3c747a672
--- /dev/null
+++ b/apps/user_ldap/l10n/el.php
@@ -0,0 +1,6 @@
+<?php $TRANSLATIONS = array(
+"Password" => "Συνθηματικό",
+"Port" => "ΘÏÏα",
+"in bytes" => "σε bytes",
+"Help" => "Βοήθεια"
+);
diff --git a/apps/user_ldap/l10n/eo.php b/apps/user_ldap/l10n/eo.php
new file mode 100644
index 00000000000..6f18506b095
--- /dev/null
+++ b/apps/user_ldap/l10n/eo.php
@@ -0,0 +1,32 @@
+<?php $TRANSLATIONS = array(
+"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",
+"User DN" => "Uzanto-DN",
+"Password" => "Pasvorto",
+"For anonymous access, leave DN and Password empty." => "Por sennoman aliron, lasu DN-on kaj Pasvorton malplenaj.",
+"User Login Filter" => "Filtrilo de uzantensaluto",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Äœi difinas la filtrilon aplikotan, kiam oni provas ensaluti. %%uid anstataÅ­igas la uzantonomon en la ensaluta ago.",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "uzu la referencilon %%uid, ekz.: \"uid=%%uid\"",
+"User List Filter" => "Filtrilo de uzantolisto",
+"Defines the filter to apply, when retrieving users." => "Äœi difinas la filtrilon aplikotan, kiam veniÄas uzantoj.",
+"without any placeholder, e.g. \"objectClass=person\"." => "sen ajna referencilo, ekz.: \"objectClass=person\".",
+"Group Filter" => "Filtrilo de grupo",
+"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",
+"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.",
+"Not recommended, use for testing only." => "Ne rekomendata, uzu Äin nur por testoj.",
+"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.",
+"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.",
+"in bytes" => "duumoke",
+"in seconds. A change empties the cache." => "sekunde. Ajna ÅanÄo malplenigas la kaÅmemoron.",
+"Help" => "Helpo"
+);
diff --git a/apps/user_ldap/l10n/es.php b/apps/user_ldap/l10n/es.php
new file mode 100644
index 00000000000..55abf7b88e0
--- /dev/null
+++ b/apps/user_ldap/l10n/es.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Password" => "Contraseña",
+"Port" => "Puerto",
+"Use TLS" => "Usar TLS",
+"in bytes" => "en bytes",
+"Help" => "Ayuda"
+);
diff --git a/apps/user_ldap/l10n/fi_FI.php b/apps/user_ldap/l10n/fi_FI.php
new file mode 100644
index 00000000000..f6d16f3acc1
--- /dev/null
+++ b/apps/user_ldap/l10n/fi_FI.php
@@ -0,0 +1,31 @@
+<?php $TRANSLATIONS = array(
+"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 käytät SSL:ää. Aloita silloin ldaps://",
+"Base DN" => "Oletus DN",
+"You can specify Base DN for users and groups in the Advanced tab" => "Voit määrittää käyttäjien ja ryhmien oletus DN:n (distinguished name) 'tarkemmat asetukset' välilehdeltä ",
+"User DN" => "Käyttäjän 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." => "Asiakasohjelman DN, jolla yhdistäminen tehdään, ts. uid=agent,dc=example,dc=com. Mahdollistaaksesi anonyymin yhteyden, jätä DN ja salasana tyhjäksi.",
+"Password" => "Salasana",
+"For anonymous access, leave DN and Password empty." => "Jos haluat mahdollistaa anonyymin pääsyn, jätä DN ja Salasana tyhjäksi ",
+"User Login Filter" => "Login suodatus",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "käytä %%uid paikanvaraajaa, ts. \"uid=%%uid\"",
+"User List Filter" => "Käyttäjien suodatus",
+"Defines the filter to apply, when retrieving users." => "Määrittelee käytettävän suodattimen, kun käyttäjiä haetaan. ",
+"without any placeholder, e.g. \"objectClass=person\"." => "ilman paikanvaraustermiä, ts. \"objectClass=person\".",
+"Group Filter" => "Ryhmien suodatus",
+"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" => "Oletus käyttäjäpuu",
+"Base Group Tree" => "Ryhmien juuri",
+"Group-Member association" => "Ryhmä-jäsen 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." => "Sulje SSL sertifikaatin käyttö",
+"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Jos yhteys toimii vain tällä optiolla, siirrä LDAP palvelimen SSL sertifikaatti onwCloud palvelimellesi. ",
+"Not recommended, use for testing only." => "Ei suositella, käytä vain testausta varten.",
+"in bytes" => "tavuissa",
+"in seconds. A change empties the cache." => "sekunneissa. Muutos tyhjentää välimuistin.",
+"Help" => "Ohje"
+);
diff --git a/apps/user_ldap/l10n/fr.php b/apps/user_ldap/l10n/fr.php
new file mode 100644
index 00000000000..64edf3b4680
--- /dev/null
+++ b/apps/user_ldap/l10n/fr.php
@@ -0,0 +1,32 @@
+<?php $TRANSLATIONS = array(
+"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 de base",
+"You can specify Base DN for users and groups in the Advanced tab" => "Vous pouvez spécifier le DN de base pour les utilisateurs et les groupes dans l'onglet Avancé",
+"User DN" => "DN Utilisateur",
+"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.",
+"Password" => "Mot de passe",
+"For anonymous access, leave DN and Password empty." => "Pour l'accès anonyme, laisser le DN et le mot de passe vides.",
+"User Login Filter" => "Filtre d'identifiants utilisateur",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Définit le filtre à appliquer lors d'une tentative de connexion. %%uid remplace le nom d'utilisateur lors de la connexion.",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "veuillez utiliser le champ %%uid , ex.: \"uid=%%uid\"",
+"User List Filter" => "Filtre d'utilisateurs",
+"Defines the filter to apply, when retrieving users." => "Définit le filtre à appliquer lors de la récupération des utilisateurs.",
+"without any placeholder, e.g. \"objectClass=person\"." => "sans élément de substitution, par exemple \"objectClass=person\".",
+"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\".",
+"Port" => "Port",
+"Group-Member association" => "Association groupe-membre",
+"Use TLS" => "Utiliser TLS",
+"Do not use it for SSL connections, it will fail." => "Ne pas utiliser pour les connexions SSL, car 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 recommendé, utilisation pour tests uniquement.",
+"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",
+"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",
+"in bytes" => "en octets",
+"in seconds. A change empties the cache." => "en secondes. Tout changement vide le cache.",
+"Help" => "Aide"
+);
diff --git a/apps/user_ldap/l10n/it.php b/apps/user_ldap/l10n/it.php
new file mode 100644
index 00000000000..c86b4ea2a57
--- /dev/null
+++ b/apps/user_ldap/l10n/it.php
@@ -0,0 +1,36 @@
+<?php $TRANSLATIONS = array(
+"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",
+"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",
+"Password" => "Password",
+"For anonymous access, leave DN and Password empty." => "Per l'accesso anonimo, lasciare vuoti i campi DN e Password",
+"User Login Filter" => "Filtro per l'accesso utente",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Specifica quale filtro utilizzare quando si tenta l'accesso. %%uid sostituisce il nome utente all'atto dell'accesso.",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "utilizza il segnaposto %%uid, ad esempio \"uid=%%uid\"",
+"User List Filter" => "Filtro per l'elenco utenti",
+"Defines the filter to apply, when retrieving users." => "Specifica quale filtro utilizzare durante il recupero degli utenti.",
+"without any placeholder, e.g. \"objectClass=person\"." => "senza nessun segnaposto, per esempio \"objectClass=person\".",
+"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\".",
+"Port" => "Porta",
+"Base User Tree" => "Struttura base dell'utente",
+"Base Group Tree" => "Struttura base del gruppo",
+"Group-Member association" => "Associazione gruppo-utente ",
+"Use TLS" => "Usa TLS",
+"Do not use it for SSL connections, it will fail." => "Non utilizzare per le connessioni SSL, fallirà.",
+"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.",
+"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.",
+"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.",
+"in bytes" => "in byte",
+"in seconds. A change empties the cache." => "in secondi. Il cambio svuota la cache.",
+"Help" => "Aiuto"
+);
diff --git a/apps/user_ldap/l10n/ja_JP.php b/apps/user_ldap/l10n/ja_JP.php
new file mode 100644
index 00000000000..8d4473b4e28
--- /dev/null
+++ b/apps/user_ldap/l10n/ja_JP.php
@@ -0,0 +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." => "クライアントユーザーã®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" => "ãƒãƒ¼ãƒˆ",
+"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." => "推奨ã—ã¾ã›ã‚“ã€ãƒ†ã‚¹ãƒˆç›®çš„ã§ã®ã¿åˆ©ç”¨ã—ã¦ãã ã•ã„。",
+"User Display Name Field" => "ユーザ表示åã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰",
+"The LDAP attribute to use to generate the user`s ownCloud name." => "ユーザã®ownCloudåã®ç”Ÿæˆã«åˆ©ç”¨ã™ã‚‹LDAP属性。",
+"Group Display Name Field" => "グループ表示åã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰",
+"The LDAP attribute to use to generate the groups`s ownCloud name." => "グループã®ownCloudåã®ç”Ÿæˆã«åˆ©ç”¨ã™ã‚‹LDAP属性。",
+"in bytes" => "ãƒã‚¤ãƒˆ",
+"in seconds. A change empties the cache." => "秒。変更後ã«ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãŒã‚¯ãƒªã‚¢ã•ã‚Œã¾ã™ã€‚",
+"Help" => "ヘルプ"
+);
diff --git a/apps/user_ldap/l10n/lt_LT.php b/apps/user_ldap/l10n/lt_LT.php
new file mode 100644
index 00000000000..809ed571bd0
--- /dev/null
+++ b/apps/user_ldap/l10n/lt_LT.php
@@ -0,0 +1,9 @@
+<?php $TRANSLATIONS = array(
+"Password" => "Slaptažodis",
+"Group Filter" => "GrupÄ—s filtras",
+"Port" => "Prievadas",
+"Use TLS" => "Naudoti TLS",
+"Turn off SSL certificate validation." => "IÅ¡jungti SSL sertifikato tikrinimÄ….",
+"Not recommended, use for testing only." => "Nerekomenduojama, naudokite tik testavimui.",
+"Help" => "Pagalba"
+);
diff --git a/apps/user_ldap/l10n/pl.php b/apps/user_ldap/l10n/pl.php
new file mode 100644
index 00000000000..fa7618d68dc
--- /dev/null
+++ b/apps/user_ldap/l10n/pl.php
@@ -0,0 +1,36 @@
+<?php $TRANSLATIONS = array(
+"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",
+"You can specify Base DN for users and groups in the Advanced tab" => "Bazę DN można określić dla użytkowników i grup w karcie Zaawansowane",
+"User DN" => "Użytkownik 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 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",
+"Password" => "Hasło",
+"For anonymous access, leave DN and Password empty." => "Dla dostępu anonimowego pozostawić DN i hasło puste.",
+"User Login Filter" => "Filtr logowania użytkownika",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Definiuje filtr do zastosowania, gdy podejmowana jest próba logowania. %%uid zastępuje nazwę użytkownika w działaniu logowania.",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "Użyj %%uid zastępczy, np. \"uid=%%uid\"",
+"User List Filter" => "Lista filtrów użytkownika",
+"Defines the filter to apply, when retrieving users." => "Definiuje filtry do zastosowania, podczas pobierania użytkowników.",
+"without any placeholder, e.g. \"objectClass=person\"." => "bez żadnych symboli zastępczych np. \"objectClass=person\".",
+"Group Filter" => "Grupa filtrów",
+"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.",
+"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.",
+"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.",
+"in bytes" => "w bajtach",
+"in seconds. A change empties the cache." => "w sekundach. Zmiana opróżnia pamięć podręczną.",
+"Help" => "Pomoc"
+);
diff --git a/apps/user_ldap/l10n/ro.php b/apps/user_ldap/l10n/ro.php
new file mode 100644
index 00000000000..326e47f96fe
--- /dev/null
+++ b/apps/user_ldap/l10n/ro.php
@@ -0,0 +1,36 @@
+<?php $TRANSLATIONS = array(
+"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ă",
+"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.",
+"Password" => "Parolă",
+"For anonymous access, leave DN and Password empty." => "Pentru acces anonim, lăsați DN și Parolă libere.",
+"User Login Filter" => "Filtrare după Nume Utilizator",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Definește fitrele care trebuie aplicate, când se încearcă conectarea. %%uid înlocuiește numele utilizatorului în procesul de conectare.",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "folosiți substituentul %%uid , d.e. \"uid=%%uid\"",
+"User List Filter" => "Filtrarea după lista utilizatorilor",
+"Defines the filter to apply, when retrieving users." => "Definește filtrele care trebui aplicate, când se peiau utilzatorii.",
+"without any placeholder, e.g. \"objectClass=person\"." => "fără substituenți, d.e. \"objectClass=person\".",
+"Group Filter" => "Fitrare Grup",
+"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.",
+"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.",
+"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",
+"in bytes" => "în octeți",
+"in seconds. A change empties the cache." => "în secunde. O schimbare curăță memoria tampon.",
+"Help" => "Ajutor"
+);
diff --git a/apps/user_ldap/l10n/sl.php b/apps/user_ldap/l10n/sl.php
new file mode 100644
index 00000000000..312346958be
--- /dev/null
+++ b/apps/user_ldap/l10n/sl.php
@@ -0,0 +1,36 @@
+<?php $TRANSLATIONS = array(
+"Host" => "Gostitelj",
+"You can omit the protocol, except you require SSL. Then start with ldaps://" => "Protokol lahko izpustite, razen Äe zahtevate SSL. V tem primeru zaÄnite z ldaps://",
+"Base DN" => "Osnovni DN",
+"You can specify Base DN for users and groups in the Advanced tab" => "Osnovni DN za uporabnike in skupine lahko doloÄite v zavihku Napredno",
+"User DN" => "Uporabnik 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 uporabnikovega odjemalca, s katerim naj se opravi vezava, npr. uid=agent,dc=example,dc=com. Za anonimni dostop pustite polji DN in geslo prazni.",
+"Password" => "Geslo",
+"For anonymous access, leave DN and Password empty." => "Za anonimni dostop pustite polji DN in geslo prazni.",
+"User Login Filter" => "Filter prijav uporabnikov",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "DoloÄi filter uporabljen pri prijavi. %%uid nadomesti uporaniÅ¡ko ime pri prijavi.",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "Uporabite ogrado %%uid, npr. \"uid=%%uid\".",
+"User List Filter" => "Filter seznama uporabnikov",
+"Defines the filter to apply, when retrieving users." => "DoloÄi filter za uporabo med pridobivanjem uporabnikov.",
+"without any placeholder, e.g. \"objectClass=person\"." => "Brez katerekoli ograde, npr. \"objectClass=person\".",
+"Group Filter" => "Filter skupin",
+"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 ograde, 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." => "Ne uporabljajte ga za SSL povezave, saj ne bo delovalo.",
+"Case insensitve LDAP server (Windows)" => "LDAP strežnik je neobÄutljiv na velikost Ärk (Windows)",
+"Turn off SSL certificate validation." => "OnemogoÄi potrditev veljavnosti SSL certifikata.",
+"If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Če povezava deluje samo s to možnostjo, uvozite SSL potrdilo iz LDAP strežnika v vaš ownCloud strežnik.",
+"Not recommended, use for testing only." => "Odsvetovano, uporabite le v namene preizkušanja.",
+"User Display Name Field" => "Polje za uporabnikovo prikazano ime",
+"The LDAP attribute to use to generate the user`s ownCloud name." => "LDAP atribut uporabljen pri ustvarjanju ownCloud uporabniških imen.",
+"Group Display Name Field" => "Polje za prikazano ime skupine",
+"The LDAP attribute to use to generate the groups`s ownCloud name." => "LDAP atribut uporabljen pri ustvarjanju ownCloud imen skupin.",
+"in bytes" => "v bajtih",
+"in seconds. A change empties the cache." => "v sekundah. Sprememba izprazni predpomnilnik.",
+"Help" => "PomoÄ"
+);
diff --git a/apps/user_ldap/l10n/sv.php b/apps/user_ldap/l10n/sv.php
new file mode 100644
index 00000000000..a23cc094b4d
--- /dev/null
+++ b/apps/user_ldap/l10n/sv.php
@@ -0,0 +1,36 @@
+<?php $TRANSLATIONS = array(
+"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",
+"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.",
+"Password" => "Lösenord",
+"For anonymous access, leave DN and Password empty." => "För anonym åtkomst, lämna DN och lösenord tomt.",
+"User Login Filter" => "Filter logga in användare",
+"Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action." => "Definierar filter att tillämpa vid inloggningsförsök. %% uid ersätter användarnamn i loginåtgärden.",
+"use %%uid placeholder, e.g. \"uid=%%uid\"" => "använd platshållare %%uid, t ex \"uid=%%uid\"",
+"User List Filter" => "Filter lista användare",
+"Defines the filter to apply, when retrieving users." => "Definierar filter att tillämpa vid listning av användare.",
+"without any placeholder, e.g. \"objectClass=person\"." => "utan platshållare, t.ex. \"objectClass=person\".",
+"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\".",
+"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",
+"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.",
+"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. ",
+"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.",
+"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.",
+"in bytes" => "i bytes",
+"in seconds. A change empties the cache." => "i sekunder. En förändring tömmer cache.",
+"Help" => "Hjälp"
+);
diff --git a/apps/user_ldap/l10n/th_TH.php b/apps/user_ldap/l10n/th_TH.php
new file mode 100644
index 00000000000..a1baa648135
--- /dev/null
+++ b/apps/user_ldap/l10n/th_TH.php
@@ -0,0 +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." => "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" => "พอร์ต",
+"Base User Tree" => "รายà¸à¸²à¸£à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸«à¸¥à¸±à¸à¹à¸šà¸š Tree",
+"Base Group Tree" => "รายà¸à¸²à¸£à¸à¸¥à¸¸à¹ˆà¸¡à¸«à¸¥à¸±à¸à¹à¸šà¸š Tree",
+"Group-Member association" => "ความสัมพันธ์ของสมาชิà¸à¹ƒà¸™à¸à¸¥à¸¸à¹ˆà¸¡",
+"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." => "ไม่à¹à¸™à¸°à¸™à¸³à¹ƒà¸«à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™, ใช้สำหรับà¸à¸²à¸£à¸—ดสอบเท่านั้น",
+"User Display Name Field" => "ช่องà¹à¸ªà¸”งชื่อผู้ใช้งานที่ต้องà¸à¸²à¸£",
+"The LDAP attribute to use to generate the user`s ownCloud name." => "คุณลัà¸à¸©à¸“ะ LDAP ที่ต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸ªà¸³à¸«à¸£à¸±à¸šà¸ªà¸£à¹‰à¸²à¸‡à¸Šà¸·à¹ˆà¸­à¸‚องผู้ใช้งาน ownCloud",
+"Group Display Name Field" => "ช่องà¹à¸ªà¸”งชื่อà¸à¸¥à¸¸à¹ˆà¸¡à¸—ี่ต้องà¸à¸²à¸£",
+"The LDAP attribute to use to generate the groups`s ownCloud name." => "คุณลัà¸à¸©à¸“ะ LDAP ที่ต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸ªà¸£à¹‰à¸²à¸‡à¸Šà¸·à¹ˆà¸­à¸à¸¥à¸¸à¹ˆà¸¡à¸‚อง ownCloud",
+"in bytes" => "ในหน่วยไบต์",
+"in seconds. A change empties the cache." => "ในอีà¸à¹„ม่à¸à¸µà¹ˆà¸§à¸´à¸™à¸²à¸—ี ระบบจะเปลี่ยนà¹à¸›à¸¥à¸‡à¸‚้อมูลในà¹à¸„ชให้ว่างเปล่า",
+"Help" => "ช่วยเหลือ"
+);
diff --git a/apps/user_ldap/lib/access.php b/apps/user_ldap/lib/access.php
new file mode 100644
index 00000000000..be9aa21c3d2
--- /dev/null
+++ b/apps/user_ldap/lib/access.php
@@ -0,0 +1,676 @@
+<?php
+
+/**
+ * ownCloud – LDAP Access
+ *
+ * @author Arthur Schiwon
+ * @copyright 2012 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 Access {
+ protected $connection;
+
+ public function setConnector(Connection &$connection) {
+ $this->connection = $connection;
+ }
+
+ private function checkConnection() {
+ return ($this->connection instanceof Connection);
+ }
+
+ /**
+ * @brief reads a given attribute for an LDAP record identified by a DN
+ * @param $dn the record in question
+ * @param $attr the attribute that shall be retrieved
+ * @returns the values in an array on success, false otherwise
+ *
+ * Reads an attribute from an LDAP entry
+ */
+ public function readAttribute($dn, $attr) {
+ if(!$this->checkConnection()) {
+ \OCP\Util::writeLog('user_ldap', 'No LDAP Connector assigned, access impossible for readAttribute.', \OCP\Util::WARN);
+ return false;
+ }
+ $cr = $this->connection->getConnectionResource();
+ if(!is_resource($cr)) {
+ //LDAP not available
+ \OCP\Util::writeLog('user_ldap', 'LDAP resource not available.', \OCP\Util::DEBUG);
+ return false;
+ }
+ $rr = @ldap_read($cr, $dn, 'objectClass=*', array($attr));
+ if(!is_resource($rr)) {
+ \OCP\Util::writeLog('user_ldap', 'readAttribute '.$attr.' failed for DN '.$dn, \OCP\Util::DEBUG);
+ //in case an error occurs , e.g. object does not exist
+ return false;
+ }
+ $er = ldap_first_entry($cr, $rr);
+ //LDAP attributes are not case sensitive
+ $result = \OCP\Util::mb_array_change_key_case(ldap_get_attributes($cr, $er), MB_CASE_LOWER, 'UTF-8');
+ $attr = mb_strtolower($attr, 'UTF-8');
+
+ if(isset($result[$attr]) && $result[$attr]['count'] > 0) {
+ $values = array();
+ for($i=0;$i<$result[$attr]['count'];$i++) {
+ $values[] = $this->resemblesDN($attr) ? $this->sanitizeDN($result[$attr][$i]) : $result[$attr][$i];
+ }
+ return $values;
+ }
+ \OCP\Util::writeLog('user_ldap', 'Requested attribute '.$attr.' not found for '.$dn, \OCP\Util::DEBUG);
+ return false;
+ }
+
+ /**
+ * @brief checks wether the given attribute`s valua is probably a DN
+ * @param $attr the attribute in question
+ * @return if so true, otherwise false
+ */
+ private function resemblesDN($attr) {
+ $resemblingAttributes = array(
+ 'dn',
+ 'uniquemember',
+ 'member'
+ );
+ return in_array($attr, $resemblingAttributes);
+ }
+
+ /**
+ * @brief sanitizes a DN received from the LDAP server
+ * @param $dn the DN in question
+ * @return the sanitized DN
+ */
+ private function sanitizeDN($dn) {
+ //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);
+
+ //make comparisons and everything work
+ $dn = mb_strtolower($dn, 'UTF-8');
+
+ return $dn;
+ }
+
+ /**
+ * gives back the database table for the query
+ */
+ private function getMapTable($isUser) {
+ if($isUser) {
+ return '*PREFIX*ldap_user_mapping';
+ } else {
+ return '*PREFIX*ldap_group_mapping';
+ }
+ }
+
+ /**
+ * @brief returns the LDAP DN for the given internal ownCloud name of the group
+ * @param $name the ownCloud name in question
+ * @returns string with the LDAP DN on success, otherwise false
+ *
+ * returns the LDAP DN for the given internal ownCloud name of the group
+ */
+ public function groupname2dn($name) {
+ return $this->ocname2dn($name, false);
+ }
+
+ /**
+ * @brief returns the LDAP DN for the given internal ownCloud name of the user
+ * @param $name the ownCloud name in question
+ * @returns string with the LDAP DN on success, otherwise false
+ *
+ * returns the LDAP DN for the given internal ownCloud name of the user
+ */
+ public function username2dn($name) {
+ $dn = $this->ocname2dn($name, true);
+ if($dn) {
+ return $dn;
+ } else {
+ //fallback: user is not mapped
+ $filter = $this->combineFilterWithAnd(array(
+ $this->connection->ldapUserFilter,
+ $this->connection->ldapUserDisplayName . '=' . $name,
+ ));
+ $result = $this->searchUsers($filter, 'dn');
+ if(isset($result[0]['dn'])) {
+ $this->mapComponent($result[0], $name, true);
+ return $result[0];
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * @brief returns the LDAP DN for the given internal ownCloud name
+ * @param $name the ownCloud name in question
+ * @param $isUser is it a user? otherwise group
+ * @returns string with the LDAP DN on success, otherwise false
+ *
+ * returns the LDAP DN for the given internal ownCloud name
+ */
+ private function ocname2dn($name, $isUser) {
+ $table = $this->getMapTable($isUser);
+
+ $query = \OCP\DB::prepare('
+ SELECT ldap_dn
+ FROM '.$table.'
+ WHERE owncloud_name = ?
+ ');
+
+ $record = $query->execute(array($name))->fetchOne();
+ return $record;
+ }
+
+ /**
+ * @brief returns the internal ownCloud name for the given LDAP DN of the group
+ * @param $dn the dn of the group object
+ * @param $ldapname optional, the display name of the object
+ * @returns string with with the name to use in ownCloud, false on DN outside of search DN
+ *
+ * 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'))) {
+ return false;
+ }
+ return $this->dn2ocname($dn, $ldapname, false);
+ }
+
+ /**
+ * @brief returns the internal ownCloud name for the given LDAP DN of the user
+ * @param $dn the dn of the user object
+ * @param $ldapname optional, the display name of the object
+ * @returns string with with the name to use in ownCloud
+ *
+ * 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'))) {
+ return false;
+ }
+ return $this->dn2ocname($dn, $ldapname, true);
+ }
+
+ /**
+ * @brief returns an internal ownCloud name for the given LDAP DN
+ * @param $dn the dn of the user object
+ * @param $ldapname optional, the display name of the object
+ * @param $isUser optional, wether it is a user object (otherwise group assumed)
+ * @returns string with with the name to use in ownCloud
+ *
+ * returns the internal ownCloud name for the given LDAP DN of the user, false on DN outside of search DN
+ */
+ public function dn2ocname($dn, $ldapname = null, $isUser = true) {
+ $dn = $this->sanitizeDN($dn);
+ $table = $this->getMapTable($isUser);
+ if($isUser) {
+ $nameAttribute = $this->connection->ldapUserDisplayName;
+ } else {
+ $nameAttribute = $this->connection->ldapGroupDisplayName;
+ }
+
+ $query = \OCP\DB::prepare('
+ SELECT owncloud_name
+ FROM '.$table.'
+ WHERE ldap_dn = ?
+ ');
+
+ //let's try to retrieve the ownCloud name from the mappings table
+ $component = $query->execute(array($dn))->fetchOne();
+ if($component) {
+ return $component;
+ }
+
+ //second try: get the UUID and check if it is known. Then, update the DN and return the name.
+ $uuid = $this->getUUID($dn);
+ if($uuid) {
+ $query = \OCP\DB::prepare('
+ SELECT owncloud_name
+ FROM '.$table.'
+ WHERE directory_uuid = ?
+ ');
+ $component = $query->execute(array($uuid))->fetchOne();
+ if($component) {
+ $query = \OCP\DB::prepare('
+ UPDATE '.$table.'
+ SET ldap_dn = ?
+ WHERE directory_uuid = ?
+ ');
+ $query->execute(array($dn, $uuid));
+ return $component;
+ }
+ }
+
+ if(is_null($ldapname)) {
+ $ldapname = $this->readAttribute($dn, $nameAttribute);
+ if(!isset($ldapname[0]) && empty($ldapname[0])) {
+ \OCP\Util::writeLog('user_ldap', 'No or empty name for '.$dn.'.', \OCP\Util::INFO);
+ return false;
+ }
+ $ldapname = $ldapname[0];
+ }
+ $ldapname = $this->sanitizeUsername($ldapname);
+
+ //a new user/group! Then let's try to add it. We're shooting into the blue with the user/group name, assuming that in most cases there will not be a conflict. Otherwise an error will occur and we will continue with our second shot.
+ if($this->mapComponent($dn, $ldapname, $isUser)) {
+ return $ldapname;
+ }
+
+ //doh! There is a conflict. We need to distinguish between users/groups. Adding indexes is an idea, but not much of a help for the user. The DN is ugly, but for now the only reasonable way. But we transform it to a readable format and remove the first part to only give the path where this object is located.
+ $oc_name = $this->alternateOwnCloudName($ldapname, $dn);
+ if($this->mapComponent($dn, $oc_name, $isUser)) {
+ return $oc_name;
+ }
+
+ //if everything else did not help..
+ \OCP\Util::writeLog('user_ldap', 'Could not create unique ownCloud name for '.$dn.'.', \OCP\Util::INFO);
+ }
+
+ /**
+ * @brief gives back the user names as they are used ownClod internally
+ * @param $ldapGroups an array with the ldap Users result in style of array ( array ('dn' => foo, 'uid' => bar), ... )
+ * @returns an array with the user names to use in ownCloud
+ *
+ * gives back the user names as they are used ownClod internally
+ */
+ public function ownCloudUserNames($ldapUsers) {
+ return $this->ldap2ownCloudNames($ldapUsers, true);
+ }
+
+ /**
+ * @brief gives back the group names as they are used ownClod internally
+ * @param $ldapGroups an array with the ldap Groups result in style of array ( array ('dn' => foo, 'cn' => bar), ... )
+ * @returns an array with the group names to use in ownCloud
+ *
+ * gives back the group names as they are used ownClod internally
+ */
+ public function ownCloudGroupNames($ldapGroups) {
+ return $this->ldap2ownCloudNames($ldapGroups, false);
+ }
+
+ private function ldap2ownCloudNames($ldapObjects, $isUsers) {
+ if($isUsers) {
+ $knownObjects = $this->mappedUsers();
+ $nameAttribute = $this->connection->ldapUserDisplayName;
+ } else {
+ $knownObjects = $this->mappedGroups();
+ $nameAttribute = $this->connection->ldapGroupDisplayName;
+ }
+ $ownCloudNames = array();
+
+ foreach($ldapObjects as $ldapObject) {
+ $key = \OCP\Util::recursiveArraySearch($knownObjects, $ldapObject['dn']);
+
+ //everything is fine when we know the group
+ if($key !== false) {
+ $ownCloudNames[] = $knownObjects[$key]['owncloud_name'];
+ continue;
+ }
+
+ //we do not take empty usernames
+ if(!isset($ldapObject[$nameAttribute]) || empty($ldapObject[$nameAttribute])) {
+ \OCP\Util::writeLog('user_ldap', 'No or empty name for '.$ldapObject['dn'].', skipping.', \OCP\Util::INFO);
+ continue;
+ }
+
+ //a new group! Then let's try to add it. We're shooting into the blue with the group name, assuming that in most cases there will not be a conflict. But first make sure, that the display name contains only allowed characters.
+ $ocname = $this->sanitizeUsername($ldapObject[$nameAttribute]);
+ if($this->mapComponent($ldapObject['dn'], $ocname, $isUsers)) {
+ $ownCloudNames[] = $ocname;
+ continue;
+ }
+
+ //doh! There is a conflict. We need to distinguish between groups. Adding indexes is an idea, but not much of a help for the user. The DN is ugly, but for now the only reasonable way. But we transform it to a readable format and remove the first part to only give the path where this entry is located.
+ $ocname = $this->alternateOwnCloudName($ocname, $ldapObject['dn']);
+ if($this->mapComponent($ldapObject['dn'], $ocname, $isUsers)) {
+ $ownCloudNames[] = $ocname;
+ continue;
+ }
+
+ //if everything else did not help..
+ \OCP\Util::writeLog('user_ldap', 'Could not create unique ownCloud name for '.$ldapObject['dn'].', skipping.', \OCP\Util::INFO);
+ }
+ return $ownCloudNames;
+ }
+
+ /**
+ * @brief creates a hopefully unique name for owncloud based on the display name and the dn of the LDAP object
+ * @param $name the display name of the object
+ * @param $dn the dn of the object
+ * @returns string with with the name to use in ownCloud
+ *
+ * creates a hopefully unique name for owncloud based on the display name and the dn of the LDAP object
+ */
+ private function alternateOwnCloudName($name, $dn) {
+ $ufn = ldap_dn2ufn($dn);
+ $name = $name . '@' . trim(\OCP\Util::mb_substr_replace($ufn, '', 0, mb_strpos($ufn, ',', 0, 'UTF-8'), 'UTF-8'));
+ $name = $this->sanitizeUsername($name);
+ return $name;
+ }
+
+ /**
+ * @brief retrieves all known groups from the mappings table
+ * @returns array with the results
+ *
+ * retrieves all known groups from the mappings table
+ */
+ private function mappedGroups() {
+ return $this->mappedComponents(false);
+ }
+
+ /**
+ * @brief retrieves all known users from the mappings table
+ * @returns array with the results
+ *
+ * retrieves all known users from the mappings table
+ */
+ private function mappedUsers() {
+ return $this->mappedComponents(true);
+ }
+
+ private function mappedComponents($isUsers) {
+ $table = $this->getMapTable($isUsers);
+
+ $query = \OCP\DB::prepare('
+ SELECT ldap_dn, owncloud_name
+ FROM '. $table
+ );
+
+ return $query->execute()->fetchAll();
+ }
+
+ /**
+ * @brief inserts a new user or group into the mappings table
+ * @param $dn the record in question
+ * @param $ocname the name to use in ownCloud
+ * @param $isUser is it a user or a group?
+ * @returns true on success, false otherwise
+ *
+ * inserts a new user or group into the mappings table
+ */
+ private function mapComponent($dn, $ocname, $isUser = true) {
+ $table = $this->getMapTable($isUser);
+ $dn = $this->sanitizeDN($dn);
+
+ $sqlAdjustment = '';
+ $dbtype = \OCP\Config::getSystemValue('dbtype');
+ if($dbtype == 'mysql') {
+ $sqlAdjustment = 'FROM dual';
+ }
+
+ $insert = \OCP\DB::prepare('
+ INSERT INTO '.$table.' (ldap_dn, owncloud_name, directory_uuid)
+ SELECT ?,?,?
+ '.$sqlAdjustment.'
+ WHERE NOT EXISTS (
+ SELECT 1
+ FROM '.$table.'
+ WHERE ldap_dn = ?
+ OR owncloud_name = ?)
+ ');
+
+ //feed the DB
+ $res = $insert->execute(array($dn, $ocname, $this->getUUID($dn), $dn, $ocname));
+
+ if(\OCP\DB::isError($res)) {
+ return false;
+ }
+
+ $insRows = $res->numRows();
+
+ if($insRows == 0) {
+ return false;
+ }
+
+ return true;
+ }
+
+ public function fetchListOfUsers($filter, $attr) {
+ return $this->fetchList($this->searchUsers($filter, $attr), (count($attr) > 1));
+ }
+
+ public function fetchListOfGroups($filter, $attr) {
+ return $this->fetchList($this->searchGroups($filter, $attr), (count($attr) > 1));
+ }
+
+ private function fetchList($list, $manyAttributes) {
+ if(is_array($list)) {
+ if($manyAttributes) {
+ return $list;
+ } else {
+ return array_unique($list, SORT_LOCALE_STRING);
+ }
+ }
+
+ //error cause actually, maybe throw an exception in future.
+ return array();
+ }
+
+ /**
+ * @brief executes an LDAP search, optimized for Users
+ * @param $filter the LDAP filter for the search
+ * @param $attr optional, when a certain attribute shall be filtered out
+ * @returns array with the search result
+ *
+ * Executes an LDAP search
+ */
+ public function searchUsers($filter, $attr = null) {
+ return $this->search($filter, $this->connection->ldapBaseUsers, $attr);
+ }
+
+ /**
+ * @brief executes an LDAP search, optimized for Groups
+ * @param $filter the LDAP filter for the search
+ * @param $attr optional, when a certain attribute shall be filtered out
+ * @returns array with the search result
+ *
+ * Executes an LDAP search
+ */
+ public function searchGroups($filter, $attr = null) {
+ return $this->search($filter, $this->connection->ldapBaseGroups, $attr);
+ }
+
+ /**
+ * @brief executes an LDAP search
+ * @param $filter the LDAP filter for the search
+ * @param $base the LDAP subtree that shall be searched
+ * @param $attr optional, when a certain attribute shall be filtered out
+ * @returns array with the search result
+ *
+ * Executes an LDAP search
+ */
+ private function search($filter, $base, $attr = null) {
+ if(!is_null($attr) && !is_array($attr)) {
+ $attr = array(mb_strtolower($attr, 'UTF-8'));
+ }
+
+ // See if we have a resource
+ $link_resource = $this->connection->getConnectionResource();
+ if(is_resource($link_resource)) {
+ $sr = ldap_search($link_resource, $base, $filter, $attr);
+ $findings = ldap_get_entries($link_resource, $sr );
+
+ // if we're here, probably no connection resource is returned.
+ // to make ownCloud behave nicely, we simply give back an empty array.
+ if(is_null($findings)) {
+ return array();
+ }
+ } else {
+ // Seems like we didn't find any resource.
+ // Return an empty array just like before.
+ \OCP\Util::writeLog('user_ldap', 'Could not search, because resource is missing.', \OCP\Util::DEBUG);
+ return array();
+ }
+
+ if(!is_null($attr)) {
+ $selection = array();
+ $multiarray = false;
+ if(count($attr) > 1) {
+ $multiarray = true;
+ $i = 0;
+ }
+ foreach($findings as $item) {
+ if(!is_array($item)) {
+ continue;
+ }
+ $item = \OCP\Util::mb_array_change_key_case($item, MB_CASE_LOWER, 'UTF-8');
+
+ if($multiarray) {
+ foreach($attr as $key) {
+ $key = mb_strtolower($key, 'UTF-8');
+ if(isset($item[$key])) {
+ if($key != 'dn') {
+ $selection[$i][$key] = $this->resemblesDN($key) ? $this->sanitizeDN($item[$key][0]) : $item[$key][0];
+ } else {
+ $selection[$i][$key] = $this->sanitizeDN($item[$key]);
+ }
+ }
+
+ }
+ $i++;
+ } else {
+ //tribute to case insensitivity
+ $key = mb_strtolower($attr[0], 'UTF-8');
+
+ if(isset($item[$key])) {
+ if($this->resemblesDN($key)) {
+ $selection[] = $this->sanitizeDN($item[$key]);
+ } else {
+ $selection[] = $item[$key];
+ }
+ }
+ }
+ }
+ return $selection;
+ }
+ return $findings;
+ }
+
+ public function sanitizeUsername($name) {
+ if($this->connection->ldapIgnoreNamingRules) {
+ return $name;
+ }
+
+ //REPLACEMENTS
+ $name = \OCP\Util::mb_str_replace(' ', '_', $name, 'UTF-8');
+
+ //every remaining unallowed characters will be removed
+ $name = preg_replace('/[^a-zA-Z0-9_.@-]/u', '', $name);
+
+ return $name;
+ }
+
+ /**
+ * @brief combines the input filters with AND
+ * @param $filters array, the filters to connect
+ * @returns the combined filter
+ *
+ * Combines Filter arguments with AND
+ */
+ public function combineFilterWithAnd($filters) {
+ return $this->combineFilter($filters, '&');
+ }
+
+ /**
+ * @brief combines the input filters with AND
+ * @param $filters array, the filters to connect
+ * @returns the combined filter
+ *
+ * Combines Filter arguments with AND
+ */
+ public function combineFilterWithOr($filters) {
+ return $this->combineFilter($filters, '|');
+ }
+
+ /**
+ * @brief combines the input filters with given operator
+ * @param $filters array, the filters to connect
+ * @param $operator either & or |
+ * @returns the combined filter
+ *
+ * Combines Filter arguments with AND
+ */
+ private function combineFilter($filters, $operator) {
+ $combinedFilter = '('.$operator;
+ foreach($filters as $filter) {
+ if($filter[0] != '(') {
+ $filter = '('.$filter.')';
+ }
+ $combinedFilter.=$filter;
+ }
+ $combinedFilter.=')';
+ return $combinedFilter;
+ }
+
+ public function areCredentialsValid($name, $password) {
+ $testConnection = clone $this->connection;
+ $credentials = array(
+ 'ldapAgentName' => $name,
+ 'ldapAgentPassword' => $password
+ );
+ if(!$testConnection->setConfiguration($credentials)) {
+ return false;
+ }
+ return $testConnection->bind();
+ }
+
+ /**
+ * @brief auto-detects the directory's UUID attribute
+ * @param $dn a known DN used to check against
+ * @param $force the detection should be run, even if it is not set to auto
+ * @returns true on success, false otherwise
+ */
+ private function detectUuidAttribute($dn, $force = false) {
+ if(($this->connection->ldapUuidAttribute != 'auto') && !$force) {
+ return true;
+ }
+
+ //for now, supported (known) attributes are entryUUID, nsuniqueid, objectGUID
+ $testAttributes = array('entryuuid', 'nsuniqueid', 'objectguid');
+
+ foreach($testAttributes as $attribute) {
+ \OCP\Util::writeLog('user_ldap', 'Testing '.$attribute.' as UUID attr', \OCP\Util::DEBUG);
+
+ $value = $this->readAttribute($dn, $attribute);
+ if(is_array($value) && isset($value[0]) && !empty($value[0])) {
+ \OCP\Util::writeLog('user_ldap', 'Setting '.$attribute.' as UUID attr', \OCP\Util::DEBUG);
+ $this->connection->ldapUuidAttribute = $attribute;
+ return true;
+ }
+ \OCP\Util::writeLog('user_ldap', 'The looked for uuid attr is not '.$attribute.', result was '.print_r($value,true), \OCP\Util::DEBUG);
+ }
+
+ return false;
+ }
+
+ public function getUUID($dn) {
+ if($this->detectUuidAttribute($dn)) {
+ $uuid = $this->readAttribute($dn, $this->connection->ldapUuidAttribute);
+ if(!is_array($uuid) && $this->connection->ldapOverrideUuidAttribute) {
+ $this->detectUuidAttribute($dn, true);
+ $uuid = $this->readAttribute($dn, $this->connection->ldapUuidAttribute);
+ }
+ if(is_array($uuid) && isset($uuid[0]) && !empty($uuid[0])) {
+ $uuid = $uuid[0];
+ } else {
+ $uuid = false;
+ }
+ } else {
+ $uuid = false;
+ }
+ return $uuid;
+ }
+} \ No newline at end of file
diff --git a/apps/user_ldap/lib/connection.php b/apps/user_ldap/lib/connection.php
new file mode 100644
index 00000000000..dc160a1642d
--- /dev/null
+++ b/apps/user_ldap/lib/connection.php
@@ -0,0 +1,358 @@
+<?php
+
+/**
+ * ownCloud – LDAP Access
+ *
+ * @author Arthur Schiwon
+ * @copyright 2012 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 Connection {
+ private $ldapConnectionRes = null;
+ private $configID;
+ private $configured = false;
+
+ //cache handler
+ protected $cache;
+
+ //settings
+ protected $config = array(
+ 'ldapHost' => null,
+ 'ldapPort' => null,
+ 'ldapBase' => null,
+ 'ldapBaseUsers' => null,
+ 'ldapBaseGroups' => null,
+ 'ldapAgentName' => null,
+ 'ldapAgentPassword' => null,
+ 'ldapTLS' => null,
+ 'ldapNoCase' => null,
+ 'turnOffCertCheck' => null,
+ 'ldapIgnoreNamingRules' => null,
+ 'ldapUserDisplayName' => null,
+ 'ldapUserFilter' => null,
+ 'ldapGroupFilter' => null,
+ 'ldapGroupDisplayName' => null,
+ 'ldapLoginFilter' => null,
+ 'ldapQuotaAttribute' => null,
+ 'ldapQuotaDefault' => null,
+ 'ldapEmailAttribute' => null,
+ 'ldapCacheTTL' => null,
+ 'ldapUuidAttribute' => null,
+ 'ldapOverrideUuidAttribute' => null,
+ );
+
+ public function __construct($configID = 'user_ldap') {
+ $this->configID = $configID;
+ $this->cache = \OC_Cache::getGlobalCache();
+ }
+
+ public function __destruct() {
+ @ldap_unbind($this->ldapConnectionRes);
+ }
+
+ public function __get($name) {
+ if(!$this->configured) {
+ $this->readConfiguration();
+ }
+
+ if(isset($this->config[$name])) {
+ return $this->config[$name];
+ }
+ }
+
+ public function __set($name, $value) {
+ $changed = false;
+ //omly 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::getAppValue($this->configID, 'ldap_uuid_attribute', $value);
+ }
+ $changed = true;
+ }
+ if($changed) {
+ $this->validateConfiguration();
+ }
+ }
+
+ /**
+ * @brief initializes the LDAP backend
+ * @param $force read the config settings no matter what
+ *
+ * initializes the LDAP backend
+ */
+ public function init($force = false) {
+ $this->readConfiguration($force);
+ $this->establishConnection();
+ }
+
+ /**
+ * Returns the LDAP handler
+ */
+ public function getConnectionResource() {
+ if(!$this->ldapConnectionRes) {
+ $this->init();
+ } else if(!is_resource($this->ldapConnectionRes)) {
+ $this->ldapConnectionRes = null;
+ $this->establishConnection();
+ }
+ if(is_null($this->ldapConnectionRes)) {
+ \OCP\Util::writeLog('user_ldap', 'Connection could not be established', \OCP\Util::ERROR);
+ }
+ return $this->ldapConnectionRes;
+ }
+
+ private function getCacheKey($key) {
+ $prefix = 'LDAP-'.$this->configID.'-';
+ if(is_null($key)) {
+ return $prefix;
+ }
+ return $prefix.md5($key);
+ }
+
+ public function getFromCache($key) {
+ if(!$this->configured) {
+ $this->readConfiguration();
+ }
+ if(!$this->config['ldapCacheTTL']) {
+ return null;
+ }
+ if(!$this->isCached($key)) {
+ return null;
+
+ }
+ $key = $this->getCacheKey($key);
+
+ return unserialize(base64_decode($this->cache->get($key)));
+ }
+
+ public function isCached($key) {
+ if(!$this->configured) {
+ $this->readConfiguration();
+ }
+ if(!$this->config['ldapCacheTTL']) {
+ return false;
+ }
+ $key = $this->getCacheKey($key);
+ return $this->cache->hasKey($key);
+ }
+
+ public function writeToCache($key, $value) {
+ if(!$this->configured) {
+ $this->readConfiguration();
+ }
+ if(!$this->config['ldapCacheTTL']) {
+ return null;
+ }
+ $key = $this->getCacheKey($key);
+ $value = base64_encode(serialize($value));
+ $this->cache->set($key, $value, $this->config['ldapCacheTTL']);
+ }
+
+ public function clearCache() {
+ $this->cache->clear($this->getCacheKey(null));
+ }
+
+ /**
+ * 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->configured = $this->validateConfiguration();
+ }
+ }
+
+ /**
+ * @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
+ * @return true if config validates, false otherwise. Check with $setParameters for detailed success on single parameters
+ */
+ public function setConfiguration($config, &$setParameters = null) {
+ if(!is_array($config)) {
+ 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');
+
+ foreach($config as $parameter => $value) {
+ if(isset($this->config[$parameter])) {
+ $this->config[$parameter] = $value;
+ if(is_array($setParameters)) {
+ $setParameters[] = $parameter;
+ }
+ } else if(isset($params[$parameter])) {
+ $this->config[$params[$parameter]] = $value;
+ if(is_array($setParameters)) {
+ $setParameters[] = $params[$parameter];
+ }
+ }
+ }
+
+ $this->configured = $this->validateConfiguration();
+
+ return $this->configured;
+ }
+
+ /**
+ * @brief Validates the user specified configuration
+ * @returns true if configuration seems OK, false otherwise
+ */
+ private function validateConfiguration() {
+ //first step: "soft" checks: settings that are not really necessary, but advisable. If left empty, give an info message
+ if(empty($this->config['ldapBaseUsers'])) {
+ \OCP\Util::writeLog('user_ldap', 'Base tree for Users is empty, using Base DN', \OCP\Util::INFO);
+ $this->config['ldapBaseUsers'] = $this->config['ldapBase'];
+ }
+ if(empty($this->config['ldapBaseGroups'])) {
+ \OCP\Util::writeLog('user_ldap', 'Base tree for Groups is empty, using Base DN', \OCP\Util::INFO);
+ $this->config['ldapBaseGroups'] = $this->config['ldapBase'];
+ }
+ if(empty($this->config['ldapGroupFilter']) && empty($this->config['ldapGroupMemberAssocAttr'])) {
+ \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'))) {
+ \OCP\Config::setAppValue($this->configID, 'ldap_uuid_attribute', 'auto');
+ \OCP\Util::writeLog('user_ldap', 'Illegal value for the UUID Attribute, reset to autodetect.', \OCP\Util::INFO);
+ }
+
+
+ //second step: critical checks. If left empty or filled wrong, set as unconfigured and give a warning.
+ $configurationOK = true;
+ if(empty($this->config['ldapHost'])) {
+ \OCP\Util::writeLog('user_ldap', 'No LDAP host given, won`t connect.', \OCP\Util::WARN);
+ $configurationOK = false;
+ }
+ if(empty($this->config['ldapPort'])) {
+ \OCP\Util::writeLog('user_ldap', 'No LDAP Port given, won`t connect.', \OCP\Util::WARN);
+ $configurationOK = false;
+ }
+ if((empty($this->config['ldapAgentName']) && !empty($this->config['ldapAgentPassword']))
+ || (!empty($this->config['ldapAgentName']) && empty($this->config['ldapAgentPassword']))) {
+ \OCP\Util::writeLog('user_ldap', 'Either no password given for the user agent or a password is given, but no LDAP agent; won`t connect.', \OCP\Util::WARN);
+ $configurationOK = false;
+ }
+ //TODO: check if ldapAgentName is in DN form
+ if(empty($this->config['ldapBase']) && (empty($this->config['ldapBaseUsers']) && empty($this->config['ldapBaseGroups']))) {
+ \OCP\Util::writeLog('user_ldap', 'No Base DN given, won`t connect.', \OCP\Util::WARN);
+ $configurationOK = false;
+ }
+ if(empty($this->config['ldapUserDisplayName'])) {
+ \OCP\Util::writeLog('user_ldap', 'No user display name attribute specified, won`t connect.', \OCP\Util::WARN);
+ $configurationOK = false;
+ }
+ if(empty($this->config['ldapGroupDisplayName'])) {
+ \OCP\Util::writeLog('user_ldap', 'No group display name attribute specified, won`t connect.', \OCP\Util::WARN);
+ $configurationOK = false;
+ }
+ if(empty($this->config['ldapLoginFilter'])) {
+ \OCP\Util::writeLog('user_ldap', 'No login filter specified, won`t connect.', \OCP\Util::WARN);
+ $configurationOK = false;
+ }
+ if(mb_strpos($this->config['ldapLoginFilter'], '%uid', 0, 'UTF-8') === false) {
+ \OCP\Util::writeLog('user_ldap', 'Login filter does not contain %uid place holder, won`t connect.', \OCP\Util::WARN);
+ \OCP\Util::writeLog('user_ldap', 'Login filter was ' . $this->config['ldapLoginFilter'], \OCP\Util::DEBUG);
+ $configurationOK = false;
+ }
+
+ return $configurationOK;
+ }
+
+ /**
+ * Connects and Binds to LDAP
+ */
+ private function establishConnection() {
+ static $phpLDAPinstalled = true;
+ if(!$phpLDAPinstalled) {
+ return false;
+ }
+ if(!$this->configured) {
+ \OCP\Util::writeLog('user_ldap', 'Configuration is invalid, cannot connect', \OCP\Util::WARN);
+ return false;
+ }
+ if(!$this->ldapConnectionRes) {
+ if(!function_exists('ldap_connect')) {
+ $phpLDAPinstalled = false;
+ \OCP\Util::writeLog('user_ldap', 'function ldap_connect is not available. Make sure that the PHP ldap module is installed.', \OCP\Util::ERROR);
+
+ return false;
+ }
+ if($this->config['turnOffCertCheck']) {
+ if(putenv('LDAPTLS_REQCERT=never')) {
+ \OCP\Util::writeLog('user_ldap', 'Turned off SSL certificate validation successfully.', \OCP\Util::WARN);
+ } else {
+ \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);
+ }
+ }
+ }
+
+ return $this->bind();
+ }
+ }
+
+ /**
+ * Binds to LDAP
+ */
+ public function bind() {
+ $ldapLogin = @ldap_bind($this->getConnectionResource(), $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);
+ $this->ldapConnectionRes = null;
+ return false;
+ }
+ return true;
+ }
+
+} \ No newline at end of file
diff --git a/apps/user_ldap/lib/jobs.php b/apps/user_ldap/lib/jobs.php
new file mode 100644
index 00000000000..d478731b84c
--- /dev/null
+++ b/apps/user_ldap/lib/jobs.php
@@ -0,0 +1,157 @@
+<?php
+
+/**
+ * ownCloud – LDAP Background Jobs
+ *
+ * @author Arthur Schiwon
+ * @copyright 2012 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 Jobs {
+ static private $groupsFromDB;
+
+ static private $groupBE;
+ static private $connector;
+
+ static public function updateGroups() {
+ \OCP\Util::writeLog('user_ldap', 'Run background job "updateGroups"', \OCP\Util::DEBUG);
+ $lastUpdate = \OCP\Config::getAppValue('user_ldap', 'bgjUpdateGroupsLastRun', 0);
+ if((time() - $lastUpdate) < self::getRefreshInterval()) {
+ \OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – last run too fresh, aborting.', \OCP\Util::DEBUG);
+ //komm runter Werner die Maurer geben ein aus
+ return;
+ }
+
+ $knownGroups = array_keys(self::getKnownGroups());
+ $actualGroups = self::getGroupBE()->getGroups();
+
+ if(empty($actualGroups) && empty($knownGroups)) {
+ \OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – groups do not seem to be configured properly, aborting.', \OCP\Util::INFO);
+ \OCP\setAppValue('user_ldap', 'bgjUpdateGroupsLastRun', time());
+ return;
+ }
+
+ self::handleKnownGroups(array_intersect($actualGroups, $knownGroups));
+ self::handleCreatedGroups(array_diff($actualGroups, $knownGroups));
+ self::handleRemovedGroups(array_diff($knownGroups, $actualGroups));
+
+ \OCP\Config::setAppValue('user_ldap', 'bgjUpdateGroupsLastRun', time());
+
+ \OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – Finished.', \OCP\Util::DEBUG);
+ }
+
+ static private function getRefreshInterval() {
+ //defaults to every hour
+ return \OCP\Config::getAppValue('user_ldap', 'bgjRefreshInterval', 3600);
+ }
+
+ static private function handleKnownGroups($groups) {
+ \OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – Dealing with known Groups.', \OCP\Util::DEBUG);
+ $query = \OCP\DB::prepare('
+ UPDATE *PREFIX*ldap_group_members
+ SET owncloudusers = ?
+ WHERE owncloudname = ?
+ ');
+ foreach($groups as $group) {
+ //we assume, that self::$groupsFromDB has been retrieved already
+ $knownUsers = unserialize(self::$groupsFromDB[$group]['owncloudusers']);
+ $actualUsers = self::getGroupBE()->usersInGroup($group);
+ $hasChanged = false;
+ foreach(array_diff($knownUsers, $actualUsers) as $removedUser) {
+ \OCP\Util::emitHook('OC_User', 'post_removeFromGroup', array('uid' => $removedUser, 'gid' => $group));
+ \OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – "'.$removedUser.'" removed from "'.$group.'".', \OCP\Util::INFO);
+ $hasChanged = true;
+ }
+ foreach(array_diff($actualUsers, $knownUsers) as $addedUser) {
+ \OCP\Util::emitHook('OC_User', 'post_addFromGroup', array('uid' => $addedUser, 'gid' => $group));
+ \OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – "'.$addedUser.'" added to "'.$group.'".', \OCP\Util::INFO);
+ $hasChanged = true;
+ }
+ if($hasChanged) {
+ $query->execute(array(serialize($actualUsers), $group));
+ }
+ }
+ \OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – FINISHED dealing with known Groups.', \OCP\Util::DEBUG);
+ }
+
+ static private function handleCreatedGroups($createdGroups) {
+ \OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – dealing with created Groups.', \OCP\Util::DEBUG);
+ $query = \OCP\DB::prepare('
+ INSERT
+ INTO *PREFIX*ldap_group_members (owncloudname, owncloudusers)
+ VALUES (?, ?)
+ ');
+ foreach($createdGroups as $createdGroup) {
+ \OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – new group "'.$createdGroup.'" found.', \OCP\Util::INFO);
+ $users = serialize(self::getGroupBE()->usersInGroup($createdGroup));
+ $query->execute(array($createdGroup, $users));
+ }
+ \OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – FINISHED dealing with created Groups.', \OCP\Util::DEBUG);
+ }
+
+ static private function handleRemovedGroups($removedGroups) {
+ \OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – dealing with removed groups.', \OCP\Util::DEBUG);
+ $query = \OCP\DB::prepare('
+ DELETE
+ FROM *PREFIX*ldap_group_members
+ WHERE owncloudname = ?
+ ');
+ foreach($removedGroups as $removedGroup) {
+ \OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – group "'.$createdGroup.'" was removed.', \OCP\Util::INFO);
+ $query->execute(array($removedGroup));
+ }
+ \OCP\Util::writeLog('user_ldap', 'bgJ "updateGroups" – FINISHED dealing with removed groups.', \OCP\Util::DEBUG);
+ }
+
+ static private function getConnector() {
+ if(!is_null(self::$connector)) {
+ return self::$connector;
+ }
+ self::$connector = new \OCA\user_ldap\lib\Connection('user_ldap');
+ return self::$connector;
+ }
+
+ static private function getGroupBE() {
+ if(!is_null(self::$groupBE)) {
+ return self::$groupBE;
+ }
+ self::getConnector();
+ self::$groupBE = new \OCA\user_ldap\GROUP_LDAP();
+ self::$groupBE->setConnector(self::$connector);
+
+ return self::$groupBE;
+ }
+
+ static private function getKnownGroups() {
+ if(is_array(self::$groupsFromDB)) {
+ return self::$groupsFromDB;
+ }
+ $query = \OCP\DB::prepare('
+ SELECT owncloudname, owncloudusers
+ FROM *PREFIX*ldap_group_members
+ ');
+ $result = $query->execute()->fetchAll();
+ self::$groupsFromDB = array();
+ foreach($result as $dataset) {
+ self::$groupsFromDB[$dataset['owncloudname']] = $dataset;
+ }
+
+ return self::$groupsFromDB;
+ }
+} \ No newline at end of file
diff --git a/apps/user_ldap/lib_ldap.php b/apps/user_ldap/lib_ldap.php
deleted file mode 100644
index 70b4664542a..00000000000
--- a/apps/user_ldap/lib_ldap.php
+++ /dev/null
@@ -1,765 +0,0 @@
-<?php
-
-/**
- * ownCloud – LDAP lib
- *
- * @author Arthur Schiwon
- * @copyright 2012 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/>.
- *
- */
-
-define('LDAP_GROUP_MEMBER_ASSOC_ATTR','uniqueMember');
-define('LDAP_GROUP_DISPLAY_NAME_ATTR','cn');
-
-//needed to unbind, because we use OC_LDAP only statically
-class OC_LDAP_DESTRUCTOR {
- public function __destruct() {
- OC_LDAP::destruct();
- }
-}
-
-class OC_LDAP {
- static protected $ldapConnectionRes = false;
- static protected $configured = false;
-
- //cached settings
- static protected $ldapHost;
- static protected $ldapPort;
- static protected $ldapBase;
- static protected $ldapBaseUsers;
- static protected $ldapBaseGroups;
- static protected $ldapAgentName;
- static protected $ldapAgentPassword;
- static protected $ldapTLS;
- static protected $ldapNoCase;
- static protected $ldapIgnoreNamingRules;
- // user and group settings, that are needed in both backends
- static protected $ldapUserDisplayName;
- static protected $ldapUserFilter;
- static protected $ldapGroupDisplayName;
- static protected $ldapLoginFilter;
-
- static protected $__d;
-
- /**
- * @brief initializes the LDAP backend
- * @param $force read the config settings no matter what
- *
- * initializes the LDAP backend
- */
- static public function init($force = false) {
- if(is_null(self::$__d)) {
- self::$__d = new OC_LDAP_DESTRUCTOR();
- }
- self::readConfiguration($force);
- self::establishConnection();
- }
-
- static public function destruct() {
- @ldap_unbind(self::$ldapConnectionRes);
- }
-
- /**
- * @brief returns a read-only configuration value
- * @param $key the name of the configuration value
- * @returns the value on success, otherwise null
- *
- * returns a read-only configuration values
- *
- * we cannot work with getters, because it is a static class
- */
- static public function conf($key) {
- if(!self::$configured) {
- self::init();
- }
-
- $availableProperties = array(
- 'ldapUserDisplayName',
- 'ldapGroupDisplayName',
- 'ldapLoginFilter'
- );
-
- if(in_array($key, $availableProperties)) {
- return self::$$key;
- }
-
- return null;
- }
-
- /**
- * gives back the database table for the query
- */
- static private function getMapTable($isUser) {
- if($isUser) {
- return '*PREFIX*ldap_user_mapping';
- } else {
- return '*PREFIX*ldap_group_mapping';
- }
- }
-
- /**
- * @brief returns the LDAP DN for the given internal ownCloud name of the group
- * @param $name the ownCloud name in question
- * @returns string with the LDAP DN on success, otherwise false
- *
- * returns the LDAP DN for the given internal ownCloud name of the group
- */
- static public function groupname2dn($name) {
- return self::ocname2dn($name, false);
- }
-
- /**
- * @brief returns the LDAP DN for the given internal ownCloud name of the user
- * @param $name the ownCloud name in question
- * @returns string with the LDAP DN on success, otherwise false
- *
- * returns the LDAP DN for the given internal ownCloud name of the user
- */
- static public function username2dn($name) {
- $dn = self::ocname2dn($name, true);
- if($dn) {
- return $dn;
- } else {
- //fallback: user is not mapped
- self::init();
- $filter = self::combineFilterWithAnd(array(
- self::$ldapUserFilter,
- self::$ldapUserDisplayName . '=' . $name,
- ));
- $result = self::searchUsers($filter, 'dn');
- if(isset($result[0]['dn'])) {
- self::mapUser($result[0], $name);
- return $result[0];
- }
- }
-
- return false;
- }
-
- static private function ocname2dn($name, $isUser) {
- $table = self::getMapTable($isUser);
-
- $query = OCP\DB::prepare('
- SELECT `ldap_dn`
- FROM `'.$table.'`
- WHERE `owncloud_name` = ?
- ');
-
- $record = $query->execute(array($name))->fetchOne();
- return $record;
- }
-
- /**
- * @brief returns the internal ownCloud name for the given LDAP DN of the group
- * @param $dn the dn of the group object
- * @param $ldapname optional, the display name of the object
- * @returns string with with the name to use in ownCloud, false on DN outside of search DN
- *
- * returns the internal ownCloud name for the given LDAP DN of the group, false on DN outside of search DN or failure
- */
- static public function dn2groupname($dn, $ldapname = null) {
- if(strripos($dn, self::$ldapBaseGroups) !== (strlen($dn)-strlen(self::$ldapBaseGroups))) {
- return false;
- }
- return self::dn2ocname($dn, $ldapname, false);
- }
-
- /**
- * @brief returns the internal ownCloud name for the given LDAP DN of the user
- * @param $dn the dn of the user object
- * @param $ldapname optional, the display name of the object
- * @returns string with with the name to use in ownCloud
- *
- * returns the internal ownCloud name for the given LDAP DN of the user, false on DN outside of search DN or failure
- */
- static public function dn2username($dn, $ldapname = null) {
- if(strripos($dn, self::$ldapBaseUsers) !== (strlen($dn)-strlen(self::$ldapBaseUsers))) {
- return false;
- }
- return self::dn2ocname($dn, $ldapname, true);
- }
-
- static public function dn2ocname($dn, $ldapname = null, $isUser = true) {
- $dn = self::sanitizeDN($dn);
- $table = self::getMapTable($isUser);
- if($isUser) {
- $nameAttribute = self::conf('ldapUserDisplayName');
- } else {
- $nameAttribute = self::conf('ldapGroupDisplayName');
- }
-
- $query = OCP\DB::prepare('
- SELECT `owncloud_name`
- FROM `'.$table.'`
- WHERE `ldap_dn` = ?
- ');
-
- $component = $query->execute(array($dn))->fetchOne();
- if($component) {
- return $component;
- }
-
- if(is_null($ldapname)) {
- $ldapname = self::readAttribute($dn, $nameAttribute);
- //we do not accept empty usernames
- if(!isset($ldapname[0]) && empty($ldapname[0])) {
- OCP\Util::writeLog('user_ldap', 'No or empty name for '.$dn.'.', OCP\Util::INFO);
- return false;
- }
- $ldapname = $ldapname[0];
- }
- $ldapname = self::sanitizeUsername($ldapname);
-
- //a new user/group! Then let's try to add it. We're shooting into the blue with the user/group name, assuming that in most cases there will not be a conflict. Otherwise an error will occur and we will continue with our second shot.
- if(self::mapComponent($dn, $ldapname, $isUser)) {
- return $ldapname;
- }
-
- //doh! There is a conflict. We need to distinguish between users/groups. Adding indexes is an idea, but not much of a help for the user. The DN is ugly, but for now the only reasonable way. But we transform it to a readable format and remove the first part to only give the path where this object is located.
- $oc_name = self::alternateOwnCloudName($ldapname, $dn);
- if(self::mapComponent($dn, $oc_name, $isUser)) {
- return $oc_name;
- }
-
- //if everything else did not help..
- OCP\Util::writeLog('user_ldap', 'Could not create unique ownCloud name for '.$dn.'.', OCP\Util::INFO);
- }
-
- /**
- * @brief gives back the user names as they are used ownClod internally
- * @param $ldapGroups an array with the ldap Users result in style of array ( array ('dn' => foo, 'uid' => bar), ... )
- * @returns an array with the user names to use in ownCloud
- *
- * gives back the user names as they are used ownClod internally
- */
- static public function ownCloudUserNames($ldapUsers) {
- return self::ldap2ownCloudNames($ldapUsers, true);
- }
-
- /**
- * @brief gives back the group names as they are used ownClod internally
- * @param $ldapGroups an array with the ldap Groups result in style of array ( array ('dn' => foo, 'cn' => bar), ... )
- * @returns an array with the group names to use in ownCloud
- *
- * gives back the group names as they are used ownClod internally
- */
- static public function ownCloudGroupNames($ldapGroups) {
- return self::ldap2ownCloudNames($ldapGroups, false);
- }
-
- static private function ldap2ownCloudNames($ldapObjects, $isUsers) {
- if($isUsers) {
- $knownObjects = self::mappedUsers();
- $nameAttribute = self::conf('ldapUserDisplayName');
- } else {
- $knownObjects = self::mappedGroups();
- $nameAttribute = self::conf('ldapGroupDisplayName');
- }
- $ownCloudNames = array();
-
- foreach($ldapObjects as $ldapObject) {
- $key = self::recursiveArraySearch($knownObjects, $ldapObject['dn']);
-
- //everything is fine when we know the group
- if($key !== false) {
- $ownCloudNames[] = $knownObjects[$key]['owncloud_name'];
- continue;
- }
-
- //we do not take empty usernames
- if(!isset($ldapObject[$nameAttribute]) || empty($ldapObject[$nameAttribute])) {
- OCP\Util::writeLog('user_ldap', 'No or empty name for '.$ldapObject['dn'].', skipping.', OCP\Util::INFO);
- continue;
- }
-
- //a new group! Then let's try to add it. We're shooting into the blue with the group name, assuming that in most cases there will not be a conflict. But first make sure, that the display name contains only allowed characters.
- $ocname = self::sanitizeUsername($ldapObject[$nameAttribute]);
- if(self::mapComponent($ldapObject['dn'], $ocname, $isUsers)) {
- $ownCloudNames[] = $ocname;
- continue;
- }
-
- //doh! There is a conflict. We need to distinguish between groups. Adding indexes is an idea, but not much of a help for the user. The DN is ugly, but for now the only reasonable way. But we transform it to a readable format and remove the first part to only give the path where this entry is located.
- $ocname = self::alternateOwnCloudName($ocname, $ldapObject['dn']);
- if(self::mapComponent($ldapObject['dn'], $ocname, $isUsers)) {
- $ownCloudNames[] = $ocname;
- continue;
- }
-
- //if everything else did not help..
- OCP\Util::writeLog('user_ldap', 'Could not create unique ownCloud name for '.$ldapObject['dn'].', skipping.', OCP\Util::INFO);
- }
- return $ownCloudNames;
- }
-
- /**
- * @brief creates a hopefully unique name for owncloud based on the display name and the dn of the LDAP object
- * @param $name the display name of the object
- * @param $dn the dn of the object
- * @returns string with with the name to use in ownCloud
- *
- * creates a hopefully unique name for owncloud based on the display name and the dn of the LDAP object
- */
- static private function alternateOwnCloudName($name, $dn) {
- $ufn = ldap_dn2ufn($dn);
- $name = $name . '@' . trim(substr_replace($ufn, '', 0, strpos($ufn, ',')));
- $name = self::sanitizeUsername($name);
- return $name;
- }
-
- /**
- * @brief retrieves all known groups from the mappings table
- * @returns array with the results
- *
- * retrieves all known groups from the mappings table
- */
- static private function mappedGroups() {
- return self::mappedComponents(false);
- }
-
- /**
- * @brief retrieves all known users from the mappings table
- * @returns array with the results
- *
- * retrieves all known users from the mappings table
- */
- static private function mappedUsers() {
- return self::mappedComponents(true);
- }
-
- static private function mappedComponents($isUsers) {
- $table = self::getMapTable($isUsers);
-
- $query = OCP\DB::prepare('
- SELECT `ldap_dn`, `owncloud_name`
- FROM `'. $table .'`'
- );
-
- return $query->execute()->fetchAll();
- }
-
- /**
- * @brief inserts a new group into the mappings table
- * @param $dn the record in question
- * @param $ocname the name to use in ownCloud
- * @returns true on success, false otherwise
- *
- * inserts a new group into the mappings table
- */
- static private function mapGroup($dn, $ocname) {
- return self::mapComponent($dn, $ocname, false);
- }
-
- /**
- * @brief inserts a new user into the mappings table
- * @param $dn the record in question
- * @param $ocname the name to use in ownCloud
- * @returns true on success, false otherwise
- *
- * inserts a new user into the mappings table
- */
- static private function mapUser($dn, $ocname) {
- return self::mapComponent($dn, $ocname, true);
- }
-
- /**
- * @brief inserts a new user or group into the mappings table
- * @param $dn the record in question
- * @param $ocname the name to use in ownCloud
- * @param $isUser is it a user or a group?
- * @returns true on success, false otherwise
- *
- * inserts a new user or group into the mappings table
- */
- static private function mapComponent($dn, $ocname, $isUser = true) {
- $table = self::getMapTable($isUser);
- $dn = self::sanitizeDN($dn);
-
- $sqlAdjustment = '';
- $dbtype = OCP\Config::getSystemValue('dbtype');
- if($dbtype == 'mysql') {
- $sqlAdjustment = 'FROM `dual`';
- }
-
- $insert = OCP\DB::prepare('
- INSERT INTO `'.$table.'` (`ldap_dn`, `owncloud_name`)
- SELECT ?,?
- '.$sqlAdjustment.'
- WHERE NOT EXISTS (
- SELECT 1
- FROM `'.$table.'`
- WHERE `ldap_dn` = ?
- OR `owncloud_name` = ? )
- ');
-
- $res = $insert->execute(array($dn, $ocname, $dn, $ocname));
-
- if(OCP\DB::isError($res)) {
- return false;
- }
-
- $insRows = $res->numRows();
-
- if($insRows == 0) {
- return false;
- }
-
- return true;
- }
-
- static public function fetchListOfUsers($filter, $attr) {
- return self::fetchList(OC_LDAP::searchUsers($filter, $attr), (count($attr) > 1));
- }
-
- static public function fetchListOfGroups($filter, $attr) {
- return self::fetchList(OC_LDAP::searchGroups($filter, $attr), (count($attr) > 1));
- }
-
- static private function fetchList($list, $manyAttributes) {
- if(is_array($list)) {
- if($manyAttributes) {
- return $list;
- } else {
- return array_unique($list, SORT_LOCALE_STRING);
- }
- }
-
- //error cause actually, maybe throw an exception in future.
- return array();
- }
-
- /**
- * @brief reads a given attribute for an LDAP record identified by a DN
- * @param $dn the record in question
- * @param $attr the attribute that shall be retrieved
- * @returns the values in an array on success, false otherwise
- *
- * Reads an attribute from an LDAP entry
- */
- static public function readAttribute($dn, $attr) {
- $cr = self::getConnectionResource();
- if(!is_resource($cr)) {
- //LDAP not available
- return false;
- }
- $rr = ldap_read($cr, $dn, 'objectClass=*', array($attr));
- $er = ldap_first_entry($cr, $rr);
- //LDAP attributes are not case sensitive
- $result = array_change_key_case(ldap_get_attributes($cr, $er));
- $attr = strtolower($attr);
-
- if(isset($result[$attr]) && $result[$attr]['count'] > 0){
- $values = array();
- for($i=0;$i<$result[$attr]['count'];$i++) {
- $values[] = self::resemblesDN($attr) ? self::sanitizeDN($result[$attr][$i]) : $result[$attr][$i];
- }
- return $values;
- }
- return false;
- }
-
- /**
- * @brief executes an LDAP search, optimized for Users
- * @param $filter the LDAP filter for the search
- * @param $attr optional, when a certain attribute shall be filtered out
- * @returns array with the search result
- *
- * Executes an LDAP search
- */
- static public function searchUsers($filter, $attr = null) {
- self::init();
- return self::search($filter, self::$ldapBaseUsers, $attr);
- }
-
- /**
- * @brief executes an LDAP search, optimized for Groups
- * @param $filter the LDAP filter for the search
- * @param $attr optional, when a certain attribute shall be filtered out
- * @returns array with the search result
- *
- * Executes an LDAP search
- */
- static public function searchGroups($filter, $attr = null) {
- self::init();
- return self::search($filter, self::$ldapBaseGroups, $attr);
- }
-
- /**
- * @brief executes an LDAP search
- * @param $filter the LDAP filter for the search
- * @param $base the LDAP subtree that shall be searched
- * @param $attr optional, when a certain attribute shall be filtered out
- * @returns array with the search result
- *
- * Executes an LDAP search
- */
- static private function search($filter, $base, $attr = null) {
- if(!is_null($attr) && !is_array($attr)) {
- $attr = array(strtolower($attr));
- }
- $cr = self::getConnectionResource();
- if(!is_resource($cr)) {
- //LDAP not available
- return array();
- }
- $sr = @ldap_search(self::getConnectionResource(), $base, $filter, $attr);
- $findings = @ldap_get_entries(self::getConnectionResource(), $sr );
- // if we're here, probably no connection ressource is returned.
- // to make ownCloud behave nicely, we simply give back an empty array.
- if(is_null($findings)) {
- return array();
- }
-
- if(!is_null($attr)) {
- $selection = array();
- $multiarray = false;
- if(count($attr) > 1) {
- $multiarray = true;
- $i = 0;
- }
- foreach($findings as $item) {
- if(!is_array($item)) {
- continue;
- }
- $item = array_change_key_case($item);
-
- if($multiarray) {
- foreach($attr as $key) {
- $key = strtolower($key);
- if(isset($item[$key])) {
- if($key != 'dn'){
- $selection[$i][$key] = self::resemblesDN($key) ? self::sanitizeDN($item[$key][0]) : $item[$key][0];
- } else {
- $selection[$i][$key] = self::sanitizeDN($item[$key]);
- }
- }
-
- }
- $i++;
- } else {
- //tribute to case insensitivity
- $key = strtolower($attr[0]);
-
- if(isset($item[$key])) {
- if(self::resemblesDN($key)) {
- $selection[] = self::sanitizeDN($item[$key]);
- } else {
- $selection[] = $item[$key];
- }
- }
- }
-
- }
- return $selection;
- }
-
- return $findings;
- }
-
- static private function resemblesDN($attr) {
- $resemblingAttributes = array(
- 'dn',
- 'uniquemember',
- 'member'
- );
- return in_array($attr, $resemblingAttributes);
- }
-
- static private function sanitizeDN($dn) {
- //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+)/','\1,',$dn);
-
- //make comparisons and everything work
- $dn = strtolower($dn);
-
- return $dn;
- }
-
- static private function sanitizeUsername($name) {
- if(self::$ldapIgnoreNamingRules) {
- return $name;
- }
-
- //REPLACEMENTS
- $name = str_replace(' ', '_', $name);
-
- //every remaining unallowed characters will be removed
- $name = preg_replace('/[^a-zA-Z0-9_.@-]/', '', $name);
-
- return $name;
- }
-
- /**
- * @brief combines the input filters with AND
- * @param $filters array, the filters to connect
- * @returns the combined filter
- *
- * Combines Filter arguments with AND
- */
- static public function combineFilterWithAnd($filters) {
- return self::combineFilter($filters,'&');
- }
-
- /**
- * @brief combines the input filters with AND
- * @param $filters array, the filters to connect
- * @returns the combined filter
- *
- * Combines Filter arguments with AND
- */
- static public function combineFilterWithOr($filters) {
- return self::combineFilter($filters,'|');
- }
-
- /**
- * @brief combines the input filters with given operator
- * @param $filters array, the filters to connect
- * @param $operator either & or |
- * @returns the combined filter
- *
- * Combines Filter arguments with AND
- */
- static private function combineFilter($filters, $operator) {
- $combinedFilter = '('.$operator;
- foreach($filters as $filter) {
- if($filter[0] != '(') {
- $filter = '('.$filter.')';
- }
- $combinedFilter.=$filter;
- }
- $combinedFilter.=')';
- return $combinedFilter;
- }
-
- /**
- * Returns the LDAP handler
- */
- static private function getConnectionResource() {
- if(!self::$ldapConnectionRes) {
- self::init();
- }
- if(is_null(self::$ldapConnectionRes)) {
- OCP\Util::writeLog('ldap', 'Connection could not be established', OCP\Util::INFO);
- }
- return self::$ldapConnectionRes;
- }
-
- /**
- * Caches the general LDAP configuration.
- */
- static private function readConfiguration($force = false) {
- if(!self::$configured || $force) {
- self::$ldapHost = OCP\Config::getAppValue('user_ldap', 'ldap_host', '');
- self::$ldapPort = OCP\Config::getAppValue('user_ldap', 'ldap_port', 389);
- self::$ldapAgentName = OCP\Config::getAppValue('user_ldap', 'ldap_dn','');
- self::$ldapAgentPassword = base64_decode(OCP\Config::getAppValue('user_ldap', 'ldap_agent_password',''));
- self::$ldapBase = self::sanitizeDN(OCP\Config::getAppValue('user_ldap', 'ldap_base', ''));
- self::$ldapBaseUsers = self::sanitizeDN(OCP\Config::getAppValue('user_ldap', 'ldap_base_users',self::$ldapBase));
- self::$ldapBaseGroups = self::sanitizeDN(OCP\Config::getAppValue('user_ldap', 'ldap_base_groups', self::$ldapBase));
- self::$ldapTLS = OCP\Config::getAppValue('user_ldap', 'ldap_tls',0);
- self::$ldapNoCase = OCP\Config::getAppValue('user_ldap', 'ldap_nocase', 0);
- self::$ldapUserDisplayName = strtolower(OCP\Config::getAppValue('user_ldap', 'ldap_display_name', 'uid'));
- self::$ldapUserFilter = OCP\Config::getAppValue('user_ldap', 'ldap_userlist_filter','objectClass=person');
- self::$ldapLoginFilter = OCP\Config::getAppValue('user_ldap', 'ldap_login_filter', '(uid=%uid)');
- self::$ldapGroupDisplayName = strtolower(OCP\Config::getAppValue('user_ldap', 'ldap_group_display_name', LDAP_GROUP_DISPLAY_NAME_ATTR));
- self::$ldapIgnoreNamingRules = OCP\Config::getSystemValue('ldapIgnoreNamingRules', false);
-
- if(empty(self::$ldapBaseUsers)) {
- OCP\Util::writeLog('ldap', 'Base for Users is empty, using Base DN', OCP\Util::INFO);
- self::$ldapBaseUsers = self::$ldapBase;
- }
- if(empty(self::$ldapBaseGroups)) {
- OCP\Util::writeLog('ldap', 'Base for Groups is empty, using Base DN', OCP\Util::INFO);
- self::$ldapBaseGroups = self::$ldapBase;
- }
-
- if(
- !empty(self::$ldapHost)
- && !empty(self::$ldapPort)
- && (
- (!empty(self::$ldapAgentName) && !empty(self::$ldapAgentPassword))
- || ( empty(self::$ldapAgentName) && empty(self::$ldapAgentPassword))
- )
- && !empty(self::$ldapBase)
- && !empty(self::$ldapUserDisplayName)
- )
- {
- self::$configured = true;
- }
- }
- }
-
- /**
- * Connects and Binds to LDAP
- */
- static private function establishConnection() {
- static $phpLDAPinstalled = true;
- if(!$phpLDAPinstalled) {
- return false;
- }
- if(!self::$configured) {
- OCP\Util::writeLog('ldap', 'Configuration is invalid, cannot connect', OCP\Util::INFO);
- return false;
- }
- if(!self::$ldapConnectionRes) {
- //check if php-ldap is installed
- if(!function_exists('ldap_connect')) {
- $phpLDAPinstalled = false;
- OCP\Util::writeLog('user_ldap', 'function ldap_connect is not available. Make sure that the PHP ldap module is installed.', OCP\Util::ERROR);
-
- return false;
- }
- self::$ldapConnectionRes = ldap_connect(self::$ldapHost, self::$ldapPort);
- if(ldap_set_option(self::$ldapConnectionRes, LDAP_OPT_PROTOCOL_VERSION, 3)) {
- if(ldap_set_option(self::$ldapConnectionRes, LDAP_OPT_REFERRALS, 0)) {
- if(self::$ldapTLS) {
- ldap_start_tls(self::$ldapConnectionRes);
- }
- }
- }
-
- $ldapLogin = @ldap_bind(self::$ldapConnectionRes, self::$ldapAgentName, self::$ldapAgentPassword );
- if(!$ldapLogin) {
- OCP\Util::writeLog('ldap', 'Bind failed: ' . ldap_errno(self::$ldapConnectionRes) . ': ' . ldap_error(self::$ldapConnectionRes), OCP\Util::ERROR);
- return false;
- }
- }
- }
-
- static public function areCredentialsValid($name, $password) {
- return @ldap_bind(self::getConnectionResource(), $name, $password);
- }
-
- /**
- * taken from http://www.php.net/manual/en/function.array-search.php#97645
- * TODO: move somewhere, where its better placed since it is not LDAP specific. OC_Helper maybe?
- */
- static public function recursiveArraySearch($haystack, $needle, $index = null) {
- $aIt = new RecursiveArrayIterator($haystack);
- $it = new RecursiveIteratorIterator($aIt);
-
- while($it->valid()) {
- if (((isset($index) AND ($it->key() == $index)) OR (!isset($index))) AND ($it->current() == $needle)) {
- return $aIt->key();
- }
-
- $it->next();
- }
-
- return false;
- }
-
- }
diff --git a/apps/user_ldap/settings.php b/apps/user_ldap/settings.php
index 0c29e70b5ab..39aa3296265 100644
--- a/apps/user_ldap/settings.php
+++ b/apps/user_ldap/settings.php
@@ -20,34 +20,43 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
-$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_nocase', 'ldap_quota_def', 'ldap_quota_attr', 'ldap_email_attr', 'ldap_group_member_assoc_attribute');
+$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');
OCP\Util::addscript('user_ldap', 'settings');
+OCP\Util::addstyle('user_ldap', 'settings');
if ($_POST) {
foreach($params as $param){
if(isset($_POST[$param])){
if('ldap_agent_password' == $param) {
OCP\Config::setAppValue('user_ldap', $param, base64_encode($_POST[$param]));
+ } elseif('ldap_cache_ttl' == $param) {
+ if(OCP\Config::getAppValue('user_ldap', $param,'') != $_POST[$param]) {
+ $ldap = new \OCA\user_ldap\lib\Connection('user_ldap');
+ $ldap->clearCache();
+ OCP\Config::setAppValue('user_ldap', $param, $_POST[$param]);
+ }
} 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);
+ 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);
+ }
}
}
// fill template
$tmpl = new OCP\Template( 'user_ldap', 'settings');
foreach($params as $param){
- $value = htmlentities(OCP\Config::getAppValue('user_ldap', $param,''));
+ $value = OCP\Config::getAppValue('user_ldap', $param,'');
$tmpl->assign($param, $value);
}
@@ -57,5 +66,6 @@ $tmpl->assign( 'ldap_display_name', OCP\Config::getAppValue('user_ldap', 'ldap_d
$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'));
return $tmpl->fetchPage();
diff --git a/apps/user_ldap/templates/settings.php b/apps/user_ldap/templates/settings.php
index 31f453b5a5a..861c9ba6052 100644
--- a/apps/user_ldap/templates/settings.php
+++ b/apps/user_ldap/templates/settings.php
@@ -5,29 +5,30 @@
<li><a href="#ldapSettings-2">Advanced</a></li>
</ul>
<fieldset id="ldapSettings-1">
- <p><label for="ldap_host"><?php echo $l->t('Host');?><input type="text" id="ldap_host" name="ldap_host" value="<?php echo $_['ldap_host']; ?>"></label> <label for="ldap_base"><?php echo $l->t('Base');?></label><input type="text" id="ldap_base" name="ldap_base" value="<?php echo $_['ldap_base']; ?>" /></p>
- <p><label for="ldap_dn"><?php echo $l->t('Name');?></label><input type="text" id="ldap_dn" name="ldap_dn" value="<?php echo $_['ldap_dn']; ?>" />
- <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']; ?>" />
- <small><?php echo $l->t('Leave both empty for anonymous bind for search, then bind with users credentials.');?></small></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']; ?>" /><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']; ?>" /><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']; ?>" /><small><?php echo $l->t('without any placeholder, e.g. "objectClass=posixGroup".');?></small></p>
+ <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>
</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><input type="checkbox" id="ldap_tls" name="ldap_tls" value="1"<?php if ($_['ldap_tls']) echo ' checked'; ?>><label for="ldap_tls"><?php echo $l->t('Use TLS');?></label></p>
- <p><input type="checkbox" id="ldap_nocase" name="ldap_nocase" value="1"<?php if (isset($_['ldap_nocase']) && ($_['ldap_nocase'])) echo ' checked'; ?>><label for="ldap_nocase"><?php echo $l->t('Case insensitve LDAP server (Windows)');?></label></p>
- <p><label for="ldap_display_name"><?php echo $l->t('Display Name Field');?></label><input type="text" id="ldap_display_name" name="ldap_display_name" value="<?php echo $_['ldap_display_name']; ?>" />
- <small><?php echo $l->t('Currently the display name field needs to be the same you matched %%uid against in the filter above, because ownCloud doesn\'t distinguish between user id and user name.');?></small></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']; ?>" /></p>
- <p><label for="ldap_quota_attr">Quota Attribute</label><input type="text" id="ldap_quota_attr" name="ldap_quota_attr" value="<?php echo $_['ldap_quota_attr']; ?>" />
- <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']; ?>" />bytes</p>
- <p><label for="ldap_email_attr">Email Attribute</label><input type="text" id="ldap_email_attr" name="ldap_email_attr" value="<?php echo $_['ldap_email_attr']; ?>" /></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']; ?>" />
+ <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>
</fieldset>
- <input type="submit" value="Save" /> <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 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>
</div>
</form>
diff --git a/apps/user_ldap/tests/group_ldap.php b/apps/user_ldap/tests/group_ldap.php
index 2be6b46fb23..106459580fa 100644
--- a/apps/user_ldap/tests/group_ldap.php
+++ b/apps/user_ldap/tests/group_ldap.php
@@ -26,8 +26,8 @@ class Test_Group_Ldap extends UnitTestCase {
}
function testSingleBackend(){
- OC_Group::useBackend(new OC_GROUP_LDAP());
- $group_ldap = new OC_GROUP_LDAP();
+ OC_Group::useBackend(new OCA\user_ldap\GROUP_LDAP());
+ $group_ldap = new OCA\user_ldap\GROUP_LDAP();
$this->assertIsA(OC_Group::getGroups(),gettype(array()));
$this->assertIsA($group_ldap->getGroups(),gettype(array()));
diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php
index da99e167fd1..a97df7b4fd1 100644
--- a/apps/user_ldap/user_ldap.php
+++ b/apps/user_ldap/user_ldap.php
@@ -23,53 +23,36 @@
*
*/
-class OC_USER_LDAP extends OC_User_Backend {
+namespace OCA\user_ldap;
- // cached settings
- protected $ldapUserFilter;
- protected $ldapQuotaAttribute;
- protected $ldapQuotaDefault;
- protected $ldapEmailAttribute;
-
- // will be retrieved from LDAP server
- protected $ldap_dc = false;
-
- // cache getUsers()
- protected $_users = null;
-
- public function __construct() {
- $this->ldapUserFilter = OCP\Config::getAppValue('user_ldap', 'ldap_userlist_filter', '(objectClass=posixAccount)');
- $this->ldapQuotaAttribute = OCP\Config::getAppValue('user_ldap', 'ldap_quota_attr', '');
- $this->ldapQuotaDefault = OCP\Config::getAppValue('user_ldap', 'ldap_quota_def', '');
- $this->ldapEmailAttribute = OCP\Config::getAppValue('user_ldap', 'ldap_email_attr', '');
- }
+class USER_LDAP extends lib\Access implements \OCP\UserInterface {
private function updateQuota($dn) {
$quota = null;
- if(!empty($this->ldapQuotaDefault)) {
- $quota = $this->ldapQuotaDefault;
+ if(!empty($this->connection->ldapQuotaDefault)) {
+ $quota = $this->connection->ldapQuotaDefault;
}
- if(!empty($this->ldapQuotaAttribute)) {
- $aQuota = OC_LDAP::readAttribute($dn, $this->ldapQuotaAttribute);
+ if(!empty($this->connection->ldapQuotaAttribute)) {
+ $aQuota = $this->readAttribute($dn, $this->connection->ldapQuotaAttribute);
if($aQuota && (count($aQuota) > 0)) {
$quota = $aQuota[0];
}
}
if(!is_null($quota)) {
- OCP\Config::setUserValue(OC_LDAP::dn2username($dn), 'files', 'quota', OCP\Util::computerFileSize($quota));
+ \OCP\Config::setUserValue($this->dn2username($dn), 'files', 'quota', \OCP\Util::computerFileSize($quota));
}
}
private function updateEmail($dn) {
$email = null;
- if(!empty($this->ldapEmailAttribute)) {
- $aEmail = OC_LDAP::readAttribute($dn, $this->ldapEmailAttribute);
+ if(!empty($this->connection->ldapEmailAttribute)) {
+ $aEmail = $this->readAttribute($dn, $this->connection->ldapEmailAttribute);
if($aEmail && (count($aEmail) > 0)) {
$email = $aEmail[0];
}
- if(!is_null($email)){
- OCP\Config::setUserValue(OC_LDAP::dn2username($dn), 'settings', 'email', $email);
+ if(!is_null($email)) {
+ \OCP\Config::setUserValue($this->dn2username($dn), 'settings', 'email', $email);
}
}
}
@@ -84,26 +67,27 @@ class OC_USER_LDAP extends OC_User_Backend {
*/
public function checkPassword($uid, $password){
//find out dn of the user name
- $filter = str_replace('%uid', $uid, OC_LDAP::conf('ldapLoginFilter'));
- $ldap_users = OC_LDAP::fetchListOfUsers($filter, 'dn');
+ $filter = \OCP\Util::mb_str_replace('%uid', $uid, $this->connection->ldapLoginFilter, 'UTF-8');
+ $ldap_users = $this->fetchListOfUsers($filter, 'dn');
if(count($ldap_users) < 1) {
return false;
}
$dn = $ldap_users[0];
//are the credentials OK?
- if(!OC_LDAP::areCredentialsValid($dn, $password)) {
+ if(!$this->areCredentialsValid($dn, $password)) {
return false;
}
//do we have a username for him/her?
- $ocname = OC_LDAP::dn2username($dn);
+ $ocname = $this->dn2username($dn);
if($ocname){
//update some settings, if necessary
$this->updateQuota($dn);
$this->updateEmail($dn);
+ //give back the display name
return $ocname;
}
@@ -116,12 +100,25 @@ class OC_USER_LDAP extends OC_User_Backend {
*
* Get a list of all users.
*/
- public function getUsers(){
- if(is_null($this->_users)) {
- $ldap_users = OC_LDAP::fetchListOfUsers($this->ldapUserFilter, array(OC_LDAP::conf('ldapUserDisplayName'), 'dn'));
- $this->_users = OC_LDAP::ownCloudUserNames($ldap_users);
+ public function getUsers($search = '', $limit = 10, $offset = 0){
+ $ldap_users = $this->connection->getFromCache('getUsers');
+ if(is_null($ldap_users)) {
+ $ldap_users = $this->fetchListOfUsers($this->connection->ldapUserFilter, array($this->connection->ldapUserDisplayName, 'dn'));
+ $ldap_users = $this->ownCloudUserNames($ldap_users);
+ $this->connection->writeToCache('getUsers', $ldap_users);
+ }
+ $this->userSearch = $search;
+ if(!empty($this->userSearch)) {
+ $ldap_users = array_filter($ldap_users, array($this, 'userMatchesFilter'));
}
- return $this->_users;
+ if($limit = -1) {
+ $limit = null;
+ }
+ return array_slice($ldap_users, $offset, $limit);
+ }
+
+ public function userMatchesFilter($user) {
+ return (strripos($user, $this->userSearch) !== false);
}
/**
@@ -130,19 +127,49 @@ class OC_USER_LDAP extends OC_User_Backend {
* @return boolean
*/
public function userExists($uid){
+ if($this->connection->isCached('userExists'.$uid)) {
+ return $this->connection->getFromCache('userExists'.$uid);
+ }
+
//getting dn, if false the user does not exist. If dn, he may be mapped only, requires more checking.
- $dn = OC_LDAP::username2dn($uid);
+ $dn = $this->username2dn($uid);
if(!$dn) {
+ $this->connection->writeToCache('userExists'.$uid, false);
return false;
}
- //if user really still exists, we will be able to read his cn
- $cn = OC_LDAP::readAttribute($dn, 'cn');
- if(!$cn || empty($cn)) {
+ //if user really still exists, we will be able to read his objectclass
+ $objcs = $this->readAttribute($dn, 'objectclass');
+ if(!$objcs || empty($objcs)) {
+ $this->connection->writeToCache('userExists'.$uid, false);
return false;
}
+ $this->connection->writeToCache('userExists'.$uid, true);
return true;
}
+ /**
+ * @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;
+ }
+
+ /**
+ * @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) {
+ return (bool)(OC_USER_BACKEND_CHECK_PASSWORD & $actions);
+ }
+
} \ No newline at end of file
diff --git a/apps/user_migrate/appinfo/app.php b/apps/user_migrate/appinfo/app.php
index 9d314b59ce7..366c4004932 100644
--- a/apps/user_migrate/appinfo/app.php
+++ b/apps/user_migrate/appinfo/app.php
@@ -31,4 +31,3 @@ $entry = array(
'href' => OCP\Util::linkTo( "user_migrate", "admin.php" ),
'name' => 'Import'
);
-?>
diff --git a/apps/user_migrate/l10n/.gitkeep b/apps/user_migrate/l10n/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/apps/user_migrate/l10n/.gitkeep
diff --git a/apps/user_migrate/l10n/ca.php b/apps/user_migrate/l10n/ca.php
new file mode 100644
index 00000000000..6e423c01b0b
--- /dev/null
+++ b/apps/user_migrate/l10n/ca.php
@@ -0,0 +1,10 @@
+<?php $TRANSLATIONS = array(
+"Export" => "Exporta",
+"Something went wrong while the export file was being generated" => "Alguna cosa ha anat malament en generar el fitxer d'exportació",
+"An error has occurred" => "S'ha produït un error",
+"Export your user account" => "Exportar el compte d'usuari",
+"This will create a compressed file that contains your ownCloud account." => "Això crearà un fitxer comprimit que conté el vostre compte ownCloud.",
+"Import user account" => "Importar el compte d'usuari",
+"ownCloud User Zip" => "zip d'usuari ownCloud",
+"Import" => "Importa"
+);
diff --git a/apps/user_migrate/l10n/cs_CZ.php b/apps/user_migrate/l10n/cs_CZ.php
new file mode 100644
index 00000000000..81a5a45d978
--- /dev/null
+++ b/apps/user_migrate/l10n/cs_CZ.php
@@ -0,0 +1,10 @@
+<?php $TRANSLATIONS = array(
+"Export" => "Export",
+"Something went wrong while the export file was being generated" => "Během vytváření souboru exportu došlo k chybě",
+"An error has occurred" => "Nastala chyba",
+"Export your user account" => "Export VaÅ¡eho uživatelského úÄtu",
+"This will create a compressed file that contains your ownCloud account." => "Bude vytvoÅ™en komprimovaný soubor, obsahující Váš ownCloud úÄet.",
+"Import user account" => "Import uživatelského úÄtu",
+"ownCloud User Zip" => "Zip soubor uživatele ownCloud",
+"Import" => "Import"
+);
diff --git a/apps/user_migrate/l10n/de.php b/apps/user_migrate/l10n/de.php
new file mode 100644
index 00000000000..928a211dd4e
--- /dev/null
+++ b/apps/user_migrate/l10n/de.php
@@ -0,0 +1,10 @@
+<?php $TRANSLATIONS = array(
+"Export" => "Export",
+"Something went wrong while the export file was being generated" => "Beim Export der Datei ist etwas schiefgegangen.",
+"An error has occurred" => "Es ist ein Fehler aufgetreten.",
+"Export your user account" => "Ihr Konto exportieren",
+"This will create a compressed file that contains your ownCloud account." => "Eine komprimierte Datei wird erzeugt, die Ihr ownCloud-Konto enthält.",
+"Import user account" => "Konto importieren",
+"ownCloud User Zip" => "Zip-Archiv mit Benutzerdaten",
+"Import" => "Importieren"
+);
diff --git a/apps/user_migrate/l10n/el.php b/apps/user_migrate/l10n/el.php
new file mode 100644
index 00000000000..5b57e69a637
--- /dev/null
+++ b/apps/user_migrate/l10n/el.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Export" => "Εξαγωγή",
+"An error has occurred" => "ΠαÏουσιάστηκε σφάλμα",
+"Export your user account" => "Εξαγωγή του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï Ï‡Ïήστη σας",
+"This will create a compressed file that contains your ownCloud account." => "Αυτό θα δημιουÏγήσει ένα συμπιεσμένο αÏχείο που θα πεÏιέχει τον λογαÏιασμό σας ownCloud.",
+"Import user account" => "Εισαγωγή λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï Ï‡Ïήστη",
+"Import" => "Εισαγωγή"
+);
diff --git a/apps/user_migrate/l10n/eo.php b/apps/user_migrate/l10n/eo.php
new file mode 100644
index 00000000000..ca918061691
--- /dev/null
+++ b/apps/user_migrate/l10n/eo.php
@@ -0,0 +1,10 @@
+<?php $TRANSLATIONS = array(
+"Export" => "Malenporti",
+"Something went wrong while the export file was being generated" => "Io malsukcesis dum la enportota dosiero generiÄis",
+"An error has occurred" => "Eraro okazis",
+"Export your user account" => "Malenporti vian uzantokonton",
+"This will create a compressed file that contains your ownCloud account." => "Ĉi tio kreos densigitan dosieron, kiu enhavas vian konton de ownCloud.",
+"Import user account" => "Enporti uzantokonton",
+"ownCloud User Zip" => "ZIP-dosiero de uzanto de ownCloud",
+"Import" => "Enporti"
+);
diff --git a/apps/user_migrate/l10n/es.php b/apps/user_migrate/l10n/es.php
new file mode 100644
index 00000000000..6a0551fe235
--- /dev/null
+++ b/apps/user_migrate/l10n/es.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Export" => "Exportar",
+"ownCloud User Zip" => "Zip de usuario de ownCloud",
+"Import" => "Importar"
+);
diff --git a/apps/user_migrate/l10n/fi_FI.php b/apps/user_migrate/l10n/fi_FI.php
new file mode 100644
index 00000000000..2616bee6f2a
--- /dev/null
+++ b/apps/user_migrate/l10n/fi_FI.php
@@ -0,0 +1,9 @@
+<?php $TRANSLATIONS = array(
+"Export" => "Vie",
+"Something went wrong while the export file was being generated" => "Jokin meni pieleen vientiä suorittaessa",
+"An error has occurred" => "Tapahtui virhe",
+"Export your user account" => "Vie käyttäjätilisi",
+"This will create a compressed file that contains your ownCloud account." => "Tämä luo ownCloud-käyttäjätilisi sisältävän pakatun tiedoston.",
+"Import user account" => "Tuo käyttäjätili",
+"Import" => "Tuo"
+);
diff --git a/apps/user_migrate/l10n/fr.php b/apps/user_migrate/l10n/fr.php
new file mode 100644
index 00000000000..70ab2f8f22d
--- /dev/null
+++ b/apps/user_migrate/l10n/fr.php
@@ -0,0 +1,10 @@
+<?php $TRANSLATIONS = array(
+"Export" => "Exporter",
+"Something went wrong while the export file was being generated" => "Une erreur s'est produite pendant la génération du fichier d'export",
+"An error has occurred" => "Une erreur s'est produite",
+"Export your user account" => "Exportez votre compte utilisateur",
+"This will create a compressed file that contains your ownCloud account." => "Cette action va créer une archive compressée qui contiendra les données de votre compte ownCloud.",
+"Import user account" => "Importer un compte utilisateur",
+"ownCloud User Zip" => "Archive Zip de l'utilisateur",
+"Import" => "Importer"
+);
diff --git a/apps/user_migrate/l10n/it.php b/apps/user_migrate/l10n/it.php
new file mode 100644
index 00000000000..f3eeb15dab5
--- /dev/null
+++ b/apps/user_migrate/l10n/it.php
@@ -0,0 +1,10 @@
+<?php $TRANSLATIONS = array(
+"Export" => "Esporta",
+"Something went wrong while the export file was being generated" => "Si è verificato un errore durante la creazione del file di esportazione",
+"An error has occurred" => "Si è verificato un errore",
+"Export your user account" => "Esporta il tuo account utente",
+"This will create a compressed file that contains your ownCloud account." => "Questa operazione creerà un file compresso che contiene il tuo account ownCloud.",
+"Import user account" => "Importa account utente",
+"ownCloud User Zip" => "Zip account utente",
+"Import" => "Importa"
+);
diff --git a/apps/user_migrate/l10n/ja_JP.php b/apps/user_migrate/l10n/ja_JP.php
new file mode 100644
index 00000000000..86c66e6319c
--- /dev/null
+++ b/apps/user_migrate/l10n/ja_JP.php
@@ -0,0 +1,10 @@
+<?php $TRANSLATIONS = array(
+"Export" => "エクスãƒãƒ¼ãƒˆ",
+"Something went wrong while the export file was being generated" => "エクスãƒãƒ¼ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã®ç”Ÿæˆæ™‚ã«ä½•ã‹ä¸å…·åˆãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚",
+"An error has occurred" => "エラーãŒç™ºç”Ÿã—ã¾ã—ãŸ",
+"Export your user account" => "ユーザアカウントã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ",
+"This will create a compressed file that contains your ownCloud account." => "ã‚ãªãŸã®ownCloudアカウントをå«ã‚€åœ§ç¸®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã—ã¾ã™ã€‚",
+"Import user account" => "ユーザアカウントをインãƒãƒ¼ãƒˆ",
+"ownCloud User Zip" => "ownCloudユーザZip",
+"Import" => "インãƒãƒ¼ãƒˆ"
+);
diff --git a/apps/user_migrate/l10n/lt_LT.php b/apps/user_migrate/l10n/lt_LT.php
new file mode 100644
index 00000000000..20add8037bf
--- /dev/null
+++ b/apps/user_migrate/l10n/lt_LT.php
@@ -0,0 +1,10 @@
+<?php $TRANSLATIONS = array(
+"Export" => "Eksportuoti",
+"Something went wrong while the export file was being generated" => "Įvyko klaida kuriant eksportuojamą failą",
+"An error has occurred" => "Įvyko klaida",
+"Export your user account" => "Eksportuoti jūsų vartotojo paskyrą",
+"This will create a compressed file that contains your ownCloud account." => "Bus sukurtas suglaudintas failas su jūsų ownCloud vartotojo paskyra.",
+"Import user account" => "Importuoti vartotojo paskyrÄ…",
+"ownCloud User Zip" => "ownCloud vartotojo paskyros Zip archyvas",
+"Import" => "Importuoti"
+);
diff --git a/apps/user_migrate/l10n/pl.php b/apps/user_migrate/l10n/pl.php
new file mode 100644
index 00000000000..c3a6332578e
--- /dev/null
+++ b/apps/user_migrate/l10n/pl.php
@@ -0,0 +1,10 @@
+<?php $TRANSLATIONS = array(
+"Export" => "Eksport",
+"Something went wrong while the export file was being generated" => "Coś poszło źle, podczas generowania pliku eksportu",
+"An error has occurred" => "Wystąpił błąd",
+"Export your user account" => "Eksportuj konto użytkownika",
+"This will create a compressed file that contains your ownCloud account." => "Spowoduje to utworzenie pliku skompresowanego, który zawiera konto ownCloud.",
+"Import user account" => "Importuj konto użytkownika",
+"ownCloud User Zip" => "paczka Zip użytkownika ownCloud",
+"Import" => "Importuj"
+);
diff --git a/apps/user_migrate/l10n/sl.php b/apps/user_migrate/l10n/sl.php
new file mode 100644
index 00000000000..c14bca0f709
--- /dev/null
+++ b/apps/user_migrate/l10n/sl.php
@@ -0,0 +1,10 @@
+<?php $TRANSLATIONS = array(
+"Export" => "Izvozi",
+"Something went wrong while the export file was being generated" => "Med ustvarjanjem datoteke za izvoz je prišlo do napake",
+"An error has occurred" => "Prišlo je do napake",
+"Export your user account" => "Izvozi vaÅ¡ uporabniÅ¡ki raÄun",
+"This will create a compressed file that contains your ownCloud account." => "Ustvarjena bo stisnjena datoteka z vaÅ¡im ownCloud raÄunom.",
+"Import user account" => "Uvozi uporabniÅ¡ki raÄun",
+"ownCloud User Zip" => "Zip datoteka ownCloud uporabnika",
+"Import" => "Uvozi"
+);
diff --git a/apps/user_migrate/l10n/sv.php b/apps/user_migrate/l10n/sv.php
new file mode 100644
index 00000000000..98e649632b8
--- /dev/null
+++ b/apps/user_migrate/l10n/sv.php
@@ -0,0 +1,10 @@
+<?php $TRANSLATIONS = array(
+"Export" => "Exportera",
+"Something went wrong while the export file was being generated" => "Något gick fel när exportfilen skulle genereras",
+"An error has occurred" => "Ett fel har uppstått",
+"Export your user account" => "Exportera ditt användarkonto",
+"This will create a compressed file that contains your ownCloud account." => "Detta vill skapa en komprimerad fil som innehåller ditt ownCloud-konto.",
+"Import user account" => "Importera ett användarkonto",
+"ownCloud User Zip" => "ownCloud Zip-fil",
+"Import" => "Importera"
+);
diff --git a/apps/user_migrate/l10n/th_TH.php b/apps/user_migrate/l10n/th_TH.php
new file mode 100644
index 00000000000..d2c36bb4edd
--- /dev/null
+++ b/apps/user_migrate/l10n/th_TH.php
@@ -0,0 +1,10 @@
+<?php $TRANSLATIONS = array(
+"Export" => "ส่งออà¸",
+"Something went wrong while the export file was being generated" => "เà¸à¸´à¸”ข้อผิดพลาดบางประà¸à¸²à¸£à¹ƒà¸™à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡à¸à¸²à¸£à¸ªà¹ˆà¸‡à¸­à¸­à¸à¹„ฟล์",
+"An error has occurred" => "เà¸à¸´à¸”ข้อผิดพลาดบางประà¸à¸²à¸£",
+"Export your user account" => "ส่งออà¸à¸šà¸±à¸à¸Šà¸µà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸‚องคุณ",
+"This will create a compressed file that contains your ownCloud account." => "ส่วนนี้จะเป็นà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹„ฟล์บีบอัดที่บรรจุข้อมูลบัà¸à¸Šà¸µà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ ownCloud ของคุณ",
+"Import user account" => "นำเข้าบัà¸à¸Šà¸µà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™",
+"ownCloud User Zip" => "ไฟล์ Zip ผู้ใช้งาน ownCloud",
+"Import" => "นำเข้า"
+);
diff --git a/apps/user_migrate/templates/settings.php b/apps/user_migrate/templates/settings.php
index 1718abe9e0f..d6f3e2f8f6b 100644
--- a/apps/user_migrate/templates/settings.php
+++ b/apps/user_migrate/templates/settings.php
@@ -2,7 +2,7 @@
<legend><strong><?php echo $l->t('Export your user account');?></strong></legend>
<p><?php echo $l->t('This will create a compressed file that contains your ownCloud account.');?>
</p>
- <button id="exportbtn">Export<img style="display: none;" class="loading" src="<?php echo OCP\Util::linkTo('core', 'img/loading.gif'); ?>" /></button>
+ <button id="exportbtn">Export<img style="display: none;" class="loading" src="<?php echo OCP\Util::imagePath('core', 'loading.gif'); ?>" /></button>
</fieldset>
<form id="import" action="#" method="post" enctype="multipart/form-data">
<fieldset class="personalblock">
@@ -12,7 +12,7 @@
<?php } ?>
<legend><strong><?php echo $l->t('Import user account');?></strong></legend>
</p>
- <p><input type="file" id="owncloud_import" name="owncloud_import" style="width:180px;"><label for="owncloud_import"> <?php echo $l->t('ownCloud User Zip');?></label>
+ <p><input type="file" id="owncloud_import" name="owncloud_import" style="width:280px;"><label for="owncloud_import"> <?php echo $l->t('ownCloud User Zip');?></label>
</p>
<input type="submit" name="user_import" value="<?php echo $l->t('Import'); ?>" />
</fieldset>
diff --git a/apps/user_openid/appinfo/app.php b/apps/user_openid/appinfo/app.php
index c683254101f..fe57b189fac 100644
--- a/apps/user_openid/appinfo/app.php
+++ b/apps/user_openid/appinfo/app.php
@@ -27,7 +27,7 @@ OC_User::useBackend('openid');
//check for results from openid requests
if(isset($_GET['openid_mode']) and $_GET['openid_mode'] == 'id_res'){
OCP\Util::writeLog('user_openid','openid retured',OCP\Util::DEBUG);
- $openid = new SimpleOpenID;
+ $openid = new SimpleOpenID();
$openid->SetIdentity($_GET['openid_identity']);
$openid_validation_result = $openid->ValidateWithServer();
if ($openid_validation_result == true){ // OK HERE KEY IS VALID
@@ -50,5 +50,3 @@ if(isset($_GET['openid_mode']) and $_GET['openid_mode'] == 'id_res'){
OCP\Util::writeLog('user_openid','USER CANCELED REQUEST',OCP\Util::DEBUG);
return false;
}
-
-?>
diff --git a/apps/user_openid/appinfo/info.xml b/apps/user_openid/appinfo/info.xml
index 268af239738..7aae4271fa8 100644
--- a/apps/user_openid/appinfo/info.xml
+++ b/apps/user_openid/appinfo/info.xml
@@ -8,6 +8,7 @@
<require>4</require>
<shipped>true</shipped>
<types>
+ <prelogin/>
<authentication/>
</types>
</info>
diff --git a/apps/user_openid/appinfo/version b/apps/user_openid/appinfo/version
index 6da28dde76d..d917d3e26ad 100644
--- a/apps/user_openid/appinfo/version
+++ b/apps/user_openid/appinfo/version
@@ -1 +1 @@
-0.1.1 \ No newline at end of file
+0.1.2
diff --git a/apps/user_openid/l10n/.gitkeep b/apps/user_openid/l10n/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/apps/user_openid/l10n/.gitkeep
diff --git a/apps/user_openid/l10n/ca.php b/apps/user_openid/l10n/ca.php
new file mode 100644
index 00000000000..d203bfb4d9d
--- /dev/null
+++ b/apps/user_openid/l10n/ca.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"This is an OpenID server endpoint. For more information, see " => "Això és un punt final de servidor OpenID. Per més informació consulteu",
+"Identity: <b>" => "Identitat:<b>",
+"Realm: <b>" => "Domini:<b>",
+"User: <b>" => "Usuari:<b>",
+"Login" => "Inici de sessió",
+"Error: <b>No user Selected" => "Error:<b>No heu seleccionat cap usuari",
+"you can authenticate to other sites with this address" => "podeu autenticar altres llocs web amb aquesta adreça",
+"Authorized OpenID provider" => "Servidor OpenID autoritzat",
+"Your address at Wordpress, Identi.ca, &hellip;" => "La vostra adreça a Wordpress, Identi.ca &hellip;"
+);
diff --git a/apps/user_openid/l10n/cs_CZ.php b/apps/user_openid/l10n/cs_CZ.php
new file mode 100644
index 00000000000..9c041a89a68
--- /dev/null
+++ b/apps/user_openid/l10n/cs_CZ.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"This is an OpenID server endpoint. For more information, see " => "Toto je OpenID server endpoint. Více informací na",
+"Identity: <b>" => "Identita: <b>",
+"Realm: <b>" => "Oblast: <b>",
+"User: <b>" => "Uživatel: <b>",
+"Login" => "Login",
+"Error: <b>No user Selected" => "Chyba: <b>Uživatel není zvolen",
+"you can authenticate to other sites with this address" => "s touto adresou se můžete autrorizovat na další strany",
+"Authorized OpenID provider" => "Autorizovaný OpenID poskytovatel",
+"Your address at Wordpress, Identi.ca, &hellip;" => "Vaše adresa na Wordpressu, Identi.ca, &hellip;"
+);
diff --git a/apps/user_openid/l10n/de.php b/apps/user_openid/l10n/de.php
new file mode 100644
index 00000000000..7bfe678574c
--- /dev/null
+++ b/apps/user_openid/l10n/de.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"This is an OpenID server endpoint. For more information, see " => "Dies ist ein OpenID-Server-Endpunkt. Weitere Informationen finden Sie unter:",
+"Identity: <b>" => "Identität: <b>",
+"Realm: <b>" => "Bereich: <b>",
+"User: <b>" => "Benutzer: <b>",
+"Login" => "Anmelden",
+"Error: <b>No user Selected" => "Fehler: <b> Kein Benutzer ausgewählt",
+"you can authenticate to other sites with this address" => "Sie können sich auf anderen Seiten mit dieser Adresse authentifizieren.",
+"Authorized OpenID provider" => "Authorisierter OpenID-Anbieter",
+"Your address at Wordpress, Identi.ca, &hellip;" => "Ihre Adresse bei Wordpress, Identi.ca, &hellip;"
+);
diff --git a/apps/user_openid/l10n/el.php b/apps/user_openid/l10n/el.php
new file mode 100644
index 00000000000..a80f5bdb246
--- /dev/null
+++ b/apps/user_openid/l10n/el.php
@@ -0,0 +1,8 @@
+<?php $TRANSLATIONS = array(
+"Identity: <b>" => "Ταυτότητα: <b>",
+"User: <b>" => "ΧÏήστης: <b>",
+"Login" => "ΣÏνδεση",
+"Error: <b>No user Selected" => "Σφάλμα: <b> Δεν έχει επιλεχθεί κάποιος χÏήστης",
+"Authorized OpenID provider" => "Εξουσιοδοτημένος παÏοχέας OpenID",
+"Your address at Wordpress, Identi.ca, &hellip;" => "Η διευθυνσή σας σε Wordpress, Identi.ca, &hellip;"
+);
diff --git a/apps/user_openid/l10n/eo.php b/apps/user_openid/l10n/eo.php
new file mode 100644
index 00000000000..665d1990949
--- /dev/null
+++ b/apps/user_openid/l10n/eo.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"This is an OpenID server endpoint. For more information, see " => "Ĉi tio estas finpunkto de OpenID-servilo. Por pli da informo, vidu",
+"Identity: <b>" => "Idento: <b>",
+"Realm: <b>" => "Regno: <b>",
+"User: <b>" => "Uzanto: <b>",
+"Login" => "Ensaluti",
+"Error: <b>No user Selected" => "Eraro: <b>neniu uzanto estas elektita",
+"you can authenticate to other sites with this address" => "Vi povas ensaluti en aliaj ejoj per tiu ĉi adreso",
+"Authorized OpenID provider" => "Rajtigita OpenID-provizanto",
+"Your address at Wordpress, Identi.ca, &hellip;" => "Via adreso ĉe Wordpress, Identi.ca&hellip;"
+);
diff --git a/apps/user_openid/l10n/es.php b/apps/user_openid/l10n/es.php
new file mode 100644
index 00000000000..048336d3dba
--- /dev/null
+++ b/apps/user_openid/l10n/es.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"Identity: <b>" => "Identidad: <b>",
+"User: <b>" => "Usuario: <b>",
+"Login" => "Iniciar sesión"
+);
diff --git a/apps/user_openid/l10n/et_EE.php b/apps/user_openid/l10n/et_EE.php
new file mode 100644
index 00000000000..f04bcafb249
--- /dev/null
+++ b/apps/user_openid/l10n/et_EE.php
@@ -0,0 +1,5 @@
+<?php $TRANSLATIONS = array(
+"This is an OpenID server endpoint. For more information, see " => "See on OpenID serveri lõpp-punkt. Lisainfot vaata",
+"Identity: <b>" => "Identiteet: <b>",
+"Realm: <b>" => "Tsoon: <b>"
+);
diff --git a/apps/user_openid/l10n/fi_FI.php b/apps/user_openid/l10n/fi_FI.php
new file mode 100644
index 00000000000..1cde4ae6600
--- /dev/null
+++ b/apps/user_openid/l10n/fi_FI.php
@@ -0,0 +1,7 @@
+<?php $TRANSLATIONS = array(
+"Identity: <b>" => "Identiteetti: <b>",
+"Realm: <b>" => "Alue: <b>",
+"User: <b>" => "Käyttäjä: <b>",
+"Login" => "Kirjaudu",
+"Error: <b>No user Selected" => "Virhe: <b>Käyttäjää ei valittu"
+);
diff --git a/apps/user_openid/l10n/fr.php b/apps/user_openid/l10n/fr.php
new file mode 100644
index 00000000000..ec3d00853d9
--- /dev/null
+++ b/apps/user_openid/l10n/fr.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"This is an OpenID server endpoint. For more information, see " => "Ce serveur est un point d'accès OpenID. Pour plus d'informations, veuillez consulter",
+"Identity: <b>" => "Identité : <b>",
+"Realm: <b>" => "Domaine : <b>",
+"User: <b>" => "Utilisateur : <b>",
+"Login" => "Connexion",
+"Error: <b>No user Selected" => "Erreur : <b>Aucun nom d'utilisateur n'a été saisi",
+"you can authenticate to other sites with this address" => "vous pouvez vous authentifier sur d'autres sites grâce à cette adresse",
+"Authorized OpenID provider" => "Fournisseur d'identité OpenID autorisé",
+"Your address at Wordpress, Identi.ca, &hellip;" => "Votre adresse Wordpress, Identi.ca, &hellip;"
+);
diff --git a/apps/user_openid/l10n/it.php b/apps/user_openid/l10n/it.php
new file mode 100644
index 00000000000..0a9dd951b5d
--- /dev/null
+++ b/apps/user_openid/l10n/it.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"This is an OpenID server endpoint. For more information, see " => "Questo è un server OpenID. Per ulteriori informazioni, vedi ",
+"Identity: <b>" => "Identità: <b>",
+"Realm: <b>" => "Dominio: <b>",
+"User: <b>" => "Utente: <b>",
+"Login" => "Accesso",
+"Error: <b>No user Selected" => "Errore: <b>nessun utente selezionato",
+"you can authenticate to other sites with this address" => "puoi autenticarti ad altri siti con questo indirizzo",
+"Authorized OpenID provider" => "Fornitore OpenID autorizzato",
+"Your address at Wordpress, Identi.ca, &hellip;" => "Il tuo indirizzo su Wordpress, Identi.ca, &hellip;"
+);
diff --git a/apps/user_openid/l10n/ja_JP.php b/apps/user_openid/l10n/ja_JP.php
new file mode 100644
index 00000000000..12a2692cb67
--- /dev/null
+++ b/apps/user_openid/l10n/ja_JP.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"This is an OpenID server endpoint. For more information, see " => "ã“ã‚Œã¯OpenIDサーãƒã®ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã§ã™ã€‚詳細ã¯ä¸‹è¨˜ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„。",
+"Identity: <b>" => "識別å­: <b>",
+"Realm: <b>" => "レルム: <b>",
+"User: <b>" => "ユーザ: <b>",
+"Login" => "ログイン",
+"Error: <b>No user Selected" => "エラー: <b>ユーザãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“",
+"you can authenticate to other sites with this address" => "ä»–ã®ã‚µã‚¤ãƒˆã«ã“ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã§èªè¨¼ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™",
+"Authorized OpenID provider" => "èªè¨¼ã•ã‚ŒãŸOpenIDプロãƒã‚¤ãƒ€",
+"Your address at Wordpress, Identi.ca, &hellip;" => "Wordpressã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã€Identi.caã€&hellip;"
+);
diff --git a/apps/user_openid/l10n/pl.php b/apps/user_openid/l10n/pl.php
new file mode 100644
index 00000000000..c9572851e39
--- /dev/null
+++ b/apps/user_openid/l10n/pl.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"This is an OpenID server endpoint. For more information, see " => "To jest punkt końcowy serwera OpenID. Aby uzyskać więcej informacji zobacz",
+"Identity: <b>" => "Tożsamość: <b>",
+"Realm: <b>" => "Obszar: <b>",
+"User: <b>" => "Użytkownik: <b>",
+"Login" => "Login",
+"Error: <b>No user Selected" => "Błąd:<b>Nie wybrano użytkownika",
+"you can authenticate to other sites with this address" => "można uwierzytelniać do innych witryn z tego adresu",
+"Authorized OpenID provider" => "Autoryzowani dostawcy OpenID",
+"Your address at Wordpress, Identi.ca, &hellip;" => "Twój adres na Wordpress, Identi.ca, &hellip;"
+);
diff --git a/apps/user_openid/l10n/sl.php b/apps/user_openid/l10n/sl.php
new file mode 100644
index 00000000000..0464214a427
--- /dev/null
+++ b/apps/user_openid/l10n/sl.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"This is an OpenID server endpoint. For more information, see " => "To je OpenID strežniÅ¡ka konÄna toÄka. Za veÄ informacij si oglejte",
+"Identity: <b>" => "Identiteta: <b>",
+"Realm: <b>" => "PodroÄje: <b>",
+"User: <b>" => "Uporabnik:",
+"Login" => "Prijava",
+"Error: <b>No user Selected" => "Napaka: <b>Uporabnik ni bil izbran",
+"you can authenticate to other sites with this address" => "s tem naslovom se lahko overite tudi na drugih straneh",
+"Authorized OpenID provider" => "Odobren ponudnik OpenID",
+"Your address at Wordpress, Identi.ca, &hellip;" => "Vaš naslov pri Wordpress, Identi.ca, &hellip;"
+);
diff --git a/apps/user_openid/l10n/sv.php b/apps/user_openid/l10n/sv.php
new file mode 100644
index 00000000000..fb2c4e2ff7e
--- /dev/null
+++ b/apps/user_openid/l10n/sv.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"This is an OpenID server endpoint. For more information, see " => "Detta är en OpenID-server slutpunkt. För mer information, se",
+"Identity: <b>" => "Identitet: <b>",
+"Realm: <b>" => "Realm: <b>",
+"User: <b>" => "Användare: <b>",
+"Login" => "Logga in",
+"Error: <b>No user Selected" => "Fel: <b>Ingen användare vald",
+"you can authenticate to other sites with this address" => "du kan autentisera till andra webbplatser med denna adress",
+"Authorized OpenID provider" => "Godkänd openID leverantör",
+"Your address at Wordpress, Identi.ca, &hellip;" => "Din adress på Wordpress, Identi.ca, &hellip;"
+);
diff --git a/apps/user_openid/l10n/th_TH.php b/apps/user_openid/l10n/th_TH.php
new file mode 100644
index 00000000000..fbf0bbc60a5
--- /dev/null
+++ b/apps/user_openid/l10n/th_TH.php
@@ -0,0 +1,11 @@
+<?php $TRANSLATIONS = array(
+"This is an OpenID server endpoint. For more information, see " => "นี่คือปลายทางของเซิร์ฟเวอร์ OpenID สำหรับรายละเอียดเพิ่มเติม, à¸à¸£à¸¸à¸“าดูที่",
+"Identity: <b>" => "ข้อมูลประจำตัว <b>",
+"Realm: <b>" => "ขอบเขตพื้นที่ <b>",
+"User: <b>" => "ผู้ใช้งาน: <b>",
+"Login" => "เข้าสู่ระบบ",
+"Error: <b>No user Selected" => "พบข้อผิดพลาด <b> ยังไม่ได้เลือà¸à¸Šà¸·à¹ˆà¸­à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™",
+"you can authenticate to other sites with this address" => "คุณสามารถได้รับสิทธิ์เพื่อเข้าใช้งานเว็บไซต์อื่นๆโดยใช้ที่อยู่นี้",
+"Authorized OpenID provider" => "ผู้ให้บริà¸à¸²à¸£ OpenID ที่ได้รับอนุà¸à¸²à¸•",
+"Your address at Wordpress, Identi.ca, &hellip;" => "ที่อยู่ของคุณที่ Wordpress, Identi.ca, &hellip;"
+);
diff --git a/apps/user_openid/user.php b/apps/user_openid/user.php
index 392424795f8..88571ba618e 100644
--- a/apps/user_openid/user.php
+++ b/apps/user_openid/user.php
@@ -44,7 +44,4 @@ if(!OCP\User::userExists($USERNAME)){
}
$IDENTITY=OCP\Util::linkToAbsolute( "user_openid", "user.php" ).'/'.$USERNAME;
-require_once 'phpmyid.php';
-
-
-?>
+require_once 'openid/phpmyid.php';
diff --git a/apps/user_openid/user_openid.php b/apps/user_openid/user_openid.php
index 8fb694f75c6..9654001cbc5 100644
--- a/apps/user_openid/user_openid.php
+++ b/apps/user_openid/user_openid.php
@@ -21,10 +21,10 @@
*
*/
-require_once('class.openid.v3.php');
+require_once('openid/class.openid.v3.php');
/**
- * Class for user management in a SQL Database (e.g. MySQL, SQLite)
+ * Class for user OpenId backend
*/
class OC_USER_OPENID extends OC_User_Backend {
/**
@@ -37,7 +37,7 @@ class OC_USER_OPENID extends OC_User_Backend {
*/
public function checkPassword( $uid, $password ){
// Get identity from user and redirect browser to OpenID Server
- $openid = new SimpleOpenID;
+ $openid = new SimpleOpenID();
$openid->SetIdentity($uid);
$openid->SetTrustRoot('http://' . OCP\Util::getServerHost());
if ($openid->GetOpenIDServer()){
@@ -63,7 +63,3 @@ class OC_USER_OPENID extends OC_User_Backend {
}
}
}
-
-
-
-?>
diff --git a/apps/user_webfinger/.htaccess b/apps/user_webfinger/.htaccess
new file mode 100644
index 00000000000..1b13cf788ff
--- /dev/null
+++ b/apps/user_webfinger/.htaccess
@@ -0,0 +1,5 @@
+<IfModule mod_rewrite.c>
+RewriteEngine on
+RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
+RewriteRule ^host-meta host-meta.php [QSA,L]
+</IfModule>
diff --git a/apps/user_webfinger/appinfo/app.php b/apps/user_webfinger/appinfo/app.php
index a45efd96a46..b3d9bbc7f37 100644
--- a/apps/user_webfinger/appinfo/app.php
+++ b/apps/user_webfinger/appinfo/app.php
@@ -1,7 +1 @@
<?php
-OCP\App::register( array(
- 'order' => 11,
- 'id' => 'user_webfinger',
- 'name' => 'Webfinger' ));
-OCP\CONFIG::setAppValue('core', 'public_host-meta', '/apps/user_webfinger/host-meta.php');
-OCP\CONFIG::setAppValue('core', 'public_webfinger', '/apps/user_webfinger/webfinger.php');
diff --git a/apps/user_webfinger/appinfo/info.xml b/apps/user_webfinger/appinfo/info.xml
index 4e28814a26c..f74e5d3f93a 100644
--- a/apps/user_webfinger/appinfo/info.xml
+++ b/apps/user_webfinger/appinfo/info.xml
@@ -7,4 +7,8 @@
<author>Michiel de Jong, Florian Hülsmann</author>
<require>4</require>
<shipped>true</shipped>
+ <public>
+ <host-meta>host-meta.php</host-meta>
+ <webfinger>webfinger.php</webfinger>
+ </public>
</info>
diff --git a/apps/user_webfinger/appinfo/version b/apps/user_webfinger/appinfo/version
index 1d71ef97443..a2268e2de44 100644
--- a/apps/user_webfinger/appinfo/version
+++ b/apps/user_webfinger/appinfo/version
@@ -1 +1 @@
-0.3 \ No newline at end of file
+0.3.1 \ No newline at end of file
diff --git a/apps/user_webfinger/host-meta.php b/apps/user_webfinger/host-meta.php
index a4f494ce837..6f6ac46eb91 100644
--- a/apps/user_webfinger/host-meta.php
+++ b/apps/user_webfinger/host-meta.php
@@ -3,12 +3,28 @@ if (!OCP\App::isEnabled("user_webfinger")) {
return;
}
+if(class_exists('OC')){
+ $WEBROOT=OC::$WEBROOT;
+}else{//not called trough remote.php try to guess the webroot the best we can from here
+ // calculate the root directories
+ $SERVERROOT=str_replace("\\",'/',substr(__FILE__,0,-strlen('apps/user_webfinger/host-meta.php')));
+ $WEBROOT=substr($SERVERROOT,strlen(realpath($_SERVER['DOCUMENT_ROOT'])));
+
+ if($WEBROOT!='' and $WEBROOT[0]!=='/'){
+ $WEBROOT='/'.$WEBROOT;
+ }
+}
+
+if(substr($WEBROOT,-1)==='/'){
+ $WEBROOT=substr($WEBROOT,0,-1);
+}
+
$hostMetaHeader = array(
'Access-Control-Allow-Origin' => '*',
'Content-Type' => 'application/xrd+json'
);
$serverName = $_SERVER['SERVER_NAME'];
-$hostMetaContents = '{"links":[{"rel":"lrdd","template":"http'.(isset($_SERVER['HTTPS'])?'s':'').'://'.$serverName.'/public.php?service=webfinger&q={uri}"}]}';
+$hostMetaContents = '{"links":[{"rel":"lrdd","template":"http'.(isset($_SERVER['HTTPS'])?'s':'').'://'.$serverName.$WEBROOT.'/public.php?service=webfinger&q={uri}"}]}';
foreach($hostMetaHeader as $header => $value) {
header($header . ": " . $value);
}
diff --git a/apps/user_webfinger/webfinger.php b/apps/user_webfinger/webfinger.php
index 0f882a96cf8..b725937948a 100644
--- a/apps/user_webfinger/webfinger.php
+++ b/apps/user_webfinger/webfinger.php
@@ -7,27 +7,20 @@ header("Access-Control-Allow-Origin: *");
header("Content-Type: application/xrd+json");
/**
- * To include your app in the webfinger XML, add a new script with file name
+ * To include your app in the webfinger JSON, add a new script with file name
* 'webfinger.php' to /apps/yourapp/appinfo/, which prints out the XML parts
* to be included. That script can make use of the constants WF_USER (e. g.
* "user"), WF_ID (user@host) and WF_BASEURL (e. g. https://host/owncloud).
* An example could look like this:
*
- * <Link
- * rel="myProfile"
- * type="text/html"
- * href="<?php echo WF_BASEURL; ?>/apps/myApp/profile.php?user=<?php echo WF_USER; ?>">
- * </Link>
+ * {
+ * "rel":"myProfile",
+ * "type":"text/html",
+ * "href":"<?php echo WF_BASEURL; ?>/apps/myApp/profile.php?user=<?php echo WF_USER; ?>"
+ * }
*
* but can also use complex database queries to generate the webfinger result
**/
-// calculate the documentroot
-// modified version of the one in lib/base.php that takes the .well-known symlink into account
-/*$DOCUMENTROOT=realpath($_SERVER['DOCUMENT_ROOT']);
-$SERVERROOT=str_replace("\\",'/',dirname(dirname(dirname(dirname(__FILE__)))));
-$SUBURI=substr(realpath($_SERVER["SCRIPT_FILENAME"]),strlen($SERVERROOT));
-$WEBROOT=substr($SUBURI,0,-34);
-*/
$userName = '';
$hostName = '';
@@ -63,10 +56,9 @@ echo "{\"links\":[";
$apps = OC_Appconfig::getApps();
foreach($apps as $app) {
if(OCP\App::isEnabled($app)) {
- if(is_file(OC::$APPSROOT . '/apps/' . $app . '/appinfo/webfinger.php')) {
+ if(is_file(OC_App::getAppPath($app). '/appinfo/webfinger.php')) {
require($app . '/appinfo/webfinger.php');
}
}
}
echo "]}";
-?>
diff --git a/autotest.sh b/autotest.sh
new file mode 100755
index 00000000000..a42c6ab059e
--- /dev/null
+++ b/autotest.sh
@@ -0,0 +1,110 @@
+#!/bin/bash
+#
+# ownCloud
+#
+# @author Thomas Müller
+# @copyright 2012 Thomas Müller thomas.mueller@tmit.eu
+#
+
+DATADIR=data-autotest
+BASEDIR=$PWD
+
+# create autoconfig for sqlite, mysql and (soon) postgresql
+cat > ./tests/autoconfig-sqlite.php <<DELIM
+<?php
+\$AUTOCONFIG = array (
+ 'installed' => false,
+ 'dbtype' => 'sqlite',
+ 'dbtableprefix' => 'oc_',
+ 'adminlogin' => 'admin',
+ 'adminpass' => 'admin',
+ 'directory' => '$BASEDIR/$DATADIR',
+);
+DELIM
+
+cat > ./tests/autoconfig-mysql.php <<DELIM
+<?php
+\$AUTOCONFIG = array (
+ 'installed' => false,
+ 'dbtype' => 'mysql',
+ 'dbtableprefix' => 'oc_',
+ 'adminlogin' => 'admin',
+ 'adminpass' => 'admin',
+ 'directory' => '$BASEDIR/$DATADIR',
+ 'dbuser' => 'oc_autotest',
+ 'dbname' => 'oc_autotest',
+ 'dbhost' => 'localhost',
+ 'dbpass' => 'owncloud',
+);
+DELIM
+
+cat > ./tests/autoconfig-pgsql.php <<DELIM
+<?php
+\$AUTOCONFIG = array (
+ 'installed' => false,
+ 'dbtype' => 'pgsql',
+ 'dbtableprefix' => 'oc_',
+ 'adminlogin' => 'admin',
+ 'adminpass' => 'admin',
+ 'directory' => '$BASEDIR/$DATADIR',
+ 'dbuser' => 'oc_autotest',
+ 'dbname' => 'oc_autotest',
+ 'dbhost' => 'localhost',
+ 'dbpass' => 'owncloud',
+);
+DELIM
+
+function 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
+ rm -rf $DATADIR
+ mkdir $DATADIR
+
+ # remove the old config file
+ rm -rf config/config.php
+
+ # drop database
+ if [ "$1" == "mysql" ] ; then
+ mysql -u oc_autotest -powncloud -e "DROP DATABASE oc_autotest"
+ fi
+ if [ "$1" == "pgsql" ] ; then
+ dropdb -U oc_autotest oc_autotest
+ fi
+
+ # copy autoconfig
+ cp $BASEDIR/tests/autoconfig-$1.php $BASEDIR/config/autoconfig.php
+
+ # trigger installation
+ php -f index.php
+
+ #test execution
+ echo "Testing with $1 ..."
+ cd tests
+ php -f index.php -- xml $1 > autotest-results-$1.xml
+}
+
+#
+# start test execution
+#
+execute_tests "sqlite"
+execute_tests 'mysql'
+execute_tests 'pgsql'
+
+#
+# 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/config/config.sample.php b/config/config.sample.php
index 7a48918d8b4..c4cb719796b 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -5,66 +5,104 @@ define("DEBUG", true);
$CONFIG = array(
/* Flag to indicate OwnCloud is successfully installed (true = installed) */
"installed" => false,
+
/* Type of database, can be sqlite, mysql or pgsql */
"dbtype" => "sqlite",
+
/* Name of the OwnCloud database */
"dbname" => "owncloud",
+
/* User to access the OwnCloud database */
"dbuser" => "",
+
/* Password to access the OwnCloud database */
"dbpassword" => "",
+
/* Host running the OwnCloud database */
"dbhost" => "",
+
/* Prefix for the OwnCloud tables in the database */
"dbtableprefix" => "",
+
+/* Define the salt used to hash the user passwords. All your user passwords are lost if you lose this string. */
+"passwordsalt" => "",
+
/* Force use of HTTPS connection (true = use HTTPS) */
"forcessl" => false,
+
/* Theme to use for OwnCloud */
"theme" => "",
+
/* Path to the 3rdparty directory */
"3rdpartyroot" => "",
+
/* URL to the 3rdparty directory, as seen by the browser */
"3rdpartyurl" => "",
+
/* Default app to load on login */
"defaultapp" => "files",
+
/* Enable the help menu item in the settings */
"knowledgebaseenabled" => true,
+
/* URL to use for the help page, server should understand OCS */
"knowledgebaseurl" => "http://api.apps.owncloud.com/v1",
+
/* Enable installing apps from the appstore */
"appstoreenabled" => true,
+
/* URL of the appstore to use, server should understand OCS */
"appstoreurl" => "http://api.apps.owncloud.com/v1",
+
/* Mode to use for sending mail, can be sendmail, smtp, qmail or php, see PHPMailer docs */
"mail_smtpmode" => "sendmail",
+
/* Host to use for sending mail, depends on mail_smtpmode if this is used */
"mail_smtphost" => "127.0.0.1",
+
/* authentication needed to send mail, depends on mail_smtpmode if this is used
* (false = disable authentication)
*/
"mail_smtpauth" => false,
+
/* 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" => "",
+
/* Check 3rdparty apps for malicious code fragments */
"appcodechecker" => "",
+
+/* Check if ownCloud is up to date */
+"updatechecker" => true,
+
/* Place to log to, can be owncloud and syslog (owncloud is log menu item in admin menu) */
"log_type" => "owncloud",
+
/* File for the owncloud logger to log to, (default is ownloud.log in the data dir */
"logfile" => "",
+
/* Loglevel to start logging at. 0=DEBUG, 1=INFO, 2=WARN, 3=ERROR (default is WARN) */
"loglevel" => "",
-"passwordsalt" => "",
-"updatechecker" => true,
-/* Set this to false to disable the check for writable apps dir.
- * If the apps dir is not writable, you can't download&install extra apps
- * in the admin apps menu.
- */
-"writable_appsdir" => true,
+
/* 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.
*/
-// "datadirectory" => ""
+// "datadirectory" => "",
+
+"apps_paths" => array(
+
+/* Set an array of path for your apps directories
+ key 'path' is for the fs path an the key 'url' is for the http path to your
+ applications paths. 'writable' indicate if the user can install apps in this folder.
+ You must have at least 1 app folder writable or you must set the parameter : appstoreenabled to false
+*/
+ array(
+ 'path'=> '/var/www/owncloud/apps',
+ 'url' => '/apps',
+ 'writable' => true,
+ ),
+ ),
);
-?>
+
diff --git a/core/ajax/share.php b/core/ajax/share.php
new file mode 100644
index 00000000000..04294a36ac0
--- /dev/null
+++ b/core/ajax/share.php
@@ -0,0 +1,126 @@
+<?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/>.
+*/
+require_once '../../lib/base.php';
+
+OC_JSON::checkLoggedIn();
+if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSource'])) {
+ switch ($_POST['action']) {
+ case 'share':
+ if (isset($_POST['shareType']) && isset($_POST['shareWith']) && isset($_POST['permissions'])) {
+ try {
+ OCP\Share::shareItem($_POST['itemType'], $_POST['itemSource'], (int)$_POST['shareType'], $_POST['shareWith'], $_POST['permissions']);
+ // TODO May need to return private link
+ OC_JSON::success();
+ } catch (Exception $exception) {
+ OC_JSON::error(array('data' => array('message' => $exception->getMessage())));
+ }
+ }
+ break;
+ case 'unshare':
+ if (isset($_POST['shareType']) && isset($_POST['shareWith'])) {
+ $return = OCP\Share::unshare($_POST['itemType'], $_POST['itemSource'], $_POST['shareType'], $_POST['shareWith']);
+ ($return) ? OC_JSON::success() : OC_JSON::error();
+ }
+ break;
+ case 'setPermissions':
+ if (isset($_POST['shareType']) && isset($_POST['shareWith']) && isset($_POST['permissions'])) {
+ $return = OCP\Share::setPermissions($_POST['itemType'], $_POST['itemSource'], $_POST['shareType'], $_POST['shareWith'], $_POST['permissions']);
+ ($return) ? OC_JSON::success() : OC_JSON::error();
+ }
+ break;
+ }
+} else if (isset($_GET['fetch'])) {
+ switch ($_GET['fetch']) {
+ case 'getItemsSharedStatuses':
+ if (isset($_GET['itemType'])) {
+ $return = OCP\Share::getItemsShared($_GET['itemType'], OCP\Share::FORMAT_STATUSES);
+ is_array($return) ? OC_JSON::success(array('data' => $return)) : OC_JSON::error();
+ }
+ break;
+ case 'getItem':
+ if (isset($_GET['itemType']) && isset($_GET['itemSource']) && isset($_GET['checkShares'])) {
+ $reshare = OCP\Share::getItemSharedWithBySource($_GET['itemType'], $_GET['itemSource'], OCP\Share::FORMAT_NONE, null, true);
+ if ($_GET['checkShares'] == "true") {
+ $shares = OCP\Share::getItemShared($_GET['itemType'], $_GET['itemSource']);
+ } else {
+ $shares = false;
+ }
+ OC_JSON::success(array('data' => array('reshare' => $reshare, 'shares' => $shares)));
+ }
+ break;
+ case 'getShareWith':
+ if (isset($_GET['search'])) {
+ $shareWith = array();
+ if (OC_App::isEnabled('contacts')) {
+ // TODO Add function to contacts to only get the 'fullname' column to improve performance
+ $ids = OC_Contacts_Addressbook::activeIds();
+ foreach ($ids as $id) {
+ $vcards = OC_Contacts_VCard::all($id);
+ foreach ($vcards as $vcard) {
+ $contact = $vcard['fullname'];
+ if (stripos($contact, $_GET['search']) !== false
+ && (!isset($_GET['itemShares'])
+ || !isset($_GET['itemShares'][OCP\Share::SHARE_TYPE_CONTACT])
+ || !is_array($_GET['itemShares'][OCP\Share::SHARE_TYPE_CONTACT])
+ || !in_array($contact, $_GET['itemShares'][OCP\Share::SHARE_TYPE_CONTACT]))) {
+ $shareWith[] = array('label' => $contact, 'value' => array('shareType' => 5, 'shareWith' => $vcard['id']));
+ }
+ }
+ }
+ }
+ $count = 0;
+ $users = array();
+ $limit = 0;
+ $offset = 0;
+ while ($count < 4 && count($users) == $limit) {
+ $limit = 4 - $count;
+ $users = OC_User::getUsers($_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));
+ $count++;
+ }
+ }
+ }
+ $count = 0;
+ $groups = OC_Group::getUserGroups(OC_User::getUser());
+ foreach ($groups as $group) {
+ if ($count < 4) {
+ if (stripos($group, $_GET['search']) !== false
+ && (!isset($_GET['itemShares'])
+ || !isset($_GET['itemShares'][OCP\Share::SHARE_TYPE_GROUP])
+ || !is_array($_GET['itemShares'][OCP\Share::SHARE_TYPE_GROUP])
+ || !in_array($group, $_GET['itemShares'][OCP\Share::SHARE_TYPE_GROUP]))) {
+ $shareWith[] = array('label' => $group.' (group)', 'value' => array('shareType' => OCP\Share::SHARE_TYPE_GROUP, 'shareWith' => $group));
+ $count++;
+ }
+ } else {
+ break;
+ }
+ }
+ OC_JSON::success(array('data' => $shareWith));
+ }
+ break;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/core/ajax/translations.php b/core/ajax/translations.php
index a6433b1964a..2bd6b7ed634 100644
--- a/core/ajax/translations.php
+++ b/core/ajax/translations.php
@@ -29,4 +29,3 @@ $app = $_POST["app"];
$l = OC_L10N::get( $app );
OC_JSON::success(array('data' => $l->getTranslations()));
-?>
diff --git a/core/ajax/vcategories/add.php b/core/ajax/vcategories/add.php
index a58489228d8..e69f8bb726b 100644
--- a/core/ajax/vcategories/add.php
+++ b/core/ajax/vcategories/add.php
@@ -39,5 +39,3 @@ if($categories->hasCategory($category)) {
}
OC_JSON::success(array('data' => array('categories'=>$categories->categories())));
-
-?>
diff --git a/core/ajax/vcategories/delete.php b/core/ajax/vcategories/delete.php
index 75def433d30..a41fa083c38 100644
--- a/core/ajax/vcategories/delete.php
+++ b/core/ajax/vcategories/delete.php
@@ -34,5 +34,3 @@ if(is_null($categories)) {
$vcategories = new OC_VCategories($app);
$vcategories->delete($categories);
OC_JSON::success(array('data' => array('categories'=>$vcategories->categories())));
-
-?>
diff --git a/core/ajax/vcategories/edit.php b/core/ajax/vcategories/edit.php
index 252b3d3454c..3e5540cbc22 100644
--- a/core/ajax/vcategories/edit.php
+++ b/core/ajax/vcategories/edit.php
@@ -31,5 +31,3 @@ $categories = $vcategories->categories();
debug(print_r($categories, true));
$tmpl->assign('categories',$categories);
$tmpl->printpage();
-
-?>
diff --git a/apps/files_sharing/css/sharing.css b/core/css/share.css
index c4b4540e9d1..a683a24a116 100644
--- a/apps/files_sharing/css/sharing.css
+++ b/core/css/share.css
@@ -2,13 +2,16 @@
This file is licensed under the Affero General Public License version 3 or later.
See the COPYING-README file. */
-#dropdown { display:block; position:absolute; z-index:100; width:16em; right:0; margin-right:7em; background:#eee; padding:1em;
+#dropdown { display:block; position:absolute; z-index:500; width:16em; right:0; margin-right:7em; background:#eee; padding:1em;
-moz-box-shadow:0 1px 1px #777; -webkit-box-shadow:0 1px 1px #777; box-shadow:0 1px 1px #777;
-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; }
-#sharedWithList { padding:0.5em; list-style-type: none; }
-#privateLink { border-top:1px solid #ddd; padding-top:0.5em; }
-a.unshare { float:right; display:inline; margin:0 .5em; padding:.3em .3em 0 .3em !important; opacity:.5; }
+#shareWithList { padding:0.5em; list-style-type: none; }
+#shareWithList li { padding-top:0.1em; }
+#dropdown label { font-weight:normal; }
+#dropdown input[type="checkbox"] { margin:0 0.2em 0 0.5em; }
+a.showCruds { display:inline; opacity:.5; }
+a.showCruds:hover { opacity:1; }
+a.unshare { float:right; display:inline; padding:.3em 0 0 .3em !important; opacity:.5; }
a.unshare:hover { opacity:1; }
-#share_with { width: 16em; }
-#privateLink label, .edit { font-weight:normal; }
+#privateLink { border-top:1px solid #ddd; padding-top:0.5em; } \ No newline at end of file
diff --git a/core/css/styles.css b/core/css/styles.css
index 186c11b4ffe..dd6f9d4675d 100644
--- a/core/css/styles.css
+++ b/core/css/styles.css
@@ -3,7 +3,7 @@
See the COPYING-README file. */
html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section { margin:0; padding:0; border:0; outline:0; font-weight:inherit; font-size:100%; font-family:inherit; vertical-align:baseline; cursor:default; }
-html, body { height: 100%; }
+html, body { height: 100%; overflow: auto; }
article, aside, dialog, figure, footer, header, hgroup, nav, section { display:block; }
body { line-height:1.5; }
table { border-collapse:separate; border-spacing:0; white-space:nowrap; }
@@ -16,7 +16,7 @@ body { background:#fefefe; font:normal .8em/1.6em "Lucida Grande", Arial, Verdan
/* HEADERS */
-#body-user #header, #body-settings #header { position:fixed; top:0; z-index:100; width:100%; 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-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;
-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 */
@@ -28,8 +28,9 @@ 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; }
-
+#owncloud { float:left; vertical-align:middle; }
+.header-right { float:right; vertical-align:middle; padding:0 0.5em; }
+.header-right > * { vertical-align:middle; }
/* INPUTS */
input[type="text"], input[type="password"] { cursor:text; }
@@ -49,7 +50,7 @@ input[type="checkbox"] { width:auto; }
#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"] { position:fixed; font-size:1.2em; top:.4em; right:3em; 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; }
+.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; }
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; }
input[type="submit"].highlight{ background:#ffc100; border:1px solid #db0; text-shadow:#ffeedd 0 1px 0; -moz-box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #ffeedd inset; -webkit-box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #ffeedd inset; box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #ffeedd inset; }
#select_all{ margin-top: .4em !important;}
@@ -101,19 +102,19 @@ label.infield { cursor: text !important; }
#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; }
-#logout { position:absolute; right:0; top:0; padding:1.2em 2em .55em 1.2em; }
-
/* VARIOUS REUSABLE SELECTORS */
.hidden { display:none; }
.bold { font-weight: bold; }
+.center { text-align: center; }
-#notification { z-index:101; cursor:pointer; 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 { 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 span { cursor:pointer; font-weight:bold; margin-left:1em; }
.action, .selectedActions a { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; filter:alpha(opacity=50); opacity:.5; -webkit-transition:opacity 200ms; -moz-transition:opacity 200ms; -o-transition:opacity 200ms; transition:opacity 200ms; }
.action { width: 16px; height: 16px; }
-#logout { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; filter:alpha(opacity=80); opacity:.8; }
-.action:hover, .selectedActions a:hover, #logout:hover { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; }
+.header-action { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; filter:alpha(opacity=80); opacity:.8; }
+.action:hover, .selectedActions a:hover, .header-action:hover { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; }
table:not(.nostyle) tr { -webkit-transition:background-color 200ms; -moz-transition:background-color 200ms; -o-transition:background-color 200ms; transition:background-color 200ms; }
tbody tr:hover, tr:active { background-color:#f8f8f8; }
@@ -134,11 +135,13 @@ div.jp-play-bar, div.jp-seek-bar { padding:0; }
li.error { width:640px; margin:4em auto; padding:1em 1em 1em 4em; background:#ffe .8em .8em no-repeat; color: #FF3B3B; border:1px solid #ccc; -moz-border-radius:10px; -webkit-border-radius:10px; border-radius:10px; }
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { overflow: hidden; text-overflow: ellipsis; }
-.hint { background-image: url('/core/img/actions/info.png'); background-repeat:no-repeat; color: #777777; padding-left: 25px; background-position: 0 0.3em;}
+.hint { background-image: url('../img/actions/info.png'); background-repeat:no-repeat; color: #777777; padding-left: 25px; background-position: 0 0.3em;}
.separator { display: inline; border-left: 1px solid #d3d3d3; border-right: 1px solid #fff; height: 10px; width:0px; margin: 4px; }
a.bookmarklet { background-color: #ddd; border:1px solid #ccc; padding: 5px;padding-top: 0px;padding-bottom: 2px; text-decoration: none; margin-top: 5px }
+.exception{color: #000000;}
+.exception textarea{width:95%;height: 200px;background:#ffe;border:0;}
/* ---- DIALOGS ---- */
#dirtree {width: 100%;}
@@ -155,3 +158,14 @@ a.bookmarklet { background-color: #ddd; border:1px solid #ccc; padding: 5px;padd
#categorylist li { background:#f8f8f8; padding:.3em .8em; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; -webkit-transition:background-color 500ms; -moz-transition:background-color 500ms; -o-transition:background-color 500ms; transition:background-color 500ms; }
#categorylist li:hover, li:active { background:#eee; }
#category_addinput { width: 10em; }
+
+/* ---- APP SETTINGS ---- */
+.popup { background-color: white; border-radius: 10px 10px 10px 10px; box-shadow: 0 0 20px #888888; color: #333333; padding: 10px; position: fixed !important; z-index: 200; }
+.popup.topright { top: 7em; right: 1em; }
+.popup.bottomleft { bottom: 1em; left: 33em; }
+.popup .close { position:absolute; top: 0.2em; right:0.2em; height: 20px; width: 20px; background:url('../img/actions/delete.svg') no-repeat center; }
+.popup h2 { font-weight: bold; font-size: 1.2em; }
+.arrow { border-bottom: 10px solid white; border-left: 10px solid transparent; border-right: 10px solid transparent; display: block; height: 0; position: absolute; width: 0; z-index: 201; }
+.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); }
diff --git a/core/img/actions/add.png b/core/img/actions/add.png
index db1b1970f17..25d472b2dc4 100644
--- a/core/img/actions/add.png
+++ b/core/img/actions/add.png
Binary files differ
diff --git a/core/img/actions/delete.png b/core/img/actions/delete.png
index bc0c782882d..fa8e18183ed 100644
--- a/core/img/actions/delete.png
+++ b/core/img/actions/delete.png
Binary files differ
diff --git a/core/img/actions/download.png b/core/img/actions/download.png
index 14e88e14c0f..65954f941bb 100644
--- a/core/img/actions/download.png
+++ b/core/img/actions/download.png
Binary files differ
diff --git a/core/img/actions/history.png b/core/img/actions/history.png
index b1e743651f8..1d138b8cd5a 100644
--- a/core/img/actions/history.png
+++ b/core/img/actions/history.png
Binary files differ
diff --git a/core/img/actions/info.png b/core/img/actions/info.png
index 2257d144d11..37ccb356830 100644
--- a/core/img/actions/info.png
+++ b/core/img/actions/info.png
Binary files differ
diff --git a/core/img/actions/logout.png b/core/img/actions/logout.png
index 74dcd33bee7..eb2ea766c31 100644
--- a/core/img/actions/logout.png
+++ b/core/img/actions/logout.png
Binary files differ
diff --git a/core/img/actions/mail.png b/core/img/actions/mail.png
index 4d3192ef329..8e884fbc0ea 100644
--- a/core/img/actions/mail.png
+++ b/core/img/actions/mail.png
Binary files differ
diff --git a/core/img/actions/pause-big.png b/core/img/actions/pause-big.png
index 9bcfd0406d8..1c4cf503b8d 100644
--- a/core/img/actions/pause-big.png
+++ b/core/img/actions/pause-big.png
Binary files differ
diff --git a/core/img/actions/pause.png b/core/img/actions/pause.png
index ced8c43ab34..f74ed3a8619 100644
--- a/core/img/actions/pause.png
+++ b/core/img/actions/pause.png
Binary files differ
diff --git a/core/img/actions/play-add.png b/core/img/actions/play-add.png
index 0c330d4ac44..0097f671aef 100644
--- a/core/img/actions/play-add.png
+++ b/core/img/actions/play-add.png
Binary files differ
diff --git a/core/img/actions/play-big.png b/core/img/actions/play-big.png
index 3ccd36129ec..2da2426dcfc 100644
--- a/core/img/actions/play-big.png
+++ b/core/img/actions/play-big.png
Binary files differ
diff --git a/core/img/actions/play-next.png b/core/img/actions/play-next.png
index 0c0ccc87cdc..08568b3dc0b 100644
--- a/core/img/actions/play-next.png
+++ b/core/img/actions/play-next.png
Binary files differ
diff --git a/core/img/actions/play-previous.png b/core/img/actions/play-previous.png
index d98cedaa1e8..811cde46c15 100644
--- a/core/img/actions/play-previous.png
+++ b/core/img/actions/play-previous.png
Binary files differ
diff --git a/core/img/actions/play.png b/core/img/actions/play.png
index a252a751554..adbef1e576d 100644
--- a/core/img/actions/play.png
+++ b/core/img/actions/play.png
Binary files differ
diff --git a/core/img/actions/public.png b/core/img/actions/public.png
index 75d1366326b..9e56f2919fd 100644
--- a/core/img/actions/public.png
+++ b/core/img/actions/public.png
Binary files differ
diff --git a/core/img/actions/rename.png b/core/img/actions/rename.png
index 9993a092df1..3af6840071b 100644
--- a/core/img/actions/rename.png
+++ b/core/img/actions/rename.png
Binary files differ
diff --git a/core/img/actions/search.png b/core/img/actions/search.png
index bfedb80bb57..98e1d73ee34 100644
--- a/core/img/actions/search.png
+++ b/core/img/actions/search.png
Binary files differ
diff --git a/core/img/actions/settings.png b/core/img/actions/settings.png
index 5b1607e59fc..8b3acb00a4f 100644
--- a/core/img/actions/settings.png
+++ b/core/img/actions/settings.png
Binary files differ
diff --git a/core/img/actions/share.png b/core/img/actions/share.png
index 62c4627f317..099e4d6ab35 100644
--- a/core/img/actions/share.png
+++ b/core/img/actions/share.png
Binary files differ
diff --git a/core/img/actions/shared.png b/core/img/actions/shared.png
index 073ff741685..6e112e75b44 100644
--- a/core/img/actions/shared.png
+++ b/core/img/actions/shared.png
Binary files differ
diff --git a/core/img/actions/sound-off.png b/core/img/actions/sound-off.png
index 7900e500c90..2eddb00af0f 100644
--- a/core/img/actions/sound-off.png
+++ b/core/img/actions/sound-off.png
Binary files differ
diff --git a/core/img/actions/sound.png b/core/img/actions/sound.png
index 838c9cee171..9349c94e7a4 100644
--- a/core/img/actions/sound.png
+++ b/core/img/actions/sound.png
Binary files differ
diff --git a/core/img/actions/triangle-s.png b/core/img/actions/triangle-s.png
index d77d5db2caa..53590a2197b 100644
--- a/core/img/actions/triangle-s.png
+++ b/core/img/actions/triangle-s.png
Binary files differ
diff --git a/core/img/actions/upload-white.png b/core/img/actions/upload-white.png
index 09dba9e9108..fd9bdccc240 100644
--- a/core/img/actions/upload-white.png
+++ b/core/img/actions/upload-white.png
Binary files differ
diff --git a/core/img/actions/upload.png b/core/img/actions/upload.png
index 5744aad75a8..1d90165a552 100644
--- a/core/img/actions/upload.png
+++ b/core/img/actions/upload.png
Binary files differ
diff --git a/core/img/breadcrumb-start.png b/core/img/breadcrumb-start.png
index a79d675454e..b0df5f44037 100644
--- a/core/img/breadcrumb-start.png
+++ b/core/img/breadcrumb-start.png
Binary files differ
diff --git a/core/img/breadcrumb.png b/core/img/breadcrumb.png
index b124f349f56..84992be0d93 100644
--- a/core/img/breadcrumb.png
+++ b/core/img/breadcrumb.png
Binary files differ
diff --git a/core/img/favicon-touch.png b/core/img/favicon-touch.png
index cfaaa4399ac..24770fb634f 100644
--- a/core/img/favicon-touch.png
+++ b/core/img/favicon-touch.png
Binary files differ
diff --git a/core/img/favicon.png b/core/img/favicon.png
index c1b1cb65460..79b6795f6f6 100644
--- a/core/img/favicon.png
+++ b/core/img/favicon.png
Binary files differ
diff --git a/core/img/filetypes/application-msexcel.png b/core/img/filetypes/application-msexcel.png
new file mode 100644
index 00000000000..abcd93689a0
--- /dev/null
+++ b/core/img/filetypes/application-msexcel.png
Binary files differ
diff --git a/core/img/filetypes/application-mspowerpoint.png b/core/img/filetypes/application-mspowerpoint.png
new file mode 100644
index 00000000000..b4aaad9a45c
--- /dev/null
+++ b/core/img/filetypes/application-mspowerpoint.png
Binary files differ
diff --git a/core/img/filetypes/application-msword.png b/core/img/filetypes/application-msword.png
new file mode 100644
index 00000000000..e8b230c59cb
--- /dev/null
+++ b/core/img/filetypes/application-msword.png
Binary files differ
diff --git a/core/img/filetypes/application-sgf.png b/core/img/filetypes/application-sgf.png
index f171f5579e7..48996c54394 100644
--- a/core/img/filetypes/application-sgf.png
+++ b/core/img/filetypes/application-sgf.png
Binary files differ
diff --git a/core/img/filetypes/application-vnd.oasis.opendocument.formula.png b/core/img/filetypes/application-vnd.oasis.opendocument.formula.png
index 4cefbb690d1..e0cf49542d4 100644
--- a/core/img/filetypes/application-vnd.oasis.opendocument.formula.png
+++ b/core/img/filetypes/application-vnd.oasis.opendocument.formula.png
Binary files differ
diff --git a/core/img/filetypes/application-vnd.oasis.opendocument.graphics.png b/core/img/filetypes/application-vnd.oasis.opendocument.graphics.png
index 3d66cc97eb5..b326a0543a5 100644
--- a/core/img/filetypes/application-vnd.oasis.opendocument.graphics.png
+++ b/core/img/filetypes/application-vnd.oasis.opendocument.graphics.png
Binary files differ
diff --git a/core/img/filetypes/application-vnd.oasis.opendocument.presentation.png b/core/img/filetypes/application-vnd.oasis.opendocument.presentation.png
index 46942cba285..7c6fd246840 100644
--- a/core/img/filetypes/application-vnd.oasis.opendocument.presentation.png
+++ b/core/img/filetypes/application-vnd.oasis.opendocument.presentation.png
Binary files differ
diff --git a/core/img/filetypes/application-vnd.oasis.opendocument.spreadsheet.png b/core/img/filetypes/application-vnd.oasis.opendocument.spreadsheet.png
index abc38d4310c..8b0e85b0670 100644
--- a/core/img/filetypes/application-vnd.oasis.opendocument.spreadsheet.png
+++ b/core/img/filetypes/application-vnd.oasis.opendocument.spreadsheet.png
Binary files differ
diff --git a/core/img/filetypes/application-vnd.oasis.opendocument.text.png b/core/img/filetypes/application-vnd.oasis.opendocument.text.png
index 06c1f30c8fa..48452eb3e86 100644
--- a/core/img/filetypes/application-vnd.oasis.opendocument.text.png
+++ b/core/img/filetypes/application-vnd.oasis.opendocument.text.png
Binary files differ
diff --git a/core/img/filetypes/application-x-7z-compressed.png b/core/img/filetypes/application-x-7z-compressed.png
index 55dd0f75366..2cd08aebf95 100644
--- a/core/img/filetypes/application-x-7z-compressed.png
+++ b/core/img/filetypes/application-x-7z-compressed.png
Binary files differ
diff --git a/core/img/filetypes/application-x-bzip-compressed-tar.png b/core/img/filetypes/application-x-bzip-compressed-tar.png
index 55dd0f75366..2cd08aebf95 100644
--- a/core/img/filetypes/application-x-bzip-compressed-tar.png
+++ b/core/img/filetypes/application-x-bzip-compressed-tar.png
Binary files differ
diff --git a/core/img/filetypes/application-x-bzip.png b/core/img/filetypes/application-x-bzip.png
index 55dd0f75366..2cd08aebf95 100644
--- a/core/img/filetypes/application-x-bzip.png
+++ b/core/img/filetypes/application-x-bzip.png
Binary files differ
diff --git a/core/img/filetypes/application-x-compressed-tar.png b/core/img/filetypes/application-x-compressed-tar.png
index 55dd0f75366..2cd08aebf95 100644
--- a/core/img/filetypes/application-x-compressed-tar.png
+++ b/core/img/filetypes/application-x-compressed-tar.png
Binary files differ
diff --git a/core/img/filetypes/application-x-deb.png b/core/img/filetypes/application-x-deb.png
index 55dd0f75366..2cd08aebf95 100644
--- a/core/img/filetypes/application-x-deb.png
+++ b/core/img/filetypes/application-x-deb.png
Binary files differ
diff --git a/core/img/filetypes/application-x-debian-package.png b/core/img/filetypes/application-x-debian-package.png
index eff1b7fc8c2..b3f6b7e5cf9 100644
--- a/core/img/filetypes/application-x-debian-package.png
+++ b/core/img/filetypes/application-x-debian-package.png
Binary files differ
diff --git a/core/img/filetypes/application-x-gzip.png b/core/img/filetypes/application-x-gzip.png
index 55dd0f75366..2cd08aebf95 100644
--- a/core/img/filetypes/application-x-gzip.png
+++ b/core/img/filetypes/application-x-gzip.png
Binary files differ
diff --git a/core/img/filetypes/application-x-lzma-compressed-tar.png b/core/img/filetypes/application-x-lzma-compressed-tar.png
index 55dd0f75366..2cd08aebf95 100644
--- a/core/img/filetypes/application-x-lzma-compressed-tar.png
+++ b/core/img/filetypes/application-x-lzma-compressed-tar.png
Binary files differ
diff --git a/core/img/filetypes/application-x-rar.png b/core/img/filetypes/application-x-rar.png
index 55dd0f75366..2cd08aebf95 100644
--- a/core/img/filetypes/application-x-rar.png
+++ b/core/img/filetypes/application-x-rar.png
Binary files differ
diff --git a/core/img/filetypes/application-x-rpm.png b/core/img/filetypes/application-x-rpm.png
index 55dd0f75366..2cd08aebf95 100644
--- a/core/img/filetypes/application-x-rpm.png
+++ b/core/img/filetypes/application-x-rpm.png
Binary files differ
diff --git a/core/img/filetypes/application-x-tar.png b/core/img/filetypes/application-x-tar.png
index 55dd0f75366..2cd08aebf95 100644
--- a/core/img/filetypes/application-x-tar.png
+++ b/core/img/filetypes/application-x-tar.png
Binary files differ
diff --git a/core/img/filetypes/application-x-tarz.png b/core/img/filetypes/application-x-tarz.png
index 55dd0f75366..2cd08aebf95 100644
--- a/core/img/filetypes/application-x-tarz.png
+++ b/core/img/filetypes/application-x-tarz.png
Binary files differ
diff --git a/core/img/filetypes/application-zip.png b/core/img/filetypes/application-zip.png
index 55dd0f75366..2cd08aebf95 100644
--- a/core/img/filetypes/application-zip.png
+++ b/core/img/filetypes/application-zip.png
Binary files differ
diff --git a/core/img/filetypes/flash.png b/core/img/filetypes/flash.png
index 5769120b1b6..9f5db634a4f 100644
--- a/core/img/filetypes/flash.png
+++ b/core/img/filetypes/flash.png
Binary files differ
diff --git a/core/img/icon-error.png b/core/img/icon-error.png
index ed438a32fd8..1ce0be0fb2e 100644
--- a/core/img/icon-error.png
+++ b/core/img/icon-error.png
Binary files differ
diff --git a/core/img/icon-sync.png b/core/img/icon-sync.png
index 99a43d4c69a..a3d09704246 100644
--- a/core/img/icon-sync.png
+++ b/core/img/icon-sync.png
Binary files differ
diff --git a/core/img/icon.png b/core/img/icon.png
index 24a4b1c3e83..745b82584c6 100644
--- a/core/img/icon.png
+++ b/core/img/icon.png
Binary files differ
diff --git a/core/img/logo-inverted.png b/core/img/logo-inverted.png
index d9fd119dc18..265a8871b45 100644
--- a/core/img/logo-inverted.png
+++ b/core/img/logo-inverted.png
Binary files differ
diff --git a/core/img/logo-square.png b/core/img/logo-square.png
index 086d415db6d..b836de8f3be 100644
--- a/core/img/logo-square.png
+++ b/core/img/logo-square.png
Binary files differ
diff --git a/core/img/logo-wide.png b/core/img/logo-wide.png
index ea10828db5e..702f1d97e5b 100644
--- a/core/img/logo-wide.png
+++ b/core/img/logo-wide.png
Binary files differ
diff --git a/core/img/logo.png b/core/img/logo.png
index 8177c4cdba1..a84fe145bbd 100644
--- a/core/img/logo.png
+++ b/core/img/logo.png
Binary files differ
diff --git a/core/img/places/file.png b/core/img/places/file.png
index 49790448897..63837a1af90 100644
--- a/core/img/places/file.png
+++ b/core/img/places/file.png
Binary files differ
diff --git a/core/img/places/folder.png b/core/img/places/folder.png
index 3edbe257a34..46079e03e9e 100644
--- a/core/img/places/folder.png
+++ b/core/img/places/folder.png
Binary files differ
diff --git a/core/img/places/home.png b/core/img/places/home.png
index b3fb9bbaf6f..c3dbd3e3538 100644
--- a/core/img/places/home.png
+++ b/core/img/places/home.png
Binary files differ
diff --git a/core/img/places/music.png b/core/img/places/music.png
index 4c844425d64..85ee2474cd1 100644
--- a/core/img/places/music.png
+++ b/core/img/places/music.png
Binary files differ
diff --git a/core/img/places/picture.png b/core/img/places/picture.png
index 980a7c69813..9abcd09722c 100644
--- a/core/img/places/picture.png
+++ b/core/img/places/picture.png
Binary files differ
diff --git a/core/img/remoteStorage-big.png b/core/img/remoteStorage-big.png
index 7c429a6a738..f2254233031 100644
--- a/core/img/remoteStorage-big.png
+++ b/core/img/remoteStorage-big.png
Binary files differ
diff --git a/core/js/backgroundjobs.js b/core/js/backgroundjobs.js
new file mode 100644
index 00000000000..4a558a66b4b
--- /dev/null
+++ b/core/js/backgroundjobs.js
@@ -0,0 +1,25 @@
+/**
+* ownCloud
+*
+* @author Jakob Sack
+* @copyright 2012 Jakob Sack owncloud@jakobsack.de
+*
+* 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/>.
+*
+*/
+
+// start worker once page has loaded
+$(document).ready(function(){
+ $.get( OC.webroot+'/cron.php' );
+});
diff --git a/core/js/eventsource.js b/core/js/eventsource.js
index 08259e02cae..e3ad7e3a671 100644
--- a/core/js/eventsource.js
+++ b/core/js/eventsource.js
@@ -40,6 +40,7 @@ OC.EventSource=function(src,data){
dataStr+=name+'='+encodeURIComponent(data[name])+'&';
}
}
+ dataStr+='requesttoken='+OC.EventSource.requesttoken;
if(!this.useFallBack && typeof EventSource !='undefined'){
this.source=new EventSource(src+'?'+dataStr);
this.source.onmessage=function(e){
diff --git a/core/js/js.js b/core/js/js.js
index dec6ea047c0..86e802cd348 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -31,7 +31,7 @@ t.cache={};
OC={
webroot:oc_webroot,
- appswebroot:oc_appswebroot,
+ appswebroots:oc_appswebroots,
currentUser:(typeof oc_current_user!=='undefined')?oc_current_user:false,
coreApps:['', 'admin','log','search','settings','core','3rdparty'],
/**
@@ -63,13 +63,12 @@ OC={
link+= file;
}
}else if(file.substring(file.length-3) != 'php' && !isCore){
- link=OC.appswebroot;
- link+='/';
- link+='apps/';
- link+=app+'/';
+ link=OC.appswebroots[app];
if(type){
- link+=type+'/';
+ link+= '/'+type+'/';
}
+ if(link.substring(link.length-1) != '/')
+ link+='/';
link+=file;
}else{
link+='/';
@@ -83,7 +82,7 @@ OC={
if(type){
link+=type+'/';
}
- link+=file;
+ link+=file;
}
return link;
},
@@ -92,9 +91,9 @@ OC={
* @param app the app id to which the image belongs
* @param file the name of the image file
* @return string
- *
+ *
* if no extension is given for the image, it will automatically decide between .png and .svg based on what the browser supports
- */
+ */
imagePath:function(app,file){
if(file.indexOf('.')==-1){//if no extension is given, use png or svg depending on browser support
file+=(SVGSupport())?'.svg':'.png';
@@ -106,7 +105,7 @@ OC={
* @param app the app id to which the script belongs
* @param script the filename of the script
* @param ready event handeler to be called when the script is loaded
- *
+ *
* if the script is already loaded, the event handeler will be called directly
*/
addScript:function(app,script,ready){
@@ -151,12 +150,68 @@ OC={
}
},
dialogs:OCdialogs,
- mtime2date:function(mtime) {
- mtime = parseInt(mtime);
- var date = new Date(1000*mtime);
- var ret = date.getDate()+'.'+(date.getMonth()+1)+'.'+date.getFullYear()+', '+date.getHours()+':'+date.getMinutes();
- return ret;
- }
+ mtime2date:function(mtime) {
+ mtime = parseInt(mtime);
+ var date = new Date(1000*mtime);
+ var ret = date.getDate()+'.'+(date.getMonth()+1)+'.'+date.getFullYear()+', '+date.getHours()+':'+date.getMinutes();
+ return ret;
+ },
+ /**
+ * Opens a popup with the setting for an app.
+ * @param appid String. The ID of the app e.g. 'calendar', 'contacts' or 'files'.
+ * @param loadJS boolean or String. If true 'js/settings.js' is loaded. If it's a string
+ * it will attempt to load a script by that name in the 'js' directory.
+ * @param cache boolean. If true the javascript file won't be forced refreshed. Defaults to true.
+ * @param scriptName String. The name of the PHP file to load. Defaults to 'settings.php' in
+ * the root of the app directory hierarchy.
+ */
+ appSettings:function(args) {
+ if(typeof args === 'undefined' || typeof args.appid === 'undefined') {
+ throw { name: 'MissingParameter', message: 'The parameter appid is missing' };
+ }
+ var props = {scriptName:'settings.php', cache:true};
+ $.extend(props, args);
+ var settings = $('#appsettings');
+ if(settings.length == 0) {
+ throw { name: 'MissingDOMElement', message: 'There has be be an element with id "appsettings" for the popup to show.' };
+ }
+ var popup = $('#appsettings_popup');
+ if(popup.length == 0) {
+ $('body').prepend('<div class="popup hidden" id="appsettings_popup"></div>');
+ popup = $('#appsettings_popup');
+ popup.addClass(settings.hasClass('topright') ? 'topright' : 'bottomleft');
+ }
+ if(popup.is(':visible')) {
+ popup.hide().remove();
+ } else {
+ var arrowclass = settings.hasClass('topright') ? 'up' : 'left';
+ var jqxhr = $.get(OC.filePath(props.appid, '', props.scriptName), function(data) {
+ popup.html(data).ready(function() {
+ popup.prepend('<span class="arrow '+arrowclass+'"></span><h2>'+t('core', 'Settings')+'</h2><a class="close svg"></a>').show();
+ popup.find('.close').bind('click', function() {
+ popup.remove();
+ })
+ if(typeof props.loadJS !== 'undefined') {
+ var scriptname;
+ if(props.loadJS === true) {
+ scriptname = 'settings.js';
+ } else if(typeof props.loadJS === 'string') {
+ scriptname = props.loadJS;
+ } else {
+ throw { name: 'InvalidParameter', message: 'The "loadJS" parameter must be either boolean or a string.' };
+ }
+ if(props.cache) {
+ $.ajaxSetup({cache: true});
+ }
+ $.getScript(OC.filePath(props.appid, 'js', scriptname))
+ .fail(function(jqxhr, settings, e) {
+ throw e;
+ });
+ }
+ }).show();
+ }, 'html');
+ }
+ }
};
OC.search.customResults={};
OC.search.currentResult=-1;
@@ -203,7 +258,7 @@ if (!Array.prototype.filter) {
var len = this.length >>> 0;
if (typeof fun != "function")
throw new TypeError();
-
+
var res = [];
var thisp = arguments[1];
for (var i = 0; i < len; i++) {
@@ -223,14 +278,14 @@ if (!Array.prototype.indexOf){
Array.prototype.indexOf = function(elt /*, from*/)
{
var len = this.length;
-
+
var from = Number(arguments[1]) || 0;
from = (from < 0)
? Math.ceil(from)
: Math.floor(from);
if (from < 0)
from += len;
-
+
for (; from < len; from++)
{
if (from in this &&
@@ -307,7 +362,7 @@ function replaceSVG(){
/**
* prototypal inharitence functions
- *
+ *
* usage:
* MySubObject=object(MyObject)
*/
@@ -353,7 +408,7 @@ $(document).ready(function(){
fillWindow($('#rightcontent'));
});
$(window).trigger('resize');
-
+
if(!SVGSupport()){ //replace all svg images with png images for browser that dont support svg
replaceSVG();
}else{
@@ -396,7 +451,7 @@ $(document).ready(function(){
}
});
- // 'show password' checkbox
+ // 'show password' checkbox
$('#pass2').showPassword();
//use infield labels
@@ -420,8 +475,9 @@ $(document).ready(function(){
}
}
// hide log in button etc. when form fields not filled
- checkShowCredentials();
- $('input#user, input#password').keyup(checkShowCredentials);
+ // commented out due to some browsers having issues with it
+ // checkShowCredentials();
+ // $('input#user, input#password').keyup(checkShowCredentials);
$('#settings #expand').keydown(function(event) {
if (event.which == 13 || event.which == 32) {
@@ -462,15 +518,15 @@ $(document).ready(function(){
if (!Array.prototype.map){
Array.prototype.map = function(fun /*, thisp */){
"use strict";
-
+
if (this === void 0 || this === null)
throw new TypeError();
-
+
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun !== "function")
throw new TypeError();
-
+
var res = new Array(len);
var thisp = arguments[1];
for (var i = 0; i < len; i++){
@@ -478,16 +534,16 @@ if (!Array.prototype.map){
res[i] = fun.call(thisp, t[i], i, t);
}
}
-
- return res;
+
+ return res;
};
}
/**
* Filter Jquery selector by attribute value
**/
-$.fn.filterAttr = function(attr_name, attr_value) {
- return this.filter(function() { return $(this).attr(attr_name) === attr_value; });
+$.fn.filterAttr = function(attr_name, attr_value) {
+ return this.filter(function() { return $(this).attr(attr_name) === attr_value; });
};
function humanFileSize(size) {
diff --git a/core/js/share.js b/core/js/share.js
new file mode 100644
index 00000000000..e765303a267
--- /dev/null
+++ b/core/js/share.js
@@ -0,0 +1,377 @@
+OC.Share={
+ SHARE_TYPE_USER:0,
+ SHARE_TYPE_GROUP:1,
+ SHARE_TYPE_PRIVATE_LINK:3,
+ SHARE_TYPE_EMAIL:4,
+ PERMISSION_CREATE:4,
+ PERMISSION_READ:1,
+ PERMISSION_UPDATE:2,
+ PERMISSION_DELETE:8,
+ PERMISSION_SHARE:16,
+ itemShares:[],
+ statuses:[],
+ droppedDown:false,
+ loadIcons:function(itemType) {
+ // Load all share icons
+ $.get(OC.filePath('core', 'ajax', 'share.php'), { fetch: 'getItemsSharedStatuses', itemType: itemType }, function(result) {
+ if (result && result.status === 'success') {
+ $.each(result.data, function(item, hasPrivateLink) {
+ // Private links override shared in terms of icon display
+ if (itemType != 'file' && itemType != 'folder') {
+ if (hasPrivateLink) {
+ var image = OC.imagePath('core', 'actions/public');
+ } else {
+ var image = OC.imagePath('core', 'actions/shared');
+ }
+ $('a.share[data-item="'+item+'"]').css('background', 'url('+image+') no-repeat center');
+ }
+ OC.Share.statuses[item] = hasPrivateLink;
+ });
+ }
+ });
+ },
+ loadItem:function(itemType, itemSource) {
+ var data = '';
+ if (typeof OC.Share.statuses[itemSource] === 'undefined') {
+ checkShares = false;
+ } else {
+ checkShares = true;
+ }
+ $.ajax({type: 'GET', url: OC.filePath('core', 'ajax', 'share.php'), data: { fetch: 'getItem', itemType: itemType, itemSource: itemSource, checkShares: checkShares }, async: false, success: function(result) {
+ if (result && result.status === 'success') {
+ data = result.data;
+ } else {
+ data = false;
+ }
+ }});
+ return data;
+ },
+ share:function(itemType, itemSource, shareType, shareWith, permissions, callback) {
+ $.post(OC.filePath('core', 'ajax', 'share.php'), { action: 'share', itemType: itemType, itemSource: itemSource, shareType: shareType, shareWith: shareWith, permissions: permissions }, function(result) {
+ if (result && result.status === 'success') {
+ if (callback) {
+ callback(result.data);
+ }
+ } else {
+ OC.dialogs.alert(result.data.message, 'Error while sharing');
+ }
+ });
+ },
+ unshare:function(itemType, itemSource, shareType, shareWith, callback) {
+ $.post(OC.filePath('core', 'ajax', 'share.php'), { action: 'unshare', itemType: itemType, itemSource: itemSource, shareType: shareType, shareWith: shareWith }, function(result) {
+ if (result && result.status === 'success') {
+ if (callback) {
+ callback();
+ }
+ } else {
+ OC.dialogs.alert('Error', 'Error while unsharing');
+ }
+ });
+ },
+ setPermissions:function(itemType, itemSource, shareType, shareWith, permissions) {
+ $.post(OC.filePath('core', 'ajax', 'share.php'), { action: 'setPermissions', itemType: itemType, itemSource: itemSource, shareType: shareType, shareWith: shareWith, permissions: permissions }, function(result) {
+ if (!result || result.status !== 'success') {
+ OC.dialogs.alert('Error', 'Error while changing permissions');
+ }
+ });
+ },
+ showDropDown:function(itemType, itemSource, appendTo, privateLink, possiblePermissions) {
+ var data = OC.Share.loadItem(itemType, itemSource);
+ var html = '<div id="dropdown" class="drop" data-item-type="'+itemType+'" data-item-source="'+itemSource+'">';
+ if (data.reshare) {
+ if (data.reshare.share_type == OC.Share.SHARE_TYPE_GROUP) {
+ html += 'Shared with you and the group '+data.reshare.share_with+' by '+data.reshare.uid_owner;
+ } else {
+ html += 'Shared with you by '+data.reshare.uid_owner;
+ }
+ html += '<br />';
+ }
+ html += '<input id="shareWith" type="text" placeholder="Share with" style="width:90%;"/>';
+ html += '<ul id="shareWithList">';
+ html += '</ul>';
+ if (privateLink) {
+ html += '<div id="privateLink">';
+ html += '<input type="checkbox" name="privateLinkCheckbox" id="privateLinkCheckbox" value="1" /><label for="privateLinkCheckbox">Share with private link</label>';
+ html += '<br />';
+ html += '<input id="privateLinkText" style="display:none; width:90%;" readonly="readonly" />';
+ html += '</div>';
+ }
+ html += '</div>';
+ $(html).appendTo(appendTo);
+ // Reset item shares
+ OC.Share.itemShares = [];
+ if (data.shares) {
+ $.each(data.shares, function(index, share) {
+ if (share.share_type == OC.Share.SHARE_TYPE_PRIVATE_LINK) {
+ OC.Share.showPrivateLink(item, share.share_with);
+ } else {
+ OC.Share.addShareWith(share.share_type, share.share_with, share.permissions, possiblePermissions);
+
+ }
+ });
+ }
+ $('#shareWith').autocomplete({minLength: 2, source: function(search, response) {
+// if (cache[search.term]) {
+// response(cache[search.term]);
+// } else {
+ $.get(OC.filePath('core', 'ajax', 'share.php'), { fetch: 'getShareWith', search: search.term, itemShares: OC.Share.itemShares }, function(result) {
+ if (result.status == 'success' && result.data.length > 0) {
+ response(result.data);
+ } else {
+ // Suggest sharing via email if valid email address
+ var pattern = new RegExp(/^[+a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i);
+ if (pattern.test(search.term)) {
+ response([{label: 'Share via email: '+search.term, value: {shareType: OC.Share.SHARE_TYPE_EMAIL, shareWith: search.term}}]);
+ } else {
+ response(['No people found']);
+ }
+ }
+ });
+// }
+ },
+ focus: function(event, focused) {
+ event.preventDefault();
+ },
+ select: function(event, selected) {
+ var shareType = selected.item.value.shareType;
+ var shareWith = selected.item.value.shareWith;
+ $(this).val(shareWith);
+ // Default permissions are Read and Share
+ var permissions = OC.Share.PERMISSION_READ | OC.Share.PERMISSION_SHARE;
+ OC.Share.share($('#dropdown').data('item-type'), $('#dropdown').data('item-source'), shareType, shareWith, permissions, function() {
+ OC.Share.addShareWith(shareType, shareWith, permissions, possiblePermissions);
+ $('#shareWith').val('');
+ });
+ return false;
+ }
+ });
+ $('#dropdown').show('blind', function() {
+ OC.Share.droppedDown = true;
+ });
+ $('#shareWith').focus();
+ },
+ hideDropDown:function(callback) {
+ $('#dropdown').hide('blind', function() {
+ OC.Share.droppedDown = false;
+ $('#dropdown').remove();
+ if (typeof FileActions !== 'undefined') {
+ $('tr').removeClass('mouseOver');
+ }
+ if (callback) {
+ callback.call();
+ }
+ });
+ },
+ addShareWith:function(shareType, shareWith, permissions, possiblePermissions) {
+ if (!OC.Share.itemShares[shareType]) {
+ OC.Share.itemShares[shareType] = [];
+ }
+ OC.Share.itemShares[shareType].push(shareWith);
+ var editChecked = createChecked = updateChecked = deleteChecked = shareChecked = '';
+ if (permissions & OC.Share.PERMISSION_CREATE) {
+ createChecked = 'checked="checked"';
+ editChecked = 'checked="checked"';
+ }
+ if (permissions & OC.Share.PERMISSION_UPDATE) {
+ updateChecked = 'checked="checked"';
+ editChecked = 'checked="checked"';
+ }
+ if (permissions & OC.Share.PERMISSION_DELETE) {
+ deleteChecked = 'checked="checked"';
+ editChecked = 'checked="checked"';
+ }
+ if (permissions & OC.Share.PERMISSION_SHARE) {
+ shareChecked = 'checked="checked"';
+ }
+ var html = '<li style="clear: both;" data-share-type="'+shareType+'" data-share-with="'+shareWith+'">';
+ html += shareWith;
+ if (possiblePermissions & OC.Share.PERMISSION_CREATE || possiblePermissions & OC.Share.PERMISSION_UPDATE || possiblePermissions & OC.Share.PERMISSION_DELETE) {
+ if (editChecked == '') {
+ html += '<label style="display:none;">';
+ } else {
+ html += '<label>';
+ }
+ html += '<input type="checkbox" name="edit" class="permissions" '+editChecked+' />can edit</label>';
+ }
+ html += '<a href="#" class="showCruds" style="display:none;"><img class="svg" alt="Unshare" src="'+OC.imagePath('core', 'actions/triangle-s')+'"/></a>';
+ html += '<a href="#" class="unshare" style="display:none;"><img class="svg" alt="Unshare" src="'+OC.imagePath('core', 'actions/delete')+'"/></a>';
+ html += '<div class="cruds" style="display:none;">';
+ if (possiblePermissions & OC.Share.PERMISSION_CREATE) {
+ html += '<label><input type="checkbox" name="create" class="permissions" '+createChecked+' data-permissions="'+OC.Share.PERMISSION_CREATE+'" />create</label>';
+ }
+ if (possiblePermissions & OC.Share.PERMISSION_UPDATE) {
+ html += '<label><input type="checkbox" name="update" class="permissions" '+updateChecked+' data-permissions="'+OC.Share.PERMISSION_UPDATE+'" />update</label>';
+ }
+ if (possiblePermissions & OC.Share.PERMISSION_DELETE) {
+ html += '<label><input type="checkbox" name="delete" class="permissions" '+deleteChecked+' data-permissions="'+OC.Share.PERMISSION_DELETE+'" />delete</label>';
+ }
+ if (possiblePermissions & OC.Share.PERMISSION_SHARE) {
+ html += '<label><input type="checkbox" name="share" class="permissions" '+shareChecked+' data-permissions="'+OC.Share.PERMISSION_SHARE+'" />share</label>';
+ }
+ html += '</div>';
+ html += '</li>';
+ $(html).appendTo('#shareWithList');
+
+ },
+ showPrivateLink:function(item, token) {
+ $('#privateLinkCheckbox').attr('checked', true);
+ var link = parent.location.protocol+'//'+location.host+OC.linkTo('', 'public.php')+'?service=files&token='+token;
+ if (token.indexOf('&path=') == -1) {
+ link += '&file=' + encodeURIComponent(item).replace(/%2F/g, '/');
+ } else {
+ // Disable checkbox if inside a shared parent folder
+ $('#privateLinkCheckbox').attr('disabled', 'true');
+ }
+ $('#privateLinkText').val(link);
+ $('#privateLinkText').show('blind', function() {
+ $('#privateLinkText').after('<br id="emailBreak" />');
+ $('#email').show();
+ $('#emailButton').show();
+ });
+ },
+ hidePrivateLink:function() {
+ $('#privateLinkText').hide('blind');
+ $('#emailBreak').remove();
+ $('#email').hide();
+ $('#emailButton').hide();
+ },
+ emailPrivateLink:function() {
+ var link = $('#privateLinkText').val();
+ var file = link.substr(link.lastIndexOf('/') + 1).replace(/%20/g, ' ');
+ $.post(OC.filePath('files_sharing', 'ajax', 'email.php'), { toaddress: $('#email').val(), link: link, file: file } );
+ $('#email').css('font-weight', 'bold');
+ $('#email').animate({ fontWeight: 'normal' }, 2000, function() {
+ $(this).val('');
+ }).val('Email sent');
+ },
+ dirname:function(path) {
+ return path.replace(/\\/g,'/').replace(/\/[^\/]*$/, '');
+ }
+}
+
+$(document).ready(function() {
+
+ $('a.share').live('click', function(event) {
+ event.stopPropagation();
+ if ($(this).data('item-type') !== undefined && $(this).data('item') !== undefined) {
+ var itemType = $(this).data('item-type');
+ var itemSource = $(this).data('item');
+ var appendTo = $(this).parent().parent();
+ var privateLink = false;
+ var possiblePermissions = $(this).data('possible-permissions');
+ if ($(this).data('private-link') !== undefined && $(this).data('private-link') == true) {
+ privateLink = true;
+ }
+ if (OC.Share.droppedDown) {
+ if (itemSource != $('#dropdown').data('item')) {
+ OC.Share.hideDropDown(function () {
+ OC.Share.showDropDown(itemType, itemSource, appendTo, privateLink, possiblePermissions);
+ });
+ } else {
+ OC.Share.hideDropDown();
+ }
+ } else {
+ OC.Share.showDropDown(itemType, itemSource, appendTo, privateLink, possiblePermissions);
+ }
+ }
+ });
+
+ $(this).click(function(event) {
+ if (OC.Share.droppedDown && !($(event.target).hasClass('drop')) && $('#dropdown').has(event.target).length === 0) {
+ OC.Share.hideDropDown();
+ }
+ });
+
+ $('#shareWithList li').live('mouseenter', function(event) {
+ // Show permissions and unshare button
+ $(':hidden', this).filter(':not(.cruds)').show();
+ });
+
+ $('#shareWithList li').live('mouseleave', function(event) {
+ // Hide permissions and unshare button
+ if (!$('.cruds', this).is(':visible')) {
+ $('a', this).hide();
+ if (!$('input[name="edit"]', this).is(':checked')) {
+ $('input:[type=checkbox]', this).hide();
+ $('label', this).hide();
+ }
+ } else {
+ $('a.unshare', this).hide();
+ }
+ });
+
+ $('.showCruds').live('click', function() {
+ $(this).parent().find('.cruds').toggle();
+ });
+
+ $('.unshare').live('click', function() {
+ var li = $(this).parent();
+ var shareType = $(li).data('share-type');
+ var shareWith = $(li).data('share-with');
+ OC.Share.unshare($('#dropdown').data('item-type'), $('#dropdown').data('item-source'), shareType, shareWith, function() {
+ $(li).remove();
+ var index = OC.Share.itemShares[shareType].indexOf(shareWith);
+ OC.Share.itemShares[shareType].splice(index, 1);
+ });
+ });
+
+ $('.permissions').live('change', function() {
+ if ($(this).attr('name') == 'edit') {
+ var li = $(this).parent().parent()
+ var checkboxes = $('.permissions', li);
+ var checked = $(this).is(':checked');
+ // Check/uncheck Create, Update, and Delete checkboxes if Edit is checked/unck
+ $(checkboxes).filter('input[name="create"]').attr('checked', checked);
+ $(checkboxes).filter('input[name="update"]').attr('checked', checked);
+ $(checkboxes).filter('input[name="delete"]').attr('checked', checked);
+ } else {
+ 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')) {
+ $(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')) {
+ $(checkboxes).filter('input[name="edit"]').attr('checked', true);
+ }
+ }
+ var permissions = OC.Share.PERMISSION_READ;
+ $(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);
+ });
+
+ $('#privateLinkCheckbox').live('change', function() {
+ var itemType = $('#dropdown').data('item-type');
+ var item = $('#dropdown').data('item');
+ if (this.checked) {
+ // Create a private link
+ OC.Share.share(itemType, item, OC.Share.SHARE_TYPE_PRIVATE_LINK, 0, 0, function(token) {
+ OC.Share.showPrivateLink(item, 'foo');
+ // Change icon
+ OC.Share.icons[item] = OC.imagePath('core', 'actions/public');
+ });
+ } else {
+ // Delete private link
+ OC.Share.unshare(item, 'public', function() {
+ OC.Share.hidePrivateLink();
+ // Change icon
+ if (OC.Share.itemUsers || OC.Share.itemGroups) {
+ OC.Share.icons[item] = OC.imagePath('core', 'actions/shared');
+ } else {
+ OC.Share.icons[item] = OC.imagePath('core', 'actions/share');
+ }
+ });
+ }
+ });
+
+ $('#privateLinkText').live('click', function() {
+ $(this).focus();
+ $(this).select();
+ });
+
+ $('#emailPrivateLink').live('submit', function() {
+ OC.Share.emailPrivateLink();
+ });
+});
diff --git a/core/l10n/ar.php b/core/l10n/ar.php
index 8a6ba6e9a78..4b694f33bd8 100644
--- a/core/l10n/ar.php
+++ b/core/l10n/ar.php
@@ -1,5 +1,5 @@
<?php $TRANSLATIONS = array(
-"Owncloud password reset" => "استرجاع كلمة السر",
+"Settings" => "تعديلات",
"Use the following link to reset your password: {link}" => "استخدم هذه الوصلة لاسترجاع كلمة السر: {link}",
"You will receive a link to reset your password via Email." => "سو٠نرسل لك بريد يحتوي على وصلة لتجديد كلمة السر.",
"Requested" => "تم طلب",
@@ -29,7 +29,6 @@
"Finish setup" => "انهاء التعديلات",
"web services under your control" => "خدمات الوب تحت تصرÙÙƒ",
"Log out" => "الخروج",
-"Settings" => "تعديلات",
"Lost your password?" => "هل نسيت كلمة السر؟",
"remember" => "تذكر",
"Log in" => "أدخل",
diff --git a/core/l10n/bg_BG.php b/core/l10n/bg_BG.php
index 46047a35350..19b32a700ba 100644
--- a/core/l10n/bg_BG.php
+++ b/core/l10n/bg_BG.php
@@ -1,4 +1,24 @@
<?php $TRANSLATIONS = array(
+"This category already exists: " => "КатегориÑта вече ÑъщеÑтвува:",
+"Settings" => "ÐаÑтройки",
+"January" => "Януари",
+"February" => "Февруари",
+"March" => "Март",
+"April" => "Ðприл",
+"May" => "Май",
+"June" => "Юни",
+"July" => "Юли",
+"August" => "ÐвгуÑÑ‚",
+"September" => "Септември",
+"October" => "Октомври",
+"November" => "Ðоември",
+"December" => "Декември",
+"Cancel" => "Отказ",
+"No" => "Ðе",
+"Yes" => "Да",
+"Ok" => "Добре",
+"No categories selected for deletion." => "ÐÑма избрани категории за изтриване",
+"Error" => "Грешка",
"You will receive a link to reset your password via Email." => "Ще получите връзка за нулиране на паролата Ви.",
"Requested" => "ЗаÑвено",
"Login failed!" => "Входа пропадна!",
@@ -12,7 +32,10 @@
"Apps" => "Програми",
"Admin" => "Ðдмин",
"Help" => "Помощ",
+"Access forbidden" => "ДоÑтъпът е забранен",
"Cloud not found" => "облакът не намерен",
+"Edit categories" => "Редактиране на категориите",
+"Add" => "ДобавÑне",
"Create an <strong>admin account</strong>" => "Създаване на <strong>админ профил</strong>",
"Password" => "Парола",
"Advanced" => "Разширено",
@@ -25,9 +48,9 @@
"Database host" => "ХоÑÑ‚ за базата",
"Finish setup" => "Завършване на наÑтройките",
"Log out" => "Изход",
-"Settings" => "ÐаÑтройки",
"Lost your password?" => "Забравена парола?",
"remember" => "запомни",
+"Log in" => "Вход",
"You are logged out." => "Вие излÑзохте.",
"prev" => "пред.",
"next" => "Ñледващо"
diff --git a/core/l10n/ca.php b/core/l10n/ca.php
index baeb8bd55bb..9be2fe6adfc 100644
--- a/core/l10n/ca.php
+++ b/core/l10n/ca.php
@@ -2,7 +2,26 @@
"Application name not provided." => "No s'ha facilitat cap nom per l'aplicació.",
"No category to add?" => "No voleu afegir cap categoria?",
"This category already exists: " => "Aquesta categoria ja existeix:",
-"Owncloud password reset" => "Restableix la contrasenya d'Owncloud",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Arranjament",
+"January" => "Gener",
+"February" => "Febrer",
+"March" => "Març",
+"April" => "Abril",
+"May" => "Maig",
+"June" => "Juny",
+"July" => "Juliol",
+"August" => "Agost",
+"September" => "Setembre",
+"October" => "Octubre",
+"November" => "Novembre",
+"December" => "Desembre",
+"Cancel" => "Cancel·la",
+"No" => "No",
+"Yes" => "Sí",
+"Ok" => "D'acord",
+"No categories selected for deletion." => "No hi ha categories per eliminar.",
+"Error" => "Error",
"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.",
@@ -36,7 +55,6 @@
"Finish setup" => "Acaba la configuració",
"web services under your control" => "controleu els vostres serveis web",
"Log out" => "Surt",
-"Settings" => "Arranjament",
"Lost your password?" => "Heu perdut la contrasenya?",
"remember" => "recorda'm",
"Log in" => "Inici de sessió",
diff --git a/core/l10n/cs_CZ.php b/core/l10n/cs_CZ.php
index 4ad9508f813..7daeb52e631 100644
--- a/core/l10n/cs_CZ.php
+++ b/core/l10n/cs_CZ.php
@@ -2,7 +2,26 @@
"Application name not provided." => "Jméno aplikace nezadáno.",
"No category to add?" => "Žádná kategorie k přidání?",
"This category already exists: " => "Tato kategorie již existuje:",
-"Owncloud password reset" => "Reset hesla Owncloud",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Nastavení",
+"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",
+"Cancel" => "Zrušit",
+"No" => "Ne",
+"Yes" => "Ano",
+"Ok" => "Budiž",
+"No categories selected for deletion." => "Žádné kategorie nebyly vybrány ke smazání.",
+"Error" => "Chyba",
"ownCloud password reset" => "Reset hesla pro ownCloud",
"Use the following link to reset your password: {link}" => "Heslo vyresetujete použitím následujícího odkazu: {link}",
"You will receive a link to reset your password via Email." => "Bude Vám zaslán odkaz pro obnovu hesla",
@@ -36,7 +55,6 @@
"Finish setup" => "DokonÄit instalaci",
"web services under your control" => "webové služby pod Vaší kontrolou",
"Log out" => "Odhlásit se",
-"Settings" => "Nastavení",
"Lost your password?" => "Zapomenuté heslo?",
"remember" => "zapamatovat si",
"Log in" => "Login",
diff --git a/core/l10n/da.php b/core/l10n/da.php
index f7b5b48f6fb..5e62b5b95db 100644
--- a/core/l10n/da.php
+++ b/core/l10n/da.php
@@ -2,7 +2,26 @@
"Application name not provided." => "Applikationens navn ikke medsendt",
"No category to add?" => "Ingen kategori at tilføje?",
"This category already exists: " => "Denne kategori eksisterer allerede: ",
-"Owncloud password reset" => "Nulstil adgangskode til Owncloud",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Indstillinger",
+"January" => "Januar",
+"February" => "Februar",
+"March" => "Marts",
+"April" => "April",
+"May" => "Maj",
+"June" => "Juni",
+"July" => "Juli",
+"August" => "August",
+"September" => "September",
+"October" => "Oktober",
+"November" => "November",
+"December" => "December",
+"Cancel" => "Fortryd",
+"No" => "Nej",
+"Yes" => "Ja",
+"Ok" => "OK",
+"No categories selected for deletion." => "Ingen kategorier valgt",
+"Error" => "Fejl",
"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.",
@@ -36,7 +55,6 @@
"Finish setup" => "Afslut opsætning",
"web services under your control" => "Webtjenester under din kontrol",
"Log out" => "Log ud",
-"Settings" => "Indstillinger",
"Lost your password?" => "Mistet dit kodeord?",
"remember" => "husk",
"Log in" => "Log ind",
diff --git a/core/l10n/de.php b/core/l10n/de.php
index 9fcd5c84966..9ed2d617828 100644
--- a/core/l10n/de.php
+++ b/core/l10n/de.php
@@ -2,45 +2,63 @@
"Application name not provided." => "Applikationsname nicht angegeben",
"No category to add?" => "Keine Kategorie hinzuzufügen?",
"This category already exists: " => "Kategorie existiert bereits:",
-"Owncloud password reset" => "ownCloud Passwort zurücksetzen",
-"ownCloud password reset" => "ownCloud Passwort zurücksetzen",
-"Use the following link to reset your password: {link}" => "Nutze folgenden Link, um dein Passwort zurückzusetzen: {link}",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Einstellungen",
+"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",
+"Cancel" => "Abbrechen",
+"No" => "Nein",
+"Yes" => "Ja",
+"Ok" => "OK",
+"No categories selected for deletion." => "Keine Kategorien zum Löschen angegeben.",
+"Error" => "Fehler",
+"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, um Ihr Passwort per E-Mail zurückzusetzen.",
"Requested" => "Angefragt",
"Login failed!" => "Login fehlgeschlagen!",
-"Username" => "Nutzername",
+"Username" => "Benutzername",
"Request reset" => "Anfrage zurückgesetzt",
"Your password was reset" => "Ihr Passwort wurde zurückgesetzt.",
"To login page" => "Zur Login-Seite",
"New password" => "Neues Passwort",
"Reset password" => "Passwort zurücksetzen",
"Personal" => "Persönlich",
-"Users" => "Nutzer",
+"Users" => "Benutzer",
"Apps" => "Anwendungen",
-"Admin" => "Verwaltung",
+"Admin" => "Admin",
"Help" => "Hilfe",
-"Access forbidden" => "Zugang verboten",
-"Cloud not found" => "Cloud nicht verfügbar",
-"Edit categories" => "Kategorien ändern",
+"Access forbidden" => "Zugriff verboten",
+"Cloud not found" => "Cloud nicht gefunden",
+"Edit categories" => "Kategorien bearbeiten",
"Add" => "Hinzufügen",
-"Create an <strong>admin account</strong>" => "<strong>Admin-Konto</strong> anlegen",
+"Create an <strong>admin account</strong>" => "<strong>Administrator-Konto</strong> anlegen",
"Password" => "Passwort",
"Advanced" => "Erweitert",
"Data folder" => "Datenverzeichnis",
"Configure the database" => "Datenbank einrichten",
"will be used" => "wird genutzt",
-"Database user" => "Datenbanknutzer",
-"Database password" => "Datenbankpasswort",
-"Database name" => "Datenbankname",
+"Database user" => "Datenbank-Benutzer",
+"Database password" => "Datenbank-Passwort",
+"Database name" => "Datenbank-Name",
"Database host" => "Datenbank-Host",
"Finish setup" => "Installation abschließen",
-"web services under your control" => "web services under your control",
+"web services under your control" => "Web-Services unter Ihrer Kontrolle",
"Log out" => "Abmelden",
-"Settings" => "Einstellungen",
"Lost your password?" => "Passwort vergessen?",
"remember" => "merken",
"Log in" => "Einloggen",
-"You are logged out." => "Abgemeldet",
+"You are logged out." => "Sie wurden abgemeldet.",
"prev" => "Zurück",
"next" => "Weiter"
);
diff --git a/core/l10n/el.php b/core/l10n/el.php
index 1adf14af967..d8f32fb51e0 100644
--- a/core/l10n/el.php
+++ b/core/l10n/el.php
@@ -2,7 +2,26 @@
"Application name not provided." => "Δε Ï€ÏοσδιοÏίστηκε όνομα εφαÏμογής",
"No category to add?" => "Δεν έχετε να Ï€Ïοστέσθέσεται μια κα",
"This category already exists: " => "Αυτή η κατηγοÏία υπάÏχει ήδη",
-"Owncloud password reset" => "Επανέκδοση ÎºÏ‰Î´Î¹ÎºÎ¿Ï Î³Î¹Î± το Owncloud",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Ρυθμίσεις",
+"January" => "ΙανουάÏιος",
+"February" => "ΦεβÏουάÏιος",
+"March" => "ΜάÏτιος",
+"April" => "ΑπÏίλιος",
+"May" => "Μάϊος",
+"June" => "ΙοÏνιος",
+"July" => "ΙοÏλιος",
+"August" => "ΑÏγουστος",
+"September" => "ΣεπτέμβÏιος",
+"October" => "ΟκτώβÏιος",
+"November" => "ÎοέμβÏιος",
+"December" => "ΔεκέμβÏιος",
+"Cancel" => "ΑκÏÏωση",
+"No" => "Όχι",
+"Yes" => "Îαι",
+"Ok" => "Οκ",
+"No categories selected for deletion." => "Δεν επιλέχτηκαν κατηγοÏίες για διαγÏαφή",
+"Error" => "Σφάλμα",
"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." => "Θα λάβετε ένα σÏνδεσμο για να επαναφέÏετε τον κωδικό Ï€Ïόσβασής σας μέσω ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου.",
@@ -36,7 +55,6 @@
"Finish setup" => "ΟλοκλήÏωση εγκατάστασης",
"web services under your control" => "ΥπηÏεσίες web υπό τον έλεγχό σας",
"Log out" => "ΑποσÏνδεση",
-"Settings" => "Ρυθμίσεις",
"Lost your password?" => "Ξεχάσατε τον κωδικό σας;",
"remember" => "να με θυμάσαι",
"Log in" => "Είσοδος",
diff --git a/core/l10n/eo.php b/core/l10n/eo.php
index 0ae2aeac691..f5e5ca9d0e1 100644
--- a/core/l10n/eo.php
+++ b/core/l10n/eo.php
@@ -1,5 +1,28 @@
<?php $TRANSLATIONS = array(
-"Owncloud password reset" => "La pasvorto de Owncloud estas restarigita",
+"Application name not provided." => "Nomo de aplikaĵo ne proviziiÄis.",
+"No category to add?" => "Ĉu neniu kategorio estas aldonota?",
+"This category already exists: " => "Ĉi tiu kategorio jam ekzistas: ",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Agordo",
+"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",
+"Cancel" => "Nuligi",
+"No" => "Ne",
+"Yes" => "Jes",
+"Ok" => "Akcepti",
+"No categories selected for deletion." => "Neniu kategorio elektiÄis por forigo.",
+"Error" => "Eraro",
+"ownCloud password reset" => "La pasvorto de ownCloud restariÄis.",
"Use the following link to reset your password: {link}" => "Uzu la jenan ligilon por restarigi vian pasvorton: {link}",
"You will receive a link to reset your password via Email." => "Vi ricevos ligilon retpoÅte por rekomencigi vian pasvorton.",
"Requested" => "Petita",
@@ -15,7 +38,10 @@
"Apps" => "Aplikaĵoj",
"Admin" => "Administranto",
"Help" => "Helpo",
+"Access forbidden" => "Aliro estas malpermesata",
"Cloud not found" => "La nubo ne estas trovita",
+"Edit categories" => "Redakti kategoriojn",
+"Add" => "Aldoni",
"Create an <strong>admin account</strong>" => "Krei <strong>administran konton</strong>",
"Password" => "Pasvorto",
"Advanced" => "Progresinta",
@@ -29,7 +55,6 @@
"Finish setup" => "Fini la instalon",
"web services under your control" => "TTT-servoj sub via kontrolo",
"Log out" => "Elsaluti",
-"Settings" => "Agordo",
"Lost your password?" => "Ĉu vi perdis vian pasvorton?",
"remember" => "memori",
"Log in" => "Ensaluti",
diff --git a/core/l10n/es.php b/core/l10n/es.php
index 2d6068ed5f8..8766228ba89 100644
--- a/core/l10n/es.php
+++ b/core/l10n/es.php
@@ -1,8 +1,27 @@
<?php $TRANSLATIONS = array(
"Application name not provided." => "Nombre de la aplicación no provisto.",
-"No category to add?" => "¿Ninguna categoría para agregar?",
+"No category to add?" => "¿Ninguna categoría para añadir?",
"This category already exists: " => "Esta categoría ya existe: ",
-"Owncloud password reset" => "Restablecer contraseña de ownCloud",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Ajustes",
+"January" => "Enero",
+"February" => "Febrero",
+"March" => "Marzo",
+"April" => "Abril",
+"May" => "Mayo",
+"June" => "Junio",
+"July" => "Julio",
+"August" => "Agosto",
+"September" => "Septiembre",
+"October" => "Octubre",
+"November" => "Noviembre",
+"December" => "Diciembre",
+"Cancel" => "Cancelar",
+"No" => "No",
+"Yes" => "Sí",
+"Ok" => "Aceptar",
+"No categories selected for deletion." => "No hay categorías seleccionadas para borrar.",
+"Error" => "Fallo",
"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",
@@ -36,7 +55,6 @@
"Finish setup" => "Completar la instalación",
"web services under your control" => "servicios web bajo tu control",
"Log out" => "Salir",
-"Settings" => "Ajustes",
"Lost your password?" => "¿Has perdido tu contraseña?",
"remember" => "recuérdame",
"Log in" => "Entrar",
diff --git a/core/l10n/et_EE.php b/core/l10n/et_EE.php
index 7ecfb278afd..734021605ca 100644
--- a/core/l10n/et_EE.php
+++ b/core/l10n/et_EE.php
@@ -2,7 +2,26 @@
"Application name not provided." => "Rakenduse nime pole sisestatud.",
"No category to add?" => "Pole kategooriat, mida lisada?",
"This category already exists: " => "See kategooria on juba olemas: ",
-"Owncloud password reset" => "Owncloud parooli taastamine",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Seaded",
+"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",
+"Cancel" => "Loobu",
+"No" => "Ei",
+"Yes" => "Jah",
+"Ok" => "Ok",
+"No categories selected for deletion." => "Kustutamiseks pole kategooriat valitud.",
+"Error" => "Viga",
"ownCloud password reset" => "ownCloud parooli taastamine",
"Use the following link to reset your password: {link}" => "Kasuta järgnevat linki oma parooli taastamiseks: {link}",
"You will receive a link to reset your password via Email." => "Sinu parooli taastamise link saadetakse sulle e-postile.",
@@ -36,7 +55,6 @@
"Finish setup" => "Lõpeta seadistamine",
"web services under your control" => "veebiteenused sinu kontrolli all",
"Log out" => "Logi välja",
-"Settings" => "Seaded",
"Lost your password?" => "Kaotasid oma parooli?",
"remember" => "pea meeles",
"Log in" => "Logi sisse",
diff --git a/core/l10n/eu.php b/core/l10n/eu.php
index 3159350183f..2e5a2c00e2a 100644
--- a/core/l10n/eu.php
+++ b/core/l10n/eu.php
@@ -2,7 +2,26 @@
"Application name not provided." => "Aplikazioaren izena falta da",
"No category to add?" => "Ez dago gehitzeko kategoriarik?",
"This category already exists: " => "Kategoria hau dagoeneko existitzen da:",
-"Owncloud password reset" => "Owncloudeko pasahitza berrezarri",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Ezarpenak",
+"January" => "Urtarrila",
+"February" => "Otsaila",
+"March" => "Martxoa",
+"April" => "Apirila",
+"May" => "Maiatza",
+"June" => "Ekaina",
+"July" => "Uztaila",
+"August" => "Abuztua",
+"September" => "Iraila",
+"October" => "Urria",
+"November" => "Azaroa",
+"December" => "Abendua",
+"Cancel" => "Ezeztatu",
+"No" => "Ez",
+"Yes" => "Bai",
+"Ok" => "Ados",
+"No categories selected for deletion." => "Ez da ezabatzeko kategoriarik hautatu.",
+"Error" => "Errorea",
"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.",
@@ -36,7 +55,6 @@
"Finish setup" => "Bukatu konfigurazioa",
"web services under your control" => "web zerbitzuak zure kontrolpean",
"Log out" => "Saioa bukatu",
-"Settings" => "Ezarpenak",
"Lost your password?" => "Galdu duzu pasahitza?",
"remember" => "gogoratu",
"Log in" => "Hasi saioa",
diff --git a/core/l10n/fa.php b/core/l10n/fa.php
index e3cc3feddd8..5fe98629ba2 100644
--- a/core/l10n/fa.php
+++ b/core/l10n/fa.php
@@ -2,7 +2,26 @@
"Application name not provided." => "نام برنامه پیدا نشد",
"No category to add?" => "آیا گروه دیگری برای اÙزودن ندارید",
"This category already exists: " => "این گروه از قبل اضاÙÙ‡ شده",
-"Owncloud password reset" => "گذرواژه ابرهای شما تغییرکرد",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "تنظیمات",
+"January" => "ژانویه",
+"February" => "Ùبریه",
+"March" => "مارس",
+"April" => "آوریل",
+"May" => "می",
+"June" => "ژوئن",
+"July" => "جولای",
+"August" => "آگوست",
+"September" => "سپتامبر",
+"October" => "اکتبر",
+"November" => "نوامبر",
+"December" => "دسامبر",
+"Cancel" => "منصر٠شدن",
+"No" => "نه",
+"Yes" => "بله",
+"Ok" => "قبول",
+"No categories selected for deletion." => "هیج دسته ای برای پاک شدن انتخاب نشده است",
+"Error" => "خطا",
"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." => "شما یک نامه الکترونیکی حاوی یک لینک جهت بازسازی گذرواژه دریاÙت خواهید کرد.",
@@ -36,7 +55,6 @@
"Finish setup" => "اتمام نصب",
"web services under your control" => "سرویس وب تحت کنترل شما",
"Log out" => "خروج",
-"Settings" => "تنظیمات",
"Lost your password?" => "آیا گذرواژه تان را به یاد نمی آورید؟",
"remember" => "بیاد آوری",
"Log in" => "ورود",
diff --git a/core/l10n/fi_FI.php b/core/l10n/fi_FI.php
index 6dc65ed4955..64bb4dca631 100644
--- a/core/l10n/fi_FI.php
+++ b/core/l10n/fi_FI.php
@@ -2,7 +2,25 @@
"Application name not provided." => "Sovelluksen nimeä ei määritelty.",
"No category to add?" => "Ei lisättävää luokkaa?",
"This category already exists: " => "Tämä luokka on jo olemassa: ",
-"Owncloud password reset" => "Owncloud-salasanan nollaus",
+"Settings" => "Asetukset",
+"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",
+"Cancel" => "Peru",
+"No" => "Ei",
+"Yes" => "Kyllä",
+"Ok" => "Ok",
+"No categories selected for deletion." => "Luokkia ei valittu poistettavaksi.",
+"Error" => "Virhe",
"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.",
@@ -36,7 +54,6 @@
"Finish setup" => "Viimeistele asennus",
"web services under your control" => "verkkopalvelut hallinnassasi",
"Log out" => "Kirjaudu ulos",
-"Settings" => "Asetukset",
"Lost your password?" => "Unohditko salasanasi?",
"remember" => "muista",
"Log in" => "Kirjaudu sisään",
diff --git a/core/l10n/fr.php b/core/l10n/fr.php
index 8459fbbb664..43917917ad8 100644
--- a/core/l10n/fr.php
+++ b/core/l10n/fr.php
@@ -2,7 +2,26 @@
"Application name not provided." => "Nom de l'application non fourni.",
"No category to add?" => "Pas de catégorie à ajouter ?",
"This category already exists: " => "Cette catégorie existe déjà : ",
-"Owncloud password reset" => "Réinitialisation de votre mot de passe Owncloud",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Paramètres",
+"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",
+"Cancel" => "Annulé",
+"No" => "Non",
+"Yes" => "Oui",
+"Ok" => "Ok",
+"No categories selected for deletion." => "Aucune catégorie sélectionnée pour suppression",
+"Error" => "Erreur",
"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",
@@ -29,14 +48,13 @@
"Data folder" => "Répertoire des données",
"Configure the database" => "Configurer la base de données",
"will be used" => "sera utilisé",
-"Database user" => "Utilisateur de la base de données",
+"Database user" => "Utilisateur pour la base de données",
"Database password" => "Mot de passe de la base de données",
"Database name" => "Nom de la base de données",
"Database host" => "Serveur de la base de données",
"Finish setup" => "Terminer l'installation",
"web services under your control" => "services web sous votre contrôle",
"Log out" => "Se déconnecter",
-"Settings" => "Paramètres",
"Lost your password?" => "Mot de passe perdu ?",
"remember" => "se souvenir de moi",
"Log in" => "Connexion",
diff --git a/core/l10n/gl.php b/core/l10n/gl.php
index 8d839a6ac6c..eeff78826f8 100644
--- a/core/l10n/gl.php
+++ b/core/l10n/gl.php
@@ -2,7 +2,26 @@
"Application name not provided." => "Non se indicou o nome do aplicativo.",
"No category to add?" => "Sen categoría que engadir?",
"This category already exists: " => "Esta categoría xa existe: ",
-"Owncloud password reset" => "Restablecemento do contrasinal de Owncloud",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Preferencias",
+"January" => "Xaneiro",
+"February" => "Febreiro",
+"March" => "Marzo",
+"April" => "Abril",
+"May" => "Maio",
+"June" => "Xuño",
+"July" => "Xullo",
+"August" => "Agosto",
+"September" => "Setembro",
+"October" => "Outubro",
+"November" => "Novembro",
+"December" => "Nadal",
+"Cancel" => "Cancelar",
+"No" => "Non",
+"Yes" => "Si",
+"Ok" => "Ok",
+"No categories selected for deletion." => "Non hai categorías seleccionadas para eliminar.",
+"Error" => "Erro",
"ownCloud password reset" => "Restablecer contrasinal de ownCloud",
"Use the following link to reset your password: {link}" => "Use a seguinte ligazón para restablecer o contrasinal: {link}",
"You will receive a link to reset your password via Email." => "Recibirá unha ligazón por correo electrónico para restablecer o contrasinal",
@@ -36,7 +55,6 @@
"Finish setup" => "Rematar configuración",
"web services under your control" => "servizos web baixo o seu control",
"Log out" => "Desconectar",
-"Settings" => "Preferencias",
"Lost your password?" => "Perdeu o contrasinal?",
"remember" => "lembrar",
"Log in" => "Conectar",
diff --git a/core/l10n/he.php b/core/l10n/he.php
index 1929681e066..f0a18103a8f 100644
--- a/core/l10n/he.php
+++ b/core/l10n/he.php
@@ -2,7 +2,25 @@
"Application name not provided." => "×©× ×”×™×™×©×•× ×œ× ×¡×•×¤×§.",
"No category to add?" => "×ין קטגוריה להוספה?",
"This category already exists: " => "קטגוריה ×–×ת כבר קיימת: ",
-"Owncloud password reset" => "×יפוס הססמה של ownCloud",
+"Settings" => "הגדרות",
+"January" => "ינו×ר",
+"February" => "פברו×ר",
+"March" => "מרץ",
+"April" => "×פריל",
+"May" => "מ××™",
+"June" => "יוני",
+"July" => "יולי",
+"August" => "×וגוסט",
+"September" => "ספטמבר",
+"October" => "×וקטובר",
+"November" => "נובמבר",
+"December" => "דצמבר",
+"Cancel" => "ביטול",
+"No" => "ל×",
+"Yes" => "כן",
+"Ok" => "בסדר",
+"No categories selected for deletion." => "×œ× × ×‘×—×¨×• קטגוריות למחיקה",
+"Error" => "שגי××”",
"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." => "יישלח לתיבת הדו×״ל שלך קישור ל×יפוס הססמה.",
@@ -36,7 +54,6 @@
"Finish setup" => "×¡×™×•× ×”×ª×§× ×”",
"web services under your control" => "שירותי רשת בשליטתך",
"Log out" => "התנתקות",
-"Settings" => "הגדרות",
"Lost your password?" => "שכחת ×ת ססמתך?",
"remember" => "שמירת הססמה",
"Log in" => "כניסה",
diff --git a/core/l10n/hr.php b/core/l10n/hr.php
index 92be8048045..d4e773afc1e 100644
--- a/core/l10n/hr.php
+++ b/core/l10n/hr.php
@@ -2,7 +2,26 @@
"Application name not provided." => "Ime aplikacije nije pribavljeno.",
"No category to add?" => "Nemate kategorija koje možete dodati?",
"This category already exists: " => "Ova kategorija već postoji: ",
-"Owncloud password reset" => "ownCloud resetiranje lozinke",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Postavke",
+"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",
+"Cancel" => "Odustani",
+"No" => "Ne",
+"Yes" => "Da",
+"Ok" => "U redu",
+"No categories selected for deletion." => "Nema odabranih kategorija za brisanje.",
+"Error" => "Pogreška",
"ownCloud password reset" => "ownCloud resetiranje lozinke",
"Use the following link to reset your password: {link}" => "Koristite ovaj link da biste poništili lozinku: {link}",
"You will receive a link to reset your password via Email." => "Primit ćete link kako biste poništili zaporku putem e-maila.",
@@ -36,7 +55,6 @@
"Finish setup" => "Završi postavljanje",
"web services under your control" => "web usluge pod vašom kontrolom",
"Log out" => "Odjava",
-"Settings" => "Postavke",
"Lost your password?" => "Izgubili ste lozinku?",
"remember" => "zapamtiti",
"Log in" => "Prijava",
diff --git a/core/l10n/hu_HU.php b/core/l10n/hu_HU.php
index fc1337d8def..dbfe2781d5f 100644
--- a/core/l10n/hu_HU.php
+++ b/core/l10n/hu_HU.php
@@ -2,45 +2,63 @@
"Application name not provided." => "Alkalmazásnév hiányzik",
"No category to add?" => "Nincs hozzáadandó kategória?",
"This category already exists: " => "Ez a kategória már létezik",
-"Owncloud password reset" => "ownCloud jelszó-visszaállítás",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Beállítások",
+"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",
+"Cancel" => "Mégse",
+"No" => "Nem",
+"Yes" => "Igen",
+"Ok" => "Ok",
+"No categories selected for deletion." => "Nincs törlésre jelölt kategória",
+"Error" => "Hiba",
"ownCloud password reset" => "ownCloud jelszó-visszaállítás",
"Use the following link to reset your password: {link}" => "Használja az alábbi linket a jelszó-visszaállításhoz: {link}",
"You will receive a link to reset your password via Email." => "Egy e-mailben kap értesítést a jelszóváltoztatás módjáról.",
-"Requested" => "Kért",
+"Requested" => "Kérés elküldve",
"Login failed!" => "Belépés sikertelen!",
-"Username" => "Felhasználói név",
+"Username" => "Felhasználónév",
"Request reset" => "Visszaállítás igénylése",
-"Your password was reset" => "Jelszó megváltoztatásra került",
+"Your password was reset" => "Jelszó megváltoztatva",
"To login page" => "A bejelentkező ablakhoz",
"New password" => "Új jelszó",
-"Reset password" => "Jelszó beállítás",
+"Reset password" => "Jelszó-visszaállítás",
"Personal" => "Személyes",
"Users" => "Felhasználók",
"Apps" => "Alkalmazások",
-"Admin" => "Adminisztráció",
+"Admin" => "Admin",
"Help" => "Súgó",
"Access forbidden" => "Hozzáférés tiltva",
-"Cloud not found" => "Nem talált felhő",
+"Cloud not found" => "A felhő nem található",
"Edit categories" => "Kategóriák szerkesztése",
"Add" => "Hozzáadás",
-"Create an <strong>admin account</strong>" => "<strong>Adminisztrációs fiók</strong> létrehozása",
+"Create an <strong>admin account</strong>" => "<strong>Rendszergazdafiók</strong> létrehozása",
"Password" => "Jelszó",
-"Advanced" => "Fejlett",
-"Data folder" => "Adat könyvtár",
+"Advanced" => "Haladó",
+"Data folder" => "Adatkönyvtár",
"Configure the database" => "Adatbázis konfigurálása",
"will be used" => "használva lesz",
-"Database user" => "Adatbázis felhasználó",
+"Database user" => "Adatbázis felhasználónév",
"Database password" => "Adatbázis jelszó",
"Database name" => "Adatbázis név",
"Database host" => "Adatbázis szerver",
-"Finish setup" => "Beállítások befejezése",
+"Finish setup" => "Beállítás befejezése",
"web services under your control" => "webszolgáltatások az irányításod alatt",
"Log out" => "Kilépés",
-"Settings" => "Beállítások",
"Lost your password?" => "Elfelejtett jelszó?",
-"remember" => "emlékezni",
+"remember" => "emlékezzen",
"Log in" => "Bejelentkezés",
-"You are logged out." => "Kilépés sikerült.",
+"You are logged out." => "Kilépett.",
"prev" => "Előző",
"next" => "Következő"
);
diff --git a/core/l10n/ia.php b/core/l10n/ia.php
index 97e8dfc147b..e202daafa32 100644
--- a/core/l10n/ia.php
+++ b/core/l10n/ia.php
@@ -1,6 +1,6 @@
<?php $TRANSLATIONS = array(
"This category already exists: " => "Iste categoria jam existe:",
-"Owncloud password reset" => "Reinitialisation del contrasigno de Owncloud",
+"Settings" => "Configurationes",
"ownCloud password reset" => "Reinitialisation del contrasigno de ownCLoud",
"Requested" => "Requestate",
"Login failed!" => "Initio de session fallite!",
@@ -31,7 +31,6 @@
"Database host" => "Hospite de base de datos",
"web services under your control" => "servicios web sub tu controlo",
"Log out" => "Clauder le session",
-"Settings" => "Configurationes",
"Lost your password?" => "Tu perdeva le contrasigno?",
"remember" => "memora",
"Log in" => "Aperir session",
diff --git a/core/l10n/id.php b/core/l10n/id.php
index f9fa7d2bb9b..296e2d62a4a 100644
--- a/core/l10n/id.php
+++ b/core/l10n/id.php
@@ -2,7 +2,7 @@
"Application name not provided." => "Nama aplikasi tidak diberikan.",
"No category to add?" => "Tidak ada kategori yang akan ditambahkan?",
"This category already exists: " => "Kategori ini sudah ada:",
-"Owncloud password reset" => "Reset password Owncloud",
+"Settings" => "Setelan",
"ownCloud password reset" => "reset password ownCloud",
"Use the following link to reset your password: {link}" => "Gunakan tautan berikut untuk mereset password anda: {link}",
"You will receive a link to reset your password via Email." => "Anda akan mendapatkan link untuk mereset password anda lewat Email.",
@@ -36,7 +36,6 @@
"Finish setup" => "Selesaikan instalasi",
"web services under your control" => "web service dibawah kontrol anda",
"Log out" => "Keluar",
-"Settings" => "Setelan",
"Lost your password?" => "Lupa password anda?",
"remember" => "selalu login",
"Log in" => "Masuk",
diff --git a/core/l10n/it.php b/core/l10n/it.php
index ce2352f0335..1c0bf94ca71 100644
--- a/core/l10n/it.php
+++ b/core/l10n/it.php
@@ -2,7 +2,26 @@
"Application name not provided." => "Nome dell'applicazione non fornito.",
"No category to add?" => "Nessuna categoria da aggiungere?",
"This category already exists: " => "Questa categoria esiste già: ",
-"Owncloud password reset" => "Ripristino password di Owncloud",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Impostazioni",
+"January" => "Gennaio",
+"February" => "Febbraio",
+"March" => "Marzo",
+"April" => "Aprile",
+"May" => "Maggio",
+"June" => "Giugno",
+"July" => "Luglio",
+"August" => "Agosto",
+"September" => "Settembre",
+"October" => "Ottobre",
+"November" => "Novembre",
+"December" => "Dicembre",
+"Cancel" => "Annulla",
+"No" => "No",
+"Yes" => "Sì",
+"Ok" => "Ok",
+"No categories selected for deletion." => "Nessuna categoria selezionata per l'eliminazione.",
+"Error" => "Errore",
"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",
@@ -36,7 +55,6 @@
"Finish setup" => "Termina la configurazione",
"web services under your control" => "servizi web nelle tue mani",
"Log out" => "Esci",
-"Settings" => "Impostazioni",
"Lost your password?" => "Hai perso la password?",
"remember" => "ricorda",
"Log in" => "Accedi",
diff --git a/core/l10n/ja_JP.php b/core/l10n/ja_JP.php
index 50b8e9e616e..5f9b9da33a6 100644
--- a/core/l10n/ja_JP.php
+++ b/core/l10n/ja_JP.php
@@ -2,7 +2,26 @@
"Application name not provided." => "アプリケーションåã¯æä¾›ã•ã‚Œã¦ã„ã¾ã›ã‚“。",
"No category to add?" => "追加ã™ã‚‹ã‚«ãƒ†ã‚´ãƒªã¯ã‚ã‚Šã¾ã›ã‚“ã‹ï¼Ÿ",
"This category already exists: " => "ã“ã®ã‚«ãƒ†ã‚´ãƒªã¯ã™ã§ã«å­˜åœ¨ã—ã¾ã™: ",
-"Owncloud password reset" => "Owncloud ã®ãƒ‘スワードをリセット",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "設定",
+"January" => "1月",
+"February" => "2月",
+"March" => "3月",
+"April" => "4月",
+"May" => "5月",
+"June" => "6月",
+"July" => "7月",
+"August" => "8月",
+"September" => "9月",
+"October" => "10月",
+"November" => "11月",
+"December" => "12月",
+"Cancel" => "キャンセル",
+"No" => "ã„ã„ãˆ",
+"Yes" => "ã¯ã„",
+"Ok" => "OK",
+"No categories selected for deletion." => "削除ã™ã‚‹ã‚«ãƒ†ã‚´ãƒªãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“。",
+"Error" => "エラー",
"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." => "メールã§ãƒ‘スワードをリセットã™ã‚‹ãƒªãƒ³ã‚¯ãŒå±Šãã¾ã™ã€‚",
@@ -36,7 +55,6 @@
"Finish setup" => "セットアップを完了ã—ã¾ã™",
"web services under your control" => "管ç†ä¸‹ã«ã‚るウェブサービス",
"Log out" => "ログアウト",
-"Settings" => "設定",
"Lost your password?" => "パスワードを忘れã¾ã—ãŸã‹ï¼Ÿ",
"remember" => "パスワードを記憶ã™ã‚‹",
"Log in" => "ログイン",
diff --git a/core/l10n/ko.php b/core/l10n/ko.php
index 44396b94f81..5a330581ff1 100644
--- a/core/l10n/ko.php
+++ b/core/l10n/ko.php
@@ -2,7 +2,26 @@
"Application name not provided." => "ì‘ìš© í”„ë¡œê·¸ëž¨ì˜ ì´ë¦„ì´ ê·œì •ë˜ì–´ 있지 않습니다. ",
"No category to add?" => "추가할 카테고리가 없습니까?",
"This category already exists: " => "ì´ ì¹´í…Œê³ ë¦¬ëŠ” ì´ë¯¸ 존재합니다:",
-"Owncloud password reset" => "Owncloud 암호 재설정",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "설정",
+"January" => "1ì›”",
+"February" => "2ì›”",
+"March" => "3ì›”",
+"April" => "4ì›”",
+"May" => "5ì›”",
+"June" => "6ì›”",
+"July" => "7ì›”",
+"August" => "8ì›”",
+"September" => "9ì›”",
+"October" => "10ì›”",
+"November" => "11ì›”",
+"December" => "12ì›”",
+"Cancel" => "취소",
+"No" => "아니오",
+"Yes" => "예",
+"Ok" => "승ë½",
+"No categories selected for deletion." => "ì‚­ì œ 카테고리를 ì„ íƒí•˜ì§€ 않았습니다.",
+"Error" => "ì—러",
"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." => "ì „ìž ìš°íŽ¸ìœ¼ë¡œ 암호 재설정 ë§í¬ë¥¼ 보냈습니다.",
@@ -36,7 +55,6 @@
"Finish setup" => "설치 완료",
"web services under your control" => "내가 관리하는 웹 서비스",
"Log out" => "로그아웃",
-"Settings" => "설정",
"Lost your password?" => "암호를 잊으셨습니까?",
"remember" => "기억하기",
"Log in" => "로그ì¸",
diff --git a/core/l10n/lb.php b/core/l10n/lb.php
index dd942011384..eafdcc37370 100644
--- a/core/l10n/lb.php
+++ b/core/l10n/lb.php
@@ -2,7 +2,7 @@
"Application name not provided." => "Numm vun der Applikatioun ass net uginn.",
"No category to add?" => "Keng Kategorie fir bäizesetzen?",
"This category already exists: " => "Des Kategorie existéiert schonn:",
-"Owncloud password reset" => "Owncloud Passwuert reset",
+"Settings" => "Astellungen",
"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.",
@@ -36,7 +36,6 @@
"Finish setup" => "Installatioun ofschléissen",
"web services under your control" => "Web Servicer ënnert denger Kontroll",
"Log out" => "Ausloggen",
-"Settings" => "Astellungen",
"Lost your password?" => "Passwuert vergiess?",
"remember" => "verhalen",
"Log in" => "Log dech an",
diff --git a/core/l10n/lt_LT.php b/core/l10n/lt_LT.php
index 5dedfffabd1..f36f697b67c 100644
--- a/core/l10n/lt_LT.php
+++ b/core/l10n/lt_LT.php
@@ -1,6 +1,27 @@
<?php $TRANSLATIONS = array(
+"Application name not provided." => "Nepateiktas programos pavadinimas.",
+"No category to add?" => "NepridÄ—site jokios kategorijos?",
"This category already exists: " => "Tokia kategorija jau yra:",
-"Owncloud password reset" => "Owncloud slaptažodžio atkūrimas",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Nustatymai",
+"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",
+"Cancel" => "Atšaukti",
+"No" => "Ne",
+"Yes" => "Taip",
+"Ok" => "Gerai",
+"No categories selected for deletion." => "Trynimui nepasirinkta jokia kategorija.",
+"Error" => "Klaida",
"ownCloud password reset" => "ownCloud slaptažodžio atkūrimas",
"Use the following link to reset your password: {link}" => "Slaptažodio atkūrimui naudokite šią nuorodą: {link}",
"You will receive a link to reset your password via Email." => "Elektroniniu paštu gausite nuorodą, su kuria galėsite iš naujo nustatyti slaptažodį.",
@@ -34,7 +55,6 @@
"Finish setup" => "Baigti diegimÄ…",
"web services under your control" => "jūsų valdomos web paslaugos",
"Log out" => "Atsijungti",
-"Settings" => "Nustatymai",
"Lost your password?" => "Pamiršote slaptažodį?",
"remember" => "prisiminti",
"Log in" => "Prisijungti",
diff --git a/core/l10n/lv.php b/core/l10n/lv.php
new file mode 100644
index 00000000000..6435c501587
--- /dev/null
+++ b/core/l10n/lv.php
@@ -0,0 +1,35 @@
+<?php $TRANSLATIONS = array(
+"Settings" => "Iestatījumi",
+"Use the following link to reset your password: {link}" => "Izmantojiet šo linku lai mainītu paroli",
+"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.",
+"Requested" => "ObligÄts",
+"Login failed!" => "NeizdevÄs ielogoties.",
+"Username" => "LietotÄjvÄrds",
+"Request reset" => "Pieprasīt paroles maiņu",
+"Your password was reset" => "Jūsu parole tika nomainīta",
+"To login page" => "Uz ielogoÅ¡anÄs lapu",
+"New password" => "Jauna parole",
+"Reset password" => "Mainīt paroli",
+"Personal" => "Personīgi",
+"Users" => "LietotÄji",
+"Apps" => "AplikÄcijas",
+"Admin" => "Administrators",
+"Help" => "Palīdzība",
+"Cloud not found" => "MÄkonis netika atrasts",
+"Password" => "Parole",
+"Data folder" => "Datu mape",
+"Configure the database" => "NokonfigurÄ“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",
+"Lost your password?" => "AizmirsÄt paroli?",
+"remember" => "atcerēties",
+"Log in" => "Ielogoties",
+"You are logged out." => "Jūs esat veiksmīgi izlogojies.",
+"prev" => "iepriekÅ¡Ä“jÄ",
+"next" => "nÄkamÄ"
+);
diff --git a/core/l10n/mk.php b/core/l10n/mk.php
index 7baac36f390..af49a04f11c 100644
--- a/core/l10n/mk.php
+++ b/core/l10n/mk.php
@@ -2,7 +2,26 @@
"Application name not provided." => "Име за апликацијата не е доÑтавено.",
"No category to add?" => "Ðема категорија да Ñе додаде?",
"This category already exists: " => "Оваа категорија веќе поÑтои:",
-"Owncloud password reset" => "РеÑетирање на Owncloud лозинка",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "ПоÑтавки",
+"January" => "Јануари",
+"February" => "Февруари",
+"March" => "Март",
+"April" => "Ðприл",
+"May" => "Мај",
+"June" => "Јуни",
+"July" => "Јули",
+"August" => "ÐвгуÑÑ‚",
+"September" => "Септември",
+"October" => "Октомври",
+"November" => "Ðоември",
+"December" => "Декември",
+"Cancel" => "Откажи",
+"No" => "Ðе",
+"Yes" => "Да",
+"Ok" => "Во ред",
+"No categories selected for deletion." => "Ðе е одбрана категорија за бришење.",
+"Error" => "Грешка",
"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." => "Ќе добиете врÑка по е-пошта за да може да ја реÑетирате Вашата лозинка.",
@@ -36,7 +55,6 @@
"Finish setup" => "Заврши го подеÑувањето",
"web services under your control" => "веб ÑервиÑи под Ваша контрола",
"Log out" => "Одјава",
-"Settings" => "ПоÑтавки",
"Lost your password?" => "Ја заборавивте лозинката?",
"remember" => "запамти",
"Log in" => "Ðајава",
diff --git a/core/l10n/ms_MY.php b/core/l10n/ms_MY.php
index 5cf7a04b41d..25da7cd8622 100644
--- a/core/l10n/ms_MY.php
+++ b/core/l10n/ms_MY.php
@@ -1,5 +1,28 @@
<?php $TRANSLATIONS = array(
-"Owncloud password reset" => "Penetapan kata laluan Owncloud",
+"Application name not provided." => "nama applikasi tidak disediakan",
+"No category to add?" => "Tiada kategori untuk di tambah?",
+"This category already exists: " => "Kategori ini telah wujud",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Tetapan",
+"January" => "Januari",
+"February" => "Februari",
+"March" => "Mac",
+"April" => "April",
+"May" => "Mei",
+"June" => "Jun",
+"July" => "Julai",
+"August" => "Ogos",
+"September" => "September",
+"October" => "Oktober",
+"November" => "November",
+"December" => "Disember",
+"Cancel" => "Batal",
+"No" => "Tidak",
+"Yes" => "Ya",
+"Ok" => "Ok",
+"No categories selected for deletion." => "tiada kategori dipilih untuk penghapusan",
+"Error" => "Ralat",
+"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}",
"You will receive a link to reset your password via Email." => "Anda akan menerima pautan untuk menetapkan semula kata laluan anda melalui emel",
"Requested" => "Meminta",
@@ -15,7 +38,9 @@
"Apps" => "Aplikasi",
"Admin" => "Admin",
"Help" => "Bantuan",
+"Access forbidden" => "Larangan akses",
"Cloud not found" => "Awan tidak dijumpai",
+"Edit categories" => "Edit kategori",
"Add" => "Tambah",
"Create an <strong>admin account</strong>" => "buat <strong>akaun admin</strong>",
"Password" => "Kata laluan",
@@ -30,7 +55,6 @@
"Finish setup" => "Setup selesai",
"web services under your control" => "Perkhidmatan web di bawah kawalan anda",
"Log out" => "Log keluar",
-"Settings" => "Tetapan",
"Lost your password?" => "Hilang kata laluan?",
"remember" => "ingat",
"Log in" => "Log masuk",
diff --git a/core/l10n/nb_NO.php b/core/l10n/nb_NO.php
index 80b9da0e1e9..a8bfebb8a55 100644
--- a/core/l10n/nb_NO.php
+++ b/core/l10n/nb_NO.php
@@ -2,7 +2,25 @@
"Application name not provided." => "Applikasjonsnavn ikke angitt.",
"No category to add?" => "Ingen kategorier å legge til?",
"This category already exists: " => "Denne kategorien finnes allerede:",
-"Owncloud password reset" => "OwnCloud passordtilbakestilling",
+"Settings" => "Innstillinger",
+"January" => "Januar",
+"February" => "Februar",
+"March" => "Mars",
+"April" => "April",
+"May" => "Mai",
+"June" => "Juni",
+"July" => "Juli",
+"August" => "August",
+"September" => "September",
+"October" => "Oktober",
+"November" => "November",
+"December" => "Desember",
+"Cancel" => "Avbryt",
+"No" => "Nei",
+"Yes" => "Ja",
+"Ok" => "Ok",
+"No categories selected for deletion." => "Ingen kategorier merket for sletting.",
+"Error" => "Feil",
"ownCloud password reset" => "Tilbakestill ownCloud passord",
"Use the following link to reset your password: {link}" => "Bruk følgende lenke for å tilbakestille passordet ditt: {link}",
"You will receive a link to reset your password via Email." => "Du burde motta detaljer om å tilbakestille passordet ditt via epost.",
@@ -36,7 +54,6 @@
"Finish setup" => "Fullfør oppsetting",
"web services under your control" => "nettjenester under din kontroll",
"Log out" => "Logg ut",
-"Settings" => "Innstillinger",
"Lost your password?" => "Mistet passordet ditt?",
"remember" => "husk",
"Log in" => "Logg inn",
diff --git a/core/l10n/nl.php b/core/l10n/nl.php
index 0b804f4d176..874a710a759 100644
--- a/core/l10n/nl.php
+++ b/core/l10n/nl.php
@@ -2,7 +2,25 @@
"Application name not provided." => "Applicatie naam niet gegeven.",
"No category to add?" => "Geen categorie toevoegen?",
"This category already exists: " => "De categorie bestaat al.",
-"Owncloud password reset" => "Reset je ownCloud wachtwoord",
+"Settings" => "Instellingen",
+"January" => "Januari",
+"February" => "Februari",
+"March" => "Maart",
+"April" => "April",
+"May" => "Mei",
+"June" => "Juni",
+"July" => "Juli",
+"August" => "Augustus",
+"September" => "September",
+"October" => "Oktober",
+"November" => "November",
+"December" => "December",
+"Cancel" => "Annuleren",
+"No" => "Nee",
+"Yes" => "Ja",
+"Ok" => "Ok",
+"No categories selected for deletion." => "Geen categorie geselecteerd voor verwijdering.",
+"Error" => "Fout",
"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 je wachtwoord opnieuw in te stellen via e-mail.",
@@ -36,7 +54,6 @@
"Finish setup" => "Installatie afronden",
"web services under your control" => "webdiensten die je beheerst",
"Log out" => "Afmelden",
-"Settings" => "Instellingen",
"Lost your password?" => "Uw wachtwoord vergeten?",
"remember" => "onthoud gegevens",
"Log in" => "Meld je aan",
diff --git a/core/l10n/nn_NO.php b/core/l10n/nn_NO.php
index aeb80517382..9dfce36049f 100644
--- a/core/l10n/nn_NO.php
+++ b/core/l10n/nn_NO.php
@@ -1,5 +1,5 @@
<?php $TRANSLATIONS = array(
-"Owncloud password reset" => "Owncloud Passord tilbakestilling",
+"Settings" => "Innstillingar",
"Use the following link to reset your password: {link}" => "Bruk føljane link til å tilbakestille passordet ditt: {link}",
"You will receive a link to reset your password via Email." => "Du vil få ei lenkje for å nullstilla passordet via epost.",
"Requested" => "Førespurt",
@@ -29,7 +29,6 @@
"Finish setup" => "Fullfør oppsettet",
"web services under your control" => "Vev tjenester under din kontroll",
"Log out" => "Logg ut",
-"Settings" => "Innstillingar",
"Lost your password?" => "Gløymt passordet?",
"remember" => "hugs",
"Log in" => "Logg inn",
diff --git a/core/l10n/pl.php b/core/l10n/pl.php
index 3c6f28c856e..4eb5f1f9ae9 100644
--- a/core/l10n/pl.php
+++ b/core/l10n/pl.php
@@ -2,7 +2,26 @@
"Application name not provided." => "Brak nazwy dla aplikacji",
"No category to add?" => "Brak kategorii",
"This category already exists: " => "Ta kategoria już istnieje",
-"Owncloud password reset" => "Resetowanie hasła",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Ustawienia",
+"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ń",
+"Cancel" => "Anuluj",
+"No" => "Nie",
+"Yes" => "Tak",
+"Ok" => "Ok",
+"No categories selected for deletion." => "Nie ma kategorii zaznaczonych do usunięcia.",
+"Error" => "BÅ‚Ä…d",
"ownCloud password reset" => "restart hasła",
"Use the following link to reset your password: {link}" => "Proszę użyć tego odnośnika do zresetowania hasła: {link}",
"You will receive a link to reset your password via Email." => "Odnośnik służący do resetowania hasła zostanie wysłany na adres e-mail.",
@@ -36,7 +55,6 @@
"Finish setup" => "Zakończ konfigurowanie",
"web services under your control" => "usługi internetowe pod kontrolą",
"Log out" => "Wylogowuje użytkownika",
-"Settings" => "Ustawienia",
"Lost your password?" => "Nie pamiętasz hasła?",
"remember" => "Zapamiętanie",
"Log in" => "Zaloguj",
diff --git a/core/l10n/pt_BR.php b/core/l10n/pt_BR.php
index 6f01d666f78..46d601e6ebf 100644
--- a/core/l10n/pt_BR.php
+++ b/core/l10n/pt_BR.php
@@ -2,7 +2,26 @@
"Application name not provided." => "Nome da aplicação não foi fornecido.",
"No category to add?" => "Nenhuma categoria adicionada?",
"This category already exists: " => "Essa categoria já existe",
-"Owncloud password reset" => "Mudar senha do Owncloud",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Configurações",
+"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",
+"Cancel" => "Cancelar",
+"No" => "Não",
+"Yes" => "Sim",
+"Ok" => "Ok",
+"No categories selected for deletion." => "Nenhuma categoria selecionada para deletar.",
+"Error" => "Erro",
"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.",
@@ -36,7 +55,6 @@
"Finish setup" => "Concluir configuração",
"web services under your control" => "web services sob seu controle",
"Log out" => "Sair",
-"Settings" => "Configurações",
"Lost your password?" => "Esqueçeu sua senha?",
"remember" => "lembrete",
"Log in" => "Log in",
diff --git a/core/l10n/pt_PT.php b/core/l10n/pt_PT.php
index 55c4c96e5c5..29135f0d66d 100644
--- a/core/l10n/pt_PT.php
+++ b/core/l10n/pt_PT.php
@@ -2,7 +2,26 @@
"Application name not provided." => "Nome da aplicação não definida.",
"No category to add?" => "Nenhuma categoria para adicionar?",
"This category already exists: " => "Esta categoria já existe:",
-"Owncloud password reset" => "Redefinir palavra-chave ownCloud",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Definições",
+"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",
+"Cancel" => "Cancelar",
+"No" => "Não",
+"Yes" => "Sim",
+"Ok" => "Ok",
+"No categories selected for deletion." => "Nenhuma categoria seleccionar para eliminar",
+"Error" => "Erro",
"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",
@@ -36,7 +55,6 @@
"Finish setup" => "Acabar instalação",
"web services under your control" => "serviços web sob o seu controlo",
"Log out" => "Sair",
-"Settings" => "Definições",
"Lost your password?" => "Esqueceu a sua password?",
"remember" => "lembrar",
"Log in" => "Entrar",
diff --git a/core/l10n/ro.php b/core/l10n/ro.php
index b6170d8e96f..484a47727dc 100644
--- a/core/l10n/ro.php
+++ b/core/l10n/ro.php
@@ -2,7 +2,7 @@
"Application name not provided." => "Numele aplicație nu este furnizat.",
"No category to add?" => "Nici o categorie de adăugat?",
"This category already exists: " => "Această categorie deja există:",
-"Owncloud password reset" => "Resetarea parolei ownCloud",
+"Settings" => "Configurări",
"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",
@@ -36,7 +36,6 @@
"Finish setup" => "Finalizează instalarea",
"web services under your control" => "servicii web controlate de tine",
"Log out" => "Ieșire",
-"Settings" => "Configurări",
"Lost your password?" => "Ai uitat parola?",
"remember" => "amintește",
"Log in" => "Autentificare",
diff --git a/core/l10n/ru.php b/core/l10n/ru.php
index ff86f29b267..edb55577772 100644
--- a/core/l10n/ru.php
+++ b/core/l10n/ru.php
@@ -2,7 +2,26 @@
"Application name not provided." => "Ð˜Ð¼Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ уÑтановлено.",
"No category to add?" => "Ðет категорий Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ?",
"This category already exists: " => "Эта ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ ÑƒÐ¶Ðµ ÑущеÑтвует: ",
-"Owncloud password reset" => "Ð¡Ð±Ñ€Ð¾Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ OwnCloud",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "ÐаÑтройки",
+"January" => "Январь",
+"February" => "Февраль",
+"March" => "Март",
+"April" => "Ðпрель",
+"May" => "Май",
+"June" => "Июнь",
+"July" => "Июль",
+"August" => "ÐвгуÑÑ‚",
+"September" => "СентÑбрь",
+"October" => "ОктÑбрь",
+"November" => "ÐоÑбрь",
+"December" => "Декабрь",
+"Cancel" => "Отмена",
+"No" => "Ðет",
+"Yes" => "Да",
+"Ok" => "Ок",
+"No categories selected for deletion." => "Ðет категорий Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ.",
+"Error" => "Ошибка",
"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 выÑлана ÑÑылка Ð´Ð»Ñ ÑброÑа паролÑ.",
@@ -36,7 +55,6 @@
"Finish setup" => "Завершить уÑтановку",
"web services under your control" => "Сетевые Ñлужбы под твоим контролем",
"Log out" => "Выйти",
-"Settings" => "ÐаÑтройки",
"Lost your password?" => "Забыли пароль?",
"remember" => "запомнить",
"Log in" => "Войти",
diff --git a/core/l10n/sk_SK.php b/core/l10n/sk_SK.php
index b09b4f56115..b6bff1e0497 100644
--- a/core/l10n/sk_SK.php
+++ b/core/l10n/sk_SK.php
@@ -2,7 +2,26 @@
"Application name not provided." => "Meno aplikácie nezadané.",
"No category to add?" => "Žiadna kategória pre pridanie?",
"This category already exists: " => "Táto kategória už existuje:",
-"Owncloud password reset" => "Obnova Owncloud hesla",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Nastavenia",
+"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",
+"Cancel" => "Zrušiť",
+"No" => "Nie",
+"Yes" => "Ãno",
+"Ok" => "Ok",
+"No categories selected for deletion." => "Neboli vybrané žiadne kategórie pre odstránenie.",
+"Error" => "Chyba",
"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.",
@@ -36,7 +55,6 @@
"Finish setup" => "DokonÄiÅ¥ inÅ¡taláciu",
"web services under your control" => "webové služby pod vašou kontrolou",
"Log out" => "Odhlásiť",
-"Settings" => "Nastavenia",
"Lost your password?" => "Zabudli ste heslo?",
"remember" => "zapamätať",
"Log in" => "Prihlásiť sa",
diff --git a/core/l10n/sl.php b/core/l10n/sl.php
index 5cd8498ea25..2f998c95492 100644
--- a/core/l10n/sl.php
+++ b/core/l10n/sl.php
@@ -2,7 +2,26 @@
"Application name not provided." => "Ime aplikacije ni bilo doloÄeno.",
"No category to add?" => "Ni kategorije za dodajanje?",
"This category already exists: " => "Ta kategorija že obstaja:",
-"Owncloud password reset" => "Ponastavi ownCloud geslo",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Nastavitve",
+"January" => "januar",
+"February" => "februar",
+"March" => "marec",
+"April" => "april",
+"May" => "maj",
+"June" => "junij",
+"July" => "julij",
+"August" => "avgust",
+"September" => "september",
+"October" => "oktober",
+"November" => "november",
+"December" => "december",
+"Cancel" => "PrekliÄi",
+"No" => "Ne",
+"Yes" => "Da",
+"Ok" => "V redu",
+"No categories selected for deletion." => "Za izbris ni bila izbrana nobena kategorija.",
+"Error" => "Napaka",
"ownCloud password reset" => "Ponastavitev gesla ownCloud",
"Use the following link to reset your password: {link}" => "Uporabite sledeÄo povezavo za ponastavitev gesla: {link}",
"You will receive a link to reset your password via Email." => "Na e-pošto boste prejeli povezavo s katero lahko ponastavite vaše geslo.",
@@ -36,7 +55,6 @@
"Finish setup" => "DokonÄaj namestitev",
"web services under your control" => "spletne storitve pod vašim nadzorom",
"Log out" => "Odjava",
-"Settings" => "Nastavitve",
"Lost your password?" => "Ste pozabili vaše geslo?",
"remember" => "Zapomni si me",
"Log in" => "Prijava",
diff --git a/core/l10n/sr.php b/core/l10n/sr.php
index 6bd6275df4b..c2f2f07640e 100644
--- a/core/l10n/sr.php
+++ b/core/l10n/sr.php
@@ -1,5 +1,5 @@
<?php $TRANSLATIONS = array(
-"Owncloud password reset" => "РеÑетовање лозинке за Оунклауд",
+"Settings" => "Подешавања",
"Use the following link to reset your password: {link}" => "Овом везом реÑетујте Ñвоју лозинку: {link}",
"You will receive a link to reset your password via Email." => "Добићете везу за реÑетовање лозинке путем е-поште.",
"Requested" => "Захтевано",
@@ -29,7 +29,6 @@
"Finish setup" => "Заврши подешавање",
"web services under your control" => "веб ÑервиÑи под контролом",
"Log out" => "Одјава",
-"Settings" => "Подешавања",
"Lost your password?" => "Изгубили Ñте лозинку?",
"remember" => "упамти",
"Log in" => "Пријава",
diff --git a/core/l10n/sr@latin.php b/core/l10n/sr@latin.php
index e240de011ee..8bc20cf1a6f 100644
--- a/core/l10n/sr@latin.php
+++ b/core/l10n/sr@latin.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"Settings" => "Podešavanja",
"You will receive a link to reset your password via Email." => "Dobićete vezu za resetovanje lozinke putem e-pošte.",
"Requested" => "Zahtevano",
"Login failed!" => "Nesupela prijava!",
@@ -25,7 +26,6 @@
"Database host" => "Domaćin baze",
"Finish setup" => "Završi podešavanje",
"Log out" => "Odjava",
-"Settings" => "Podešavanja",
"Lost your password?" => "Izgubili ste lozinku?",
"remember" => "upamti",
"You are logged out." => "Odjavljeni ste.",
diff --git a/core/l10n/sv.php b/core/l10n/sv.php
index fd53952184b..25ba95558e7 100644
--- a/core/l10n/sv.php
+++ b/core/l10n/sv.php
@@ -1,20 +1,39 @@
<?php $TRANSLATIONS = array(
-"Application name not provided." => "Programnamn har inte angetts",
+"Application name not provided." => "Programnamn har inte angetts.",
"No category to add?" => "Ingen kategori att lägga till?",
"This category already exists: " => "Denna kategori finns redan:",
-"Owncloud password reset" => "Owncloud lösenordsåterställning",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Inställningar",
+"January" => "Januari",
+"February" => "Februari",
+"March" => "Mars",
+"April" => "April",
+"May" => "Maj",
+"June" => "Juni",
+"July" => "Juli",
+"August" => "Augusti",
+"September" => "September",
+"October" => "Oktober",
+"November" => "November",
+"December" => "December",
+"Cancel" => "Avbryt",
+"No" => "Nej",
+"Yes" => "Ja",
+"Ok" => "Ok",
+"No categories selected for deletion." => "Inga kategorier valda för radering.",
+"Error" => "Fel",
"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.",
"Requested" => "Begärd",
-"Login failed!" => "Inloggning misslyckades!",
+"Login failed!" => "Misslyckad inloggning!",
"Username" => "Användarnamn",
"Request reset" => "Begär återställning",
"Your password was reset" => "Ditt lösenord har återställts",
-"To login page" => "Till logga in sidan",
+"To login page" => "Till logginsidan",
"New password" => "Nytt lösenord",
"Reset password" => "Återställ lösenordet",
-"Personal" => "Personlig",
+"Personal" => "Personligt",
"Users" => "Användare",
"Apps" => "Program",
"Admin" => "Admin",
@@ -29,18 +48,17 @@
"Data folder" => "Datamapp",
"Configure the database" => "Konfigurera databasen",
"will be used" => "kommer att användas",
-"Database user" => "Databas-användare",
-"Database password" => "Lösenord för databasen",
-"Database name" => "Databasens namn",
+"Database user" => "Databasanvändare",
+"Database password" => "Lösenord till databasen",
+"Database name" => "Databasnamn",
"Database host" => "Databasserver",
"Finish setup" => "Avsluta installation",
"web services under your control" => "webbtjänster under din kontroll",
"Log out" => "Logga ut",
-"Settings" => "Inställningar",
"Lost your password?" => "Glömt ditt lösenord?",
"remember" => "kom ihåg",
"Log in" => "Logga in",
-"You are logged out." => "Du är utloggad",
+"You are logged out." => "Du är utloggad.",
"prev" => "föregående",
"next" => "nästa"
);
diff --git a/core/l10n/th_TH.php b/core/l10n/th_TH.php
index 28283818561..8bd4d36524f 100644
--- a/core/l10n/th_TH.php
+++ b/core/l10n/th_TH.php
@@ -2,7 +2,26 @@
"Application name not provided." => "ยังไม่ได้ตั้งชื่อà¹à¸­à¸žà¸žà¸¥à¸´à¹€à¸„ชั่น",
"No category to add?" => "ไม่มีหมวดหมู่ที่ต้องà¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡?",
"This category already exists: " => "หมวดหมู่นี้มีอยู่à¹à¸¥à¹‰à¸§: ",
-"Owncloud password reset" => "เปลี่ยนรหัสผ่านใน Owncloud",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "ตั้งค่า",
+"January" => "มà¸à¸£à¸²à¸„ม",
+"February" => "à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ",
+"March" => "มีนาคม",
+"April" => "เมษายน",
+"May" => "พฤษภาคม",
+"June" => "มิถุนายน",
+"July" => "à¸à¸£à¸à¸à¸²à¸„ม",
+"August" => "สิงหาคม",
+"September" => "à¸à¸±à¸™à¸¢à¸²à¸¢à¸™",
+"October" => "ตุลาคม",
+"November" => "พฤศจิà¸à¸²à¸¢à¸™",
+"December" => "ธันวาคม",
+"Cancel" => "ยà¸à¹€à¸¥à¸´à¸",
+"No" => "ไม่ตà¸à¸¥à¸‡",
+"Yes" => "ตà¸à¸¥à¸‡",
+"Ok" => "ตà¸à¸¥à¸‡",
+"No categories selected for deletion." => "ยังไม่ได้เลือà¸à¸«à¸¡à¸§à¸”หมู่ที่ต้องà¸à¸²à¸£à¸¥à¸š",
+"Error" => "พบข้อผิดพลาด",
"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." => "คุณจะได้รับลิงค์เพื่อà¸à¸³à¸«à¸™à¸”รหัสผ่านใหม่ทางอีเมล์",
@@ -36,7 +55,6 @@
"Finish setup" => "ติดตั้งเรียบร้อยà¹à¸¥à¹‰à¸§",
"web services under your control" => "web services under your control",
"Log out" => "ออà¸à¸ˆà¸²à¸à¸£à¸°à¸šà¸š",
-"Settings" => "ตั้งค่า",
"Lost your password?" => "ลืมรหัสผ่าน?",
"remember" => "จำรหัสผ่าน",
"Log in" => "เข้าสู่ระบบ",
diff --git a/core/l10n/tr.php b/core/l10n/tr.php
index fc0f791d595..e2d0d9b073d 100644
--- a/core/l10n/tr.php
+++ b/core/l10n/tr.php
@@ -2,7 +2,26 @@
"Application name not provided." => "Uygulama adı verilmedi.",
"No category to add?" => "Eklenecek kategori yok?",
"This category already exists: " => "Bu kategori zaten mevcut: ",
-"Owncloud password reset" => "Owncloud parola sıfırlama",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Ayarlar",
+"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",
+"Cancel" => "Ä°ptal",
+"No" => "Hayır",
+"Yes" => "Evet",
+"Ok" => "Tamam",
+"No categories selected for deletion." => "Silmek için bir kategori seçilmedi",
+"Error" => "Hata",
"ownCloud password reset" => "ownCloud parola sıfırlama",
"Use the following link to reset your password: {link}" => "Bu bağlantıyı kullanarak parolanızı sıfırlayın: {link}",
"You will receive a link to reset your password via Email." => "Parolanızı sıfırlamak için bir bağlantı Eposta olarak gönderilecek.",
@@ -36,7 +55,6 @@
"Finish setup" => "Kurulumu tamamla",
"web services under your control" => "kontrolünüzdeki web servisleri",
"Log out" => "Çıkış yap",
-"Settings" => "Ayarlar",
"Lost your password?" => "Parolanızı mı unuttunuz?",
"remember" => "hatırla",
"Log in" => "GiriÅŸ yap",
diff --git a/core/l10n/uk.php b/core/l10n/uk.php
index 091a8c93293..4a10a9fc745 100644
--- a/core/l10n/uk.php
+++ b/core/l10n/uk.php
@@ -1,4 +1,5 @@
<?php $TRANSLATIONS = array(
+"Settings" => "ÐалаштуваннÑ",
"You will receive a link to reset your password via Email." => "Ви отримаєте поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÑÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ паролю на e-mail.",
"Username" => "Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача",
"Your password was reset" => "Ваш пароль був Ñкинутий",
@@ -18,7 +19,6 @@
"Finish setup" => "Завершити налаштуваннÑ",
"web services under your control" => "веб-ÑÐµÑ€Ð²Ñ–Ñ Ð¿Ñ–Ð´ вашим контролем",
"Log out" => "Вихід",
-"Settings" => "ÐалаштуваннÑ",
"Lost your password?" => "Забули пароль?",
"remember" => "запам'Ñтати",
"Log in" => "Вхід"
diff --git a/core/l10n/vi.php b/core/l10n/vi.php
new file mode 100644
index 00000000000..4a4c97032fd
--- /dev/null
+++ b/core/l10n/vi.php
@@ -0,0 +1,64 @@
+<?php $TRANSLATIONS = array(
+"Application name not provided." => "Tên ứng dụng không tồn tại",
+"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 :",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "Cài đặt",
+"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",
+"Cancel" => "Hủy",
+"No" => "No",
+"Yes" => "Yes",
+"Ok" => "Ok",
+"No categories selected for deletion." => "Không có thể loại nào được chá»n để xóa.",
+"Error" => "Lá»—i",
+"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.",
+"Requested" => "Yêu cầu",
+"Login failed!" => "Bạn đã nhập sai mật khẩu hay tên ngÆ°á»i dùng !",
+"Username" => "Tên ngÆ°á»i dùng",
+"Request reset" => "Yêu cầu thiết lập lại ",
+"Your password was reset" => "Mật khẩu của bạn đã được khôi phục",
+"To login page" => "Trang đăng nhập",
+"New password" => "Mật khẩu mới",
+"Reset password" => "Khôi phục mật khẩu",
+"Personal" => "Cá nhân",
+"Users" => "NgÆ°á»i sá»­ dụng",
+"Apps" => "Ứng dụng",
+"Admin" => "Quản trị",
+"Help" => "Giúp đỡ",
+"Access forbidden" => "Truy cập bị cấm ",
+"Cloud not found" => "Không tìm thấy Clound",
+"Edit categories" => "Sửa thể loại",
+"Add" => "Thêm",
+"Create an <strong>admin account</strong>" => "Tạo một <strong>tài khoản quản trị</strong>",
+"Password" => "Mật khẩu",
+"Advanced" => "Nâng cao",
+"Data folder" => "Thư mục dữ liệu",
+"Configure the database" => "Cấu hình Cơ Sở Dữ Liệu",
+"will be used" => "được sử dụng",
+"Database user" => "NgÆ°á»i dùng cÆ¡ sở dữ liệu",
+"Database password" => "Mật khẩu cơ sở dữ liệu",
+"Database name" => "Tên cơ sở dữ liệu",
+"Database host" => "Database host",
+"Finish setup" => "Cài đặt hoàn tất",
+"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",
+"Lost your password?" => "Bạn quên mật khẩu ?",
+"remember" => "Nhá»›",
+"Log in" => "Äăng nhập",
+"You are logged out." => "Bạn đã đăng xuất.",
+"prev" => "Lùi lại",
+"next" => "Kế tiếp"
+);
diff --git a/core/l10n/zh_CN.GB2312.php b/core/l10n/zh_CN.GB2312.php
new file mode 100644
index 00000000000..770d2b6772d
--- /dev/null
+++ b/core/l10n/zh_CN.GB2312.php
@@ -0,0 +1,64 @@
+<?php $TRANSLATIONS = array(
+"Application name not provided." => "应用程åºå¹¶æ²¡æœ‰è¢«æä¾›.",
+"No category to add?" => "没有分类添加了?",
+"This category already exists: " => "这个分类已ç»å­˜åœ¨äº†:",
+"ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" => "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=",
+"Settings" => "设置",
+"January" => "一月",
+"February" => "二月",
+"March" => "三月",
+"April" => "四月",
+"May" => "五月",
+"June" => "六月",
+"July" => "七月",
+"August" => "八月",
+"September" => "ä¹æœˆ",
+"October" => "å月",
+"November" => "å一月",
+"December" => "å二月",
+"Cancel" => "å–消",
+"No" => "å¦",
+"Yes" => "是",
+"Ok" => "好的",
+"No categories selected for deletion." => "没有选者è¦åˆ é™¤çš„分类.",
+"Error" => "错误",
+"ownCloud password reset" => "ç§æœ‰äº‘密ç é‡ç½®",
+"Use the following link to reset your password: {link}" => "使用下é¢çš„链接æ¥é‡ç½®ä½ çš„密ç :{link}",
+"You will receive a link to reset your password via Email." => "你将会收到一个é‡ç½®å¯†ç çš„链接",
+"Requested" => "请求",
+"Login failed!" => "登陆失败!",
+"Username" => "用户å",
+"Request reset" => "è¦æ±‚é‡ç½®",
+"Your password was reset" => "你的密ç å·²ç»è¢«é‡ç½®äº†",
+"To login page" => "转至登陆页é¢",
+"New password" => "新密ç ",
+"Reset password" => "é‡ç½®å¯†ç ",
+"Personal" => "个人的",
+"Users" => "用户",
+"Apps" => "应用程åº",
+"Admin" => "管ç†",
+"Help" => "帮助",
+"Access forbidden" => "ç¦æ­¢è®¿é—®",
+"Cloud not found" => "云 没有被找到",
+"Edit categories" => "编辑分类",
+"Add" => "添加",
+"Create an <strong>admin account</strong>" => "建立一个 <strong>管ç†å¸æˆ·</strong>",
+"Password" => "密ç ",
+"Advanced" => "进阶",
+"Data folder" => "æ•°æ®å­˜æ”¾æ–‡ä»¶å¤¹",
+"Configure the database" => "é…置数æ®åº“",
+"will be used" => "将会使用",
+"Database user" => "æ•°æ®åº“用户",
+"Database password" => "æ•°æ®åº“密ç ",
+"Database name" => "æ•°æ®åº“用户å",
+"Database host" => "æ•°æ®åº“主机",
+"Finish setup" => "完æˆå®‰è£…",
+"web services under your control" => "你控制下的网络æœåŠ¡",
+"Log out" => "注销",
+"Lost your password?" => "忘记密�",
+"remember" => "备忘",
+"Log in" => "登陆",
+"You are logged out." => "ä½ å·²ç»æ³¨é”€äº†",
+"prev" => "åŽé€€",
+"next" => "å‰è¿›"
+);
diff --git a/core/l10n/zh_CN.php b/core/l10n/zh_CN.php
index e07add7cbb6..1f5216a2fff 100644
--- a/core/l10n/zh_CN.php
+++ b/core/l10n/zh_CN.php
@@ -2,7 +2,25 @@
"Application name not provided." => "没有æ供应用程åºå称。",
"No category to add?" => "没有å¯æ·»åŠ åˆ†ç±»ï¼Ÿ",
"This category already exists: " => "此分类已存在: ",
-"Owncloud password reset" => "é‡ç½® Owncloud 密ç ",
+"Settings" => "设置",
+"January" => "一月",
+"February" => "二月",
+"March" => "三月",
+"April" => "四月",
+"May" => "五月",
+"June" => "六月",
+"July" => "七月",
+"August" => "八月",
+"September" => "ä¹æœˆ",
+"October" => "å月",
+"November" => "å一月",
+"December" => "å二月",
+"Cancel" => "å–消",
+"No" => "å¦",
+"Yes" => "是",
+"Ok" => "好",
+"No categories selected for deletion." => "没有选择è¦åˆ é™¤çš„类别",
+"Error" => "错误",
"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." => "您将会收到包å«å¯ä»¥é‡ç½®å¯†ç é“¾æŽ¥çš„邮件。",
@@ -36,7 +54,6 @@
"Finish setup" => "安装完æˆ",
"web services under your control" => "由您掌控的网络æœåŠ¡",
"Log out" => "注销",
-"Settings" => "设置",
"Lost your password?" => "忘记密ç ï¼Ÿ",
"remember" => "è®°ä½",
"Log in" => "登录",
diff --git a/core/l10n/zh_TW.php b/core/l10n/zh_TW.php
index d958c628723..37c0d8cc9d1 100644
--- a/core/l10n/zh_TW.php
+++ b/core/l10n/zh_TW.php
@@ -2,7 +2,7 @@
"Application name not provided." => "未æ供應用程å¼å稱",
"No category to add?" => "無分類添加?",
"This category already exists: " => "此分類已經存在:",
-"Owncloud password reset" => "ç§æœ‰é›²é‡è¨­å¯†ç¢¼",
+"Settings" => "設定",
"ownCloud password reset" => "ownCloud 密碼é‡è¨­",
"Use the following link to reset your password: {link}" => "請循以下è¯çµé‡è¨­ä½ çš„密碼: (è¯çµï¼‰ ",
"You will receive a link to reset your password via Email." => "é‡è¨­å¯†ç¢¼çš„連çµå°‡æœƒå¯„到你的電å­éƒµä»¶ä¿¡ç®±",
@@ -36,7 +36,6 @@
"Finish setup" => "完æˆè¨­å®š",
"web services under your control" => "網路æœå‹™å·²åœ¨ä½ æŽ§åˆ¶",
"Log out" => "登出",
-"Settings" => "設定",
"Lost your password?" => "忘記密碼?",
"remember" => "記ä½",
"Log in" => "登入",
diff --git a/core/lostpassword/index.php b/core/lostpassword/index.php
index b32b56fcb39..8f86fe23aad 100644
--- a/core/lostpassword/index.php
+++ b/core/lostpassword/index.php
@@ -1,6 +1,6 @@
<?php
/**
- * Copyright (c) 2010 Frank Karlitschek karlitschek@kde.org
+ * Copyright (c) 2012 Frank Karlitschek frank@owncloud.org
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
@@ -19,10 +19,10 @@ if (isset($_POST['user'])) {
if (!empty($email) and isset($_POST['sectoken']) and isset($_SESSION['sectoken']) and ($_POST['sectoken']==$_SESSION['sectoken']) ) {
$link = OC_Helper::linkToAbsolute('core/lostpassword', 'resetpassword.php').'?user='.urlencode($_POST['user']).'&token='.$token;
$tmpl = new OC_Template('core/lostpassword', 'email');
- $tmpl->assign('link', $link);
+ $tmpl->assign('link', $link, false);
$msg = $tmpl->fetchPage();
$l = OC_L10N::get('core');
- $from = 'lostpassword-noreply@' . OC_Helper::serverHost();
+ $from = 'lostpassword-noreply@' . OCP\Util::getServerHost();
OC_MAIL::send($email,$_POST['user'],$l->t('ownCloud password reset'),$msg,$from,'ownCloud');
echo('sent');
diff --git a/core/lostpassword/resetpassword.php b/core/lostpassword/resetpassword.php
index 1c78d720947..33be9d7053b 100644
--- a/core/lostpassword/resetpassword.php
+++ b/core/lostpassword/resetpassword.php
@@ -1,6 +1,6 @@
<?php
/**
- * Copyright (c) 2010 Frank Karlitschek karlitschek@kde.org
+ * Copyright (c) 2012 Frank Karlitschek frank@owncloud.org
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
diff --git a/core/minimizer.php b/core/minimizer.php
new file mode 100644
index 00000000000..0abbca75027
--- /dev/null
+++ b/core/minimizer.php
@@ -0,0 +1,15 @@
+<?php
+session_write_close();
+
+OC_App::loadApps();
+
+if ($service == 'core.css'){
+ $minimizer = new OC_Minimizer_CSS();
+ $files = OC_TemplateLayout::findStylesheetFiles(OC_Util::$core_styles);
+ $minimizer->output($files, $service);
+}
+else if ($service == 'core.js'){
+ $minimizer = new OC_Minimizer_JS();
+ $files = OC_TemplateLayout::findJavascriptFiles(OC_Util::$core_scripts);
+ $minimizer->output($files, $service);
+}
diff --git a/core/strings.php b/core/strings.php
index 8c3f64ef14f..01ab3866089 100644
--- a/core/strings.php
+++ b/core/strings.php
@@ -7,4 +7,3 @@ $l->t("Users");
$l->t("Apps");
$l->t("Admin");
$l->t("Help");
-?>
diff --git a/core/templates/404.php b/core/templates/404.php
index cd4f2b40bb2..13a81010343 100644
--- a/core/templates/404.php
+++ b/core/templates/404.php
@@ -10,6 +10,6 @@ if(!isset($_)){//also provide standalone error page
<ul>
<li class='error'>
<?php echo $l->t( 'Cloud not found' ); ?><br/>
- <p class='hint'><?php if(isset($_['file'])) echo htmlentities($_['file'])?></p>
+ <p class='hint'><?php if(isset($_['file'])) echo $_['file']?></p>
</li>
</ul>
diff --git a/core/templates/exception.php b/core/templates/exception.php
new file mode 100644
index 00000000000..7f58ce252cf
--- /dev/null
+++ b/core/templates/exception.php
@@ -0,0 +1,30 @@
+<ul>
+ <li class='error'>
+ <details>
+ <summary class="error">We're sorry, but something went terribly wrong.<br></summary>
+ <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 'Message: ' . $_['message'] . "\n";
+ echo 'Error Code: ' . $_['code'] . "\n";
+ echo 'File: ' . $_['file'] . "\n";
+ echo 'Line: ' . $_['line'] . "\n\n";
+ echo 'PHP: ' . $_['sysinfo']['phpversion'] . "\n";
+ echo 'OS: ' . $_['sysinfo']['os'] . "\n";
+ echo 'OS Release: ' . $_['sysinfo']['osrelease'] . "\n";
+ echo 'OS Arch.: ' . $_['sysinfo']['osarchitecture'] . "\n";
+ echo 'PHP-Server-Interface: ' . $_['sysinfo']['phpserverinterface'] . "\n";
+ echo 'Protocol: ' . $_['sysinfo']['serverprotocol'] . "\n";
+ echo 'HTTPS: ' . $_['sysinfo']['https'] . "\n";
+ echo 'Request Method: ' . $_['sysinfo']['requestmethod'] . "\n";
+ echo 'Database: ' . $_['sysinfo']['database'] . "\n";
+ echo '</textarea>';
+ }else{
+ echo 'Your administrator has disabled systeminformations.';
+ }
+ ?>
+ </p>
+ </details>
+ </li>
+</ul> \ No newline at end of file
diff --git a/core/templates/layout.guest.php b/core/templates/layout.guest.php
index 7ba7abdbf12..4cdbfd16e52 100644
--- a/core/templates/layout.guest.php
+++ b/core/templates/layout.guest.php
@@ -4,13 +4,19 @@
<title>ownCloud</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<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 if (!empty(OC_Util::$core_styles)): ?>
+ <link rel="stylesheet" href="<?php echo OC_Helper::linkToRemote('core.css', false) ?>" type="text/css" media="screen" />
+ <?php endif ?>
<?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_webroot = '<?php echo OC::$WEBROOT; ?>';
- var oc_appswebroot = '<?php echo OC::$APPSWEBROOT; ?>';
+ var oc_appswebroots = <?php echo $_['apps_paths'] ?>;
</script>
+ <?php if (!empty(OC_Util::$core_scripts)): ?>
+ <script type="text/javascript" src="<?php echo OC_Helper::linkToRemote('core.js', false) ?>"></script>
+ <?php endif ?>
<?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 25281c452a5..2abe4da8538 100644
--- a/core/templates/layout.user.php
+++ b/core/templates/layout.user.php
@@ -4,14 +4,20 @@
<title><?php echo isset($_['application']) && !empty($_['application'])?$_['application'].' | ':'' ?>ownCloud <?php echo OC_User::getUser()?' ('.OC_User::getUser().') ':'' ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<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 if (!empty(OC_Util::$core_styles)): ?>
+ <link rel="stylesheet" href="<?php echo OC_Helper::linkToRemote('core.css', false) ?>" type="text/css" media="screen" />
+ <?php endif ?>
<?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_webroot = '<?php echo OC::$WEBROOT; ?>';
- var oc_appswebroot = '<?php echo OC::$APPSWEBROOT; ?>';
+ var oc_appswebroots = <?php echo $_['apps_paths'] ?>;
var oc_current_user = '<?php echo OC_User::getUser() ?>';
</script>
+ <?php if (!empty(OC_Util::$core_scripts)): ?>
+ <script type="text/javascript" src="<?php echo OC_Helper::linkToRemote('core.js', false) ?>"></script>
+ <?php endif ?>
<?php foreach($_['jsfiles'] as $jsfile): ?>
<script type="text/javascript" src="<?php echo $jsfile; ?>"></script>
<?php endforeach; ?>
@@ -27,6 +33,7 @@
<script type="text/javascript">
$(function() {
requesttoken = '<?php echo $_['requesttoken']; ?>';
+ OC.EventSource.requesttoken=requesttoken;
$(document).bind('ajaxSend', function(elm, xhr, s){
if(requesttoken) {
xhr.setRequestHeader('requesttoken', requesttoken);
@@ -39,16 +46,16 @@
<body id="<?php echo $_['bodyid'];?>">
<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>
- <form class="searchbox" action="#" method="post">
- <input id="searchbox" class="svg" type="search" name="query" value="<?php if(isset($_POST['query'])){echo htmlentities($_POST['query']);};?>" autocomplete="off" />
+ <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');?>" src="<?php echo image_path('', 'actions/logout.svg'); ?>" /></a>
+ <form class="searchbox header-right" 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>
- <a 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');?>" src="<?php echo image_path('', 'actions/logout.svg'); ?>" /></a>
</div></header>
<nav><div id="navigation">
<ul id="apps" class="svg">
<?php foreach($_['navigation'] 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 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>
<?php endforeach; ?>
</ul>
diff --git a/core/templates/login.php b/core/templates/login.php
index 56101157eda..2c9b766aa4d 100644
--- a/core/templates/login.php
+++ b/core/templates/login.php
@@ -1,17 +1,17 @@
<!--[if IE 8]><style>input[type="checkbox"]{padding:0;}</style><![endif]-->
<form action="index.php" method="post">
<fieldset>
- <?php if(!empty($_['redirect'])) { echo '<input type="hidden" name="redirect_url" value="'.htmlentities($_['redirect']).'" />'; } ?>
- <?php if($_['error']): ?>
+ <?php if(!empty($_['redirect'])) { echo '<input type="hidden" name="redirect_url" value="'.$_['redirect'].'" />'; } ?>
+ <?php if($_['display_lostpassword']): ?>
<a href="./core/lostpassword/"><?php echo $l->t('Lost your password?'); ?></a>
<?php endif; ?>
<p class="infield">
<label for="user" class="infield"><?php echo $l->t( 'Username' ); ?></label>
- <input type="text" name="user" id="user" value="<?php echo !empty($_POST['user'])?htmlentities($_POST['user'],ENT_COMPAT,'utf-8').'"':'" autofocus'; ?> autocomplete="on" required />
+ <input type="text" name="user" id="user" value="<?php echo $_['username']; ?>"<?php echo $_['user_autofocus']?' autofocus':''; ?> autocomplete="on" required />
</p>
<p class="infield">
<label for="password" class="infield"><?php echo $l->t( 'Password' ); ?></label>
- <input type="password" name="password" id="password" value="" required <?php echo !empty($_POST['user'])?'autofocus':''; ?> />
+ <input type="password" name="password" id="password" value="" required<?php echo $_['user_autofocus']?'':' autofocus'; ?> />
<input type="hidden" name="sectoken" id="sectoken" value="<?php echo($_['sectoken']); ?>" />
</p>
<input type="checkbox" name="remember_login" value="1" id="remember_login" /><label for="remember_login"><?php echo $l->t('remember'); ?></label>
diff --git a/cron.php b/cron.php
new file mode 100644
index 00000000000..83285e8a47c
--- /dev/null
+++ b/cron.php
@@ -0,0 +1,89 @@
+<?php
+/**
+* ownCloud
+*
+* @author Jakob Sack
+* @copyright 2012 Jakob Sack owncloud@jakobsack.de
+*
+* 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/>.
+*
+*/
+
+// Unfortunately we need this class for shutdown function
+class my_temporary_cron_class {
+ public static $sent = false;
+}
+
+function handleUnexpectedShutdown() {
+ if( !my_temporary_cron_class::$sent ){
+ if( OC::$CLI ){
+ echo 'Unexpected error!'.PHP_EOL;
+ }
+ else{
+ OC_JSON::error( array( 'data' => array( 'message' => 'Unexpected error!')));
+ }
+ }
+}
+
+$RUNTIME_NOSETUPFS = true;
+require_once('lib/base.php');
+
+// Don't do anything if ownCloud has not been installed
+if( !OC_Config::getValue( 'installed', false )){
+ exit( 0 );
+}
+
+// Handle unexpected errors
+register_shutdown_function('handleUnexpectedShutdown');
+
+// Exit if background jobs are disabled!
+$appmode = OC_Appconfig::getValue( 'core', 'backgroundjobs_mode', 'ajax' );
+if( $appmode == 'none' ){
+ my_temporary_cron_class::$sent = true;
+ if( OC::$CLI ){
+ echo 'Background Jobs are disabled!'.PHP_EOL;
+ }
+ else{
+ OC_JSON::error( array( 'data' => array( 'message' => 'Background jobs disabled!')));
+ }
+ exit( 1 );
+}
+
+if( OC::$CLI ){
+ if( $appmode != 'cron' ){
+ OC_Appconfig::setValue( 'core', 'backgroundjobs_mode', 'cron' );
+ }
+
+ // check if backgroundjobs is still running
+ $pid = OC_Appconfig::getValue( 'core', 'backgroundjobs_pid', false );
+ if( $pid !== false ){
+ // FIXME: check if $pid is still alive (*nix/mswin). if so then exit
+ }
+ // save pid
+ OC_Appconfig::setValue( 'core', 'backgroundjobs_pid', getmypid());
+
+ // Work
+ OC_BackgroundJob_Worker::doAllSteps();
+}
+else{
+ if( $appmode == 'cron' ){
+ OC_JSON::error( array( 'data' => array( 'message' => 'Backgroundjobs are using system cron!')));
+ }
+ else{
+ OC_BackgroundJob_Worker::doNextStep();
+ OC_JSON::success();
+ }
+}
+my_temporary_cron_class::$sent = true;
+exit();
diff --git a/db_structure.xml b/db_structure.xml
index 992d1db4141..73ac2c28960 100644
--- a/db_structure.xml
+++ b/db_structure.xml
@@ -235,6 +235,32 @@
<table>
+ <name>*dbprefix*group_admin</name>
+
+ <declaration>
+
+ <field>
+ <name>gid</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>64</length>
+ </field>
+
+ <field>
+ <name>uid</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>64</length>
+ </field>
+
+ </declaration>
+
+ </table>
+
+ <table>
+
<name>*dbprefix*groups</name>
<declaration>
@@ -335,7 +361,7 @@
<field>
<name>uri</name>
- <type>text</type>
+ <type>clob</type>
<notnull>false</notnull>
</field>
@@ -472,13 +498,180 @@
<field>
<name>propertyvalue</name>
+ <type>test</type>
+ <notnull>true</notnull>
+ </field>
+
+ </declaration>
+
+ </table>
+
+ <table>
+
+ <name>*dbprefix*share</name>
+
+ <declaration>
+
+ <field>
+ <name>id</name>
+ <autoincrement>1</autoincrement>
+ <type>integer</type>
+ <default>0</default>
+ <notnull>true</notnull>
+ <length>4</length>
+ </field>
+
+ <field>
+ <name>share_type</name>
+ <type>integer</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>1</length>
+ </field>
+
+ <field>
+ <name>share_with</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>255</length>
+ </field>
+
+ <field>
+ <name>uid_owner</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>255</length>
+ </field>
+
+ <field>
+ <name>parent</name>
+ <type>integer</type>
+ <default></default>
+ <notnull>false</notnull>
+ <length>4</length>
+ </field>
+
+ <field>
+ <name>item_type</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>64</length>
+ </field>
+
+ <field>
+ <name>item_source</name>
+ <type>text</type>
+ <default></default>
+ <notnull>false</notnull>
+ <length>255</length>
+ </field>
+
+ <field>
+ <name>item_target</name>
<type>text</type>
+ <default></default>
+ <notnull>false</notnull>
+ <length>255</length>
+ </field>
+
+ <field>
+ <name>file_source</name>
+ <type>integer</type>
+ <default></default>
+ <notnull>false</notnull>
+ <length>4</length>
+ </field>
+
+ <field>
+ <name>file_target</name>
+ <type>text</type>
+ <default></default>
+ <notnull>false</notnull>
+ <length>512</length>
+ </field>
+
+ <field>
+ <name>permissions</name>
+ <type>integer</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>1</length>
+ </field>
+
+ <field>
+ <name>stime</name>
+ <type>integer</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>8</length>
+ </field>
+
+ <field>
+ <name>accepted</name>
+ <type>integer</type>
+ <default>0</default>
<notnull>true</notnull>
+ <length>1</length>
</field>
</declaration>
</table>
+
+ <table>
+
+ <name>*dbprefix*queuedtasks</name>
+
+ <declaration>
+
+ <field>
+ <name>id</name>
+ <type>integer</type>
+ <default>0</default>
+ <notnull>true</notnull>
+ <autoincrement>1</autoincrement>
+ <unsigned>true</unsigned>
+ <length>4</length>
+ </field>
+
+ <field>
+ <name>app</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>255</length>
+ </field>
+
+ <field>
+ <name>klass</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>255</length>
+ </field>
+
+ <field>
+ <name>method</name>
+ <type>text</type>
+ <default></default>
+ <notnull>true</notnull>
+ <length>255</length>
+ </field>
+
+ <field>
+ <name>parameters</name>
+ <type>text</type>
+ <notnull>true</notnull>
+ </field>
+
+
+
+ </declaration>
+
+ </table>
<table>
diff --git a/files/webdav.php b/files/webdav.php
index 7624ccbbc72..c19c4c6b72f 100644
--- a/files/webdav.php
+++ b/files/webdav.php
@@ -5,7 +5,7 @@
*
* @author Frank Karlitschek
* @author Jakob Sack
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @copyright 2012 Frank Karlitschek frank@owncloud.org
* @copyright 2011 Jakob Sack kde@jakobsack.de
*
* This library is free software; you can redistribute it and/or
@@ -23,8 +23,6 @@
*
*/
-// Do not load FS ...
-$RUNTIME_NOSETUPFS = true;
// only need filesystem apps
$RUNTIME_APPTYPES=array('filesystem','authentication');
require_once('../lib/base.php');
diff --git a/index.php b/index.php
index 89eaec7d21a..a972993c19c 100644..100755
--- a/index.php
+++ b/index.php
@@ -25,100 +25,4 @@ $RUNTIME_NOAPPS = TRUE; //no apps, yet
require_once('lib/base.php');
-// Setup required :
-$not_installed = !OC_Config::getValue('installed', false);
-if($not_installed) {
- // Check for autosetup:
- $autosetup_file = OC::$SERVERROOT."/config/autoconfig.php";
- if( file_exists( $autosetup_file )){
- OC_Log::write('core','Autoconfig file found, setting up owncloud...',OC_Log::INFO);
- include( $autosetup_file );
- $_POST['install'] = 'true';
- $_POST = array_merge ($_POST, $AUTOCONFIG);
- unlink($autosetup_file);
- }
- OC_Util::addScript('setup');
- require_once('setup.php');
- exit();
-}
-
-// Handle WebDAV
-if($_SERVER['REQUEST_METHOD']=='PROPFIND'){
- header('location: '.OC_Helper::linkToRemote('webdav'));
- exit();
-}
-elseif(!OC_User::isLoggedIn() && substr(OC::$REQUESTEDFILE,-3) == 'css'){
- OC_App::loadApps();
- OC::loadfile();
-}
-// Someone is logged in :
-elseif(OC_User::isLoggedIn()) {
- OC_App::loadApps();
- if(isset($_GET["logout"]) and ($_GET["logout"])) {
- OC_User::logout();
- header("Location: ".OC::$WEBROOT.'/');
- exit();
- }else{
- if(is_null(OC::$REQUESTEDFILE)){
- OC::loadapp();
- }else{
- OC::loadfile();
- }
- }
-
-// For all others cases, we display the guest page :
-} else {
- OC_App::loadApps();
- $error = false;
- // remember was checked after last login
- if(isset($_COOKIE["oc_remember_login"]) && isset($_COOKIE["oc_token"]) && isset($_COOKIE["oc_username"]) && $_COOKIE["oc_remember_login"]) {
- 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']) &&
- OC_Preferences::getValue($_COOKIE['oc_username'], "login", "token") === $_COOKIE['oc_token']) {
- OC_User::setUserId($_COOKIE['oc_username']);
- OC_Util::redirectToDefaultPage();
- }
- else {
- OC_User::unsetMagicInCookie();
- }
-
- // Someone wants to log in :
- } elseif(isset($_POST["user"]) and isset($_POST['password']) and isset($_SESSION['sectoken']) and isset($_POST['sectoken']) and ($_SESSION['sectoken']==$_POST['sectoken']) ) {
- if(OC_User::login($_POST["user"], $_POST["password"])) {
- if(!empty($_POST["remember_login"])){
- if(defined("DEBUG") && DEBUG) {
- OC_Log::write('core','Setting remember login to cookie',OC_Log::DEBUG);
- }
- $token = md5($_POST["user"].time().$_POST['password']);
- OC_Preferences::setValue($_POST['user'], 'login', 'token', $token);
- OC_User::setMagicInCookie($_POST["user"], $token);
- }
- else {
- OC_User::unsetMagicInCookie();
- }
- OC_Util::redirectToDefaultPage();
- } else {
- $error = true;
- }
-
- // The user is already authenticated using Apaches AuthType Basic... very usable in combination with LDAP
- } elseif(isset($_SERVER["PHP_AUTH_USER"]) && isset($_SERVER["PHP_AUTH_PW"])){
- 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();
- }else{
- $error = true;
- }
- }
- if(!array_key_exists('sectoken', $_SESSION) || (array_key_exists('sectoken', $_SESSION) && is_null(OC::$REQUESTEDFILE)) || substr(OC::$REQUESTEDFILE, -3) == 'php'){
- $sectoken=rand(1000000,9999999);
- $_SESSION['sectoken']=$sectoken;
- $redirect_url = (isset($_REQUEST['redirect_url'])) ? OC_Util::sanitizeHTML($_REQUEST['redirect_url']) : $_SERVER['REQUEST_URI'];
- OC_Template::printGuestPage('', 'login', array('error' => $error, 'sectoken' => $sectoken, 'redirect' => $redirect_url));
- }
-}
+OC::handleRequest();
diff --git a/l10n/.tx/config b/l10n/.tx/config
index 3a0c6c28dc6..db4df85793c 100644
--- a/l10n/.tx/config
+++ b/l10n/.tx/config
@@ -36,3 +36,75 @@ file_filter = <lang>/gallery.po
source_file = templates/gallery.pot
source_lang = en
+[owncloud.bookmarks]
+file_filter = <lang>/bookmarks.po
+source_file = templates/bookmarks.pot
+source_lang = en
+type = PO
+
+[owncloud.lib]
+file_filter = <lang>/lib.po
+source_file = templates/lib.pot
+source_lang = en
+type = PO
+
+[owncloud.admin_dependencies_chk]
+file_filter = <lang>/admin_dependencies_chk.po
+source_file = templates/admin_dependencies_chk.pot
+source_lang = en
+type = PO
+
+[owncloud.admin_migrate]
+file_filter = <lang>/admin_migrate.po
+source_file = templates/admin_migrate.pot
+source_lang = en
+type = PO
+
+[owncloud.files_encryption]
+file_filter = <lang>/files_encryption.po
+source_file = templates/files_encryption.pot
+source_lang = en
+type = PO
+
+[owncloud.files_external]
+file_filter = <lang>/files_external.po
+source_file = templates/files_external.pot
+source_lang = en
+type = PO
+
+[owncloud.files_sharing]
+file_filter = <lang>/files_sharing.po
+source_file = templates/files_sharing.pot
+source_lang = en
+type = PO
+
+[owncloud.files_versions]
+file_filter = <lang>/files_versions.po
+source_file = templates/files_versions.pot
+source_lang = en
+type = PO
+
+[owncloud.tasks]
+file_filter = <lang>/tasks.po
+source_file = templates/tasks.pot
+source_lang = en
+type = PO
+
+[owncloud.user_ldap]
+file_filter = <lang>/user_ldap.po
+source_file = templates/user_ldap.pot
+source_lang = en
+type = PO
+
+[owncloud.user_migrate]
+file_filter = <lang>/user_migrate.po
+source_file = templates/user_migrate.pot
+source_lang = en
+type = PO
+
+[owncloud.user_openid]
+file_filter = <lang>/user_openid.po
+source_file = templates/user_openid.pot
+source_lang = en
+type = PO
+
diff --git a/l10n/af/admin_dependencies_chk.po b/l10n/af/admin_dependencies_chk.po
new file mode 100644
index 00000000000..cc514c3f092
--- /dev/null
+++ b/l10n/af/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Afrikaans (http://www.transifex.com/projects/p/owncloud/language/af/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/af/admin_migrate.po b/l10n/af/admin_migrate.po
new file mode 100644
index 00000000000..6801bee56d5
--- /dev/null
+++ b/l10n/af/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Afrikaans (http://www.transifex.com/projects/p/owncloud/language/af/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/af/bookmarks.po b/l10n/af/bookmarks.po
new file mode 100644
index 00000000000..f9c5316dd5d
--- /dev/null
+++ b/l10n/af/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Afrikaans (http://www.transifex.com/projects/p/owncloud/language/af/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/af/calendar.po b/l10n/af/calendar.po
index 80a29a27bfc..c4363ac1ae7 100644
--- a/l10n/af/calendar.po
+++ b/l10n/af/calendar.po
@@ -7,21 +7,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Afrikaans (http://www.transifex.net/projects/p/owncloud/language/af/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Afrikaans (http://www.transifex.com/projects/p/owncloud/language/af/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: af\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr ""
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr ""
@@ -29,298 +37,392 @@ msgstr ""
msgid "Wrong calendar"
msgstr ""
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr ""
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr ""
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr ""
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr ""
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
msgstr ""
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
msgstr ""
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
msgstr ""
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
msgstr ""
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr ""
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr ""
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr ""
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr ""
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr ""
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr ""
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr ""
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr ""
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr ""
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr ""
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr ""
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr ""
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr ""
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr ""
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr ""
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr ""
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr ""
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr ""
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr ""
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr ""
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr ""
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr ""
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr ""
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr ""
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr ""
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr ""
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr ""
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr ""
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr ""
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr ""
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr ""
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr ""
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr ""
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr ""
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr ""
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr ""
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr ""
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr ""
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr ""
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr ""
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr ""
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr ""
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr ""
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr ""
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr ""
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr ""
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr ""
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr ""
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr ""
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr ""
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr ""
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr ""
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr ""
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr ""
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr ""
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr ""
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr ""
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr ""
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr ""
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr ""
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr ""
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr ""
-#: templates/calendar.php:11
-msgid "All day"
+#: templates/calendar.php:6
+msgid "Sun."
msgstr ""
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
+#: templates/calendar.php:11
+msgid "All day"
msgstr ""
#: templates/calendar.php:13
@@ -356,32 +458,24 @@ msgstr ""
msgid "There was a database fail"
msgstr ""
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr ""
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr ""
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr ""
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr ""
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr ""
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr ""
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
msgstr ""
#: templates/part.choosecalendar.php:2
@@ -389,7 +483,7 @@ msgid "Your calendars"
msgstr ""
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr ""
@@ -401,19 +495,19 @@ msgstr ""
msgid "No shared calendars"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr ""
@@ -499,23 +593,23 @@ msgstr ""
msgid "Edit categories"
msgstr ""
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr ""
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr ""
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr ""
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr ""
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr ""
@@ -523,7 +617,7 @@ msgstr ""
msgid "Location of the Event"
msgstr ""
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr ""
@@ -531,84 +625,86 @@ msgstr ""
msgid "Description of the Event"
msgstr ""
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr ""
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr ""
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr ""
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr ""
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr ""
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr ""
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr ""
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr ""
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr ""
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr ""
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr ""
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr ""
-#: templates/part.import.php:1
-msgid "Import a calendar file"
+#: templates/part.import.php:14
+msgid "create a new calendar"
msgstr ""
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
+#: templates/part.import.php:17
+msgid "Import a calendar file"
msgstr ""
-#: templates/part.import.php:10
-msgid "create a new calendar"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
+#: templates/part.import.php:44
+msgid "Take an available name!"
msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
+#: templates/part.import.php:47
+msgid "Import"
msgstr ""
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr ""
@@ -624,44 +720,72 @@ msgstr ""
msgid "No categories selected"
msgstr ""
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr ""
-
#: templates/part.showevent.php:37
msgid "of"
msgstr ""
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr ""
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr ""
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
+#: templates/settings.php:52
+msgid "Time format"
msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr ""
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr ""
-#: templates/settings.php:40
-msgid "First day of the week"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
msgstr ""
#: templates/share.dropdown.php:20
diff --git a/l10n/af/contacts.po b/l10n/af/contacts.po
index c71bea49321..f8979aa7687 100644
--- a/l10n/af/contacts.po
+++ b/l10n/af/contacts.po
@@ -7,220 +7,206 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Afrikaans (http://www.transifex.net/projects/p/owncloud/language/af/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Afrikaans (http://www.transifex.com/projects/p/owncloud/language/af/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: af\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr ""
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr ""
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
msgstr ""
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
msgstr ""
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
msgstr ""
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr ""
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr ""
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr ""
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr ""
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr ""
-#: ajax/contactdetails.php:37
-msgid "Missing ID"
-msgstr ""
-
-#: ajax/contactdetails.php:41
-msgid "Error parsing VCard for ID: \""
-msgstr ""
-
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
msgstr ""
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
msgstr ""
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
-#: ajax/uploadphoto.php:68
-msgid "No contact ID was submitted."
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/currentphoto.php:40
-msgid "Error reading contact photo."
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/currentphoto.php:52
-msgid "Error saving temporary file."
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
msgstr ""
-#: ajax/currentphoto.php:55
-msgid "The loading photo is not valid."
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
msgstr ""
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
msgstr ""
-#: ajax/deleteproperty.php:36
+#: ajax/contact/deleteproperty.php:37
msgid "Information about vCard is incorrect. Please reload the page."
msgstr ""
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
+#: ajax/contact/details.php:31
+msgid "Missing ID"
msgstr ""
-#: ajax/editname.php:37
-msgid "Contact ID is missing."
+#: ajax/contact/details.php:36
+msgid "Error parsing VCard for ID: \""
msgstr ""
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
msgstr ""
-#: ajax/oc_photo.php:41
-msgid "No photo path was submitted."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
msgstr ""
-#: ajax/oc_photo.php:48
-msgid "File doesn't exist:"
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
msgstr ""
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
-msgid "Error loading image."
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
+#: ajax/uploadphoto.php:68
+msgid "No contact ID was submitted."
msgstr ""
-#: ajax/savecrop.php:68
-msgid "Error getting contact object."
+#: ajax/currentphoto.php:36
+msgid "Error reading contact photo."
msgstr ""
-#: ajax/savecrop.php:75
-msgid "Error getting PHOTO property."
+#: ajax/currentphoto.php:48
+msgid "Error saving temporary file."
msgstr ""
-#: ajax/savecrop.php:88
-msgid "Error saving contact."
+#: ajax/currentphoto.php:51
+msgid "The loading photo is not valid."
msgstr ""
-#: ajax/savecrop.php:98
-msgid "Error resizing image"
+#: ajax/editname.php:31
+msgid "Contact ID is missing."
msgstr ""
-#: ajax/savecrop.php:101
-msgid "Error cropping image"
+#: ajax/oc_photo.php:32
+msgid "No photo path was submitted."
msgstr ""
-#: ajax/savecrop.php:104
-msgid "Error creating temporary image"
+#: ajax/oc_photo.php:39
+msgid "File doesn't exist:"
msgstr ""
-#: ajax/savecrop.php:107
-msgid "Error finding image: "
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
+msgid "Error loading image."
msgstr ""
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
+#: ajax/savecrop.php:69
+msgid "Error getting contact object."
msgstr ""
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
+#: ajax/savecrop.php:79
+msgid "Error getting PHOTO property."
msgstr ""
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
+#: ajax/savecrop.php:98
+msgid "Error saving contact."
msgstr ""
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
+#: ajax/savecrop.php:109
+msgid "Error resizing image"
msgstr ""
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
+#: ajax/savecrop.php:112
+msgid "Error cropping image"
msgstr ""
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
+#: ajax/savecrop.php:115
+msgid "Error creating temporary image"
msgstr ""
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
+#: ajax/savecrop.php:118
+msgid "Error finding image: "
msgstr ""
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr ""
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr ""
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
msgstr ""
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
msgstr ""
@@ -228,414 +214,561 @@ msgstr ""
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
msgstr ""
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
msgstr ""
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:425
+msgid "Permission error"
+msgstr ""
+
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
msgstr ""
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
msgstr ""
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
msgstr ""
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/loader.js:49
+msgid "Result: "
msgstr ""
-#: js/contacts.js:1494
+#: js/loader.js:49
+msgid " imported, "
+msgstr ""
+
+#: js/loader.js:49
+msgid " failed."
+msgstr ""
+
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
+#: lib/app.php:52
+msgid "This is not your addressbook."
msgstr ""
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:71
+msgid "Contact could not be found."
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
+#: lib/app.php:141
+msgid "Facebook"
msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
+#: lib/app.php:146
+msgid "XMPP"
msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
+#: lib/app.php:151
+msgid "ICQ"
msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
+#: lib/app.php:156
+msgid "Yahoo"
msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
+#: lib/app.php:161
+msgid "Skype"
msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr ""
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr ""
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr ""
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr ""
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr ""
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr ""
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr ""
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr ""
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr ""
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr ""
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr ""
-#: templates/index.php:13
-msgid "Add Contact"
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
msgstr ""
#: templates/index.php:14
+msgid "Add Contact"
+msgstr ""
+
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr ""
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
msgstr ""
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
+#: templates/index.php:39
+msgid "Navigation"
msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
+#: templates/index.php:42
+msgid "Next contact in list"
msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
+#: templates/index.php:44
+msgid "Previous contact in list"
msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
+#: templates/index.php:48
+msgid "Next addressbook"
msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
+#: templates/index.php:50
+msgid "Previous addressbook"
msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
+#: templates/index.php:54
+msgid "Actions"
msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr ""
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr ""
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr ""
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr ""
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr ""
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr ""
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr ""
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr ""
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr ""
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr ""
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr ""
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr ""
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr ""
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr ""
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr ""
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr ""
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr ""
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr ""
-#: templates/part.contact.php:103
-msgid "Profile picture"
+#: templates/part.contact.php:129
+msgid "Phone"
msgstr ""
-#: templates/part.contact.php:107
-msgid "Phone"
+#: templates/part.contact.php:130
+msgid "Email"
msgstr ""
-#: templates/part.contact.php:110
-msgid "Note"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
msgstr ""
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
+#: templates/part.contact.php:132
+msgid "Address"
msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
+#: templates/part.contact.php:133
+msgid "Note"
msgstr ""
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
+#: templates/part.contact.php:138
+msgid "Download contact"
msgstr ""
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
+#: templates/part.contact.php:139
+msgid "Delete contact"
msgstr ""
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
msgstr ""
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr ""
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr ""
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr ""
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr ""
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr ""
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr ""
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
-msgid "Zipcode"
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
msgstr ""
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
-msgid "Country"
+#: templates/part.edit_address_dialog.php:48
+msgid "Zipcode"
msgstr ""
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
msgstr ""
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
msgstr ""
#: templates/part.edit_name_dialog.php:16
@@ -718,102 +851,102 @@ msgstr ""
msgid "Sn."
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
+#: templates/part.import.php:1
+msgid "Import a contacts file"
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
+#: templates/part.import.php:6
+msgid "Please choose the addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
+#: templates/part.import.php:10
+msgid "create a new addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:23
-msgid "Active"
+#: templates/part.import.php:15
+msgid "Name of new addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:29
-msgid "Save"
+#: templates/part.import.php:20
+msgid "Importing contacts"
msgstr ""
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
msgstr ""
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
msgstr ""
-#: templates/part.import.php:1
-msgid "Import a contacts file"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
msgstr ""
-#: templates/part.import.php:6
-msgid "Please choose the addressbook"
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
msgstr ""
-#: templates/part.import.php:10
-msgid "create a new addressbook"
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
msgstr ""
-#: templates/part.import.php:15
-msgid "Name of new addressbook"
+#: templates/settings.php:3
+msgid "CardDAV syncing addresses"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
+#: templates/settings.php:3
+msgid "more info"
msgstr ""
-#: templates/part.import.php:20
-msgid "Importing contacts"
+#: templates/settings.php:5
+msgid "Primary address (Kontact et al)"
msgstr ""
-#: templates/part.import.php:24
-msgid "Close"
+#: templates/settings.php:7
+msgid "iOS/OS X"
msgstr ""
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
+#: templates/settings.php:20
+msgid "Show CardDav link"
msgstr ""
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
msgstr ""
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
+#: templates/settings.php:26
+msgid "Share"
msgstr ""
-#: templates/part.no_contacts.php:2
-msgid "You have no contacts in your addressbook."
+#: templates/settings.php:29
+msgid "Download"
msgstr ""
-#: templates/part.no_contacts.php:4
-msgid "Add contact"
+#: templates/settings.php:33
+msgid "Edit"
msgstr ""
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
+#: templates/settings.php:43
+msgid "New Address Book"
msgstr ""
-#: templates/settings.php:4
-msgid "CardDAV syncing addresses"
+#: templates/settings.php:44
+msgid "Name"
msgstr ""
-#: templates/settings.php:4
-msgid "more info"
+#: templates/settings.php:45
+msgid "Description"
msgstr ""
-#: templates/settings.php:6
-msgid "Primary address (Kontact et al)"
+#: templates/settings.php:46
+msgid "Save"
msgstr ""
-#: templates/settings.php:8
-msgid "iOS/OS X"
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr ""
+
+#: templates/settings.php:52
+msgid "More..."
msgstr ""
diff --git a/l10n/af/core.po b/l10n/af/core.po
index ad5808d2ffb..88fb86a58a5 100644
--- a/l10n/af/core.po
+++ b/l10n/af/core.po
@@ -7,10 +7,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Afrikaans (http://www.transifex.net/projects/p/owncloud/language/af/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Afrikaans (http://www.transifex.com/projects/p/owncloud/language/af/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -33,51 +33,55 @@ msgstr ""
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
msgstr ""
-#: js/js.js:520
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr ""
+
+#: js/js.js:573
msgid "January"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
msgstr ""
@@ -106,10 +110,6 @@ msgid "Error"
msgstr ""
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr ""
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr ""
@@ -239,14 +239,10 @@ msgstr ""
msgid "web services under your control"
msgstr ""
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr ""
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr ""
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr ""
diff --git a/l10n/af/files.po b/l10n/af/files.po
index 142439d4d98..b683bb7b55b 100644
--- a/l10n/af/files.po
+++ b/l10n/af/files.po
@@ -7,43 +7,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Afrikaans (http://www.transifex.net/projects/p/owncloud/language/af/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Afrikaans (http://www.transifex.com/projects/p/owncloud/language/af/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: af\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:22
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/upload.php:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr ""
@@ -51,55 +51,83 @@ msgstr ""
msgid "Files"
msgstr ""
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
msgstr ""
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
msgstr ""
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr ""
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr ""
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
msgstr ""
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
msgstr ""
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
msgstr ""
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
msgstr ""
@@ -171,10 +199,6 @@ msgstr ""
msgid "Download"
msgstr ""
-#: templates/index.php:56
-msgid "Delete"
-msgstr ""
-
#: templates/index.php:64
msgid "Upload too large"
msgstr ""
diff --git a/l10n/af/files_encryption.po b/l10n/af/files_encryption.po
new file mode 100644
index 00000000000..ba20608786d
--- /dev/null
+++ b/l10n/af/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Afrikaans (http://www.transifex.com/projects/p/owncloud/language/af/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/af/files_external.po b/l10n/af/files_external.po
new file mode 100644
index 00000000000..3818f8ed56b
--- /dev/null
+++ b/l10n/af/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Afrikaans (http://www.transifex.com/projects/p/owncloud/language/af/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/af/files_sharing.po b/l10n/af/files_sharing.po
new file mode 100644
index 00000000000..7ca711a2521
--- /dev/null
+++ b/l10n/af/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Afrikaans (http://www.transifex.com/projects/p/owncloud/language/af/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/af/files_versions.po b/l10n/af/files_versions.po
new file mode 100644
index 00000000000..d7b621cc6f3
--- /dev/null
+++ b/l10n/af/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Afrikaans (http://www.transifex.com/projects/p/owncloud/language/af/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/af/lib.po b/l10n/af/lib.po
new file mode 100644
index 00000000000..a5cbac26247
--- /dev/null
+++ b/l10n/af/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Afrikaans (http://www.transifex.com/projects/p/owncloud/language/af/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/af/settings.po b/l10n/af/settings.po
index c861f1ae1c8..1d213427bcb 100644
--- a/l10n/af/settings.po
+++ b/l10n/af/settings.po
@@ -7,16 +7,20 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Afrikaans (http://www.transifex.net/projects/p/owncloud/language/af/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Afrikaans (http://www.transifex.com/projects/p/owncloud/language/af/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: af\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: ajax/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
msgstr ""
@@ -25,23 +29,31 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr ""
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr ""
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr ""
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
msgstr ""
@@ -49,35 +61,55 @@ msgstr ""
msgid "Saving..."
msgstr ""
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr ""
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr ""
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr ""
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr ""
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr ""
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr ""
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr ""
@@ -169,34 +201,38 @@ msgstr ""
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr ""
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr ""
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr ""
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr ""
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr ""
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr ""
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr ""
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr ""
diff --git a/l10n/af/tasks.po b/l10n/af/tasks.po
new file mode 100644
index 00000000000..ced9b6ce121
--- /dev/null
+++ b/l10n/af/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Afrikaans (http://www.transifex.com/projects/p/owncloud/language/af/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/af/user_ldap.po b/l10n/af/user_ldap.po
new file mode 100644
index 00000000000..7abe79a5a8a
--- /dev/null
+++ b/l10n/af/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Afrikaans (http://www.transifex.com/projects/p/owncloud/language/af/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/af/user_migrate.po b/l10n/af/user_migrate.po
new file mode 100644
index 00000000000..f1829f1329f
--- /dev/null
+++ b/l10n/af/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Afrikaans (http://www.transifex.com/projects/p/owncloud/language/af/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/af/user_openid.po b/l10n/af/user_openid.po
new file mode 100644
index 00000000000..7d05e139876
--- /dev/null
+++ b/l10n/af/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Afrikaans (http://www.transifex.com/projects/p/owncloud/language/af/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/ar/admin_dependencies_chk.po b/l10n/ar/admin_dependencies_chk.po
new file mode 100644
index 00000000000..cd7fa85a2b2
--- /dev/null
+++ b/l10n/ar/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/ar/admin_migrate.po b/l10n/ar/admin_migrate.po
new file mode 100644
index 00000000000..9dcf129cad3
--- /dev/null
+++ b/l10n/ar/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/ar/bookmarks.po b/l10n/ar/bookmarks.po
new file mode 100644
index 00000000000..50d8ccbf671
--- /dev/null
+++ b/l10n/ar/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/ar/calendar.po b/l10n/ar/calendar.po
index ac28bf52235..947cca6fda0 100644
--- a/l10n/ar/calendar.po
+++ b/l10n/ar/calendar.po
@@ -8,322 +8,424 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Arabic (http://www.transifex.net/projects/p/owncloud/language/ar/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 09:47+0000\n"
+"Last-Translator: blackcoder <tarek.taha@gmail.com>\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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr "ليس جميع الجداول الزمنيه محÙوضه مؤقة"
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr "كل شيء محÙوض مؤقة"
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
-msgstr ""
+msgstr "لم يتم العثور على جدول الزمني"
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
-msgstr ""
+msgstr "لم يتم العثور على احداث"
#: ajax/event/edit.form.php:20
msgid "Wrong calendar"
msgstr "جدول زمني خاطئ"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "التوقيت الجديد"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "تم تغيير المنطقة الزمنية"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "طلب غير Ù…Ùهوم"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:37 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "الجدول الزمني"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd M/d"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "ddd M/d"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "ddd M/d"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-msgstr ""
+msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, MMM d, yyyy"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "عيد ميلاد"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "عمل"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "إتصال"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "الزبائن"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "المرسل"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "عطلة"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Ø£Ùكار"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "رحلة"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "يوبيل"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "إجتماع"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "شيء آخر"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "شخصي"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "مشاريع"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "اسئلة"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "العمل"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr "من قبل"
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
-msgstr ""
+msgstr "غير مسمى"
+
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "جدول زمني جديد"
-#: lib/object.php:330
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "لا يعاد"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "يومي"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "أسبوعي"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "كل نهاية الأسبوع"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "كل اسبوعين"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "شهري"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "سنوي"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "بتاتا"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "حسب تسلسل الحدوث"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "حسب التاريخ"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "حسب يوم الشهر"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "حسب يوم الاسبوع"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "الأثنين"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "الثلاثاء"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "الاربعاء"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "الخميس"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "الجمعه"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "السبت"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "الاحد"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "الاحداث باسبوع الشهر"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "أول"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "ثاني"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "ثالث"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "رابع"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "خامس"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "أخير"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "كانون الثاني"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "شباط"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "آذار"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "نيسان"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "أيار"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "حزيران"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "تموز"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "آب"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "أيلول"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "تشرين الاول"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "تشرين الثاني"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "كانون الاول"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "حسب تاريخ الحدث"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "حسب يوم السنه"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "حسب رقم الاسبوع"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "حسب اليوم و الشهر"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "تاريخ"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "تقويم"
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr "أحد"
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr "أثن."
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr "ثلا."
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr "أرب."
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr "خمي."
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr "جمع."
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr "سبت"
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr "Ùƒ2"
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr "شبا."
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr "آذا."
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr "نيس."
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr "أيا."
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "كل النهار"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "جدول زمني جديد"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "خانات خالية من المعلومات"
@@ -357,71 +459,63 @@ msgstr "هذا الحدث ينتهي قبل أن يبدأ"
msgid "There was a database fail"
msgstr "خطأ ÙÙŠ قاعدة البيانات"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "إسبوع"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "شهر"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "قائمة"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "اليوم"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "الجداول الزمنية"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "لم يتم قراءة المل٠بنجاح."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "إختر الجدول الزمني الرئيسي"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
-msgstr ""
+msgstr "جداولك الزمنيه"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "وصلة CalDav"
#: templates/part.choosecalendar.php:31
msgid "Shared calendars"
-msgstr ""
+msgstr "جداول زمنيه مشتركه"
#: templates/part.choosecalendar.php:48
msgid "No shared calendars"
-msgstr ""
+msgstr "لا يوجد جداول زمنيه مشتركه"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
-msgstr ""
+msgstr "شارك الجدول الزمني"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "تحميل"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "تعديل"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "حذÙ"
#: templates/part.choosecalendar.rowfields.shared.php:4
msgid "shared with you by"
-msgstr ""
+msgstr "مشاركه من قبل"
#: templates/part.editcalendar.php:9
msgid "New calendar"
@@ -466,23 +560,23 @@ msgstr "تصدير المعلومات"
#: templates/part.eventform.php:8 templates/part.showevent.php:3
msgid "Eventinfo"
-msgstr ""
+msgstr "تÙاصيل الحدث"
#: templates/part.eventform.php:9 templates/part.showevent.php:4
msgid "Repeating"
-msgstr ""
+msgstr "يعاد"
#: templates/part.eventform.php:10 templates/part.showevent.php:5
msgid "Alarm"
-msgstr ""
+msgstr "تنبيه"
#: templates/part.eventform.php:11 templates/part.showevent.php:6
msgid "Attendees"
-msgstr ""
+msgstr "الحضور"
#: templates/part.eventform.php:13
msgid "Share"
-msgstr ""
+msgstr "شارك"
#: templates/part.eventform.php:21
msgid "Title of the Event"
@@ -494,29 +588,29 @@ msgstr "Ùئة"
#: templates/part.eventform.php:29
msgid "Separate categories with commas"
-msgstr ""
+msgstr "اÙصل الÙئات بالÙواصل"
#: templates/part.eventform.php:30
msgid "Edit categories"
-msgstr ""
+msgstr "عدل الÙئات"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "حدث ÙÙŠ يوم كامل"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "من"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "إلى"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "خيارات متقدمة"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "مكان"
@@ -524,7 +618,7 @@ msgstr "مكان"
msgid "Location of the Event"
msgstr "مكان الحدث"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "مواصÙات"
@@ -532,84 +626,86 @@ msgstr "مواصÙات"
msgid "Description of the Event"
msgstr "وص٠الحدث"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "إعادة"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "تعديلات متقدمه"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "اختر ايام الاسبوع"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "اختر الايام"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "و التواريخ حسب يوم السنه."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "و الاحداث حسب يوم الشهر."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "اختر الاشهر"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "اختر الاسابيع"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "و الاحداث حسب اسبوع السنه"
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "المده الÙاصله"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "نهايه"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "الاحداث"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "انشاء جدول زمني جديد"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "أدخل مل٠التقويم"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "الرجاء إختر الجدول الزمني"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "انشاء جدول زمني جديد"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "أسم الجدول الزمني الجديد"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "إدخال"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "يتم ادخال الجدول الزمني"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "تم ادخال الجدول الزمني بنجاح"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "إدخال"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "أغلق الحوار"
@@ -619,72 +715,100 @@ msgstr "إضاÙØ© حدث جديد"
#: templates/part.showevent.php:1
msgid "View an event"
-msgstr ""
+msgstr "شاهد الحدث"
#: templates/part.showevent.php:23
msgid "No categories selected"
-msgstr ""
-
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "اختر الÙئة"
+msgstr "لم يتم اختيار الÙئات"
#: templates/part.showevent.php:37
msgid "of"
-msgstr ""
+msgstr "من"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
+msgstr "ÙÙŠ"
+
+#: templates/settings.php:10
+msgid "General"
msgstr ""
-#: templates/settings.php:14
+#: templates/settings.php:15
msgid "Timezone"
msgstr "المنطقة الزمنية"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "راقب دائما تغير التقويم الزمني"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "شكل الوقت"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24 ساعة"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12 ساعة"
-#: templates/settings.php:40
-msgid "First day of the week"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "عنوان لتحديث ال CalDAV الجدول الزمني"
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
-msgstr ""
+msgstr "المستخدمين"
#: templates/share.dropdown.php:21
msgid "select users"
-msgstr ""
+msgstr "اختر المستخدمين"
#: templates/share.dropdown.php:36 templates/share.dropdown.php:62
msgid "Editable"
-msgstr ""
+msgstr "يمكن تعديله"
#: templates/share.dropdown.php:48
msgid "Groups"
-msgstr ""
+msgstr "مجموعات"
#: templates/share.dropdown.php:49
msgid "select groups"
-msgstr ""
+msgstr "اختر المجموعات"
#: templates/share.dropdown.php:75
msgid "make public"
-msgstr ""
+msgstr "حدث عام"
diff --git a/l10n/ar/contacts.po b/l10n/ar/contacts.po
index 518656c953d..9740f17457c 100644
--- a/l10n/ar/contacts.po
+++ b/l10n/ar/contacts.po
@@ -8,220 +8,206 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Arabic (http://www.transifex.net/projects/p/owncloud/language/ar/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "خطء خلال توقي٠كتاب العناوين."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "خطء خلال اضاÙØ© معرÙÙ‡ جديده."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "لا يمكنك اضاÙÙ‡ صÙÙ‡ خاليه."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "يجب ملء على الاقل خانه واحده من العنوان."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr ""
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
msgstr ""
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "خطء خلال اضاÙØ© صÙØ© المعرÙÙ‡."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "خطء خلال تعديل كتاب العناوين"
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr ""
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr ""
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr ""
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr ""
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr ""
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "خطء خلال اضاÙØ© معرÙÙ‡ جديده."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr ""
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "لا يمكنك اضاÙÙ‡ صÙÙ‡ خاليه."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "يجب ملء على الاقل خانه واحده من العنوان."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "المعلومات الموجودة ÙÙŠ ال vCard غير صحيحة. الرجاء إعادة تحديث الصÙحة."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr ""
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr ""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
msgstr ""
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "خطء خلال اضاÙØ© كتاب عناوين."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr ""
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "خطء خلال تÙعيل كتاب العناوين."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr ""
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr ""
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr ""
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr ""
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr ""
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr ""
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "المعلومات الموجودة ÙÙŠ ال vCard غير صحيحة. الرجاء إعادة تحديث الصÙحة."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "خطء خلال محي الصÙÙ‡."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr ""
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr ""
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr ""
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr ""
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr ""
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
msgstr ""
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
msgstr ""
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
msgstr ""
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
msgstr ""
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
msgstr ""
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
msgstr ""
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
msgstr ""
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr ""
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr ""
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "خطء خلال تعديل الصÙÙ‡."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr ""
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "خطء خلال تعديل كتاب العناوين"
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr ""
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr ""
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
msgstr ""
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
msgstr ""
@@ -229,415 +215,562 @@ msgstr ""
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "المعارÙ"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
msgstr ""
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
msgstr ""
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
msgstr ""
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
msgstr ""
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
msgstr ""
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/loader.js:49
+msgid "Result: "
msgstr ""
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
+#: js/loader.js:49
+msgid " imported, "
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: js/loader.js:49
+msgid " failed."
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "هذا ليس دÙتر عناوينك."
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "لم يتم العثور على الشخص."
+
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "هذا ليس دÙتر عناوينك."
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "لم يتم العثور على الشخص."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "عنوان"
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "الهاتÙ"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "البريد الالكتروني"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "المؤسسة"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "الوظيÙØ©"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "البيت"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "الهات٠المحمول"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "معلومات إضاÙية"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "صوت"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr ""
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "الÙاكس"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "الÙيديو"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "الرنان"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr ""
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "تاريخ الميلاد"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr ""
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "معرÙÙ‡"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "أض٠شخص "
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "كتب العناوين"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
msgstr ""
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "كتاب عناوين جديد"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
+#: templates/index.php:39
+msgid "Navigation"
msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "وصلة CardDav"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "انزال"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "تعديل"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "حذÙ"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "انزال المعرÙÙ‡"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "امحي المعرÙÙ‡"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr ""
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr ""
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr ""
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "المؤسسة"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "حذÙ"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr ""
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr ""
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "تاريخ الميلاد"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr ""
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr ""
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr ""
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr ""
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Ù…Ùضل"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr ""
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr ""
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr ""
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr ""
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr ""
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr ""
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr ""
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr ""
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "الهاتÙ"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr ""
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "البريد الالكتروني"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr ""
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "عنوان"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
+#: templates/part.contact.php:133
+msgid "Note"
msgstr ""
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr ""
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "انزال المعرÙÙ‡"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "امحي المعرÙÙ‡"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
msgstr ""
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr ""
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "نوع"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "العنوان البريدي"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "إضاÙØ©"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "شارع"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "المدينة"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "المنطقة"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "رقم المنطقة"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
-msgid "Country"
-msgstr "البلد"
-
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
msgstr ""
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "أدخل"
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr "البلد"
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
@@ -719,35 +852,6 @@ msgstr ""
msgid "Sn."
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "كتاب عناوين جديد"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "عدل كتاب العناوين"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "الاسم المعروض"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Ùعال"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Ø­Ùظ"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "ارسال"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "الغاء"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr ""
@@ -764,57 +868,86 @@ msgstr ""
msgid "Name of new addressbook"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
-msgstr ""
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr ""
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
msgstr ""
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
msgstr ""
-#: templates/part.no_contacts.php:2
-msgid "You have no contacts in your addressbook."
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
msgstr ""
-#: templates/part.no_contacts.php:4
-msgid "Add contact"
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
msgstr ""
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
msgstr ""
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr ""
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr ""
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr ""
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr ""
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "انزال"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "تعديل"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "كتاب عناوين جديد"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Ø­Ùظ"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "الغاء"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/ar/core.po b/l10n/ar/core.po
index 049f3ebca57..a4cc8c065a3 100644
--- a/l10n/ar/core.po
+++ b/l10n/ar/core.po
@@ -8,10 +8,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Arabic (http://www.transifex.net/projects/p/owncloud/language/ar/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -34,51 +34,55 @@ msgstr ""
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
msgstr ""
-#: js/js.js:520
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "تعديلات"
+
+#: js/js.js:573
msgid "January"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
msgstr ""
@@ -107,10 +111,6 @@ msgid "Error"
msgstr ""
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "استرجاع كلمة السر"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr ""
@@ -240,14 +240,10 @@ msgstr "انهاء التعديلات"
msgid "web services under your control"
msgstr "خدمات الوب تحت تصرÙÙƒ"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "الخروج"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "تعديلات"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "هل نسيت كلمة السر؟"
diff --git a/l10n/ar/files.po b/l10n/ar/files.po
index eaf684ef80d..36056ab59ee 100644
--- a/l10n/ar/files.po
+++ b/l10n/ar/files.po
@@ -8,43 +8,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Arabic (http://www.transifex.net/projects/p/owncloud/language/ar/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "تم ترÙيع الملÙات بنجاح."
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "حجم المل٠الذي تريد ترÙيعه أعلى مما upload_max_filesize يسمح به ÙÙŠ مل٠php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "تم ترÙيع جزء من الملÙات الذي تريد ترÙيعها Ùقط"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "لم يتم ترÙيع أي من الملÙات"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "المجلد المؤقت غير موجود"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr ""
@@ -52,55 +52,83 @@ msgstr ""
msgid "Files"
msgstr "الملÙات"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "محذوÙ"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
msgstr ""
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
msgstr ""
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "حجم"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "معدل"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
msgstr ""
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
msgstr ""
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
msgstr ""
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
msgstr ""
@@ -172,10 +200,6 @@ msgstr ""
msgid "Download"
msgstr "تحميل"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "محذوÙ"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "حجم الترÙيع أعلى من المسموح"
diff --git a/l10n/ar/files_encryption.po b/l10n/ar/files_encryption.po
new file mode 100644
index 00000000000..18f508df5b4
--- /dev/null
+++ b/l10n/ar/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/ar/files_external.po b/l10n/ar/files_external.po
new file mode 100644
index 00000000000..c0dcac27be9
--- /dev/null
+++ b/l10n/ar/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/ar/files_sharing.po b/l10n/ar/files_sharing.po
new file mode 100644
index 00000000000..f3922ed92a3
--- /dev/null
+++ b/l10n/ar/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/ar/files_versions.po b/l10n/ar/files_versions.po
new file mode 100644
index 00000000000..de2471bc46e
--- /dev/null
+++ b/l10n/ar/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/ar/lib.po b/l10n/ar/lib.po
new file mode 100644
index 00000000000..36dea95d346
--- /dev/null
+++ b/l10n/ar/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/ar/media.po b/l10n/ar/media.po
index 60e237f0d33..b72ad0a3ec1 100644
--- a/l10n/ar/media.po
+++ b/l10n/ar/media.po
@@ -3,28 +3,28 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# <tarek.taha@gmail.com>, 2011.
+# <tarek.taha@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Arabic (http://www.transifex.net/projects/p/owncloud/language/ar/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 09:27+0000\n"
+"Last-Translator: blackcoder <tarek.taha@gmail.com>\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"
-#: appinfo/app.php:32 templates/player.php:8
+#: appinfo/app.php:45 templates/player.php:8
msgid "Music"
msgstr "الموسيقى"
#: js/music.js:18
msgid "Add album to playlist"
-msgstr ""
+msgstr "أض٠الالبوم الى القائمه"
#: templates/music.php:3 templates/player.php:12
msgid "Play"
diff --git a/l10n/ar/settings.po b/l10n/ar/settings.po
index 60fc1db8e19..0f13d4ebb2a 100644
--- a/l10n/ar/settings.po
+++ b/l10n/ar/settings.po
@@ -9,16 +9,20 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Arabic (http://www.transifex.net/projects/p/owncloud/language/ar/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
msgstr ""
@@ -27,23 +31,31 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "تم تغيير ال OpenID"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "طلبك غير Ù…Ùهوم"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "تم تغيير اللغة"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
msgstr ""
@@ -51,35 +63,55 @@ msgstr ""
msgid "Saving..."
msgstr ""
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "__language_name__"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr ""
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr ""
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr ""
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "إختر تطبيقاً"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-مسجل"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "من قبل"
@@ -171,34 +203,38 @@ msgstr "ساعد ÙÙŠ الترجمه"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "إستخدم هذا العنوان للإتصال ب ownCloud داخل نظام الملÙات "
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "الاسم"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "كلمات السر"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "مجموعات"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "انشئ"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr ""
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr ""
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "حصه"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "حذÙ"
diff --git a/l10n/ar/tasks.po b/l10n/ar/tasks.po
new file mode 100644
index 00000000000..baa311388ff
--- /dev/null
+++ b/l10n/ar/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/ar/user_ldap.po b/l10n/ar/user_ldap.po
new file mode 100644
index 00000000000..fc345689568
--- /dev/null
+++ b/l10n/ar/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/ar/user_migrate.po b/l10n/ar/user_migrate.po
new file mode 100644
index 00000000000..6a29ae80a3d
--- /dev/null
+++ b/l10n/ar/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/ar/user_openid.po b/l10n/ar/user_openid.po
new file mode 100644
index 00000000000..7063958b173
--- /dev/null
+++ b/l10n/ar/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/ar_SA/admin_dependencies_chk.po b/l10n/ar_SA/admin_dependencies_chk.po
new file mode 100644
index 00000000000..defa48d8f6f
--- /dev/null
+++ b/l10n/ar_SA/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar_SA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/ar_SA/admin_migrate.po b/l10n/ar_SA/admin_migrate.po
new file mode 100644
index 00000000000..04ac5b2dfb1
--- /dev/null
+++ b/l10n/ar_SA/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar_SA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/ar_SA/bookmarks.po b/l10n/ar_SA/bookmarks.po
new file mode 100644
index 00000000000..476c475f460
--- /dev/null
+++ b/l10n/ar_SA/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar_SA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/ar_SA/calendar.po b/l10n/ar_SA/calendar.po
new file mode 100644
index 00000000000..8229289fd36
--- /dev/null
+++ b/l10n/ar_SA/calendar.po
@@ -0,0 +1,813 @@
+# 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: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar_SA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
+msgid "No calendars found."
+msgstr ""
+
+#: ajax/categories/rescan.php:37
+msgid "No events found."
+msgstr ""
+
+#: ajax/event/edit.form.php:20
+msgid "Wrong calendar"
+msgstr ""
+
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
+#: ajax/settings/guesstimezone.php:25
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settings/settimezone.php:23
+msgid "Timezone changed"
+msgstr ""
+
+#: ajax/settings/settimezone.php:25
+msgid "Invalid request"
+msgstr ""
+
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
+msgid "Calendar"
+msgstr ""
+
+#: js/calendar.js:832
+msgid "ddd"
+msgstr ""
+
+#: js/calendar.js:833
+msgid "ddd M/d"
+msgstr ""
+
+#: js/calendar.js:834
+msgid "dddd M/d"
+msgstr ""
+
+#: js/calendar.js:837
+msgid "MMMM yyyy"
+msgstr ""
+
+#: js/calendar.js:839
+msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
+msgstr ""
+
+#: js/calendar.js:841
+msgid "dddd, MMM d, yyyy"
+msgstr ""
+
+#: lib/app.php:121
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:122
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:123
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:124
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:125
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:126
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:127
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:128
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:129
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:130
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:131
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:132
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:133
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:134
+msgid "Questions"
+msgstr ""
+
+#: lib/app.php:135
+msgid "Work"
+msgstr ""
+
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
+msgid "unnamed"
+msgstr ""
+
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr ""
+
+#: lib/object.php:372
+msgid "Does not repeat"
+msgstr ""
+
+#: lib/object.php:373
+msgid "Daily"
+msgstr ""
+
+#: lib/object.php:374
+msgid "Weekly"
+msgstr ""
+
+#: lib/object.php:375
+msgid "Every Weekday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "Bi-Weekly"
+msgstr ""
+
+#: lib/object.php:377
+msgid "Monthly"
+msgstr ""
+
+#: lib/object.php:378
+msgid "Yearly"
+msgstr ""
+
+#: lib/object.php:388
+msgid "never"
+msgstr ""
+
+#: lib/object.php:389
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:390
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:400
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:401
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:412 templates/calendar.php:5
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:413 templates/calendar.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:414 templates/calendar.php:5
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:415 templates/calendar.php:5
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:416 templates/calendar.php:5
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:427
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:428
+msgid "first"
+msgstr ""
+
+#: lib/object.php:429
+msgid "second"
+msgstr ""
+
+#: lib/object.php:430
+msgid "third"
+msgstr ""
+
+#: lib/object.php:431
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:432
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:433
+msgid "last"
+msgstr ""
+
+#: lib/object.php:467 templates/calendar.php:7
+msgid "January"
+msgstr ""
+
+#: lib/object.php:468 templates/calendar.php:7
+msgid "February"
+msgstr ""
+
+#: lib/object.php:469 templates/calendar.php:7
+msgid "March"
+msgstr ""
+
+#: lib/object.php:470 templates/calendar.php:7
+msgid "April"
+msgstr ""
+
+#: lib/object.php:471 templates/calendar.php:7
+msgid "May"
+msgstr ""
+
+#: lib/object.php:472 templates/calendar.php:7
+msgid "June"
+msgstr ""
+
+#: lib/object.php:473 templates/calendar.php:7
+msgid "July"
+msgstr ""
+
+#: lib/object.php:474 templates/calendar.php:7
+msgid "August"
+msgstr ""
+
+#: lib/object.php:475 templates/calendar.php:7
+msgid "September"
+msgstr ""
+
+#: lib/object.php:476 templates/calendar.php:7
+msgid "October"
+msgstr ""
+
+#: lib/object.php:477 templates/calendar.php:7
+msgid "November"
+msgstr ""
+
+#: lib/object.php:478 templates/calendar.php:7
+msgid "December"
+msgstr ""
+
+#: lib/object.php:488
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:489
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:490
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:491
+msgid "by day and month"
+msgstr ""
+
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:43
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
+#: templates/calendar.php:11
+msgid "All day"
+msgstr ""
+
+#: templates/calendar.php:13
+msgid "Missing fields"
+msgstr ""
+
+#: templates/calendar.php:14 templates/part.eventform.php:19
+#: templates/part.showevent.php:11
+msgid "Title"
+msgstr ""
+
+#: templates/calendar.php:16
+msgid "From Date"
+msgstr ""
+
+#: templates/calendar.php:17
+msgid "From Time"
+msgstr ""
+
+#: templates/calendar.php:18
+msgid "To Date"
+msgstr ""
+
+#: templates/calendar.php:19
+msgid "To Time"
+msgstr ""
+
+#: templates/calendar.php:20
+msgid "The event ends before it starts"
+msgstr ""
+
+#: templates/calendar.php:21
+msgid "There was a database fail"
+msgstr ""
+
+#: templates/calendar.php:39
+msgid "Week"
+msgstr ""
+
+#: templates/calendar.php:40
+msgid "Month"
+msgstr ""
+
+#: templates/calendar.php:41
+msgid "List"
+msgstr ""
+
+#: templates/calendar.php:45
+msgid "Today"
+msgstr ""
+
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
+
+#: templates/part.choosecalendar.php:2
+msgid "Your calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.php:27
+#: templates/part.choosecalendar.rowfields.php:11
+msgid "CalDav Link"
+msgstr ""
+
+#: templates/part.choosecalendar.php:31
+msgid "Shared calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.php:48
+msgid "No shared calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:8
+msgid "Share Calendar"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:14
+msgid "Download"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:17
+msgid "Edit"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:20
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.shared.php:4
+msgid "shared with you by"
+msgstr ""
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr ""
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr ""
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr ""
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr ""
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr ""
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr ""
+
+#: templates/part.eventform.php:8 templates/part.showevent.php:3
+msgid "Eventinfo"
+msgstr ""
+
+#: templates/part.eventform.php:9 templates/part.showevent.php:4
+msgid "Repeating"
+msgstr ""
+
+#: templates/part.eventform.php:10 templates/part.showevent.php:5
+msgid "Alarm"
+msgstr ""
+
+#: templates/part.eventform.php:11 templates/part.showevent.php:6
+msgid "Attendees"
+msgstr ""
+
+#: templates/part.eventform.php:13
+msgid "Share"
+msgstr ""
+
+#: templates/part.eventform.php:21
+msgid "Title of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:27 templates/part.showevent.php:19
+msgid "Category"
+msgstr ""
+
+#: templates/part.eventform.php:29
+msgid "Separate categories with commas"
+msgstr ""
+
+#: templates/part.eventform.php:30
+msgid "Edit categories"
+msgstr ""
+
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
+msgid "All Day Event"
+msgstr ""
+
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
+msgid "From"
+msgstr ""
+
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
+msgid "To"
+msgstr ""
+
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
+msgid "Advanced options"
+msgstr ""
+
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
+msgid "Location"
+msgstr ""
+
+#: templates/part.eventform.php:83
+msgid "Location of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
+msgid "Description"
+msgstr ""
+
+#: templates/part.eventform.php:91
+msgid "Description of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
+msgid "Repeat"
+msgstr ""
+
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:164 templates/part.eventform.php:177
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
+
+#: templates/part.import.php:36
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
+
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
+
+#: templates/part.import.php:47
+msgid "Import"
+msgstr ""
+
+#: templates/part.import.php:56
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr ""
+
+#: templates/part.showevent.php:1
+msgid "View an event"
+msgstr ""
+
+#: templates/part.showevent.php:23
+msgid "No categories selected"
+msgstr ""
+
+#: templates/part.showevent.php:37
+msgid "of"
+msgstr ""
+
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
+msgid "at"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "Timezone"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
+
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
+
+#: templates/settings.php:57
+msgid "24h"
+msgstr ""
+
+#: templates/settings.php:58
+msgid "12h"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
+
+#: templates/share.dropdown.php:20
+msgid "Users"
+msgstr ""
+
+#: templates/share.dropdown.php:21
+msgid "select users"
+msgstr ""
+
+#: templates/share.dropdown.php:36 templates/share.dropdown.php:62
+msgid "Editable"
+msgstr ""
+
+#: templates/share.dropdown.php:48
+msgid "Groups"
+msgstr ""
+
+#: templates/share.dropdown.php:49
+msgid "select groups"
+msgstr ""
+
+#: templates/share.dropdown.php:75
+msgid "make public"
+msgstr ""
diff --git a/l10n/ar_SA/contacts.po b/l10n/ar_SA/contacts.po
new file mode 100644
index 00000000000..26cc5d2266e
--- /dev/null
+++ b/l10n/ar_SA/contacts.po
@@ -0,0 +1,952 @@
+# 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: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar_SA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr ""
+
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr ""
+
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr ""
+
+#: ajax/categories/categoriesfor.php:17
+msgid "No ID provided"
+msgstr ""
+
+#: ajax/categories/categoriesfor.php:34
+msgid "Error setting checksum."
+msgstr ""
+
+#: ajax/categories/delete.php:19
+msgid "No categories selected for deletion."
+msgstr ""
+
+#: ajax/categories/delete.php:26
+msgid "No address books found."
+msgstr ""
+
+#: ajax/categories/delete.php:34
+msgid "No contacts found."
+msgstr ""
+
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr ""
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr ""
+
+#: ajax/contact/details.php:31
+msgid "Missing ID"
+msgstr ""
+
+#: ajax/contact/details.php:36
+msgid "Error parsing VCard for ID: \""
+msgstr ""
+
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr ""
+
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr ""
+
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr ""
+
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
+#: ajax/uploadphoto.php:68
+msgid "No contact ID was submitted."
+msgstr ""
+
+#: ajax/currentphoto.php:36
+msgid "Error reading contact photo."
+msgstr ""
+
+#: ajax/currentphoto.php:48
+msgid "Error saving temporary file."
+msgstr ""
+
+#: ajax/currentphoto.php:51
+msgid "The loading photo is not valid."
+msgstr ""
+
+#: ajax/editname.php:31
+msgid "Contact ID is missing."
+msgstr ""
+
+#: ajax/oc_photo.php:32
+msgid "No photo path was submitted."
+msgstr ""
+
+#: ajax/oc_photo.php:39
+msgid "File doesn't exist:"
+msgstr ""
+
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
+msgid "Error loading image."
+msgstr ""
+
+#: ajax/savecrop.php:69
+msgid "Error getting contact object."
+msgstr ""
+
+#: ajax/savecrop.php:79
+msgid "Error getting PHOTO property."
+msgstr ""
+
+#: ajax/savecrop.php:98
+msgid "Error saving contact."
+msgstr ""
+
+#: ajax/savecrop.php:109
+msgid "Error resizing image"
+msgstr ""
+
+#: ajax/savecrop.php:112
+msgid "Error cropping image"
+msgstr ""
+
+#: ajax/savecrop.php:115
+msgid "Error creating temporary image"
+msgstr ""
+
+#: ajax/savecrop.php:118
+msgid "Error finding image: "
+msgstr ""
+
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
+msgid "Error uploading contacts to storage."
+msgstr ""
+
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
+msgid "Couldn't save temporary image: "
+msgstr ""
+
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
+msgid "Couldn't load temporary image: "
+msgstr ""
+
+#: ajax/uploadphoto.php:71
+msgid "No file was uploaded. Unknown error"
+msgstr ""
+
+#: appinfo/app.php:21
+msgid "Contacts"
+msgstr ""
+
+#: js/contacts.js:71
+msgid "Sorry, this functionality has not been implemented yet"
+msgstr ""
+
+#: js/contacts.js:71
+msgid "Not implemented"
+msgstr ""
+
+#: js/contacts.js:76
+msgid "Couldn't get a valid address."
+msgstr ""
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
+msgid "Error"
+msgstr ""
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Permission error"
+msgstr ""
+
+#: js/contacts.js:763
+msgid "This property has to be non-empty."
+msgstr ""
+
+#: js/contacts.js:789
+msgid "Couldn't serialize elements."
+msgstr ""
+
+#: js/contacts.js:921 js/contacts.js:939
+msgid ""
+"'deleteProperty' called without type argument. Please report at "
+"bugs.owncloud.org"
+msgstr ""
+
+#: js/contacts.js:958
+msgid "Edit name"
+msgstr ""
+
+#: js/contacts.js:1250
+msgid "No files selected for upload."
+msgstr ""
+
+#: js/contacts.js:1258
+msgid ""
+"The file you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr ""
+
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
+msgid "Select type"
+msgstr ""
+
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr ""
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr ""
+
+#: js/loader.js:49
+msgid "Result: "
+msgstr ""
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr ""
+
+#: js/loader.js:49
+msgid " failed."
+msgstr ""
+
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
+msgstr ""
+
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr ""
+
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr ""
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr ""
+
+#: lib/app.php:116
+msgid "Jabber"
+msgstr ""
+
+#: lib/app.php:121
+msgid "AIM"
+msgstr ""
+
+#: lib/app.php:126
+msgid "MSN"
+msgstr ""
+
+#: lib/app.php:131
+msgid "Twitter"
+msgstr ""
+
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr ""
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
+
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
+
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
+
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
+
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
+msgid "Work"
+msgstr ""
+
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
+msgid "Home"
+msgstr ""
+
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
+msgid "Mobile"
+msgstr ""
+
+#: lib/app.php:203
+msgid "Text"
+msgstr ""
+
+#: lib/app.php:204
+msgid "Voice"
+msgstr ""
+
+#: lib/app.php:205
+msgid "Message"
+msgstr ""
+
+#: lib/app.php:206
+msgid "Fax"
+msgstr ""
+
+#: lib/app.php:207
+msgid "Video"
+msgstr ""
+
+#: lib/app.php:208
+msgid "Pager"
+msgstr ""
+
+#: lib/app.php:215
+msgid "Internet"
+msgstr ""
+
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
+msgid "{name}'s Birthday"
+msgstr ""
+
+#: lib/search.php:15
+msgid "Contact"
+msgstr ""
+
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
+msgid "Add Contact"
+msgstr ""
+
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr ""
+
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
+
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
+
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
+
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
+
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
+
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
+
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
+
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
+
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
+msgid "Drop photo to upload"
+msgstr ""
+
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
+msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
+msgstr ""
+
+#: templates/part.contact.php:36
+msgid "Edit name details"
+msgstr ""
+
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr ""
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr ""
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
+msgid "Nickname"
+msgstr ""
+
+#: templates/part.contact.php:42
+msgid "Enter nickname"
+msgstr ""
+
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
+msgid "dd-mm-yyyy"
+msgstr ""
+
+#: templates/part.contact.php:47 templates/part.contact.php:135
+msgid "Groups"
+msgstr ""
+
+#: templates/part.contact.php:49
+msgid "Separate groups with commas"
+msgstr ""
+
+#: templates/part.contact.php:50
+msgid "Edit groups"
+msgstr ""
+
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.contact.php:60
+msgid "Please specify a valid email address."
+msgstr ""
+
+#: templates/part.contact.php:60
+msgid "Enter email address"
+msgstr ""
+
+#: templates/part.contact.php:64
+msgid "Mail to address"
+msgstr ""
+
+#: templates/part.contact.php:65
+msgid "Delete email address"
+msgstr ""
+
+#: templates/part.contact.php:75
+msgid "Enter phone number"
+msgstr ""
+
+#: templates/part.contact.php:79
+msgid "Delete phone number"
+msgstr ""
+
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
+msgid "View on map"
+msgstr ""
+
+#: templates/part.contact.php:110
+msgid "Edit address details"
+msgstr ""
+
+#: templates/part.contact.php:116
+msgid "Add notes here."
+msgstr ""
+
+#: templates/part.contact.php:124
+msgid "Add field"
+msgstr ""
+
+#: templates/part.contact.php:129
+msgid "Phone"
+msgstr ""
+
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr ""
+
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
+
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr ""
+
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr ""
+
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.cropphoto.php:65
+msgid "The temporary image has been removed from cache."
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:6
+msgid "Edit address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:10
+msgid "Type"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
+msgid "PO Box"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
+msgid "Extended"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
+msgid "City"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:42
+msgid "Region"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
+msgid "Zipcode"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:16
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:23
+msgid "Hon. prefixes"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:27
+msgid "Miss"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:28
+msgid "Ms"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:29
+msgid "Mr"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:30
+msgid "Sir"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:31
+msgid "Mrs"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:32
+msgid "Dr"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:35
+msgid "Given name"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:37
+msgid "Additional names"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:39
+msgid "Family name"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:41
+msgid "Hon. suffixes"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:45
+msgid "J.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:46
+msgid "M.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:47
+msgid "D.O."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:48
+msgid "D.C."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:49
+msgid "Ph.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:50
+msgid "Esq."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:51
+msgid "Jr."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:52
+msgid "Sn."
+msgstr ""
+
+#: templates/part.import.php:1
+msgid "Import a contacts file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the addressbook"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new addressbook"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new addressbook"
+msgstr ""
+
+#: templates/part.import.php:20
+msgid "Importing contacts"
+msgstr ""
+
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
+msgstr ""
+
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "CardDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr ""
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr ""
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr ""
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/ar_SA/core.po b/l10n/ar_SA/core.po
new file mode 100644
index 00000000000..7f31f831b3d
--- /dev/null
+++ b/l10n/ar_SA/core.po
@@ -0,0 +1,268 @@
+# 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: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar_SA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/vcategories/add.php:23 ajax/vcategories/delete.php:23
+msgid "Application name not provided."
+msgstr ""
+
+#: ajax/vcategories/add.php:29
+msgid "No category to add?"
+msgstr ""
+
+#: ajax/vcategories/add.php:36
+msgid "This category already exists: "
+msgstr ""
+
+#: js/jquery-ui-1.8.16.custom.min.js:511
+msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+msgstr ""
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr ""
+
+#: js/js.js:573
+msgid "January"
+msgstr ""
+
+#: js/js.js:573
+msgid "February"
+msgstr ""
+
+#: js/js.js:573
+msgid "March"
+msgstr ""
+
+#: js/js.js:573
+msgid "April"
+msgstr ""
+
+#: js/js.js:573
+msgid "May"
+msgstr ""
+
+#: js/js.js:573
+msgid "June"
+msgstr ""
+
+#: js/js.js:574
+msgid "July"
+msgstr ""
+
+#: js/js.js:574
+msgid "August"
+msgstr ""
+
+#: js/js.js:574
+msgid "September"
+msgstr ""
+
+#: js/js.js:574
+msgid "October"
+msgstr ""
+
+#: js/js.js:574
+msgid "November"
+msgstr ""
+
+#: js/js.js:574
+msgid "December"
+msgstr ""
+
+#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:159
+msgid "No"
+msgstr ""
+
+#: js/oc-dialogs.js:160
+msgid "Yes"
+msgstr ""
+
+#: js/oc-dialogs.js:177
+msgid "Ok"
+msgstr ""
+
+#: js/oc-vcategories.js:68
+msgid "No categories selected for deletion."
+msgstr ""
+
+#: js/oc-vcategories.js:68
+msgid "Error"
+msgstr ""
+
+#: lostpassword/index.php:26
+msgid "ownCloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+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 "Requested"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:25
+#: templates/login.php:9
+msgid "Username"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:15
+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:14
+msgid "Add"
+msgstr ""
+
+#: templates/installation.php:23
+msgid "Create an <strong>admin account</strong>"
+msgstr ""
+
+#: templates/installation.php:29 templates/login.php:13
+msgid "Password"
+msgstr ""
+
+#: templates/installation.php:35
+msgid "Advanced"
+msgstr ""
+
+#: templates/installation.php:37
+msgid "Data folder"
+msgstr ""
+
+#: templates/installation.php:44
+msgid "Configure the database"
+msgstr ""
+
+#: templates/installation.php:49 templates/installation.php:60
+#: templates/installation.php:70
+msgid "will be used"
+msgstr ""
+
+#: templates/installation.php:82
+msgid "Database user"
+msgstr ""
+
+#: templates/installation.php:86
+msgid "Database password"
+msgstr ""
+
+#: templates/installation.php:90
+msgid "Database name"
+msgstr ""
+
+#: templates/installation.php:96
+msgid "Database host"
+msgstr ""
+
+#: templates/installation.php:101
+msgid "Finish setup"
+msgstr ""
+
+#: templates/layout.guest.php:42
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:49
+msgid "Log out"
+msgstr ""
+
+#: templates/login.php:6
+msgid "Lost your password?"
+msgstr ""
+
+#: templates/login.php:17
+msgid "remember"
+msgstr ""
+
+#: templates/login.php:18
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr ""
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr ""
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr ""
diff --git a/l10n/ar_SA/files.po b/l10n/ar_SA/files.po
new file mode 100644
index 00000000000..1e89550f0eb
--- /dev/null
+++ b/l10n/ar_SA/files.po
@@ -0,0 +1,218 @@
+# 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: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar_SA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/upload.php:20
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/upload.php:21
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: ajax/upload.php:22
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/upload.php:23
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/upload.php:24
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/upload.php:25
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/upload.php:26
+msgid "Failed to write to disk"
+msgstr ""
+
+#: appinfo/app.php:6
+msgid "Files"
+msgstr ""
+
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
+msgid "generating ZIP-file, it may take some time."
+msgstr ""
+
+#: js/files.js:200
+msgid "Unable to upload your file as it is a directory or has 0 bytes"
+msgstr ""
+
+#: js/files.js:200
+msgid "Upload Error"
+msgstr ""
+
+#: js/files.js:228 js/files.js:319 js/files.js:348
+msgid "Pending"
+msgstr ""
+
+#: js/files.js:333
+msgid "Upload cancelled."
+msgstr ""
+
+#: js/files.js:457
+msgid "Invalid name, '/' is not allowed."
+msgstr ""
+
+#: js/files.js:703 templates/index.php:55
+msgid "Size"
+msgstr ""
+
+#: js/files.js:704 templates/index.php:56
+msgid "Modified"
+msgstr ""
+
+#: js/files.js:731
+msgid "folder"
+msgstr ""
+
+#: js/files.js:733
+msgid "folders"
+msgstr ""
+
+#: js/files.js:741
+msgid "file"
+msgstr ""
+
+#: js/files.js:743
+msgid "files"
+msgstr ""
+
+#: templates/admin.php:5
+msgid "File handling"
+msgstr ""
+
+#: templates/admin.php:7
+msgid "Maximum upload size"
+msgstr ""
+
+#: templates/admin.php:7
+msgid "max. possible: "
+msgstr ""
+
+#: templates/admin.php:9
+msgid "Needed for multi-file and folder downloads."
+msgstr ""
+
+#: templates/admin.php:9
+msgid "Enable ZIP-download"
+msgstr ""
+
+#: templates/admin.php:11
+msgid "0 is unlimited"
+msgstr ""
+
+#: templates/admin.php:12
+msgid "Maximum input size for ZIP files"
+msgstr ""
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:11
+msgid "From url"
+msgstr ""
+
+#: templates/index.php:21
+msgid "Upload"
+msgstr ""
+
+#: templates/index.php:27
+msgid "Cancel upload"
+msgstr ""
+
+#: templates/index.php:39
+msgid "Nothing in here. Upload something!"
+msgstr ""
+
+#: templates/index.php:47
+msgid "Name"
+msgstr ""
+
+#: templates/index.php:49
+msgid "Share"
+msgstr ""
+
+#: templates/index.php:51
+msgid "Download"
+msgstr ""
+
+#: templates/index.php:64
+msgid "Upload too large"
+msgstr ""
+
+#: templates/index.php:66
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: templates/index.php:71
+msgid "Files are being scanned, please wait."
+msgstr ""
+
+#: templates/index.php:74
+msgid "Current scanning"
+msgstr ""
diff --git a/l10n/ar_SA/files_encryption.po b/l10n/ar_SA/files_encryption.po
new file mode 100644
index 00000000000..92f87d5baee
--- /dev/null
+++ b/l10n/ar_SA/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar_SA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/ar_SA/files_external.po b/l10n/ar_SA/files_external.po
new file mode 100644
index 00000000000..faa597d0f4c
--- /dev/null
+++ b/l10n/ar_SA/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar_SA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/ar_SA/files_sharing.po b/l10n/ar_SA/files_sharing.po
new file mode 100644
index 00000000000..c2408734072
--- /dev/null
+++ b/l10n/ar_SA/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar_SA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/ar_SA/files_versions.po b/l10n/ar_SA/files_versions.po
new file mode 100644
index 00000000000..0b3630c5046
--- /dev/null
+++ b/l10n/ar_SA/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar_SA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/ar_SA/gallery.po b/l10n/ar_SA/gallery.po
new file mode 100644
index 00000000000..9d60ea7bc6d
--- /dev/null
+++ b/l10n/ar_SA/gallery.po
@@ -0,0 +1,58 @@
+# 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: 2012-07-26 08:03+0200\n"
+"PO-Revision-Date: 2012-07-25 19:30+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar_SA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:39
+msgid "Pictures"
+msgstr ""
+
+#: js/pictures.js:12
+msgid "Share gallery"
+msgstr ""
+
+#: js/pictures.js:32
+msgid "Error: "
+msgstr ""
+
+#: js/pictures.js:32
+msgid "Internal error"
+msgstr ""
+
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+#: templates/view_album.php:36
+msgid "Remove confirmation"
+msgstr ""
+
+#: templates/view_album.php:37
+msgid "Do you want to remove album"
+msgstr ""
+
+#: templates/view_album.php:40
+msgid "Change album name"
+msgstr ""
+
+#: templates/view_album.php:43
+msgid "New album name"
+msgstr ""
diff --git a/l10n/ar_SA/lib.po b/l10n/ar_SA/lib.po
new file mode 100644
index 00000000000..1d1cba42b76
--- /dev/null
+++ b/l10n/ar_SA/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar_SA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/ar_SA/media.po b/l10n/ar_SA/media.po
new file mode 100644
index 00000000000..9f152efa421
--- /dev/null
+++ b/l10n/ar_SA/media.po
@@ -0,0 +1,66 @@
+# 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: 2012-07-26 08:03+0200\n"
+"PO-Revision-Date: 2011-08-13 02:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar_SA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:45 templates/player.php:8
+msgid "Music"
+msgstr ""
+
+#: js/music.js:18
+msgid "Add album to playlist"
+msgstr ""
+
+#: templates/music.php:3 templates/player.php:12
+msgid "Play"
+msgstr ""
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:13
+msgid "Pause"
+msgstr ""
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr ""
+
+#: templates/music.php:6 templates/player.php:14
+msgid "Next"
+msgstr ""
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr ""
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr ""
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr ""
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr ""
+
+#: templates/music.php:38
+msgid "Album"
+msgstr ""
+
+#: templates/music.php:39
+msgid "Title"
+msgstr ""
diff --git a/l10n/ar_SA/settings.po b/l10n/ar_SA/settings.po
new file mode 100644
index 00000000000..803e9d5953d
--- /dev/null
+++ b/l10n/ar_SA/settings.po
@@ -0,0 +1,238 @@
+# 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: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar_SA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
+#: ajax/lostpassword.php:14
+msgid "Email saved"
+msgstr ""
+
+#: ajax/lostpassword.php:16
+msgid "Invalid email"
+msgstr ""
+
+#: ajax/openid.php:16
+msgid "OpenID Changed"
+msgstr ""
+
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
+msgid "Invalid request"
+msgstr ""
+
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
+msgid "Language changed"
+msgstr ""
+
+#: js/apps.js:18
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:62
+msgid "Enable"
+msgstr ""
+
+#: js/personal.js:69
+msgid "Saving..."
+msgstr ""
+
+#: personal.php:46 personal.php:47
+msgid "__language_name__"
+msgstr ""
+
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
+msgid "Log"
+msgstr ""
+
+#: templates/admin.php:67
+msgid "More"
+msgstr ""
+
+#: templates/apps.php:10
+msgid "Add your App"
+msgstr ""
+
+#: templates/apps.php:26
+msgid "Select an App"
+msgstr ""
+
+#: templates/apps.php:29
+msgid "See application page at apps.owncloud.com"
+msgstr ""
+
+#: templates/apps.php:30
+msgid "-licensed"
+msgstr ""
+
+#: templates/apps.php:30
+msgid "by"
+msgstr ""
+
+#: templates/help.php:8
+msgid "Documentation"
+msgstr ""
+
+#: templates/help.php:9
+msgid "Managing Big Files"
+msgstr ""
+
+#: templates/help.php:10
+msgid "Ask a question"
+msgstr ""
+
+#: templates/help.php:22
+msgid "Problems connecting to help database."
+msgstr ""
+
+#: templates/help.php:23
+msgid "Go there manually."
+msgstr ""
+
+#: templates/help.php:31
+msgid "Answer"
+msgstr ""
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr ""
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr ""
+
+#: templates/personal.php:12
+msgid "Desktop and Mobile Syncing Clients"
+msgstr ""
+
+#: templates/personal.php:13
+msgid "Download"
+msgstr ""
+
+#: templates/personal.php:19
+msgid "Your password got changed"
+msgstr ""
+
+#: templates/personal.php:20
+msgid "Unable to change your password"
+msgstr ""
+
+#: templates/personal.php:21
+msgid "Current password"
+msgstr ""
+
+#: templates/personal.php:22
+msgid "New password"
+msgstr ""
+
+#: templates/personal.php:23
+msgid "show"
+msgstr ""
+
+#: templates/personal.php:24
+msgid "Change password"
+msgstr ""
+
+#: templates/personal.php:30
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:31
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:32
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:38 templates/personal.php:39
+msgid "Language"
+msgstr ""
+
+#: templates/personal.php:44
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:51
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr ""
+
+#: templates/users.php:21 templates/users.php:76
+msgid "Name"
+msgstr ""
+
+#: templates/users.php:23 templates/users.php:77
+msgid "Password"
+msgstr ""
+
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
+msgid "Groups"
+msgstr ""
+
+#: templates/users.php:32
+msgid "Create"
+msgstr ""
+
+#: templates/users.php:35
+msgid "Default Quota"
+msgstr ""
+
+#: templates/users.php:55 templates/users.php:138
+msgid "Other"
+msgstr ""
+
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:146
+msgid "Delete"
+msgstr ""
diff --git a/l10n/ar_SA/tasks.po b/l10n/ar_SA/tasks.po
new file mode 100644
index 00000000000..69ac800c5e7
--- /dev/null
+++ b/l10n/ar_SA/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar_SA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/ar_SA/user_ldap.po b/l10n/ar_SA/user_ldap.po
new file mode 100644
index 00000000000..92a90a4f3b0
--- /dev/null
+++ b/l10n/ar_SA/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar_SA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/ar_SA/user_migrate.po b/l10n/ar_SA/user_migrate.po
new file mode 100644
index 00000000000..c49cdec6c68
--- /dev/null
+++ b/l10n/ar_SA/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar_SA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/ar_SA/user_openid.po b/l10n/ar_SA/user_openid.po
new file mode 100644
index 00000000000..bf485303a2e
--- /dev/null
+++ b/l10n/ar_SA/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Arabic (Saudi Arabia) (http://www.transifex.com/projects/p/owncloud/language/ar_SA/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar_SA\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/bg_BG/admin_dependencies_chk.po b/l10n/bg_BG/admin_dependencies_chk.po
new file mode 100644
index 00000000000..a90db6fe74f
--- /dev/null
+++ b/l10n/bg_BG/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/bg_BG/admin_migrate.po b/l10n/bg_BG/admin_migrate.po
new file mode 100644
index 00000000000..75812340454
--- /dev/null
+++ b/l10n/bg_BG/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/bg_BG/bookmarks.po b/l10n/bg_BG/bookmarks.po
new file mode 100644
index 00000000000..b55c57ce251
--- /dev/null
+++ b/l10n/bg_BG/bookmarks.po
@@ -0,0 +1,61 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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: 2012-07-31 22:53+0200\n"
+"PO-Revision-Date: 2012-07-30 09:53+0000\n"
+"Last-Translator: Yasen Pramatarov <yasen@lindeas.com>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr "Отметки"
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr "неозаглавено"
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr "Завлачете това в лентата Ñ Ð¾Ñ‚Ð¼ÐµÑ‚ÐºÐ¸ на браузъра Ñи и го натиÑкайте, когато иÑкате да отметнете бързо нÑÐºÐ¾Ñ Ñтраница:"
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr "ОтмÑтане"
+
+#: templates/list.php:13
+msgid "Address"
+msgstr "ÐдреÑ"
+
+#: templates/list.php:14
+msgid "Title"
+msgstr "Заглавие"
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr "Етикети"
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° отметката"
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr "ÐÑмате отметки"
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr "Бутон за отметки <br />"
diff --git a/l10n/bg_BG/calendar.po b/l10n/bg_BG/calendar.po
index 7edfe714906..856d98f8e43 100644
--- a/l10n/bg_BG/calendar.po
+++ b/l10n/bg_BG/calendar.po
@@ -4,329 +4,432 @@
#
# Translators:
# Stefan Ilivanov <ilivanov@gmail.com>, 2011.
+# 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: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.net/projects/p/owncloud/language/bg_BG/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
-msgid "No calendars found."
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
msgstr ""
-#: ajax/categories/rescan.php:36
-msgid "No events found."
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
msgstr ""
+#: ajax/categories/rescan.php:29
+msgid "No calendars found."
+msgstr "Ðе Ñа открити календари."
+
+#: ajax/categories/rescan.php:37
+msgid "No events found."
+msgstr "Ðе Ñа открити ÑъбитиÑ."
+
#: ajax/event/edit.form.php:20
msgid "Wrong calendar"
msgstr ""
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr "Грешка при внаÑÑне"
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
-msgstr ""
+msgstr "Ðов чаÑови поÑÑ:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "ЧаÑовата зона е Ñменена"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Ðевалидна заÑвка"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Календар"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
msgstr ""
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
msgstr ""
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
msgstr ""
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
msgstr ""
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr ""
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
-msgstr ""
+msgstr "Роджен ден"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr ""
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr ""
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
-msgstr ""
+msgstr "Клиенти"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr ""
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
-msgstr ""
+msgstr "Празници"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
-msgstr ""
+msgstr "Идеи"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
-msgstr ""
+msgstr "Пътуване"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr ""
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
-msgstr ""
+msgstr "Среща"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
-msgstr ""
+msgstr "Друго"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
-msgstr ""
+msgstr "Лично"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
-msgstr ""
+msgstr "Проекти"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
-msgstr ""
+msgstr "ВъпроÑи"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
+msgstr "Работа"
+
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
msgstr ""
-#: lib/app.php:380
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr ""
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Ðов календар"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Ðе Ñе повтарÑ"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Дневно"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Седмично"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Ð’Ñеки делничен ден"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "ДвуÑедмично"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "МеÑечно"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Годишно"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
-msgstr ""
+msgstr "никога"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr ""
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr ""
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr ""
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr ""
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
-msgstr ""
+msgstr "Понеделник"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
-msgstr ""
+msgstr "Вторник"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
-msgstr ""
+msgstr "СрÑда"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
-msgstr ""
+msgstr "Четвъртък"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
-msgstr ""
+msgstr "Петък"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
-msgstr ""
+msgstr "Събота"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
-msgstr ""
+msgstr "ÐеделÑ"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr ""
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr ""
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr ""
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr ""
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr ""
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr ""
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr ""
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr ""
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr ""
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr ""
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr ""
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr ""
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr ""
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr ""
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr ""
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr ""
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr ""
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr ""
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr ""
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr ""
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr ""
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr ""
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr ""
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr ""
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr ""
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Ð’Ñички дни"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr ""
-
#: templates/calendar.php:13
msgid "Missing fields"
-msgstr ""
+msgstr "ЛипÑват полета"
#: templates/calendar.php:14 templates/part.eventform.php:19
#: templates/part.showevent.php:11
@@ -357,67 +460,59 @@ msgstr ""
msgid "There was a database fail"
msgstr ""
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Седмица"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "МеÑец"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
-msgstr ""
+msgstr "СпиÑък"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "ДнеÑ"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Календари"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Възникна проблем Ñ Ñ€Ð°Ð·Ð»Ð¸Ñтването на файла."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Изберете активен календар"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
-msgstr ""
+msgstr "Вашите календари"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr ""
#: templates/part.choosecalendar.php:31
msgid "Shared calendars"
-msgstr ""
+msgstr "Споделени календари"
#: templates/part.choosecalendar.php:48
msgid "No shared calendars"
-msgstr ""
+msgstr "ÐÑма Ñподелени календари"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
-msgstr ""
+msgstr "СподелÑне на календар"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "ИзтеглÑне"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "ПромÑна"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "Изтриване"
#: templates/part.choosecalendar.rowfields.shared.php:4
msgid "shared with you by"
@@ -425,7 +520,7 @@ msgstr ""
#: templates/part.editcalendar.php:9
msgid "New calendar"
-msgstr ""
+msgstr "Ðов календар"
#: templates/part.editcalendar.php:9
msgid "Edit calendar"
@@ -445,7 +540,7 @@ msgstr "ЦвÑÑ‚ на календара"
#: templates/part.editcalendar.php:42
msgid "Save"
-msgstr ""
+msgstr "ЗапиÑ"
#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
@@ -454,7 +549,7 @@ msgstr "Продължи"
#: templates/part.editcalendar.php:43
msgid "Cancel"
-msgstr ""
+msgstr "Отказ"
#: templates/part.editevent.php:1
msgid "Edit an event"
@@ -462,7 +557,7 @@ msgstr "ПромÑна на Ñъбитие"
#: templates/part.editevent.php:10
msgid "Export"
-msgstr ""
+msgstr "ИзнаÑÑне"
#: templates/part.eventform.php:8 templates/part.showevent.php:3
msgid "Eventinfo"
@@ -482,7 +577,7 @@ msgstr ""
#: templates/part.eventform.php:13
msgid "Share"
-msgstr ""
+msgstr "СподелÑне"
#: templates/part.eventform.php:21
msgid "Title of the Event"
@@ -494,29 +589,29 @@ msgstr "КатегориÑ"
#: templates/part.eventform.php:29
msgid "Separate categories with commas"
-msgstr ""
+msgstr "Отделете категориите ÑÑŠÑ Ð·Ð°Ð¿ÐµÑ‚Ð°Ð¸"
#: templates/part.eventform.php:30
msgid "Edit categories"
-msgstr ""
+msgstr "Редактиране на категориите"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Целодневно Ñъбитие"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "От"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "До"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
-msgstr ""
+msgstr "Разширени наÑтройки"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "ЛокациÑ"
@@ -524,7 +619,7 @@ msgstr "ЛокациÑ"
msgid "Location of the Event"
msgstr "ЛокациÑ"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "ОпиÑание"
@@ -532,86 +627,88 @@ msgstr "ОпиÑание"
msgid "Description of the Event"
msgstr "ОпиÑание"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Повтори"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr ""
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr ""
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr ""
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr ""
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr ""
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr ""
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr ""
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr ""
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr ""
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr ""
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr ""
-#: templates/part.import.php:1
-msgid "Import a calendar file"
-msgstr ""
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "Ñъздаване на нов календар"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
+#: templates/part.import.php:17
+msgid "Import a calendar file"
msgstr ""
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr ""
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr "Изберете календар"
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
-msgstr ""
+msgstr "Име на Ð½Ð¾Ð²Ð¸Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€"
-#: templates/part.import.php:17
-msgid "Import"
+#: templates/part.import.php:44
+msgid "Take an available name!"
msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr ""
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "ВнаÑÑне"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
-msgstr ""
+msgstr "ЗатварÑне на прозореца"
#: templates/part.newevent.php:1
msgid "Create a new event"
@@ -619,50 +716,78 @@ msgstr "Ðово Ñъбитие"
#: templates/part.showevent.php:1
msgid "View an event"
-msgstr ""
+msgstr "Преглед на Ñъбитие"
#: templates/part.showevent.php:23
msgid "No categories selected"
-msgstr ""
-
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr ""
+msgstr "ÐÑма избрани категории"
#: templates/part.showevent.php:37
msgid "of"
msgstr ""
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr ""
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "ЧаÑова зона"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
+#: templates/settings.php:52
+msgid "Time format"
msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr ""
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr ""
-#: templates/settings.php:40
-msgid "First day of the week"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
msgstr ""
#: templates/share.dropdown.php:20
@@ -679,7 +804,7 @@ msgstr ""
#: templates/share.dropdown.php:48
msgid "Groups"
-msgstr ""
+msgstr "Групи"
#: templates/share.dropdown.php:49
msgid "select groups"
diff --git a/l10n/bg_BG/contacts.po b/l10n/bg_BG/contacts.po
index 40582ffea9f..28690adf4db 100644
--- a/l10n/bg_BG/contacts.po
+++ b/l10n/bg_BG/contacts.po
@@ -7,220 +7,206 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.net/projects/p/owncloud/language/bg_BG/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr ""
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr ""
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
msgstr ""
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
msgstr ""
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
msgstr ""
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr ""
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr ""
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr ""
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr ""
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr ""
-#: ajax/contactdetails.php:37
-msgid "Missing ID"
-msgstr ""
-
-#: ajax/contactdetails.php:41
-msgid "Error parsing VCard for ID: \""
-msgstr ""
-
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
msgstr ""
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
msgstr ""
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
-#: ajax/uploadphoto.php:68
-msgid "No contact ID was submitted."
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/currentphoto.php:40
-msgid "Error reading contact photo."
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/currentphoto.php:52
-msgid "Error saving temporary file."
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
msgstr ""
-#: ajax/currentphoto.php:55
-msgid "The loading photo is not valid."
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
msgstr ""
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
msgstr ""
-#: ajax/deleteproperty.php:36
+#: ajax/contact/deleteproperty.php:37
msgid "Information about vCard is incorrect. Please reload the page."
msgstr ""
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
+#: ajax/contact/details.php:31
+msgid "Missing ID"
msgstr ""
-#: ajax/editname.php:37
-msgid "Contact ID is missing."
+#: ajax/contact/details.php:36
+msgid "Error parsing VCard for ID: \""
msgstr ""
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
msgstr ""
-#: ajax/oc_photo.php:41
-msgid "No photo path was submitted."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
msgstr ""
-#: ajax/oc_photo.php:48
-msgid "File doesn't exist:"
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
msgstr ""
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
-msgid "Error loading image."
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
+#: ajax/uploadphoto.php:68
+msgid "No contact ID was submitted."
msgstr ""
-#: ajax/savecrop.php:68
-msgid "Error getting contact object."
+#: ajax/currentphoto.php:36
+msgid "Error reading contact photo."
msgstr ""
-#: ajax/savecrop.php:75
-msgid "Error getting PHOTO property."
+#: ajax/currentphoto.php:48
+msgid "Error saving temporary file."
msgstr ""
-#: ajax/savecrop.php:88
-msgid "Error saving contact."
+#: ajax/currentphoto.php:51
+msgid "The loading photo is not valid."
msgstr ""
-#: ajax/savecrop.php:98
-msgid "Error resizing image"
+#: ajax/editname.php:31
+msgid "Contact ID is missing."
msgstr ""
-#: ajax/savecrop.php:101
-msgid "Error cropping image"
+#: ajax/oc_photo.php:32
+msgid "No photo path was submitted."
msgstr ""
-#: ajax/savecrop.php:104
-msgid "Error creating temporary image"
+#: ajax/oc_photo.php:39
+msgid "File doesn't exist:"
msgstr ""
-#: ajax/savecrop.php:107
-msgid "Error finding image: "
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
+msgid "Error loading image."
msgstr ""
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
+#: ajax/savecrop.php:69
+msgid "Error getting contact object."
msgstr ""
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
+#: ajax/savecrop.php:79
+msgid "Error getting PHOTO property."
msgstr ""
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
+#: ajax/savecrop.php:98
+msgid "Error saving contact."
msgstr ""
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
+#: ajax/savecrop.php:109
+msgid "Error resizing image"
msgstr ""
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
+#: ajax/savecrop.php:112
+msgid "Error cropping image"
msgstr ""
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
+#: ajax/savecrop.php:115
+msgid "Error creating temporary image"
msgstr ""
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
+#: ajax/savecrop.php:118
+msgid "Error finding image: "
msgstr ""
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr ""
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr ""
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
msgstr ""
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
msgstr ""
@@ -228,414 +214,561 @@ msgstr ""
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
msgstr ""
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
msgstr ""
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:425
+msgid "Permission error"
+msgstr ""
+
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
msgstr ""
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
msgstr ""
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
msgstr ""
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/loader.js:49
+msgid "Result: "
msgstr ""
-#: js/contacts.js:1494
+#: js/loader.js:49
+msgid " imported, "
+msgstr ""
+
+#: js/loader.js:49
+msgid " failed."
+msgstr ""
+
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
+#: lib/app.php:52
+msgid "This is not your addressbook."
msgstr ""
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:71
+msgid "Contact could not be found."
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
+#: lib/app.php:141
+msgid "Facebook"
msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
+#: lib/app.php:146
+msgid "XMPP"
msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
+#: lib/app.php:151
+msgid "ICQ"
msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
+#: lib/app.php:156
+msgid "Yahoo"
msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
+#: lib/app.php:161
+msgid "Skype"
msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr ""
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr ""
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr ""
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr ""
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr ""
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr ""
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr ""
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr ""
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr ""
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr ""
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr ""
-#: templates/index.php:13
-msgid "Add Contact"
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
msgstr ""
#: templates/index.php:14
+msgid "Add Contact"
+msgstr ""
+
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr ""
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
msgstr ""
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
+#: templates/index.php:39
+msgid "Navigation"
msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
+#: templates/index.php:42
+msgid "Next contact in list"
msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
+#: templates/index.php:44
+msgid "Previous contact in list"
msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
+#: templates/index.php:48
+msgid "Next addressbook"
msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
+#: templates/index.php:50
+msgid "Previous addressbook"
msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
+#: templates/index.php:54
+msgid "Actions"
msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr ""
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr ""
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr ""
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr ""
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr ""
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr ""
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr ""
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr ""
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr ""
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr ""
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr ""
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr ""
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr ""
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr ""
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr ""
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr ""
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr ""
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr ""
-#: templates/part.contact.php:103
-msgid "Profile picture"
+#: templates/part.contact.php:129
+msgid "Phone"
msgstr ""
-#: templates/part.contact.php:107
-msgid "Phone"
+#: templates/part.contact.php:130
+msgid "Email"
msgstr ""
-#: templates/part.contact.php:110
-msgid "Note"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
msgstr ""
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
+#: templates/part.contact.php:132
+msgid "Address"
msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
+#: templates/part.contact.php:133
+msgid "Note"
msgstr ""
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
+#: templates/part.contact.php:138
+msgid "Download contact"
msgstr ""
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
+#: templates/part.contact.php:139
+msgid "Delete contact"
msgstr ""
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
msgstr ""
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr ""
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr ""
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr ""
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr ""
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr ""
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr ""
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
-msgid "Zipcode"
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
msgstr ""
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
-msgid "Country"
+#: templates/part.edit_address_dialog.php:48
+msgid "Zipcode"
msgstr ""
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
msgstr ""
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
msgstr ""
#: templates/part.edit_name_dialog.php:16
@@ -718,102 +851,102 @@ msgstr ""
msgid "Sn."
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
+#: templates/part.import.php:1
+msgid "Import a contacts file"
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
+#: templates/part.import.php:6
+msgid "Please choose the addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
+#: templates/part.import.php:10
+msgid "create a new addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:23
-msgid "Active"
+#: templates/part.import.php:15
+msgid "Name of new addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:29
-msgid "Save"
+#: templates/part.import.php:20
+msgid "Importing contacts"
msgstr ""
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
msgstr ""
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
msgstr ""
-#: templates/part.import.php:1
-msgid "Import a contacts file"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
msgstr ""
-#: templates/part.import.php:6
-msgid "Please choose the addressbook"
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
msgstr ""
-#: templates/part.import.php:10
-msgid "create a new addressbook"
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
msgstr ""
-#: templates/part.import.php:15
-msgid "Name of new addressbook"
+#: templates/settings.php:3
+msgid "CardDAV syncing addresses"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
+#: templates/settings.php:3
+msgid "more info"
msgstr ""
-#: templates/part.import.php:20
-msgid "Importing contacts"
+#: templates/settings.php:5
+msgid "Primary address (Kontact et al)"
msgstr ""
-#: templates/part.import.php:24
-msgid "Close"
+#: templates/settings.php:7
+msgid "iOS/OS X"
msgstr ""
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
+#: templates/settings.php:20
+msgid "Show CardDav link"
msgstr ""
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
msgstr ""
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
+#: templates/settings.php:26
+msgid "Share"
msgstr ""
-#: templates/part.no_contacts.php:2
-msgid "You have no contacts in your addressbook."
+#: templates/settings.php:29
+msgid "Download"
msgstr ""
-#: templates/part.no_contacts.php:4
-msgid "Add contact"
+#: templates/settings.php:33
+msgid "Edit"
msgstr ""
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
+#: templates/settings.php:43
+msgid "New Address Book"
msgstr ""
-#: templates/settings.php:4
-msgid "CardDAV syncing addresses"
+#: templates/settings.php:44
+msgid "Name"
msgstr ""
-#: templates/settings.php:4
-msgid "more info"
+#: templates/settings.php:45
+msgid "Description"
msgstr ""
-#: templates/settings.php:6
-msgid "Primary address (Kontact et al)"
+#: templates/settings.php:46
+msgid "Save"
msgstr ""
-#: templates/settings.php:8
-msgid "iOS/OS X"
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr ""
+
+#: templates/settings.php:52
+msgid "More..."
msgstr ""
diff --git a/l10n/bg_BG/core.po b/l10n/bg_BG/core.po
index 477b4f2e817..5cb2d7ef8a7 100644
--- a/l10n/bg_BG/core.po
+++ b/l10n/bg_BG/core.po
@@ -6,14 +6,15 @@
# <adn.adin@gmail.com>, 2011.
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
# Stefan Ilivanov <ilivanov@gmail.com>, 2011.
+# 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: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.net/projects/p/owncloud/language/bg_BG/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -30,89 +31,89 @@ msgstr ""
#: ajax/vcategories/add.php:36
msgid "This category already exists: "
-msgstr ""
+msgstr "КатегориÑта вече ÑъщеÑтвува:"
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
msgstr ""
-#: js/js.js:520
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "ÐаÑтройки"
+
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Януари"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Февруари"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Март"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "Ðприл"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Май"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Юни"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Юли"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "ÐвгуÑÑ‚"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "Септември"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Октомври"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "Ðоември"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "Декември"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Отказ"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Ðе"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Да"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Добре"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "ÐÑма избрани категории за изтриване"
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Грешка"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr ""
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr ""
@@ -179,7 +180,7 @@ msgstr "Помощ"
#: templates/403.php:12
msgid "Access forbidden"
-msgstr ""
+msgstr "ДоÑтъпът е забранен"
#: templates/404.php:12
msgid "Cloud not found"
@@ -187,11 +188,11 @@ msgstr "облакът не намерен"
#: templates/edit_categories_dialog.php:4
msgid "Edit categories"
-msgstr ""
+msgstr "Редактиране на категориите"
#: templates/edit_categories_dialog.php:14
msgid "Add"
-msgstr ""
+msgstr "ДобавÑне"
#: templates/installation.php:23
msgid "Create an <strong>admin account</strong>"
@@ -242,14 +243,10 @@ msgstr "Завършване на наÑтройките"
msgid "web services under your control"
msgstr ""
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Изход"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "ÐаÑтройки"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Забравена парола?"
@@ -260,7 +257,7 @@ msgstr "запомни"
#: templates/login.php:18
msgid "Log in"
-msgstr ""
+msgstr "Вход"
#: templates/logout.php:1
msgid "You are logged out."
diff --git a/l10n/bg_BG/files.po b/l10n/bg_BG/files.po
index e81c2f2a9c5..d016c1a31f4 100644
--- a/l10n/bg_BG/files.po
+++ b/l10n/bg_BG/files.po
@@ -4,103 +4,132 @@
#
# Translators:
# Stefan Ilivanov <ilivanov@gmail.com>, 2011.
+# 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: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.net/projects/p/owncloud/language/bg_BG/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Файлът е качен уÑпешно"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Файлът който Ñе опитвате да качите, надвишава зададените ÑтойноÑти в upload_max_filesize в PHP.INI"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Файлът е качен чаÑтично"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Фахлът не бе качен"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "ЛипÑва временната папка"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
-msgstr ""
+msgstr "Грешка при Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° диÑка"
#: appinfo/app.php:6
msgid "Files"
msgstr "Файлове"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Изтриване"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "replace"
msgstr ""
-#: js/files.js:170
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "Грешка при качване"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
msgstr ""
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "Качването е отменено."
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "Ðеправилно име – \"/\" не е позволено."
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Размер"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Променено"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "папка"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "папки"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "файл"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
msgstr ""
@@ -126,7 +155,7 @@ msgstr ""
#: templates/admin.php:11
msgid "0 is unlimited"
-msgstr ""
+msgstr "0 означава без ограничение"
#: templates/admin.php:12
msgid "Maximum input size for ZIP files"
@@ -134,19 +163,19 @@ msgstr ""
#: templates/index.php:7
msgid "New"
-msgstr ""
+msgstr "Ðов"
#: templates/index.php:9
msgid "Text file"
-msgstr ""
+msgstr "ТекÑтов файл"
#: templates/index.php:10
msgid "Folder"
-msgstr ""
+msgstr "Папка"
#: templates/index.php:11
msgid "From url"
-msgstr ""
+msgstr "От url-адреÑ"
#: templates/index.php:21
msgid "Upload"
@@ -154,7 +183,7 @@ msgstr "Качване"
#: templates/index.php:27
msgid "Cancel upload"
-msgstr ""
+msgstr "Отказване на качването"
#: templates/index.php:39
msgid "Nothing in here. Upload something!"
@@ -166,16 +195,12 @@ msgstr "Име"
#: templates/index.php:49
msgid "Share"
-msgstr ""
+msgstr "СподелÑне"
#: templates/index.php:51
msgid "Download"
msgstr "ИзтеглÑне"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Изтриване"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Файлът е прекалено голÑм"
@@ -188,7 +213,7 @@ msgstr "Файловете които Ñе опитвате да качите Ñ
#: templates/index.php:71
msgid "Files are being scanned, please wait."
-msgstr ""
+msgstr "Файловете Ñе претърÑват, изчакайте."
#: templates/index.php:74
msgid "Current scanning"
diff --git a/l10n/bg_BG/files_encryption.po b/l10n/bg_BG/files_encryption.po
new file mode 100644
index 00000000000..0db200dba5a
--- /dev/null
+++ b/l10n/bg_BG/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/bg_BG/files_external.po b/l10n/bg_BG/files_external.po
new file mode 100644
index 00000000000..fcc676908d2
--- /dev/null
+++ b/l10n/bg_BG/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/bg_BG/files_sharing.po b/l10n/bg_BG/files_sharing.po
new file mode 100644
index 00000000000..f03989ba48d
--- /dev/null
+++ b/l10n/bg_BG/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/bg_BG/files_versions.po b/l10n/bg_BG/files_versions.po
new file mode 100644
index 00000000000..40a5fc5e9bf
--- /dev/null
+++ b/l10n/bg_BG/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/bg_BG/lib.po b/l10n/bg_BG/lib.po
new file mode 100644
index 00000000000..04f21db7de6
--- /dev/null
+++ b/l10n/bg_BG/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/bg_BG/media.po b/l10n/bg_BG/media.po
index 16a6c478ec4..48b61366ff7 100644
--- a/l10n/bg_BG/media.po
+++ b/l10n/bg_BG/media.po
@@ -4,27 +4,28 @@
#
# Translators:
# Stefan Ilivanov <ilivanov@gmail.com>, 2011.
+# 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: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.net/projects/p/owncloud/language/bg_BG/)\n"
+"POT-Creation-Date: 2012-07-31 22:53+0200\n"
+"PO-Revision-Date: 2012-07-30 09:39+0000\n"
+"Last-Translator: Yasen Pramatarov <yasen@lindeas.com>\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"
-#: appinfo/app.php:32 templates/player.php:8
+#: appinfo/app.php:45 templates/player.php:8
msgid "Music"
msgstr "Музика"
#: js/music.js:18
msgid "Add album to playlist"
-msgstr ""
+msgstr "ДобавÑне на албума към ÑпиÑъка за изпълнение"
#: templates/music.php:3 templates/player.php:12
msgid "Play"
diff --git a/l10n/bg_BG/settings.po b/l10n/bg_BG/settings.po
index b997c96de7c..e7697bb27ee 100644
--- a/l10n/bg_BG/settings.po
+++ b/l10n/bg_BG/settings.po
@@ -5,87 +5,120 @@
# Translators:
# <adn.adin@gmail.com>, 2011.
# Stefan Ilivanov <ilivanov@gmail.com>, 2011.
+# 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: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Bulgarian (Bulgaria) (http://www.transifex.net/projects/p/owncloud/language/bg_BG/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "Е-пощата е запиÑана"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Ðеправилна е-поща"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID е Ñменено"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Ðевалидна заÑвка"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Езика е Ñменен"
-#: js/apps.js:31 js/apps.js:67
-msgid "Disable"
+#: js/apps.js:18
+msgid "Error"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr "Изключване"
+
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Включване"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "ЗапиÑване..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr ""
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr ""
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr ""
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr ""
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Изберете програма"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-лицензирано"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "от"
#: templates/help.php:8
msgid "Documentation"
-msgstr ""
+msgstr "ДокументациÑ"
#: templates/help.php:9
msgid "Managing Big Files"
@@ -121,7 +154,7 @@ msgstr ""
#: templates/personal.php:13
msgid "Download"
-msgstr ""
+msgstr "ИзтеглÑне"
#: templates/personal.php:19
msgid "Your password got changed"
@@ -149,15 +182,15 @@ msgstr "ПромÑна на парола"
#: templates/personal.php:30
msgid "Email"
-msgstr ""
+msgstr "Е-поща"
#: templates/personal.php:31
msgid "Your email address"
-msgstr ""
+msgstr "ÐдреÑÑŠÑ‚ на е-пощата ви"
#: templates/personal.php:32
msgid "Fill in an email address to enable password recovery"
-msgstr ""
+msgstr "Въведете е-поща за възÑтановÑване на паролата"
#: templates/personal.php:38 templates/personal.php:39
msgid "Language"
@@ -165,40 +198,44 @@ msgstr "Език"
#: templates/personal.php:44
msgid "Help translate"
-msgstr ""
+msgstr "Помощ за превода"
#: templates/personal.php:51
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "ползвай този Ð°Ð´Ñ€ÐµÑ Ð·Ð° връзка Ñ Ð’Ð°ÑˆÐ¸Ñ ownCloud във Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¸Ñ Ð¼ÐµÐ½Ð¸Ð´Ð¶ÑŠÑ€"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Име"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Парола"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Групи"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Ðово"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
-msgstr ""
+msgstr "Квота по подразбиране"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr ""
-#: templates/users.php:47
-msgid "Quota"
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
msgstr ""
-#: templates/users.php:80
+#: templates/users.php:82
+msgid "Quota"
+msgstr "Квота"
+
+#: templates/users.php:146
msgid "Delete"
msgstr "Изтриване"
diff --git a/l10n/bg_BG/tasks.po b/l10n/bg_BG/tasks.po
new file mode 100644
index 00000000000..3f26e086ecc
--- /dev/null
+++ b/l10n/bg_BG/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/bg_BG/user_ldap.po b/l10n/bg_BG/user_ldap.po
new file mode 100644
index 00000000000..8b8f5723ced
--- /dev/null
+++ b/l10n/bg_BG/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/bg_BG/user_migrate.po b/l10n/bg_BG/user_migrate.po
new file mode 100644
index 00000000000..37fb22aebf7
--- /dev/null
+++ b/l10n/bg_BG/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/bg_BG/user_openid.po b/l10n/bg_BG/user_openid.po
new file mode 100644
index 00000000000..be71873b642
--- /dev/null
+++ b/l10n/bg_BG/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/ca/admin_dependencies_chk.po b/l10n/ca/admin_dependencies_chk.po
new file mode 100644
index 00000000000..1c5aef0e667
--- /dev/null
+++ b/l10n/ca/admin_dependencies_chk.po
@@ -0,0 +1,74 @@
+# 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>, 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:28+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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr "El mòdul php-json és necessari per moltes aplicacions per comunicacions internes"
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr "El mòdul php-curl és necessari per mostrar el títol de la pàgina quan s'afegeixen adreces d'interès"
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr "El mòdul php-gd és necessari per generar miniatures d'imatges"
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr "El mòdul php-ldap és necessari per connectar amb el servidor ldap"
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr "El mòdul php-zip és necessari per baixar múltiples fitxers de cop"
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr "El mòdul php-mb_multibyte és necessari per gestionar correctament la codificació."
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr "El mòdul php-ctype és necessari per validar dades."
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr "El mòdul php-xml és necessari per compatir els fitxers amb webdav."
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr "La directiva allow_url_fopen de php.ini hauria d'establir-se en 1 per accedir a la base de coneixements dels servidors OCS"
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr "El mòdul php-pdo és necessari per desar les dades d'ownCloud en una base de dades."
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr "Estat de dependències"
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr "Usat per:"
diff --git a/l10n/ca/admin_migrate.po b/l10n/ca/admin_migrate.po
new file mode 100644
index 00000000000..285f752c6ad
--- /dev/null
+++ b/l10n/ca/admin_migrate.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:
+# <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: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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr "Exporta aquesta instància de ownCloud"
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr "Això crearà un fitxer comprimit amb les dades d'aquesta instància ownCloud.\n Escolliu el tipus d'exportació:"
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr "Exporta"
diff --git a/l10n/ca/bookmarks.po b/l10n/ca/bookmarks.po
new file mode 100644
index 00000000000..c7e3b09a605
--- /dev/null
+++ b/l10n/ca/bookmarks.po
@@ -0,0 +1,61 @@
+# 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>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-07-29 02:03+0200\n"
+"PO-Revision-Date: 2012-07-28 13:38+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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr "Adreces d'interès"
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr "sense nom"
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr "Arrossegueu-ho al navegador i feu-hi un clic quan volgueu marcar ràpidament una adreça d'interès:"
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr "Llegeix més tard"
+
+#: templates/list.php:13
+msgid "Address"
+msgstr "Adreça"
+
+#: templates/list.php:14
+msgid "Title"
+msgstr "Títol"
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr "Etiquetes"
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr "Desa l'adreça d'interès"
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr "No teniu adreces d'interès"
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr "Bookmarklet <br />"
diff --git a/l10n/ca/calendar.po b/l10n/ca/calendar.po
index f4527ce92ea..3976c559bb6 100644
--- a/l10n/ca/calendar.po
+++ b/l10n/ca/calendar.po
@@ -9,21 +9,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Catalan (http://www.transifex.net/projects/p/owncloud/language/ca/)\n"
+"POT-Creation-Date: 2012-08-12 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 11: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"
"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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr "No tots els calendaris estan en memòria"
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr "Sembla que tot està en memòria"
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "No s'han trobat calendaris."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "No s'han trobat events."
@@ -31,300 +39,394 @@ msgstr "No s'han trobat events."
msgid "Wrong calendar"
msgstr "Calendari erroni"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr "El fitxer no contenia esdeveniments o aquests ja estaven desats en el vostre caledari"
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr "els esdeveniments s'han desat en el calendari nou"
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr "Ha fallat la importació"
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr "els esdveniments s'han desat en el calendari"
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Nova zona horària:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "La zona horària ha canviat"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Sol.licitud no vàlida"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Calendari"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd d/M"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd d/M"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM yyyy"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
+msgstr "d [MMM ][yyyy ]{'&#8212;' d MMM yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, d MMM, yyyy"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Aniversari"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Feina"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Trucada"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Clients"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Remitent"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Vacances"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Idees"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Viatge"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Sant"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Reunió"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Altres"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Personal"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projectes"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Preguntes"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Feina"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr "per"
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "sense nom"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Calendari nou"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "No es repeteix"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Diari"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Mensual"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Cada setmana"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Bisetmanalment"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Mensualment"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Cada any"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "mai"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "per aparicions"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "per data"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "per dia del mes"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "per dia de la setmana"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Dilluns"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Dimarts"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Dimecres"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Dijous"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Divendres"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Dissabte"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Diumenge"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "esdeveniments la setmana del mes"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "primer"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "segon"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "tercer"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "quart"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "cinquè"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "últim"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Gener"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Febrer"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Març"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Abril"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Maig"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Juny"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Juliol"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "Agost"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "Setembre"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Octubre"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "Novembre"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Desembre"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "per data d'esdeveniments"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "per ahir(s)"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "per número(s) de la setmana"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "per dia del mes"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Data"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Cal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr "Dg."
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr "Dl."
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr "Dm."
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr "Dc."
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr "Dj."
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr "Dv."
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr "Ds."
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr "Gen."
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr "Febr."
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr "Març"
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr "Abr."
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr "Maig"
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr "Juny"
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr "Jul."
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr "Ag."
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr "Set."
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr "Oct."
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr "Nov."
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr "Des."
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Tot el dia"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Calendari nou"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Els camps que falten"
@@ -358,40 +460,32 @@ msgstr "L'esdeveniment acaba abans que comenci"
msgid "There was a database fail"
msgstr "Hi ha un error de base de dades"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Setmana"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Mes"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Llista"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Avui"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Calendaris"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "S'ha produït un error en analitzar el fitxer."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Seleccioneu calendaris actius"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr "Configuració"
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Els vostres calendaris"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "Enllaç CalDav"
@@ -403,19 +497,19 @@ msgstr "Calendaris compartits"
msgid "No shared calendars"
msgstr "No hi ha calendaris compartits"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Comparteix el calendari"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Baixa"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Edita"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Suprimeix"
@@ -501,23 +595,23 @@ msgstr "Separeu les categories amb comes"
msgid "Edit categories"
msgstr "Edita categories"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Esdeveniment de tot el dia"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Des de"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Fins a"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Opcions avançades"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Ubicació"
@@ -525,7 +619,7 @@ msgstr "Ubicació"
msgid "Location of the Event"
msgstr "Ubicació de l'esdeveniment"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Descripció"
@@ -533,84 +627,86 @@ msgstr "Descripció"
msgid "Description of the Event"
msgstr "Descripció de l'esdeveniment"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Repetició"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Avançat"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Dies de la setmana seleccionats"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Seleccionar dies"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "i dies d'esdeveniment de l'any."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "i dies d'esdeveniment del mes."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Seleccionar mesos"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Seleccionar setmanes"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "i setmanes d'esdeveniment de l'any."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Interval"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Final"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "aparicions"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "crea un nou calendari"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Importa un fitxer de calendari"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Escolliu el calendari"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "crea un nou calendari"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr "Escolliu un calendari"
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Nom del nou calendari"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importa"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr "Escolliu un nom disponible!"
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "S'està important el calendari"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr "Ja hi ha un calendari amb aquest nom. Si continueu, els calendaris es combinaran."
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "El calendari s'ha importat amb èxit"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Importa"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Tanca el diàleg"
@@ -626,45 +722,73 @@ msgstr "Mostra un event"
msgid "No categories selected"
msgstr "No hi ha categories seleccionades"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Seleccioneu categoria"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "de"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "a"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr "General"
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Zona horària"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Comprova sempre en els canvis de zona horària"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr "Actualitza la zona horària automàticament"
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Format de temps"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr "Format horari"
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24h"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12h"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Primer dia de la setmana"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr "Comença la setmana en "
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr "Memòria de cau"
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr "Neteja la memòria de cau pels esdeveniments amb repetició"
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr "URLs"
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr "Adreça de sincronització del calendari CalDAV"
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr "més informació"
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr "Adreça primària (Kontact et al)"
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr "IOS/OS X"
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Adreça de sincronització del calendari CalDAV:"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr "Enllaç(os) iCalendar només de lectura"
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/ca/contacts.po b/l10n/ca/contacts.po
index cc7086cd14c..c965efa0c2d 100644
--- a/l10n/ca/contacts.po
+++ b/l10n/ca/contacts.po
@@ -9,637 +9,770 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Catalan (http://www.transifex.net/projects/p/owncloud/language/ca/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
-#: ajax/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Error en (des)activar la llibreta d'adreces."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "S'ha produït un error en afegir el contacte."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "No es pot afegir una propietat buida."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Almenys heu d'omplir un dels camps d'adreça."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "no s'ha establert la id."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "Esteu intentant afegir una propietat duplicada:"
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "No es pot actualitzar la llibreta d'adreces amb un nom buit"
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Error en afegir la propietat del contacte."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Error en actualitzar la llibreta d'adreces."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "No heu facilitat cap ID"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Error en establir la suma de verificació."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "No heu seleccionat les categories a eliminar."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "No s'han trobat llibretes d'adreces."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "No s'han trobat contactes."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "S'ha produït un error en afegir el contacte."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "no s'ha establert el nom de l'element."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr "No s'ha pogut processar el contacte:"
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "No es pot afegir una propietat buida."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Almenys heu d'omplir un dels camps d'adreça."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "Esteu intentant afegir una propietat duplicada:"
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr "Falta el paràmetre IM."
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr "IM desconegut:"
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "La informació de la vCard és incorrecta. Carregueu la pàgina de nou."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "Falta la ID"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "Error en analitzar la ID de la VCard: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "No es pot afegir una llibreta d'adreces amb un nom buit."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "no s'ha establert la suma de verificació."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Error en afegir la llibreta d'adreces."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "La informació de la vCard és incorrecta. Carregueu de nou la pàgina:"
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Error en activar la llibreta d'adreces."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Alguna cosa ha anat FUBAR."
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "No s'ha tramès cap ID de contacte."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Error en llegir la foto del contacte."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Error en desar el fitxer temporal."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "La foto carregada no és vàlida."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "no s'ha establert la id."
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "La informació de la vCard és incorrecta. Carregueu la pàgina de nou."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Error en eliminar la propietat del contacte."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "falta la ID del contacte."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "Falta la id del contacte."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "No heu tramès el camí de la foto."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "El fitxer no existeix:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Error en carregar la imatge."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Error en obtenir l'objecte contacte."
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Error en obtenir la propietat PHOTO."
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Error en desar el contacte."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Error en modificar la mida de la imatge"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Error en retallar la imatge"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Error en crear la imatge temporal"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "no s'ha establert el nom de l'element."
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "no s'ha establert la suma de verificació."
+msgstr "Error en trobar la imatge:"
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "La informació de la vCard és incorrecta. Carregueu de nou la pàgina:"
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "Alguna cosa ha anat FUBAR."
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Error en actualitzar la propietat del contacte."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "No es pot actualitzar la llibreta d'adreces amb un nom buit"
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Error en actualitzar la llibreta d'adreces."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "Error en carregar contactes a l'emmagatzemament."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "No hi ha errors, el fitxer s'ha carregat correctament"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "El fitxer carregat supera la directiva upload_max_filesize de php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "El fitxer carregat supera la directiva MAX_FILE_SIZE especificada al formulari HTML"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "El fitxer només s'ha carregat parcialment"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "No s'ha carregat cap fitxer"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "Falta un fitxer temporal"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "No s'ha pogut desar la imatge temporal: "
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "No s'ha pogut carregar la imatge temporal: "
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "No s'ha carregat cap fitxer. Error desconegut"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Contactes"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Aquesta funcionalitat encara no està implementada"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "No implementada"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "No s'ha pogut obtenir una adreça vàlida."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Error"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Aquesta propietat no pot ser buida."
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "No s'han pogut serialitzar els elements."
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "'deleteProperty' s'ha cridat sense argument de tipus. Informeu-ne a bugs.owncloud.org"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Edita el nom"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "No s'han seleccionat fitxers per a la pujada."
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "El fitxer que intenteu pujar excedeix la mida màxima de pujada en aquest servidor."
-#: js/contacts.js:1119
-msgid "Select photo"
-msgstr ""
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr "Error en carregar la imatge de perfil."
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
-
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "Elimina un fitxer VCF per importar contactes."
-
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
-msgstr ""
-
-#: js/contacts.js:1476
-msgid "OK"
-msgstr ""
-
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
-msgstr ""
-
-#: js/contacts.js:1634
-msgid "Upload too large"
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
+msgstr "Seleccioneu un tipus"
-#: js/contacts.js:1638
-msgid "Wrong file type"
-msgstr ""
-
-#: js/contacts.js:1644
+#: js/contacts.js:1578
msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
-msgstr ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr "Heu marcat eliminar alguns contactes, però encara no s'han eliminat. Espereu mentre s'esborren."
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr "Voleu fusionar aquestes llibretes d'adreces?"
#: js/loader.js:49
msgid "Result: "
-msgstr ""
+msgstr "Resultat: "
#: js/loader.js:49
msgid " imported, "
-msgstr ""
+msgstr " importat, "
#: js/loader.js:49
msgid " failed."
-msgstr ""
+msgstr " fallada."
+
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
+msgstr "El nom a mostrar no pot ser buit"
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "No s'ha trobat la llibreta d'adreces."
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr "No s'ha trobat la llibreta d'adreces: "
-#: lib/app.php:34
+#: lib/app.php:52
msgid "This is not your addressbook."
msgstr "Aquesta no és la vostra llibreta d'adreces"
-#: lib/app.php:45
+#: lib/app.php:71
msgid "Contact could not be found."
msgstr "No s'ha trobat el contacte."
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Adreça"
+#: lib/app.php:116
+msgid "Jabber"
+msgstr "Jabber"
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telèfon"
+#: lib/app.php:121
+msgid "AIM"
+msgstr "AIM"
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "Correu electrònic"
+#: lib/app.php:126
+msgid "MSN"
+msgstr "MSN"
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organització"
+#: lib/app.php:131
+msgid "Twitter"
+msgstr "Twitter"
+
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr "GoogleTalk"
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr "Facebook"
+
+#: lib/app.php:146
+msgid "XMPP"
+msgstr "XMPP"
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr "ICQ"
+
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr "Yahoo"
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:161
+msgid "Skype"
+msgstr "Skype"
+
+#: lib/app.php:166
+msgid "QQ"
+msgstr "QQ"
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr "GaduGadu"
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Feina"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Casa"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr "Altres"
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mòbil"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Text"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Veu"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Missatge"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fax"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Vídeo"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Paginador"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Aniversari"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr "Negocis"
+
+#: lib/app.php:254
+msgid "Call"
+msgstr "Trucada"
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr "Clients"
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr "Emissari"
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr "Vacances"
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr "Idees"
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr "Viatge"
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr "Aniversari"
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr "Reunió"
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr "Personal"
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr "Projectes"
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr "Preguntes"
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "Aniversari de {name}"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Contacte"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Afegeix un contacte"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Importa"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr "Configuració"
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Llibretes d'adreces"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Configura les llibretes d'adreces"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Tanca"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Nova llibreta d'adreces"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr "Dreceres de teclat"
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Importa de VFC"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr "Navegació"
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "Enllaç CardDav"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr "Següent contacte de la llista"
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Baixa"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr "Contacte anterior de la llista"
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Edita"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr "Expandeix/col·lapsa la llibreta d'adreces"
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Suprimeix"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr "Llibreta d'adreces següent"
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Baixa el contacte"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr "Llibreta d'adreces anterior"
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Suprimeix el contacte"
+#: templates/index.php:54
+msgid "Actions"
+msgstr "Accions"
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr "Carrega de nou la llista de contactes"
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr "Afegeix un contacte nou"
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr "Afegeix una llibreta d'adreces nova"
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr "Esborra el contacte"
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Elimina la foto a carregar"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Elimina la foto actual"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Edita la foto actual"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Carrega una foto nova"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Selecciona una foto de ownCloud"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr "Format personalitzat, Nom curt, Nom sencer, Invertit o Invertit amb coma"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Edita detalls del nom"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organització"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Suprimeix"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Sobrenom"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Escriviu el sobrenom"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Aniversari"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr "Adreça web"
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr "http://www.somesite.com"
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr "Vés a la web"
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "dd-mm-yyyy"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Grups"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Separeu els grups amb comes"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Edita els grups"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Preferit"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Especifiqueu una adreça de correu electrònic correcta"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Escriviu una adreça de correu electrònic"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "Envia per correu electrònic a l'adreça"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Elimina l'adreça de correu electrònic"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Escriviu el número de telèfon"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Elimina el número de telèfon"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr "Instant Messenger"
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr "Elimina IM"
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Visualitza al mapa"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Edita els detalls de l'adreça"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Afegiu notes aquí."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Afegeix un camp"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Foto de perfil"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telèfon"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Nota"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "Correu electrònic"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Elimina la foto actual"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr "Missatgeria instantània"
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Edita la foto actual"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Adreça"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Carrega una foto nova"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Nota"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Selecciona una foto de ownCloud"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Baixa el contacte"
-#: templates/part.cropphoto.php:64
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Suprimeix el contacte"
+
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "La imatge temporal ha estat eliminada de la memòria de cau."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Edita l'adreça"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Tipus"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Adreça postal"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr "Adreça"
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr "Carrer i número"
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Addicional"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Carrer"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr "Número d'apartament, etc."
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Ciutat"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Comarca"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr "p. ex. Estat o província "
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Codi postal"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr "Codi postal"
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "País"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Edita categories"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Afegeix"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Llibreta d'adreces"
@@ -720,35 +853,6 @@ msgstr "Jr."
msgid "Sn."
msgstr "Sn."
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Nova llibreta d'adreces"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Edita la llibreta d'adreces"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Nom a mostrar"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Actiu"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Desa"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Envia"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Cancel·la"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "Importa un fitxer de contactes"
@@ -765,57 +869,86 @@ msgstr "crea una llibreta d'adreces nova"
msgid "Name of new addressbook"
msgstr "Nom de la nova llibreta d'adreces"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importa"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "S'estan important contactes"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "Seleccioneu la llibreta d'adreces a la que voleu importar:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "Selecciona de HD"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "No teniu contactes a la llibreta d'adreces."
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Afegeix un contacte"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Configura les llibretes d'adreces"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr "Selecccioneu llibretes d'adreces"
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr "Escriviu un nom"
-#: templates/settings.php:4
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr "Escriviu una descripció"
+
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "Adreces de sincronització CardDAV"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "més informació"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "Adreça primària (Kontact i al)"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr "Mostra l'enllaç CardDav"
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr "Mostra l'enllaç VCF només de lectura"
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr "Comparteix"
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Baixa"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Edita"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Nova llibreta d'adreces"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr "Nom"
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr "Descripció"
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Desa"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Cancel·la"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr "Més..."
diff --git a/l10n/ca/core.po b/l10n/ca/core.po
index 361164d2ef5..4d26bb008c5 100644
--- a/l10n/ca/core.po
+++ b/l10n/ca/core.po
@@ -9,10 +9,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Catalan (http://www.transifex.net/projects/p/owncloud/language/ca/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -33,85 +33,85 @@ msgstr "Aquesta categoria ja existeix:"
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Arranjament"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Gener"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Febrer"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Març"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "Abril"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Maig"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Juny"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Juliol"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "Agost"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "Setembre"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Octubre"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "Novembre"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "Desembre"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Cancel·la"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "No"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Sí"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "D'acord"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "No hi ha categories per eliminar."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Error"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Restableix la contrasenya d'Owncloud"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "estableix de nou la contrasenya Owncloud"
@@ -241,14 +241,10 @@ msgstr "Acaba la configuració"
msgid "web services under your control"
msgstr "controleu els vostres serveis web"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Surt"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Arranjament"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Heu perdut la contrasenya?"
diff --git a/l10n/ca/files.po b/l10n/ca/files.po
index 0d3c2693b40..aa8f41dca0a 100644
--- a/l10n/ca/files.po
+++ b/l10n/ca/files.po
@@ -9,43 +9,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Catalan (http://www.transifex.net/projects/p/owncloud/language/ca/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
-#: ajax/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "El fitxer s'ha pujat correctament"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "El fitxer de pujada excedeix la directiva upload_max_filesize establerta a php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "El fitxer només s'ha pujat parcialment"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "El fitxer no s'ha pujat"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "S'ha perdut un fitxer temporal"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Ha fallat en escriure al disc"
@@ -53,57 +53,85 @@ msgstr "Ha fallat en escriure al disc"
msgid "Files"
msgstr "Fitxers"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Suprimeix"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "ja existeix"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "substitueix"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "cancel·la"
-#: js/files.js:170
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "substituït"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "per"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "desfés"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "esborrat"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "s'estan generant fitxers ZIP, pot trigar una estona."
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "No es pot pujar el fitxer perquè és una carpeta o té 0 bytes"
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "Error en la pujada"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "Pendents"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "La pujada s'ha cancel·lat."
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "El nom no és vàlid, no es permet '/'."
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Mida"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Modificat"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "carpeta"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "carpetes"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "fitxer"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "fitxers"
#: templates/admin.php:5
msgid "File handling"
@@ -173,10 +201,6 @@ msgstr "Comparteix"
msgid "Download"
msgstr "Baixa"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Suprimeix"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "La pujada és massa gran"
diff --git a/l10n/ca/files_encryption.po b/l10n/ca/files_encryption.po
new file mode 100644
index 00000000000..98571697a6a
--- /dev/null
+++ b/l10n/ca/files_encryption.po
@@ -0,0 +1,35 @@
+# 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>, 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"
+"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"
+
+#: templates/settings.php:3
+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.php:5
+msgid "None"
+msgstr "Cap"
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr "Activa l'encriptatge"
diff --git a/l10n/ca/files_external.po b/l10n/ca/files_external.po
new file mode 100644
index 00000000000..8bc7ba3b00f
--- /dev/null
+++ b/l10n/ca/files_external.po
@@ -0,0 +1,83 @@
+# 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>, 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:33+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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr "Emmagatzemament extern"
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr "Punt de muntatge"
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr "Dorsal"
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr "Configuració"
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr "Options"
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr "Aplicable"
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr "Afegeix punt de muntatge"
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr "Cap d'establert"
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr "Tots els usuaris"
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr "Grups"
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr "Usuaris"
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr "Elimina"
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr "Certificats SSL root"
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr "Importa certificat root"
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr "Habilita l'emmagatzemament extern d'usuari"
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr "Permet als usuaris muntar el seu emmagatzemament extern propi"
diff --git a/l10n/ca/files_sharing.po b/l10n/ca/files_sharing.po
new file mode 100644
index 00000000000..bc5fa18cf29
--- /dev/null
+++ b/l10n/ca/files_sharing.po
@@ -0,0 +1,35 @@
+# 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>, 2012.
+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-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr "Mida"
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr "Modificat"
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr "Esborra-ho tot"
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr "Elimina"
diff --git a/l10n/ca/files_versions.po b/l10n/ca/files_versions.po
new file mode 100644
index 00000000000..d0555a50f12
--- /dev/null
+++ b/l10n/ca/files_versions.po
@@ -0,0 +1,27 @@
+# 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>, 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:18+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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr "Expira totes les versions"
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr "Habilita les versions de fitxers"
diff --git a/l10n/ca/gallery.po b/l10n/ca/gallery.po
index 72f3cf5c809..7be2fa15254 100644
--- a/l10n/ca/gallery.po
+++ b/l10n/ca/gallery.po
@@ -8,71 +8,35 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Catalan (http://www.transifex.net/projects/p/owncloud/language/ca/)\n"
+"POT-Creation-Date: 2012-07-27 02:02+0200\n"
+"PO-Revision-Date: 2012-07-26 07:08+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"
-#: appinfo/app.php:37
+#: appinfo/app.php:39
msgid "Pictures"
msgstr "Fotos"
-#: js/album_cover.js:44
+#: js/pictures.js:12
msgid "Share gallery"
-msgstr ""
+msgstr "Comperteix la galeria"
-#: js/album_cover.js:64 js/album_cover.js:100 js/album_cover.js:133
+#: js/pictures.js:32
msgid "Error: "
-msgstr ""
+msgstr "Error: "
-#: js/album_cover.js:64 js/album_cover.js:100
+#: js/pictures.js:32
msgid "Internal error"
-msgstr ""
-
-#: js/album_cover.js:114
-msgid "Scanning root"
-msgstr ""
-
-#: js/album_cover.js:115
-msgid "Default order"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Ascending"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Descending"
-msgstr ""
-
-#: js/album_cover.js:117 templates/index.php:19
-msgid "Settings"
-msgstr "Arranjament"
-
-#: js/album_cover.js:122
-msgid "Scanning root cannot be empty"
-msgstr ""
-
-#: js/album_cover.js:122 js/album_cover.js:133
-msgid "Error"
-msgstr ""
-
-#: templates/index.php:16
-msgid "Rescan"
-msgstr "Escaneja de nou"
-
-#: templates/index.php:17
-msgid "Stop"
-msgstr "Atura"
+msgstr "Error intern"
-#: templates/index.php:18
-msgid "Share"
-msgstr "Comparteix"
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr "Passi de diapositives"
#: templates/view_album.php:19
msgid "Back"
diff --git a/l10n/ca/lib.po b/l10n/ca/lib.po
new file mode 100644
index 00000000000..397969d686a
--- /dev/null
+++ b/l10n/ca/lib.po
@@ -0,0 +1,113 @@
+# 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>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-07-29 02:04+0200\n"
+"PO-Revision-Date: 2012-07-28 13:42+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"
+
+#: app.php:287
+msgid "Help"
+msgstr "Ajuda"
+
+#: app.php:294
+msgid "Personal"
+msgstr "Personal"
+
+#: app.php:299
+msgid "Settings"
+msgstr "Configuració"
+
+#: app.php:304
+msgid "Users"
+msgstr "Usuaris"
+
+#: app.php:311
+msgid "Apps"
+msgstr "Aplicacions"
+
+#: app.php:313
+msgid "Admin"
+msgstr "Administració"
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr "La baixada en ZIP està desactivada."
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr "Els fitxers s'han de baixar d'un en un."
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr "Torna a Fitxers"
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr "Els fitxers seleccionats son massa grans per generar un fitxer zip."
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr "L'aplicació no està habilitada"
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr "Error d'autenticació"
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr "El testimoni ha expirat. Torneu a carregar la pàgina."
+
+#: template.php:86
+msgid "seconds ago"
+msgstr "segons enrere"
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr "fa 1 minut"
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr "fa %d minuts"
+
+#: template.php:91
+msgid "today"
+msgstr "avui"
+
+#: template.php:92
+msgid "yesterday"
+msgstr "ahir"
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr "fa %d dies"
+
+#: template.php:94
+msgid "last month"
+msgstr "el mes passat"
+
+#: template.php:95
+msgid "months ago"
+msgstr "mesos enrere"
+
+#: template.php:96
+msgid "last year"
+msgstr "l'any passat"
+
+#: template.php:97
+msgid "years ago"
+msgstr "fa anys"
diff --git a/l10n/ca/settings.po b/l10n/ca/settings.po
index 62b4b975396..dfacbada2c8 100644
--- a/l10n/ca/settings.po
+++ b/l10n/ca/settings.po
@@ -9,77 +9,109 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Catalan (http://www.transifex.net/projects/p/owncloud/language/ca/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-20 07:27+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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "No s'ha pogut carregar la llista des de l'App Store"
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "S'ha desat el correu electrònic"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "El correu electrònic no és vàlid"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID ha canviat"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Sol.licitud no vàlida"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Error d'autenticació"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "S'ha canviat l'idioma"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "Error"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "Desactiva"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Activa"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "S'està desant..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "Català"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "Avís de seguretat"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "Cron"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr "executa una tasca en carregar cada pàgina"
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr "cron.php està registrat en un servei web cron"
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr "usa el servei cron del sistema"
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Registre"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Més"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
-msgstr "Afegeiu la vostra aplicació"
+msgstr "Afegiu la vostra aplicació"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Seleccioneu una aplicació"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Mireu la pàgina d'aplicacions a apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "- amb llicència"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "de"
@@ -171,34 +203,38 @@ msgstr "Ajudeu-nos amb la traducció"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "useu aquesta adreça per connectar-vos a ownCloud des del gestor de fitxers"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Nom"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Contrasenya"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Grups"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Crea"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Quota per defecte"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Altre"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr "Grup Admin"
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Quota"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Suprimeix"
diff --git a/l10n/ca/tasks.po b/l10n/ca/tasks.po
new file mode 100644
index 00000000000..b96519e57fa
--- /dev/null
+++ b/l10n/ca/tasks.po
@@ -0,0 +1,107 @@
+# 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>, 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:37+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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr "data/hora incorrecta"
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr "Tasques"
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr "Cap categoria"
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr "Sense especificar"
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr "1=major"
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr "5=mitjana"
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr "9=inferior"
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr "Elimina el resum"
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr "Percentatge completat no vàlid"
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr "Prioritat no vàlida"
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr "Afegeix una tasca"
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr "Ordena per"
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr "Ordena per llista"
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr "Ordena els complets"
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr "Ordena per ubicació"
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr "Ordena per prioritat"
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr "Ordena per etiqueta"
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr "Carregant les tasques..."
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr "Important"
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr "Més"
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr "Menys"
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr "Elimina"
diff --git a/l10n/ca/user_ldap.po b/l10n/ca/user_ldap.po
new file mode 100644
index 00000000000..9261cd06e5b
--- /dev/null
+++ b/l10n/ca/user_ldap.po
@@ -0,0 +1,165 @@
+# 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>, 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:54+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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr "Màquina"
+
+#: templates/settings.php:8
+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:9
+msgid "Base DN"
+msgstr "DN Base"
+
+#: templates/settings.php:9
+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:10
+msgid "User DN"
+msgstr "DN Usuari"
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr "Contrasenya"
+
+#: templates/settings.php:11
+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:12
+msgid "User Login Filter"
+msgstr "Filtre d'inici de sessió d'usuari"
+
+#: templates/settings.php:12
+#, 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:12
+#, 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:13
+msgid "User List Filter"
+msgstr "Llista de filtres d'usuari"
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr "Defineix el filtre a aplicar quan es mostren usuaris"
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr "sense cap paràmetre de substitució, per exemple \"objectClass=persona\""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr "Filtre de grup"
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr "Defineix el filtre a aplicar quan es mostren grups."
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr "sense cap paràmetre de substitució, per exemple \"objectClass=grupPosix\"."
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr "Port"
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr "Arbre base d'usuaris"
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr "Arbre base de grups"
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr "Associació membres-grup"
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr "Usa TLS"
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr "No ho useu en connexions SSL, fallarà."
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr "Servidor LDAP sense distinció entre majúscules i minúscules (Windows)"
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr "Desactiva la validació de certificat SSL."
+
+#: templates/settings.php:23
+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:23
+msgid "Not recommended, use for testing only."
+msgstr "No recomanat, ús només per proves."
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr "Camp per mostrar el nom d'usuari"
+
+#: templates/settings.php:24
+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:25
+msgid "Group Display Name Field"
+msgstr "Camp per mostrar el nom del grup"
+
+#: templates/settings.php:25
+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:27
+msgid "in bytes"
+msgstr "en bytes"
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr "en segons. Un canvi buidarà la memòria de cau."
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr "Ajuda"
diff --git a/l10n/ca/user_migrate.po b/l10n/ca/user_migrate.po
new file mode 100644
index 00000000000..c603e775e46
--- /dev/null
+++ b/l10n/ca/user_migrate.po
@@ -0,0 +1,52 @@
+# 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>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-15 02:03+0200\n"
+"PO-Revision-Date: 2012-08-14 08:04+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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr "Exporta"
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr "Alguna cosa ha anat malament en generar el fitxer d'exportació"
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr "S'ha produït un error"
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr "Exportar el compte d'usuari"
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr "Això crearà un fitxer comprimit que conté el vostre compte ownCloud."
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr "Importar el compte d'usuari"
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr "zip d'usuari ownCloud"
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr "Importa"
diff --git a/l10n/ca/user_openid.po b/l10n/ca/user_openid.po
new file mode 100644
index 00000000000..35c53f5627f
--- /dev/null
+++ b/l10n/ca/user_openid.po
@@ -0,0 +1,55 @@
+# 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>, 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:41+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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr "Això és un punt final de servidor OpenID. Per més informació consulteu"
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr "Identitat:<b>"
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr "Domini:<b>"
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr "Usuari:<b>"
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr "Inici de sessió"
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr "Error:<b>No heu seleccionat cap usuari"
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr "podeu autenticar altres llocs web amb aquesta adreça"
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr "Servidor OpenID autoritzat"
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr "La vostra adreça a Wordpress, Identi.ca &hellip;"
diff --git a/l10n/cs_CZ/admin_dependencies_chk.po b/l10n/cs_CZ/admin_dependencies_chk.po
new file mode 100644
index 00000000000..82774f6a248
--- /dev/null
+++ b/l10n/cs_CZ/admin_dependencies_chk.po
@@ -0,0 +1,74 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Martin <fireball@atlas.cz>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-17 15:37+0000\n"
+"Last-Translator: Martin <fireball@atlas.cz>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr "Modul php-json je třeba pro vzájemnou komunikaci mnoha aplikací"
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr "Modul php-curl je třeba pro zobrazení titulu strany v okamžiku přidání záložky"
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr "Modul php-gd je třeba pro tvorbu náhledů Vašich obrázků"
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr "Modul php-ldap je třeba pro připojení na Váš ldap server"
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr "Modul php-zip je třeba pro souběžné stahování souborů"
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr "Modul php-mb_multibyte je třeba pro správnou funkci kódování."
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr "Modul php-ctype je třeba k ověřování dat."
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr "Modul php-xml je třeba ke sdílení souborů prostřednictvím WebDAV."
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr "Příkaz allow_url_fopen ve Vašem php.ini souboru by měl být nastaven na 1 kvůli získávání informací z OCS serverů"
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr "Modul php-pdo je třeba pro ukládání dat ownCloud do databáze"
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr "Status závislostí"
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr "Používáno:"
diff --git a/l10n/cs_CZ/admin_migrate.po b/l10n/cs_CZ/admin_migrate.po
new file mode 100644
index 00000000000..a43f6e5be06
--- /dev/null
+++ b/l10n/cs_CZ/admin_migrate.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:
+# Martin <fireball@atlas.cz>, 2012.
+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 10:35+0000\n"
+"Last-Translator: Martin <fireball@atlas.cz>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr "Export této instance ownCloud"
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr "Bude vytvořen komprimovaný soubor obsahující data této instance ownCloud.⎠Zvolte typ exportu:"
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr "Export"
diff --git a/l10n/cs_CZ/bookmarks.po b/l10n/cs_CZ/bookmarks.po
new file mode 100644
index 00000000000..a6d7d19a244
--- /dev/null
+++ b/l10n/cs_CZ/bookmarks.po
@@ -0,0 +1,61 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Martin <fireball@atlas.cz>, 2012.
+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 09:44+0000\n"
+"Last-Translator: Martin <fireball@atlas.cz>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr "Záložky"
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr "nepojmenovaný"
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr "PÅ™etáhnÄ›te do VaÅ¡eho prohlížeÄe a klinÄ›te, pokud si pÅ™ejete rychle uložit stranu do záložek:"
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr "PÅ™eÄíst pozdÄ›ji"
+
+#: templates/list.php:13
+msgid "Address"
+msgstr "Adresa"
+
+#: templates/list.php:14
+msgid "Title"
+msgstr "Název"
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr "Tagy"
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr "Uložit záložku"
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr "Nemáte žádné záložky"
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr "Záložky <br />"
diff --git a/l10n/cs_CZ/calendar.po b/l10n/cs_CZ/calendar.po
index 4bc27d16c68..f06317221c0 100644
--- a/l10n/cs_CZ/calendar.po
+++ b/l10n/cs_CZ/calendar.po
@@ -10,21 +10,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Czech (Czech Republic) (http://www.transifex.net/projects/p/owncloud/language/cs_CZ/)\n"
+"POT-Creation-Date: 2012-08-16 02:04+0200\n"
+"PO-Revision-Date: 2012-08-15 09:41+0000\n"
+"Last-Translator: Martin <fireball@atlas.cz>\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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr "V paměti nejsou uloženy kompletně všechny kalendáře"
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr "Zdá se, že vše je kompletně uloženo v paměti"
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Žádné kalendáře nenalezeny."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Žádné události nenalezeny."
@@ -32,300 +40,394 @@ msgstr "Žádné události nenalezeny."
msgid "Wrong calendar"
msgstr "Nesprávný kalendář"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr "Soubor, obsahující všechny záznamy nebo je prázdný, je již uložen ve Vašem kalendáři."
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr "Záznam byl uložen v novém kalendáři"
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr "Import selhal"
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr "záznamů bylo uloženo ve Vašem kalendáři"
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Nová Äasová zóna:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Časová zóna byla změněna"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Chybný požadavek"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Kalendář"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd M/d"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd M/d"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM rrrr"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "d. MMM[ yyyy]{ '&#8212;' d.[ MMM] yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, MMM d, rrrr"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Narozeniny"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Obchodní"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Hovor"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Klienti"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "DoruÄovatel"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Prázdniny"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Nápady"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Cesta"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "VýroÄí"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Schůzka"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Další"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Osobní"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projekty"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Dotazy"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Pracovní"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr "od"
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "nepojmenováno"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Nový kalendář"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Neopakuje se"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "DennÄ›"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Týdně"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Každý všední den"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Jednou za dva týdny"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "MÄ›síÄnÄ›"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "RoÄnÄ›"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "nikdy"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "podle výskytu"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "podle data"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "podle dne v měsíci"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "podle dne v týdnu"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Pondělí"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Úterý"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Středa"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "ÄŒtvrtek"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Pátek"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Sobota"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Neděle"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "týdenní události v měsíci"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "první"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "druhý"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "třetí"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "Ätvrtý"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "pátý"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "poslední"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Leden"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Únor"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Březen"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Duben"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Květen"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "ÄŒerven"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "ÄŒervenec"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "Srpen"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "Září"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Říjen"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "Listopad"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Prosinec"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "podle data události"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "po dni (dnech)"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "podle Äísel týdnů"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "podle dne a měsíce"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Datum"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Kal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr "Ne"
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr "Po"
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr "Út"
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr "St"
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr "ÄŒt"
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr "Pá"
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr "So"
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr "Ne"
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr "únor"
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr "březen"
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr "duben"
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr "květen"
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr "Äerven"
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr "Äervenec"
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr "srpen"
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr "září"
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr "říjen"
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr "listopad"
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr "prosinec"
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Celý den"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Nový kalendář"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Chybějící pole"
@@ -359,40 +461,32 @@ msgstr "Akce konÄí pÅ™ed zahájením"
msgid "There was a database fail"
msgstr "Chyba v databázi"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "týden"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "měsíc"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Seznam"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "dnes"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Kalendáře"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Chyba při převodu souboru"
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Vybrat aktivní kalendář"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr "Nastavení"
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Vaše kalendáře"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDav odkaz"
@@ -404,19 +498,19 @@ msgstr "Sdílené kalendáře"
msgid "No shared calendars"
msgstr "Žádné sdílené kalendáře"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Sdílet kalendář"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Stáhnout"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Editovat"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Odstranit"
@@ -502,23 +596,23 @@ msgstr "Kategorie oddÄ›lené Äárkami"
msgid "Edit categories"
msgstr "Upravit kategorie"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Celodenní událost"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "od"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "do"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "PokroÄilé volby"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Umístění"
@@ -526,7 +620,7 @@ msgstr "Umístění"
msgid "Location of the Event"
msgstr "Místo konání události"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Popis"
@@ -534,84 +628,86 @@ msgstr "Popis"
msgid "Description of the Event"
msgstr "Popis události"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Opakování"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "PokroÄilé"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Vybrat dny v týdnu"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Vybrat dny"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "a denní události v roce"
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "a denní události v měsíci"
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Vybrat měsíce"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Vybrat týdny"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "a týden s událostmi v roce"
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Interval"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Konec"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "výskyty"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "vytvořit nový kalendář"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Importovat soubor kalendáře"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Zvolte prosím kalendář"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "vytvořit nový kalendář"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr "Vyberte prosím kalendář"
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Název nového kalendáře"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Import"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr "Použijte volné jméno!"
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Kalendář se importuje"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr "Kalendář s trímto názvem již existuje. Pokud název použijete, stejnojmenné kalendáře budou slouÄeny."
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Kalendář byl úspěšně importován"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Import"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Zavřít dialog"
@@ -627,45 +723,73 @@ msgstr "Zobrazit událost"
msgid "No categories selected"
msgstr "Žádné kategorie nevybrány"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Vyberte kategorii"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "z"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "v"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr "Hlavní"
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Časové pásmo"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Vždy kontrolavat, zda nedoÅ¡lo ke zmÄ›nÄ› Äasového pásma"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr "Obnovit auronaricky Äasovou zónu."
-#: templates/settings.php:33
-msgid "Timeformat"
+#: templates/settings.php:52
+msgid "Time format"
msgstr "Formát Äasu"
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24h"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12h"
-#: templates/settings.php:40
-msgid "First day of the week"
+#: templates/settings.php:64
+msgid "Start week on"
msgstr "Týden zaÄína v"
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Adresa pro synchronizaci kalendáře pomocí CalDAV:"
+#: templates/settings.php:76
+msgid "Cache"
+msgstr "Paměť"
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr "Vymazat paměť pro opakuijísí se záznamy"
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr "URLs"
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr "Kalendář CalDAV synchronizuje adresy"
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr "podrobnosti"
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr "Primární adresa (veřejná)"
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr "Odkaz(y) kalendáře pouze pro Ätení"
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/cs_CZ/contacts.po b/l10n/cs_CZ/contacts.po
index 6c392a1f09a..dabfe51b561 100644
--- a/l10n/cs_CZ/contacts.po
+++ b/l10n/cs_CZ/contacts.po
@@ -10,637 +10,770 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Czech (Czech Republic) (http://www.transifex.net/projects/p/owncloud/language/cs_CZ/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
"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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Chyba při (de)aktivaci adresáře."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Během přidávání kontaktu nastala chyba."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Nelze přidat prazdný údaj."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Musí být uveden nejméně jeden z adresních údajů"
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "id neni nastaveno."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "Pokoušíte se přidat duplicitní atribut: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Nelze aktualizovat adresář s prázdným jménem."
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Chyba během přdávání údaje kontaktu."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Chyba při aktualizaci adresáře."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "ID nezadáno"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Chyba pÅ™i nastavování kontrolního souÄtu."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Žádné kategorie nebyly vybrány k smazání."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Žádný adresář nenalezen."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Žádné kontakty nenalezeny."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Během přidávání kontaktu nastala chyba."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "jméno elementu není nastaveno."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr "Nelze analyzovat kontakty"
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Nelze přidat prazdný údaj."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Musí být uveden nejméně jeden z adresních údajů"
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "Pokoušíte se přidat duplicitní atribut: "
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informace o vCard je nesprávná. Obnovte stránku, prosím."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "Chybí ID"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "Chyba při parsování VCard pro ID: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Nelze přidat adresář s prázdným jménem."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "kontrolní souÄet není nastaven."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Chyba při přidávání adresáře."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "Informace o vCard je nesprávná. Obnovte stránku, prosím."
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Chyba při aktivaci adresáře."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Něco se pokazilo. "
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "Nebylo nastaveno ID kontaktu."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Chyba pÅ™i naÄítání fotky kontaktu."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Chyba pÅ™i ukládání doÄasného souboru."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "NaÄítaná fotka je vadná."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "id neni nastaveno."
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Informace o vCard je nesprávná. Obnovte stránku, prosím."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Chyba při odstraňování údaje kontaktu."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "Chybí ID kontaktu."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "Chybí id kontaktu."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "Žádná fotka nebyla nahrána."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Soubor neexistuje:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Chyba pÅ™i naÄítání obrázku."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Chyba při převzetí objektu kontakt."
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Chyba při získávání fotky."
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Chyba při ukládání kontaktu."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Chyba při změně velikosti obrázku."
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Chyba při osekávání obrázku."
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Chyba pÅ™i vytváření doÄasného obrázku."
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "jméno elementu není nastaveno."
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "kontrolní souÄet není nastaven."
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "Informace o vCard je nesprávná. Obnovte stránku, prosím."
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "Něco se pokazilo. "
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Chyba při aktualizaci údaje kontaktu."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "Nelze aktualizovat adresář s prázdným jménem."
+msgstr "Chyba při hledání obrázku:"
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Chyba při aktualizaci adresáře."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "Chyba při nahrávání kontaktů do úložiště."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Nevyskytla se žádná chyba, soubor byl úspěšně nahrán"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Nahrávaný soubor pÅ™ekraÄuje nastavení upload_max_filesize directive v php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Nahrávaný soubor pÅ™ekraÄuje nastavení MAX_FILE_SIZE z voleb HTML formuláře"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "Nahrávaný soubor se nahrál pouze z Äásti"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Žádný soubor nebyl nahrán"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "Chybí doÄasný adresář"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Nemohu uložit doÄasný obrázek: "
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Nemohu naÄíst doÄasný obrázek: "
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Soubor nebyl odeslán. Neznámá chyba"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Kontakty"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Bohužel, tato funkce nebyla ještě implementována."
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "Neimplementováno"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Nelze získat platnou adresu."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Chyba"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Tento parametr nemuže zůstat nevyplněn."
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "Prvky nelze převést.."
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "'deleteProperty' voláno bez argumentu. Prosím oznamte chybu na bugs.owncloud.org"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Upravit jméno"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Žádné soubory nebyly vybrány k nahrání."
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "Soubor, který se pokoušíte odeslat, přesahuje maximální povolenou velikost."
-#: js/contacts.js:1119
-msgid "Select photo"
-msgstr ""
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr "Chyba při otevírání obrázku profilu"
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
+msgstr "Vybrat typ"
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "Pro import kontaktů sem přetáhněte soubor VCF"
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr "NÄ›které kontakty jsou oznaÄeny ke smazání. PoÄkete prosím na dokonÄení operace."
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
-msgstr ""
+#: js/loader.js:49
+msgid "Result: "
+msgstr "Výsledek: "
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr "importováno v pořádku,"
-#: js/contacts.js:1494
+#: js/loader.js:49
+msgid " failed."
+msgstr "neimportováno."
+
+#: js/settings.js:68
msgid "Displayname cannot be empty."
-msgstr ""
+msgstr "Zobrazované jméno nemůže zůstat prázdné."
-#: js/contacts.js:1634
-msgid "Upload too large"
-msgstr ""
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr "Adresář nenalezen:"
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Toto není Váš adresář."
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Kontakt nebyl nalezen."
+
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Adresář nenalezen."
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Toto není Váš adresář."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Kontakt nebyl nalezen."
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Adresa"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefon"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "Email"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organizace"
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Pracovní"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Domácí"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr "Ostatní"
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mobil"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Text"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Hlas"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Zpráva"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fax"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Video"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Pager"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Narozeniny"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr "Pracovní"
+
+#: lib/app.php:254
+msgid "Call"
+msgstr "Volat"
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr "Klienti"
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr "Dodavatel"
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr "Prázdniny"
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr "Nápady"
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr "Cestování"
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr "Jubileum"
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr "Schůzka"
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr "Osobní"
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr "Projekty"
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr "Dotazy"
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "Narozeniny {name}"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Kontakt"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Přidat kontakt"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Import"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr "Nastavení"
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Adresáře"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Nastavit adresáře"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Zavřít"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Nový adresář"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr "Klávesoví zkratky"
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Importovat z VCF"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr "Navigace"
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDav odkaz"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr "Následující kontakt v seznamu"
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Stažení"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr "Předchozí kontakt v seznamu"
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Editovat"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr "Rozbalit/sbalit aktuální Adresář"
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Odstranit"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr "Následující Adresář"
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Stáhnout kontakt"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr "Předchozí Adresář"
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Odstranit kontakt"
+#: templates/index.php:54
+msgid "Actions"
+msgstr "Akce"
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr "ObÄerstvit seznam kontaktů"
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr "Přidat kontakt"
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr "Předat nový Adresář"
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr "Odstranit aktuální kontakt"
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Přetáhněte sem fotku pro její nahrání"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Smazat souÄasnou fotku"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Upravit souÄasnou fotku"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Nahrát novou fotku"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Vybrat fotku z ownCloudu"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr "Formát vlastní, kÅ™estní, celé jméno, obrácenÄ› nebo obrácenÄ› oddelené Äárkami"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Upravit podrobnosti jména"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organizace"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Odstranit"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Přezdívka"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Zadejte přezdívku"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Narozeniny"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr "Web"
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr "http://www.somesite.com"
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr "Přejít na web"
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "dd. mm. yyyy"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Skupiny"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "OddÄ›lte skupiny Äárkami"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Upravit skupiny"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Preferovaný"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Prosím zadejte platnou e-mailovou adresu"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Zadat e-mailovou adresu"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "Odeslat na adresu"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Smazat e-mail"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Zadat telefoní Äíslo"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Smazat telefoní Äíslo"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Zobrazit na mapÄ›"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Upravit podrobnosti adresy"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Zde můžete připsat poznámky."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "PÅ™idat políÄko"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Profilová fotka"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefon"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Poznámka"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "Email"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Smazat souÄasnou fotku"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Upravit souÄasnou fotku"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Adresa"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Nahrát novou fotku"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Poznámka"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Vybrat fotku z ownCloudu"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Stáhnout kontakt"
-#: templates/part.cropphoto.php:64
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Odstranit kontakt"
+
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "Obrázek byl odstranÄ›n z doÄasné pamÄ›ti."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Upravit adresu"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Typ"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "PO box"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr "Ulice"
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr "Ulice a Äíslo"
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Rozšířené"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Ulice"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr "Byt Äíslo atd."
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Město"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Kraj"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr "Např. stát nebo okres"
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "PSČ"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr "PSČ"
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "ZemÄ›"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Upravit kategorie"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Přidat"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Adresář"
@@ -721,35 +854,6 @@ msgstr "ml."
msgid "Sn."
msgstr "st."
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Nový adresář"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Editace adresáře"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Zobrazené jméno"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Aktivní"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Uložit"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Potvrdit"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Storno"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "Importovat soubor kontaktů"
@@ -766,57 +870,86 @@ msgstr "vytvořit nový adresář"
msgid "Name of new addressbook"
msgstr "Jméno nového adresáře"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Import"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "Importování kontaktů"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "Vyberte adresář do kterého chcete importovat:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "Vybrat z disku"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "Nemáte žádné kontakty v adresáři."
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Přidat kontakt"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Nastavit adresář"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr "Vybrat Adresář"
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr "Vložte jméno"
-#: templates/settings.php:4
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr "Vložte popis"
+
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "Adresa pro synchronizaci pomocí CardDAV:"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "víc informací"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "Hlavní adresa (Kontakt etc)"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr "Zobrazit odklaz CardDAV:"
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr "Zobrazit odkaz VCF pouze pro Ätení"
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Stažení"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Editovat"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Nový adresář"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr "Název"
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr "Popis"
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Uložit"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Storno"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr "Více..."
diff --git a/l10n/cs_CZ/core.po b/l10n/cs_CZ/core.po
index 594e0635dca..ebca07a4426 100644
--- a/l10n/cs_CZ/core.po
+++ b/l10n/cs_CZ/core.po
@@ -10,10 +10,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Czech (Czech Republic) (http://www.transifex.net/projects/p/owncloud/language/cs_CZ/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
"Content-Transfer-Encoding: 8bit\n"
@@ -34,85 +34,85 @@ msgstr "Tato kategorie již existuje:"
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Nastavení"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Leden"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Únor"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Březen"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "Duben"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Květen"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "ÄŒerven"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "ÄŒervenec"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "Srpen"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "Září"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Říjen"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "Listopad"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "Prosinec"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Zrušit"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Ne"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Ano"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Budiž"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Žádné kategorie nebyly vybrány ke smazání."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Chyba"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Reset hesla Owncloud"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "Reset hesla pro ownCloud"
@@ -242,14 +242,10 @@ msgstr "DokonÄit instalaci"
msgid "web services under your control"
msgstr "webové služby pod Vaší kontrolou"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Odhlásit se"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Nastavení"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Zapomenuté heslo?"
diff --git a/l10n/cs_CZ/files.po b/l10n/cs_CZ/files.po
index 23b3d0b0362..77f16b10d67 100644
--- a/l10n/cs_CZ/files.po
+++ b/l10n/cs_CZ/files.po
@@ -9,43 +9,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Czech (Czech Republic) (http://www.transifex.net/projects/p/owncloud/language/cs_CZ/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
"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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Soubor byl odeslán úspěšně"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Odeslaný soubor přesáhl velikostí parametr upload_max_filesize v php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Odeslaný soubor přesáhl velikostí parametr MAX_FILE_SIZE specifikovaný v HTML formuláři"
-#: ajax/upload.php:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Soubor byl odeslán pouze ÄásteÄnÄ›"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Soubor nebyl odeslán"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Chybí adresář pro soÄasné soubory"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Zápis na disk se nezdařil"
@@ -53,57 +53,85 @@ msgstr "Zápis na disk se nezdařil"
msgid "Files"
msgstr "Soubory"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Vymazat"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "již existuje"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "zaměnit"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "storno"
-#: js/files.js:170
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "zaměněno"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "s"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "zpět"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "smazáno"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "generuji ZIP soubor, může to chvíli trvat"
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Nemohu nahrát váš soubor neboť to je adresář a nebo má nulovou délku."
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "Chyba při nahrávání"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "OÄekává se"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "Nahrávání zrušeno"
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "Špatné jméno, znak '/' není povolen"
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Velikost"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Změněno"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "adresář"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "adresáře"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "soubor"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "soubory"
#: templates/admin.php:5
msgid "File handling"
@@ -173,10 +201,6 @@ msgstr "Sdílet"
msgid "Download"
msgstr "Stáhnout"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Vymazat"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Příliš velký soubor"
diff --git a/l10n/cs_CZ/files_encryption.po b/l10n/cs_CZ/files_encryption.po
new file mode 100644
index 00000000000..4055cc18fcc
--- /dev/null
+++ b/l10n/cs_CZ/files_encryption.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Martin <fireball@atlas.cz>, 2012.
+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 10:33+0000\n"
+"Last-Translator: Martin <fireball@atlas.cz>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr "Kryptování"
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr "Při kryptování vynechat následující typy souborů"
+
+#: templates/settings.php:5
+msgid "None"
+msgstr "Žádný"
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr "Povolit kryptování"
diff --git a/l10n/cs_CZ/files_external.po b/l10n/cs_CZ/files_external.po
new file mode 100644
index 00000000000..1c175fb4db6
--- /dev/null
+++ b/l10n/cs_CZ/files_external.po
@@ -0,0 +1,84 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Jan Krejci <krejca85@gmail.com>, 2012.
+# Michal Hrušecký <Michal@hrusecky.net>, 2012.
+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 23:53+0000\n"
+"Last-Translator: Jan Krejci <krejca85@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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr "Externí úložiště"
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr "Přípojný bod"
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr "Konfigurace"
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr "Nastavení"
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr "Přidat přípojný bod"
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr "Všichni uživatelé"
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr "Skupiny"
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr "Uživatelé"
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr "Smazat"
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr "Zapnout uživatelské externí úložiště"
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr "Povolit uživatelů připojit jejich vlastní externí úložiště"
diff --git a/l10n/cs_CZ/files_sharing.po b/l10n/cs_CZ/files_sharing.po
new file mode 100644
index 00000000000..232114a8e63
--- /dev/null
+++ b/l10n/cs_CZ/files_sharing.po
@@ -0,0 +1,36 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Martin <fireball@atlas.cz>, 2012.
+# Michal Hrušecký <Michal@hrusecky.net>, 2012.
+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 19:58+0000\n"
+"Last-Translator: Michal Hrušecký <Michal@hrusecky.net>\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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr "Velikost"
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr "Upraveno"
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr "Smazat vše"
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr "Smazat"
diff --git a/l10n/cs_CZ/files_versions.po b/l10n/cs_CZ/files_versions.po
new file mode 100644
index 00000000000..cac58a2122d
--- /dev/null
+++ b/l10n/cs_CZ/files_versions.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Martin <fireball@atlas.cz>, 2012.
+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 10:32+0000\n"
+"Last-Translator: Martin <fireball@atlas.cz>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr "Vypršení všech verzí"
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr "Povolit verzování souborů"
diff --git a/l10n/cs_CZ/gallery.po b/l10n/cs_CZ/gallery.po
index 08c9c2054b5..f24db5838a0 100644
--- a/l10n/cs_CZ/gallery.po
+++ b/l10n/cs_CZ/gallery.po
@@ -10,88 +10,32 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Czech (Czech Republic) (http://www.transifex.net/projects/p/owncloud/language/cs_CZ/)\n"
+"POT-Creation-Date: 2012-08-16 02:04+0200\n"
+"PO-Revision-Date: 2012-08-15 09:30+0000\n"
+"Last-Translator: Martin <fireball@atlas.cz>\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"
-#: appinfo/app.php:37
+#: appinfo/app.php:39
msgid "Pictures"
msgstr "Obrázky"
-#: js/album_cover.js:44
+#: js/pictures.js:12
msgid "Share gallery"
-msgstr ""
+msgstr "Sdílet galerii"
-#: js/album_cover.js:64 js/album_cover.js:100 js/album_cover.js:133
+#: js/pictures.js:32
msgid "Error: "
-msgstr ""
+msgstr "Chyba: "
-#: js/album_cover.js:64 js/album_cover.js:100
+#: js/pictures.js:32
msgid "Internal error"
-msgstr ""
-
-#: js/album_cover.js:114
-msgid "Scanning root"
-msgstr ""
-
-#: js/album_cover.js:115
-msgid "Default order"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Ascending"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Descending"
-msgstr ""
-
-#: js/album_cover.js:117 templates/index.php:19
-msgid "Settings"
-msgstr "Nastavení"
-
-#: js/album_cover.js:122
-msgid "Scanning root cannot be empty"
-msgstr ""
-
-#: js/album_cover.js:122 js/album_cover.js:133
-msgid "Error"
-msgstr ""
-
-#: templates/index.php:16
-msgid "Rescan"
-msgstr "Znovu prohledat"
-
-#: templates/index.php:17
-msgid "Stop"
-msgstr "Zastavit"
-
-#: templates/index.php:18
-msgid "Share"
-msgstr "Sdílet"
-
-#: templates/view_album.php:19
-msgid "Back"
-msgstr "Zpět"
-
-#: templates/view_album.php:36
-msgid "Remove confirmation"
-msgstr "Potvrzení odebrání"
-
-#: templates/view_album.php:37
-msgid "Do you want to remove album"
-msgstr "Chcete odstranit album?"
-
-#: templates/view_album.php:40
-msgid "Change album name"
-msgstr "Změnit název alba"
+msgstr "Vnitřní chyba"
-#: templates/view_album.php:43
-msgid "New album name"
-msgstr "Název nového alba"
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr "Přehrávání"
diff --git a/l10n/cs_CZ/lib.po b/l10n/cs_CZ/lib.po
new file mode 100644
index 00000000000..f6c62f88034
--- /dev/null
+++ b/l10n/cs_CZ/lib.po
@@ -0,0 +1,113 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Martin <fireball@atlas.cz>, 2012.
+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 09:24+0000\n"
+"Last-Translator: Martin <fireball@atlas.cz>\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"
+
+#: app.php:288
+msgid "Help"
+msgstr "Nápověda"
+
+#: app.php:295
+msgid "Personal"
+msgstr "Osobní"
+
+#: app.php:300
+msgid "Settings"
+msgstr "Nastavení"
+
+#: app.php:305
+msgid "Users"
+msgstr "Uživatelé"
+
+#: app.php:312
+msgid "Apps"
+msgstr "Aplikace"
+
+#: app.php:314
+msgid "Admin"
+msgstr "Admin"
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr "Stahování ZIPu je vypnuto."
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr "Soubory je nutno stahovat samostatnÄ›."
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr "Zpět k souborům"
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr "Vybarné soubory jsou pro vytvoření zipu příliš velké."
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr "Aplikace není povolena"
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr "Chyba autorizace"
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr "Realce expirovala. Obnovte prosím stranu."
+
+#: template.php:86
+msgid "seconds ago"
+msgstr "před vteřinami"
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr "před 1 minutou"
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr "před %d minutami"
+
+#: template.php:91
+msgid "today"
+msgstr "dnes"
+
+#: template.php:92
+msgid "yesterday"
+msgstr "vÄera"
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr "před %d dny"
+
+#: template.php:94
+msgid "last month"
+msgstr "minulý měsíc"
+
+#: template.php:95
+msgid "months ago"
+msgstr "před měsíci"
+
+#: template.php:96
+msgid "last year"
+msgstr "loni"
+
+#: template.php:97
+msgid "years ago"
+msgstr "před lety"
diff --git a/l10n/cs_CZ/settings.po b/l10n/cs_CZ/settings.po
index 360a7fe9d90..64ed6cf9551 100644
--- a/l10n/cs_CZ/settings.po
+++ b/l10n/cs_CZ/settings.po
@@ -12,77 +12,109 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Czech (Czech Republic) (http://www.transifex.net/projects/p/owncloud/language/cs_CZ/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
"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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "Nepodařílo se stáhnout seznam z App Store"
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "E-mail uložen"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Neplatný e-mail"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID změněn"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Chybný dotaz"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Chyba autorizace"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Jazyk byl změněn"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "Chyba"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "Vypnout"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Zapnout"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Ukládám..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "ÄŒesky"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "BezpeÄnostní upozornÄ›ní"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "Cron"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr "spustit jednu úlohu s každou nataženou stranou"
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr "cron.php je registrován jako služba webcron"
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr "použijte systémovou službu cron"
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Log"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Více"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Přidat vaší aplikaci"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Vyberte aplikaci"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Více na stránce s aplikacemi na apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-licencováno"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "podle"
@@ -174,34 +206,38 @@ msgstr "Pomoci překládat"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "tuto adresu použijte pro připojení k ownCloud ve Vašem správci souborů"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Jméno"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Heslo"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Skupiny"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Vytvořit"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Výchozí kvóta"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Jiné"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Kvóta"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Vymazat"
diff --git a/l10n/cs_CZ/tasks.po b/l10n/cs_CZ/tasks.po
new file mode 100644
index 00000000000..26605819167
--- /dev/null
+++ b/l10n/cs_CZ/tasks.po
@@ -0,0 +1,107 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Michal Hrušecký <Michal@hrusecky.net>, 2012.
+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 19:57+0000\n"
+"Last-Translator: Michal Hrušecký <Michal@hrusecky.net>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr "Neplatné datum/Äas"
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr "Úkoly"
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr "Bez kategorie"
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr "1=nejvyšší"
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr "5=střední"
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr "9=nejnižší"
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr "Neplatná priorita"
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr "Přidat úkol"
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr "NaÄítám úkoly..."
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr "Důležité"
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr "Více"
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr "Méně"
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr "Smazat"
diff --git a/l10n/cs_CZ/user_ldap.po b/l10n/cs_CZ/user_ldap.po
new file mode 100644
index 00000000000..25f623c83bd
--- /dev/null
+++ b/l10n/cs_CZ/user_ldap.po
@@ -0,0 +1,165 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Martin <fireball@atlas.cz>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-17 16:01+0000\n"
+"Last-Translator: Martin <fireball@atlas.cz>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr "Hostitel"
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr "Nelze vynechat protokol vyžadující SSL. ZaÄnÄ›te s ldaps://"
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr "Base DN"
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr "V Rozšířeném nastavení můžete specifikovat pro své uživatele a skupiny element Base DN"
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr "DN uživatele"
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr "Heslo"
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr "Pro anonymní přístup ponechte údaje DN and Heslo prázdné."
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr "Filtr uživatelských loginů"
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr "Definuje filtr, který je aplikován v průběhu logování. %%uid nahrazuje uživatelské jméno během logování."
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr "použijte %%uid pro rezervované místo, např. \"uid=%%uid\""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr "Filtr uživateslkých seznamů"
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr "Defunije filtr, který je plaikován při návratu uživatelů."
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr "bez rezervace místa, např. \"objectClass=person\"."
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr "Filtr skupiny"
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr "Definuje filtr, který je aplikován při návratu skupin"
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr "bez rezervace místa, např. \"objectClass=posixGroup\"."
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr "Port"
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr "Základní uživatelský strom"
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr "Základní skupinový strom"
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr "Asociace Älena skupiny"
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr "Použijte TLS"
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr "Nepoužívejte pro SSL připojení, připojení selže."
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr "LDAP server nerozlišující velikost znaků (Windows)"
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr "Vypněte ověřování SSL certifikátu"
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr "pokud pracuje připojení pouze pokud je teto volba aktivní, importujte SSL certifikát LDAP serveru do Vašeho serveru ownCloud."
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr "Není doporuÄeno, pouze pro úÄely testování."
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr "Pole pro zobrazované jméno uživatele"
+
+#: templates/settings.php:24
+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:25
+msgid "Group Display Name Field"
+msgstr "Pole pro zobrazení jména skupiny"
+
+#: templates/settings.php:25
+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:27
+msgid "in bytes"
+msgstr "v bytech"
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr "ve vteÅ™inách. ZmÄ›na vyprázdní doÄasnou paměť."
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr "Nápověda"
diff --git a/l10n/cs_CZ/user_migrate.po b/l10n/cs_CZ/user_migrate.po
new file mode 100644
index 00000000000..74cee0cec42
--- /dev/null
+++ b/l10n/cs_CZ/user_migrate.po
@@ -0,0 +1,52 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Martin <fireball@atlas.cz>, 2012.
+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 09:51+0000\n"
+"Last-Translator: Martin <fireball@atlas.cz>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr "Export"
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr "Během vytváření souboru exportu došlo k chybě"
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr "Nastala chyba"
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr "Export VaÅ¡eho uživatelského úÄtu"
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr "Bude vytvoÅ™en komprimovaný soubor, obsahující Váš ownCloud úÄet."
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr "Import uživatelského úÄtu"
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr "Zip soubor uživatele ownCloud"
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr "Import"
diff --git a/l10n/cs_CZ/user_openid.po b/l10n/cs_CZ/user_openid.po
new file mode 100644
index 00000000000..f2fe13f3345
--- /dev/null
+++ b/l10n/cs_CZ/user_openid.po
@@ -0,0 +1,55 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Martin <fireball@atlas.cz>, 2012.
+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 09:48+0000\n"
+"Last-Translator: Martin <fireball@atlas.cz>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr "Toto je OpenID server endpoint. Více informací na"
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr "Identita: <b>"
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr "Oblast: <b>"
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr "Uživatel: <b>"
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr "Login"
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr "Chyba: <b>Uživatel není zvolen"
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr "s touto adresou se můžete autrorizovat na další strany"
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr "Autorizovaný OpenID poskytovatel"
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr "Vaše adresa na Wordpressu, Identi.ca, &hellip;"
diff --git a/l10n/da/admin_dependencies_chk.po b/l10n/da/admin_dependencies_chk.po
new file mode 100644
index 00000000000..a0e629c1339
--- /dev/null
+++ b/l10n/da/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/da/admin_migrate.po b/l10n/da/admin_migrate.po
new file mode 100644
index 00000000000..33fa6f79201
--- /dev/null
+++ b/l10n/da/admin_migrate.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:
+# <sr@ybnet.dk>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-20 14:56+0000\n"
+"Last-Translator: ressel <sr@ybnet.dk>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr "Eksporter ownCloud instans"
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr "Eksporter"
diff --git a/l10n/da/bookmarks.po b/l10n/da/bookmarks.po
new file mode 100644
index 00000000000..7d336705b21
--- /dev/null
+++ b/l10n/da/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/da/calendar.po b/l10n/da/calendar.po
index 7207ff883e6..5933d87709d 100644
--- a/l10n/da/calendar.po
+++ b/l10n/da/calendar.po
@@ -6,26 +6,36 @@
# <mikkelbjerglarsen@gmail.com>, 2011.
# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2011, 2012.
# Pascal d'Hermilly <pascal@dhermilly.dk>, 2011.
+# <sr@ybnet.dk>, 2012.
# Thomas Tanghus <>, 2012.
+# Thomas Tanghus <thomas@tanghus.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Danish (http://www.transifex.net/projects/p/owncloud/language/da/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-20 14:34+0000\n"
+"Last-Translator: ressel <sr@ybnet.dk>\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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr "Ikke alle kalendere er fuldstændig cached"
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Der blev ikke fundet nogen kalendere."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Der blev ikke fundet nogen begivenheder."
@@ -33,300 +43,394 @@ msgstr "Der blev ikke fundet nogen begivenheder."
msgid "Wrong calendar"
msgstr "Forkert kalender"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr "Filen indeholdt enten ingen begivenheder eller alle begivenheder er allerede gemt i din kalender."
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr "begivenheder er gemt i den nye kalender"
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr "import mislykkedes"
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr "begivenheder er gemt i din kalender"
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Ny tidszone:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Tidszone ændret"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Ugyldig forespørgsel"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:37 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Kalender"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd M/d"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd M/d"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM åååå"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "MMM d[ åååå]{ '&#8212;'[ MMM] d åååå}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, MMM d, åååå"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Fødselsdag"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Forretning"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Ring"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Kunder"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Leverance"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Helligdage"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Ideér"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Rejse"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Jubilæum"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Møde"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Andet"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Privat"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projekter"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Spørgsmål"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Arbejde"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr "af"
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "unavngivet"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Ny Kalender"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Gentages ikke"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Daglig"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Ugentlig"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Alle hverdage"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Hver anden uge"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "MÃ¥nedlig"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Ã…rlig"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "aldrig"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "efter forekomster"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "efter dato"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "efter dag i måneden"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "efter ugedag"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Mandag"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Tirsdag"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Onsdag"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Torsdag"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Fredag"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Lørdag"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "øndag"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "begivenhedens uge i måneden"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "første"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "anden"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "tredje"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "fjerde"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "femte"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "sidste"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Januar"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Februar"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Marts"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "April"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Maj"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Juni"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Juli"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "August"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "September"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Oktober"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "November"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "December"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "efter begivenheders dato"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "efter dag(e) i året"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "efter ugenummer/-numre"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "efter dag og måned"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Dato"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Kal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr "Søn."
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr "Man."
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr "Tir."
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr "Ons."
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr "Tor."
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr "Fre."
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr "Lør."
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr "Jan."
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr "Feb."
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr "Mar."
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr "Apr."
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr "Maj"
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr "Jun."
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr "Jul."
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr "Aug."
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr "Sep."
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr "Okt."
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr "Nov."
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr "Dec."
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Hele dagen"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Ny Kalender"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Manglende felter"
@@ -360,40 +464,32 @@ msgstr "Begivenheden slutter, inden den begynder"
msgid "There was a database fail"
msgstr "Der var en fejl i databasen"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Uge"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "MÃ¥ned"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Liste"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "I dag"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Kalendere"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Der opstod en fejl under gennemlæsning af filen."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Vælg aktive kalendere"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr "Indstillinger"
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Dine kalendere"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDav-link"
@@ -405,19 +501,19 @@ msgstr "Delte kalendere"
msgid "No shared calendars"
msgstr "Ingen delte kalendere"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Del kalender"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Hent"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Rediger"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Slet"
@@ -503,23 +599,23 @@ msgstr "Opdel kategorier med kommaer"
msgid "Edit categories"
msgstr "Rediger kategorier"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Heldagsarrangement"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Fra"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Til"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Avancerede indstillinger"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Sted"
@@ -527,7 +623,7 @@ msgstr "Sted"
msgid "Location of the Event"
msgstr "Placering af begivenheden"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Beskrivelse"
@@ -535,84 +631,86 @@ msgstr "Beskrivelse"
msgid "Description of the Event"
msgstr "Beskrivelse af begivenheden"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Gentag"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Avanceret"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Vælg ugedage"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Vælg dage"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "og begivenhedens dag i året."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "og begivenhedens sag på måneden"
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Vælg måneder"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Vælg uger"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "og begivenhedens uge i året."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Interval"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Afslutning"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "forekomster"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "opret en ny kalender"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Importer en kalenderfil"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Vælg venligst kalender"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "opret en ny kalender"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr "Vælg en kalender"
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Navn på ny kalender"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importer"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Importerer kalender"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr "En kalender med dette navn findes allerede. Hvis du fortsætter alligevel, vil disse kalendere blive sammenlagt."
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Kalender importeret korrekt"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Importer"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Luk dialog"
@@ -628,45 +726,73 @@ msgstr "Vis en begivenhed"
msgid "No categories selected"
msgstr "Ingen categorier valgt"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Vælg kategori"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "fra"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "kl."
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr "Generel"
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Tidszone"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Check altid efter ændringer i tidszone"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr "Opdater tidszone automatisk"
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Tidsformat"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24T"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12T"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Ugens første dag"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Synkroniseringsadresse til CalDAV:"
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr "flere oplysninger"
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/da/contacts.po b/l10n/da/contacts.po
index be2ce3917fc..8a658ef1365 100644
--- a/l10n/da/contacts.po
+++ b/l10n/da/contacts.po
@@ -7,641 +7,775 @@
# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2011, 2012.
# Pascal d'Hermilly <pascal@dhermilly.dk>, 2011.
# Thomas Tanghus <>, 2012.
+# Thomas Tanghus <thomas@tanghus.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Danish (http://www.transifex.net/projects/p/owncloud/language/da/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Fejl ved (de)aktivering af adressebogen"
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Der opstod en fejl ved tilføjelse af kontaktpersonen."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Kan ikke tilføje en egenskab uden indhold."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Der skal udfyldes mindst et adressefelt."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "Intet ID medsendt."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "Kan ikke tilføje overlappende element."
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Kan ikke opdatére adressebogen med et tomt navn."
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Fejl ved tilføjelse af egenskab."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Fejl ved opdatering af adressebog"
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "Intet ID medsendt"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Kunne ikke sætte checksum."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Der ikke valgt nogle grupper at slette."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Der blev ikke fundet nogen adressebøger."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Der blev ikke fundet nogen kontaktpersoner."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Der opstod en fejl ved tilføjelse af kontaktpersonen."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "Elementnavnet er ikke medsendt."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Kan ikke tilføje en egenskab uden indhold."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Der skal udfyldes mindst et adressefelt."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "Kan ikke tilføje overlappende element."
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informationen om vCard er forkert. Genindlæs siden."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "Manglende ID"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
-msgstr "Kunne ikke indlæse VCard med ID'en: \""
+msgstr "Kunne ikke indlæse VCard med ID'et: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Kan ikke tilføje adressebog uden et navn."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "Checksum er ikke medsendt."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Fejl ved tilføjelse af adressebog."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "Informationen om dette VCard stemmer ikke. Genindlæs venligst siden: "
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Fejl ved aktivering af adressebog."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Noget gik grueligt galt. "
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "Ingen ID for kontakperson medsendt."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Kunne ikke indlæse foto for kontakperson."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Kunne ikke gemme midlertidig fil."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "Billedet under indlæsning er ikke gyldigt."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "Intet ID medsendt."
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Informationen om vCard er forkert. Genindlæs siden."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Fejl ved sletning af egenskab for kontaktperson."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "Kontaktperson ID mangler."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "Kontaktperson ID mangler."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "Der blev ikke medsendt en sti til fotoet."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Filen eksisterer ikke:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Kunne ikke indlæse billede."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Fejl ved indlæsning af kontaktpersonobjektet."
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Fejl ved indlæsning af PHOTO feltet."
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Kunne ikke gemme kontaktpersonen."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Kunne ikke ændre billedets størrelse"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Kunne ikke beskære billedet"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Kunne ikke oprette midlertidigt billede"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
+msgstr "Kunne ikke finde billedet: "
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "Element navnet er ikke medsendt."
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "Checksum er ikke medsendt."
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "Informationen om dette VCard stemmer ikke. Genindlæs venligst siden: "
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "Noget gik grueligt galt. "
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Fejl ved opdatering af egenskab for kontaktperson."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "Kan ikke opdatére adressebogen med et tomt navn."
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Fejl ved opdatering af adressebog"
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "Kunne ikke uploade kontaktepersoner til midlertidig opbevaring."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Der skete ingen fejl, filen blev succesfuldt uploadet"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Den uploadede fil er større end upload_max_filesize indstillingen i php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Den uploadede fil overstiger MAX_FILE_SIZE indstilingen, som specificeret i HTML formularen"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "Filen blev kun delvist uploadet."
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Ingen fil uploadet"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "Manglende midlertidig mappe."
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Kunne ikke gemme midlertidigt billede: "
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Kunne ikke indlæse midlertidigt billede"
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Ingen fil blev uploadet. Ukendt fejl."
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Kontaktpersoner"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Denne funktion er desværre ikke implementeret endnu"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "Ikke implementeret"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Kunne ikke finde en gyldig adresse."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Fejl"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Dette felt må ikke være tomt."
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "Kunne ikke serialisere elementerne."
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "'deleteProperty' kaldet uden typeargument. Indrapporter fejl på bugs.owncloud.org"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Rediger navn"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Der er ikke valgt nogen filer at uploade."
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "Dr."
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
+msgstr "Vælg type"
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "Drop en VCF fil for at importere kontaktpersoner."
-
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1494
+#: js/loader.js:49
+msgid "Result: "
+msgstr "Resultat:"
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr " importeret "
+
+#: js/loader.js:49
+msgid " failed."
+msgstr " fejl."
+
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Dette er ikke din adressebog."
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Kontaktperson kunne ikke findes."
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Adressebogen blev ikke fundet."
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Dette er ikke din adressebog."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Kontaktperson kunne ikke findes."
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Adresse"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefon"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "Email"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organisation"
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Arbejde"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Hjemme"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mobil"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "SMS"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Telefonsvarer"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Besked"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fax"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Video"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Personsøger"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Fødselsdag"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
-msgstr "{name}'s fødselsdag"
+msgstr "{name}s fødselsdag"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Kontaktperson"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Tilføj kontaktperson"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Importer"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Adressebøger"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Konfigurer adressebøger"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Luk"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Ny adressebog"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Importer fra VCF"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDav-link"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Download"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Rediger"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Slet"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Download kontaktperson"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Slet kontaktperson"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Drop foto for at uploade"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Slet nuværende foto"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Rediger nuværende foto"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Upload nyt foto"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Vælg foto fra ownCloud"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr "Formatter som valgfrit, fuldt navn, efternavn først eller efternavn først med komma"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Rediger navnedetaljer."
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organisation"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Slet"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
-msgstr "Øgenavn"
+msgstr "Kaldenavn"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
-msgstr "Indtast øgenavn"
+msgstr "Indtast kaldenavn"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Fødselsdag"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "dd-mm-åååå"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Grupper"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Opdel gruppenavne med kommaer"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Rediger grupper"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Foretrukken"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Indtast venligst en gyldig email-adresse."
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Indtast email-adresse"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "Send mail til adresse"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Slet email-adresse"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Indtast telefonnummer"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Slet telefonnummer"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Vis på kort"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Rediger adresse detaljer"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Tilføj noter her."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
-msgstr "Tilfæj element"
-
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Profilbillede"
+msgstr "Tilføj element"
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefon"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Note"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "Email"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Slet nuværende foto"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Rediger nuværende foto"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Adresse"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Upload nyt foto"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Note"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Vælg foto fra ownCloud"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Download kontaktperson"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Slet kontaktperson"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "Det midlertidige billede er ikke længere tilgængeligt."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Rediger adresse"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Type"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Postboks"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Udvidet"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Vej"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "By"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Region"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Postnummer"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "Land"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Rediger grupper"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Tilføj"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Adressebog"
@@ -672,7 +806,7 @@ msgstr "Fru"
#: templates/part.edit_name_dialog.php:32
msgid "Dr"
-msgstr "Dr"
+msgstr "Dr."
#: templates/part.edit_name_dialog.php:35
msgid "Given name"
@@ -722,35 +856,6 @@ msgstr "Jr."
msgid "Sn."
msgstr "Sn."
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Ny adressebog"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Rediger adressebog"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Vist navn"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Aktiv"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Gem"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Gem"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Fortryd"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "Importer fil med kontaktpersoner"
@@ -767,57 +872,86 @@ msgstr "Opret ny adressebog"
msgid "Name of new addressbook"
msgstr "Navn på ny adressebog"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importer"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "Importerer kontaktpersoner"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "Vælg hvilken adressebog, der skal importeres til:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "Vælg fra harddisk."
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "Du har ingen kontaktpersoner i din adressebog."
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Tilføj kontaktpeson."
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Konfigurer adressebøger"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr ""
-#: templates/settings.php:4
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr ""
+
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "CardDAV synkroniserings adresse"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "mere info"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "Primær adresse (Kontak m. fl.)"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Download"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Rediger"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Ny adressebog"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Gem"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Fortryd"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/da/core.po b/l10n/da/core.po
index 045cd429153..c2a6184506b 100644
--- a/l10n/da/core.po
+++ b/l10n/da/core.po
@@ -7,14 +7,15 @@
# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2011, 2012.
# Pascal d'Hermilly <pascal@dhermilly.dk>, 2011.
# Thomas Tanghus <>, 2012.
+# Thomas Tanghus <thomas@tanghus.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Danish (http://www.transifex.net/projects/p/owncloud/language/da/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -35,85 +36,85 @@ msgstr "Denne kategori eksisterer allerede: "
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Indstillinger"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Januar"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Februar"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Marts"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "April"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Maj"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Juni"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Juli"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "August"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "September"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Oktober"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "November"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "December"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Fortryd"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Nej"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Ja"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "OK"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Ingen kategorier valgt"
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Fejl"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Nulstil adgangskode til Owncloud"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "Nulstil ownCloud kodeord"
@@ -243,14 +244,10 @@ msgstr "Afslut opsætning"
msgid "web services under your control"
msgstr "Webtjenester under din kontrol"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Log ud"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Indstillinger"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Mistet dit kodeord?"
diff --git a/l10n/da/files.po b/l10n/da/files.po
index d7990d5d942..3524d6c05af 100644
--- a/l10n/da/files.po
+++ b/l10n/da/files.po
@@ -6,47 +6,48 @@
# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2011, 2012.
# Pascal d'Hermilly <pascal@dhermilly.dk>, 2011.
# Thomas Tanghus <>, 2012.
+# Thomas Tanghus <thomas@tanghus.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Danish (http://www.transifex.net/projects/p/owncloud/language/da/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Der er ingen fejl, filen blev uploadet med success"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Den uploadede fil overskrider upload_max_filesize direktivet i php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Den uploadede file blev kun delvist uploadet"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Ingen fil blev uploadet"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Mangler en midlertidig mappe"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Fejl ved skrivning til disk."
@@ -54,57 +55,85 @@ msgstr "Fejl ved skrivning til disk."
msgid "Files"
msgstr "Filer"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Slet"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "findes allerede"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "erstat"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "fortryd"
-#: js/files.js:170
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "erstattet"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "med"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "fortryd"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "Slettet"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "genererer ZIP-fil, det kan tage lidt tid."
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Kunne ikke uploade din fil, da det enten er en mappe eller er tom"
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "Fejl ved upload"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "Afventer"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "Upload afbrudt."
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "Ugyldigt navn, '/' er ikke tilladt."
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Størrelse"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Ændret"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "mappe"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "mapper"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "fil"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "filer"
#: templates/admin.php:5
msgid "File handling"
@@ -174,10 +203,6 @@ msgstr "Del"
msgid "Download"
msgstr "Download"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Slet"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Upload for stor"
diff --git a/l10n/da/files_encryption.po b/l10n/da/files_encryption.po
new file mode 100644
index 00000000000..94a4333bd18
--- /dev/null
+++ b/l10n/da/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/da/files_external.po b/l10n/da/files_external.po
new file mode 100644
index 00000000000..d602714dbac
--- /dev/null
+++ b/l10n/da/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/da/files_sharing.po b/l10n/da/files_sharing.po
new file mode 100644
index 00000000000..7ed986fd029
--- /dev/null
+++ b/l10n/da/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/da/files_versions.po b/l10n/da/files_versions.po
new file mode 100644
index 00000000000..2aae166d774
--- /dev/null
+++ b/l10n/da/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/da/lib.po b/l10n/da/lib.po
new file mode 100644
index 00000000000..8d65f903fef
--- /dev/null
+++ b/l10n/da/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/da/settings.po b/l10n/da/settings.po
index deab93e2ed0..52548033030 100644
--- a/l10n/da/settings.po
+++ b/l10n/da/settings.po
@@ -7,82 +7,116 @@
# <mikkelbjerglarsen@gmail.com>, 2011.
# Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>, 2011, 2012.
# Pascal d'Hermilly <pascal@dhermilly.dk>, 2011.
+# <sr@ybnet.dk>, 2012.
# Thomas Tanghus <>, 2012.
+# Thomas Tanghus <thomas@tanghus.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Danish (http://www.transifex.net/projects/p/owncloud/language/da/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-20 14:35+0000\n"
+"Last-Translator: ressel <sr@ybnet.dk>\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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "Kunne ikke indlæse listen fra App Store"
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "Email adresse gemt"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Ugyldig email adresse"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID ændret"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Ugyldig forespørgsel"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Adgangsfejl"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Sprog ændret"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "Fejl"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "Deaktiver"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Aktiver"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Gemmer..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "Dansk"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "Sikkerhedsadvarsel"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "Cron"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr "cron.php er tilmeldt en webcron tjeneste"
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Log"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Mere"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Tilføj din App"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Vælg en App"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Se applikationens side på apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-licenseret"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "af"
@@ -174,34 +208,38 @@ msgstr "Hjælp med oversættelsen"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "benyt denne adresse til at forbinde til din ownCloud i din filbrowser"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Navn"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Kodeord"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Grupper"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Ny"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Standard kvote"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Andet"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Kvote"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Slet"
diff --git a/l10n/da/tasks.po b/l10n/da/tasks.po
new file mode 100644
index 00000000000..5c9900db1eb
--- /dev/null
+++ b/l10n/da/tasks.po
@@ -0,0 +1,107 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <sr@ybnet.dk>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-20 14:43+0000\n"
+"Last-Translator: ressel <sr@ybnet.dk>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr "Ugyldig dato/tid"
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr "Opgaver"
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr "Ingen kategori"
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr "Uspecificeret"
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr "1=højeste"
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr "5=mellem"
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr "9=laveste"
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr "Tom beskrivelse"
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr "Tilføj opgave"
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr "Indlæser opgaver..."
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr "vigtigt"
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr "Mere"
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr "Mindre"
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr "Slet"
diff --git a/l10n/da/user_ldap.po b/l10n/da/user_ldap.po
new file mode 100644
index 00000000000..5103ecf98cc
--- /dev/null
+++ b/l10n/da/user_ldap.po
@@ -0,0 +1,165 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <sr@ybnet.dk>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-20 14:58+0000\n"
+"Last-Translator: ressel <sr@ybnet.dk>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr "Host"
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr "Base DN"
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr "Kodeord"
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr "Port"
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr "Brug TLS"
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr "Anbefales ikke, brug kun for at teste."
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr "Hjælp"
diff --git a/l10n/da/user_migrate.po b/l10n/da/user_migrate.po
new file mode 100644
index 00000000000..3c03fa73962
--- /dev/null
+++ b/l10n/da/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/da/user_openid.po b/l10n/da/user_openid.po
new file mode 100644
index 00000000000..a9fdd710c8a
--- /dev/null
+++ b/l10n/da/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/de/admin_dependencies_chk.po b/l10n/de/admin_dependencies_chk.po
new file mode 100644
index 00000000000..f36baa4f390
--- /dev/null
+++ b/l10n/de/admin_dependencies_chk.po
@@ -0,0 +1,77 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Maurice Preuß <>, 2012.
+# <niko@nik-o-mat.de>, 2012.
+# <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: 2012-08-24 02:01+0200\n"
+"PO-Revision-Date: 2012-08-23 10:05+0000\n"
+"Last-Translator: traductor <transifex.3.mensaje@spamgourmet.com>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr "Das Modul php-json wird von vielen Anwendungen zur internen Kommunikation benötigt."
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr "Das Modul php-curl wird benötigt, um den Titel der Seite für die Lesezeichen hinzuzufügen."
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr "Das Modul php-gd wird für die Erzeugung der Vorschaubilder benötigt."
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr "Das Modul php-ldap wird für die Verbindung mit dem LDAP-Server benötigt."
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr "Das Modul php-zip wird für den gleichzeitigen Download mehrerer Dateien benötigt."
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr "Das Modul php_mb_multibyte wird benötigt, um das Encoding richtig zu handhaben."
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr "Das Modul php-ctype wird benötigt, um Daten zu prüfen."
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr "Das Modul php-xml wird benötigt, um Dateien über WebDAV zu teilen."
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr "Die Richtlinie allow_url_fopen in Ihrer php.ini sollte auf 1 gesetzt werden, um die Wissensbasis vom OCS-Server abrufen."
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr "Das Modul php-pdo wird benötigt, um Daten in der Datenbank zu speichern."
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr "Status der Abhängigkeiten"
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr "Benutzt von:"
diff --git a/l10n/de/admin_migrate.po b/l10n/de/admin_migrate.po
new file mode 100644
index 00000000000..d4a6b315a18
--- /dev/null
+++ b/l10n/de/admin_migrate.po
@@ -0,0 +1,34 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <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-08-15 02:02+0200\n"
+"PO-Revision-Date: 2012-08-14 13:34+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr "Diese ownCloud-Instanz exportieren."
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr "Dies wird eine komprimierte Datei erzeugen, welche die Daten dieser ownCloud-Instanz enthält.\n Bitte wählen Sie den Exporttyp:"
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr "Exportieren"
diff --git a/l10n/de/bookmarks.po b/l10n/de/bookmarks.po
new file mode 100644
index 00000000000..8383c62a138
--- /dev/null
+++ b/l10n/de/bookmarks.po
@@ -0,0 +1,63 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Phi Lieb <>, 2012.
+# <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: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 09:38+0000\n"
+"Last-Translator: traductor <transifex.3.mensaje@spamgourmet.com>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr "Lesezeichen"
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr "unbenannt"
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr "Ziehen Sie dies zu Ihren Browser-Lesezeichen und klicken Sie darauf, wenn Sie eine Website schnell den Lesezeichen hinzufügen wollen."
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr "Später lesen"
+
+#: templates/list.php:13
+msgid "Address"
+msgstr "Adresse"
+
+#: templates/list.php:14
+msgid "Title"
+msgstr "Titel"
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr "Tags"
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr "Lesezeichen speichern"
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr "Sie haben keine Lesezeichen"
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr "Bookmarklet <br />"
diff --git a/l10n/de/calendar.po b/l10n/de/calendar.po
index 2e5af84f5a5..5ef155057e9 100644
--- a/l10n/de/calendar.po
+++ b/l10n/de/calendar.po
@@ -4,331 +4,438 @@
#
# Translators:
# <admin@s-goecker.de>, 2011, 2012.
+# <driz@i2pmail.org>, 2012.
# <georg.stefan.germany@googlemail.com>, 2011, 2012.
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
# Jan-Christoph Borchardt <jan@unhosted.org>, 2011.
# Marcel Kühlhorn <susefan93@gmx.de>, 2012.
+# <niko@nik-o-mat.de>, 2012.
# <peddn@web.de>, 2012.
+# Phi Lieb <>, 2012.
+# <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: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: German (http://www.transifex.net/projects/p/owncloud/language/de/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 09:20+0000\n"
+"Last-Translator: traductor <transifex.3.mensaje@spamgourmet.com>\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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr "Noch sind nicht alle Kalender zwischengespeichert."
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr "Es sieht so aus, als wäre alles vollständig zwischengespeichert."
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
-msgstr "Keine Kalender gefunden"
+msgstr "Keine Kalender gefunden."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
-msgstr "Keine Termine gefunden"
+msgstr "Keine Termine gefunden."
#: ajax/event/edit.form.php:20
msgid "Wrong calendar"
msgstr "Falscher Kalender"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr "Entweder enthielt die Datei keine Termine oder alle Termine waren bereits im Kalender gespeichert."
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr "Der Termin wurde im neuen Kalender gespeichert."
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr "Import fehlgeschlagen"
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr "Der Termin wurde im Kalender gespeichert."
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Neue Zeitzone:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Zeitzone geändert"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Fehlerhafte Anfrage"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:37 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Kalender"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd d.M"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd d.M"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM yyyy"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-msgstr "ddd d MMMM[ yyyy]{ -[ddd d] MMMM yyyy}"
+msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, d. MMM yyyy"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Geburtstag"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Geschäftlich"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Anruf"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Kunden"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Lieferant"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Urlaub"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Ideen"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Reise"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Jubiläum"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Treffen"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Anderes"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Persönlich"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projekte"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Fragen"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Arbeit"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr "von"
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "unbenannt"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Neuer Kalender"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "einmalig"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "täglich"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "wöchentlich"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "jeden Wochentag"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "jede zweite Woche"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "monatlich"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "jährlich"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "niemals"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "nach Terminen"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "nach Datum"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "an einem Monatstag"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "an einem Wochentag"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Montag"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Dienstag"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Mittwoch"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Donnerstag"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Freitag"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Samstag"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Sonntag"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "Woche des Monats vom Termin"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "erste"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "zweite"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "dritte"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "vierte"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "fünfte"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "letzte"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Januar"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Februar"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "März"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "April"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Mai"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Juni"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Juli"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "August"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "September"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Oktober"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "November"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Dezember"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "nach Tag des Termins"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "nach Tag des Jahres"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "nach Wochennummer"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "nach Tag und Monat"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Datum"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Kal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr "So"
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr "Mo"
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr "Di"
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr "Mi"
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr "Do"
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr "Fr"
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr "Sa"
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr "Jan."
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr "Feb."
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr "Mär."
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr "Apr."
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr "Mai"
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr "Jun."
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr "Jul."
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr "Aug."
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr "Sep."
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr "Okt."
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr "Nov."
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr "Dez."
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Ganztags"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Neuer Kalender"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "fehlende Felder"
@@ -362,64 +469,56 @@ msgstr "Der Termin hört auf, bevor er angefangen hat."
msgid "There was a database fail"
msgstr "Datenbankfehler"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Woche"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Monat"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Liste"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Heute"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Kalender"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Fehler beim Einlesen der Datei."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Aktive Kalender wählen"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr "Einstellungen"
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Deine Kalender"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDAV-Link"
#: templates/part.choosecalendar.php:31
msgid "Shared calendars"
-msgstr "geteilte Kalender"
+msgstr "Geteilte Kalender"
#: templates/part.choosecalendar.php:48
msgid "No shared calendars"
msgstr "Keine geteilten Kalender"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Kalender teilen"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Herunterladen"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Bearbeiten"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Löschen"
@@ -505,23 +604,23 @@ msgstr "Kategorien mit Kommas trennen"
msgid "Edit categories"
msgstr "Kategorien ändern"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Ganztägiges Ereignis"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "von"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "bis"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Erweiterte Optionen"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Ort"
@@ -529,7 +628,7 @@ msgstr "Ort"
msgid "Location of the Event"
msgstr "Ort"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Beschreibung"
@@ -537,84 +636,86 @@ msgstr "Beschreibung"
msgid "Description of the Event"
msgstr "Beschreibung"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "wiederholen"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Erweitert"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Wochentage auswählen"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Tage auswählen"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "und den Tag des Jahres vom Termin"
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "und den Tag des Monats vom Termin"
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Monate auswählen"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Wochen auswählen"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "und den Tag des Jahres vom Termin"
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Intervall"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Ende"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "Termine"
-#: templates/part.import.php:1
-msgid "Import a calendar file"
-msgstr "Kalenderdatei Importieren"
-
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Bitte wählen Sie den Kalender."
-
-#: templates/part.import.php:10
+#: templates/part.import.php:14
msgid "create a new calendar"
msgstr "Neuen Kalender anlegen"
-#: templates/part.import.php:15
+#: templates/part.import.php:17
+msgid "Import a calendar file"
+msgstr "Kalenderdatei importieren"
+
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr "Wählen Sie bitte einen Kalender."
+
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Kalendername"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importieren"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr "Wählen Sie einen verfügbaren Namen."
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Kalender wird importiert."
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr "Ein Kalender mit diesem Namen existiert bereits. Sollten Sie fortfahren, werden die beiden Kalender zusammengeführt."
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Kalender erfolgreich importiert"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Importieren"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Dialog schließen"
@@ -630,53 +731,81 @@ msgstr "Termin öffnen"
msgid "No categories selected"
msgstr "Keine Kategorie ausgewählt"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Kategorie auswählen"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "von"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "um"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr "Allgemein"
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Zeitzone"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "immer die Zeitzone überprüfen"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr "Zeitzone automatisch aktualisieren"
-#: templates/settings.php:33
-msgid "Timeformat"
+#: templates/settings.php:52
+msgid "Time format"
msgstr "Zeitformat"
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
-msgstr "24h"
+msgstr "24 Stunden"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
-msgstr "12h"
+msgstr "12 Stunden"
+
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr "Erster Wochentag"
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr "Zwischenspeicher"
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr "Lösche den Zwischenspeicher für wiederholende Veranstaltungen"
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr "URLs"
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr "CalDAV-Kalender gleicht Adressen ab"
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr "weitere Informationen"
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr "Primäre Adresse (Kontakt u.a.)"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "erster Wochentag"
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Kalender CalDAV Synchronisationsadresse:"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr "Nur lesende(r) iCalender-Link(s)"
#: templates/share.dropdown.php:20
msgid "Users"
-msgstr "Nutzer"
+msgstr "Benutzer"
#: templates/share.dropdown.php:21
msgid "select users"
-msgstr "Nutzer auswählen"
+msgstr "Benutzer auswählen"
#: templates/share.dropdown.php:36 templates/share.dropdown.php:62
msgid "Editable"
diff --git a/l10n/de/contacts.po b/l10n/de/contacts.po
index 067ce64126e..e326e613c3b 100644
--- a/l10n/de/contacts.po
+++ b/l10n/de/contacts.po
@@ -4,652 +4,791 @@
#
# Translators:
# <admin@s-goecker.de>, 2012.
+# <driz@i2pmail.org>, 2012.
# <fh@cbix.de>, 2012.
# <florian.ruechel+owncloud@gmail.com>, 2012.
# <georg.stefan.germany@googlemail.com>, 2011.
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
# Jan-Christoph Borchardt <jan@unhosted.org>, 2011.
+# Marcel Kühlhorn <susefan93@gmx.de>, 2012.
# Melvin Gundlach <mail@melvin-gundlach.de>, 2012.
# Michael Krell <m4dmike.mni@gmail.com>, 2012.
# <mi.sc@gmx.net>, 2012.
# <nelsonfritsch@gmail.com>, 2012.
+# <niko@nik-o-mat.de>, 2012.
+# Phi Lieb <>, 2012.
# Susi <>, 2012.
+# <thomas.mueller@tmit.eu>, 2012.
# Thomas Müller <>, 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-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: German (http://www.transifex.net/projects/p/owncloud/language/de/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "(De-)Aktivierung des Adressbuches fehlgeschlagen"
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Erstellen des Kontakts fehlgeschlagen"
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Feld darf nicht leer sein."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Mindestens eines der Adressfelder muss ausgefüllt werden."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "ID ist nicht angegeben."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "Versuche, doppelte Eigenschaft hinzuzufügen: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Adressbuch kann nicht mir leeren Namen aktualisiert werden."
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Kontakt ändern fehlgeschlagen"
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Adressbuch aktualisieren fehlgeschlagen."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "Keine ID angegeben"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Fehler beim Setzen der Prüfsumme."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Keine Kategorien zum Löschen ausgewählt."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Keine Adressbücher gefunden."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Keine Kontakte gefunden."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Erstellen des Kontakts fehlgeschlagen."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "Kein Name für das Element angegeben."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr "Konnte folgenden Kontakt nicht verarbeiten:"
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Feld darf nicht leer sein."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Mindestens eines der Adressfelder muss ausgefüllt werden."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "Versuche doppelte Eigenschaft hinzuzufügen: "
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr "IM-Parameter fehlt."
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr "IM unbekannt:"
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Die Information der vCard ist fehlerhaft. Bitte aktualisieren Sie die Seite."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "Fehlende ID"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "Fehler beim Einlesen der VCard für die ID: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Bitte einen Namen für das Adressbuch angeben."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "Keine Prüfsumme angegeben."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Adressbuch hinzufügen fehlgeschlagen"
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "Die Informationen zur vCard sind fehlerhaft. Bitte Seite neu laden: "
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Adressbuchaktivierung fehlgeschlagen"
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Irgendwas ist hier so richtig schief gelaufen. "
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "Es wurde keine Kontakt-ID übermittelt."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
-msgstr "Fehler beim auslesen des Kontaktfotos."
+msgstr "Fehler beim Auslesen des Kontaktfotos."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Fehler beim Speichern der temporären Datei."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "Das Kontaktfoto ist fehlerhaft."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "ID ist nicht angegeben."
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Die Information der vCard ist fehlerhaft. Bitte aktualisiere die Seite."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Kontakteigenschaft löschen fehlgeschlagen"
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "Keine Kontakt-ID angegeben."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "Fehlende Kontakt-ID."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "Kein Foto-Pfad übermittelt."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Datei existiert nicht: "
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Fehler beim Laden des Bildes."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Fehler beim Abruf des Kontakt-Objektes."
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Fehler beim Abrufen der PHOTO-Eigenschaft."
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Fehler beim Speichern des Kontaktes."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Fehler bei der Größenänderung des Bildes"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Fehler beim Zuschneiden des Bildes"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Fehler beim Erstellen des temporären Bildes"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "Kein Name für das Element angegeben."
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "Keine Prüfsumme angegeben."
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "Die Informationen zur vCard sind fehlerhaft. Bitte Seite neu laden: "
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "Irgendwas ist hier so richtig schief gelaufen. "
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Kontakteigenschaft aktualisieren fehlgeschlagen"
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "Adressbuch kann nicht mir leeren Namen aktualisiert werden."
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Adressbuch aktualisieren fehlgeschlagen"
+msgstr "Fehler beim Suchen des Bildes: "
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
-msgstr "Ãœbertragen der Kontakte fehlgeschlagen"
+msgstr "Ãœbertragen der Kontakte fehlgeschlagen."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Alles bestens, Datei erfolgreich übertragen."
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
-msgstr "Datei größer als durch die upload_max_filesize Direktive in php.ini erlaubt"
+msgstr "Datei größer, als durch die upload_max_filesize Direktive in php.ini erlaubt"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
-msgstr "Datei größer als die MAX_FILE_SIZE Direktive erlaubt, die im HTML Formular spezifiziert ist"
+msgstr "Datei größer, als die MAX_FILE_SIZE Direktive erlaubt, die im HTML Formular spezifiziert ist"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "Datei konnte nur teilweise übertragen werden"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Keine Datei konnte übertragen werden."
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "Kein temporärer Ordner vorhanden"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Konnte das temporäre Bild nicht speichern:"
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Konnte das temporäre Bild nicht laden:"
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Keine Datei hochgeladen. Unbekannter Fehler"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Kontakte"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Diese Funktion steht leider noch nicht zur Verfügung"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "Nicht verfügbar"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Konnte keine gültige Adresse abrufen."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Fehler"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Dieses Feld darf nicht leer sein."
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "Konnte Elemente nicht serialisieren"
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "'deleteProperty' wurde ohne Argumente aufgerufen. Bitte melden Sie dies auf bugs.owncloud.org"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Name ändern"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Keine Datei(en) zum Hochladen ausgewählt."
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "Die Datei, die Sie hochladen möchten, überschreitet die maximale Größe für Datei-Uploads auf diesem Server."
-#: js/contacts.js:1119
-msgid "Select photo"
-msgstr ""
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr "Fehler beim Laden des Profilbildes."
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
+msgstr "Wähle Typ"
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "Zieh' eine VCF Datei hierher zum Kontaktimport"
-
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
-msgstr ""
-
-#: js/contacts.js:1476
-msgid "OK"
-msgstr ""
-
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
-msgstr ""
-
-#: js/contacts.js:1634
-msgid "Upload too large"
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Wrong file type"
-msgstr ""
-
-#: js/contacts.js:1644
+#: js/contacts.js:1578
msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
-msgstr ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr "Einige zum Löschen markiert Kontakte wurden noch nicht gelöscht. Bitte warten."
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr "Möchten Sie diese Adressbücher zusammenführen?"
#: js/loader.js:49
msgid "Result: "
-msgstr ""
+msgstr "Ergebnis: "
#: js/loader.js:49
msgid " imported, "
-msgstr ""
+msgstr " importiert, "
#: js/loader.js:49
msgid " failed."
-msgstr ""
+msgstr " fehlgeschlagen."
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Adressbuch nicht gefunden."
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
+msgstr "Der Anzeigename darf nicht leer sein."
+
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr "Adressbuch nicht gefunden:"
-#: lib/app.php:34
+#: lib/app.php:52
msgid "This is not your addressbook."
-msgstr "Dies ist nicht dein Adressbuch."
+msgstr "Dies ist nicht Ihr Adressbuch."
-#: lib/app.php:45
+#: lib/app.php:71
msgid "Contact could not be found."
msgstr "Kontakt konnte nicht gefunden werden."
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Adresse"
+#: lib/app.php:116
+msgid "Jabber"
+msgstr "Jabber"
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefon"
+#: lib/app.php:121
+msgid "AIM"
+msgstr "AIM"
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "Email"
+#: lib/app.php:126
+msgid "MSN"
+msgstr "MSN"
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organisation"
+#: lib/app.php:131
+msgid "Twitter"
+msgstr "Twitter"
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr "GoogleTalk"
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr "Facebook"
+
+#: lib/app.php:146
+msgid "XMPP"
+msgstr "XMPP"
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr "ICQ"
+
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr "Yahoo"
+
+#: lib/app.php:161
+msgid "Skype"
+msgstr "Skype"
+
+#: lib/app.php:166
+msgid "QQ"
+msgstr "QQ"
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr "GaduGadu"
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Arbeit"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Zuhause"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr "Andere"
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mobil"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Text"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Anruf"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Mitteilung"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fax"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Video"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Pager"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Geburtstag"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr "Geschäftlich"
+
+#: lib/app.php:254
+msgid "Call"
+msgstr "Anruf"
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr "Kunden"
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr "Lieferant"
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr "Feiertage"
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr "Ideen"
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr "Reise"
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr "Jubiläum"
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr "Besprechung"
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr "Persönlich"
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr "Projekte"
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr "Fragen"
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "Geburtstag von {name}"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Kontakt"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Kontakt hinzufügen"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Importieren"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr "Einstellungen"
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Adressbücher"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Adressbücher konfigurieren"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Schließen"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Neues Adressbuch"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr "Tastaturbefehle"
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Import von VCF Datei"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr "Navigation"
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDav Link"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr "Nächster Kontakt aus der Liste"
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Herunterladen"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr "Vorheriger Kontakt aus der Liste"
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Bearbeiten"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr "Ausklappen/Einklappen des Adressbuches"
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Löschen"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr "Nächstes Adressbuch"
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Kontakt herunterladen"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr "Vorheriges Adressbuch"
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Kontakt löschen"
+#: templates/index.php:54
+msgid "Actions"
+msgstr "Aktionen"
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr "Kontaktliste neu laden"
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr "Neuen Kontakt hinzufügen"
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr "Neues Adressbuch hinzufügen"
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr "Aktuellen Kontakt löschen"
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
-msgstr "Zieh' ein Foto hierher zum hochladen"
+msgstr "Ziehen Sie ein Foto zum Hochladen hierher"
+
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Derzeitiges Foto löschen"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Foto ändern"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Neues Foto hochladen"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Foto aus der ownCloud auswählen"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
-msgstr "Format benutzerdefiniert, Kurzname, Vollname, Rückwärts order Rückwärts mit Komma"
+msgstr "Format benutzerdefiniert, Kurzname, Vollname, Rückwärts oder Rückwärts mit Komma"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
-msgstr "Namen ändern"
+msgstr "Name ändern"
+
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organisation"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Löschen"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Spitzname"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
-msgstr "Spitznamen angeben"
+msgstr "Spitzname angeben"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Geburtstag"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr "Webseite"
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr "http://www.somesite.com"
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr "Webseite aufrufen"
-#: templates/part.contact.php:38
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
-msgstr "TT-MM-JJJJ"
+msgstr "dd.mm.yyyy"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Gruppen"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
-msgstr "Gruppen mit Komma trennt"
+msgstr "Gruppen mit Komma getrennt"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Gruppen editieren"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Bevorzugt"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Bitte eine gültige E-Mail-Adresse angeben."
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
-msgstr "E-Mail-Adresse angeben."
+msgstr "E-Mail-Adresse angeben"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "E-Mail an diese Adresse schreiben"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "E-Mail-Adresse löschen"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Telefonnummer angeben"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Telefonnummer löschen"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr "Instant Messenger"
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr "IM löschen"
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Auf Karte anzeigen"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Adressinformationen ändern"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Füge hier Notizen ein."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Feld hinzufügen"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Profil Bild"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefon"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Notiz"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "E-Mail"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Derzeitiges Foto löschen"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr "Instant Messaging"
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Foto ändern"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Adresse"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Neues Foto hochladen"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Notiz"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Foto aus ownCloud auswählen"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Kontakt herunterladen"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Kontakt löschen"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "Das temporäre Bild wurde aus dem Cache gelöscht."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Adresse ändern"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Typ"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Postfach"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr "Straßenanschrift"
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr "Straße und Nummer"
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Erweitert"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Straße"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr "Wohnungsnummer usw."
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Stadt"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Region"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr "Z.B. Staat oder Bezirk"
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Postleitzahl"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr "PLZ"
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "Land"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Kategorie ändern"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Hinzufügen"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Adressbuch"
@@ -680,7 +819,7 @@ msgstr "Frau"
#: templates/part.edit_name_dialog.php:32
msgid "Dr"
-msgstr "Dr"
+msgstr "Dr."
#: templates/part.edit_name_dialog.php:35
msgid "Given name"
@@ -700,7 +839,7 @@ msgstr "Höflichkeitssuffixe"
#: templates/part.edit_name_dialog.php:45
msgid "J.D."
-msgstr "Dr. Jur"
+msgstr "Dr. Jur."
#: templates/part.edit_name_dialog.php:46
msgid "M.D."
@@ -730,35 +869,6 @@ msgstr "Jr."
msgid "Sn."
msgstr "Senior"
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Neues Adressbuch"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Adressbuch editieren"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Anzeigename"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Aktiv"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Speichern"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Eintragen"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Abbrechen"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "Kontaktdatei importieren"
@@ -775,57 +885,86 @@ msgstr "Neues Adressbuch erstellen"
msgid "Name of new addressbook"
msgstr "Name des neuen Adressbuchs"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importieren"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "Kontakte werden importiert"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "Adressbuch, in das importiert werden soll"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "Von der Festplatte auswählen"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
-msgstr "Du hast keine Kontakte im Adressbuch."
+msgstr "Sie haben keine Kontakte im Adressbuch."
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Kontakt hinzufügen"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Adressbücher konfigurieren"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr "Wähle Adressbuch"
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr "Name eingeben"
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr "Beschreibung eingeben"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "CardDAV Sync-Adressen"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
-msgstr "mehr Info"
+msgstr "mehr Informationen"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
-msgstr "primäre Adresse (für Kontact o.ä. Programme)"
+msgstr "Primäre Adresse (für Kontakt o.ä.)"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr "CardDav-Link anzeigen"
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr "Schreibgeschützten VCF-Link anzeigen"
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr "Teilen"
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Herunterladen"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Bearbeiten"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Neues Adressbuch"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr "Name"
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr "Beschreibung"
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Speichern"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr "Mehr..."
diff --git a/l10n/de/core.po b/l10n/de/core.po
index 2d88b3ef59c..fc4db2d98b5 100644
--- a/l10n/de/core.po
+++ b/l10n/de/core.po
@@ -8,14 +8,19 @@
# <georg.stefan.germany@googlemail.com>, 2011.
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
# Marcel Kühlhorn <susefan93@gmx.de>, 2012.
+# <m.fresel@sysangels.com>, 2012.
+# <niko@nik-o-mat.de>, 2012.
+# Phi Lieb <>, 2012.
+# <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: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: German (http://www.transifex.net/projects/p/owncloud/language/de/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 20:44+0000\n"
+"Last-Translator: JamFX <niko@nik-o-mat.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"
"Content-Transfer-Encoding: 8bit\n"
@@ -36,91 +41,91 @@ msgstr "Kategorie existiert bereits:"
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:190 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Einstellungen"
-#: js/js.js:520
+#: js/js.js:575
msgid "January"
-msgstr ""
+msgstr "Januar"
-#: js/js.js:520
+#: js/js.js:575
msgid "February"
-msgstr ""
+msgstr "Februar"
-#: js/js.js:520
+#: js/js.js:575
msgid "March"
-msgstr ""
+msgstr "März"
-#: js/js.js:520
+#: js/js.js:575
msgid "April"
-msgstr ""
+msgstr "April"
-#: js/js.js:520
+#: js/js.js:575
msgid "May"
-msgstr ""
+msgstr "Mai"
-#: js/js.js:520
+#: js/js.js:575
msgid "June"
-msgstr ""
+msgstr "Juni"
-#: js/js.js:521
+#: js/js.js:576
msgid "July"
-msgstr ""
+msgstr "Juli"
-#: js/js.js:521
+#: js/js.js:576
msgid "August"
-msgstr ""
+msgstr "August"
-#: js/js.js:521
+#: js/js.js:576
msgid "September"
-msgstr ""
+msgstr "September"
-#: js/js.js:521
+#: js/js.js:576
msgid "October"
-msgstr ""
+msgstr "Oktober"
-#: js/js.js:521
+#: js/js.js:576
msgid "November"
-msgstr ""
+msgstr "November"
-#: js/js.js:521
+#: js/js.js:576
msgid "December"
-msgstr ""
+msgstr "Dezember"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Abbrechen"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Nein"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Ja"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "OK"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Keine Kategorien zum Löschen angegeben."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Fehler"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "ownCloud Passwort zurücksetzen"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
-msgstr "ownCloud Passwort zurücksetzen"
+msgstr "ownCloud-Passwort zurücksetzen"
#: lostpassword/templates/email.php:1
msgid "Use the following link to reset your password: {link}"
-msgstr "Nutze folgenden Link, um dein Passwort zurückzusetzen: {link}"
+msgstr "Nutzen Sie den nachfolgenden Link, um Ihr Passwort zurückzusetzen: {link}"
#: lostpassword/templates/lostpassword.php:3
msgid "You will receive a link to reset your password via Email."
@@ -137,7 +142,7 @@ msgstr "Login fehlgeschlagen!"
#: lostpassword/templates/lostpassword.php:11 templates/installation.php:25
#: templates/login.php:9
msgid "Username"
-msgstr "Nutzername"
+msgstr "Benutzername"
#: lostpassword/templates/lostpassword.php:15
msgid "Request reset"
@@ -165,7 +170,7 @@ msgstr "Persönlich"
#: strings.php:6
msgid "Users"
-msgstr "Nutzer"
+msgstr "Benutzer"
#: strings.php:7
msgid "Apps"
@@ -173,7 +178,7 @@ msgstr "Anwendungen"
#: strings.php:8
msgid "Admin"
-msgstr "Verwaltung"
+msgstr "Admin"
#: strings.php:9
msgid "Help"
@@ -181,15 +186,15 @@ msgstr "Hilfe"
#: templates/403.php:12
msgid "Access forbidden"
-msgstr "Zugang verboten"
+msgstr "Zugriff verboten"
#: templates/404.php:12
msgid "Cloud not found"
-msgstr "Cloud nicht verfügbar"
+msgstr "Cloud nicht gefunden"
#: templates/edit_categories_dialog.php:4
msgid "Edit categories"
-msgstr "Kategorien ändern"
+msgstr "Kategorien bearbeiten"
#: templates/edit_categories_dialog.php:14
msgid "Add"
@@ -197,7 +202,7 @@ msgstr "Hinzufügen"
#: templates/installation.php:23
msgid "Create an <strong>admin account</strong>"
-msgstr "<strong>Admin-Konto</strong> anlegen"
+msgstr "<strong>Administrator-Konto</strong> anlegen"
#: templates/installation.php:29 templates/login.php:13
msgid "Password"
@@ -222,15 +227,15 @@ msgstr "wird genutzt"
#: templates/installation.php:82
msgid "Database user"
-msgstr "Datenbanknutzer"
+msgstr "Datenbank-Benutzer"
#: templates/installation.php:86
msgid "Database password"
-msgstr "Datenbankpasswort"
+msgstr "Datenbank-Passwort"
#: templates/installation.php:90
msgid "Database name"
-msgstr "Datenbankname"
+msgstr "Datenbank-Name"
#: templates/installation.php:96
msgid "Database host"
@@ -242,16 +247,12 @@ msgstr "Installation abschließen"
#: templates/layout.guest.php:42
msgid "web services under your control"
-msgstr "web services under your control"
+msgstr "Web-Services unter Ihrer Kontrolle"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Abmelden"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Einstellungen"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Passwort vergessen?"
@@ -266,7 +267,7 @@ msgstr "Einloggen"
#: templates/logout.php:1
msgid "You are logged out."
-msgstr "Abgemeldet"
+msgstr "Sie wurden abgemeldet."
#: templates/part.pagenavi.php:3
msgid "prev"
diff --git a/l10n/de/files.po b/l10n/de/files.po
index b7f6cb08c36..b7f13aa7020 100644
--- a/l10n/de/files.po
+++ b/l10n/de/files.po
@@ -9,106 +9,137 @@
# Marcel Kühlhorn <susefan93@gmx.de>, 2012.
# Michael Krell <m4dmike.mni@gmail.com>, 2012.
# <nelsonfritsch@gmail.com>, 2012.
+# Phi Lieb <>, 2012.
+# <thomas.mueller@tmit.eu>, 2012.
# Thomas Müller <>, 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-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: German (http://www.transifex.net/projects/p/owncloud/language/de/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 09:11+0000\n"
+"Last-Translator: traductor <transifex.3.mensaje@spamgourmet.com>\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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Datei fehlerfrei hochgeladen."
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Die Größe der hochzuladenden Datei überschreitet die upload_max_filesize-Richtlinie in php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Die Datei wurde nur teilweise hochgeladen."
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Es wurde keine Datei hochgeladen."
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Temporärer Ordner fehlt."
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
-msgstr "Fehler beim Schreiben auf Festplatte"
+msgstr "Fehler beim Schreiben auf die Festplatte"
#: appinfo/app.php:6
msgid "Files"
-msgstr "Files"
+msgstr "Dateien"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Löschen"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "ist bereits vorhanden"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "ersetzen"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "abbrechen"
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "ersetzt"
-#: js/files.js:170
+#: js/filelist.js:195
+msgid "with"
+msgstr "mit"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "rückgängig machen"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "gelöscht"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "Erstelle ZIP-Datei. Dies kann eine Weile dauern."
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Ihre Datei kann nicht hochgeladen werden, da sie ein Verzeichnis ist oder 0 Bytes hat."
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "Fehler beim Hochladen"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "Ausstehend"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "Hochladen abgebrochen."
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "Ungültiger Name, \"/\" ist nicht erlaubt."
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Größe"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Bearbeitet"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "Ordner"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "Ordner"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "Datei"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "Dateien"
#: templates/admin.php:5
msgid "File handling"
@@ -116,7 +147,7 @@ msgstr "Dateibehandlung"
#: templates/admin.php:7
msgid "Maximum upload size"
-msgstr "Maximum upload size"
+msgstr "Maximale Upload-Größe"
#: templates/admin.php:7
msgid "max. possible: "
@@ -164,7 +195,7 @@ msgstr "Upload abbrechen"
#: templates/index.php:39
msgid "Nothing in here. Upload something!"
-msgstr "Alles leer. Lad’ was hoch!"
+msgstr "Alles leer. Lade etwas hoch!"
#: templates/index.php:47
msgid "Name"
@@ -178,10 +209,6 @@ msgstr "Teilen"
msgid "Download"
msgstr "Herunterladen"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Löschen"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Upload zu groß"
@@ -194,7 +221,7 @@ msgstr "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Serv
#: templates/index.php:71
msgid "Files are being scanned, please wait."
-msgstr "Daten werden gescannt, bitte warten."
+msgstr "Dateien werden gescannt, bitte warten."
#: templates/index.php:74
msgid "Current scanning"
diff --git a/l10n/de/files_encryption.po b/l10n/de/files_encryption.po
new file mode 100644
index 00000000000..38b9a4bc055
--- /dev/null
+++ b/l10n/de/files_encryption.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <driz@i2pmail.org>, 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 20:21+0000\n"
+"Last-Translator: driz <driz@i2pmail.org>\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"
+
+#: templates/settings.php:3
+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.php:5
+msgid "None"
+msgstr "Keine"
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr "Verschlüsselung aktivieren"
diff --git a/l10n/de/files_external.po b/l10n/de/files_external.po
new file mode 100644
index 00000000000..49a5cc39b05
--- /dev/null
+++ b/l10n/de/files_external.po
@@ -0,0 +1,84 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <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: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 10:07+0000\n"
+"Last-Translator: traductor <transifex.3.mensaje@spamgourmet.com>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr "Externer Speicher"
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr "Mount-Point"
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr "Backend"
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr "Konfiguration"
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr "Optionen"
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr "Zutreffend"
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr "Mount-Point hinzufügen"
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr "Nicht definiert"
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr "Alle Benutzer"
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr "Gruppen"
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr "Benutzer"
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr "Löschen"
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr "SSL-Root-Zertifikate"
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr "Root-Zertifikate importieren"
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr "Externen Speicher für Benutzer aktivieren"
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr "Erlaubt Benutzern ihre eigenen externen Speicher einzubinden"
diff --git a/l10n/de/files_sharing.po b/l10n/de/files_sharing.po
new file mode 100644
index 00000000000..8f7dfd3059e
--- /dev/null
+++ b/l10n/de/files_sharing.po
@@ -0,0 +1,37 @@
+# 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 <thomas.mueller@tmit.eu>, 2012.
+# <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-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr "Größe"
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr "Geändert"
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr "Alle löschen"
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr "Löschen"
diff --git a/l10n/de/files_versions.po b/l10n/de/files_versions.po
new file mode 100644
index 00000000000..789af981fbf
--- /dev/null
+++ b/l10n/de/files_versions.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <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-08-15 02:03+0200\n"
+"PO-Revision-Date: 2012-08-14 08:15+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr "Alle Versionen löschen"
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr "Datei-Versionierung aktivieren"
diff --git a/l10n/de/gallery.po b/l10n/de/gallery.po
index 50151756004..ec9656fa93f 100644
--- a/l10n/de/gallery.po
+++ b/l10n/de/gallery.po
@@ -6,75 +6,41 @@
# <admin@s-goecker.de>, 2012.
# Bartek <bart.p.pl@gmail.com>, 2012.
# Marcel Kühlhorn <susefan93@gmx.de>, 2012.
+# <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-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: German (http://www.transifex.net/projects/p/owncloud/language/de/)\n"
+"POT-Creation-Date: 2012-07-25 22:14+0200\n"
+"PO-Revision-Date: 2012-07-25 20:05+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
-#: appinfo/app.php:37
+#: appinfo/app.php:39
msgid "Pictures"
msgstr "Bilder"
-#: js/album_cover.js:44
+#: js/pictures.js:12
msgid "Share gallery"
-msgstr ""
+msgstr "Galerie teilen"
-#: js/album_cover.js:64 js/album_cover.js:100 js/album_cover.js:133
+#: js/pictures.js:32
msgid "Error: "
-msgstr ""
+msgstr "Fehler:"
-#: js/album_cover.js:64 js/album_cover.js:100
+#: js/pictures.js:32
msgid "Internal error"
-msgstr ""
-
-#: js/album_cover.js:114
-msgid "Scanning root"
-msgstr ""
-
-#: js/album_cover.js:115
-msgid "Default order"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Ascending"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Descending"
-msgstr ""
-
-#: js/album_cover.js:117 templates/index.php:19
-msgid "Settings"
-msgstr "Einstellungen"
-
-#: js/album_cover.js:122
-msgid "Scanning root cannot be empty"
-msgstr ""
-
-#: js/album_cover.js:122 js/album_cover.js:133
-msgid "Error"
-msgstr ""
-
-#: templates/index.php:16
-msgid "Rescan"
-msgstr "Erneut Scannen"
-
-#: templates/index.php:17
-msgid "Stop"
-msgstr "Stopp"
+msgstr "Interner Fehler"
-#: templates/index.php:18
-msgid "Share"
-msgstr "Teilen"
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr "Slideshow"
#: templates/view_album.php:19
msgid "Back"
diff --git a/l10n/de/lib.po b/l10n/de/lib.po
new file mode 100644
index 00000000000..0e1b5201dcc
--- /dev/null
+++ b/l10n/de/lib.po
@@ -0,0 +1,115 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Phi Lieb <>, 2012.
+# <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: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 09:41+0000\n"
+"Last-Translator: traductor <transifex.3.mensaje@spamgourmet.com>\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"
+
+#: app.php:288
+msgid "Help"
+msgstr "Hilfe"
+
+#: app.php:295
+msgid "Personal"
+msgstr "Persönlich"
+
+#: app.php:300
+msgid "Settings"
+msgstr "Einstellungen"
+
+#: app.php:305
+msgid "Users"
+msgstr "Benutzer"
+
+#: app.php:312
+msgid "Apps"
+msgstr "Apps"
+
+#: app.php:314
+msgid "Admin"
+msgstr "Administrator"
+
+#: files.php:276
+msgid "ZIP download is turned off."
+msgstr "Der ZIP-Download ist deaktiviert."
+
+#: files.php:277
+msgid "Files need to be downloaded one by one."
+msgstr "Die Dateien müssen einzeln heruntergeladen werden."
+
+#: files.php:277 files.php:302
+msgid "Back to Files"
+msgstr "Zurück zu \"Dateien\""
+
+#: files.php:301
+msgid "Selected files too large to generate zip file."
+msgstr "Die gewählten Dateien sind zu groß, um eine ZIP-Datei zu erstellen."
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr "Die Anwendung ist nicht aktiviert"
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr "Authentifizierungs-Fehler"
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr "Token abgelaufen. Bitte laden Sie die Seite neu."
+
+#: template.php:86
+msgid "seconds ago"
+msgstr "Vor wenigen Sekunden"
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr "Vor einer Minute"
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr "Vor %d Minuten"
+
+#: template.php:91
+msgid "today"
+msgstr "Heute"
+
+#: template.php:92
+msgid "yesterday"
+msgstr "Gestern"
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr "Vor %d Tagen"
+
+#: template.php:94
+msgid "last month"
+msgstr "Letzten Monat"
+
+#: template.php:95
+msgid "months ago"
+msgstr "Vor Monaten"
+
+#: template.php:96
+msgid "last year"
+msgstr "Letztes Jahr"
+
+#: template.php:97
+msgid "years ago"
+msgstr "Vor Jahren"
diff --git a/l10n/de/settings.po b/l10n/de/settings.po
index f80377f6563..29ec31c8a51 100644
--- a/l10n/de/settings.po
+++ b/l10n/de/settings.po
@@ -8,81 +8,117 @@
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
# Marcel Kühlhorn <susefan93@gmx.de>, 2012.
# <nelsonfritsch@gmail.com>, 2012.
+# <niko@nik-o-mat.de>, 2012.
+# Phi Lieb <>, 2012.
+# <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: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: German (http://www.transifex.net/projects/p/owncloud/language/de/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 09:08+0000\n"
+"Last-Translator: traductor <transifex.3.mensaje@spamgourmet.com>\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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "Liste der Apps im Store konnte nicht geladen werden."
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "E-Mail gespeichert"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Ungültige E-Mail"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID geändert"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Ungültige Anfrage"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Anmeldungsfehler"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Sprache geändert"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "Fehler"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "Deaktivieren"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Aktivieren"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Speichern..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "Deutsch"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "Sicherheitshinweis"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "Cron"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr "Führe eine Aufgabe pro geladener Seite aus."
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr "cron.php ist beim Webcron-Service registriert"
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr "Nutze System-Cron-Service"
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Log"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
-msgstr "mehr"
+msgstr "Mehr"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
-msgstr "Füge deine App hinzu"
+msgstr "Fügen Sie Ihre App hinzu"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Wähle eine Anwendung aus"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Weitere Anwendungen auf apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-lizenziert"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "von"
@@ -92,7 +128,7 @@ msgstr "Dokumentation"
#: templates/help.php:9
msgid "Managing Big Files"
-msgstr "große Dateien verwalten"
+msgstr "Große Dateien verwalten"
#: templates/help.php:10
msgid "Ask a question"
@@ -112,7 +148,7 @@ msgstr "Antwort"
#: templates/personal.php:8
msgid "You use"
-msgstr "Du nutzt"
+msgstr "Sie nutzen"
#: templates/personal.php:8
msgid "of the available"
@@ -120,7 +156,7 @@ msgstr "der verfügbaren"
#: templates/personal.php:12
msgid "Desktop and Mobile Syncing Clients"
-msgstr "Desktop und mobile synchronierungs Clients"
+msgstr "Desktop- und mobile Synchronierungs-Clients"
#: templates/personal.php:13
msgid "Download"
@@ -128,7 +164,7 @@ msgstr "Download"
#: templates/personal.php:19
msgid "Your password got changed"
-msgstr "Dein Passwort wurde geändert."
+msgstr "Ihr Passwort wurde geändert."
#: templates/personal.php:20
msgid "Unable to change your password"
@@ -156,11 +192,11 @@ msgstr "E-Mail"
#: templates/personal.php:31
msgid "Your email address"
-msgstr "Ihre E-Mail Adresse"
+msgstr "Ihre E-Mail-Adresse"
#: templates/personal.php:32
msgid "Fill in an email address to enable password recovery"
-msgstr "Trage eine E-Mail Adresse ein, um die Passwort-Wiederherstellung zu aktivieren."
+msgstr "Tragen Sie eine E-Mail-Adresse ein, um die Passwort-Wiederherstellung zu aktivieren."
#: templates/personal.php:38 templates/personal.php:39
msgid "Language"
@@ -168,40 +204,44 @@ msgstr "Sprache"
#: templates/personal.php:44
msgid "Help translate"
-msgstr "Hilf bei der Ãœbersetzung!"
+msgstr "Helfen Sie bei der Ãœbersetzung"
#: templates/personal.php:51
msgid "use this address to connect to your ownCloud in your file manager"
-msgstr "Benutze diese Adresse, um deine ownCloud mit deinem Dateimanager zu verbinden."
+msgstr "Benutzen Sie diese Adresse, um Ihr ownCloud mit deinem Dateimanager zu verbinden."
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Name"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Passwort"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Gruppen"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Anlegen"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
-msgstr "Standard Quota"
+msgstr "Standard-Quota"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
-msgstr "andere"
+msgstr "Andere"
+
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr "Gruppenadministrator"
-#: templates/users.php:47
+#: templates/users.php:82
msgid "Quota"
msgstr "Quota"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Löschen"
diff --git a/l10n/de/tasks.po b/l10n/de/tasks.po
new file mode 100644
index 00000000000..2ad6b64b487
--- /dev/null
+++ b/l10n/de/tasks.po
@@ -0,0 +1,109 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <niko@nik-o-mat.de>, 2012.
+# <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: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 10:09+0000\n"
+"Last-Translator: traductor <transifex.3.mensaje@spamgourmet.com>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr "Datum/Uhrzeit ungültig"
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr "Aufgaben"
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr "Keine Kategorie"
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr "Nicht angegeben"
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr "1 = am höchsten"
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr "5 = Durchschnitt"
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr "9 = am niedrigsten"
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr "Leere Zusammenfassung"
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr "Ungültige Prozent abgeschlossen"
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr "Falsche Priorität"
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr "Aufgabe hinzufügen"
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr "Nach Fälligkeit sortieren"
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr "Nach Kategorie sortieren "
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr "Nach Fertigstellung sortieren"
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr "Nach Ort sortieren"
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr "Nach Priorität sortieren"
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr "Nach Label sortieren"
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr "Lade Aufgaben ..."
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr "Wichtig"
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr "Mehr"
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr "Weniger"
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr "Löschen"
diff --git a/l10n/de/user_ldap.po b/l10n/de/user_ldap.po
new file mode 100644
index 00000000000..5cd6c4762f7
--- /dev/null
+++ b/l10n/de/user_ldap.po
@@ -0,0 +1,169 @@
+# 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 <thomas.mueller@tmit.eu>, 2012.
+# Maurice Preuß <>, 2012.
+# <niko@nik-o-mat.de>, 2012.
+# Phi Lieb <>, 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-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 10:14+0000\n"
+"Last-Translator: traductor <transifex.3.mensaje@spamgourmet.com>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr "Host"
+
+#: templates/settings.php:8
+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:9
+msgid "Base DN"
+msgstr "Basis-DN"
+
+#: templates/settings.php:9
+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:10
+msgid "User DN"
+msgstr "Benutzer-DN"
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr "Passwort"
+
+#: templates/settings.php:11
+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:12
+msgid "User Login Filter"
+msgstr "Benutzer-Login-Filter"
+
+#: templates/settings.php:12
+#, 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:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr "verwende %%uid Platzhalter, z. B. \"uid=%%uid\""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr "Benutzer-Filter-Liste"
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr "Definiert den Filter für die Anfrage der Benutzer."
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr "ohne Platzhalter, z.B.: \"objectClass=person\""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr "Gruppen-Filter"
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr "Definiert den Filter für die Anfrage der Gruppen."
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr "ohne Platzhalter, z.B.: \"objectClass=posixGroup\""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr "Port"
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr "Basis-Benutzerbaum"
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr "Basis-Gruppenbaum"
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr "Assoziation zwischen Gruppe und Benutzer"
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr "Nutze TLS"
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr "Verwenden Sie es nicht für SSL-Verbindungen, es wird fehlschlagen."
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr "LDAP-Server (Windows: Groß- und Kleinschreibung bleibt unbeachtet)"
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr "Schalte die SSL Zertifikatsprüfung aus."
+
+#: templates/settings.php:23
+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, wird das SSL-Zertifikat des LDAP-Server importiert werden."
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr "Nicht empfohlen, nur zu Testzwecken."
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr "Feld für den Anzeigenamen des Benutzers"
+
+#: templates/settings.php:24
+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:25
+msgid "Group Display Name Field"
+msgstr "Feld für den Anzeigenamen der Gruppe"
+
+#: templates/settings.php:25
+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:27
+msgid "in bytes"
+msgstr "in Bytes"
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr "in Sekunden. Eine Änderung leert den Cache."
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr "Hilfe"
diff --git a/l10n/de/user_migrate.po b/l10n/de/user_migrate.po
new file mode 100644
index 00000000000..aada5dbfb25
--- /dev/null
+++ b/l10n/de/user_migrate.po
@@ -0,0 +1,54 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <niko@nik-o-mat.de>, 2012.
+# <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: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 10:16+0000\n"
+"Last-Translator: traductor <transifex.3.mensaje@spamgourmet.com>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr "Export"
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr "Beim Export der Datei ist etwas schiefgegangen."
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr "Es ist ein Fehler aufgetreten."
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr "Ihr Konto exportieren"
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr "Eine komprimierte Datei wird erzeugt, die Ihr ownCloud-Konto enthält."
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr "Konto importieren"
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr "Zip-Archiv mit Benutzerdaten"
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr "Importieren"
diff --git a/l10n/de/user_openid.po b/l10n/de/user_openid.po
new file mode 100644
index 00000000000..9f5a660af87
--- /dev/null
+++ b/l10n/de/user_openid.po
@@ -0,0 +1,57 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <niko@nik-o-mat.de>, 2012.
+# <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: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 10:17+0000\n"
+"Last-Translator: traductor <transifex.3.mensaje@spamgourmet.com>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr "Dies ist ein OpenID-Server-Endpunkt. Weitere Informationen finden Sie unter:"
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr "Identität: <b>"
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr "Bereich: <b>"
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr "Benutzer: <b>"
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr "Anmelden"
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr "Fehler: <b> Kein Benutzer ausgewählt"
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr "Sie können sich auf anderen Seiten mit dieser Adresse authentifizieren."
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr "Authorisierter OpenID-Anbieter"
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr "Ihre Adresse bei Wordpress, Identi.ca, &hellip;"
diff --git a/l10n/el/admin_dependencies_chk.po b/l10n/el/admin_dependencies_chk.po
new file mode 100644
index 00000000000..68230095964
--- /dev/null
+++ b/l10n/el/admin_dependencies_chk.po
@@ -0,0 +1,74 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Efstathios Iosifidis <diamond_gr@freemail.gr>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-24 02:01+0200\n"
+"PO-Revision-Date: 2012-08-23 13:39+0000\n"
+"Last-Translator: Efstathios Iosifidis <diamond_gr@freemail.gr>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr "Κατάσταση εξαÏτήσεων"
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr "ΧÏησιμοποιήθηκε από:"
diff --git a/l10n/el/admin_migrate.po b/l10n/el/admin_migrate.po
new file mode 100644
index 00000000000..2d17139f4a0
--- /dev/null
+++ b/l10n/el/admin_migrate.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:
+# Efstathios Iosifidis <diamond_gr@freemail.gr>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-24 02:01+0200\n"
+"PO-Revision-Date: 2012-08-23 13:41+0000\n"
+"Last-Translator: Efstathios Iosifidis <diamond_gr@freemail.gr>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr "Αυτό θα δημιουÏγήσει ένα συμπιεσμένο αÏχείο που θα πεÏιέχει τα δεδομένα από αυτό το ownCloud.\n ΠαÏακαλώ επιλέξτε τον Ï„Ïπο εξαγωγής:"
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr "Εξαγωγή"
diff --git a/l10n/el/bookmarks.po b/l10n/el/bookmarks.po
new file mode 100644
index 00000000000..0030d2d3959
--- /dev/null
+++ b/l10n/el/bookmarks.po
@@ -0,0 +1,62 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Efstathios Iosifidis <diamond_gr@freemail.gr>, 2012.
+# Efstathios Iosifidis <iosifidis@opensuse.org>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-07-29 02:03+0200\n"
+"PO-Revision-Date: 2012-07-28 11:33+0000\n"
+"Last-Translator: Efstathios Iosifidis <diamond_gr@freemail.gr>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr "Σελιδοδείκτες"
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr "ανώνυμο"
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr "ΣÏÏετε αυτό στους σελιδοδείκτες του πεÏιηγητή σας και κάντε κλικ επάνω του, όταν θέλετε να Ï€Ïοσθέσετε σÏντομα μια ιστοσελίδα ως σελιδοδείκτη:"
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr "Ανάγνωση αÏγότεÏα"
+
+#: templates/list.php:13
+msgid "Address"
+msgstr "ΔιεÏθυνση"
+
+#: templates/list.php:14
+msgid "Title"
+msgstr "Τίτλος"
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr "Ετικέτες"
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr "Αποθήκευση σελιδοδείκτη"
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr "Δεν έχετε σελιδοδείκτες"
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr "ΕφαÏμογίδιο Σελιδοδεικτών <br />"
diff --git a/l10n/el/calendar.po b/l10n/el/calendar.po
index 6b6a6acedbb..b8bca272398 100644
--- a/l10n/el/calendar.po
+++ b/l10n/el/calendar.po
@@ -4,27 +4,37 @@
#
# Translators:
# <christosvas@in.gr>, 2011.
+# Dimitris M. <monopatis@gmail.com>, 2012.
+# Efstathios Iosifidis <iosifidis@opensuse.org>, 2012.
# Marios Bekatoros <>, 2012.
# Petros Kyladitis <petros.kyladitis@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Greek (http://www.transifex.net/projects/p/owncloud/language/el/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
-#: ajax/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr "Δεν έχει δημιουÏγηθεί λανθάνουσα μνήμη για όλα τα ημεÏολόγια"
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr "Όλα έχουν αποθηκευτεί στη cache"
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Δε βÏέθηκαν ημεÏολόγια."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Δε βÏέθηκαν γεγονότα."
@@ -32,300 +42,394 @@ msgstr "Δε βÏέθηκαν γεγονότα."
msgid "Wrong calendar"
msgstr "Λάθος ημεÏολόγιο"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr "Το αÏχείο που πεÏιέχει είτε κανένα γεγονός είτε όλα τα γεγονότα έχουν ήδη αποθηκευτεί στο ημεÏολόγιό σας."
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr "τα συμβάντα αποθηκεÏτηκαν σε ένα νέο ημεÏολόγιο"
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr "Η εισαγωγή απέτυχε"
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr "το συμβάν αποθηκεÏτηκε στο ημεÏολογιό σου"
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Îέα ζώνη ÏŽÏας:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Η ζώνη ÏŽÏας άλλαξε"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Μη έγκυÏο αίτημα"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "ΗμεÏολόγιο"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd M/d"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd M/d"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM yyyy"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, MMM d, yyyy"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Γενέθλια"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "ΕπιχείÏηση"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Κλήση"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Πελάτες"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
-msgstr "ΠαÏαδώσας"
+msgstr "ΠÏομηθευτής"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Διακοπές"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Ιδέες"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Ταξίδι"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "ΓιοÏτή"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Συνάντηση"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Άλλο"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "ΠÏοσωπικό"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "ΈÏγα"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "ΕÏωτήσεις"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "ΕÏγασία"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr "από"
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "ανώνυμο"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Îέα ΗμεÏολόγιο"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Μη επαναλαμβανόμενο"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "ΚαθημεÏινά"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Εβδομαδιαία"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Κάθε μέÏα"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "ΔÏο φοÏές την εβδομάδα"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Μηνιαία"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Ετήσια"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "ποτέ"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "κατά συχνότητα Ï€Ïόσβασης"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "κατά ημεÏομηνία"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "κατά ημέÏα"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "κατά εβδομάδα"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "ΔευτέÏα"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "ΤÏίτη"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "ΤετάÏτη"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Πέμπτη"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "ΠαÏασκευή"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Σάββατο"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "ΚυÏιακή"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "συμβάντα της εβδομάδας του μήνα"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "Ï€Ïώτο"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "δεÏτεÏο"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "Ï„Ïίτο"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "τέταÏτο"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "πέμπτο"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "τελευταίο"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "ΙανουάÏιος"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "ΦεβÏουάÏιος"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "ΜάÏτιος"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "ΑπÏίλιος"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Μάϊος"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "ΙοÏνιος"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "ΙοÏλιος"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "ΑÏγουστος"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "ΣεπτέμβÏιος"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "ΟκτώβÏιος"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "ÎοέμβÏιος"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "ΔεκέμβÏιος"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "κατά ημεÏομηνία συμβάντων"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "κατά ημέÏα(ες) του έτους"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "κατά εβδομάδα(ες)"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "κατά ημέÏα και μήνα"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "ΗμεÏομηνία"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "ΗμεÏ."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr "ΚυÏ."
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr "Δευ."
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr "ΤÏί."
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr "Τετ."
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr "Πέμ."
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr "ΠαÏ."
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr "Σάβ."
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr "Ιαν."
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr "Φεβ."
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr "ΜάÏ."
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr "ΑπÏ."
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr "ΜαÎ."
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr "ΙοÏν."
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr "ΙοÏλ."
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr "ΑÏγ."
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr "Σεπ."
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr "Οκτ."
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr "Îοέ."
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr "Δεκ."
+
#: templates/calendar.php:11
msgid "All day"
msgstr "ΟλοήμεÏο"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Îέα ΗμεÏολόγιο"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Πεδία που λείπουν"
@@ -359,40 +463,32 @@ msgstr "Το συμβάν ολοκληÏώνεται Ï€Ïιν από την έν
msgid "There was a database fail"
msgstr "ΥπήÏξε σφάλμα στη βάση δεδομένων"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Εβδομάδα"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Μήνας"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Λίστα"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "ΣήμεÏα"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "ΗμεÏολόγια"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "ΥπήÏξε μια αποτυχία, κατά την σάÏωση του αÏχείου."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Επιλέξτε τα ενεÏγά ημεÏολόγια"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Τα ημεÏολόγια σου"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "ΣÏνδεση CalDAV"
@@ -404,19 +500,19 @@ msgstr "ΚοινόχÏηστα ημεÏολόγια"
msgid "No shared calendars"
msgstr "Δεν υπάÏχουν κοινόχÏηστα ημεÏολόγια"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "ΔιαμοίÏασε ένα ημεÏολόγιο"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Λήψη"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "ΕπεξεÏγασία"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "ΔιαγÏαφή"
@@ -502,23 +598,23 @@ msgstr "ΔιαχώÏισε τις κατηγοÏίες με κόμμα"
msgid "Edit categories"
msgstr "ΕπεξεÏγασία κατηγοÏιών"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "ΟλοήμεÏο συμβάν"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Από"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Έως"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Επιλογές για Ï€ÏοχωÏημένους"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Τοποθεσία"
@@ -526,7 +622,7 @@ msgstr "Τοποθεσία"
msgid "Location of the Event"
msgstr "Τοποθεσία συμβάντος"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "ΠεÏιγÏαφή"
@@ -534,84 +630,86 @@ msgstr "ΠεÏιγÏαφή"
msgid "Description of the Event"
msgstr "ΠεÏιγÏαφή του συμβάντος"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Επαναλαμβανόμενο"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Για Ï€ÏοχωÏημένους"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Επιλογή ημεÏών εβδομάδας"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Επιλογή ημεÏών"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "και των ημεÏών του χÏόνου που υπάÏχουν συμβάντα."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "και των ημεÏών του μήνα που υπάÏχουν συμβάντα."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Επιλογή μηνών"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Επιλογή εβδομάδων"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "και των εβδομάδων του χÏόνου που υπάÏουν συμβάντα."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Διάστημα"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Τέλος"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "πεÏιστατικά"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "δημιουÏγία νέου ημεÏολογίου"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Εισαγωγή αÏχείου ημεÏολογίου"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "ΠαÏακαλώ επιλέξτε το ημεÏολόγιο"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "δημιουÏγία νέου ημεÏολογίου"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr "ΠαÏακαλώ επέλεξε ένα ημεÏολόγιο"
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Όνομα νέου ημεÏολογίου"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Εισαγωγή"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr "Επέλεξε ένα διαθέσιμο όνομα!"
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Εισαγωγή ημεÏολογίου"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr "Ένα ημεÏολόγιο με αυτό το όνομα υπάÏχει ήδη. Εάν θέλετε να συνεχίσετε, αυτά τα 2 ημεÏολόγια θα συγχωνευθοÏν."
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Το ημεÏολόγιο εισήχθει επιτυχώς"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Εισαγωγή"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Κλείσιμο Διαλόγου"
@@ -627,45 +725,73 @@ msgstr "Εμφάνισε ένα γεγονός"
msgid "No categories selected"
msgstr "Δεν επελέγησαν κατηγοÏίες"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Επιλέξτε κατηγοÏία"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "του"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "στο"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Ζώνη ÏŽÏας"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Έλεγχος πάντα για τις αλλαγές της ζώνης ÏŽÏας"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "ΜοÏφή ÏŽÏας"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24ω"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12ω"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "ΠÏώτη μέÏα της εβδομάδας"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr "Cache"
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr "ΕκκαθάÏιση λανθάνουσας μνήμης για επανάληψη γεγονότων"
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr "ΔιευθÏνσεις συγχÏÎ¿Î½Î¹ÏƒÎ¼Î¿Ï Î·Î¼ÎµÏολογίου CalDAV"
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr "πεÏισσότεÏες πλÏοφοÏίες"
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr "ΚÏÏια ΔιεÏθυνση(Επαφή και άλλα)"
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "ΔιεÏθυνση για το συγχÏÎ¿Î½Î¹ÏƒÎ¼Î¿Ï Ï„Î¿Ï… ημεÏολογίου CalDAV:"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr " iCalendar link(s) μόνο για ανάγνωση"
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/el/contacts.po b/l10n/el/contacts.po
index c5718b30c88..c7086a17c98 100644
--- a/l10n/el/contacts.po
+++ b/l10n/el/contacts.po
@@ -4,644 +4,780 @@
#
# Translators:
# <christosvas@in.gr>, 2011.
+# Dimitris M. <monopatis@gmail.com>, 2012.
# Efstathios Iosifidis <iosifidis@opensuse.org>, 2012.
# Marios Bekatoros <>, 2012.
+# Nisok Kosin <nikos.efthimiou@gmail.com>, 2012.
# Petros Kyladitis <petros.kyladitis@gmail.com>, 2011, 2012.
+# <vagelis@cyberdest.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Greek (http://www.transifex.net/projects/p/owncloud/language/el/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
-#: ajax/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Σφάλμα (απ)ενεÏγοποίησης βιβλίου διευθÏνσεων"
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Σφάλμα κατά την Ï€Ïοσθήκη επαφής."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "ΑδÏνατη Ï€Ïοσθήκη κενής ιδιότητας."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "ΠÏέπει να συμπληÏωθεί τουλάχιστον ένα από τα παιδία διεÏθυνσης."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "δεν οÏίστηκε id"
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "ΠÏοσπάθεια Ï€Ïοσθήκης διπλότυπης ιδιότητας:"
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Δε μποÏεί να γίνει αλλαγή βιβλίου διευθÏνσεων χωÏίς όνομα"
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Σφάλμα Ï€Ïοσθήκης ιδιότητας επαφής."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Σφάλμα ενημέÏωσης βιβλίου διευθÏνσεων."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
-msgstr "Δε δώθηκε ID"
+msgstr "Δε δόθηκε ID"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Λάθος κατά τον οÏισμό checksum "
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Δε επελέγησαν κατηγοÏίες για διαγÏαφή"
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Δε βÏέθηκε βιβλίο διευθÏνσεων"
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Δεν βÏέθηκαν επαφές"
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Σφάλμα κατά την Ï€Ïοσθήκη επαφής."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "δεν οÏίστηκε όνομα στοιχείου"
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr "Δε αναγνώστηκε η επαφή"
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "ΑδÏνατη Ï€Ïοσθήκη κενής ιδιότητας."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "ΠÏέπει να συμπληÏωθεί τουλάχιστον ένα από τα παιδία διεÏθυνσης."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "ΠÏοσπάθεια Ï€Ïοσθήκης διπλότυπης ιδιότητας:"
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr "Λείπει IM παÏάμετÏος."
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr "Άγνωστο IM:"
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Οι πληÏοφοÏίες σχετικά με vCard είναι εσφαλμένες. ΠαÏακαλώ επαναφοÏτώστε τη σελίδα."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "Λείπει ID"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "Σφάλμα κατά την ανάγνωση του VCard για το ID:\""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Δε μποÏεί να Ï€Ïοστεθεί βιβλίο διευθÏνσεων με κενό όνομα"
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "δε οÏίστηκε checksum "
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Σφάλμα Ï€Ïοσθήκης βιβλίου διευθÏνσεων."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "Οι πληÏοφοÏίες για τη vCard είναι λανθασμένες.ΠαÏακαλώ ξαναφοÏτώστε τη σελίδα: "
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Σφάλμα ενεÏγοποίησης βιβλίου διευθÏνσεων"
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Κάτι χάθηκε στο άγνωστο. "
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "Δε υπεβλήθει ID επαφής"
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Σφάλμα ανάγνωσης εικόνας επαφής"
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Σφάλμα αποθήκευσης Ï€ÏοσωÏÎ¹Î½Î¿Ï Î±Ïχείου"
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "Η φοÏτωμένη φωτογÏαφία δεν είναι έγκυÏη"
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "δεν οÏίστηκε id"
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Οι πληÏοφοÏίες σχετικά με vCard είναι εσφαλμένες. ΠαÏακαλώ επαναφοÏτώστε τη σελίδα."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Σφάλμα διαγÏαφής ιδιότητας επαφής."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "Λείπει ID επαφής"
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "Απουσιαζει ID επαφής"
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "Δε δόθηκε διαδÏομή εικόνας"
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Το αÏχείο δεν υπάÏχει:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Σφάλμα φόÏτωσης εικόνας"
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Σφάλμα κατά τη λήψη αντικειμένου επαφής"
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Σφάλμα κατά τη λήψη ιδιοτήτων ΦΩΤΟΓΡΑΦΙΑΣ."
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Σφάλμα κατά την αποθήκευση επαφής."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Σφάλμα κατά την αλλαγή μεγέθους εικόνας"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Σφάλμα κατά την πεÏικοπή εικόνας"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Σφάλμα κατά την δημιουÏγία Ï€ÏοσωÏινής εικόνας"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "δεν οÏίστηκε όνομα στοιχείου"
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "δε οÏίστηκε checksum "
+msgstr "Σφάλμα κατά την εÏÏεση της εικόνας: "
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "Οι πληÏοφοÏίες για τη vCard είναι λανθασμένες.ΠαÏακαλώ ξαναφοÏτώστε τη σελίδα:"
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "Κάτι χάθηκε στο άγνωστο"
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Σφάλμα ενημέÏωσης ιδιότητας επαφής."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "Δε μποÏεί να γίνει αλλαγή βιβλίου διευθÏνσεων χωÏίς όνομα"
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Σφάλμα ενημέÏωσης βιβλίου διευθÏνσεων."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "Σφάλμα κατά την αποθήκευση επαφών"
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Δεν υπάÏχει σφάλμα, το αÏχείο ανέβηκε με επιτυχία "
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Το μέγεθος του αÏχείου ξεπεÏνάει το upload_max_filesize του php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Το ανεβασμένο αÏχείο υπεÏβαίνει το MAX_FILE_SIZE που οÏίζεται στην HTML φόÏμα"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "Το αÏχείο ανέβηκε μεÏικώς"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Δεν ανέβηκε κάποιο αÏχείο"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "Λείπει ο Ï€ÏοσωÏινός φάκελος"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Δεν ήταν δυνατή η αποθήκευση της Ï€ÏοσωÏινής εικόνας: "
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Δεν ήταν δυνατή η φόÏτωση της Ï€ÏοσωÏινής εικόνας: "
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Δεν ανέβηκε κάποιο αÏχείο. Άγνωστο σφάλμα"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Επαφές"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "ΛυποÏμαστε, αυτή η λειτουÏγία δεν έχει υλοποιηθεί ακόμα"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "Δεν έχει υλοποιηθεί"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Αδυναμία λήψης έγκυÏης διεÏθυνσης"
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Σφάλμα"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Το πεδίο δεν Ï€Ïέπει να είναι άδειο."
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "ΑδÏνατο να μπουν σε σειÏά τα στοιχεία"
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "το 'deleteProperty' καλέστηκε χωÏίς without type argument. ΠαÏακαλώ αναφέÏατε στο bugs.owncloud.org"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Αλλαγή ονόματος"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Δεν επιλέχτηκαν αÏχεία για μεταφόÏτωση"
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "Το αÏχείο που Ï€Ïοσπαθείτε να ανεβάσετε υπεÏβαίνει το μέγιστο μέγεθος για τις Ï€Ïοσθήκες αÏχείων σε αυτόν τον server."
-#: js/contacts.js:1119
-msgid "Select photo"
-msgstr ""
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr "Σφάλμα στην φόÏτωση εικόνας Ï€Ïοφίλ."
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
+msgstr "Επιλογή Ï„Ïπου"
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "Εισάγεται ένα VCF αÏχείο για εισαγωγή επαφών"
-
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
-msgstr ""
-
-#: js/contacts.js:1476
-msgid "OK"
-msgstr ""
-
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
-msgstr ""
-
-#: js/contacts.js:1634
-msgid "Upload too large"
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Wrong file type"
-msgstr ""
-
-#: js/contacts.js:1644
+#: js/contacts.js:1578
msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
-msgstr ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr "Κάποιες επαφές σημειώθηκαν Ï€Ïος διαγÏαφή,δεν έχουν διαγÏαφεί ακόμα. ΠαÏακαλώ πεÏιμένετε μέχÏι να διαγÏαφοÏν."
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr "Επιθυμείτε να συγχωνεÏσετε αυτά τα δÏο βιβλία διευθÏνσεων?"
#: js/loader.js:49
msgid "Result: "
-msgstr ""
+msgstr "Αποτέλεσμα: "
#: js/loader.js:49
msgid " imported, "
-msgstr ""
+msgstr " εισάγεται,"
#: js/loader.js:49
msgid " failed."
-msgstr ""
+msgstr " απέτυχε."
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Δε βÏέθηκε βιβλίο διευθÏνσεων"
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
+msgstr "Το όνομα Ï€Ïοβολής δεν μποÏεί να είναι κενό. "
-#: lib/app.php:34
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr "Το βιβλίο διευθÏνσεων δεν βÏέθηκε:"
+
+#: lib/app.php:52
msgid "This is not your addressbook."
msgstr "Αυτό δεν είναι το βιβλίο διευθÏνσεων σας."
-#: lib/app.php:45
+#: lib/app.php:71
msgid "Contact could not be found."
msgstr "Η επαφή δεν μπόÏεσε να βÏεθεί."
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "ΔιεÏθυνση"
+#: lib/app.php:116
+msgid "Jabber"
+msgstr "Jabber"
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Τηλέφωνο"
+#: lib/app.php:121
+msgid "AIM"
+msgstr "AIM"
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "Email"
+#: lib/app.php:126
+msgid "MSN"
+msgstr "MSN"
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "ΟÏγανισμός"
+#: lib/app.php:131
+msgid "Twitter"
+msgstr "Twitter"
+
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr "GoogleTalk"
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr "Facebook"
+
+#: lib/app.php:146
+msgid "XMPP"
+msgstr "XMPP"
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr "ICQ"
+
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr "Yahoo"
+
+#: lib/app.php:161
+msgid "Skype"
+msgstr "Skype"
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:166
+msgid "QQ"
+msgstr "QQ"
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr "GaduGadu"
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "ΕÏγασία"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Σπίτι"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr "Άλλο"
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Κινητό"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Κείμενο"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Ομιλία"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
-msgstr "Μήνυμα "
+msgstr "Μήνυμα"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Φαξ"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Βίντεο"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Βομβητής"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Διαδίκτυο"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Γενέθλια"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr "ΕπιχείÏηση"
+
+#: lib/app.php:254
+msgid "Call"
+msgstr "Κάλεσε"
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr "Πελάτες"
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr "ΠÏομηθευτής"
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr "Διακοπές"
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr "Ιδέες"
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr "Ταξίδι"
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr "Ιωβηλαίο"
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr "Συνάντηση"
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr "ΠÏοσωπικό"
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr "ΈÏγα"
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr "ΕÏωτήσεις"
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "{name} έχει Γενέθλια"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Επαφή"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "ΠÏοσθήκη επαφής"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Εισαγωγή"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr "Ρυθμίσεις"
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Βιβλία διευθÏνσεων"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Ρυθμίστε το βιβλίο διευθÏνσεων "
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Κλείσιμο "
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Îέο βιβλίο διευθÏνσεων"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr "ΣυντομεÏσεις πλητÏολογίου"
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Εισαγωγή από VCF αÏχείο"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr "Πλοήγηση"
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "ΣÏνδεσμος CardDav"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr "Επόμενη επαφή στη λίστα"
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Λήψη"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr "ΠÏοηγοÏμενη επαφή στη λίστα"
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "ΕπεξεÏγασία"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr "Ανάπτυξη/σÏμπτυξη Ï„Ïέχοντος βιβλίου διευθÏνσεων"
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "ΔιαγÏαφή"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr "Επόμενο βιβλίο διευθÏνσεων"
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Λήψη επαφής"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr "ΠÏοηγοÏμενο βιβλίο διευθÏνσεων"
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "ΔιαγÏαφή επαφής"
+#: templates/index.php:54
+msgid "Actions"
+msgstr "ΕνέÏγειες"
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr "Ανανέωσε τη λίστα επαφών"
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr "ΠÏοσθήκη νέας επαφής"
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr "ΠÏοσθήκη νέου βιβλίου επαφών"
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr "ΔιαγÏαφή Ï„Ïέχουσας επαφής"
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Ρίξε μια φωτογÏαφία για ανέβασμα"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "ΔιαγÏαφή Ï„Ïέχουσας φωτογÏαφίας"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "ΕπεξεÏγασία Ï„Ïέχουσας φωτογÏαφίας"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Ανέβασε νέα φωτογÏαφία"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Επέλεξε φωτογÏαφία από το ownCloud"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr "Format custom, Όνομα, Επώνυμο, ΑντίστÏοφο ή ΑντίστÏοφο με κόμμα"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Αλλάξτε τις λεπτομέÏειες ονόματος"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "ΟÏγανισμός"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "ΔιαγÏαφή"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "ΠαÏατσοÏκλι"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
-msgstr "Εισάγεται παÏατσοÏκλι"
+msgstr "Εισάγετε παÏατσοÏκλι"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Γενέθλια"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr "Ιστότοπος"
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr "http://www.somesite.com"
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr "Πήγαινε στον ιστότοπο"
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "ΗΗ-ΜΜ-ΕΕΕΕ"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Ομάδες"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "ΔιαχώÏισε τις ομάδες με κόμμα "
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "ΕπεξεÏγασία ομάδων"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "ΠÏοτιμώμενο"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "ΠαÏακαλώ εισήγαγε μια έγκυÏη διεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Εισήγαγε διεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "Αποστολή σε διεÏθυνση"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "ΔιαγÏαφή διεÏθυνση email"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Εισήγαγε αÏιθμό τηλεφώνου"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "ΔιέγÏαψε αÏιθμό τηλεφώνου"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr "Instant Messenger"
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr "ΔιαγÏαφή IM"
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "ΠÏοβολή στο χάÏτη"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "ΕπεξεÏγασία λεπτομεÏειών διεÏθυνσης"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "ΠÏόσθεσε τις σημειώσεις εδώ"
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "ΠÏοσθήκη πεδίου"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "ΦωτογÏαφία Ï€Ïοφίλ"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Τηλέφωνο"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Σημείωση"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "Email"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "ΔιαγÏαφή Ï„Ïέχουσας φωτογÏαφίας"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr "Άμεσα μυνήματα"
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "ΕπεξεÏγασία Ï„Ïέχουσας φωτογÏαφίας"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "ΔιεÏθυνση"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Ανέβασε νέα φωτογÏαφία"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Σημείωση"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Επέλεξε φωτογÏαφία από το ownCloud"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Λήψη επαφής"
-#: templates/part.cropphoto.php:64
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "ΔιαγÏαφή επαφής"
+
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "Η Ï€ÏοσωÏινή εικόνα αφαιÏέθηκε από την κÏυφή μνήμη."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "ΕπεξεÏγασία διεÏθυνσης"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "ΤÏπος"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Ταχ. ΘυÏίδα"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr "ΔιεÏθυνση οδοÏ"
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr "Οδός και αÏιθμός"
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Εκτεταμένη"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Οδός"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr "ΑÏιθμός διαμεÏίσματος"
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Πόλη"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "ΠεÏιοχή"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr "Π.χ. Πολιτεία ή επαÏχεία"
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Τ.Κ."
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr "ΤαχυδÏομικός Κωδικός"
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "ΧώÏα"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "ΕπεξεÏγασία κατηγοÏίας"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "ΠÏοσθήκη"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Βιβλίο διευθÏνσεων"
@@ -722,35 +858,6 @@ msgstr "Jr."
msgid "Sn."
msgstr "Sn."
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Îέο βιβλίο διευθÏνσεων"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "ΕπεξεÏγασία βιβλίου διευθÏνσεων"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "ΠÏοβαλόμενο όνομα"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "ΕνεÏγό"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Αποθήκευση"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "ΚαταχώÏηση"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "ΑκÏÏωση"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "Εισαγωγή αÏχείου επαφών"
@@ -767,57 +874,86 @@ msgstr "ΔημιουÏγία νέου βιβλίου διευθÏνσεων"
msgid "Name of new addressbook"
msgstr "Όνομα νέου βιβλίου διευθÏνσεων"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Εισαγωγή"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "Εισαγωγή επαφών"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "Επέλεξε σε ποιο βιβλίο διευθÏνσεων για εισαγωγή:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "Επιλογή από HD"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "Δεν έχεις επαφές στο βιβλίο διευθÏνσεων"
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "ΠÏοσθήκη επαφής"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "ΡÏθμισε το βιβλίο διευθÏνσεων"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr "Επέλεξε βιβλίο διευθÏνσεων"
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr "Εισαγωγή ονόματος"
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr "Εισαγωγή πεÏιγÏαφής"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "συγχÏονισμός διευθÏνσεων μέσω CardDAV "
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "πεÏισσότεÏες πληÏοφοÏίες"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "ΚÏÏια διεÏθυνση"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr "Εμφάνιση συνδέσμου CardDav"
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr "Εμφάνιση συνδέσμου VCF μόνο για ανάγνωση"
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr "ΜοιÏάσου"
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Λήψη"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "ΕπεξεÏγασία"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Îέο βιβλίο διευθÏνσεων"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr "Όνομα"
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr "ΠεÏιγÏαφή"
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Αποθήκευση"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "ΑκÏÏωση"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr "ΠεÏισσότεÏα..."
diff --git a/l10n/el/core.po b/l10n/el/core.po
index c383ae1a885..5f3262deb67 100644
--- a/l10n/el/core.po
+++ b/l10n/el/core.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Dimitris M. <monopatis@gmail.com>, 2012.
# Marios Bekatoros <>, 2012.
# <petros.kyladitis@gmail.com>, 2011.
# Petros Kyladitis <petros.kyladitis@gmail.com>, 2011, 2012.
@@ -10,10 +11,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Greek (http://www.transifex.net/projects/p/owncloud/language/el/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -34,85 +35,85 @@ msgstr "Αυτή η κατηγοÏία υπάÏχει ήδη"
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Ρυθμίσεις"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "ΙανουάÏιος"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "ΦεβÏουάÏιος"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "ΜάÏτιος"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "ΑπÏίλιος"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Μάϊος"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "ΙοÏνιος"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "ΙοÏλιος"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "ΑÏγουστος"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "ΣεπτέμβÏιος"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "ΟκτώβÏιος"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "ÎοέμβÏιος"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "ΔεκέμβÏιος"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "ΑκÏÏωση"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Όχι"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Îαι"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Οκ"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Δεν επιλέχτηκαν κατηγοÏίες για διαγÏαφή"
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Σφάλμα"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Επανέκδοση ÎºÏ‰Î´Î¹ÎºÎ¿Ï Î³Î¹Î± το Owncloud"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "ΕπαναφοÏά ÎºÏ‰Î´Î¹ÎºÎ¿Ï ownCloud"
@@ -242,14 +243,10 @@ msgstr "ΟλοκλήÏωση εγκατάστασης"
msgid "web services under your control"
msgstr "ΥπηÏεσίες web υπό τον έλεγχό σας"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "ΑποσÏνδεση"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Ρυθμίσεις"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Ξεχάσατε τον κωδικό σας;"
diff --git a/l10n/el/files.po b/l10n/el/files.po
index 87cbcd3e9b1..de2b3f80a1d 100644
--- a/l10n/el/files.po
+++ b/l10n/el/files.po
@@ -3,49 +3,50 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Dimitris M. <monopatis@gmail.com>, 2012.
# Marios Bekatoros <>, 2012.
# Petros Kyladitis <petros.kyladitis@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Greek (http://www.transifex.net/projects/p/owncloud/language/el/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
-#: ajax/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Δεν υπάÏχει λάθος, το αÏχείο μεταφοÏτώθηκε επιτυχώς"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Το αÏχείο που μεταφοÏτώθηκε υπεÏβαίνει την οδηγία μέγιστου επιτÏÎµÏ€Ï„Î¿Ï Î¼ÎµÎ³Î­Î¸Î¿Ï…Ï‚ \"upload_max_filesize\" του php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Το αÏχείο μεταφοÏώθηκε μόνο εν μέÏει"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Το αÏχείο δεν μεταφοÏτώθηκε"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Λείπει ένας Ï€ÏοσωÏινός φάκελος"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Η εγγÏαφή στο δίσκο απέτυχε"
@@ -53,57 +54,85 @@ msgstr "Η εγγÏαφή στο δίσκο απέτυχε"
msgid "Files"
msgstr "ΑÏχεία"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "ΔιαγÏαφή"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "υπάÏχει ήδη"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "αντικατέστησε"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "ακÏÏωση"
-#: js/files.js:170
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "αντικαταστάθηκε"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "με"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "αναίÏεση"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "διαγÏάφηκε"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "παÏαγωγή αÏχείου ZIP, ίσως διαÏκέσει αÏκετά."
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Αδυναμία στην μεταφόÏτωση του αÏχείου σας Î±Ï†Î¿Ï ÎµÎ¯Î½Î±Î¹ φάκελος ή έχει 0 bytes"
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "Σφάλμα ΜεταφόÏτωσης"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "Εν αναμονή"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "Η μεταφόÏτωση ακυÏώθηκε."
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "Μη έγκυÏο όνομα, το '/' δεν επιτÏέπεται."
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Μέγεθος"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "ΤÏοποποιήθηκε"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "φάκελος"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "φάκελοι"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "αÏχείο"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "αÏχεία"
#: templates/admin.php:5
msgid "File handling"
@@ -173,10 +202,6 @@ msgstr "ΔιαμοίÏασε"
msgid "Download"
msgstr "Λήψη"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "ΔιαγÏαφή"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Î Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î¿ το αÏχείο Ï€Ïος μεταφόÏτωση"
diff --git a/l10n/el/files_encryption.po b/l10n/el/files_encryption.po
new file mode 100644
index 00000000000..6d54cf8abcf
--- /dev/null
+++ b/l10n/el/files_encryption.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Efstathios Iosifidis <diamond_gr@freemail.gr>, 2012.
+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"
+"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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr "ΚÏυπτογÏάφηση"
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr "ΕξαίÏεση των παÏακάτω Ï„Ïπων αÏχείων από την κÏυπτογÏάφηση"
+
+#: templates/settings.php:5
+msgid "None"
+msgstr "Καμία"
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr "ΕνεÏγοποίηση ΚÏυπτογÏάφησης"
diff --git a/l10n/el/files_external.po b/l10n/el/files_external.po
new file mode 100644
index 00000000000..d33fba1ab44
--- /dev/null
+++ b/l10n/el/files_external.po
@@ -0,0 +1,83 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 08:59+0000\n"
+"Last-Translator: Nisok Kosin <nikos.efthimiou@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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr "ΕξωτεÏική αποθήκευση"
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr "Ρυθμίσεις"
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr "Επιλογές"
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr "Όλοι οι χÏήστες"
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr "Ομάδες"
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr "ΧÏήστες"
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr "ΔιαγÏαφή"
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/el/files_sharing.po b/l10n/el/files_sharing.po
new file mode 100644
index 00000000000..32f11e9f2c8
--- /dev/null
+++ b/l10n/el/files_sharing.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 08:57+0000\n"
+"Last-Translator: Nisok Kosin <nikos.efthimiou@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr "Μέγεθος"
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr "ΤÏοποποιήθηκε"
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr "ΔιαγÏαφή όλων"
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr "ΔιαγÏαφή"
diff --git a/l10n/el/files_versions.po b/l10n/el/files_versions.po
new file mode 100644
index 00000000000..134edc89db3
--- /dev/null
+++ b/l10n/el/files_versions.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 18:26+0000\n"
+"Last-Translator: Nisok Kosin <nikos.efthimiou@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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr "Λήξη όλων των εκδόσεων"
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr "ΕνεÏγοποίηση παÏακολοÏθησης εκδόσεων αÏχείων"
diff --git a/l10n/el/gallery.po b/l10n/el/gallery.po
index 71bb2bf4bcc..57be7acc264 100644
--- a/l10n/el/gallery.po
+++ b/l10n/el/gallery.po
@@ -3,6 +3,7 @@
# 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.
# Efstathios Iosifidis <iosifidis@opensuse.org>, 2012.
# Marios Bekatoros <>, 2012.
@@ -10,71 +11,35 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Greek (http://www.transifex.net/projects/p/owncloud/language/el/)\n"
+"POT-Creation-Date: 2012-07-27 02:02+0200\n"
+"PO-Revision-Date: 2012-07-26 08:11+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"
"Content-Transfer-Encoding: 8bit\n"
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: appinfo/app.php:37
+#: appinfo/app.php:39
msgid "Pictures"
msgstr "Εικόνες"
-#: js/album_cover.js:44
+#: js/pictures.js:12
msgid "Share gallery"
-msgstr ""
+msgstr "Κοινοποίηση συλλογής"
-#: js/album_cover.js:64 js/album_cover.js:100 js/album_cover.js:133
+#: js/pictures.js:32
msgid "Error: "
-msgstr ""
+msgstr "Σφάλμα: "
-#: js/album_cover.js:64 js/album_cover.js:100
+#: js/pictures.js:32
msgid "Internal error"
-msgstr ""
-
-#: js/album_cover.js:114
-msgid "Scanning root"
-msgstr ""
-
-#: js/album_cover.js:115
-msgid "Default order"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Ascending"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Descending"
-msgstr ""
-
-#: js/album_cover.js:117 templates/index.php:19
-msgid "Settings"
-msgstr "Ρυθμίσεις"
-
-#: js/album_cover.js:122
-msgid "Scanning root cannot be empty"
-msgstr ""
-
-#: js/album_cover.js:122 js/album_cover.js:133
-msgid "Error"
-msgstr ""
-
-#: templates/index.php:16
-msgid "Rescan"
-msgstr "ΕπανασάÏωση"
-
-#: templates/index.php:17
-msgid "Stop"
-msgstr "Διακοπή"
+msgstr "ΕσωτεÏικό σφάλμα"
-#: templates/index.php:18
-msgid "Share"
-msgstr "Κοινοποίηση"
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr "ΠÏοβολή Διαφανειών"
#: templates/view_album.php:19
msgid "Back"
diff --git a/l10n/el/lib.po b/l10n/el/lib.po
new file mode 100644
index 00000000000..da331c0cb80
--- /dev/null
+++ b/l10n/el/lib.po
@@ -0,0 +1,113 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Efstathios Iosifidis <iosifidis@opensuse.org>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-07-29 02:04+0200\n"
+"PO-Revision-Date: 2012-07-28 11:45+0000\n"
+"Last-Translator: Efstathios Iosifidis <diamond_gr@freemail.gr>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr "Βοήθεια"
+
+#: app.php:294
+msgid "Personal"
+msgstr "ΠÏοσωπικά"
+
+#: app.php:299
+msgid "Settings"
+msgstr "Ρυθμίσεις"
+
+#: app.php:304
+msgid "Users"
+msgstr "ΧÏήστες"
+
+#: app.php:311
+msgid "Apps"
+msgstr "ΕφαÏμογές"
+
+#: app.php:313
+msgid "Admin"
+msgstr "ΔιαχειÏιστής"
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr "Η λήψη ZIP απενεÏγοποιήθηκε."
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr "Τα αÏχεία Ï€Ïέπει να ληφθοÏν ένα-ένα."
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr "Πίσω στα ΑÏχεία"
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr "Τα επιλεγμένα αÏχεία είναι μεγάλα ώστε να δημιουÏγηθεί αÏχείο zip."
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr "Δεν ενεÏγοποιήθηκε η εφαÏμογή"
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr "Σφάλμα πιστοποίησης"
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr "Το αναγνωÏιστικό έληξε. ΠαÏακαλώ επανα-φοÏτώστε την σελίδα."
+
+#: template.php:86
+msgid "seconds ago"
+msgstr "δευτεÏόλεπτα Ï€Ïιν"
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr "1 λεπτό Ï€Ïιν"
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr "%d λεπτά Ï€Ïιν"
+
+#: template.php:91
+msgid "today"
+msgstr "σήμεÏα"
+
+#: template.php:92
+msgid "yesterday"
+msgstr "χθές"
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr "%d ημέÏες Ï€Ïιν"
+
+#: template.php:94
+msgid "last month"
+msgstr "τον Ï€ÏοηγοÏμενο μήνα"
+
+#: template.php:95
+msgid "months ago"
+msgstr "μήνες Ï€Ïιν"
+
+#: template.php:96
+msgid "last year"
+msgstr "τον Ï€ÏοηγοÏμενο χÏόνο"
+
+#: template.php:97
+msgid "years ago"
+msgstr "χÏόνια Ï€Ïιν"
diff --git a/l10n/el/settings.po b/l10n/el/settings.po
index 50279c5c14d..6d7243e05b9 100644
--- a/l10n/el/settings.po
+++ b/l10n/el/settings.po
@@ -3,86 +3,120 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Dimitris M. <monopatis@gmail.com>, 2012.
# Efstathios Iosifidis <iosifidis@opensuse.org>, 2012.
# <icewind1991@gmail.com>, 2012.
# Marios Bekatoros <>, 2012.
+# Nisok Kosin <nikos.efthimiou@gmail.com>, 2012.
# <petros.kyladitis@gmail.com>, 2011.
# Petros Kyladitis <petros.kyladitis@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Greek (http://www.transifex.net/projects/p/owncloud/language/el/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 08:43+0000\n"
+"Last-Translator: Nisok Kosin <nikos.efthimiou@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "Σφάλμα στην φόÏτωση της λίστας από το App Store"
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "Το Email αποθηκεÏτηκε "
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Μη έγκυÏο email"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "Το OpenID άλλαξε"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Μη έγκυÏο αίτημα"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Σφάλμα πιστοποίησης"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Η γλώσσα άλλαξε"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "Σφάλμα"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "ΑπενεÏγοποίηση"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "ΕνεÏγοποίηση"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Αποθήκευση..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "__όνομα_γλώσσας__"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "ΠÏοειδοποίηση Ασφαλείας"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "Cron"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr "Εκτέλεση μίας εÏγασίας με κάθε σελίδα που φοÏτώνεται"
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr "Το cron.php έχει καταχωÏηθεί σε μια webcron υπηÏεσία"
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr "ΧÏήση της υπηÏεσίας cron του συστήματος"
+
+#: templates/admin.php:39
msgid "Log"
msgstr "ΑÏχείο καταγÏαφής"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "ΠεÏισσότεÏο"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "ΠÏόσθεσε τη δικιά σου εφαÏμογή "
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Επιλέξτε μια εφαÏμογή"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Η σελίδα εφαÏμογών στο apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-με άδεια"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "από"
@@ -174,34 +208,38 @@ msgstr "Βοηθήστε στην μετάφÏαση"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "χÏησιμοποιήστε αυτή τη διεÏθυνση για να συνδεθείτε στο ownCloud σας από το διαχειÏιστή αÏχείων σας"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Όνομα"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Κωδικός"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Ομάδες"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "ΔημιουÏγία"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "ΠÏοεπιλεγμένο ÏŒÏιο"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Άλλα"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr "ΔιαχειÏηστής ομάδας"
+
+#: templates/users.php:82
msgid "Quota"
msgstr "ΣÏνολο χώÏου"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "ΔιαγÏαφή"
diff --git a/l10n/el/tasks.po b/l10n/el/tasks.po
new file mode 100644
index 00000000000..3e9b7600327
--- /dev/null
+++ b/l10n/el/tasks.po
@@ -0,0 +1,107 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 08:53+0000\n"
+"Last-Translator: Nisok Kosin <nikos.efthimiou@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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr "Μην έγκυÏη ημεÏομηνία / ÏŽÏα"
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr "ΕÏγασίες"
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr "ΧωÏίς κατηγοÏία"
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr "Μη οÏισμένο"
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr "1=υψηλότεÏο"
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr "5=μέτÏιο"
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr "9=χαμηλότεÏο"
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr "Άδεια πεÏίληψη"
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr "Μη έγκυÏο ποσοστό ολοκλήÏωσης"
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr "Μη έγκυÏη Ï€ÏοτεÏαιότητα "
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr "ΠÏοσθήκη εÏγασίας"
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr "ΦόÏτωση εÏγασιών..."
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr "Σημαντικό "
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr "ΠεÏισσότεÏα"
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr "ΛιγότεÏα"
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr "ΔιαγÏαφή"
diff --git a/l10n/el/user_ldap.po b/l10n/el/user_ldap.po
new file mode 100644
index 00000000000..cfea140f221
--- /dev/null
+++ b/l10n/el/user_ldap.po
@@ -0,0 +1,165 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Efstathios Iosifidis <diamond_gr@freemail.gr>, 2012.
+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:38+0000\n"
+"Last-Translator: Efstathios Iosifidis <diamond_gr@freemail.gr>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr "Συνθηματικό"
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr "ΘÏÏα"
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr "σε bytes"
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr "Βοήθεια"
diff --git a/l10n/el/user_migrate.po b/l10n/el/user_migrate.po
new file mode 100644
index 00000000000..51b56b84a26
--- /dev/null
+++ b/l10n/el/user_migrate.po
@@ -0,0 +1,52 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Efstathios Iosifidis <diamond_gr@freemail.gr>, 2012.
+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:37+0000\n"
+"Last-Translator: Efstathios Iosifidis <diamond_gr@freemail.gr>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr "Εξαγωγή"
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr "ΠαÏουσιάστηκε σφάλμα"
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr "Εξαγωγή του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï Ï‡Ïήστη σας"
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr "Αυτό θα δημιουÏγήσει ένα συμπιεσμένο αÏχείο που θα πεÏιέχει τον λογαÏιασμό σας ownCloud."
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr "Εισαγωγή λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï Ï‡Ïήστη"
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr "Εισαγωγή"
diff --git a/l10n/el/user_openid.po b/l10n/el/user_openid.po
new file mode 100644
index 00000000000..8d833ab11d2
--- /dev/null
+++ b/l10n/el/user_openid.po
@@ -0,0 +1,55 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 08:57+0000\n"
+"Last-Translator: Nisok Kosin <nikos.efthimiou@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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr "Ταυτότητα: <b>"
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr "ΧÏήστης: <b>"
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr "ΣÏνδεση"
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr "Σφάλμα: <b> Δεν έχει επιλεχθεί κάποιος χÏήστης"
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr "Εξουσιοδοτημένος παÏοχέας OpenID"
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr "Η διευθυνσή σας σε Wordpress, Identi.ca, &hellip;"
diff --git a/l10n/eo/admin_dependencies_chk.po b/l10n/eo/admin_dependencies_chk.po
new file mode 100644
index 00000000000..5fb88e68aed
--- /dev/null
+++ b/l10n/eo/admin_dependencies_chk.po
@@ -0,0 +1,74 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-16 02:04+0200\n"
+"PO-Revision-Date: 2012-08-15 20:59+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"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr "La modulo php-json necesas por komuniko inter la multaj aplikaĵoj"
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr "La modulo php-curl necesas por venigi la paÄotitolon dum aldono de legosigno"
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr "La modulo php-gd necesas por krei bildetojn."
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr "La modulo php-ldap necesas por konekti al via LDAP-servilo."
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr "La modulo php-zip necesas por elÅuti plurajn dosierojn per unu fojo."
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr "La modulo php-mb_multibyte necesas por Äuste administri la kodprezenton."
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr "La modulo php-ctype necesas por validkontroli datumojn."
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr "La modulo php-xml necesas por kunhavigi dosierojn per WebDAV."
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr "La ordono allow_url_fopen de via php.ini devus valori 1 por ricevi scibazon el OCS-serviloj"
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr "La modulo php-pdo necesas por konservi datumojn de ownCloud en datumbazo."
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr "Stato de dependoj"
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr "Uzata de:"
diff --git a/l10n/eo/admin_migrate.po b/l10n/eo/admin_migrate.po
new file mode 100644
index 00000000000..61384915c2a
--- /dev/null
+++ b/l10n/eo/admin_migrate.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:
+# 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-08-16 02:04+0200\n"
+"PO-Revision-Date: 2012-08-15 20:32+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"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr "Malenporti ĉi tiun aperon de ownCloud"
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr "Ĉi tio kreos densigitan dosieron, kiu enhavos la datumojn de ĉi tiu apero de ownCloud.\nBonvolu elekti la tipon de malenportado:"
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr "Malenporti"
diff --git a/l10n/eo/bookmarks.po b/l10n/eo/bookmarks.po
new file mode 100644
index 00000000000..926278cd289
--- /dev/null
+++ b/l10n/eo/bookmarks.po
@@ -0,0 +1,61 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-04 02:02+0200\n"
+"PO-Revision-Date: 2012-08-03 22:44+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"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr "Legosignoj"
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr "nenomita"
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr "Åœovu tion ĉi al la legosignoj de via TTT-legilo kaj klaku Äin, se vi volas rapide legosignigi TTT-paÄon:"
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr "Legi poste"
+
+#: templates/list.php:13
+msgid "Address"
+msgstr "Adreso"
+
+#: templates/list.php:14
+msgid "Title"
+msgstr "Titolo"
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr "Etikedoj"
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr "Konservi legosignon"
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr "Vi havas neniun legosignon"
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/eo/calendar.po b/l10n/eo/calendar.po
index d01d9bb11ba..4fc02e02b0c 100644
--- a/l10n/eo/calendar.po
+++ b/l10n/eo/calendar.po
@@ -3,26 +3,35 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# 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-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Esperanto (http://www.transifex.net/projects/p/owncloud/language/eo/)\n"
+"POT-Creation-Date: 2012-08-19 02:02+0200\n"
+"PO-Revision-Date: 2012-08-18 14:17+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"
"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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr "Ne ĉiuj kalendaroj estas tute kaÅmemorigitaj"
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr "Ĉio Åajnas tute kaÅmemorigita"
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Neniu kalendaro troviÄis."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Neniu okazaĵo troviÄis."
@@ -30,300 +39,394 @@ msgstr "Neniu okazaĵo troviÄis."
msgid "Wrong calendar"
msgstr "MalÄusta kalendaro"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr "Aŭ la dosiero enhavas neniun okazaĵon aŭ ĉiuj okazaĵoj jam estas konservitaj en via kalendaro."
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr "okazaĵoj estas konservitaj en la nova kalendaro"
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr "Enporto malsukcesis"
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr "okazaĵoj estas konservitaj en via kalendaro"
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
-msgstr "Nova horzono:"
+msgstr "Nova horozono:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "La horozono estas ÅanÄita"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Nevalida peto"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Kalendaro"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd d/M"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd d/M"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM yyyy"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "d MMM[ yyyy]{ '&#8212;'d[ MMM] yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, d-a de MMM yyyy"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "NaskiÄotago"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Negoco"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Voko"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Klientoj"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Livero"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Ferioj"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Ideoj"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "VojaÄo"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Jubileo"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Rendevuo"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Alia"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Persona"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projektoj"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Demandoj"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Laboro"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr "de"
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "nenomita"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Nova kalendaro"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Ĉi tio ne ripetiÄas"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Tage"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Semajne"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Labortage"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Semajnduope"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Monate"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Jare"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "neniam"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "laÅ­ aperoj"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "laÅ­ dato"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "laÅ­ monattago"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "laÅ­ semajntago"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "lundo"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "mardo"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "merkredo"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "ĵaŭdo"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "vendredo"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "sabato"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "dimanĉo"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "la monatsemajno de la okazaĵo"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "unua"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "dua"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "tria"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "kvara"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "kvina"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "lasta"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Januaro"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Februaro"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Marto"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Aprilo"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Majo"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Junio"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Julio"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "AÅ­gusto"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "Septembro"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Oktobro"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "Novembro"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Decembro"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "laŭ okazaĵdato"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "laÅ­ jartago(j)"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "laÅ­ semajnnumero(j)"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "laÅ­ tago kaj monato"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Dato"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Kal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr "dim."
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr "lun."
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr "mar."
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr "mer."
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr "ĵaŭ."
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr "ven."
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr "sab."
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr "Jan."
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr "Feb."
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr "Mar."
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr "Apr."
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr "Maj."
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr "Jun."
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr "Jul."
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr "AÅ­g."
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr "Sep."
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr "Okt."
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr "Nov."
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr "Dec."
+
#: templates/calendar.php:11
msgid "All day"
msgstr "La tuta tago"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Nova kalendaro"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Mankas iuj kampoj"
@@ -357,40 +460,32 @@ msgstr "La okazaĵo finas antaŭ komenci"
msgid "There was a database fail"
msgstr "Datumbaza malsukceso okazis"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Semajno"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Monato"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Listo"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "HodiaÅ­"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Kalendaroj"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Malsukceso okazis dum analizo de la dosiero."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Elektu aktivajn kalendarojn"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr "Agordo"
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Viaj kalendaroj"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDav-a ligilo"
@@ -402,19 +497,19 @@ msgstr "Kunhavigitaj kalendaroj"
msgid "No shared calendars"
msgstr "Neniu kunhavigita kalendaro"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Kunhavigi kalendaron"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "ElÅuti"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Redakti"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Forigi"
@@ -500,23 +595,23 @@ msgstr "Disigi kategoriojn per komoj"
msgid "Edit categories"
msgstr "Redakti kategoriojn"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "La tuta tago"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Ekde"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Äœis"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Altnivela agordo"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Loko"
@@ -524,7 +619,7 @@ msgstr "Loko"
msgid "Location of the Event"
msgstr "Loko de okazaĵo"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Priskribo"
@@ -532,84 +627,86 @@ msgstr "Priskribo"
msgid "Description of the Event"
msgstr "Okazaĵopriskribo"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Ripeti"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Altnivelo"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Elekti semajntagojn"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Elekti tagojn"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "kaj la jartago de la okazaĵo."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "kaj la monattago de la okazaĵo."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Elekti monatojn"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Elekti semajnojn"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "kaj la jarsemajno de la okazaĵo."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Intervalo"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Fino"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "aperoj"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "Krei novan kalendaron"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Enporti kalendarodosieron"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
msgstr "Bonvolu elekti kalendaron"
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "Krei novan kalendaron"
-
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Nomo de la nova kalendaro"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Enporti"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr "Prenu haveblan nomon!"
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Kalendaro estas enportata"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr "Kalendaro kun ĉi tiu nomo jam ekzastas. Se vi malgraÅ­e daÅ­ros, ĉi tiuj kalendaroj kunfandiÄos."
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "La kalendaro enportiÄis sukcese"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Enporti"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Fermi la dialogon"
@@ -625,45 +722,73 @@ msgstr "Vidi okazaĵon"
msgid "No categories selected"
msgstr "Neniu kategorio elektita"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Elekti kategorion"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "de"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "ĉe"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr "Äœenerala"
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Horozono"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Ĉiam kontroli ĉu la horzono ÅanÄiÄis"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr "AÅ­tomate Äisdatigi la horozonon"
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Tempoformo"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr "Horoformo"
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24h"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12h"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Unua tago de la semajno"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr "Komenci semajnon je"
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr "KaÅmemoro"
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr "ForviÅi kaÅmemoron por ripeto de okazaĵoj"
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr "URL-oj"
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr "sinkronigaj adresoj por CalDAV-kalendaroj"
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr "pli da informo"
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr "Ĉefa adreso (Kontact kaj aliaj)"
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Adreso de kalendarosinkronigo per CalDAV:"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr "Nurlegebla(j) iCalendar-ligilo(j)"
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/eo/contacts.po b/l10n/eo/contacts.po
index 7b4b003e484..3d95d0c4484 100644
--- a/l10n/eo/contacts.po
+++ b/l10n/eo/contacts.po
@@ -3,642 +3,776 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# 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-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Esperanto (http://www.transifex.net/projects/p/owncloud/language/eo/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Eraro dum (mal)aktivigo de adresaro."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Eraro okazis dum aldono de kontakto."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Ne eblas aldoni malplenan propraĵon."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "AlmenaÅ­ unu el la adreskampoj necesas pleniÄi."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "identigilo ne agordiÄis."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "Provante aldoni duobligitan propraĵon:"
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Ne eblas Äisdatigi adresaron kun malplena nomo."
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Eraro dum aldono de kontaktopropraĵo."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Eraro dum Äisdatigo de adresaro."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "Neniu identigilo proviziÄis."
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Eraro dum agordado de kontrolsumo."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Neniu kategorio elektiÄis por forigi."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Neniu adresaro troviÄis."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Neniu kontakto troviÄis."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Eraro okazis dum aldono de kontakto."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "eronomo ne agordiÄis."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr "Ne eblis analizi kontakton:"
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Ne eblas aldoni malplenan propraĵon."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "AlmenaÅ­ unu el la adreskampoj necesas pleniÄi."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "Provante aldoni duobligitan propraĵon:"
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informo pri vCard estas malÄusta. Bonvolu reÅargi la paÄon."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "Mankas identigilo"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "Eraro dum analizo de VCard por identigilo:"
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Ne eblas aldoni adresaron kun malplena nomo."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "kontrolsumo ne agordiÄis."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Eraro dum aldono de adresaro."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "Informo pri vCard malÄustas. Bonvolu reÅargi la paÄon:"
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Eraro dum aktivigo de adresaro."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Io FUBAR-is."
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "Neniu kontaktidentigilo sendiÄis."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Eraro dum lego de kontakta foto."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Eraro dum konservado de provizora dosiero."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "La alÅutata foto ne validas."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "identigilo ne agordiÄis."
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Informo pri vCard estas malÄusta. Bonvolu reÅargi la paÄon."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Eraro dum forigo de kontaktopropraĵo."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "Kontaktidentigilo mankas."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "Mankas kontaktidentigilo."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "Neniu vojo al foto sendiÄis."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Dosiero ne ekzistas:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Eraro dum Åargado de bildo."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Eraro dum ekhaviÄis kontakta objekto."
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Eraro dum ekhaviÄis la propraĵon PHOTO."
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Eraro dum konserviÄis kontakto."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Eraro dum aligrandiÄis bildo"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Eraro dum stuciÄis bildo."
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Eraro dum kreiÄis provizora bildo."
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "eronomo ne agordiÄis."
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "kontrolsumo ne agordiÄis."
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "Informo pri vCard malÄustas. Bonvolu reÅargi la paÄon:"
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "Io FUBAR-is."
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Eraro dum Äisdatigo de kontaktopropraĵo."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "Ne eblas Äisdatigi adresaron kun malplena nomo."
+msgstr "Eraro dum serĉo de bildo: "
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Eraro dum Äisdatigo de adresaro."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
-msgstr ""
+msgstr "Eraro dum alÅutiÄis kontaktoj al konservejo."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Ne estas eraro, la dosiero alÅutiÄis sukcese."
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
-msgstr ""
+msgstr "La alÅutita dosiero transpasas la preskribon upload_max_filesize en php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
-msgstr ""
+msgstr "La alÅutita dosiero transpasas la preskribon MAX_FILE_SIZE kiu specifiÄis en la HTML-formularo"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "la alÅutita dosiero nur parte alÅutiÄis"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Neniu dosiero alÅutiÄis."
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "Mankas provizora dosierujo."
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Ne eblis konservi provizoran bildon: "
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Ne eblis Åargi provizoran bildon: "
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Neniu dosiero alÅutiÄis. Nekonata eraro."
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Kontaktoj"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Pardonu, ĉi tiu funkcio ankoraŭ ne estas realigita."
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "Ne disponebla"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Ne eblis ekhavi validan adreson."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Eraro"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Ĉi tiu propraĵo devas ne esti malplena."
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "Ne eblis seriigi erojn."
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Redakti nomon"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Neniu dosiero elektita por alÅuto."
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "La dosiero, kiun vi provas alÅuti, transpasas la maksimuman grandon por dosieraj alÅutoj en ĉi tiu servilo."
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
-
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "Demetu VCF-dosieron por enporti kontaktojn."
+msgstr "Elektu tipon"
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1494
+#: js/loader.js:49
+msgid "Result: "
+msgstr "Rezulto: "
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr " enportoj, "
+
+#: js/loader.js:49
+msgid " failed."
+msgstr "malsukcesoj."
+
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
-msgstr ""
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr "Adresaro ne troviÄis:"
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Ĉi tiu ne estas via adresaro."
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Ne eblis trovi la kontakton."
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Adresaro ne troviÄis."
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Ĉi tiu ne estas via adresaro."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Ne eblis trovi la kontakton."
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Adreso"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefono"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "RetpoÅtadreso"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organizaĵo"
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Laboro"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Hejmo"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr "Alia"
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "PoÅtelefono"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Teksto"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Voĉo"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "MesaÄo"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fakso"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Videaĵo"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Televokilo"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Interreto"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "NaskiÄotago"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr "Negoco"
+
+#: lib/app.php:254
+msgid "Call"
+msgstr "Voko"
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr "Klientoj"
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr "Liveranto"
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr "Ferioj"
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr "Ideoj"
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr "VojaÄo"
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr "Jubileo"
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr "Kunveno"
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr "Persona"
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr "Projektoj"
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr "Demandoj"
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "NaskiÄtago de {name}"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Kontakto"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Aldoni kontakton"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Enporti"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr "Agordo"
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Adresaroj"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Agordi adresarojn"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Fermi"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Nova adresaro"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr "Fulmoklavoj"
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Enporti el VCF"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr "Navigado"
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDav-ligilo"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr "Jena kontakto en la listo"
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "ElÅuti"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr "Maljena kontakto en la listo"
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Redakti"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Forigi"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr "Jena adresaro"
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "ElÅuti kontakton"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr "Maljena adresaro"
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Forigi kontakton"
+#: templates/index.php:54
+msgid "Actions"
+msgstr "Agoj"
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr "RefreÅigi la kontaktoliston"
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr "Aldoni novan kontakton"
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr "Aldoni novan adresaron"
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr "Forigi la nunan kontakton"
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Demeti foton por alÅuti"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Forigi nunan foton"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Redakti nunan foton"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "AlÅuti novan foton"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Elekti foton el ownCloud"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr "Propra formo, Mallonga nomo, Longa nomo, Inversa aÅ­ Inversa kun komo"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Redakti detalojn de nomo"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organizaĵo"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Forigi"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Kromnomo"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Enigu kromnomon"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "NaskiÄotago"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr "TTT-ejo"
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr "http://www.iuejo.com"
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr "Iri al TTT-ejon"
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "yyyy-mm-dd"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Grupoj"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Disigi grupojn per komoj"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Redakti grupojn"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Preferata"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Bonvolu specifi validan retpoÅtadreson."
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Enigi retpoÅtadreson"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "RetpoÅtmesaÄo al adreso"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Forigi retpoÅþadreson"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Enigi telefonnumeron"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Forigi telefonnumeron"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Vidi en mapo"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Redakti detalojn de adreso"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Aldoni notojn ĉi tie."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Aldoni kampon"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Profila bildo"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefono"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Noto"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "RetpoÅtadreso"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Forigi nunan foton"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Redakti nunan foton"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Adreso"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "AlÅuti novan foton"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Noto"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Elekti foton el ownCloud"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "ElÅuti kontakton"
-#: templates/part.cropphoto.php:64
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Forigi kontakton"
+
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "La provizora bildo estas forigita de la kaÅmemoro."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Redakti adreson"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Tipo"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Abonkesto"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr "Stratadreso"
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr "Strato kaj numero"
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Etendita"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Strato"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Urbo"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Regiono"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "PoÅtokodo"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr "PoÅtkodo"
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "Lando"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Redakti kategoriojn"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Aldoni"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Adresaro"
@@ -719,35 +853,6 @@ msgstr ""
msgid "Sn."
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Nova adresaro"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Redakti adresaron"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Montronomo"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Aktiva"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Konservi"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Sendi"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Nuligi"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "Enporti kontaktodosieron"
@@ -764,57 +869,86 @@ msgstr "krei novan adresaron"
msgid "Name of new addressbook"
msgstr "Nomo de nova adresaro"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Enporti"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "Enportante kontaktojn"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "Elektu adresaron kien enporti:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "Elekti el malmoldisko"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "Vi ne havas kontaktojn en via adresaro"
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Aldoni kontakton"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Agordi adresarojn"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr "Elektu adresarojn"
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr "Enigu nomon"
-#: templates/settings.php:4
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr "Enigu priskribon"
+
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "adresoj por CardDAV-sinkronigo"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "pli da informo"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "Ĉefa adreso (por Kontakt kaj aliaj)"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr "Montri CardDav-ligilon"
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr "Montri nur legeblan VCF-ligilon"
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "ElÅuti"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Redakti"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Nova adresaro"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr "Nomo"
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr "Priskribo"
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Konservi"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Nuligi"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr "Pli..."
diff --git a/l10n/eo/core.po b/l10n/eo/core.po
index 4adb4f254f6..fbea58f5ddb 100644
--- a/l10n/eo/core.po
+++ b/l10n/eo/core.po
@@ -3,16 +3,17 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Mariano <mstreet@kde.org.ar>, 2012.
# Michael Moroni <haikara90@gmail.com>, 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-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Esperanto (http://www.transifex.net/projects/p/owncloud/language/eo/)\n"
+"POT-Creation-Date: 2012-08-19 02:02+0200\n"
+"PO-Revision-Date: 2012-08-18 16:36+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"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -21,99 +22,99 @@ msgstr ""
#: ajax/vcategories/add.php:23 ajax/vcategories/delete.php:23
msgid "Application name not provided."
-msgstr ""
+msgstr "Nomo de aplikaĵo ne proviziiÄis."
#: ajax/vcategories/add.php:29
msgid "No category to add?"
-msgstr ""
+msgstr "Ĉu neniu kategorio estas aldonota?"
#: ajax/vcategories/add.php:36
msgid "This category already exists: "
-msgstr ""
+msgstr "Ĉi tiu kategorio jam ekzistas: "
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-#: js/js.js:520
+#: js/js.js:190 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Agordo"
+
+#: js/js.js:575
msgid "January"
-msgstr ""
+msgstr "Januaro"
-#: js/js.js:520
+#: js/js.js:575
msgid "February"
-msgstr ""
+msgstr "Februaro"
-#: js/js.js:520
+#: js/js.js:575
msgid "March"
-msgstr ""
+msgstr "Marto"
-#: js/js.js:520
+#: js/js.js:575
msgid "April"
-msgstr ""
+msgstr "Aprilo"
-#: js/js.js:520
+#: js/js.js:575
msgid "May"
-msgstr ""
+msgstr "Majo"
-#: js/js.js:520
+#: js/js.js:575
msgid "June"
-msgstr ""
+msgstr "Junio"
-#: js/js.js:521
+#: js/js.js:576
msgid "July"
-msgstr ""
+msgstr "Julio"
-#: js/js.js:521
+#: js/js.js:576
msgid "August"
-msgstr ""
+msgstr "AÅ­gusto"
-#: js/js.js:521
+#: js/js.js:576
msgid "September"
-msgstr ""
+msgstr "Septembro"
-#: js/js.js:521
+#: js/js.js:576
msgid "October"
-msgstr ""
+msgstr "Oktobro"
-#: js/js.js:521
+#: js/js.js:576
msgid "November"
-msgstr ""
+msgstr "Novembro"
-#: js/js.js:521
+#: js/js.js:576
msgid "December"
-msgstr ""
+msgstr "Decembro"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Nuligi"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Ne"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Jes"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Akcepti"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Neniu kategorio elektiÄis por forigo."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Eraro"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "La pasvorto de Owncloud estas restarigita"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
-msgstr ""
+msgstr "La pasvorto de ownCloud restariÄis."
#: lostpassword/templates/email.php:1
msgid "Use the following link to reset your password: {link}"
@@ -178,7 +179,7 @@ msgstr "Helpo"
#: templates/403.php:12
msgid "Access forbidden"
-msgstr ""
+msgstr "Aliro estas malpermesata"
#: templates/404.php:12
msgid "Cloud not found"
@@ -186,11 +187,11 @@ msgstr "La nubo ne estas trovita"
#: templates/edit_categories_dialog.php:4
msgid "Edit categories"
-msgstr ""
+msgstr "Redakti kategoriojn"
#: templates/edit_categories_dialog.php:14
msgid "Add"
-msgstr ""
+msgstr "Aldoni"
#: templates/installation.php:23
msgid "Create an <strong>admin account</strong>"
@@ -241,14 +242,10 @@ msgstr "Fini la instalon"
msgid "web services under your control"
msgstr "TTT-servoj sub via kontrolo"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Elsaluti"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Agordo"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Ĉu vi perdis vian pasvorton?"
diff --git a/l10n/eo/files.po b/l10n/eo/files.po
index 70c2cce2725..cc7ffcd01a2 100644
--- a/l10n/eo/files.po
+++ b/l10n/eo/files.po
@@ -3,48 +3,49 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# 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-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Esperanto (http://www.transifex.net/projects/p/owncloud/language/eo/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Ne estas eraro, la dosiero alÅutiÄis sukcese"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
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:21
+#: ajax/upload.php:22
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "La dosiero alÅutita superas laregulon MAX_FILE_SIZE, kiu estas difinita en la HTML-formularo"
-#: ajax/upload.php:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "La alÅutita dosiero nur parte alÅutiÄis"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Neniu dosiero estas alÅutita"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Mankas tempa dosierujo"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Malsukcesis skribo al disko"
@@ -52,57 +53,85 @@ msgstr "Malsukcesis skribo al disko"
msgid "Files"
msgstr "Dosieroj"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Forigi"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "jam ekzistas"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "anstataÅ­igi"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "nuligi"
-#: js/files.js:170
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "anstataÅ­igita"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "kun"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "malfari"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "forigita"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "generanta ZIP-dosiero, Äi povas daÅ­ri iom da tempo"
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Ne eblis alÅuti vian dosieron ĉar Äi estas dosierujo aÅ­ havas 0 duumokojn"
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "AlÅuta eraro"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "Traktotaj"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "La alÅuto nuliÄis."
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "Nevalida nomo, “/†ne estas permesata."
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Grando"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Modifita"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "dosierujo"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "dosierujoj"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "dosiero"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "dosieroj"
#: templates/admin.php:5
msgid "File handling"
@@ -172,10 +201,6 @@ msgstr "Kunhavigi"
msgid "Download"
msgstr "ElÅuti"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Forigi"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "ElÅuto tro larÄa"
diff --git a/l10n/eo/files_encryption.po b/l10n/eo/files_encryption.po
new file mode 100644
index 00000000000..dbcedb1a56a
--- /dev/null
+++ b/l10n/eo/files_encryption.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-16 02:04+0200\n"
+"PO-Revision-Date: 2012-08-15 19:41+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"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+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.php:5
+msgid "None"
+msgstr "Nenio"
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr "Kapabligi ĉifradon"
diff --git a/l10n/eo/files_external.po b/l10n/eo/files_external.po
new file mode 100644
index 00000000000..11e4211e707
--- /dev/null
+++ b/l10n/eo/files_external.po
@@ -0,0 +1,83 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-16 02:04+0200\n"
+"PO-Revision-Date: 2012-08-15 22:09+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"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr "Malena memorilo"
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr "Surmetingo"
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr "Motoro"
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr "Agordo"
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr "Malneproj"
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr "Aplikebla"
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr "Aldoni surmetingon"
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr "Nenio agordita"
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr "Ĉiuj uzantoj"
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr "Grupoj"
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr "Uzantoj"
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr "Forigi"
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr "Radikaj SSL-atestoj"
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr "Enporti radikan ateston"
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr "Kapabligi malenan memorilon de uzanto"
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr "Permesi al uzantoj surmeti siajn proprajn malenajn memorilojn"
diff --git a/l10n/eo/files_sharing.po b/l10n/eo/files_sharing.po
new file mode 100644
index 00000000000..f1afe868724
--- /dev/null
+++ b/l10n/eo/files_sharing.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr "Forigi"
diff --git a/l10n/eo/files_versions.po b/l10n/eo/files_versions.po
new file mode 100644
index 00000000000..23851036eaa
--- /dev/null
+++ b/l10n/eo/files_versions.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-16 02:04+0200\n"
+"PO-Revision-Date: 2012-08-15 20:20+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"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr "Eksvalidigi ĉiujn eldonojn"
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr "Kapabligi dosiereldonkontrolon"
diff --git a/l10n/eo/lib.po b/l10n/eo/lib.po
new file mode 100644
index 00000000000..83d78e5ea55
--- /dev/null
+++ b/l10n/eo/lib.po
@@ -0,0 +1,113 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-04 02:02+0200\n"
+"PO-Revision-Date: 2012-08-03 22:37+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"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: app.php:287
+msgid "Help"
+msgstr "Helpo"
+
+#: app.php:294
+msgid "Personal"
+msgstr "Persona"
+
+#: app.php:299
+msgid "Settings"
+msgstr "Agordo"
+
+#: app.php:304
+msgid "Users"
+msgstr "Uzantoj"
+
+#: app.php:311
+msgid "Apps"
+msgstr "Aplikaĵoj"
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr "ZIP-elÅuto estas malkapabligita."
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr "Dosieroj devas elÅutiÄi unuope."
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr "Reen al la dosieroj"
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr "La elektitaj dosieroj tro grandas por genero de ZIP-dosiero."
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr "La aplikaĵo ne estas kapabligita"
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr "AÅ­tentiga eraro"
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr "Ä´etono eksvalidiÄis. Bonvolu reÅargi la paÄon."
+
+#: template.php:86
+msgid "seconds ago"
+msgstr "sekundojn antaÅ­e"
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr "antaÅ­ 1 minuto"
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr "antaÅ­ %d minutoj"
+
+#: template.php:91
+msgid "today"
+msgstr "hodiaÅ­"
+
+#: template.php:92
+msgid "yesterday"
+msgstr "hieraÅ­"
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr "antaÅ­ %d tagoj"
+
+#: template.php:94
+msgid "last month"
+msgstr "lasta monato"
+
+#: template.php:95
+msgid "months ago"
+msgstr "monatojn antaÅ­e"
+
+#: template.php:96
+msgid "last year"
+msgstr "lasta jaro"
+
+#: template.php:97
+msgid "years ago"
+msgstr "jarojn antaÅ­e"
diff --git a/l10n/eo/media.po b/l10n/eo/media.po
index cc7a61cea58..135087b52cc 100644
--- a/l10n/eo/media.po
+++ b/l10n/eo/media.po
@@ -3,29 +3,30 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Mariano <mstreet@kde.org.ar>, 2012.
# Michael Moroni <haikara90@gmail.com>, 2012.
-# <mstreet@kde.org.ar>, 2011.
+# <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-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Esperanto (http://www.transifex.net/projects/p/owncloud/language/eo/)\n"
+"POT-Creation-Date: 2012-08-19 02:02+0200\n"
+"PO-Revision-Date: 2012-08-18 16:47+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"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: eo\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: appinfo/app.php:32 templates/player.php:8
+#: appinfo/app.php:45 templates/player.php:8
msgid "Music"
msgstr "Muziko"
#: js/music.js:18
msgid "Add album to playlist"
-msgstr ""
+msgstr "Aldoni albumon al ludlisto"
#: templates/music.php:3 templates/player.php:12
msgid "Play"
@@ -37,11 +38,11 @@ msgstr "PaÅ­zigi"
#: templates/music.php:5
msgid "Previous"
-msgstr "AntaÅ­a"
+msgstr "Maljena"
#: templates/music.php:6 templates/player.php:14
msgid "Next"
-msgstr "Sekva"
+msgstr "Jena"
#: templates/music.php:7
msgid "Mute"
diff --git a/l10n/eo/settings.po b/l10n/eo/settings.po
index eadd0fca665..15e0d6d85ac 100644
--- a/l10n/eo/settings.po
+++ b/l10n/eo/settings.po
@@ -3,82 +3,115 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# 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-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Esperanto (http://www.transifex.net/projects/p/owncloud/language/eo/)\n"
+"POT-Creation-Date: 2012-08-19 02:02+0200\n"
+"PO-Revision-Date: 2012-08-18 17:13+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"
"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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "Ne eblis Åargi liston el aplikaĵovendejo"
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "La retpoÅtadreso konserviÄis"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Nevalida retpoÅtadreso"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "La agordo de OpenID estas ÅanÄita"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Nevalida peto"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "AÅ­tentiga eraro"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "La lingvo estas ÅanÄita"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "Eraro"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "Malkapabligi"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Kapabligi"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Konservante..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "Esperanto"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "Sekureca averto"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "Cron"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr "lanĉi unu taskon po ĉiu paÄo Åargita"
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr "cron.php estas registrita kiel webcron-servilo"
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr "uzi la cron-servon de la sistemo"
+
+#: templates/admin.php:39
msgid "Log"
-msgstr "Registro"
+msgstr "Protokolo"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Pli"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Aldonu vian aplikaĵon"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Elekti aplikaĵon"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Vidu la paÄon pri aplikaĵoj ĉe apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-permesila"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "de"
@@ -170,34 +203,38 @@ msgstr "Helpu traduki"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "uzu ĉi tiun adreson por konektiÄi al via ownCloud per via dosieradministrilo"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Nomo"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Pasvorto"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Grupoj"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Krei"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "DefaÅ­lta kvoto"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Alia"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr "Grupadministranto"
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Kvoto"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Forigi"
diff --git a/l10n/eo/tasks.po b/l10n/eo/tasks.po
new file mode 100644
index 00000000000..c53752bc4cc
--- /dev/null
+++ b/l10n/eo/tasks.po
@@ -0,0 +1,107 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-19 02:02+0200\n"
+"PO-Revision-Date: 2012-08-18 14:52+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"
+"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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr "Nevalida dato/horo"
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr "Taskoj"
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr "Neniu kategorio"
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr "Nespecifita"
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr "1=plej alta"
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr "5=meza"
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr "9=plej malalta"
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr "Malplena resumo"
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr "Nevalida plenuma elcento"
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr "Nevalida pligravo"
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr "Aldoni taskon"
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr "Ordigi laÅ­ limdato"
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr "Ordigi laÅ­ listo"
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr "Ordigi laÅ­ plenumo"
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr "Ordigi laÅ­ loko"
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr "Ordigi laÅ­ pligravo"
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr "Ordigi laÅ­ etikedo"
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr "Åœargante taskojn..."
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr "Grava"
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr "Pli"
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr "Malpli"
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr "Forigi"
diff --git a/l10n/eo/user_ldap.po b/l10n/eo/user_ldap.po
new file mode 100644
index 00000000000..d83f307fe23
--- /dev/null
+++ b/l10n/eo/user_ldap.po
@@ -0,0 +1,165 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-19 02:02+0200\n"
+"PO-Revision-Date: 2012-08-18 14:28+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"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr "Gastigo"
+
+#: templates/settings.php:8
+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:9
+msgid "Base DN"
+msgstr "Baz-DN"
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr "Uzanto-DN"
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr "Pasvorto"
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr "Por sennoman aliron, lasu DN-on kaj Pasvorton malplenaj."
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr "Filtrilo de uzantensaluto"
+
+#: templates/settings.php:12
+#, 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:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr "uzu la referencilon %%uid, ekz.: \"uid=%%uid\""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr "Filtrilo de uzantolisto"
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr "Äœi difinas la filtrilon aplikotan, kiam veniÄas uzantoj."
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr "sen ajna referencilo, ekz.: \"objectClass=person\"."
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr "Filtrilo de grupo"
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr "Äœi difinas la filtrilon aplikotan, kiam veniÄas grupoj."
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr "sen ajna referencilo, ekz.: \"objectClass=posixGroup\"."
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr "Pordo"
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr "Baza uzantarbo"
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr "Baza gruparbo"
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr "Uzi TLS-on"
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr "Ne uzu Äin por SSL-konektoj, Äi malsukcesos."
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr "LDAP-servilo blinda je litergrandeco (Vindozo)"
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr "Malkapabligi validkontrolon de SSL-atestiloj."
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr "Ne rekomendata, uzu Äin nur por testoj."
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr "Kampo de vidignomo de uzanto"
+
+#: templates/settings.php:24
+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:25
+msgid "Group Display Name Field"
+msgstr "Kampo de vidignomo de grupo"
+
+#: templates/settings.php:25
+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:27
+msgid "in bytes"
+msgstr "duumoke"
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr "sekunde. Ajna ÅanÄo malplenigas la kaÅmemoron."
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr "Helpo"
diff --git a/l10n/eo/user_migrate.po b/l10n/eo/user_migrate.po
new file mode 100644
index 00000000000..27ea6386b0b
--- /dev/null
+++ b/l10n/eo/user_migrate.po
@@ -0,0 +1,52 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-16 02:04+0200\n"
+"PO-Revision-Date: 2012-08-15 19:36+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"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr "Malenporti"
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr "Io malsukcesis dum la enportota dosiero generiÄis"
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr "Eraro okazis"
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr "Malenporti vian uzantokonton"
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr "Ĉi tio kreos densigitan dosieron, kiu enhavas vian konton de ownCloud."
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr "Enporti uzantokonton"
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr "ZIP-dosiero de uzanto de ownCloud"
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr "Enporti"
diff --git a/l10n/eo/user_openid.po b/l10n/eo/user_openid.po
new file mode 100644
index 00000000000..237164674bb
--- /dev/null
+++ b/l10n/eo/user_openid.po
@@ -0,0 +1,55 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-16 02:04+0200\n"
+"PO-Revision-Date: 2012-08-15 21:05+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"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr "Ĉi tio estas finpunkto de OpenID-servilo. Por pli da informo, vidu"
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr "Idento: <b>"
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr "Regno: <b>"
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr "Uzanto: <b>"
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr "Ensaluti"
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr "Eraro: <b>neniu uzanto estas elektita"
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr "Vi povas ensaluti en aliaj ejoj per tiu ĉi adreso"
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr "Rajtigita OpenID-provizanto"
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr "Via adreso ĉe Wordpress, Identi.ca&hellip;"
diff --git a/l10n/es/admin_dependencies_chk.po b/l10n/es/admin_dependencies_chk.po
new file mode 100644
index 00000000000..acbf8db12a8
--- /dev/null
+++ b/l10n/es/admin_dependencies_chk.po
@@ -0,0 +1,74 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Javier Llorente <javier@opensuse.org>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-24 02:01+0200\n"
+"PO-Revision-Date: 2012-08-23 09:25+0000\n"
+"Last-Translator: Javier Llorente <javier@opensuse.org>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr "Estado de las dependencias"
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr "Usado por:"
diff --git a/l10n/es/admin_migrate.po b/l10n/es/admin_migrate.po
new file mode 100644
index 00000000000..fd2230f4c7d
--- /dev/null
+++ b/l10n/es/admin_migrate.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:
+# <juanma@kde.org.ar>, 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 04:59+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr "Exportar esta instancia de ownCloud"
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr "Se creará un archivo comprimido que contendrá los datos de esta instancia de owncloud.\n Por favor elegir el tipo de exportación:"
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr "Exportar"
diff --git a/l10n/es/bookmarks.po b/l10n/es/bookmarks.po
new file mode 100644
index 00000000000..d00d8c372b4
--- /dev/null
+++ b/l10n/es/bookmarks.po
@@ -0,0 +1,61 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <juanma@kde.org.ar>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-07-30 02:02+0200\n"
+"PO-Revision-Date: 2012-07-29 04: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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr "Marcadores"
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr "sin nombre"
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr "Arrastra desde aquí a los marcadores de tu navegador, y haz clic cuando quieras marcar una página web rápidamente:"
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr "Leer después"
+
+#: templates/list.php:13
+msgid "Address"
+msgstr "Dirección"
+
+#: templates/list.php:14
+msgid "Title"
+msgstr "Título"
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr "Etiquetas"
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr "Guardar marcador"
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr "No tienes marcadores"
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr "Bookmarklet <br />"
diff --git a/l10n/es/calendar.po b/l10n/es/calendar.po
index 4306d405f6d..06a6465879a 100644
--- a/l10n/es/calendar.po
+++ b/l10n/es/calendar.po
@@ -3,29 +3,39 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <davidlopez.david@gmail.com>, 2012.
# Javier Llorente <javier@opensuse.org>, 2012.
# <juanma@kde.org.ar>, 2011, 2012.
# oSiNaReF <>, 2012.
+# <rafabayona@gmail.com>, 2012.
# <sergioballesterossolanas@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/owncloud/language/es/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
-#: ajax/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr "Aún no se han guardado en caché todos los calendarios"
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr "Parece que se ha guardado todo en caché"
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "No se encontraron calendarios."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "No se encontraron eventos."
@@ -33,300 +43,394 @@ msgstr "No se encontraron eventos."
msgid "Wrong calendar"
msgstr "Calendario incorrecto"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr "El archivo no contiene eventos o ya existen en tu calendario."
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr "Los eventos han sido guardados en el nuevo calendario"
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr "Fallo en la importación"
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr "eventos se han guardado en tu calendario"
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Nueva zona horaria:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Zona horaria cambiada"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Petición no válida"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Calendario"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd M/d"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd M/d"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM yyyy"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, MMM d, yyyy"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Cumpleaños"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Negocios"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Llamada"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Clientes"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Entrega"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Festivos"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Ideas"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Viaje"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Aniversario"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Reunión"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Otro"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Personal"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Proyectos"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Preguntas"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Trabajo"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr "por"
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "Sin nombre"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Nuevo calendario"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "No se repite"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Diariamente"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Semanalmente"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Días de semana laboral"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Cada 2 semanas"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Mensualmente"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Anualmente"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "nunca"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "por ocurrencias"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "por fecha"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "por día del mes"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "por día de la semana"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Lunes"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Martes"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Miércoles"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Jueves"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Viernes"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Sábado"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Domingo"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "eventos de la semana del mes"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "primer"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "segundo"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "tercer"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "cuarto"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "quinto"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "último"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Enero"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Febrero"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Marzo"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Abril"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Mayo"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Junio"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Julio"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "Agosto"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "Septiembre"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Octubre"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "Noviembre"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Diciembre"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "por fecha de los eventos"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "por día(s) del año"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "por número(s) de semana"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "por día y mes"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Fecha"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Cal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr "Dom."
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr "Lun."
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr "Mar."
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr "Mier."
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr "Jue."
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr "Vie."
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr "Sab."
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr "Ene."
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr "Feb."
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr "Mar."
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr "Abr."
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr "May."
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr "Jun."
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr "Jul."
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr "Ago."
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr "Sep."
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr "Oct."
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr "Nov."
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr "Dic."
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Todo el día"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Nuevo calendario"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Los campos que faltan"
@@ -360,40 +464,32 @@ msgstr "El evento termina antes de que comience"
msgid "There was a database fail"
msgstr "Se ha producido un error en la base de datos"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Semana"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Mes"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Lista"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Hoy"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Calendarios"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Se ha producido un fallo al analizar el archivo."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Elige los calendarios activos"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Tus calendarios"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "Enlace a CalDav"
@@ -405,19 +501,19 @@ msgstr "Calendarios compartidos"
msgid "No shared calendars"
msgstr "Calendarios no compartidos"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Compartir calendario"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Descargar"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Editar"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Eliminar"
@@ -503,23 +599,23 @@ msgstr "Separar categorías con comas"
msgid "Edit categories"
msgstr "Editar categorías"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Todo el día"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Desde"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Hasta"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Opciones avanzadas"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Lugar"
@@ -527,7 +623,7 @@ msgstr "Lugar"
msgid "Location of the Event"
msgstr "Lugar del evento"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Descripción"
@@ -535,84 +631,86 @@ msgstr "Descripción"
msgid "Description of the Event"
msgstr "Descripción del evento"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Repetir"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Avanzado"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Seleccionar días de la semana"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Seleccionar días"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "y el día del año de los eventos."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "y el día del mes de los eventos."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Seleccionar meses"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Seleccionar semanas"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "y la semana del año de los eventos."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Intervalo"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Fin"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "ocurrencias"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "Crear un nuevo calendario"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Importar un archivo de calendario"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Por favor elige el calendario"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "Crear un nuevo calendario"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr "Por favor, escoge un calendario"
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Nombre del nuevo calendario"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importar"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr "¡Elige un nombre disponible!"
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Importando calendario"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr "Ya existe un calendario con este nombre. Si continúas, se combinarán los calendarios."
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Calendario importado exitosamente"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Importar"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Cerrar diálogo"
@@ -628,45 +726,73 @@ msgstr "Ver un evento"
msgid "No categories selected"
msgstr "Ninguna categoría seleccionada"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Seleccionar categoría"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "de"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "a las"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Zona horaria"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Comprobar siempre por cambios en la zona horaria"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Formato de hora"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24h"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12h"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Primer día de la semana"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr "Caché"
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr "Limpiar caché de eventos recurrentes"
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr "Direcciones de sincronización de calendario CalDAV:"
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr "Más información"
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr "Dirección principal (Kontact y otros)"
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Dirección de sincronización de calendario CalDAV:"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr "Enlace(s) iCalendar de sólo lectura"
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/es/contacts.po b/l10n/es/contacts.po
index ec82648c8b6..b437840d41c 100644
--- a/l10n/es/contacts.po
+++ b/l10n/es/contacts.po
@@ -3,645 +3,780 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <davidlopez.david@gmail.com>, 2012.
# Javier Llorente <javier@opensuse.org>, 2012.
# <juanma@kde.org.ar>, 2011, 2012.
# oSiNaReF <>, 2012.
+# <rodrigo.calvo@gmail.com>, 2012.
# <sergioballesterossolanas@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/owncloud/language/es/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
-#: ajax/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Error al (des)activar libreta de direcciones."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Se ha producido un error al añadir el contacto."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "No se puede añadir una propiedad vacía."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Al menos uno de los campos de direcciones se tiene que rellenar."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "no se ha puesto ninguna ID."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "Intentando añadir una propiedad duplicada: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "No se puede actualizar una libreta de direcciones sin nombre."
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Error al añadir una propiedad del contacto."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Error al actualizar la libreta de direcciones."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "No se ha proporcionado una ID"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Error al establecer la suma de verificación."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "No se seleccionaron categorías para borrar."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "No se encontraron libretas de direcciones."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "No se encontraron contactos."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Se ha producido un error al añadir el contacto."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "no se ha puesto ningún nombre de elemento."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "No se puede añadir una propiedad vacía."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Al menos uno de los campos de direcciones se tiene que rellenar."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "Intentando añadir una propiedad duplicada: "
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr "Falta un parámetro del MI."
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr "MI desconocido:"
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "La información sobre el vCard es incorrecta. Por favor vuelve a cargar la página."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "Falta la ID"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "Error al analizar el VCard para la ID: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "No se puede añadir una libreta de direcciones sin nombre"
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "no se ha puesto ninguna suma de comprobación."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Error al añadir la libreta de direcciones."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "La información sobre la vCard es incorrecta. Por favor, recarga la página:"
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Error al activar la libreta de direcciones."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Plof. Algo ha fallado."
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "No se ha mandado ninguna ID de contacto."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Error leyendo fotografía del contacto."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Error al guardar archivo temporal."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "La foto que se estaba cargando no es válida."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "no se ha puesto ninguna ID."
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "La información sobre el vCard es incorrecta. Por favor vuelve a cargar la página."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Error al borrar una propiedad del contacto."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "Falta la ID del contacto."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "Falta la id del contacto."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "No se ha introducido la ruta de la foto."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Archivo inexistente:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Error cargando imagen."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Fallo al coger el contacto."
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Fallo al coger las propiedades de la foto ."
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Fallo al salvar un contacto"
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Fallo al cambiar de tamaño una foto"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Fallo al cortar el tamaño de la foto"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Fallo al crear la foto temporal"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "no se ha puesto ningún nombre de elemento."
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "no se ha puesto ninguna suma de comprobación."
+msgstr "Fallo al encontrar la imagen"
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "La información sobre la vCard es incorrecta. Por favor, recarga la página:"
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "Plof. Algo ha fallado."
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Error al actualizar una propiedad del contacto."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "No se puede actualizar una libreta de direcciones sin nombre."
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Error al actualizar la libreta de direcciones."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "Error al subir contactos al almacenamiento."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "No hay ningún error, el archivo se ha subido con éxito"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "El archivo subido sobrepasa la directiva upload_max_filesize de php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "El archivo subido sobrepasa la directiva MAX_FILE_SIZE especificada en el formulario HTML"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "El archivo se ha subido parcialmente"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "No se ha subido ningún archivo"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "Falta la carpeta temporal"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Fallo no pudo salvar a una imagen temporal"
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Fallo no pudo cargara de una imagen temporal"
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Fallo no se subió el fichero"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Contactos"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Perdón esta función no esta aún implementada"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "No esta implementada"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Fallo : no hay dirección valida"
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Fallo"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Este campo no puede estar vacío."
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "Fallo no podido ordenar los elementos"
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "La propiedad de \"borrar\" se llamado sin argumentos envia fallos a\nbugs.owncloud.org"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Edita el Nombre"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "No hay ficheros seleccionados para subir"
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "El fichero que quieres subir excede el tamaño máximo permitido en este servidor."
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
+msgstr "Selecciona el tipo"
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "Suelta un archivo VCF para importar contactos."
-
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
-msgstr ""
-
-#: js/contacts.js:1476
-msgid "OK"
-msgstr ""
-
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
-msgstr ""
-
-#: js/contacts.js:1634
-msgid "Upload too large"
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1638
-msgid "Wrong file type"
-msgstr ""
-
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
#: js/loader.js:49
msgid "Result: "
-msgstr ""
+msgstr "Resultado :"
#: js/loader.js:49
msgid " imported, "
-msgstr ""
+msgstr "Importado."
#: js/loader.js:49
msgid " failed."
+msgstr "Fallo."
+
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Libreta de direcciones no encontrada."
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr ""
-#: lib/app.php:34
+#: lib/app.php:52
msgid "This is not your addressbook."
msgstr "Esta no es tu agenda de contactos."
-#: lib/app.php:45
+#: lib/app.php:71
msgid "Contact could not be found."
msgstr "No se ha podido encontrar el contacto."
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Dirección"
+#: lib/app.php:116
+msgid "Jabber"
+msgstr "Jabber"
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Teléfono"
+#: lib/app.php:121
+msgid "AIM"
+msgstr "AIM"
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "Correo electrónico"
+#: lib/app.php:126
+msgid "MSN"
+msgstr "MSN"
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organización"
+#: lib/app.php:131
+msgid "Twitter"
+msgstr "Twitter"
+
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr "Google Talk"
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr "Facebook"
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:146
+msgid "XMPP"
+msgstr "XMPP"
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr "ICQ"
+
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr "Yahoo"
+
+#: lib/app.php:161
+msgid "Skype"
+msgstr "Skype"
+
+#: lib/app.php:166
+msgid "QQ"
+msgstr "QQ"
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr "GaduGadu"
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Trabajo"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Particular"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr "Otro"
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Móvil"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Texto"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Voz"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Mensaje"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fax"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Vídeo"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Localizador"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Cumpleaños"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr "Negocio"
+
+#: lib/app.php:254
+msgid "Call"
+msgstr "Llamada"
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr "Clientes"
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr "Vacaciones"
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr "Ideas"
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr "Jornada"
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr "Reunión"
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr "Personal"
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr "Proyectos"
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr "Preguntas"
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "Cumpleaños de {name}"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Contacto"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Añadir contacto"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Importar"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr "Configuración"
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Libretas de direcciones"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Configurar libretas de direcciones"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Cierra."
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Nueva libreta de direcciones"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr "Atajos de teclado"
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Importar desde VCF"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr "Navegación"
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "Enlace CardDav"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr "Siguiente contacto en la lista"
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Descargar"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr "Anterior contacto en la lista"
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Editar"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Borrar"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Descargar contacto"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Eliminar contacto"
+#: templates/index.php:54
+msgid "Actions"
+msgstr "Acciones"
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr "Refrescar la lista de contactos"
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr "Añadir un nuevo contacto"
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr "Añadir nueva libreta de direcciones"
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr "Eliminar contacto actual"
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Suelta una foto para subirla"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Eliminar fotografía actual"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Editar fotografía actual"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Subir nueva fotografía"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Seleccionar fotografía desde ownCloud"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr "Formato personalizado, nombre abreviado, nombre completo, al revés o al revés con coma"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Editar los detalles del nombre"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organización"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Borrar"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Alias"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Introduce un alias"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Cumpleaños"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr "Sitio Web"
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr "http://www.unsitio.com"
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr "Ir al sitio Web"
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "dd-mm-yyyy"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Grupos"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Separa los grupos con comas"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Editar grupos"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Preferido"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Por favor especifica una dirección de correo electrónico válida."
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Introduce una dirección de correo electrónico"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "Enviar por correo a la dirección"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Eliminar dirección de correo electrónico"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Introduce un número de teléfono"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Eliminar número de teléfono"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr "Mensajero instantáneo"
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Ver en el mapa"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Editar detalles de la dirección"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Añade notas aquí."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Añadir campo"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Foto del perfil"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Teléfono"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Nota"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "Correo electrónico"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Eliminar fotografía actual"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr "Mensajería instantánea"
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Editar fotografía actual"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Dirección"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Subir nueva fotografía"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Nota"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Seleccionar fotografía desde ownCloud"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Descargar contacto"
-#: templates/part.cropphoto.php:64
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Eliminar contacto"
+
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "La foto temporal se ha borrado del cache."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Editar dirección"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Tipo"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Código postal"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr "Calle y número"
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Extendido"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Calle"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr "Número del apartamento, etc."
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Ciudad"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Región"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr "Ej: región o provincia"
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Código postal"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr "Código postal"
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "País"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Editar categorías"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Añadir"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Libreta de direcciones"
@@ -722,35 +857,6 @@ msgstr "Jr."
msgid "Sn."
msgstr "Sn."
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Nueva libreta de direcciones"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Editar libreta de direcciones"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Nombre a mostrar"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Activo"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Guardar"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Aceptar"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Cancelar"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "Importar archivo de contactos"
@@ -767,57 +873,86 @@ msgstr "crear una nueva agenda"
msgid "Name of new addressbook"
msgstr "Nombre de la nueva agenda"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importar"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "Importando contactos"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "Selecciona una agenda para importar a:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "Seleccionar del disco duro"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "No hay contactos en tu agenda."
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Añadir contacto"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Configurar agenda"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr "Introducir nombre"
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr "Introducir descripción"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "Sincronizando direcciones"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "más información"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "Dirección primaria (Kontact et al)"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr "Compartir"
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Descargar"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Editar"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Nueva libreta de direcciones"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr "Nombre"
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr "Descripción"
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Guardar"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr "Más..."
diff --git a/l10n/es/core.po b/l10n/es/core.po
index 1e802ebc93c..5139dfe014d 100644
--- a/l10n/es/core.po
+++ b/l10n/es/core.po
@@ -6,16 +6,17 @@
# Javier Llorente <javier@opensuse.org>, 2012.
# <juanma@kde.org.ar>, 2011, 2012.
# oSiNaReF <>, 2012.
+# <rodrigo.calvo@gmail.com>, 2012.
# <rom1dep@gmail.com>, 2011.
# <sergioballesterossolanas@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/owncloud/language/es/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 09:17+0000\n"
+"Last-Translator: Javier Llorente <javier@opensuse.org>\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"
@@ -28,7 +29,7 @@ msgstr "Nombre de la aplicación no provisto."
#: ajax/vcategories/add.php:29
msgid "No category to add?"
-msgstr "¿Ninguna categoría para agregar?"
+msgstr "¿Ninguna categoría para añadir?"
#: ajax/vcategories/add.php:36
msgid "This category already exists: "
@@ -36,85 +37,85 @@ msgstr "Esta categoría ya existe: "
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:190 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Ajustes"
-#: js/js.js:520
+#: js/js.js:575
msgid "January"
-msgstr ""
+msgstr "Enero"
-#: js/js.js:520
+#: js/js.js:575
msgid "February"
-msgstr ""
+msgstr "Febrero"
-#: js/js.js:520
+#: js/js.js:575
msgid "March"
-msgstr ""
+msgstr "Marzo"
-#: js/js.js:520
+#: js/js.js:575
msgid "April"
-msgstr ""
+msgstr "Abril"
-#: js/js.js:520
+#: js/js.js:575
msgid "May"
-msgstr ""
+msgstr "Mayo"
-#: js/js.js:520
+#: js/js.js:575
msgid "June"
-msgstr ""
+msgstr "Junio"
-#: js/js.js:521
+#: js/js.js:576
msgid "July"
-msgstr ""
+msgstr "Julio"
-#: js/js.js:521
+#: js/js.js:576
msgid "August"
-msgstr ""
+msgstr "Agosto"
-#: js/js.js:521
+#: js/js.js:576
msgid "September"
-msgstr ""
+msgstr "Septiembre"
-#: js/js.js:521
+#: js/js.js:576
msgid "October"
-msgstr ""
+msgstr "Octubre"
-#: js/js.js:521
+#: js/js.js:576
msgid "November"
-msgstr ""
+msgstr "Noviembre"
-#: js/js.js:521
+#: js/js.js:576
msgid "December"
-msgstr ""
+msgstr "Diciembre"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Cancelar"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "No"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Sí"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Aceptar"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "No hay categorías seleccionadas para borrar."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Fallo"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Restablecer contraseña de ownCloud"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "Reiniciar contraseña de ownCloud"
@@ -244,14 +245,10 @@ msgstr "Completar la instalación"
msgid "web services under your control"
msgstr "servicios web bajo tu control"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Salir"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Ajustes"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "¿Has perdido tu contraseña?"
diff --git a/l10n/es/files.po b/l10n/es/files.po
index 4e4b0b0c2d6..d7855d52e08 100644
--- a/l10n/es/files.po
+++ b/l10n/es/files.po
@@ -4,48 +4,49 @@
#
# Translators:
# Javier Llorente <javier@opensuse.org>, 2012.
+# <juanma@kde.org.ar>, 2012.
# <sergioballesterossolanas@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/owncloud/language/es/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
-#: ajax/upload.php:19
+#: ajax/upload.php:20
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:20
+#: ajax/upload.php:21
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:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "El archivo que intentas subir solo se subió parcialmente"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "No se ha subido ningún archivo"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Falta un directorio temporal"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "La escritura en disco ha fallado"
@@ -53,57 +54,85 @@ msgstr "La escritura en disco ha fallado"
msgid "Files"
msgstr "Archivos"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Eliminado"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "ya existe"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "reemplazar"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "cancelar"
-#: js/files.js:170
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "reemplazado"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "con"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "deshacer"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "borrado"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "generando un fichero ZIP, puede llevar un tiempo."
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "No ha sido posible subir tu archivo porque es un directorio o tiene 0 bytes"
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "Error al subir el archivo"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "Pendiente"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "Subida cancelada."
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "Nombre no válido, '/' no está permitido."
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Tamaño"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Modificado"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "carpeta"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "carpetas"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "archivo"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "archivos"
#: templates/admin.php:5
msgid "File handling"
@@ -173,10 +202,6 @@ msgstr "Compartir"
msgid "Download"
msgstr "Descargar"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Eliminado"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "El archivo es demasiado grande"
diff --git a/l10n/es/files_encryption.po b/l10n/es/files_encryption.po
new file mode 100644
index 00000000000..4c88d29c38a
--- /dev/null
+++ b/l10n/es/files_encryption.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <juanma@kde.org.ar>, 2012.
+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 21:47+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr "Cifrado"
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/es/files_external.po b/l10n/es/files_external.po
new file mode 100644
index 00000000000..2a26b728a93
--- /dev/null
+++ b/l10n/es/files_external.po
@@ -0,0 +1,83 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Javier Llorente <javier@opensuse.org>, 2012.
+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 09:26+0000\n"
+"Last-Translator: Javier Llorente <javier@opensuse.org>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr "Almacenamiento externo"
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr "Motor"
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr "Configuración"
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr "Opciones"
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr "Aplicable"
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr "Añadir punto de montaje"
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr "No se ha configurado"
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr "Todos los usuarios"
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr "Grupos"
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr "Usuarios"
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr "Eliiminar"
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/es/files_sharing.po b/l10n/es/files_sharing.po
new file mode 100644
index 00000000000..e53147b10f2
--- /dev/null
+++ b/l10n/es/files_sharing.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Javier Llorente <javier@opensuse.org>, 2012.
+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 09:11+0000\n"
+"Last-Translator: Javier Llorente <javier@opensuse.org>\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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr "Tamaño"
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr "Modificado"
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr "Eliminar todo"
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr "Eliminar"
diff --git a/l10n/es/files_versions.po b/l10n/es/files_versions.po
new file mode 100644
index 00000000000..0b5cfbe22c5
--- /dev/null
+++ b/l10n/es/files_versions.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Javier Llorente <javier@opensuse.org>, 2012.
+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 09:28+0000\n"
+"Last-Translator: Javier Llorente <javier@opensuse.org>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr "Habilitar versionamiento de archivos"
diff --git a/l10n/es/gallery.po b/l10n/es/gallery.po
index 94068028c61..8a67c771871 100644
--- a/l10n/es/gallery.po
+++ b/l10n/es/gallery.po
@@ -5,76 +5,41 @@
# Translators:
# Javier Llorente <javier@opensuse.org>, 2012.
# <juanma@kde.org.ar>, 2012.
+# <rodrigo.calvo@gmail.com>, 2012.
# <sergioballesterossolanas@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/owncloud/language/es/)\n"
+"POT-Creation-Date: 2012-07-26 02:01+0200\n"
+"PO-Revision-Date: 2012-07-25 23:13+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"
"Content-Transfer-Encoding: 8bit\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: appinfo/app.php:37
+#: appinfo/app.php:39
msgid "Pictures"
msgstr "Imágenes"
-#: js/album_cover.js:44
+#: js/pictures.js:12
msgid "Share gallery"
-msgstr ""
+msgstr "Compartir galería"
-#: js/album_cover.js:64 js/album_cover.js:100 js/album_cover.js:133
+#: js/pictures.js:32
msgid "Error: "
-msgstr ""
+msgstr "Fallo "
-#: js/album_cover.js:64 js/album_cover.js:100
+#: js/pictures.js:32
msgid "Internal error"
-msgstr ""
-
-#: js/album_cover.js:114
-msgid "Scanning root"
-msgstr ""
-
-#: js/album_cover.js:115
-msgid "Default order"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Ascending"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Descending"
-msgstr ""
-
-#: js/album_cover.js:117 templates/index.php:19
-msgid "Settings"
-msgstr "Preferencias"
-
-#: js/album_cover.js:122
-msgid "Scanning root cannot be empty"
-msgstr ""
-
-#: js/album_cover.js:122 js/album_cover.js:133
-msgid "Error"
-msgstr ""
-
-#: templates/index.php:16
-msgid "Rescan"
-msgstr "Refrescar"
-
-#: templates/index.php:17
-msgid "Stop"
-msgstr "Parar"
+msgstr "Fallo interno"
-#: templates/index.php:18
-msgid "Share"
-msgstr "Compartir"
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr "Presentación"
#: templates/view_album.php:19
msgid "Back"
diff --git a/l10n/es/lib.po b/l10n/es/lib.po
new file mode 100644
index 00000000000..a8931cbabc6
--- /dev/null
+++ b/l10n/es/lib.po
@@ -0,0 +1,113 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <juanma@kde.org.ar>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-07-31 22:53+0200\n"
+"PO-Revision-Date: 2012-07-31 05:46+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: app.php:287
+msgid "Help"
+msgstr "Ayuda"
+
+#: app.php:294
+msgid "Personal"
+msgstr "Personal"
+
+#: app.php:299
+msgid "Settings"
+msgstr "Ajustes"
+
+#: app.php:304
+msgid "Users"
+msgstr "Usuarios"
+
+#: app.php:311
+msgid "Apps"
+msgstr "Aplicaciones"
+
+#: app.php:313
+msgid "Admin"
+msgstr "Administración"
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr "La descarga en ZIP está desactivada."
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr "Los archivos deben ser descargados uno por uno."
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr "Volver a Archivos"
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr "Los archivos seleccionados son demasiado grandes para generar el archivo zip."
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr "La aplicación no está habilitada"
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr "Error de autenticación"
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr "Token expirado. Por favor, recarga la página."
+
+#: template.php:86
+msgid "seconds ago"
+msgstr "hace segundos"
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr "hace 1 minuto"
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr "hace %d minutos"
+
+#: template.php:91
+msgid "today"
+msgstr "hoy"
+
+#: template.php:92
+msgid "yesterday"
+msgstr "ayer"
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr "hace %d días"
+
+#: template.php:94
+msgid "last month"
+msgstr "este mes"
+
+#: template.php:95
+msgid "months ago"
+msgstr "hace meses"
+
+#: template.php:96
+msgid "last year"
+msgstr "este año"
+
+#: template.php:97
+msgid "years ago"
+msgstr "hace años"
diff --git a/l10n/es/settings.po b/l10n/es/settings.po
index a8cb655556f..4fadce58dcc 100644
--- a/l10n/es/settings.po
+++ b/l10n/es/settings.po
@@ -3,87 +3,121 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <davidlopez.david@gmail.com>, 2012.
# Javier Llorente <javier@opensuse.org>, 2012.
# <juanma@kde.org.ar>, 2011, 2012.
# <monty_2731@hotmail.com>, 2011.
# oSiNaReF <>, 2012.
+# <rodrigo.calvo@gmail.com>, 2012.
# <rom1dep@gmail.com>, 2011.
# <sergioballesterossolanas@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/owncloud/language/es/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 09:14+0000\n"
+"Last-Translator: Javier Llorente <javier@opensuse.org>\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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "Imposible cargar la lista desde el App Store"
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "Correo guardado"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Correo no válido"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID cambiado"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Solicitud no válida"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Error de autenticación"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Idioma cambiado"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "Error"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "Desactivar"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Activar"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Guardando..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "Castellano"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "Advertencia de seguridad"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "Cron"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr "ejecutar una tarea con cada página cargada"
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr "cron.php se registra en un servicio webcron"
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr "usar servicio cron del sistema"
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Registro"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Más"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Añade tu aplicación"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Seleccionar una aplicación"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Echa un vistazo a la web de aplicaciones apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-autorizado"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "por"
@@ -175,34 +209,38 @@ msgstr "Ayúdanos a traducir"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "utiliza esta dirección para conectar a tu ownCloud desde tu gestor de archivos"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Nombre"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Contraseña"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Grupos"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Crear"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Cuota predeterminada"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Otro"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr "Grupo admin"
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Cuota"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Eliminar"
diff --git a/l10n/es/tasks.po b/l10n/es/tasks.po
new file mode 100644
index 00000000000..c7be467fb0c
--- /dev/null
+++ b/l10n/es/tasks.po
@@ -0,0 +1,107 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <juanma@kde.org.ar>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-17 17:39+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr "Fecha/hora inválida"
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr "Tareas"
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr "Sin categoría"
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr "Sin especificar"
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr "1=mayor"
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr "5=media"
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr "9=menor"
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr "Resumen vacío"
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr "Porcentaje completado inválido"
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr "Prioridad inválida"
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr "Agregar tarea"
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr "Ordenar por"
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr "Ordenar por lista"
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr "Ordenar por completadas"
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr "Ordenar por ubicación"
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr "Ordenar por prioridad"
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr "Ordenar por etiqueta"
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr "Cargando tareas..."
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr "Importante"
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr "Más"
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr "Menos"
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr "Borrar"
diff --git a/l10n/es/user_ldap.po b/l10n/es/user_ldap.po
new file mode 100644
index 00000000000..11d0ce6c531
--- /dev/null
+++ b/l10n/es/user_ldap.po
@@ -0,0 +1,165 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Javier Llorente <javier@opensuse.org>, 2012.
+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 09:28+0000\n"
+"Last-Translator: Javier Llorente <javier@opensuse.org>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr "Contraseña"
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr "Puerto"
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr "Usar TLS"
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr "en bytes"
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr "Ayuda"
diff --git a/l10n/es/user_migrate.po b/l10n/es/user_migrate.po
new file mode 100644
index 00000000000..fbd06177418
--- /dev/null
+++ b/l10n/es/user_migrate.po
@@ -0,0 +1,52 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Javier Llorente <javier@opensuse.org>, 2012.
+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 09:30+0000\n"
+"Last-Translator: Javier Llorente <javier@opensuse.org>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr "Exportar"
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr "Zip de usuario de ownCloud"
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr "Importar"
diff --git a/l10n/es/user_openid.po b/l10n/es/user_openid.po
new file mode 100644
index 00000000000..efed4f72da8
--- /dev/null
+++ b/l10n/es/user_openid.po
@@ -0,0 +1,55 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Javier Llorente <javier@opensuse.org>, 2012.
+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 09:24+0000\n"
+"Last-Translator: Javier Llorente <javier@opensuse.org>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr "Identidad: <b>"
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr "Usuario: <b>"
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr "Iniciar sesión"
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/et_EE/admin_dependencies_chk.po b/l10n/et_EE/admin_dependencies_chk.po
new file mode 100644
index 00000000000..4e1dc1ab0c8
--- /dev/null
+++ b/l10n/et_EE/admin_dependencies_chk.po
@@ -0,0 +1,74 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Rivo Zängov <eraser@eraser.ee>, 2012.
+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:47+0000\n"
+"Last-Translator: Rivo Zängov <eraser@eraser.ee>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr "php-json moodul on vajalik paljude rakenduse poolt omvahelise suhtlemise jaoks"
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr "php-curl moodul on vajalik lehe pealkirja tõmbamiseks järjehoidja lisamisel"
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr "php-gd moodul on vajalik sinu piltidest pisipiltide loomiseks"
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr "php-ldap moodul on vajalik sinu ldap serveriga ühendumiseks"
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr "php-zip moodul on vajalik mitme faili korraga alla laadimiseks"
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr "php-mb_multibyte moodul on vajalik kodeerimise korrektseks haldamiseks."
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr "php-ctype moodul on vajalik andmete kontrollimiseks."
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr "php-xml moodul on vajalik failide jagamiseks webdav-iga."
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr "Sinu php.ini failis oleva direktiivi allow_url_fopen väärtuseks peaks määrama 1, et saaks tõmmata teadmistebaasi OCS-i serveritest"
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr "php-pdo moodul on vajalik owncloudi andmete salvestamiseks andmebaasi."
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr "Sõltuvuse staatus"
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr "Kasutab :"
diff --git a/l10n/et_EE/admin_migrate.po b/l10n/et_EE/admin_migrate.po
new file mode 100644
index 00000000000..1e02b724090
--- /dev/null
+++ b/l10n/et_EE/admin_migrate.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:
+# Rivo Zängov <eraser@eraser.ee>, 2012.
+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:41+0000\n"
+"Last-Translator: Rivo Zängov <eraser@eraser.ee>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr "Ekspordi see ownCloudi paigaldus"
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr "See loob pakitud faili, milles on sinu owncloudi paigalduse andmed.\n Palun vali eksporditava faili tüüp:"
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr "Ekspordi"
diff --git a/l10n/et_EE/bookmarks.po b/l10n/et_EE/bookmarks.po
new file mode 100644
index 00000000000..91cf36ab0d4
--- /dev/null
+++ b/l10n/et_EE/bookmarks.po
@@ -0,0 +1,61 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Rivo Zängov <eraser@eraser.ee>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-07-31 22:53+0200\n"
+"PO-Revision-Date: 2012-07-31 10:22+0000\n"
+"Last-Translator: Rivo Zängov <eraser@eraser.ee>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr "Järjehoidjad"
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr "nimetu"
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr "Loe hiljem"
+
+#: templates/list.php:13
+msgid "Address"
+msgstr "Aadress"
+
+#: templates/list.php:14
+msgid "Title"
+msgstr "Pealkiri"
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr "Sildid"
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr "Salvesta järjehoidja"
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr "Sul pole järjehoidjaid"
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/et_EE/calendar.po b/l10n/et_EE/calendar.po
index 2cca9be319a..9a8efeb0287 100644
--- a/l10n/et_EE/calendar.po
+++ b/l10n/et_EE/calendar.po
@@ -8,21 +8,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Estonian (Estonia) (http://www.transifex.net/projects/p/owncloud/language/et_EE/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Kalendreid ei leitud."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Ãœritusi ei leitud."
@@ -30,300 +38,394 @@ msgstr "Ãœritusi ei leitud."
msgid "Wrong calendar"
msgstr "Vale kalender"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Uus ajavöönd:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Ajavöönd on muudetud"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Vigane päring"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Kalender"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd M/d"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd M/d"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM yyyy"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, MMM d, yyyy"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Sünnipäev"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Äri"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Helista"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Kliendid"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Kohaletoimetaja"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Pühad"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Ideed"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Reis"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Juubel"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Kohtumine"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Muu"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Isiklik"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projektid"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Küsimused"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Töö"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "nimetu"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Uus kalender"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Ei kordu"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Iga päev"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Iga nädal"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Igal nädalapäeval"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Üle nädala"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Igal kuul"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Igal aastal"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "mitte kunagi"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "toimumiskordade järgi"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "kuupäeva järgi"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "kuu päeva järgi"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "nädalapäeva järgi"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Esmaspäev"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Teisipäev"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Kolmapäev"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Neljapäev"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Reede"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Laupäev"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Pühapäev"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "ürituse kuu nädal"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "esimene"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "teine"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "kolmas"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "neljas"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "viies"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "viimane"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Jaanuar"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Veebruar"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Märts"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Aprill"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Mai"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Juuni"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Juuli"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "August"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "September"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Oktoober"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "November"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Detsember"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "ürituste kuupäeva järgi"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "aasta päeva(de) järgi"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "nädala numbri(te) järgi"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "kuu ja päeva järgi"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Kuupäev"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Kal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Kogu päev"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Uus kalender"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Puuduvad väljad"
@@ -357,40 +459,32 @@ msgstr "Üritus lõpeb enne, kui see algab"
msgid "There was a database fail"
msgstr "Tekkis andmebaasi viga"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Nädal"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Kuu"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Nimekiri"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Täna"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Kalendrid"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Faili parsimisel tekkis viga."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Vali aktiivsed kalendrid"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Sinu kalendrid"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDav Link"
@@ -402,19 +496,19 @@ msgstr "Jagatud kalendrid"
msgid "No shared calendars"
msgstr "Jagatud kalendreid pole"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Jaga kalendrit"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Lae alla"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Muuda"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Kustuta"
@@ -500,23 +594,23 @@ msgstr "Eralda kategooriad komadega"
msgid "Edit categories"
msgstr "Muuda kategooriaid"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Kogu päeva sündmus"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Alates"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Kuni"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Lisavalikud"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Asukoht"
@@ -524,7 +618,7 @@ msgstr "Asukoht"
msgid "Location of the Event"
msgstr "Sündmuse toimumiskoht"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Kirjeldus"
@@ -532,84 +626,86 @@ msgstr "Kirjeldus"
msgid "Description of the Event"
msgstr "Sündmuse kirjeldus"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Korda"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Täpsem"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Vali nädalapäevad"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Vali päevad"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "ja ürituse päev aastas."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "ja ürituse päev kuus."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Vali kuud"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Vali nädalad"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "ja ürituse nädal aastas."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Intervall"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Lõpp"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "toimumiskordi"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "loo uus kalender"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Impordi kalendrifail"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Palun vali kalender"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "loo uus kalender"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Uue kalendri nimi"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Impordi"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Kalendri importimine"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Kalender on imporditud"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Impordi"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Sulge dialoogiaken"
@@ -625,45 +721,73 @@ msgstr "Vaata üritust"
msgid "No categories selected"
msgstr "Ãœhtegi kategooriat pole valitud"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Salvesta kategooria"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "/"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "kell"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Ajavöönd"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Kontrolli alati muudatusi ajavööndis"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Aja vorming"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24h"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12h"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Nädala esimene päev"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Kalendri CalDAV sünkroniseerimise aadress:"
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/et_EE/contacts.po b/l10n/et_EE/contacts.po
index c78d9e4307f..076195c05e4 100644
--- a/l10n/et_EE/contacts.po
+++ b/l10n/et_EE/contacts.po
@@ -8,637 +8,770 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Estonian (Estonia) (http://www.transifex.net/projects/p/owncloud/language/et_EE/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Viga aadressiraamatu (de)aktiveerimisel."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Konktakti lisamisel tekkis viga."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Tühja omadust ei saa lisada."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Vähemalt üks aadressiväljadest peab olema täidetud."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "ID on määramata."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "Proovitakse lisada topeltomadust: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Tühja nimega aadressiraamatut ei saa uuendada."
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Viga konktakti korralikul lisamisel."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Viga aadressiraamatu uuendamisel."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "ID-d pole sisestatud"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Viga kontrollsumma määramisel."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Kustutamiseks pole valitud ühtegi kategooriat."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Ei leitud ühtegi aadressiraamatut."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Ãœhtegi kontakti ei leitud."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Konktakti lisamisel tekkis viga."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "elemendi nime pole määratud."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Tühja omadust ei saa lisada."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Vähemalt üks aadressiväljadest peab olema täidetud."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "Proovitakse lisada topeltomadust: "
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Visiitkaardi info pole korrektne. Palun lae leht uuesti."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "Puudub ID"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "Viga VCard-ist ID parsimisel: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Tühja nimega aadressiraamatut ei saa lisada."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "kontrollsummat pole määratud."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Viga aadressiraamatu lisamisel."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "vCard info pole korrektne. Palun lae lehekülg uuesti: "
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Viga aadressiraamatu aktiveerimisel."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Midagi läks tõsiselt metsa."
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "Kontakti ID-d pole sisestatud."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Viga kontakti foto lugemisel."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Viga ajutise faili salvestamisel."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "Laetav pilt pole korrektne pildifail."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "ID on määramata."
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Visiitkaardi info pole korrektne. Palun lae leht uuesti."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Viga konktaki korralikul kustutamisel."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "Kontakti ID puudub."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "Puuduv kontakti ID."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "Foto asukohta pole määratud."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Faili pole olemas:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Viga pildi laadimisel."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Viga kontakti objekti hankimisel."
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Viga PHOTO omaduse hankimisel."
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Viga kontakti salvestamisel."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Viga pildi suuruse muutmisel"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Viga pildi lõikamisel"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Viga ajutise pildi loomisel"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
+msgstr "Viga pildi leidmisel: "
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "elemendi nime pole määratud."
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "kontrollsummat pole määratud."
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "vCard info pole korrektne. Palun lae lehekülg uuesti: "
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "Midagi läks tõsiselt metsa."
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Viga konktaki korralikul uuendamisel."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "Tühja nimega aadressiraamatut ei saa uuendada."
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Viga aadressiraamatu uuendamisel."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "Viga kontaktide üleslaadimisel kettale."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Ühtegi tõrget polnud, fail on üles laetud"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Üleslaetud fail ületab php.ini failis määratud upload_max_filesize suuruse"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Üleslaetud fail ületab MAX_FILE_SIZE suuruse, mis on HTML vormi jaoks määratud"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "Fail laeti üles ainult osaliselt"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Ühtegi faili ei laetud üles"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "Ajutiste failide kaust puudub"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Ajutise pildi salvestamine ebaõnnestus: "
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Ajutise pildi laadimine ebaõnnestus: "
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Ühtegi faili ei laetud üles. Tundmatu viga"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Kontaktid"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Vabandust, aga see funktsioon pole veel valmis"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "Pole implementeeritud"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Kehtiva aadressi hankimine ebaõnnestus"
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Viga"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "See omadus ei tohi olla tühi."
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Muuda nime"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Ãœleslaadimiseks pole faile valitud."
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
-
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "Lohista siia VCF-fail, millest kontakte importida."
+msgstr "Vali tüüp"
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1494
+#: js/loader.js:49
+msgid "Result: "
+msgstr "Tulemus: "
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr " imporditud, "
+
+#: js/loader.js:49
+msgid " failed."
+msgstr " ebaõnnestus."
+
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "See pole sinu aadressiraamat."
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Kontakti ei leitud."
+
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Aadressiraamatut ei leitud"
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "See pole sinu aadressiraamat."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Kontakti ei leitud."
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Aadress"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefon"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "E-post"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organisatsioon"
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Töö"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Kodu"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mobiil"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Tekst"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Hääl"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Sõnum"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Faks"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Video"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Piipar"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Sünnipäev"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "{name} sünnipäev"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Kontakt"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Lisa kontakt"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Impordi"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Aadressiraamatud"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Seadista aadressiraamatut"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Sule"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Uus aadressiraamat"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Impordi VCF-ist"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDav link"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Lae alla"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Muuda"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Kustuta"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Lae kontakt alla"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Kustuta kontakt"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Lohista üleslaetav foto siia"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Kustuta praegune foto"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Muuda praegust pilti"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Lae üles uus foto"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Vali foto ownCloudist"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr "Kohandatud vorming, Lühike nimi, Täielik nimi, vastupidine või vastupidine komadega"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Muuda nime üksikasju"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organisatsioon"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Kustuta"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Hüüdnimi"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Sisesta hüüdnimi"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Sünnipäev"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "dd.mm.yyyy"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Grupid"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Eralda grupid komadega"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Muuda gruppe"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Eelistatud"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Palun sisesta korrektne e-posti aadress."
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Sisesta e-posti aadress"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "Kiri aadressile"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Kustuta e-posti aadress"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Sisesta telefoninumber"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Kustuta telefoninumber"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Vaata kaardil"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Muuda aaressi infot"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Lisa märkmed siia."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Lisa väli"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Profiili pilt"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefon"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Märkus"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "E-post"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Kustuta praegune foto"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Muuda praegust pilti"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Aadress"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Lae üles uus foto"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Märkus"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Vali foto ownCloudist"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Lae kontakt alla"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Kustuta kontakt"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "Ajutine pilt on puhvrist eemaldatud."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Muuda aadressi"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Tüüp"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Postkontori postkast"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Laiendatud"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Tänav"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Linn"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Piirkond"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Postiindeks"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "Riik"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Muuda kategooriat"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Lisa"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Aadressiraamat"
@@ -719,35 +852,6 @@ msgstr "Jr."
msgid "Sn."
msgstr "Senior."
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Uus aadressiraamat"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Muuda aadressiraamatut"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Näidatav nimi"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Aktiivne"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Salvesta"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Saada"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Loobu"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "Impordi kontaktifail"
@@ -764,57 +868,86 @@ msgstr "loo uus aadressiraamat"
msgid "Name of new addressbook"
msgstr "Uue aadressiraamatu nimi"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Impordi"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "Kontaktide importimine"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "Vali aadressiraamat, millesse importida:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "Vali kõvakettalt"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "Sinu aadressiraamatus pole ühtegi kontakti."
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Lisa kontakt"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Seadista aadressiraamatuid"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr ""
-#: templates/settings.php:4
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr ""
+
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "CardDAV sünkroniseerimise aadressid"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "lisainfo"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "Peamine aadress"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Lae alla"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Muuda"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Uus aadressiraamat"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Salvesta"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Loobu"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/et_EE/core.po b/l10n/et_EE/core.po
index 7ef40599343..8e0bb95d9f7 100644
--- a/l10n/et_EE/core.po
+++ b/l10n/et_EE/core.po
@@ -8,10 +8,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Estonian (Estonia) (http://www.transifex.net/projects/p/owncloud/language/et_EE/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -32,85 +32,85 @@ msgstr "See kategooria on juba olemas: "
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Seaded"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Jaanuar"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Veebruar"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Märts"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "Aprill"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Mai"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Juuni"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Juuli"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "August"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "September"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Oktoober"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "November"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "Detsember"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Loobu"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Ei"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Jah"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Ok"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Kustutamiseks pole kategooriat valitud."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Viga"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Owncloud parooli taastamine"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "ownCloud parooli taastamine"
@@ -240,14 +240,10 @@ msgstr "Lõpeta seadistamine"
msgid "web services under your control"
msgstr "veebiteenused sinu kontrolli all"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Logi välja"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Seaded"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Kaotasid oma parooli?"
diff --git a/l10n/et_EE/files.po b/l10n/et_EE/files.po
index 8e2e2f4090f..5585c7eb69d 100644
--- a/l10n/et_EE/files.po
+++ b/l10n/et_EE/files.po
@@ -8,43 +8,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Estonian (Estonia) (http://www.transifex.net/projects/p/owncloud/language/et_EE/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Ühtegi viga pole, fail on üles laetud"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Üles laetud faili suurus ületab php.ini määratud upload_max_filesize suuruse"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Fail laeti üles ainult osaliselt"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Ühtegi faili ei laetud üles"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Ajutiste failide kaust puudub"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Kettale kirjutamine ebaõnnestus"
@@ -52,57 +52,85 @@ msgstr "Kettale kirjutamine ebaõnnestus"
msgid "Files"
msgstr "Failid"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Kustuta"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
-msgid "generating ZIP-file, it may take some time."
+#: js/filelist.js:141
+msgid "replace"
msgstr ""
-#: js/files.js:199
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/filelist.js:141
+msgid "cancel"
msgstr ""
-#: js/files.js:199
-msgid "Upload Error"
+#: js/filelist.js:195
+msgid "replaced"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
-msgid "Pending"
+#: js/filelist.js:195
+msgid "with"
msgstr ""
-#: js/files.js:332
-msgid "Upload cancelled."
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
msgstr ""
-#: js/files.js:456
-msgid "Invalid name, '/' is not allowed."
+#: js/filelist.js:246
+msgid "deleted"
msgstr ""
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:171
+msgid "generating ZIP-file, it may take some time."
+msgstr "ZIP-faili loomine, see võib veidi aega võtta."
+
+#: js/files.js:200
+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:200
+msgid "Upload Error"
+msgstr "Ãœleslaadimise viga"
+
+#: js/files.js:228 js/files.js:319 js/files.js:348
+msgid "Pending"
+msgstr "Ootel"
+
+#: js/files.js:333
+msgid "Upload cancelled."
+msgstr "Üleslaadimine tühistati."
+
+#: js/files.js:457
+msgid "Invalid name, '/' is not allowed."
+msgstr "Vigane nimi, '/' pole lubatud."
+
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Suurus"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Muudetud"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "kaust"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "kausta"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "fail"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "faili"
#: templates/admin.php:5
msgid "File handling"
@@ -172,10 +200,6 @@ msgstr "Jaga"
msgid "Download"
msgstr "Lae alla"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Kustuta"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Ãœleslaadimine on liiga suur"
diff --git a/l10n/et_EE/files_encryption.po b/l10n/et_EE/files_encryption.po
new file mode 100644
index 00000000000..8a0593fa337
--- /dev/null
+++ b/l10n/et_EE/files_encryption.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Rivo Zängov <eraser@eraser.ee>, 2012.
+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"
+"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"
+
+#: templates/settings.php:3
+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.php:5
+msgid "None"
+msgstr "Pole"
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr "Luba krüpteerimine"
diff --git a/l10n/et_EE/files_external.po b/l10n/et_EE/files_external.po
new file mode 100644
index 00000000000..3daaecb1633
--- /dev/null
+++ b/l10n/et_EE/files_external.po
@@ -0,0 +1,83 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Rivo Zängov <eraser@eraser.ee>, 2012.
+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:32+0000\n"
+"Last-Translator: Rivo Zängov <eraser@eraser.ee>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr "Väline salvestuskoht"
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr "Ãœhenduspunkt"
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr "Seadistamine"
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr "Valikud"
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr "Lisa ühenduspunkt"
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr "Pole määratud"
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr "Kõik kasutajad"
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr "Grupid"
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr "Kasutajad"
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr "Kustuta"
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/et_EE/files_sharing.po b/l10n/et_EE/files_sharing.po
new file mode 100644
index 00000000000..ebe1c5cb9b7
--- /dev/null
+++ b/l10n/et_EE/files_sharing.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Rivo Zängov <eraser@eraser.ee>, 2012.
+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-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr "Kustutamine"
diff --git a/l10n/et_EE/files_versions.po b/l10n/et_EE/files_versions.po
new file mode 100644
index 00000000000..fd569f5b70b
--- /dev/null
+++ b/l10n/et_EE/files_versions.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Rivo Zängov <eraser@eraser.ee>, 2012.
+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:33+0000\n"
+"Last-Translator: Rivo Zängov <eraser@eraser.ee>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr "Kõikide versioonide aegumine"
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr "Luba failide versioonihaldus"
diff --git a/l10n/et_EE/lib.po b/l10n/et_EE/lib.po
new file mode 100644
index 00000000000..323ca131149
--- /dev/null
+++ b/l10n/et_EE/lib.po
@@ -0,0 +1,113 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Rivo Zängov <eraser@eraser.ee>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-07-31 22:53+0200\n"
+"PO-Revision-Date: 2012-07-31 10:25+0000\n"
+"Last-Translator: Rivo Zängov <eraser@eraser.ee>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr "Abiinfo"
+
+#: app.php:294
+msgid "Personal"
+msgstr "Isiklik"
+
+#: app.php:299
+msgid "Settings"
+msgstr "Seaded"
+
+#: app.php:304
+msgid "Users"
+msgstr "Kasutajad"
+
+#: app.php:311
+msgid "Apps"
+msgstr "Rakendused"
+
+#: app.php:313
+msgid "Admin"
+msgstr "Admin"
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr "ZIP-ina allalaadimine on välja lülitatud."
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr "Failid tuleb alla laadida ükshaaval."
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr "Tagasi failide juurde"
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr "Valitud failid on ZIP-faili loomiseks liiga suured."
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr "Rakendus pole sisse lülitatud"
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr "Autentimise viga"
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr "Kontrollkood aegus. Paelun lae leht uuesti."
+
+#: template.php:86
+msgid "seconds ago"
+msgstr "sekundit tagasi"
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr "1 minut tagasi"
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr "%d minutit tagasi"
+
+#: template.php:91
+msgid "today"
+msgstr "täna"
+
+#: template.php:92
+msgid "yesterday"
+msgstr "eile"
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr "%d päeva tagasi"
+
+#: template.php:94
+msgid "last month"
+msgstr "eelmisel kuul"
+
+#: template.php:95
+msgid "months ago"
+msgstr "kuud tagasi"
+
+#: template.php:96
+msgid "last year"
+msgstr "eelmisel aastal"
+
+#: template.php:97
+msgid "years ago"
+msgstr "aastat tagasi"
diff --git a/l10n/et_EE/settings.po b/l10n/et_EE/settings.po
index 6b303c8c23f..c41361db049 100644
--- a/l10n/et_EE/settings.po
+++ b/l10n/et_EE/settings.po
@@ -9,77 +9,109 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Estonian (Estonia) (http://www.transifex.net/projects/p/owncloud/language/et_EE/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "Kiri on salvestatud"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Vigane e-post"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID on muudetud"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Vigane päring"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Keel on muudetud"
-#: js/apps.js:31 js/apps.js:67
-msgid "Disable"
+#: js/apps.js:18
+msgid "Error"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr "Lülita välja"
+
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Lülita sisse"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Salvestamine..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "Eesti"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Logi"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Veel"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Lisa oma rakendus"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Vali programm"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Vaata rakenduste lehte aadressil apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-litsenseeritud"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "kelle poolt"
@@ -171,34 +203,38 @@ msgstr "Aita tõlkida"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "kasuta seda aadressi oma ownCloudiga ühendamiseks failihalduriga"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Nimi"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Parool"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Grupid"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Lisa"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Vaikimisi kvoot"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Muu"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Mahupiir"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Kustuta"
diff --git a/l10n/et_EE/tasks.po b/l10n/et_EE/tasks.po
new file mode 100644
index 00000000000..042e2c4864f
--- /dev/null
+++ b/l10n/et_EE/tasks.po
@@ -0,0 +1,107 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Rivo Zängov <eraser@eraser.ee>, 2012.
+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:36+0000\n"
+"Last-Translator: Rivo Zängov <eraser@eraser.ee>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr "Vigane kuupäev/kellaaeg"
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr "Ãœlesanded"
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr "Kategooriat pole"
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr "Määramata"
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr "1=kõrgeim"
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr "5=keskmine"
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr "9=madalaim"
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr "Tühi kokkuvõte"
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr "Vigane edenemise protsent"
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr "Vigane tähtsus"
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr "Lisa ülesanne"
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr "Tähtaja järgi"
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr "Nimekirja järgi"
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr "Edenemise järgi"
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr "Asukoha järgi"
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr "Tähtsuse järjekorras"
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr "Sildi järgi"
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr "Ãœlesannete laadimine..."
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr "Tähtis"
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr "Rohkem"
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr "Vähem"
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr "Kustuta"
diff --git a/l10n/et_EE/user_ldap.po b/l10n/et_EE/user_ldap.po
new file mode 100644
index 00000000000..38de7d5c108
--- /dev/null
+++ b/l10n/et_EE/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/et_EE/user_migrate.po b/l10n/et_EE/user_migrate.po
new file mode 100644
index 00000000000..88aea141386
--- /dev/null
+++ b/l10n/et_EE/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/et_EE/user_openid.po b/l10n/et_EE/user_openid.po
new file mode 100644
index 00000000000..8be57b5de20
--- /dev/null
+++ b/l10n/et_EE/user_openid.po
@@ -0,0 +1,55 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Rivo Zängov <eraser@eraser.ee>, 2012.
+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:48+0000\n"
+"Last-Translator: Rivo Zängov <eraser@eraser.ee>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr "See on OpenID serveri lõpp-punkt. Lisainfot vaata"
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr "Identiteet: <b>"
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr "Tsoon: <b>"
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/eu/admin_dependencies_chk.po b/l10n/eu/admin_dependencies_chk.po
new file mode 100644
index 00000000000..92e7dfc1a3c
--- /dev/null
+++ b/l10n/eu/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/eu/admin_migrate.po b/l10n/eu/admin_migrate.po
new file mode 100644
index 00000000000..c810a7d4520
--- /dev/null
+++ b/l10n/eu/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/eu/bookmarks.po b/l10n/eu/bookmarks.po
new file mode 100644
index 00000000000..d443167a5ba
--- /dev/null
+++ b/l10n/eu/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/eu/calendar.po b/l10n/eu/calendar.po
index 15d3461f55a..9617f72ac3b 100644
--- a/l10n/eu/calendar.po
+++ b/l10n/eu/calendar.po
@@ -10,21 +10,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Basque (http://www.transifex.net/projects/p/owncloud/language/eu/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr "Egutegi guztiak ez daude guztiz cacheatuta"
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr "Dena guztiz cacheatuta dagoela dirudi"
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Ez da egutegirik aurkitu."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Ez da gertaerarik aurkitu."
@@ -32,300 +40,394 @@ msgstr "Ez da gertaerarik aurkitu."
msgid "Wrong calendar"
msgstr "Egutegi okerra"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr "Fitxategiak ez zuen gertaerarik edo gertaera guztiak dagoeneko egutegian gordeta zeuden."
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr "gertaerak egutegi berrian gorde dira"
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr "Inportazioak huts egin du"
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr "gertaerak zure egutegian gorde dira"
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Ordu-zonalde berria"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Ordu-zonaldea aldatuta"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Baliogabeko eskaera"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Egutegia"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
msgstr ""
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
msgstr ""
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
msgstr ""
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "yyyy MMMM"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr ""
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Jaioteguna"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Negozioa"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Deia"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Bezeroak"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Banatzailea"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Oporrak"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Ideiak"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Bidaia"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Urteurrena"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Bilera"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Bestelakoa"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Pertsonala"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Proiektuak"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Galderak"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Lana"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "izengabea"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Egutegi berria"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Ez da errepikatzen"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Egunero"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Astero"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Asteko egun guztietan"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Bi-Astero"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Hilabetero"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Urtero"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "inoiz"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "errepikapen kopuruagatik"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "dataren arabera"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "hileko egunaren arabera"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "asteko egunaren arabera"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Astelehena"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Asteartea"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Asteazkena"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Osteguna"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Ostirala"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Larunbata"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Igandea"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "gertaeraren hilabeteko astea"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "lehenengoa"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "bigarrean"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "hirugarrena"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "laugarrena"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "bostgarrena"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "azkena"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Urtarrila"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Otsaila"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Martxoa"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Apirila"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Maiatza"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Ekaina"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Uztaila"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "Abuztua"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "Iraila"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Urria"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "Azaroa"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Abendua"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "gertaeren dataren arabera"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "urteko egunaren arabera"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "aste zenbaki(ar)en arabera"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "eguna eta hilabetearen arabera"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Data"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Eg."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr "ig."
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr "al."
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr "ar."
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr "az."
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr "og."
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr "ol."
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr "lr."
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr "urt."
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr "ots."
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr "mar."
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr "api."
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr "mai."
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr "eka."
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr "uzt."
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr "abu."
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr "ira."
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr "urr."
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr "aza."
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr "abe."
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Egun guztia"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Egutegi berria"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Eremuak faltan"
@@ -359,40 +461,32 @@ msgstr "Gertaera hasi baino lehen bukatzen da"
msgid "There was a database fail"
msgstr "Datu-baseak huts egin du"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Astea"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Hilabetea"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Zerrenda"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Gaur"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Egutegiak"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Huts bat egon da, fitxategia aztertzen zen bitartea."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Aukeratu egutegi aktiboak"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Zure egutegiak"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDav lotura"
@@ -404,19 +498,19 @@ msgstr "Elkarbanatutako egutegiak"
msgid "No shared calendars"
msgstr "Ez dago elkarbanatutako egutegirik"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Elkarbanatu egutegia"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Deskargatu"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Editatu"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Ezabatu"
@@ -502,23 +596,23 @@ msgstr "Banatu kategoriak komekin"
msgid "Edit categories"
msgstr "Editatu kategoriak"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Egun osoko gertaera"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Hasiera"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Bukaera"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Aukera aurreratuak"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Kokalekua"
@@ -526,7 +620,7 @@ msgstr "Kokalekua"
msgid "Location of the Event"
msgstr "Gertaeraren kokalekua"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Deskribapena"
@@ -534,84 +628,86 @@ msgstr "Deskribapena"
msgid "Description of the Event"
msgstr "Gertaeraren deskribapena"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Errepikatu"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Aurreratua"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Hautatu asteko egunak"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Hautatu egunak"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "eta gertaeraren urteko eguna."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "eta gertaeraren hilabeteko eguna."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Hautatu hilabeteak"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Hautatu asteak"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "eta gertaeraren urteko astea."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Tartea"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Amaiera"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "errepikapenak"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "sortu egutegi berria"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Inportatu egutegi fitxategi bat"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Mesedez aukeratu egutegia"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "sortu egutegi berria"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr "Mesedez aukeratu egutegi bat."
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Egutegi berriaren izena"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importatu"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr "Hartu eskuragarri dagoen izen bat!"
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Egutegia inportatzen"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr "Izen hau duen egutegi bat dagoeneko existitzen da. Hala ere jarraitzen baduzu, egutegi hauek elkartuko dira."
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Egutegia ongi inportatu da"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Importatu"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Itxi lehioa"
@@ -627,45 +723,73 @@ msgstr "Ikusi gertaera bat"
msgid "No categories selected"
msgstr "Ez da kategoriarik hautatu"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Aukeratu kategoria"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr ""
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr ""
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Ordu-zonaldea"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Egiaztatu beti ordu-zonalde aldaketen bila"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Ordu formatua"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24h"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12h"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Asteko lehenego eguna"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr "Cache"
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr "Ezabatu gertaera errepikakorren cachea"
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Egutegiaren CalDAV sinkronizazio helbidea"
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr "Egutegiaren CalDAV sinkronizazio helbideak"
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr "informazio gehiago"
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr "Helbide nagusia"
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/eu/contacts.po b/l10n/eu/contacts.po
index 1009fa2d060..3cb1eea28f0 100644
--- a/l10n/eu/contacts.po
+++ b/l10n/eu/contacts.po
@@ -10,637 +10,770 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Basque (http://www.transifex.net/projects/p/owncloud/language/eu/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Errore bat egon da helbide-liburua (des)gaitzen"
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Errore bat egon da kontaktua gehitzerakoan"
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Ezin da propieta hutsa gehitu."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Behintzat helbide eremuetako bat bete behar da."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "IDa ez da ezarri."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr ""
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Ezin da helbide liburua eguneratu izen huts batekin."
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Errorea kontaktu propietatea gehitzean."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Errore bat egon da helbide liburua eguneratzen."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "Ez da IDrik eman"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
-msgstr ""
+msgstr "Errorea kontrol-batura ezartzean."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Ez dira ezabatzeko kategoriak hautatu."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Ez da helbide libururik aurkitu."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Ez da kontakturik aurkitu."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Errore bat egon da kontaktua gehitzerakoan"
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "elementuaren izena ez da ezarri."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr "Ezin izan da kontaktua analizatu:"
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Ezin da propieta hutsa gehitu."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Behintzat helbide eremuetako bat bete behar da."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "Propietate bikoiztuta gehitzen saiatzen ari zara:"
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "vCard-aren inguruko informazioa okerra da. Mesedez birkargatu orrialdea."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "ID falta da"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
-msgstr ""
+msgstr "Errorea VCard analizatzean hurrengo IDrako: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr ""
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "Kontrol-batura ezarri gabe dago."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Errore bat egon da helbide liburua gehitzean."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "vCard honen informazioa ez da zuzena.Mezedez birkargatu orria:"
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Errore bat egon da helbide-liburua aktibatzen."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr ""
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
-msgstr ""
+msgstr "Ez da kontaktuaren IDrik eman."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Errore bat izan da kontaktuaren argazkia igotzerakoan."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
-msgstr ""
+msgstr "Errore bat izan da aldi bateko fitxategia gordetzerakoan."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "Kargatzen ari den argazkia ez da egokia."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "IDa ez da ezarri."
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "vCard-aren inguruko informazioa okerra da. Mesedez birkargatu orrialdea."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Errorea kontaktu propietatea ezabatzean."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "Kontaktuaren IDa falta da."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "Kontaktuaren IDa falta da."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
-msgstr ""
+msgstr "Ez da argazkiaren bide-izenik eman."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Fitxategia ez da existitzen:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Errore bat izan da irudia kargatzearkoan."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Errore bat izan da kontaktu objetua lortzean."
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Errore bat izan da PHOTO propietatea lortzean."
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Errore bat izan da kontaktua gordetzean."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Errore bat izan da irudiaren tamaina aldatzean"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Errore bat izan da irudia mozten"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Errore bat izan da aldi bateko irudia sortzen"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "elementuaren izena ez da ezarri."
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr ""
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr ""
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Errorea kontaktu propietatea eguneratzean."
+msgstr "Ezin izan da irudia aurkitu:"
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "Ezin da helbide liburua eguneratu izen huts batekin."
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Errore bat egon da helbide liburua eguneratzen."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "Errore bat egon da kontaktuak biltegira igotzerakoan."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Ez da errorerik egon, fitxategia ongi igo da"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
-msgstr ""
+msgstr "Igotako fitxategia php.ini fitxategiko upload_max_filesize direktiba baino handiagoa da"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
-msgstr ""
+msgstr "Igotako fitxategia HTML formularioan zehaztutako MAX_FILE_SIZE direktiba baino handidagoa da."
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "Igotako fitxategiaren zati bat bakarrik igo da"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Ez da fitxategirik igo"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Aldi bateko karpeta falta da"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Ezin izan da aldi bateko irudia gorde:"
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Ezin izan da aldi bateko irudia kargatu:"
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Ez da fitxategirik igo. Errore ezezaguna"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Kontaktuak"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Barkatu, aukera hau ez da oriandik inplementatu"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "Inplementatu gabe"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Ezin izan da eposta baliagarri bat hartu."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Errorea"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Propietate hau ezin da hutsik egon."
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "Ezin izan dira elementuak serializatu."
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "'deleteProperty' argumenturik gabe deitu da. Mezedez abisatu bugs.owncloud.org-en"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Editatu izena"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Ez duzu igotzeko fitxategirik hautatu."
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "Igo nahi duzun fitxategia zerbitzariak onartzen duen tamaina baino handiagoa da."
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
-
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "Askatu VCF fitxategia kontaktuak inportatzeko."
+msgstr "Hautatu mota"
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1494
+#: js/loader.js:49
+msgid "Result: "
+msgstr "Emaitza:"
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr " inportatua, "
+
+#: js/loader.js:49
+msgid " failed."
+msgstr "huts egin du."
+
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Hau ez da zure helbide liburua."
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Ezin izan da kontaktua aurkitu."
+
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Helbide liburua ez da aurkitu"
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Hau ez da zure helbide liburua."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Ezin izan da kontaktua aurkitu."
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Helbidea"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefonoa"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "Eposta"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Erakundea"
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Lana"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Etxea"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr "Bestelakoa"
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mugikorra"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Testua"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Ahotsa"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Mezua"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fax-a"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Bideoa"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Bilagailua"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Jaioteguna"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr "Deia"
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr "Bezeroak"
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr "Oporrak"
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr "Ideiak"
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr "Bidaia"
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr "Bilera"
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr "Pertsonala"
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr "Proiektuak"
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr "Galderak"
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "{name}ren jaioteguna"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Kontaktua"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Gehitu kontaktua"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Inportatu"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr "Ezarpenak"
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Helbide Liburuak"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Konfiguratu Helbide Liburuak"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Itxi"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Helbide-liburu berria"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr "Teklatuaren lasterbideak"
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "VCFtik inportatu"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr "Nabigazioa"
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDav lotura"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr "Hurrengoa kontaktua zerrendan"
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Deskargatu"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr "Aurreko kontaktua zerrendan"
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Editatu"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr "Zabaldu/tolestu uneko helbide-liburua"
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Ezabatu"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Deskargatu kontaktua"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Ezabatu kontaktua"
+#: templates/index.php:54
+msgid "Actions"
+msgstr "Ekintzak"
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr "Gaurkotu kontaktuen zerrenda"
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr "Gehitu kontaktu berria"
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr "Gehitu helbide-liburu berria"
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr "Ezabatu uneko kontaktuak"
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Askatu argazkia igotzeko"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Ezabatu oraingo argazkia"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Editatu oraingo argazkia"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Igo argazki berria"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Hautatu argazki bat ownCloudetik"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr ""
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Editatu izenaren zehaztasunak"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Erakundea"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Ezabatu"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Ezizena"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Sartu ezizena"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Jaioteguna"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr "Web orria"
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr "http://www.webgunea.com"
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr "Web orrira joan"
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "yyyy-mm-dd"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Taldeak"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Banatu taldeak komekin"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Editatu taldeak"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Hobetsia"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Mesedez sartu eposta helbide egoki bat"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Sartu eposta helbidea"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "Bidali helbidera"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Ezabatu eposta helbidea"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Sartu telefono zenbakia"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Ezabatu telefono zenbakia"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Ikusi mapan"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Editatu helbidearen zehaztasunak"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Gehitu oharrak hemen."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Gehitu eremua"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Profilaren irudia"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefonoa"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Oharra"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "Eposta"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Ezabatu oraingo argazkia"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Editatu oraingo argazkia"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Helbidea"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Igo argazki berria"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Oharra"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Hautatu argazki bat ownCloudetik"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Deskargatu kontaktua"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Ezabatu kontaktua"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "Aldi bateko irudia cachetik ezabatu da."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Editatu helbidea"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Mota"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Posta kutxa"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr "Kalearen helbidea"
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr "Kalea eta zenbakia"
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Hedatua"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Kalea"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr "Etxe zenbakia eab."
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Hiria"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Eskualdea"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Posta kodea"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr "Posta kodea"
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "Herrialdea"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Editatu kategoriak"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Gehitu"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Helbide-liburua"
@@ -721,35 +854,6 @@ msgstr ""
msgid "Sn."
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Helbide-liburu berria"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Editatu helbide-liburua"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Bistaratzeko izena"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Aktibo"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Gorde"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Bidali"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Ezeztatu"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "Inporatu kontaktuen fitxategia"
@@ -766,57 +870,86 @@ msgstr "sortu helbide liburu berria"
msgid "Name of new addressbook"
msgstr "Helbide liburuaren izena"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Inportatu"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "Kontaktuak inportatzen"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "Hautau helburuko helbide liburua:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "Hautatu disko gogorretik"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "Ez duzu kontakturik zure helbide liburuan."
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Gehitu kontaktua"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Konfiguratu helbide liburuak"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr "Hautatu helbide-liburuak"
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr "Sartu izena"
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr "Sartu deskribapena"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "CardDAV sinkronizazio helbideak"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "informazio gehiago"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "Helbide nagusia"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Deskargatu"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Editatu"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Helbide-liburu berria"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Gorde"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Ezeztatu"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/eu/core.po b/l10n/eu/core.po
index 070d14864c6..f758d66577b 100644
--- a/l10n/eu/core.po
+++ b/l10n/eu/core.po
@@ -9,10 +9,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Basque (http://www.transifex.net/projects/p/owncloud/language/eu/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -33,85 +33,85 @@ msgstr "Kategoria hau dagoeneko existitzen da:"
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Ezarpenak"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Urtarrila"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Otsaila"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Martxoa"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "Apirila"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Maiatza"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Ekaina"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Uztaila"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "Abuztua"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "Iraila"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Urria"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "Azaroa"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "Abendua"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Ezeztatu"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Ez"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Bai"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Ados"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Ez da ezabatzeko kategoriarik hautatu."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Errorea"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Owncloudeko pasahitza berrezarri"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "ownCloud-en pasahitza berrezarri"
@@ -241,14 +241,10 @@ msgstr "Bukatu konfigurazioa"
msgid "web services under your control"
msgstr "web zerbitzuak zure kontrolpean"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Saioa bukatu"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Ezarpenak"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Galdu duzu pasahitza?"
diff --git a/l10n/eu/files.po b/l10n/eu/files.po
index 28b55a998c2..d450fd0522e 100644
--- a/l10n/eu/files.po
+++ b/l10n/eu/files.po
@@ -9,43 +9,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Basque (http://www.transifex.net/projects/p/owncloud/language/eu/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Ez da arazorik izan, fitxategia ongi igo da"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Igotako fitxategiaren tamaina php.ini-ko upload_max_filesize direktiban adierazitakoa baino handiagoa da"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Igotako fitxategiaren zati bat baino gehiago ez da igo"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Ez da fitxategirik igo"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Aldi baterako karpeta falta da"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Errore bat izan da diskoan idazterakoan"
@@ -53,57 +53,85 @@ msgstr "Errore bat izan da diskoan idazterakoan"
msgid "Files"
msgstr "Fitxategiak"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Ezabatu"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "dagoeneko existitzen da"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "ordeztu"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "ezeztatu"
-#: js/files.js:170
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "ordeztua"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "honekin"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "desegin"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "ezabatuta"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "ZIP-fitxategia sortzen ari da, denbora har dezake"
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Ezin da zure fitxategia igo, karpeta bat da edo 0 byt ditu"
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "Igotzean errore bat suertatu da"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "Zain"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "Igoera ezeztatuta"
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "Baliogabeko izena, '/' ezin da erabili. "
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Tamaina"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Aldatuta"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "karpeta"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "Karpetak"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "fitxategia"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "fitxategiak"
#: templates/admin.php:5
msgid "File handling"
@@ -173,10 +201,6 @@ msgstr "Elkarbanatu"
msgid "Download"
msgstr "Deskargatu"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Ezabatu"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Igotakoa handiegia da"
diff --git a/l10n/eu/files_encryption.po b/l10n/eu/files_encryption.po
new file mode 100644
index 00000000000..7b883fb9a8d
--- /dev/null
+++ b/l10n/eu/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/eu/files_external.po b/l10n/eu/files_external.po
new file mode 100644
index 00000000000..488f5829183
--- /dev/null
+++ b/l10n/eu/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/eu/files_sharing.po b/l10n/eu/files_sharing.po
new file mode 100644
index 00000000000..d316bfa6499
--- /dev/null
+++ b/l10n/eu/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/eu/files_versions.po b/l10n/eu/files_versions.po
new file mode 100644
index 00000000000..d2da93b8df5
--- /dev/null
+++ b/l10n/eu/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/eu/lib.po b/l10n/eu/lib.po
new file mode 100644
index 00000000000..f8625e4759e
--- /dev/null
+++ b/l10n/eu/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/eu/settings.po b/l10n/eu/settings.po
index cca5da2a9cc..d7ebcc2b282 100644
--- a/l10n/eu/settings.po
+++ b/l10n/eu/settings.po
@@ -10,77 +10,109 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Basque (http://www.transifex.net/projects/p/owncloud/language/eu/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "Eposta gorde da"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Baliogabeko eposta"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID aldatuta"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Baliogabeko eskaria"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Autentifikazio errorea"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Hizkuntza aldatuta"
-#: js/apps.js:31 js/apps.js:67
-msgid "Disable"
+#: js/apps.js:18
+msgid "Error"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr "Ez-gaitu"
+
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Gaitu"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Gordetzen..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "Euskera"
-#: templates/admin.php:13
-msgid "Log"
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "Segurtasun abisua"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
msgstr ""
-#: templates/admin.php:40
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
+msgid "Log"
+msgstr "Egunkaria"
+
+#: templates/admin.php:67
msgid "More"
msgstr "Gehiago"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Gehitu zure aplikazioa"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Aukeratu programa bat"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Ikusi programen orria apps.owncloud.com en"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "lizentziarekin"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr " Egilea:"
@@ -172,34 +204,38 @@ msgstr "Lagundu itzultzen"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "erabili helbide hau zure fitxategi kudeatzailean zure ownCloudera konektatzeko"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Izena"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Pasahitza"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Taldeak"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Sortu"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
-msgstr ""
+msgstr "Kuota lehentsia"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Besteak"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Kuota"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Ezabatu"
diff --git a/l10n/eu/tasks.po b/l10n/eu/tasks.po
new file mode 100644
index 00000000000..4ed8bae41d3
--- /dev/null
+++ b/l10n/eu/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/eu/user_ldap.po b/l10n/eu/user_ldap.po
new file mode 100644
index 00000000000..a948e44d5cf
--- /dev/null
+++ b/l10n/eu/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/eu/user_migrate.po b/l10n/eu/user_migrate.po
new file mode 100644
index 00000000000..395533a4806
--- /dev/null
+++ b/l10n/eu/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/eu/user_openid.po b/l10n/eu/user_openid.po
new file mode 100644
index 00000000000..917f83859aa
--- /dev/null
+++ b/l10n/eu/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/eu_ES/admin_dependencies_chk.po b/l10n/eu_ES/admin_dependencies_chk.po
new file mode 100644
index 00000000000..931550cd288
--- /dev/null
+++ b/l10n/eu_ES/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu_ES\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/eu_ES/admin_migrate.po b/l10n/eu_ES/admin_migrate.po
new file mode 100644
index 00000000000..9bc05a4241e
--- /dev/null
+++ b/l10n/eu_ES/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu_ES\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/eu_ES/bookmarks.po b/l10n/eu_ES/bookmarks.po
new file mode 100644
index 00000000000..c012dfcd465
--- /dev/null
+++ b/l10n/eu_ES/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-31 22:53+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu_ES\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/eu_ES/calendar.po b/l10n/eu_ES/calendar.po
new file mode 100644
index 00000000000..24f487f526e
--- /dev/null
+++ b/l10n/eu_ES/calendar.po
@@ -0,0 +1,813 @@
+# 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: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu_ES\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
+msgid "No calendars found."
+msgstr ""
+
+#: ajax/categories/rescan.php:37
+msgid "No events found."
+msgstr ""
+
+#: ajax/event/edit.form.php:20
+msgid "Wrong calendar"
+msgstr ""
+
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
+#: ajax/settings/guesstimezone.php:25
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settings/settimezone.php:23
+msgid "Timezone changed"
+msgstr ""
+
+#: ajax/settings/settimezone.php:25
+msgid "Invalid request"
+msgstr ""
+
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
+msgid "Calendar"
+msgstr ""
+
+#: js/calendar.js:832
+msgid "ddd"
+msgstr ""
+
+#: js/calendar.js:833
+msgid "ddd M/d"
+msgstr ""
+
+#: js/calendar.js:834
+msgid "dddd M/d"
+msgstr ""
+
+#: js/calendar.js:837
+msgid "MMMM yyyy"
+msgstr ""
+
+#: js/calendar.js:839
+msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
+msgstr ""
+
+#: js/calendar.js:841
+msgid "dddd, MMM d, yyyy"
+msgstr ""
+
+#: lib/app.php:121
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:122
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:123
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:124
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:125
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:126
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:127
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:128
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:129
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:130
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:131
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:132
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:133
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:134
+msgid "Questions"
+msgstr ""
+
+#: lib/app.php:135
+msgid "Work"
+msgstr ""
+
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
+msgid "unnamed"
+msgstr ""
+
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr ""
+
+#: lib/object.php:372
+msgid "Does not repeat"
+msgstr ""
+
+#: lib/object.php:373
+msgid "Daily"
+msgstr ""
+
+#: lib/object.php:374
+msgid "Weekly"
+msgstr ""
+
+#: lib/object.php:375
+msgid "Every Weekday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "Bi-Weekly"
+msgstr ""
+
+#: lib/object.php:377
+msgid "Monthly"
+msgstr ""
+
+#: lib/object.php:378
+msgid "Yearly"
+msgstr ""
+
+#: lib/object.php:388
+msgid "never"
+msgstr ""
+
+#: lib/object.php:389
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:390
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:400
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:401
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:412 templates/calendar.php:5
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:413 templates/calendar.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:414 templates/calendar.php:5
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:415 templates/calendar.php:5
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:416 templates/calendar.php:5
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:427
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:428
+msgid "first"
+msgstr ""
+
+#: lib/object.php:429
+msgid "second"
+msgstr ""
+
+#: lib/object.php:430
+msgid "third"
+msgstr ""
+
+#: lib/object.php:431
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:432
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:433
+msgid "last"
+msgstr ""
+
+#: lib/object.php:467 templates/calendar.php:7
+msgid "January"
+msgstr ""
+
+#: lib/object.php:468 templates/calendar.php:7
+msgid "February"
+msgstr ""
+
+#: lib/object.php:469 templates/calendar.php:7
+msgid "March"
+msgstr ""
+
+#: lib/object.php:470 templates/calendar.php:7
+msgid "April"
+msgstr ""
+
+#: lib/object.php:471 templates/calendar.php:7
+msgid "May"
+msgstr ""
+
+#: lib/object.php:472 templates/calendar.php:7
+msgid "June"
+msgstr ""
+
+#: lib/object.php:473 templates/calendar.php:7
+msgid "July"
+msgstr ""
+
+#: lib/object.php:474 templates/calendar.php:7
+msgid "August"
+msgstr ""
+
+#: lib/object.php:475 templates/calendar.php:7
+msgid "September"
+msgstr ""
+
+#: lib/object.php:476 templates/calendar.php:7
+msgid "October"
+msgstr ""
+
+#: lib/object.php:477 templates/calendar.php:7
+msgid "November"
+msgstr ""
+
+#: lib/object.php:478 templates/calendar.php:7
+msgid "December"
+msgstr ""
+
+#: lib/object.php:488
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:489
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:490
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:491
+msgid "by day and month"
+msgstr ""
+
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:43
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
+#: templates/calendar.php:11
+msgid "All day"
+msgstr ""
+
+#: templates/calendar.php:13
+msgid "Missing fields"
+msgstr ""
+
+#: templates/calendar.php:14 templates/part.eventform.php:19
+#: templates/part.showevent.php:11
+msgid "Title"
+msgstr ""
+
+#: templates/calendar.php:16
+msgid "From Date"
+msgstr ""
+
+#: templates/calendar.php:17
+msgid "From Time"
+msgstr ""
+
+#: templates/calendar.php:18
+msgid "To Date"
+msgstr ""
+
+#: templates/calendar.php:19
+msgid "To Time"
+msgstr ""
+
+#: templates/calendar.php:20
+msgid "The event ends before it starts"
+msgstr ""
+
+#: templates/calendar.php:21
+msgid "There was a database fail"
+msgstr ""
+
+#: templates/calendar.php:39
+msgid "Week"
+msgstr ""
+
+#: templates/calendar.php:40
+msgid "Month"
+msgstr ""
+
+#: templates/calendar.php:41
+msgid "List"
+msgstr ""
+
+#: templates/calendar.php:45
+msgid "Today"
+msgstr ""
+
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
+
+#: templates/part.choosecalendar.php:2
+msgid "Your calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.php:27
+#: templates/part.choosecalendar.rowfields.php:11
+msgid "CalDav Link"
+msgstr ""
+
+#: templates/part.choosecalendar.php:31
+msgid "Shared calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.php:48
+msgid "No shared calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:8
+msgid "Share Calendar"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:14
+msgid "Download"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:17
+msgid "Edit"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:20
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.shared.php:4
+msgid "shared with you by"
+msgstr ""
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr ""
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr ""
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr ""
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr ""
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr ""
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr ""
+
+#: templates/part.eventform.php:8 templates/part.showevent.php:3
+msgid "Eventinfo"
+msgstr ""
+
+#: templates/part.eventform.php:9 templates/part.showevent.php:4
+msgid "Repeating"
+msgstr ""
+
+#: templates/part.eventform.php:10 templates/part.showevent.php:5
+msgid "Alarm"
+msgstr ""
+
+#: templates/part.eventform.php:11 templates/part.showevent.php:6
+msgid "Attendees"
+msgstr ""
+
+#: templates/part.eventform.php:13
+msgid "Share"
+msgstr ""
+
+#: templates/part.eventform.php:21
+msgid "Title of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:27 templates/part.showevent.php:19
+msgid "Category"
+msgstr ""
+
+#: templates/part.eventform.php:29
+msgid "Separate categories with commas"
+msgstr ""
+
+#: templates/part.eventform.php:30
+msgid "Edit categories"
+msgstr ""
+
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
+msgid "All Day Event"
+msgstr ""
+
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
+msgid "From"
+msgstr ""
+
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
+msgid "To"
+msgstr ""
+
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
+msgid "Advanced options"
+msgstr ""
+
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
+msgid "Location"
+msgstr ""
+
+#: templates/part.eventform.php:83
+msgid "Location of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
+msgid "Description"
+msgstr ""
+
+#: templates/part.eventform.php:91
+msgid "Description of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
+msgid "Repeat"
+msgstr ""
+
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:164 templates/part.eventform.php:177
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
+
+#: templates/part.import.php:36
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
+
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
+
+#: templates/part.import.php:47
+msgid "Import"
+msgstr ""
+
+#: templates/part.import.php:56
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr ""
+
+#: templates/part.showevent.php:1
+msgid "View an event"
+msgstr ""
+
+#: templates/part.showevent.php:23
+msgid "No categories selected"
+msgstr ""
+
+#: templates/part.showevent.php:37
+msgid "of"
+msgstr ""
+
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
+msgid "at"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "Timezone"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
+
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
+
+#: templates/settings.php:57
+msgid "24h"
+msgstr ""
+
+#: templates/settings.php:58
+msgid "12h"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
+
+#: templates/share.dropdown.php:20
+msgid "Users"
+msgstr ""
+
+#: templates/share.dropdown.php:21
+msgid "select users"
+msgstr ""
+
+#: templates/share.dropdown.php:36 templates/share.dropdown.php:62
+msgid "Editable"
+msgstr ""
+
+#: templates/share.dropdown.php:48
+msgid "Groups"
+msgstr ""
+
+#: templates/share.dropdown.php:49
+msgid "select groups"
+msgstr ""
+
+#: templates/share.dropdown.php:75
+msgid "make public"
+msgstr ""
diff --git a/l10n/eu_ES/contacts.po b/l10n/eu_ES/contacts.po
new file mode 100644
index 00000000000..0ef5f51a80f
--- /dev/null
+++ b/l10n/eu_ES/contacts.po
@@ -0,0 +1,952 @@
+# 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: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu_ES\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr ""
+
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr ""
+
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr ""
+
+#: ajax/categories/categoriesfor.php:17
+msgid "No ID provided"
+msgstr ""
+
+#: ajax/categories/categoriesfor.php:34
+msgid "Error setting checksum."
+msgstr ""
+
+#: ajax/categories/delete.php:19
+msgid "No categories selected for deletion."
+msgstr ""
+
+#: ajax/categories/delete.php:26
+msgid "No address books found."
+msgstr ""
+
+#: ajax/categories/delete.php:34
+msgid "No contacts found."
+msgstr ""
+
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr ""
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr ""
+
+#: ajax/contact/details.php:31
+msgid "Missing ID"
+msgstr ""
+
+#: ajax/contact/details.php:36
+msgid "Error parsing VCard for ID: \""
+msgstr ""
+
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr ""
+
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr ""
+
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr ""
+
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
+#: ajax/uploadphoto.php:68
+msgid "No contact ID was submitted."
+msgstr ""
+
+#: ajax/currentphoto.php:36
+msgid "Error reading contact photo."
+msgstr ""
+
+#: ajax/currentphoto.php:48
+msgid "Error saving temporary file."
+msgstr ""
+
+#: ajax/currentphoto.php:51
+msgid "The loading photo is not valid."
+msgstr ""
+
+#: ajax/editname.php:31
+msgid "Contact ID is missing."
+msgstr ""
+
+#: ajax/oc_photo.php:32
+msgid "No photo path was submitted."
+msgstr ""
+
+#: ajax/oc_photo.php:39
+msgid "File doesn't exist:"
+msgstr ""
+
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
+msgid "Error loading image."
+msgstr ""
+
+#: ajax/savecrop.php:69
+msgid "Error getting contact object."
+msgstr ""
+
+#: ajax/savecrop.php:79
+msgid "Error getting PHOTO property."
+msgstr ""
+
+#: ajax/savecrop.php:98
+msgid "Error saving contact."
+msgstr ""
+
+#: ajax/savecrop.php:109
+msgid "Error resizing image"
+msgstr ""
+
+#: ajax/savecrop.php:112
+msgid "Error cropping image"
+msgstr ""
+
+#: ajax/savecrop.php:115
+msgid "Error creating temporary image"
+msgstr ""
+
+#: ajax/savecrop.php:118
+msgid "Error finding image: "
+msgstr ""
+
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
+msgid "Error uploading contacts to storage."
+msgstr ""
+
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
+msgid "Couldn't save temporary image: "
+msgstr ""
+
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
+msgid "Couldn't load temporary image: "
+msgstr ""
+
+#: ajax/uploadphoto.php:71
+msgid "No file was uploaded. Unknown error"
+msgstr ""
+
+#: appinfo/app.php:21
+msgid "Contacts"
+msgstr ""
+
+#: js/contacts.js:71
+msgid "Sorry, this functionality has not been implemented yet"
+msgstr ""
+
+#: js/contacts.js:71
+msgid "Not implemented"
+msgstr ""
+
+#: js/contacts.js:76
+msgid "Couldn't get a valid address."
+msgstr ""
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
+msgid "Error"
+msgstr ""
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Permission error"
+msgstr ""
+
+#: js/contacts.js:763
+msgid "This property has to be non-empty."
+msgstr ""
+
+#: js/contacts.js:789
+msgid "Couldn't serialize elements."
+msgstr ""
+
+#: js/contacts.js:921 js/contacts.js:939
+msgid ""
+"'deleteProperty' called without type argument. Please report at "
+"bugs.owncloud.org"
+msgstr ""
+
+#: js/contacts.js:958
+msgid "Edit name"
+msgstr ""
+
+#: js/contacts.js:1250
+msgid "No files selected for upload."
+msgstr ""
+
+#: js/contacts.js:1258
+msgid ""
+"The file you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr ""
+
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
+msgid "Select type"
+msgstr ""
+
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr ""
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr ""
+
+#: js/loader.js:49
+msgid "Result: "
+msgstr ""
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr ""
+
+#: js/loader.js:49
+msgid " failed."
+msgstr ""
+
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
+msgstr ""
+
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr ""
+
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr ""
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr ""
+
+#: lib/app.php:116
+msgid "Jabber"
+msgstr ""
+
+#: lib/app.php:121
+msgid "AIM"
+msgstr ""
+
+#: lib/app.php:126
+msgid "MSN"
+msgstr ""
+
+#: lib/app.php:131
+msgid "Twitter"
+msgstr ""
+
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr ""
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
+
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
+
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
+
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
+
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
+msgid "Work"
+msgstr ""
+
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
+msgid "Home"
+msgstr ""
+
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
+msgid "Mobile"
+msgstr ""
+
+#: lib/app.php:203
+msgid "Text"
+msgstr ""
+
+#: lib/app.php:204
+msgid "Voice"
+msgstr ""
+
+#: lib/app.php:205
+msgid "Message"
+msgstr ""
+
+#: lib/app.php:206
+msgid "Fax"
+msgstr ""
+
+#: lib/app.php:207
+msgid "Video"
+msgstr ""
+
+#: lib/app.php:208
+msgid "Pager"
+msgstr ""
+
+#: lib/app.php:215
+msgid "Internet"
+msgstr ""
+
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
+msgid "{name}'s Birthday"
+msgstr ""
+
+#: lib/search.php:15
+msgid "Contact"
+msgstr ""
+
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
+msgid "Add Contact"
+msgstr ""
+
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr ""
+
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
+
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
+
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
+
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
+
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
+
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
+
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
+
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
+
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
+msgid "Drop photo to upload"
+msgstr ""
+
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
+msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
+msgstr ""
+
+#: templates/part.contact.php:36
+msgid "Edit name details"
+msgstr ""
+
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr ""
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr ""
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
+msgid "Nickname"
+msgstr ""
+
+#: templates/part.contact.php:42
+msgid "Enter nickname"
+msgstr ""
+
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
+msgid "dd-mm-yyyy"
+msgstr ""
+
+#: templates/part.contact.php:47 templates/part.contact.php:135
+msgid "Groups"
+msgstr ""
+
+#: templates/part.contact.php:49
+msgid "Separate groups with commas"
+msgstr ""
+
+#: templates/part.contact.php:50
+msgid "Edit groups"
+msgstr ""
+
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.contact.php:60
+msgid "Please specify a valid email address."
+msgstr ""
+
+#: templates/part.contact.php:60
+msgid "Enter email address"
+msgstr ""
+
+#: templates/part.contact.php:64
+msgid "Mail to address"
+msgstr ""
+
+#: templates/part.contact.php:65
+msgid "Delete email address"
+msgstr ""
+
+#: templates/part.contact.php:75
+msgid "Enter phone number"
+msgstr ""
+
+#: templates/part.contact.php:79
+msgid "Delete phone number"
+msgstr ""
+
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
+msgid "View on map"
+msgstr ""
+
+#: templates/part.contact.php:110
+msgid "Edit address details"
+msgstr ""
+
+#: templates/part.contact.php:116
+msgid "Add notes here."
+msgstr ""
+
+#: templates/part.contact.php:124
+msgid "Add field"
+msgstr ""
+
+#: templates/part.contact.php:129
+msgid "Phone"
+msgstr ""
+
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr ""
+
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
+
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr ""
+
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr ""
+
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.cropphoto.php:65
+msgid "The temporary image has been removed from cache."
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:6
+msgid "Edit address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:10
+msgid "Type"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
+msgid "PO Box"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
+msgid "Extended"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
+msgid "City"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:42
+msgid "Region"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
+msgid "Zipcode"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:16
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:23
+msgid "Hon. prefixes"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:27
+msgid "Miss"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:28
+msgid "Ms"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:29
+msgid "Mr"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:30
+msgid "Sir"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:31
+msgid "Mrs"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:32
+msgid "Dr"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:35
+msgid "Given name"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:37
+msgid "Additional names"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:39
+msgid "Family name"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:41
+msgid "Hon. suffixes"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:45
+msgid "J.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:46
+msgid "M.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:47
+msgid "D.O."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:48
+msgid "D.C."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:49
+msgid "Ph.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:50
+msgid "Esq."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:51
+msgid "Jr."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:52
+msgid "Sn."
+msgstr ""
+
+#: templates/part.import.php:1
+msgid "Import a contacts file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the addressbook"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new addressbook"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new addressbook"
+msgstr ""
+
+#: templates/part.import.php:20
+msgid "Importing contacts"
+msgstr ""
+
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
+msgstr ""
+
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "CardDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr ""
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr ""
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr ""
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/eu_ES/core.po b/l10n/eu_ES/core.po
new file mode 100644
index 00000000000..0a342ad7e02
--- /dev/null
+++ b/l10n/eu_ES/core.po
@@ -0,0 +1,268 @@
+# 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: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu_ES\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/vcategories/add.php:23 ajax/vcategories/delete.php:23
+msgid "Application name not provided."
+msgstr ""
+
+#: ajax/vcategories/add.php:29
+msgid "No category to add?"
+msgstr ""
+
+#: ajax/vcategories/add.php:36
+msgid "This category already exists: "
+msgstr ""
+
+#: js/jquery-ui-1.8.16.custom.min.js:511
+msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+msgstr ""
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr ""
+
+#: js/js.js:573
+msgid "January"
+msgstr ""
+
+#: js/js.js:573
+msgid "February"
+msgstr ""
+
+#: js/js.js:573
+msgid "March"
+msgstr ""
+
+#: js/js.js:573
+msgid "April"
+msgstr ""
+
+#: js/js.js:573
+msgid "May"
+msgstr ""
+
+#: js/js.js:573
+msgid "June"
+msgstr ""
+
+#: js/js.js:574
+msgid "July"
+msgstr ""
+
+#: js/js.js:574
+msgid "August"
+msgstr ""
+
+#: js/js.js:574
+msgid "September"
+msgstr ""
+
+#: js/js.js:574
+msgid "October"
+msgstr ""
+
+#: js/js.js:574
+msgid "November"
+msgstr ""
+
+#: js/js.js:574
+msgid "December"
+msgstr ""
+
+#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:159
+msgid "No"
+msgstr ""
+
+#: js/oc-dialogs.js:160
+msgid "Yes"
+msgstr ""
+
+#: js/oc-dialogs.js:177
+msgid "Ok"
+msgstr ""
+
+#: js/oc-vcategories.js:68
+msgid "No categories selected for deletion."
+msgstr ""
+
+#: js/oc-vcategories.js:68
+msgid "Error"
+msgstr ""
+
+#: lostpassword/index.php:26
+msgid "ownCloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+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 "Requested"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:25
+#: templates/login.php:9
+msgid "Username"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:15
+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:14
+msgid "Add"
+msgstr ""
+
+#: templates/installation.php:23
+msgid "Create an <strong>admin account</strong>"
+msgstr ""
+
+#: templates/installation.php:29 templates/login.php:13
+msgid "Password"
+msgstr ""
+
+#: templates/installation.php:35
+msgid "Advanced"
+msgstr ""
+
+#: templates/installation.php:37
+msgid "Data folder"
+msgstr ""
+
+#: templates/installation.php:44
+msgid "Configure the database"
+msgstr ""
+
+#: templates/installation.php:49 templates/installation.php:60
+#: templates/installation.php:70
+msgid "will be used"
+msgstr ""
+
+#: templates/installation.php:82
+msgid "Database user"
+msgstr ""
+
+#: templates/installation.php:86
+msgid "Database password"
+msgstr ""
+
+#: templates/installation.php:90
+msgid "Database name"
+msgstr ""
+
+#: templates/installation.php:96
+msgid "Database host"
+msgstr ""
+
+#: templates/installation.php:101
+msgid "Finish setup"
+msgstr ""
+
+#: templates/layout.guest.php:42
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:49
+msgid "Log out"
+msgstr ""
+
+#: templates/login.php:6
+msgid "Lost your password?"
+msgstr ""
+
+#: templates/login.php:17
+msgid "remember"
+msgstr ""
+
+#: templates/login.php:18
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr ""
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr ""
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr ""
diff --git a/l10n/eu_ES/files.po b/l10n/eu_ES/files.po
new file mode 100644
index 00000000000..cf36b73d5b6
--- /dev/null
+++ b/l10n/eu_ES/files.po
@@ -0,0 +1,218 @@
+# 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: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu_ES\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/upload.php:20
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/upload.php:21
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: ajax/upload.php:22
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/upload.php:23
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/upload.php:24
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/upload.php:25
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/upload.php:26
+msgid "Failed to write to disk"
+msgstr ""
+
+#: appinfo/app.php:6
+msgid "Files"
+msgstr ""
+
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
+msgid "generating ZIP-file, it may take some time."
+msgstr ""
+
+#: js/files.js:200
+msgid "Unable to upload your file as it is a directory or has 0 bytes"
+msgstr ""
+
+#: js/files.js:200
+msgid "Upload Error"
+msgstr ""
+
+#: js/files.js:228 js/files.js:319 js/files.js:348
+msgid "Pending"
+msgstr ""
+
+#: js/files.js:333
+msgid "Upload cancelled."
+msgstr ""
+
+#: js/files.js:457
+msgid "Invalid name, '/' is not allowed."
+msgstr ""
+
+#: js/files.js:703 templates/index.php:55
+msgid "Size"
+msgstr ""
+
+#: js/files.js:704 templates/index.php:56
+msgid "Modified"
+msgstr ""
+
+#: js/files.js:731
+msgid "folder"
+msgstr ""
+
+#: js/files.js:733
+msgid "folders"
+msgstr ""
+
+#: js/files.js:741
+msgid "file"
+msgstr ""
+
+#: js/files.js:743
+msgid "files"
+msgstr ""
+
+#: templates/admin.php:5
+msgid "File handling"
+msgstr ""
+
+#: templates/admin.php:7
+msgid "Maximum upload size"
+msgstr ""
+
+#: templates/admin.php:7
+msgid "max. possible: "
+msgstr ""
+
+#: templates/admin.php:9
+msgid "Needed for multi-file and folder downloads."
+msgstr ""
+
+#: templates/admin.php:9
+msgid "Enable ZIP-download"
+msgstr ""
+
+#: templates/admin.php:11
+msgid "0 is unlimited"
+msgstr ""
+
+#: templates/admin.php:12
+msgid "Maximum input size for ZIP files"
+msgstr ""
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:11
+msgid "From url"
+msgstr ""
+
+#: templates/index.php:21
+msgid "Upload"
+msgstr ""
+
+#: templates/index.php:27
+msgid "Cancel upload"
+msgstr ""
+
+#: templates/index.php:39
+msgid "Nothing in here. Upload something!"
+msgstr ""
+
+#: templates/index.php:47
+msgid "Name"
+msgstr ""
+
+#: templates/index.php:49
+msgid "Share"
+msgstr ""
+
+#: templates/index.php:51
+msgid "Download"
+msgstr ""
+
+#: templates/index.php:64
+msgid "Upload too large"
+msgstr ""
+
+#: templates/index.php:66
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: templates/index.php:71
+msgid "Files are being scanned, please wait."
+msgstr ""
+
+#: templates/index.php:74
+msgid "Current scanning"
+msgstr ""
diff --git a/l10n/eu_ES/files_encryption.po b/l10n/eu_ES/files_encryption.po
new file mode 100644
index 00000000000..04e045a38ef
--- /dev/null
+++ b/l10n/eu_ES/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu_ES\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/eu_ES/files_external.po b/l10n/eu_ES/files_external.po
new file mode 100644
index 00000000000..37af2e3b7fa
--- /dev/null
+++ b/l10n/eu_ES/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu_ES\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/eu_ES/files_sharing.po b/l10n/eu_ES/files_sharing.po
new file mode 100644
index 00000000000..0ba46e6c77a
--- /dev/null
+++ b/l10n/eu_ES/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu_ES\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/eu_ES/files_versions.po b/l10n/eu_ES/files_versions.po
new file mode 100644
index 00000000000..e27dd7812a5
--- /dev/null
+++ b/l10n/eu_ES/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu_ES\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/eu_ES/gallery.po b/l10n/eu_ES/gallery.po
new file mode 100644
index 00000000000..54096c308b2
--- /dev/null
+++ b/l10n/eu_ES/gallery.po
@@ -0,0 +1,58 @@
+# 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: 2012-07-31 22:53+0200\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu_ES\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:39
+msgid "Pictures"
+msgstr ""
+
+#: js/pictures.js:12
+msgid "Share gallery"
+msgstr ""
+
+#: js/pictures.js:32
+msgid "Error: "
+msgstr ""
+
+#: js/pictures.js:32
+msgid "Internal error"
+msgstr ""
+
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+#: templates/view_album.php:36
+msgid "Remove confirmation"
+msgstr ""
+
+#: templates/view_album.php:37
+msgid "Do you want to remove album"
+msgstr ""
+
+#: templates/view_album.php:40
+msgid "Change album name"
+msgstr ""
+
+#: templates/view_album.php:43
+msgid "New album name"
+msgstr ""
diff --git a/l10n/eu_ES/lib.po b/l10n/eu_ES/lib.po
new file mode 100644
index 00000000000..366fbd9fb9c
--- /dev/null
+++ b/l10n/eu_ES/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-31 22:53+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu_ES\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/eu_ES/media.po b/l10n/eu_ES/media.po
new file mode 100644
index 00000000000..7b6fee29b9c
--- /dev/null
+++ b/l10n/eu_ES/media.po
@@ -0,0 +1,66 @@
+# 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: 2012-07-31 22:53+0200\n"
+"PO-Revision-Date: 2011-08-13 02:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu_ES\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:45 templates/player.php:8
+msgid "Music"
+msgstr ""
+
+#: js/music.js:18
+msgid "Add album to playlist"
+msgstr ""
+
+#: templates/music.php:3 templates/player.php:12
+msgid "Play"
+msgstr ""
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:13
+msgid "Pause"
+msgstr ""
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr ""
+
+#: templates/music.php:6 templates/player.php:14
+msgid "Next"
+msgstr ""
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr ""
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr ""
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr ""
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr ""
+
+#: templates/music.php:38
+msgid "Album"
+msgstr ""
+
+#: templates/music.php:39
+msgid "Title"
+msgstr ""
diff --git a/l10n/eu_ES/settings.po b/l10n/eu_ES/settings.po
new file mode 100644
index 00000000000..82cc89a6207
--- /dev/null
+++ b/l10n/eu_ES/settings.po
@@ -0,0 +1,238 @@
+# 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: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu_ES\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
+#: ajax/lostpassword.php:14
+msgid "Email saved"
+msgstr ""
+
+#: ajax/lostpassword.php:16
+msgid "Invalid email"
+msgstr ""
+
+#: ajax/openid.php:16
+msgid "OpenID Changed"
+msgstr ""
+
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
+msgid "Invalid request"
+msgstr ""
+
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
+msgid "Language changed"
+msgstr ""
+
+#: js/apps.js:18
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:62
+msgid "Enable"
+msgstr ""
+
+#: js/personal.js:69
+msgid "Saving..."
+msgstr ""
+
+#: personal.php:46 personal.php:47
+msgid "__language_name__"
+msgstr ""
+
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
+msgid "Log"
+msgstr ""
+
+#: templates/admin.php:67
+msgid "More"
+msgstr ""
+
+#: templates/apps.php:10
+msgid "Add your App"
+msgstr ""
+
+#: templates/apps.php:26
+msgid "Select an App"
+msgstr ""
+
+#: templates/apps.php:29
+msgid "See application page at apps.owncloud.com"
+msgstr ""
+
+#: templates/apps.php:30
+msgid "-licensed"
+msgstr ""
+
+#: templates/apps.php:30
+msgid "by"
+msgstr ""
+
+#: templates/help.php:8
+msgid "Documentation"
+msgstr ""
+
+#: templates/help.php:9
+msgid "Managing Big Files"
+msgstr ""
+
+#: templates/help.php:10
+msgid "Ask a question"
+msgstr ""
+
+#: templates/help.php:22
+msgid "Problems connecting to help database."
+msgstr ""
+
+#: templates/help.php:23
+msgid "Go there manually."
+msgstr ""
+
+#: templates/help.php:31
+msgid "Answer"
+msgstr ""
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr ""
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr ""
+
+#: templates/personal.php:12
+msgid "Desktop and Mobile Syncing Clients"
+msgstr ""
+
+#: templates/personal.php:13
+msgid "Download"
+msgstr ""
+
+#: templates/personal.php:19
+msgid "Your password got changed"
+msgstr ""
+
+#: templates/personal.php:20
+msgid "Unable to change your password"
+msgstr ""
+
+#: templates/personal.php:21
+msgid "Current password"
+msgstr ""
+
+#: templates/personal.php:22
+msgid "New password"
+msgstr ""
+
+#: templates/personal.php:23
+msgid "show"
+msgstr ""
+
+#: templates/personal.php:24
+msgid "Change password"
+msgstr ""
+
+#: templates/personal.php:30
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:31
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:32
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:38 templates/personal.php:39
+msgid "Language"
+msgstr ""
+
+#: templates/personal.php:44
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:51
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr ""
+
+#: templates/users.php:21 templates/users.php:76
+msgid "Name"
+msgstr ""
+
+#: templates/users.php:23 templates/users.php:77
+msgid "Password"
+msgstr ""
+
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
+msgid "Groups"
+msgstr ""
+
+#: templates/users.php:32
+msgid "Create"
+msgstr ""
+
+#: templates/users.php:35
+msgid "Default Quota"
+msgstr ""
+
+#: templates/users.php:55 templates/users.php:138
+msgid "Other"
+msgstr ""
+
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:146
+msgid "Delete"
+msgstr ""
diff --git a/l10n/eu_ES/tasks.po b/l10n/eu_ES/tasks.po
new file mode 100644
index 00000000000..aad5eb88c31
--- /dev/null
+++ b/l10n/eu_ES/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu_ES\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/eu_ES/user_ldap.po b/l10n/eu_ES/user_ldap.po
new file mode 100644
index 00000000000..34f25c3435d
--- /dev/null
+++ b/l10n/eu_ES/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu_ES\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/eu_ES/user_migrate.po b/l10n/eu_ES/user_migrate.po
new file mode 100644
index 00000000000..7a3cda23096
--- /dev/null
+++ b/l10n/eu_ES/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu_ES\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/eu_ES/user_openid.po b/l10n/eu_ES/user_openid.po
new file mode 100644
index 00000000000..7016da797dd
--- /dev/null
+++ b/l10n/eu_ES/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Basque (Spain) (http://www.transifex.com/projects/p/owncloud/language/eu_ES/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: eu_ES\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/fa/admin_dependencies_chk.po b/l10n/fa/admin_dependencies_chk.po
new file mode 100644
index 00000000000..265e0c6cd7c
--- /dev/null
+++ b/l10n/fa/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/fa/admin_migrate.po b/l10n/fa/admin_migrate.po
new file mode 100644
index 00000000000..6b80ec8ecaf
--- /dev/null
+++ b/l10n/fa/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/fa/bookmarks.po b/l10n/fa/bookmarks.po
new file mode 100644
index 00000000000..c4649e206bb
--- /dev/null
+++ b/l10n/fa/bookmarks.po
@@ -0,0 +1,61 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 20:19+0000\n"
+"Last-Translator: Mohammad Dashtizadeh <mohammad@dashtizadeh.net>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr "نشانک‌ها"
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr "بدون‌نام"
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr "آدرس"
+
+#: templates/list.php:14
+msgid "Title"
+msgstr "عنوان"
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr "ذخیره نشانک"
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr "شما هیچ نشانکی ندارید"
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/fa/calendar.po b/l10n/fa/calendar.po
index 36e72a92623..1702670824e 100644
--- a/l10n/fa/calendar.po
+++ b/l10n/fa/calendar.po
@@ -8,21 +8,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Persian (http://www.transifex.net/projects/p/owncloud/language/fa/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "هیچ تقویمی پیدا نشد"
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "هیچ رویدادی پیدا نشد"
@@ -30,300 +38,394 @@ msgstr "هیچ رویدادی پیدا نشد"
msgid "Wrong calendar"
msgstr "تقویم اشتباه"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "زمان محلی جدید"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "زمان محلی تغییر یاÙت"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "درخواست نامعتبر"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "تقویم"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd M/d"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd M/d"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM yyyy"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "DDD m[ yyyy]{ '&#8212;'[ DDD] m yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, MMM d, yyyy"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "روزتولد"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "تجارت"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "تماس گرÙتن"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "مشتریان"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "نجات"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "روزهای تعطیل"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "ایده ها"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "سÙر"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "سالگرد"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "ملاقات"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "دیگر"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "شخصی"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "پروژه ها"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "سوالات"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "کار"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "نام گذاری نشده"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "تقویم جدید"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "تکرار نکنید"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "روزانه"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Ù‡Ùتهگی"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "هرروز Ù‡Ùته"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "دوهÙته"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "ماهانه"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "سالانه"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "هرگز"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "به وسیله ظهور"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "به وسیله تاریخ"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "به وسیله روزهای ماه"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "به وسیله روز های Ù‡Ùته"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "دوشنبه"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "سه شنبه"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "چهارشنبه"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "پنجشنبه"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "جمعه"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "شنبه"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "یکشنبه"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "رویداد های Ù‡Ùته هایی از ماه"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "اولین"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "دومین"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "سومین"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "چهارمین"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "پنجمین"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "آخرین"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "ژانویه"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Ùبریه"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "مارس"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "آوریل"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "می"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "ژوءن"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "جولای"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "آگوست"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "سپتامبر"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "اکتبر"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "نوامبر"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "دسامبر"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "به وسیله رویداد های روزانه"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "به وسیله روز های سال(ها)"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "به وسیله شماره Ù‡Ùته(ها)"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "به وسیله روز و ماه"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "تاریخ"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "تقویم."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "هرروز"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "تقویم جدید"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Ùیلد های Ú¯Ù… شده"
@@ -357,40 +459,32 @@ msgstr "رویداد قبل از شروع شدن تمام شده!"
msgid "There was a database fail"
msgstr "یک پایگاه داده Ùرو مانده است"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Ù‡Ùته"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "ماه"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Ùهرست"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "امروز"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "تقویم ها"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "ناتوان در تجزیه پرونده"
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "تقویم Ùعال را انتخاب کنید"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "تقویم های شما"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDav Link"
@@ -402,19 +496,19 @@ msgstr "تقویمهای به اشترک گذاری شده"
msgid "No shared calendars"
msgstr "هیچ تقویمی به اشتراک گذارده نشده"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "تقویم را به اشتراک بگذارید"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "بارگیری"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "ویرایش"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "پاک کردن"
@@ -500,23 +594,23 @@ msgstr "گروه ها را به وسیله درنگ نما از هم جدا کن
msgid "Edit categories"
msgstr "ویرایش گروه"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "رویداد های روزانه"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "از"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "به"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "تنظیمات حرÙÙ‡ ای"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "منطقه"
@@ -524,7 +618,7 @@ msgstr "منطقه"
msgid "Location of the Event"
msgstr "منطقه رویداد"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "توضیحات"
@@ -532,84 +626,86 @@ msgstr "توضیحات"
msgid "Description of the Event"
msgstr "توضیحات درباره رویداد"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "تکرار"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "پیشرÙته"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "انتخاب روز های Ù‡Ùته "
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "انتخاب روز ها"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "و رویداد های روز از سال"
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "و رویداد های روز از ماه"
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "انتخاب ماه ها"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "انتخاب Ù‡Ùته ها"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "Ùˆ رویداد Ù‡Ùته ها از سال"
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Ùاصله"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "پایان"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "ظهور"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "یک تقویم جدید ایجاد کنید"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "یک پرونده حاوی تقویم وارد کنید"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "لطÙا تقویم را انتخاب کنید"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "یک تقویم جدید ایجاد کنید"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "نام تقویم جدید"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "ورودی دادن"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "درحال اÙزودن تقویم"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "اÙزودن تقویم موÙقیت آمیز بود"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "ورودی دادن"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "بستن دیالوگ"
@@ -625,45 +721,73 @@ msgstr "دیدن یک رویداد"
msgid "No categories selected"
msgstr "هیچ گروهی انتخاب نشده"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "انتخاب گروه"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "از"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "در"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "زمان محلی"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "همیشه بررسی کنید برای تغییر زمان محلی"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "نوع زمان"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24 ساعت"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12 ساعت"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "یکمین روز Ù‡Ùته"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Calendar CalDAV syncing address :"
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/fa/contacts.po b/l10n/fa/contacts.po
index 15075e66e4a..92daf2d9db2 100644
--- a/l10n/fa/contacts.po
+++ b/l10n/fa/contacts.po
@@ -8,637 +8,770 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Persian (http://www.transifex.net/projects/p/owncloud/language/fa/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "خطا در (غیر) Ùعال سازی کتابچه نشانه ها"
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "یک خطا در اÙزودن اطلاعات شخص مورد نظر"
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "نمیتوان یک خاصیت خالی ایجاد کرد"
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "At least one of the address fields has to be filled out. "
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "شناسه تعیین نشده"
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "امتحان کردن برای وارد کردن مشخصات تکراری"
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "نمی توانید کتابچه نشانی ها را با یک نام خالی بروزرسانی کنید"
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "خطا درهنگام اÙزودن ویژگی"
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "خطا در هنگام بروزرسانی کتابچه نشانی ها"
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "هیچ شناسه ای ارائه نشده"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "خطا در تنظیم checksum"
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "هیچ گروهی برای حذ٠شدن در نظر گرÙته نشده"
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "هیچ کتابچه نشانی پیدا نشد"
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "هیچ شخصی پیدا نشد"
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "یک خطا در اÙزودن اطلاعات شخص مورد نظر"
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "نام اصلی تنظیم نشده است"
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "نمیتوان یک خاصیت خالی ایجاد کرد"
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "At least one of the address fields has to be filled out. "
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "امتحان کردن برای وارد کردن مشخصات تکراری"
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "اطلاعات درمورد vCard شما اشتباه است لطÙا صÙحه را دوباره بار گذاری کنید"
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "نشانی گم شده"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "خطا در تجزیه کارت ویزا برای شناسه:"
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "نمیتوانید یک نام خالی را به کتابچه نشانی ها اÙزود"
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "checksum تنظیم شده نیست"
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "خطا درهنگام اÙزودن کتابچه نشانی ها"
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "اطلاعات کارت ویزا شما غلط است لطÙا صÙحه را دوباره بارگزاری کنید"
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "خطا درهنگام Ùعال سازیکتابچه نشانی ها"
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "چند چیز به FUBAR رÙتند"
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "هیچ اطلاعاتی راجع به شناسه ارسال نشده"
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "خطا در خواندن اطلاعات تصویر"
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "خطا در ذخیره پرونده موقت"
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "بارگزاری تصویر امکان پذیر نیست"
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "شناسه تعیین نشده"
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "اطلاعات درمورد vCard شما اشتباه است لطÙا صÙحه را دوباره بار گذاری کنید"
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "خطا در هنگام پاک کرد ویژگی"
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "اطلاعات شناسه گم شده"
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "شما اطلاعات شناسه را Ùراموش کرده اید"
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "هیچ نشانی از تصویرارسال نشده"
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "پرونده وجود ندارد"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "خطا در بارگزاری تصویر"
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "خطا در گرÙتن اطلاعات شخص"
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "خطا در درباÙت تصویر ویژگی شخصی"
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "خطا در ذخیره سازی اطلاعات"
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "خطا در تغییر دادن اندازه تصویر"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "خطا در برداشت تصویر"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "خطا در ساخت تصویر temporary"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
+msgstr "خطا در پیدا کردن تصویر:"
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "نام اصلی تنظیم نشده است"
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "checksum تنظیم شده نیست"
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "اطلاعات کارت ویزا شما غلط است لطÙا صÙحه را دوباره بارگزاری کنید"
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "چند چیز به FUBAR رÙتند"
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "خطا در هنگام بروزرسانی اطلاعات شخص مورد نظر"
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "نمی توانید کتابچه نشانی ها را با یک نام خالی بروزرسانی کنید"
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "خطا در هنگام بروزرسانی کتابچه نشانی ها"
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "خطا در هنگام بارگذاری و ذخیره سازی"
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "هیچ خطایی نیست بارگذاری پرونده موÙقیت آمیز بود"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "حجم آپلود از طریق Php.ini تعیین می شود"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "حداکثر حجم قابل بار گذاری از طریق HTML MAX_FILE_SIZE است"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "پرونده بارگذاری شده Ùقط تاحدودی بارگذاری شده"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "هیچ پروندهای بارگذاری نشده"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "یک پوشه موقت گم شده"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "قابلیت ذخیره تصویر موقت وجود ندارد:"
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "قابلیت بارگذاری تصویر موقت وجود ندارد:"
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "هیچ Ùایلی آپلود نشد.خطای ناشناس"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "اشخاص"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "با عرض پوزش،این قابلیت هنوز اجرا نشده است"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "انجام نشد"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Couldn't get a valid address."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "خطا"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "این ویژگی باید به صورت غیر تهی عمل کند"
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "قابلیت مرتب سازی عناصر وجود ندارد"
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "پاک کردن ویژگی بدون استدلال انجام شده.لطÙا این مورد را گزارش دهید:bugs.owncloud.org"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "نام تغییر"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "هیچ Ùایلی برای آپلود انتخاب نشده است"
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "حجم Ùایل بسیار بیشتر از حجم تنظیم شده در تنظیمات سرور است"
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
+msgstr "نوع را انتخاب کنید"
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "یک پرونده VCF را به اینجا بکشید تا اشخاص اÙزوده شوند"
-
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1494
+#: js/loader.js:49
+msgid "Result: "
+msgstr "نتیجه:"
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr "وارد شد،"
+
+#: js/loader.js:49
+msgid " failed."
+msgstr "ناموÙÙ‚"
+
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "این کتابچه ی نشانه های شما نیست"
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "اتصال ویا تماسی یاÙت نشد"
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "کتابچه نشانی ها یاÙت نشد"
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "این کتابچه ی نشانه های شما نیست"
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "اتصال ویا تماسی یاÙت نشد"
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "نشانی"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "تلÙÙ†"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "نشانی پست الکترنیک"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "نهاد(ارگان)"
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "کار"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "خانه"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "موبایل"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "متن"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "صدا"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "پیغام"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "دورنگار:"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "رسانه تصویری"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "صÙحه"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "اینترنت"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "روزتولد"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "روز تولد {name} است"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "اشخاص"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "اÙزودن اطلاعات شخص مورد نظر"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "وارد کردن"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "کتابچه ی نشانی ها"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "پیکر بندی کتابچه نشانی ها"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "بستن"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "کتابچه نشانه های جدید"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "وارد شده از VCF"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDav Link"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "بارگیری"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "ویرایش"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "پاک کردن"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "دانلود مشخصات اشخاص"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "پاک کردن اطلاعات شخص مورد نظر"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "تصویر را به اینجا بکشید تا بار گذازی شود"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "پاک کردن تصویر کنونی"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "ویرایش تصویر کنونی"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "بار گذاری یک تصویر جدید"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "انتخاب یک تصویر از ابر های شما"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr "Format custom, Short name, Full name, Reverse or Reverse with comma"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "ویرایش نام جزئیات"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "نهاد(ارگان)"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "پاک کردن"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "نام مستعار"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "یک نام مستعار وارد کنید"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "روزتولد"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "dd-mm-yyyy"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "گروه ها"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "جدا کردن گروه ها به وسیله درنگ نما"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "ویرایش گروه ها"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "مقدم"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "لطÙا یک پست الکترونیکی معتبر وارد کنید"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "یک پست الکترونیکی وارد کنید"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "به نشانی ارسال شد"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "پاک کردن نشانی پست الکترونیکی"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "شماره تلÙÙ† راوارد کنید"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "پاک کردن شماره تلÙÙ†"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "دیدن روی نقشه"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "ویرایش جزئیات نشانی ها"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "اینجا یادداشت ها را بیاÙزایید"
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "اضاÙÙ‡ کردن Ùیلد"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "تصویر پروÙایل"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "شماره تلÙÙ†"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "یادداشت"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "نشانی پست الکترنیک"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "پاک کردن تصویر کنونی"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "ویرایش تصویر کنونی"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "نشانی"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "بار گذاری یک تصویر جدید"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "یادداشت"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "انتخاب یک تصویر از ابر های شما"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "دانلود مشخصات اشخاص"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "پاک کردن اطلاعات شخص مورد نظر"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "تصویر موقت از کش پاک شد."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "ویرایش نشانی"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "نوع"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "صندوق پستی"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "تمدید شده"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "خیابان"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "شهر"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "ناحیه"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "کد پستی"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "کشور"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "ویرایش گروه"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "اÙزودن"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "کتابچه ی نشانی ها"
@@ -719,35 +852,6 @@ msgstr "Jr."
msgid "Sn."
msgstr "Sn."
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "کتابچه نشانی جدید"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "ویرایش کتابچه نشانی"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "نام برای نمایش"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Ùعال"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "ذخیره سازی"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "ارسال"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "انصراÙ"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "وارد کردن پرونده حاوی اطلاعات"
@@ -764,57 +868,86 @@ msgstr "یک کتابچه نشانی بسازید"
msgid "Name of new addressbook"
msgstr "نام کتابچه نشانی جدید"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "وارد کردن"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "وارد کردن اشخاص"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "یک کتابچه نشانی انتخاب کنید تا وارد شود"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "انتخاب از دیسک سخت"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "شماهیچ شخصی در کتابچه نشانی خود ندارید"
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "اÙزودن اطلاعات شخص مورد نظر"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "پیکربندی کتابچه ی نشانی ها"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr ""
-#: templates/settings.php:4
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr ""
+
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "CardDAV syncing addresses "
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "اطلاعات بیشتر"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "نشانی اولیه"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X "
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "بارگیری"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "ویرایش"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "کتابچه نشانه های جدید"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "ذخیره سازی"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "انصراÙ"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/fa/core.po b/l10n/fa/core.po
index 6930fb647c6..05c5ea57eb7 100644
--- a/l10n/fa/core.po
+++ b/l10n/fa/core.po
@@ -8,10 +8,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Persian (http://www.transifex.net/projects/p/owncloud/language/fa/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -32,85 +32,85 @@ msgstr "این گروه از قبل اضاÙÙ‡ شده"
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "تنظیمات"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "ژانویه"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Ùبریه"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "مارس"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "آوریل"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "می"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "ژوئن"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "جولای"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "آگوست"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "سپتامبر"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "اکتبر"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "نوامبر"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "دسامبر"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "منصر٠شدن"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "نه"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "بله"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "قبول"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "هیج دسته ای برای پاک شدن انتخاب نشده است"
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "خطا"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "گذرواژه ابرهای شما تغییرکرد"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "پسورد ابرهای شما تغییرکرد"
@@ -240,14 +240,10 @@ msgstr "اتمام نصب"
msgid "web services under your control"
msgstr "سرویس وب تحت کنترل شما"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "خروج"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "تنظیمات"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "آیا گذرواژه تان را به یاد نمی آورید؟"
diff --git a/l10n/fa/files.po b/l10n/fa/files.po
index b58f6176764..5dc2cb2c38f 100644
--- a/l10n/fa/files.po
+++ b/l10n/fa/files.po
@@ -4,47 +4,49 @@
#
# Translators:
# Hossein nag <h.sname@yahoo.com>, 2012.
+# 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: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Persian (http://www.transifex.net/projects/p/owncloud/language/fa/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 20:17+0000\n"
+"Last-Translator: Mohammad Dashtizadeh <mohammad@dashtizadeh.net>\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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "هیچ خطایی وجود ندارد Ùایل با موÙقیت بار گذاری شد"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "حداکثر حجم تعیین شده برای بارگذاری در php.ini قابل ویرایش است"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "مقدار Ú©Ù…ÛŒ از Ùایل بارگذاری شده"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "هیچ Ùایلی بارگذاری نشده"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "یک پوشه موقت گم شده است"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "نوشتن بر روی دیسک سخت ناموÙÙ‚ بود"
@@ -52,57 +54,85 @@ msgstr "نوشتن بر روی دیسک سخت ناموÙÙ‚ بود"
msgid "Files"
msgstr "Ùایل ها"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "پاک کردن"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "وجود دارد"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "جایگزین"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "لغو"
-#: js/files.js:170
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "جایگزین‌شده"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "همراه"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "بازگشت"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "حذ٠شده"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "در حال ساخت Ùایل Ùشرده ممکن است زمان زیادی به طول بیانجامد"
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "ناتوان در بارگذاری یا Ùایل یک پوشه است یا 0بایت دارد"
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "خطا در بار گذاری"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "در انتظار"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "بار گذاری لغو شد"
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "نام نامناسب '/' غیرÙعال است"
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "اندازه"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "تغییر یاÙته"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "پوشه"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "پوشه ها"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "پرونده"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "پرونده ها"
#: templates/admin.php:5
msgid "File handling"
@@ -172,10 +202,6 @@ msgstr "به اشتراک گذاری"
msgid "Download"
msgstr "بارگیری"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "پاک کردن"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "حجم بارگذاری بسیار زیاد است"
diff --git a/l10n/fa/files_encryption.po b/l10n/fa/files_encryption.po
new file mode 100644
index 00000000000..d1409ea24bf
--- /dev/null
+++ b/l10n/fa/files_encryption.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 20:18+0000\n"
+"Last-Translator: Mohammad Dashtizadeh <mohammad@dashtizadeh.net>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr "رمزگذاری"
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+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
new file mode 100644
index 00000000000..7e4183a71b1
--- /dev/null
+++ b/l10n/fa/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/fa/files_sharing.po b/l10n/fa/files_sharing.po
new file mode 100644
index 00000000000..9b11f7a5ec6
--- /dev/null
+++ b/l10n/fa/files_sharing.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 20:07+0000\n"
+"Last-Translator: Mohammad Dashtizadeh <mohammad@dashtizadeh.net>\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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr "اندازه"
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr "تاریخ"
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr "حذ٠همه"
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr "حذÙ"
diff --git a/l10n/fa/files_versions.po b/l10n/fa/files_versions.po
new file mode 100644
index 00000000000..10bdb927924
--- /dev/null
+++ b/l10n/fa/files_versions.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 20:14+0000\n"
+"Last-Translator: Mohammad Dashtizadeh <mohammad@dashtizadeh.net>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr "انقضای تمامی نسخه‌ها"
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr "Ùعال‌کردن پرونده‌های نسخه‌بندی"
diff --git a/l10n/fa/lib.po b/l10n/fa/lib.po
new file mode 100644
index 00000000000..7e1c82ad5e1
--- /dev/null
+++ b/l10n/fa/lib.po
@@ -0,0 +1,113 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 20:01+0000\n"
+"Last-Translator: Mohammad Dashtizadeh <mohammad@dashtizadeh.net>\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"
+
+#: app.php:288
+msgid "Help"
+msgstr "راه‌نما"
+
+#: app.php:295
+msgid "Personal"
+msgstr "شخصی"
+
+#: app.php:300
+msgid "Settings"
+msgstr "تنظیمات"
+
+#: app.php:305
+msgid "Users"
+msgstr "کاربران"
+
+#: app.php:312
+msgid "Apps"
+msgstr ""
+
+#: app.php:314
+msgid "Admin"
+msgstr "مدیر"
+
+#: files.php:276
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:277
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:277 files.php:302
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:301
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr "ثانیه‌ها پیش"
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr "1 دقیقه پیش"
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr "%d دقیقه پیش"
+
+#: template.php:91
+msgid "today"
+msgstr "امروز"
+
+#: template.php:92
+msgid "yesterday"
+msgstr "دیروز"
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr "ماه قبل"
+
+#: template.php:95
+msgid "months ago"
+msgstr "ماه‌های قبل"
+
+#: template.php:96
+msgid "last year"
+msgstr "سال قبل"
+
+#: template.php:97
+msgid "years ago"
+msgstr "سال‌های قبل"
diff --git a/l10n/fa/settings.po b/l10n/fa/settings.po
index 1ee3d62cdb4..38f01f759c0 100644
--- a/l10n/fa/settings.po
+++ b/l10n/fa/settings.po
@@ -4,81 +4,114 @@
#
# Translators:
# Hossein nag <h.sname@yahoo.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-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Persian (http://www.transifex.net/projects/p/owncloud/language/fa/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "ایمیل ذخیره شد"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "ایمیل غیر قابل قبول"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID تغییر کرد"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "درخواست غیر قابل قبول"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "زبان تغییر کرد"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "خطا"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "غیرÙعال"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Ùعال"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "درحال ذخیره ..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "__language_name__"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "اخطار امنیتی"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr "کارنامه"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "بیشتر"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "برنامه خود را بیاÙزایید"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "یک برنامه انتخاب کنید"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "صÙحه این اٌپ را در apps.owncloud.com ببینید"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "مجوزنامه"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "به وسیله"
@@ -170,34 +203,38 @@ msgstr "به ترجمه آن کمک کنید"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "از این نشانی برای وصل شدن به ابرهایتان در مدیرپرونده استÙاده کنید"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "نام"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "گذرواژه"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "گروه ها"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "ایجاد کردن"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "سهم پیش Ùرض"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "سایر"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "سهم"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "پاک کردن"
diff --git a/l10n/fa/tasks.po b/l10n/fa/tasks.po
new file mode 100644
index 00000000000..90c396946ba
--- /dev/null
+++ b/l10n/fa/tasks.po
@@ -0,0 +1,107 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 19:59+0000\n"
+"Last-Translator: Mohammad Dashtizadeh <mohammad@dashtizadeh.net>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr "وظایÙ"
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr "1=بیش‌ترین"
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr "5=متوسط"
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr "9=کم‌ترین"
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr "درحال بارگزاری وظایÙ"
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr "مهم"
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr "بیش‌تر"
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr "کم‌تر"
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr "حذÙ"
diff --git a/l10n/fa/user_ldap.po b/l10n/fa/user_ldap.po
new file mode 100644
index 00000000000..eb2a0fd767f
--- /dev/null
+++ b/l10n/fa/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/fa/user_migrate.po b/l10n/fa/user_migrate.po
new file mode 100644
index 00000000000..dbd3fc6600f
--- /dev/null
+++ b/l10n/fa/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/fa/user_openid.po b/l10n/fa/user_openid.po
new file mode 100644
index 00000000000..abfc372d3c7
--- /dev/null
+++ b/l10n/fa/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/fi/admin_dependencies_chk.po b/l10n/fi/admin_dependencies_chk.po
new file mode 100644
index 00000000000..c3fe2f98228
--- /dev/null
+++ b/l10n/fi/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/fi/admin_migrate.po b/l10n/fi/admin_migrate.po
new file mode 100644
index 00000000000..3aea7a7ce5d
--- /dev/null
+++ b/l10n/fi/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/fi/bookmarks.po b/l10n/fi/bookmarks.po
new file mode 100644
index 00000000000..eb0373eb8ac
--- /dev/null
+++ b/l10n/fi/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-08-09 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/fi/calendar.po b/l10n/fi/calendar.po
new file mode 100644
index 00000000000..9b551fc88c9
--- /dev/null
+++ b/l10n/fi/calendar.po
@@ -0,0 +1,813 @@
+# 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: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
+msgid "No calendars found."
+msgstr ""
+
+#: ajax/categories/rescan.php:37
+msgid "No events found."
+msgstr ""
+
+#: ajax/event/edit.form.php:20
+msgid "Wrong calendar"
+msgstr ""
+
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
+#: ajax/settings/guesstimezone.php:25
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settings/settimezone.php:23
+msgid "Timezone changed"
+msgstr ""
+
+#: ajax/settings/settimezone.php:25
+msgid "Invalid request"
+msgstr ""
+
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
+msgid "Calendar"
+msgstr ""
+
+#: js/calendar.js:832
+msgid "ddd"
+msgstr ""
+
+#: js/calendar.js:833
+msgid "ddd M/d"
+msgstr ""
+
+#: js/calendar.js:834
+msgid "dddd M/d"
+msgstr ""
+
+#: js/calendar.js:837
+msgid "MMMM yyyy"
+msgstr ""
+
+#: js/calendar.js:839
+msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
+msgstr ""
+
+#: js/calendar.js:841
+msgid "dddd, MMM d, yyyy"
+msgstr ""
+
+#: lib/app.php:121
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:122
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:123
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:124
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:125
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:126
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:127
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:128
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:129
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:130
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:131
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:132
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:133
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:134
+msgid "Questions"
+msgstr ""
+
+#: lib/app.php:135
+msgid "Work"
+msgstr ""
+
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
+msgid "unnamed"
+msgstr ""
+
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr ""
+
+#: lib/object.php:372
+msgid "Does not repeat"
+msgstr ""
+
+#: lib/object.php:373
+msgid "Daily"
+msgstr ""
+
+#: lib/object.php:374
+msgid "Weekly"
+msgstr ""
+
+#: lib/object.php:375
+msgid "Every Weekday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "Bi-Weekly"
+msgstr ""
+
+#: lib/object.php:377
+msgid "Monthly"
+msgstr ""
+
+#: lib/object.php:378
+msgid "Yearly"
+msgstr ""
+
+#: lib/object.php:388
+msgid "never"
+msgstr ""
+
+#: lib/object.php:389
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:390
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:400
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:401
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:412 templates/calendar.php:5
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:413 templates/calendar.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:414 templates/calendar.php:5
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:415 templates/calendar.php:5
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:416 templates/calendar.php:5
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:427
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:428
+msgid "first"
+msgstr ""
+
+#: lib/object.php:429
+msgid "second"
+msgstr ""
+
+#: lib/object.php:430
+msgid "third"
+msgstr ""
+
+#: lib/object.php:431
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:432
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:433
+msgid "last"
+msgstr ""
+
+#: lib/object.php:467 templates/calendar.php:7
+msgid "January"
+msgstr ""
+
+#: lib/object.php:468 templates/calendar.php:7
+msgid "February"
+msgstr ""
+
+#: lib/object.php:469 templates/calendar.php:7
+msgid "March"
+msgstr ""
+
+#: lib/object.php:470 templates/calendar.php:7
+msgid "April"
+msgstr ""
+
+#: lib/object.php:471 templates/calendar.php:7
+msgid "May"
+msgstr ""
+
+#: lib/object.php:472 templates/calendar.php:7
+msgid "June"
+msgstr ""
+
+#: lib/object.php:473 templates/calendar.php:7
+msgid "July"
+msgstr ""
+
+#: lib/object.php:474 templates/calendar.php:7
+msgid "August"
+msgstr ""
+
+#: lib/object.php:475 templates/calendar.php:7
+msgid "September"
+msgstr ""
+
+#: lib/object.php:476 templates/calendar.php:7
+msgid "October"
+msgstr ""
+
+#: lib/object.php:477 templates/calendar.php:7
+msgid "November"
+msgstr ""
+
+#: lib/object.php:478 templates/calendar.php:7
+msgid "December"
+msgstr ""
+
+#: lib/object.php:488
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:489
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:490
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:491
+msgid "by day and month"
+msgstr ""
+
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:43
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
+#: templates/calendar.php:11
+msgid "All day"
+msgstr ""
+
+#: templates/calendar.php:13
+msgid "Missing fields"
+msgstr ""
+
+#: templates/calendar.php:14 templates/part.eventform.php:19
+#: templates/part.showevent.php:11
+msgid "Title"
+msgstr ""
+
+#: templates/calendar.php:16
+msgid "From Date"
+msgstr ""
+
+#: templates/calendar.php:17
+msgid "From Time"
+msgstr ""
+
+#: templates/calendar.php:18
+msgid "To Date"
+msgstr ""
+
+#: templates/calendar.php:19
+msgid "To Time"
+msgstr ""
+
+#: templates/calendar.php:20
+msgid "The event ends before it starts"
+msgstr ""
+
+#: templates/calendar.php:21
+msgid "There was a database fail"
+msgstr ""
+
+#: templates/calendar.php:39
+msgid "Week"
+msgstr ""
+
+#: templates/calendar.php:40
+msgid "Month"
+msgstr ""
+
+#: templates/calendar.php:41
+msgid "List"
+msgstr ""
+
+#: templates/calendar.php:45
+msgid "Today"
+msgstr ""
+
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
+
+#: templates/part.choosecalendar.php:2
+msgid "Your calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.php:27
+#: templates/part.choosecalendar.rowfields.php:11
+msgid "CalDav Link"
+msgstr ""
+
+#: templates/part.choosecalendar.php:31
+msgid "Shared calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.php:48
+msgid "No shared calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:8
+msgid "Share Calendar"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:14
+msgid "Download"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:17
+msgid "Edit"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:20
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.shared.php:4
+msgid "shared with you by"
+msgstr ""
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr ""
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr ""
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr ""
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr ""
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr ""
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr ""
+
+#: templates/part.eventform.php:8 templates/part.showevent.php:3
+msgid "Eventinfo"
+msgstr ""
+
+#: templates/part.eventform.php:9 templates/part.showevent.php:4
+msgid "Repeating"
+msgstr ""
+
+#: templates/part.eventform.php:10 templates/part.showevent.php:5
+msgid "Alarm"
+msgstr ""
+
+#: templates/part.eventform.php:11 templates/part.showevent.php:6
+msgid "Attendees"
+msgstr ""
+
+#: templates/part.eventform.php:13
+msgid "Share"
+msgstr ""
+
+#: templates/part.eventform.php:21
+msgid "Title of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:27 templates/part.showevent.php:19
+msgid "Category"
+msgstr ""
+
+#: templates/part.eventform.php:29
+msgid "Separate categories with commas"
+msgstr ""
+
+#: templates/part.eventform.php:30
+msgid "Edit categories"
+msgstr ""
+
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
+msgid "All Day Event"
+msgstr ""
+
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
+msgid "From"
+msgstr ""
+
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
+msgid "To"
+msgstr ""
+
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
+msgid "Advanced options"
+msgstr ""
+
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
+msgid "Location"
+msgstr ""
+
+#: templates/part.eventform.php:83
+msgid "Location of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
+msgid "Description"
+msgstr ""
+
+#: templates/part.eventform.php:91
+msgid "Description of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
+msgid "Repeat"
+msgstr ""
+
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:164 templates/part.eventform.php:177
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
+
+#: templates/part.import.php:36
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
+
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
+
+#: templates/part.import.php:47
+msgid "Import"
+msgstr ""
+
+#: templates/part.import.php:56
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr ""
+
+#: templates/part.showevent.php:1
+msgid "View an event"
+msgstr ""
+
+#: templates/part.showevent.php:23
+msgid "No categories selected"
+msgstr ""
+
+#: templates/part.showevent.php:37
+msgid "of"
+msgstr ""
+
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
+msgid "at"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "Timezone"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
+
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
+
+#: templates/settings.php:57
+msgid "24h"
+msgstr ""
+
+#: templates/settings.php:58
+msgid "12h"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
+
+#: templates/share.dropdown.php:20
+msgid "Users"
+msgstr ""
+
+#: templates/share.dropdown.php:21
+msgid "select users"
+msgstr ""
+
+#: templates/share.dropdown.php:36 templates/share.dropdown.php:62
+msgid "Editable"
+msgstr ""
+
+#: templates/share.dropdown.php:48
+msgid "Groups"
+msgstr ""
+
+#: templates/share.dropdown.php:49
+msgid "select groups"
+msgstr ""
+
+#: templates/share.dropdown.php:75
+msgid "make public"
+msgstr ""
diff --git a/l10n/fi/contacts.po b/l10n/fi/contacts.po
new file mode 100644
index 00000000000..da37fef4174
--- /dev/null
+++ b/l10n/fi/contacts.po
@@ -0,0 +1,952 @@
+# 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: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr ""
+
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr ""
+
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr ""
+
+#: ajax/categories/categoriesfor.php:17
+msgid "No ID provided"
+msgstr ""
+
+#: ajax/categories/categoriesfor.php:34
+msgid "Error setting checksum."
+msgstr ""
+
+#: ajax/categories/delete.php:19
+msgid "No categories selected for deletion."
+msgstr ""
+
+#: ajax/categories/delete.php:26
+msgid "No address books found."
+msgstr ""
+
+#: ajax/categories/delete.php:34
+msgid "No contacts found."
+msgstr ""
+
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr ""
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr ""
+
+#: ajax/contact/details.php:31
+msgid "Missing ID"
+msgstr ""
+
+#: ajax/contact/details.php:36
+msgid "Error parsing VCard for ID: \""
+msgstr ""
+
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr ""
+
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr ""
+
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr ""
+
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
+#: ajax/uploadphoto.php:68
+msgid "No contact ID was submitted."
+msgstr ""
+
+#: ajax/currentphoto.php:36
+msgid "Error reading contact photo."
+msgstr ""
+
+#: ajax/currentphoto.php:48
+msgid "Error saving temporary file."
+msgstr ""
+
+#: ajax/currentphoto.php:51
+msgid "The loading photo is not valid."
+msgstr ""
+
+#: ajax/editname.php:31
+msgid "Contact ID is missing."
+msgstr ""
+
+#: ajax/oc_photo.php:32
+msgid "No photo path was submitted."
+msgstr ""
+
+#: ajax/oc_photo.php:39
+msgid "File doesn't exist:"
+msgstr ""
+
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
+msgid "Error loading image."
+msgstr ""
+
+#: ajax/savecrop.php:69
+msgid "Error getting contact object."
+msgstr ""
+
+#: ajax/savecrop.php:79
+msgid "Error getting PHOTO property."
+msgstr ""
+
+#: ajax/savecrop.php:98
+msgid "Error saving contact."
+msgstr ""
+
+#: ajax/savecrop.php:109
+msgid "Error resizing image"
+msgstr ""
+
+#: ajax/savecrop.php:112
+msgid "Error cropping image"
+msgstr ""
+
+#: ajax/savecrop.php:115
+msgid "Error creating temporary image"
+msgstr ""
+
+#: ajax/savecrop.php:118
+msgid "Error finding image: "
+msgstr ""
+
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
+msgid "Error uploading contacts to storage."
+msgstr ""
+
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
+msgid "Couldn't save temporary image: "
+msgstr ""
+
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
+msgid "Couldn't load temporary image: "
+msgstr ""
+
+#: ajax/uploadphoto.php:71
+msgid "No file was uploaded. Unknown error"
+msgstr ""
+
+#: appinfo/app.php:21
+msgid "Contacts"
+msgstr ""
+
+#: js/contacts.js:71
+msgid "Sorry, this functionality has not been implemented yet"
+msgstr ""
+
+#: js/contacts.js:71
+msgid "Not implemented"
+msgstr ""
+
+#: js/contacts.js:76
+msgid "Couldn't get a valid address."
+msgstr ""
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
+msgid "Error"
+msgstr ""
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Permission error"
+msgstr ""
+
+#: js/contacts.js:763
+msgid "This property has to be non-empty."
+msgstr ""
+
+#: js/contacts.js:789
+msgid "Couldn't serialize elements."
+msgstr ""
+
+#: js/contacts.js:921 js/contacts.js:939
+msgid ""
+"'deleteProperty' called without type argument. Please report at "
+"bugs.owncloud.org"
+msgstr ""
+
+#: js/contacts.js:958
+msgid "Edit name"
+msgstr ""
+
+#: js/contacts.js:1250
+msgid "No files selected for upload."
+msgstr ""
+
+#: js/contacts.js:1258
+msgid ""
+"The file you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr ""
+
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
+msgid "Select type"
+msgstr ""
+
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr ""
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr ""
+
+#: js/loader.js:49
+msgid "Result: "
+msgstr ""
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr ""
+
+#: js/loader.js:49
+msgid " failed."
+msgstr ""
+
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
+msgstr ""
+
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr ""
+
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr ""
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr ""
+
+#: lib/app.php:116
+msgid "Jabber"
+msgstr ""
+
+#: lib/app.php:121
+msgid "AIM"
+msgstr ""
+
+#: lib/app.php:126
+msgid "MSN"
+msgstr ""
+
+#: lib/app.php:131
+msgid "Twitter"
+msgstr ""
+
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr ""
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
+
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
+
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
+
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
+
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
+msgid "Work"
+msgstr ""
+
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
+msgid "Home"
+msgstr ""
+
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
+msgid "Mobile"
+msgstr ""
+
+#: lib/app.php:203
+msgid "Text"
+msgstr ""
+
+#: lib/app.php:204
+msgid "Voice"
+msgstr ""
+
+#: lib/app.php:205
+msgid "Message"
+msgstr ""
+
+#: lib/app.php:206
+msgid "Fax"
+msgstr ""
+
+#: lib/app.php:207
+msgid "Video"
+msgstr ""
+
+#: lib/app.php:208
+msgid "Pager"
+msgstr ""
+
+#: lib/app.php:215
+msgid "Internet"
+msgstr ""
+
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
+msgid "{name}'s Birthday"
+msgstr ""
+
+#: lib/search.php:15
+msgid "Contact"
+msgstr ""
+
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
+msgid "Add Contact"
+msgstr ""
+
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr ""
+
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
+
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
+
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
+
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
+
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
+
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
+
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
+
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
+
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
+msgid "Drop photo to upload"
+msgstr ""
+
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
+msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
+msgstr ""
+
+#: templates/part.contact.php:36
+msgid "Edit name details"
+msgstr ""
+
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr ""
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr ""
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
+msgid "Nickname"
+msgstr ""
+
+#: templates/part.contact.php:42
+msgid "Enter nickname"
+msgstr ""
+
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
+msgid "dd-mm-yyyy"
+msgstr ""
+
+#: templates/part.contact.php:47 templates/part.contact.php:135
+msgid "Groups"
+msgstr ""
+
+#: templates/part.contact.php:49
+msgid "Separate groups with commas"
+msgstr ""
+
+#: templates/part.contact.php:50
+msgid "Edit groups"
+msgstr ""
+
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.contact.php:60
+msgid "Please specify a valid email address."
+msgstr ""
+
+#: templates/part.contact.php:60
+msgid "Enter email address"
+msgstr ""
+
+#: templates/part.contact.php:64
+msgid "Mail to address"
+msgstr ""
+
+#: templates/part.contact.php:65
+msgid "Delete email address"
+msgstr ""
+
+#: templates/part.contact.php:75
+msgid "Enter phone number"
+msgstr ""
+
+#: templates/part.contact.php:79
+msgid "Delete phone number"
+msgstr ""
+
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
+msgid "View on map"
+msgstr ""
+
+#: templates/part.contact.php:110
+msgid "Edit address details"
+msgstr ""
+
+#: templates/part.contact.php:116
+msgid "Add notes here."
+msgstr ""
+
+#: templates/part.contact.php:124
+msgid "Add field"
+msgstr ""
+
+#: templates/part.contact.php:129
+msgid "Phone"
+msgstr ""
+
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr ""
+
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
+
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr ""
+
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr ""
+
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.cropphoto.php:65
+msgid "The temporary image has been removed from cache."
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:6
+msgid "Edit address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:10
+msgid "Type"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
+msgid "PO Box"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
+msgid "Extended"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
+msgid "City"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:42
+msgid "Region"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
+msgid "Zipcode"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:16
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:23
+msgid "Hon. prefixes"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:27
+msgid "Miss"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:28
+msgid "Ms"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:29
+msgid "Mr"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:30
+msgid "Sir"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:31
+msgid "Mrs"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:32
+msgid "Dr"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:35
+msgid "Given name"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:37
+msgid "Additional names"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:39
+msgid "Family name"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:41
+msgid "Hon. suffixes"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:45
+msgid "J.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:46
+msgid "M.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:47
+msgid "D.O."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:48
+msgid "D.C."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:49
+msgid "Ph.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:50
+msgid "Esq."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:51
+msgid "Jr."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:52
+msgid "Sn."
+msgstr ""
+
+#: templates/part.import.php:1
+msgid "Import a contacts file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the addressbook"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new addressbook"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new addressbook"
+msgstr ""
+
+#: templates/part.import.php:20
+msgid "Importing contacts"
+msgstr ""
+
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
+msgstr ""
+
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "CardDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr ""
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr ""
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr ""
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/fi/core.po b/l10n/fi/core.po
new file mode 100644
index 00000000000..53b71a432ff
--- /dev/null
+++ b/l10n/fi/core.po
@@ -0,0 +1,268 @@
+# 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: 2012-08-09 02:02+0200\n"
+"PO-Revision-Date: 2011-07-25 16:05+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/vcategories/add.php:23 ajax/vcategories/delete.php:23
+msgid "Application name not provided."
+msgstr ""
+
+#: ajax/vcategories/add.php:29
+msgid "No category to add?"
+msgstr ""
+
+#: ajax/vcategories/add.php:36
+msgid "This category already exists: "
+msgstr ""
+
+#: js/jquery-ui-1.8.16.custom.min.js:511
+msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+msgstr ""
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr ""
+
+#: js/js.js:572
+msgid "January"
+msgstr ""
+
+#: js/js.js:572
+msgid "February"
+msgstr ""
+
+#: js/js.js:572
+msgid "March"
+msgstr ""
+
+#: js/js.js:572
+msgid "April"
+msgstr ""
+
+#: js/js.js:572
+msgid "May"
+msgstr ""
+
+#: js/js.js:572
+msgid "June"
+msgstr ""
+
+#: js/js.js:573
+msgid "July"
+msgstr ""
+
+#: js/js.js:573
+msgid "August"
+msgstr ""
+
+#: js/js.js:573
+msgid "September"
+msgstr ""
+
+#: js/js.js:573
+msgid "October"
+msgstr ""
+
+#: js/js.js:573
+msgid "November"
+msgstr ""
+
+#: js/js.js:573
+msgid "December"
+msgstr ""
+
+#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:159
+msgid "No"
+msgstr ""
+
+#: js/oc-dialogs.js:160
+msgid "Yes"
+msgstr ""
+
+#: js/oc-dialogs.js:177
+msgid "Ok"
+msgstr ""
+
+#: js/oc-vcategories.js:68
+msgid "No categories selected for deletion."
+msgstr ""
+
+#: js/oc-vcategories.js:68
+msgid "Error"
+msgstr ""
+
+#: lostpassword/index.php:26
+msgid "ownCloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+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 "Requested"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:25
+#: templates/login.php:9
+msgid "Username"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:15
+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:14
+msgid "Add"
+msgstr ""
+
+#: templates/installation.php:23
+msgid "Create an <strong>admin account</strong>"
+msgstr ""
+
+#: templates/installation.php:29 templates/login.php:13
+msgid "Password"
+msgstr ""
+
+#: templates/installation.php:35
+msgid "Advanced"
+msgstr ""
+
+#: templates/installation.php:37
+msgid "Data folder"
+msgstr ""
+
+#: templates/installation.php:44
+msgid "Configure the database"
+msgstr ""
+
+#: templates/installation.php:49 templates/installation.php:60
+#: templates/installation.php:70
+msgid "will be used"
+msgstr ""
+
+#: templates/installation.php:82
+msgid "Database user"
+msgstr ""
+
+#: templates/installation.php:86
+msgid "Database password"
+msgstr ""
+
+#: templates/installation.php:90
+msgid "Database name"
+msgstr ""
+
+#: templates/installation.php:96
+msgid "Database host"
+msgstr ""
+
+#: templates/installation.php:101
+msgid "Finish setup"
+msgstr ""
+
+#: templates/layout.guest.php:42
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:49
+msgid "Log out"
+msgstr ""
+
+#: templates/login.php:6
+msgid "Lost your password?"
+msgstr ""
+
+#: templates/login.php:17
+msgid "remember"
+msgstr ""
+
+#: templates/login.php:18
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr ""
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr ""
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr ""
diff --git a/l10n/fi/files.po b/l10n/fi/files.po
new file mode 100644
index 00000000000..edf5daa8da9
--- /dev/null
+++ b/l10n/fi/files.po
@@ -0,0 +1,218 @@
+# 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: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/upload.php:20
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/upload.php:21
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: ajax/upload.php:22
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/upload.php:23
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/upload.php:24
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/upload.php:25
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/upload.php:26
+msgid "Failed to write to disk"
+msgstr ""
+
+#: appinfo/app.php:6
+msgid "Files"
+msgstr ""
+
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
+msgid "generating ZIP-file, it may take some time."
+msgstr ""
+
+#: js/files.js:200
+msgid "Unable to upload your file as it is a directory or has 0 bytes"
+msgstr ""
+
+#: js/files.js:200
+msgid "Upload Error"
+msgstr ""
+
+#: js/files.js:228 js/files.js:319 js/files.js:348
+msgid "Pending"
+msgstr ""
+
+#: js/files.js:333
+msgid "Upload cancelled."
+msgstr ""
+
+#: js/files.js:457
+msgid "Invalid name, '/' is not allowed."
+msgstr ""
+
+#: js/files.js:703 templates/index.php:55
+msgid "Size"
+msgstr ""
+
+#: js/files.js:704 templates/index.php:56
+msgid "Modified"
+msgstr ""
+
+#: js/files.js:731
+msgid "folder"
+msgstr ""
+
+#: js/files.js:733
+msgid "folders"
+msgstr ""
+
+#: js/files.js:741
+msgid "file"
+msgstr ""
+
+#: js/files.js:743
+msgid "files"
+msgstr ""
+
+#: templates/admin.php:5
+msgid "File handling"
+msgstr ""
+
+#: templates/admin.php:7
+msgid "Maximum upload size"
+msgstr ""
+
+#: templates/admin.php:7
+msgid "max. possible: "
+msgstr ""
+
+#: templates/admin.php:9
+msgid "Needed for multi-file and folder downloads."
+msgstr ""
+
+#: templates/admin.php:9
+msgid "Enable ZIP-download"
+msgstr ""
+
+#: templates/admin.php:11
+msgid "0 is unlimited"
+msgstr ""
+
+#: templates/admin.php:12
+msgid "Maximum input size for ZIP files"
+msgstr ""
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:11
+msgid "From url"
+msgstr ""
+
+#: templates/index.php:21
+msgid "Upload"
+msgstr ""
+
+#: templates/index.php:27
+msgid "Cancel upload"
+msgstr ""
+
+#: templates/index.php:39
+msgid "Nothing in here. Upload something!"
+msgstr ""
+
+#: templates/index.php:47
+msgid "Name"
+msgstr ""
+
+#: templates/index.php:49
+msgid "Share"
+msgstr ""
+
+#: templates/index.php:51
+msgid "Download"
+msgstr ""
+
+#: templates/index.php:64
+msgid "Upload too large"
+msgstr ""
+
+#: templates/index.php:66
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: templates/index.php:71
+msgid "Files are being scanned, please wait."
+msgstr ""
+
+#: templates/index.php:74
+msgid "Current scanning"
+msgstr ""
diff --git a/l10n/fi/files_encryption.po b/l10n/fi/files_encryption.po
new file mode 100644
index 00000000000..8aa6088c38e
--- /dev/null
+++ b/l10n/fi/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/fi/files_external.po b/l10n/fi/files_external.po
new file mode 100644
index 00000000000..6b036592f0c
--- /dev/null
+++ b/l10n/fi/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/fi/files_sharing.po b/l10n/fi/files_sharing.po
new file mode 100644
index 00000000000..b8c06567b5b
--- /dev/null
+++ b/l10n/fi/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/fi/files_versions.po b/l10n/fi/files_versions.po
new file mode 100644
index 00000000000..89bfb8144e6
--- /dev/null
+++ b/l10n/fi/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/fi/gallery.po b/l10n/fi/gallery.po
new file mode 100644
index 00000000000..786216a0af1
--- /dev/null
+++ b/l10n/fi/gallery.po
@@ -0,0 +1,58 @@
+# 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: 2012-08-09 02:02+0200\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:39
+msgid "Pictures"
+msgstr ""
+
+#: js/pictures.js:12
+msgid "Share gallery"
+msgstr ""
+
+#: js/pictures.js:32
+msgid "Error: "
+msgstr ""
+
+#: js/pictures.js:32
+msgid "Internal error"
+msgstr ""
+
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+#: templates/view_album.php:36
+msgid "Remove confirmation"
+msgstr ""
+
+#: templates/view_album.php:37
+msgid "Do you want to remove album"
+msgstr ""
+
+#: templates/view_album.php:40
+msgid "Change album name"
+msgstr ""
+
+#: templates/view_album.php:43
+msgid "New album name"
+msgstr ""
diff --git a/l10n/fi/lib.po b/l10n/fi/lib.po
new file mode 100644
index 00000000000..eee9ac5f9e5
--- /dev/null
+++ b/l10n/fi/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-08-09 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: app.php:288
+msgid "Help"
+msgstr ""
+
+#: app.php:295
+msgid "Personal"
+msgstr ""
+
+#: app.php:300
+msgid "Settings"
+msgstr ""
+
+#: app.php:305
+msgid "Users"
+msgstr ""
+
+#: app.php:312
+msgid "Apps"
+msgstr ""
+
+#: app.php:314
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/fi/media.po b/l10n/fi/media.po
new file mode 100644
index 00000000000..d0e3eab9bde
--- /dev/null
+++ b/l10n/fi/media.po
@@ -0,0 +1,66 @@
+# 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: 2012-08-09 02:02+0200\n"
+"PO-Revision-Date: 2011-08-13 02:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:45 templates/player.php:8
+msgid "Music"
+msgstr ""
+
+#: js/music.js:18
+msgid "Add album to playlist"
+msgstr ""
+
+#: templates/music.php:3 templates/player.php:12
+msgid "Play"
+msgstr ""
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:13
+msgid "Pause"
+msgstr ""
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr ""
+
+#: templates/music.php:6 templates/player.php:14
+msgid "Next"
+msgstr ""
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr ""
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr ""
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr ""
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr ""
+
+#: templates/music.php:38
+msgid "Album"
+msgstr ""
+
+#: templates/music.php:39
+msgid "Title"
+msgstr ""
diff --git a/l10n/fi/settings.po b/l10n/fi/settings.po
new file mode 100644
index 00000000000..823276532f7
--- /dev/null
+++ b/l10n/fi/settings.po
@@ -0,0 +1,238 @@
+# 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: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
+#: ajax/lostpassword.php:14
+msgid "Email saved"
+msgstr ""
+
+#: ajax/lostpassword.php:16
+msgid "Invalid email"
+msgstr ""
+
+#: ajax/openid.php:16
+msgid "OpenID Changed"
+msgstr ""
+
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
+msgid "Invalid request"
+msgstr ""
+
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
+msgid "Language changed"
+msgstr ""
+
+#: js/apps.js:18
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:62
+msgid "Enable"
+msgstr ""
+
+#: js/personal.js:69
+msgid "Saving..."
+msgstr ""
+
+#: personal.php:46 personal.php:47
+msgid "__language_name__"
+msgstr ""
+
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
+msgid "Log"
+msgstr ""
+
+#: templates/admin.php:67
+msgid "More"
+msgstr ""
+
+#: templates/apps.php:10
+msgid "Add your App"
+msgstr ""
+
+#: templates/apps.php:26
+msgid "Select an App"
+msgstr ""
+
+#: templates/apps.php:29
+msgid "See application page at apps.owncloud.com"
+msgstr ""
+
+#: templates/apps.php:30
+msgid "-licensed"
+msgstr ""
+
+#: templates/apps.php:30
+msgid "by"
+msgstr ""
+
+#: templates/help.php:8
+msgid "Documentation"
+msgstr ""
+
+#: templates/help.php:9
+msgid "Managing Big Files"
+msgstr ""
+
+#: templates/help.php:10
+msgid "Ask a question"
+msgstr ""
+
+#: templates/help.php:22
+msgid "Problems connecting to help database."
+msgstr ""
+
+#: templates/help.php:23
+msgid "Go there manually."
+msgstr ""
+
+#: templates/help.php:31
+msgid "Answer"
+msgstr ""
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr ""
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr ""
+
+#: templates/personal.php:12
+msgid "Desktop and Mobile Syncing Clients"
+msgstr ""
+
+#: templates/personal.php:13
+msgid "Download"
+msgstr ""
+
+#: templates/personal.php:19
+msgid "Your password got changed"
+msgstr ""
+
+#: templates/personal.php:20
+msgid "Unable to change your password"
+msgstr ""
+
+#: templates/personal.php:21
+msgid "Current password"
+msgstr ""
+
+#: templates/personal.php:22
+msgid "New password"
+msgstr ""
+
+#: templates/personal.php:23
+msgid "show"
+msgstr ""
+
+#: templates/personal.php:24
+msgid "Change password"
+msgstr ""
+
+#: templates/personal.php:30
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:31
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:32
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:38 templates/personal.php:39
+msgid "Language"
+msgstr ""
+
+#: templates/personal.php:44
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:51
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr ""
+
+#: templates/users.php:21 templates/users.php:76
+msgid "Name"
+msgstr ""
+
+#: templates/users.php:23 templates/users.php:77
+msgid "Password"
+msgstr ""
+
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
+msgid "Groups"
+msgstr ""
+
+#: templates/users.php:32
+msgid "Create"
+msgstr ""
+
+#: templates/users.php:35
+msgid "Default Quota"
+msgstr ""
+
+#: templates/users.php:55 templates/users.php:138
+msgid "Other"
+msgstr ""
+
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:146
+msgid "Delete"
+msgstr ""
diff --git a/l10n/fi/tasks.po b/l10n/fi/tasks.po
new file mode 100644
index 00000000000..91f222dac37
--- /dev/null
+++ b/l10n/fi/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/fi/user_ldap.po b/l10n/fi/user_ldap.po
new file mode 100644
index 00000000000..70707a1d170
--- /dev/null
+++ b/l10n/fi/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/fi/user_migrate.po b/l10n/fi/user_migrate.po
new file mode 100644
index 00000000000..cd3ef8ef5a9
--- /dev/null
+++ b/l10n/fi/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/fi/user_openid.po b/l10n/fi/user_openid.po
new file mode 100644
index 00000000000..a6f5b6048de
--- /dev/null
+++ b/l10n/fi/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Finnish (http://www.transifex.com/projects/p/owncloud/language/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/fi_FI/admin_dependencies_chk.po b/l10n/fi_FI/admin_dependencies_chk.po
new file mode 100644
index 00000000000..a9a1eac7b0a
--- /dev/null
+++ b/l10n/fi_FI/admin_dependencies_chk.po
@@ -0,0 +1,74 @@
+# 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>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-24 02:01+0200\n"
+"PO-Revision-Date: 2012-08-23 13: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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi_FI\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr "php-gd-moduuli vaaditaan, jotta kuvista on mahdollista luoda esikatselukuvia"
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr "php-ldap-moduuli vaaditaan, jotta yhteys ldap-palvelimeen on mahdollista"
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr "php-zip-moduuli vaaditaan, jotta useiden tiedostojen samanaikainen lataus on mahdollista"
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr "php-xml-moduuli vaaditaan, jotta tiedostojen jako webdavia käyttäen on mahdollista"
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr "php-pdo-moduuli tarvitaan, jotta ownCloud-tietojen tallennus tietokantaan on mahdollista"
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr "Riippuvuuksien tila"
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr "Käyttökohde:"
diff --git a/l10n/fi_FI/admin_migrate.po b/l10n/fi_FI/admin_migrate.po
new file mode 100644
index 00000000000..ce68f4275d7
--- /dev/null
+++ b/l10n/fi_FI/admin_migrate.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:
+# Jiri Grönroos <jiri.gronroos@iki.fi>, 2012.
+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:55+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi_FI\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr "Vie tämä ownCloud-istanssi"
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr "Vie"
diff --git a/l10n/fi_FI/bookmarks.po b/l10n/fi_FI/bookmarks.po
new file mode 100644
index 00000000000..70bd07ab62f
--- /dev/null
+++ b/l10n/fi_FI/bookmarks.po
@@ -0,0 +1,61 @@
+# 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>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:21+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi_FI\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr "Kirjanmerkit"
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr "nimetön"
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr "Vedä tämä selaimesi kirjanmerkkipalkkiin ja napsauta sitä, kun haluat lisätä kirjanmerkin nopeasti:"
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr "Lue myöhemmin"
+
+#: templates/list.php:13
+msgid "Address"
+msgstr "Osoite"
+
+#: templates/list.php:14
+msgid "Title"
+msgstr "Otsikko"
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr "Tunnisteet"
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr "Tallenna kirjanmerkki"
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr "Sinulla ei ole kirjanmerkkejä"
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr "Kirjanmerkitsin <br />"
diff --git a/l10n/fi_FI/calendar.po b/l10n/fi_FI/calendar.po
index 17475e37a09..6b129f3ee91 100644
--- a/l10n/fi_FI/calendar.po
+++ b/l10n/fi_FI/calendar.po
@@ -10,21 +10,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Finnish (Finland) (http://www.transifex.net/projects/p/owncloud/language/fi_FI/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 12:14+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"
"Content-Transfer-Encoding: 8bit\n"
"Language: fi_FI\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Kalentereita ei löytynyt"
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Tapahtumia ei löytynyt."
@@ -32,300 +40,394 @@ msgstr "Tapahtumia ei löytynyt."
msgid "Wrong calendar"
msgstr "Väärä kalenteri"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr "Tiedosto ei joko sisältänyt tapahtumia tai vaihtoehtoisesti kaikki tapahtumat on jo tallennettu kalenteriisi."
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr "Tuonti epäonnistui"
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr "tapahtumaa on tallennettu kalenteriisi"
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Uusi aikavyöhyke:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Aikavyöhyke vaihdettu"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Virheellinen pyyntö"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:37 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Kalenteri"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
msgstr ""
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
msgstr ""
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
msgstr ""
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
msgstr ""
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr ""
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Syntymäpäivä"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr ""
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Ota yhteyttä"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Asiakkaat"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Toimittaja"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Vapaapäivät"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Ideat"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Matkustus"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Vuosipäivät"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Tapaamiset"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Muut"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Henkilökohtainen"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projektit"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Kysymykset"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Työ"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "nimetön"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Uusi kalenteri"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Ei toistoa"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Päivittäin"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Viikottain"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Arkipäivisin"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Joka toinen viikko"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Kuukausittain"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Vuosittain"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "Ei koskaan"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr ""
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr ""
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr ""
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr ""
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Maanantai"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Tiistai"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Keskiviikko"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Torstai"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Perjantai"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Lauantai"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Sunnuntai"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr ""
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "ensimmäinen"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "toinen"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "kolmas"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "neljäs"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "viides"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "viimeinen"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Tammikuu"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Helmikuu"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Maaliskuu"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Huhtikuu"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Toukokuu"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Kesäkuu"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Heinäkuu"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "Elokuu"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "Syyskuu"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Lokakuu"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "Marraskuu"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Joulukuu"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr ""
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr ""
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr ""
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr ""
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Päivämäärä"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr ""
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr "Su"
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr "Ma"
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr "Ti"
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr "Ke"
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr "To"
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr "Pe"
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr "La"
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr "Tammi"
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr "Helmi"
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr "Maalis"
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr "Huhti"
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr "Touko"
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr "Kesä"
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr "Heinä"
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr "Elo"
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr "Syys"
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr "Loka"
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr "Marras"
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr "Joulu"
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Koko päivä"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Uusi kalenteri"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Puuttuvat kentät"
@@ -359,40 +461,32 @@ msgstr "Tapahtuma päättyy ennen alkamistaan"
msgid "There was a database fail"
msgstr "Tapahtui tietokantavirhe"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Viikko"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Kuukausi"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Lista"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Tänään"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Kalenterit"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Tiedostoa jäsennettäessä tapahtui virhe."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Valitse aktiiviset kalenterit"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr "Asetukset"
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Omat kalenterisi"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDav-linkki"
@@ -404,19 +498,19 @@ msgstr "Jaetut kalenterit"
msgid "No shared calendars"
msgstr "Ei jaettuja kalentereita"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Jaa kalenteri"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Lataa"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Muokkaa"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Poista"
@@ -502,23 +596,23 @@ msgstr "Erota luokat pilkuilla"
msgid "Edit categories"
msgstr "Muokkaa luokkia"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Koko päivän tapahtuma"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Alkaa"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Päättyy"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Tarkemmat asetukset"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Sijainti"
@@ -526,7 +620,7 @@ msgstr "Sijainti"
msgid "Location of the Event"
msgstr "Tapahtuman sijainti"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Kuvaus"
@@ -534,84 +628,86 @@ msgstr "Kuvaus"
msgid "Description of the Event"
msgstr "Tapahtuman kuvaus"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Toisto"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr ""
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Valitse viikonpäivät"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Valitse päivät"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr ""
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr ""
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Valitse kuukaudet"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Valitse viikot"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr ""
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Intervalli"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr ""
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr ""
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "luo uusi kalenteri"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Tuo kalenteritiedosto"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
msgstr "Valitse kalenteri"
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "luo uusi kalenteri"
-
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Uuden kalenterin nimi"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Tuo"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Tuodaan kalenteria"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr "Samalla nimellä on jo olemassa kalenteri. Jos jatkat kaikesta huolimatta, kalenterit yhdistetään."
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Kalenteri tuotu onnistuneesti"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Tuo"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Sulje ikkuna"
@@ -627,45 +723,73 @@ msgstr "Avaa tapahtuma"
msgid "No categories selected"
msgstr "Luokkia ei ole valittu"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Valitse luokka"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr ""
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr ""
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr "Yleiset"
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Aikavyöhyke"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Tarkista aina aikavyöhykkeen muutokset"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr "Päivitä aikavyöhykkeet automaattisesti"
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Ajan esitysmuoto"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr "Ajan näyttömuoto"
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24 tuntia"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12 tuntia"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Viikon ensimmäinen päivä"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr "Viikon alkamispäivä"
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr "Kalenterin CalDAV-synkronointiosoitteet"
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Kalenterin CalDAV-synkronointiosoite:"
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr "Ensisijainen osoite (Kontact ja muut vastaavat)"
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/fi_FI/contacts.po b/l10n/fi_FI/contacts.po
index 47486231766..a80843bf7e8 100644
--- a/l10n/fi_FI/contacts.po
+++ b/l10n/fi_FI/contacts.po
@@ -11,637 +11,770 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Finnish (Finland) (http://www.transifex.net/projects/p/owncloud/language/fi_FI/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Virhe yhteystietoa lisättäessä."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Tyhjää ominaisuutta ei voi lisätä."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Vähintään yksi osoitekenttä tulee täyttää."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr ""
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
msgstr ""
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Virhe lisättäessä ominaisuutta yhteystietoon."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Virhe päivitettäessä osoitekirjaa."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr ""
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
-msgstr ""
+msgstr "Virhe asettaessa tarkistussummaa."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Luokkia ei ole valittu poistettavaksi."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Osoitekirjoja ei löytynyt."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Yhteystietoja ei löytynyt."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Virhe yhteystietoa lisättäessä."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr ""
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Tyhjää ominaisuutta ei voi lisätä."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Vähintään yksi osoitekenttä tulee täyttää."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "vCardin tiedot eivät kelpaa. Lataa sivu uudelleen."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr ""
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "Virhe jäsennettäessä vCardia tunnisteelle: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Ilman nimeä olevaa osoitekirjaa ei voi lisätä."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr ""
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Virhe lisättäessä osoitekirjaa."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr ""
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Virhe aktivoitaessa osoitekirjaa."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr ""
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr ""
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr ""
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Virhe tallennettaessa tilapäistiedostoa."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr ""
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr ""
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr ""
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Virhe poistettaessa yhteystiedon ominaisuutta."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr ""
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr ""
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
-msgstr ""
+msgstr "Kuvan polkua ei annettu."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Tiedostoa ei ole olemassa:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Virhe kuvaa ladatessa."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
msgstr ""
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
msgstr ""
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Virhe yhteystietoa tallennettaessa."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Virhe asettaessa kuvaa uuteen kokoon"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Virhe rajatessa kuvaa"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Virhe luotaessa väliaikaista kuvaa"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
msgstr ""
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr ""
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr ""
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Virhe päivitettäessä yhteystiedon ominaisuutta."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr ""
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Virhe päivitettäessä osoitekirjaa."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr ""
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Ei virhettä, tiedosto lähetettiin onnistuneesti"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Lähetetyn tiedoston koko ylittää upload_max_filesize-asetuksen arvon php.ini-tiedostossa"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "Lähetetty tiedosto lähetettiin vain osittain"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Tiedostoa ei lähetetty"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "Tilapäiskansio puuttuu"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Väliaikaiskuvan tallennus epäonnistui:"
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Väliaikaiskuvan lataus epäonnistui:"
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Tiedostoa ei lähetetty. Tuntematon virhe"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Yhteystiedot"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
msgstr ""
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
msgstr ""
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Virhe"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Muokkaa nimeä"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Tiedostoja ei ole valittu lähetettäväksi."
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: js/contacts.js:1119
-msgid "Select photo"
-msgstr ""
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr "Virhe profiilikuvaa ladatessa."
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
-
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr ""
-
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
-msgstr ""
-
-#: js/contacts.js:1476
-msgid "OK"
-msgstr ""
-
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
-msgstr ""
-
-#: js/contacts.js:1634
-msgid "Upload too large"
-msgstr ""
+msgstr "Valitse tyyppi"
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Wrong file type"
-msgstr ""
-
-#: js/contacts.js:1644
+#: js/contacts.js:1578
msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
-msgstr ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr "Jotkin yhteystiedot on merkitty poistettaviksi, mutta niitä ei ole vielä poistettu. Odota hetki, että kyseiset yhteystiedot poistetaan."
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr "Haluatko yhdistää nämä osoitekirjat?"
#: js/loader.js:49
msgid "Result: "
-msgstr ""
+msgstr "Tulos: "
#: js/loader.js:49
msgid " imported, "
-msgstr ""
+msgstr " tuotu, "
#: js/loader.js:49
msgid " failed."
-msgstr ""
+msgstr " epäonnistui."
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Osoitekirjaa ei löytynyt."
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
+msgstr "Näyttönimi ei voi olla tyhjä."
-#: lib/app.php:34
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr "Osoitekirjaa ei löytynyt:"
+
+#: lib/app.php:52
msgid "This is not your addressbook."
msgstr "Tämä ei ole osoitekirjasi."
-#: lib/app.php:45
+#: lib/app.php:71
msgid "Contact could not be found."
msgstr "Yhteystietoa ei löytynyt."
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Osoite"
+#: lib/app.php:116
+msgid "Jabber"
+msgstr "Jabber"
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Puhelin"
+#: lib/app.php:121
+msgid "AIM"
+msgstr "AIM"
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "Sähköposti"
+#: lib/app.php:126
+msgid "MSN"
+msgstr "MSN"
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organisaatio"
+#: lib/app.php:131
+msgid "Twitter"
+msgstr "Twitter"
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr "Google Talk"
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr "Facebook"
+
+#: lib/app.php:146
+msgid "XMPP"
+msgstr "XMPP"
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr "ICQ"
+
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr "Yahoo"
+
+#: lib/app.php:161
+msgid "Skype"
+msgstr "Skype"
+
+#: lib/app.php:166
+msgid "QQ"
+msgstr "QQ"
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr "GaduGadu"
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Työ"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Koti"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr "Muu"
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mobiili"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Teksti"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Ääni"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Viesti"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Faksi"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Video"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Hakulaite"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Syntymäpäivä"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr "Työ"
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr "Kysymykset"
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "Henkilön {name} syntymäpäivä"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Yhteystieto"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Lisää yhteystieto"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Tuo"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr "Asetukset"
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Osoitekirjat"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Muokkaa osoitekirjoja"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Sulje"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Uusi osoitekirja"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr "Pikanäppäimet"
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Tuo VCF-tiedostosta"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDav-linkki"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr "Seuraava yhteystieto luettelossa"
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Lataa"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr "Edellinen yhteystieto luettelossa"
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Muokkaa"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Poista"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr "Seuraava osoitekirja"
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Lataa yhteystieto"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr "Edellinen osoitekirja"
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Poista yhteystieto"
+#: templates/index.php:54
+msgid "Actions"
+msgstr "Toiminnot"
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr "Päivitä yhteystietoluettelo"
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr "Lisää uusi yhteystieto"
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr "Lisää uusi osoitekirja"
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr "Poista nykyinen yhteystieto"
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr ""
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Poista nykyinen valokuva"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Muokkaa nykyistä valokuvaa"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Lähetä uusi valokuva"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Valitse valokuva ownCloudista"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr ""
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
-msgstr ""
+msgstr "Muokkaa nimitietoja"
+
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organisaatio"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Poista"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Kutsumanimi"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Anna kutsumanimi"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Syntymäpäivä"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr "Verkkosivu"
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr "http://www.somesite.com"
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr "Siirry verkkosivulle"
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr ""
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Ryhmät"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Erota ryhmät pilkuilla"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Muokkaa ryhmiä"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
-msgstr ""
+msgstr "Ensisijainen"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Anna kelvollinen sähköpostiosoite."
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Anna sähköpostiosoite"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
-msgstr ""
+msgstr "Lähetä sähköpostia"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Poista sähköpostiosoite"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Anna puhelinnumero"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Poista puhelinnumero"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr "Pikaviestin"
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Näytä kartalla"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
-msgstr ""
+msgstr "Muokkaa osoitetietoja"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Lisää huomiot tähän."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Lisää kenttä"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Profiilikuva"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Puhelin"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Huomio"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "Sähköposti"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Poista nykyinen valokuva"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Muokkaa nykyistä valokuvaa"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Osoite"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Lähetä uusi valokuva"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Huomio"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Valitse valokuva ownCloudista"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Lataa yhteystieto"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Poista yhteystieto"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "Väliaikainen kuva on poistettu välimuistista."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Muokkaa osoitetta"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Tyyppi"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Postilokero"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr "Katuosoite"
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr "Katu ja numero"
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Laajennettu"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Katuosoite"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr "Asunnon numero jne."
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Paikkakunta"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Alue"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Postinumero"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr "Postinumero"
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "Maa"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Muokkaa luokkia"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Lisää"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Osoitekirja"
@@ -722,35 +855,6 @@ msgstr ""
msgid "Sn."
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Uusi osoitekirja"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Muokkaa osoitekirjaa"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr ""
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Aktiivinen"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Tallenna"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Lähetä"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Peru"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "Tuo yhteystiedon sisältävä tiedosto"
@@ -767,57 +871,86 @@ msgstr "luo uusi osoitekirja"
msgid "Name of new addressbook"
msgstr "Uuden osoitekirjan nimi"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Tuo"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "Tuodaan yhteystietoja"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "Valitse osoitekirja, johon yhteystiedot tuodaan:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr ""
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "Osoitekirjassasi ei ole yhteystietoja."
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Lisää yhteystieto"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Muokkaa osoitekirjoja"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr "Valitse osoitekirjat"
-#: templates/settings.php:4
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr "Anna nimi"
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr "Anna kuvaus"
+
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "CardDAV-synkronointiosoitteet"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr ""
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr ""
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr "Näytä CardDav-linkki"
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr "Näytä vain luku -muodossa oleva VCF-linkki"
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr "Jaa"
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Lataa"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Muokkaa"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Uusi osoitekirja"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr "Nimi"
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr "Kuvaus"
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Tallenna"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Peru"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr "Lisää..."
diff --git a/l10n/fi_FI/core.po b/l10n/fi_FI/core.po
index a770488ca37..072f0ad9ca4 100644
--- a/l10n/fi_FI/core.po
+++ b/l10n/fi_FI/core.po
@@ -12,10 +12,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Finnish (Finland) (http://www.transifex.net/projects/p/owncloud/language/fi_FI/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -38,83 +38,83 @@ msgstr "Tämä luokka on jo olemassa: "
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
msgstr ""
-#: js/js.js:520
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Asetukset"
+
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Tammikuu"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Helmikuu"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Maaliskuu"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "Huhtikuu"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Toukokuu"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Kesäkuu"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Heinäkuu"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "Elokuu"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "Syyskuu"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Lokakuu"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "Marraskuu"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "Joulukuu"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Peru"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Ei"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Kyllä"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Ok"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Luokkia ei valittu poistettavaksi."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Virhe"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Owncloud-salasanan nollaus"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "ownCloud-salasanan nollaus"
@@ -244,14 +244,10 @@ msgstr "Viimeistele asennus"
msgid "web services under your control"
msgstr "verkkopalvelut hallinnassasi"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Kirjaudu ulos"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Asetukset"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Unohditko salasanasi?"
diff --git a/l10n/fi_FI/files.po b/l10n/fi_FI/files.po
index 529f183e467..e4ee45867c3 100644
--- a/l10n/fi_FI/files.po
+++ b/l10n/fi_FI/files.po
@@ -11,43 +11,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Finnish (Finland) (http://www.transifex.net/projects/p/owncloud/language/fi_FI/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 12:10+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"
"Content-Transfer-Encoding: 8bit\n"
"Language: fi_FI\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Ei virheitä, tiedosto lähetettiin onnistuneesti"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Lähetetty tiedosto ylittää upload_max_filesize-arvon rajan php.ini-tiedostossa"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Tiedoston lähetys onnistui vain osittain"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Yhtäkään tiedostoa ei lähetetty"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Väliaikaiskansiota ei ole olemassa"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Levylle kirjoitus epäonnistui"
@@ -55,57 +55,85 @@ msgstr "Levylle kirjoitus epäonnistui"
msgid "Files"
msgstr "Tiedostot"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Poista"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "on jo olemassa"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "korvaa"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "peru"
-#: js/files.js:170
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "korvattu"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "käyttäen"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "kumoa"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "poistettu"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "luodaan ZIP-tiedostoa, tämä saattaa kestää hetken."
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Tiedoston lähetys epäonnistui, koska sen koko on 0 tavua tai kyseessä on kansio"
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "Lähetysvirhe."
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "Odottaa"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "Lähetys peruttu."
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "Virheellinen nimi, merkki '/' ei ole sallittu."
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Koko"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Muutettu"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "kansio"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "kansiota"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "tiedosto"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "tiedostoa"
#: templates/admin.php:5
msgid "File handling"
@@ -117,7 +145,7 @@ msgstr "Lähetettävän tiedoston suurin sallittu koko"
#: templates/admin.php:7
msgid "max. possible: "
-msgstr ""
+msgstr "suurin mahdollinen:"
#: templates/admin.php:9
msgid "Needed for multi-file and folder downloads."
@@ -175,10 +203,6 @@ msgstr "Jaa"
msgid "Download"
msgstr "Lataa"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Poista"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Lähetettävä tiedosto on liian suuri"
diff --git a/l10n/fi_FI/files_encryption.po b/l10n/fi_FI/files_encryption.po
new file mode 100644
index 00000000000..89ad916e382
--- /dev/null
+++ b/l10n/fi_FI/files_encryption.po
@@ -0,0 +1,35 @@
+# 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>, 2012.
+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"
+"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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr "Salaus"
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr "Jätä seuraavat tiedostotyypit salaamatta"
+
+#: templates/settings.php:5
+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
new file mode 100644
index 00000000000..2cee464ea24
--- /dev/null
+++ b/l10n/fi_FI/files_external.po
@@ -0,0 +1,83 @@
+# 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>, 2012.
+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 11:04+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi_FI\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr "Erillinen tallennusväline"
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr "Liitospiste"
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr "Taustaosa"
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr "Asetukset"
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr "Valinnat"
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr "Lisää liitospiste"
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr "Ei asetettu"
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr "Kaikki käyttäjät"
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr "Ryhmät"
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr "Käyttäjät"
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr "Poista"
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr "SSL-juurivarmenteet"
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr "Tuo juurivarmenne"
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr "Salli käyttäjien liittää omia erillisiä tallennusvälineitä"
diff --git a/l10n/fi_FI/files_sharing.po b/l10n/fi_FI/files_sharing.po
new file mode 100644
index 00000000000..dba2e1225d7
--- /dev/null
+++ b/l10n/fi_FI/files_sharing.po
@@ -0,0 +1,35 @@
+# 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>, 2012.
+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 11:35+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi_FI\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr "Koko"
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr "Muokattu"
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr "Poista kaikki"
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr "Poista"
diff --git a/l10n/fi_FI/files_versions.po b/l10n/fi_FI/files_versions.po
new file mode 100644
index 00000000000..c4bdbdc5821
--- /dev/null
+++ b/l10n/fi_FI/files_versions.po
@@ -0,0 +1,27 @@
+# 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>, 2012.
+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:59+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi_FI\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr "Vanhenna kaikki versiot"
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr "Käytä tiedostojen versiointia"
diff --git a/l10n/fi_FI/gallery.po b/l10n/fi_FI/gallery.po
index b4ea7802166..275d7d08abe 100644
--- a/l10n/fi_FI/gallery.po
+++ b/l10n/fi_FI/gallery.po
@@ -9,71 +9,35 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Finnish (Finland) (http://www.transifex.net/projects/p/owncloud/language/fi_FI/)\n"
+"POT-Creation-Date: 2012-07-27 02:02+0200\n"
+"PO-Revision-Date: 2012-07-26 10:43+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"
"Content-Transfer-Encoding: 8bit\n"
"Language: fi_FI\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: appinfo/app.php:37
+#: appinfo/app.php:39
msgid "Pictures"
msgstr "Kuvat"
-#: js/album_cover.js:44
+#: js/pictures.js:12
msgid "Share gallery"
-msgstr ""
+msgstr "Jaa galleria"
-#: js/album_cover.js:64 js/album_cover.js:100 js/album_cover.js:133
+#: js/pictures.js:32
msgid "Error: "
-msgstr ""
+msgstr "Virhe: "
-#: js/album_cover.js:64 js/album_cover.js:100
+#: js/pictures.js:32
msgid "Internal error"
-msgstr ""
-
-#: js/album_cover.js:114
-msgid "Scanning root"
-msgstr ""
-
-#: js/album_cover.js:115
-msgid "Default order"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Ascending"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Descending"
-msgstr ""
-
-#: js/album_cover.js:117 templates/index.php:19
-msgid "Settings"
-msgstr "Asetukset"
-
-#: js/album_cover.js:122
-msgid "Scanning root cannot be empty"
-msgstr ""
-
-#: js/album_cover.js:122 js/album_cover.js:133
-msgid "Error"
-msgstr ""
-
-#: templates/index.php:16
-msgid "Rescan"
-msgstr "Etsi uusia"
-
-#: templates/index.php:17
-msgid "Stop"
-msgstr "Pysäytä"
+msgstr "Sisäinen virhe"
-#: templates/index.php:18
-msgid "Share"
-msgstr "Jaa"
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr "Diaesitys"
#: templates/view_album.php:19
msgid "Back"
diff --git a/l10n/fi_FI/lib.po b/l10n/fi_FI/lib.po
new file mode 100644
index 00000000000..50d80dd63b7
--- /dev/null
+++ b/l10n/fi_FI/lib.po
@@ -0,0 +1,113 @@
+# 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>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-03 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 18:23+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi_FI\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: app.php:287
+msgid "Help"
+msgstr "Ohje"
+
+#: app.php:294
+msgid "Personal"
+msgstr "Henkilökohtainen"
+
+#: app.php:299
+msgid "Settings"
+msgstr "Asetukset"
+
+#: app.php:304
+msgid "Users"
+msgstr "Käyttäjät"
+
+#: app.php:311
+msgid "Apps"
+msgstr "Sovellukset"
+
+#: app.php:313
+msgid "Admin"
+msgstr "Ylläpitäjä"
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr "ZIP-lataus on poistettu käytöstä."
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr "Tiedostot on ladattava yksittäin."
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr "Takaisin tiedostoihin"
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr "Valitut tiedostot ovat liian suurikokoisia mahtuakseen zip-tiedostoon."
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr "Sovellusta ei ole otettu käyttöön"
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr "Todennusvirhe"
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr "Valtuutus vanheni. Lataa sivu uudelleen."
+
+#: template.php:86
+msgid "seconds ago"
+msgstr "sekuntia sitten"
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr "1 minuutti sitten"
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr "%d minuuttia sitten"
+
+#: template.php:91
+msgid "today"
+msgstr "tänään"
+
+#: template.php:92
+msgid "yesterday"
+msgstr "eilen"
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr "%d päivää sitten"
+
+#: template.php:94
+msgid "last month"
+msgstr "viime kuussa"
+
+#: template.php:95
+msgid "months ago"
+msgstr "kuukautta sitten"
+
+#: template.php:96
+msgid "last year"
+msgstr "viime vuonna"
+
+#: template.php:97
+msgid "years ago"
+msgstr "vuotta sitten"
diff --git a/l10n/fi_FI/settings.po b/l10n/fi_FI/settings.po
index 40341131554..f3610fa859f 100644
--- a/l10n/fi_FI/settings.po
+++ b/l10n/fi_FI/settings.po
@@ -9,77 +9,109 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Finnish (Finland) (http://www.transifex.net/projects/p/owncloud/language/fi_FI/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 12:07+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"
"Content-Transfer-Encoding: 8bit\n"
"Language: fi_FI\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: ajax/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "Sähköposti tallennettu"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Virheellinen sähköposti"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID on vaihdettu"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Virheellinen pyyntö"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Todennusvirhe"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Kieli on vaihdettu"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "Virhe"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "Poista käytöstä"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Käytä"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Tallennetaan..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "_kielen_nimi_"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "Turvallisuusvaroitus"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "Cron"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr "käytä järjestelmän cron-palvelua"
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Loki"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Lisää"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Lisää ohjelmasi"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Valitse ohjelma"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Katso sovellussivu osoitteessa apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-lisenssöity"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "henkilölle"
@@ -113,7 +145,7 @@ msgstr "Olet käyttänyt"
#: templates/personal.php:8
msgid "of the available"
-msgstr "käytettävissäsi on yhteensä"
+msgstr ", käytettävissäsi on yhteensä"
#: templates/personal.php:12
msgid "Desktop and Mobile Syncing Clients"
@@ -157,7 +189,7 @@ msgstr "Sähköpostiosoitteesi"
#: templates/personal.php:32
msgid "Fill in an email address to enable password recovery"
-msgstr "Kirjoita sähköpostiosoitteesi alle, jotta unohdettu salasana voidaan palauttaa"
+msgstr "Anna sähköpostiosoitteesi, jotta unohdettu salasana on mahdollista palauttaa"
#: templates/personal.php:38 templates/personal.php:39
msgid "Language"
@@ -171,34 +203,38 @@ msgstr "Auta kääntämisessä"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "voit yhdistää tiedostonhallintasovelluksellasi ownCloudiin käyttämällä tätä osoitetta"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Nimi"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Salasana"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Ryhmät"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Luo"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Oletuskiintiö"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Muu"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Kiintiö"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Poista"
diff --git a/l10n/fi_FI/tasks.po b/l10n/fi_FI/tasks.po
new file mode 100644
index 00000000000..b8857baee6d
--- /dev/null
+++ b/l10n/fi_FI/tasks.po
@@ -0,0 +1,107 @@
+# 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>, 2012.
+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:23+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi_FI\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr "Virheellinen päivä tai aika"
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr "Tehtävät"
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr "Ei luokkaa"
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr "Määrittelemätön"
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr "1=korkein"
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr "5=keskitaso"
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr "9=matalin"
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr "Tyhjä yhteenveto"
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr "Virheellinen prioriteetti"
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr "Lisää tehtävä"
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr "Ladataan tehtäviä..."
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr "Tärkeä"
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr "Enemmän"
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr "Vähemmän"
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr "Poista"
diff --git a/l10n/fi_FI/user_ldap.po b/l10n/fi_FI/user_ldap.po
new file mode 100644
index 00000000000..a8c8f4e5c8f
--- /dev/null
+++ b/l10n/fi_FI/user_ldap.po
@@ -0,0 +1,166 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <jarkko.moilanen@want3d.fi>, 2012.
+# Jiri Grönroos <jiri.gronroos@iki.fi>, 2012.
+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 18:00+0000\n"
+"Last-Translator: kyyberi <jarkko.moilanen@want3d.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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi_FI\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr "Isäntä"
+
+#: templates/settings.php:8
+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 käytät SSL:ää. Aloita silloin ldaps://"
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr "Oletus DN"
+
+#: templates/settings.php:9
+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:10
+msgid "User DN"
+msgstr "Käyttäjän DN"
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr "Salasana"
+
+#: templates/settings.php:11
+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:12
+msgid "User Login Filter"
+msgstr "Login suodatus"
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr "käytä %%uid paikanvaraajaa, ts. \"uid=%%uid\""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr "Käyttäjien suodatus"
+
+#: templates/settings.php:13
+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:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr "ilman paikanvaraustermiä, ts. \"objectClass=person\"."
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr "Ryhmien suodatus"
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr "Määrittelee käytettävän suodattimen, kun ryhmiä haetaan. "
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr "ilman paikanvaraustermiä, ts. \"objectClass=posixGroup\"."
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr "Portti"
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr "Oletus käyttäjäpuu"
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr "Ryhmien juuri"
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr "Ryhmä-jäsen assosiaatio (yhteys)"
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr "Käytä TLS:ää"
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr "Älä käytä SSL yhteyttä varten, se epäonnistuu. "
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr "Kirjainkoosta piittamaton LDAP-palvelin (Windows)"
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr "Sulje SSL sertifikaatin käyttö"
+
+#: templates/settings.php:23
+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ä optiolla, siirrä LDAP palvelimen SSL sertifikaatti onwCloud palvelimellesi. "
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr "Ei suositella, käytä vain testausta varten."
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr "tavuissa"
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr "sekunneissa. Muutos tyhjentää välimuistin."
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr "Ohje"
diff --git a/l10n/fi_FI/user_migrate.po b/l10n/fi_FI/user_migrate.po
new file mode 100644
index 00000000000..b0ab6824519
--- /dev/null
+++ b/l10n/fi_FI/user_migrate.po
@@ -0,0 +1,52 @@
+# 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>, 2012.
+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 11:06+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi_FI\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr "Vie"
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr "Jokin meni pieleen vientiä suorittaessa"
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr "Tapahtui virhe"
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr "Vie käyttäjätilisi"
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr "Tämä luo ownCloud-käyttäjätilisi sisältävän pakatun tiedoston."
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr "Tuo käyttäjätili"
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr "Tuo"
diff --git a/l10n/fi_FI/user_openid.po b/l10n/fi_FI/user_openid.po
new file mode 100644
index 00000000000..36900815c79
--- /dev/null
+++ b/l10n/fi_FI/user_openid.po
@@ -0,0 +1,55 @@
+# 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>, 2012.
+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 11:37+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fi_FI\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr "Identiteetti: <b>"
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr "Alue: <b>"
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr "Käyttäjä: <b>"
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr "Kirjaudu"
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr "Virhe: <b>Käyttäjää ei valittu"
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/fr/admin_dependencies_chk.po b/l10n/fr/admin_dependencies_chk.po
new file mode 100644
index 00000000000..36480849bec
--- /dev/null
+++ b/l10n/fr/admin_dependencies_chk.po
@@ -0,0 +1,74 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Romain DEP. <rom1dep@gmail.com>, 2012.
+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 15:59+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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr "Le module php-json est requis pour l'inter-communication de nombreux modules."
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr "Le module php-curl est requis afin de rapatrier le titre des pages lorsque vous ajoutez un marque-pages."
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr "Le module php-gd est requis afin de permettre la création d'aperçus pour vos images."
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr "Le module php-ldap est requis afin de permettre la connexion à votre serveur ldap."
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr "Le module php-zip est requis pour le téléchargement simultané de plusieurs fichiers."
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr "Le module php-mb_multibyte est requis pour une gestion correcte des encodages."
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr "Le module php-ctype est requis pour la validation des données."
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr "Le module php-xml est requis pour le partage de fichiers via webdav."
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr "La directive allow_url_fopen de votre fichier php.ini doit être à la valeur 1 afin de permettre le rapatriement de la base de connaissance depuis les serveurs OCS."
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr "le module php-pdo est requis pour le stockage des données ownCloud en base de données."
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr "Statut des dépendances"
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr "Utilisé par :"
diff --git a/l10n/fr/admin_migrate.po b/l10n/fr/admin_migrate.po
new file mode 100644
index 00000000000..a3f34310cc1
--- /dev/null
+++ b/l10n/fr/admin_migrate.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:
+# Romain DEP. <rom1dep@gmail.com>, 2012.
+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 15:51+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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr "Exporter cette instance ownCloud"
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr "Ceci va créer une archive compressée contenant les données de cette instance ownCloud.\n Veuillez choisir le type d'export :"
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr "Exporter"
diff --git a/l10n/fr/bookmarks.po b/l10n/fr/bookmarks.po
new file mode 100644
index 00000000000..f3f172409f2
--- /dev/null
+++ b/l10n/fr/bookmarks.po
@@ -0,0 +1,62 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Geoffrey Guerrier <geoffrey.guerrier@gmail.com>, 2012.
+# Romain DEP. <rom1dep@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-07-31 22:53+0200\n"
+"PO-Revision-Date: 2012-07-31 00:26+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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr "Favoris"
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr "sans titre"
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr "Glissez ceci dans les favoris de votre navigateur, et cliquer dessus lorsque vous souhaitez ajouter la page en cours à vos marques-pages :"
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr "Lire plus tard"
+
+#: templates/list.php:13
+msgid "Address"
+msgstr "Adresse"
+
+#: templates/list.php:14
+msgid "Title"
+msgstr "Titre"
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr "Étiquettes"
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr "Sauvegarder le favori"
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr "Vous n'avez aucun favori"
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr "Gestionnaire de favoris <br />"
diff --git a/l10n/fr/calendar.po b/l10n/fr/calendar.po
index b9d0abab868..c69485641c7 100644
--- a/l10n/fr/calendar.po
+++ b/l10n/fr/calendar.po
@@ -6,28 +6,39 @@
# <fboulogne@april.org>, 2011.
# <gp4004@arghh.org>, 2011.
# Jan-Christoph Borchardt <jan@unhosted.org>, 2011.
+# Nahir Mohamed <nahirmoha@gmail.com>, 2012.
+# Nicolas <boolet.is@free.fr>, 2012.
# <pierreamiel.giraud@gmail.com>, 2012.
# <rom1dep@gmail.com>, 2011, 2012.
+# Romain DEP. <rom1dep@gmail.com>, 2012.
# Yann Yann <chezyann@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: French (http://www.transifex.net/projects/p/owncloud/language/fr/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
-#: ajax/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr "Tous les calendriers ne sont pas mis en cache"
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr "Tout semble être en cache"
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Aucun calendrier n'a été trouvé."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Aucun événement n'a été trouvé."
@@ -35,300 +46,394 @@ msgstr "Aucun événement n'a été trouvé."
msgid "Wrong calendar"
msgstr "Mauvais calendrier"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr "Soit le fichier ne contient aucun événement soit tous les événements sont déjà enregistrés dans votre calendrier."
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr "Les événements ont été enregistrés dans le nouveau calendrier"
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr "Échec de l'import"
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr "Les événements ont été enregistrés dans votre calendrier"
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Nouveau fuseau horaire :"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Fuseau horaire modifié"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Requête invalide"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Calendrier"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd d/M"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd d/M"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM yyyy"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, d MMM, yyyy"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Anniversaire"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Professionnel"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Appel"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Clientèle"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Livraison"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Vacances"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Idées"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Déplacement"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Jubilé"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Meeting"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Autre"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Personnel"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projets"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Questions"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Travail"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr "par"
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "sans-nom"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Nouveau Calendrier"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Pas de répétition"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Tous les jours"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Hebdomadaire"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Quotidien"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Bi-hebdomadaire"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Mensuel"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Annuel"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "jamais"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "par occurrences"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "par date"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "par jour du mois"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "par jour de la semaine"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Lundi"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Mardi"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Mercredi"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Jeudi"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Vendredi"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Samedi"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Dimanche"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "événements du mois par semaine"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "premier"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "deuxième"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "troisième"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "quatrième"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "cinquième"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "dernier"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Janvier"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Février"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Mars"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Avril"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Mai"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Juin"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Juillet"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "Août"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "Septembre"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Octobre"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "Novembre"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Décembre"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "par date d’événements"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "par jour(s) de l'année"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "par numéro de semaine(s)"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "par jour et mois"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Date"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Cal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr "Dim."
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr "Lun."
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr "Mar."
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr "Mer."
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr "Jeu"
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr "Ven."
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr "Sam."
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr "Jan."
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr "Fév."
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr "Mars"
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr "Avr."
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr "Mai"
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr "Juin"
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr "Juil."
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr "Août"
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr "Sep."
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr "Oct."
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr "Nov."
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr "Déc."
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Journée entière"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Nouveau Calendrier"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Champs manquants"
@@ -362,40 +467,32 @@ msgstr "L'évènement s'est terminé avant qu'il ne commence"
msgid "There was a database fail"
msgstr "Il y a eu un échec dans la base de donnée"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Semaine"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Mois"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Liste"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Aujourd'hui"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Calendriers"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Une erreur est survenue pendant la lecture du fichier."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Choix des calendriers actifs"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Vos calendriers"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "Lien CalDav"
@@ -407,19 +504,19 @@ msgstr "Calendriers partagés"
msgid "No shared calendars"
msgstr "Aucun calendrier partagé"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Partager le calendrier"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Télécharger"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Éditer"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Supprimer"
@@ -505,23 +602,23 @@ msgstr "Séparer les catégories par des virgules"
msgid "Edit categories"
msgstr "Modifier les catégories"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Journée entière"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "De"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "À"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Options avancées"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Emplacement"
@@ -529,7 +626,7 @@ msgstr "Emplacement"
msgid "Location of the Event"
msgstr "Emplacement de l'événement"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Description"
@@ -537,84 +634,86 @@ msgstr "Description"
msgid "Description of the Event"
msgstr "Description de l'événement"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Répétition"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Avancé"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Sélection des jours de la semaine"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Sélection des jours"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "et les événements de l'année par jour."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "et les événements du mois par jour."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Sélection des mois"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Sélection des semaines"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "et les événements de l'année par semaine."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Intervalle"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Fin"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "occurrences"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "Créer un nouveau calendrier"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Importer un fichier de calendriers"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Choisissez le calendrier svp"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "Créer un nouveau calendrier"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr "Veuillez sélectionner un calendrier"
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Nom pour le nouveau calendrier"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importer"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr "Choisissez un nom disponible !"
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Import du calendrier"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr "Un calendrier de ce nom existe déjà. Si vous choisissez de continuer les calendriers seront fusionnés."
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Calendrier importé avec succès"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Importer"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Fermer la fenêtre"
@@ -630,45 +729,73 @@ msgstr "Voir un événement"
msgid "No categories selected"
msgstr "Aucune catégorie sélectionnée"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Sélectionner une catégorie"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "de"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "à"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Fuseau horaire"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Toujours vérifier d'éventuels changements de fuseau horaire"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Format de l'heure"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24h"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12h"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Premier jour de la semaine"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr "Cache"
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr "Nettoyer le cache des événements répétitifs"
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr "Adresses de synchronisation des calendriers CalDAV"
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr "plus d'infos"
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr "Adresses principales (Kontact et assimilés)"
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Adresse de synchronisation du calendrier CalDAV :"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr "lien(s) iCalendar en lecture seule"
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/fr/contacts.po b/l10n/fr/contacts.po
index 4702c3bc4a3..b1aca8af7a8 100644
--- a/l10n/fr/contacts.po
+++ b/l10n/fr/contacts.po
@@ -4,646 +4,785 @@
#
# Translators:
# Borjan Tchakaloff <borjan@tchaka.fr>, 2012.
+# Cyril Glapa <kyriog@gmail.com>, 2012.
# <fboulogne@april.org>, 2011.
-# <gp4004@arghh.org>, 2011.
+# <gp4004@arghh.org>, 2011, 2012.
# <guiguidu31300@gmail.com>, 2012.
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
+# <mathieu.payrol@gmail.com>, 2012.
+# Nahir Mohamed <nahirmoha@gmail.com>, 2012.
+# Nicolas <boolet.is@free.fr>, 2012.
+# Robert Di Rosa <>, 2012.
# <rom1dep@gmail.com>, 2011, 2012.
+# Romain DEP. <rom1dep@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: French (http://www.transifex.net/projects/p/owncloud/language/fr/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
-#: ajax/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Des erreurs se sont produites lors de l'activation/désactivation du carnet d'adresses."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Une erreur s'est produite lors de l'ajout du contact."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Impossible d'ajouter un champ vide."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Au moins un des champs d'adresses doit être complété."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "L'ID n'est pas défini."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "Ajout d'une propriété en double:"
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Impossible de mettre à jour le carnet d'adresses avec un nom vide."
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Erreur lors de l'ajout du champ."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Erreur lors de la mise à jour du carnet d'adresses."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "Aucun ID fourni"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Erreur lors du paramétrage du hachage."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Pas de catégories sélectionnées pour la suppression."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Pas de carnet d'adresses trouvé."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Aucun contact trouvé."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Une erreur s'est produite lors de l'ajout du contact."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "Le champ Nom n'est pas défini."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr "Impossible de lire le contact :"
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Impossible d'ajouter un champ vide."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Au moins un des champs d'adresses doit être complété."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "Ajout d'une propriété en double:"
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr "Paramètre de Messagerie Instantanée manquants."
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr "Messagerie Instantanée inconnue"
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Les informations relatives à cette vCard sont incorrectes. Veuillez recharger la page."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "ID manquant"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "Erreur lors de l'analyse du VCard pour l'ID: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Ne peut être ajouté avec un nom vide."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "L'hachage n'est pas défini."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Erreur lors de l'ajout du carnet d'adresses."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "L'informatiion à propos de la vCard est incorrect. Merci de rafraichir la page:"
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Erreur lors de l'activation du carnet d'adresses."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Quelque chose est FUBAR."
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "Aucun ID de contact envoyé"
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Erreur de lecture de la photo du contact."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Erreur de sauvegarde du fichier temporaire."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "La photo chargée est invalide."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "L'ID n'est pas défini."
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Les informations relatives à cette vCard sont incorrectes. Veuillez recharger la page."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Erreur lors de la suppression du champ."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "L'ID du contact est manquant."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "ID contact manquant."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "Le chemin de la photo n'a pas été envoyé."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Fichier inexistant:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Erreur lors du chargement de l'image."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Erreur lors de l'obtention de l'objet contact"
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Erreur lors de l'obtention des propriétés de la photo"
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Erreur de sauvegarde du contact"
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Erreur de redimensionnement de l'image"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Erreur lors du rognage de l'image"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Erreur de création de l'image temporaire"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "Le champ Nom n'est pas défini."
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "L'hachage n'est pas défini."
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "L'informatiion à propos de la vCard est incorrect. Merci de rafraichir la page:"
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "Quelque chose est FUBAR."
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Erreur lors de la mise à jour du champ."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "Impossible de mettre à jour le carnet d'adresses avec un nom vide."
+msgstr "Erreur pour trouver l'image :"
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Erreur lors de la mise à jour du carnet d'adresses."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "Erreur lors de l'envoi des contacts vers le stockage."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Il n'y a pas d'erreur, le fichier a été envoyé avec succes."
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Le fichier envoyé dépasse la directive upload_max_filesize dans php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Le fichier envoyé dépasse la directive MAX_FILE_SIZE qui est spécifiée dans le formulaire HTML."
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "Le fichier envoyé n'a été que partiellement envoyé."
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Pas de fichier envoyé."
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "Absence de dossier temporaire."
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Impossible de sauvegarder l'image temporaire :"
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Impossible de charger l'image temporaire :"
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Aucun fichier n'a été chargé. Erreur inconnue"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Contacts"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Désolé cette fonctionnalité n'a pas encore été implémentée"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "Pas encore implémenté"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Impossible de trouver une adresse valide."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Erreur"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Cette valeur ne doit pas être vide"
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "Impossible de sérialiser les éléments."
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "'deleteProperty' a été appelé sans type d'arguments. Merci de rapporter un bug à bugs.owncloud.org"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Éditer le nom"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Aucun fichiers choisis pour être chargés"
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "Le fichier que vous tentez de charger dépasse la taille maximum de fichier autorisée sur ce serveur."
-#: js/contacts.js:1119
-msgid "Select photo"
-msgstr ""
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr "Erreur pendant le chargement de la photo de profil."
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
+msgstr "Sélectionner un type"
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "Glisser un fichier VCF pour importer des contacts."
-
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
-msgstr ""
-
-#: js/contacts.js:1476
-msgid "OK"
-msgstr ""
-
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
-msgstr ""
-
-#: js/contacts.js:1634
-msgid "Upload too large"
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Wrong file type"
-msgstr ""
-
-#: js/contacts.js:1644
+#: js/contacts.js:1578
msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
-msgstr ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr "Certains contacts sont marqués pour être supprimés, mais ne le sont pas encore. Veuillez attendre que l'opération se termine."
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr "Voulez-vous fusionner ces carnets d'adresses ?"
#: js/loader.js:49
msgid "Result: "
-msgstr ""
+msgstr "Résultat :"
#: js/loader.js:49
msgid " imported, "
-msgstr ""
+msgstr "importé,"
#: js/loader.js:49
msgid " failed."
-msgstr ""
+msgstr "échoué."
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Carnet d'adresses introuvable."
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
+msgstr "Le nom d'affichage ne peut pas être vide."
+
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr "Carnet d'adresse introuvable : "
-#: lib/app.php:34
+#: lib/app.php:52
msgid "This is not your addressbook."
msgstr "Ce n'est pas votre carnet d'adresses."
-#: lib/app.php:45
+#: lib/app.php:71
msgid "Contact could not be found."
msgstr "Ce contact n'a pu être trouvé."
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Adresse"
+#: lib/app.php:116
+msgid "Jabber"
+msgstr "Jabber"
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Téléphone"
+#: lib/app.php:121
+msgid "AIM"
+msgstr "Messagerie Instantanée"
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "E-mail"
+#: lib/app.php:126
+msgid "MSN"
+msgstr "MSN"
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Société"
+#: lib/app.php:131
+msgid "Twitter"
+msgstr "Twitter"
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr "GoogleTalk"
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr "Facebook"
+
+#: lib/app.php:146
+msgid "XMPP"
+msgstr "XMPP"
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr "ICQ"
+
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr "Yahoo"
+
+#: lib/app.php:161
+msgid "Skype"
+msgstr "Skype"
+
+#: lib/app.php:166
+msgid "QQ"
+msgstr "QQ"
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr "GaduGadu"
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Travail"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Maison"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr "Autre"
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mobile"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Texte"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Voix"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Message"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fax"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Vidéo"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Bipeur"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Anniversaire"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr "Business"
+
+#: lib/app.php:254
+msgid "Call"
+msgstr "Appel"
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr "Clients"
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr "Livreur"
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr "Vacances"
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr "Idées"
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr "Trajet"
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr "Jubilé"
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr "Rendez-vous"
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr "Personnel"
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr "Projets"
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr "Questions"
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "Anniversaire de {name}"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Contact"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Ajouter un Contact"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Importer"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr "Paramètres"
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Carnets d'adresses"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Paramétrer carnet d'adresses"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Fermer"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Nouveau Carnet d'adresses"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr "Raccourcis clavier"
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Importer depuis VCF"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr "Navigation"
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "Lien CardDav"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr "Contact suivant dans la liste"
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Télécharger"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr "Contact précédent dans la liste"
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Modifier"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr "Dé/Replier le carnet d'adresses courant"
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Supprimer"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr "Carnet d'adresses suivant"
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Télécharger le contact"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr "Carnet d'adresses précédent"
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Supprimer le contact"
+#: templates/index.php:54
+msgid "Actions"
+msgstr "Actions"
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr "Actualiser la liste des contacts"
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr "Ajouter un nouveau contact"
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr "Ajouter un nouveau carnet d'adresses"
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr "Effacer le contact sélectionné"
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Glisser une photo pour l'envoi"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Supprimer la photo actuelle"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Editer la photo actuelle"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Envoyer une nouvelle photo"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Sélectionner une photo depuis ownCloud"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr "Formatage personnalisé, Nom court, Nom complet, Inversé, Inversé avec virgule"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Editer les noms"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Société"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Supprimer"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Surnom"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Entrer un surnom"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Anniversaire"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr "Page web"
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr "http://www.somesite.com"
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr "Allez à la page web"
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "jj-mm-aaaa"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Groupes"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Séparer les groupes avec des virgules"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Editer les groupes"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Préféré"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Merci d'entrer une adresse e-mail valide."
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Entrer une adresse e-mail"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
-msgstr ""
+msgstr "Envoyer à l'adresse"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Supprimer l'adresse e-mail"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Entrer un numéro de téléphone"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Supprimer le numéro de téléphone"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr "Instant Messenger"
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr "Supprimer la Messagerie Instantanée"
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Voir sur une carte"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Editer les adresses"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Ajouter des notes ici."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Ajouter un champ."
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Photo de profil"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Téléphone"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Note"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "E-mail"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Supprimer la photo actuelle"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr "Messagerie instantanée"
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Editer la photo actuelle"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Adresse"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Envoyer une nouvelle photo"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Note"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Sélectionner une photo depuis ownCloud"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Télécharger le contact"
-#: templates/part.cropphoto.php:64
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Supprimer le contact"
+
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "L'image temporaire a été supprimée du cache."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Editer l'adresse"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Type"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Boîte postale"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr "Adresse postale"
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr "Rue et numéro"
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Étendu"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Rue"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr "Numéro d'appartement, etc."
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Ville"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Région"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr "Ex: état ou province"
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Code postal"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr "Code postal"
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "Pays"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Editer les catégories"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Ajouter"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Carnet d'adresses"
@@ -694,19 +833,19 @@ msgstr "Suffixes hon."
#: templates/part.edit_name_dialog.php:45
msgid "J.D."
-msgstr ""
+msgstr "J.D."
#: templates/part.edit_name_dialog.php:46
msgid "M.D."
-msgstr ""
+msgstr "Dr."
#: templates/part.edit_name_dialog.php:47
msgid "D.O."
-msgstr ""
+msgstr "D.O."
#: templates/part.edit_name_dialog.php:48
msgid "D.C."
-msgstr ""
+msgstr "D.C."
#: templates/part.edit_name_dialog.php:49
msgid "Ph.D."
@@ -714,44 +853,15 @@ msgstr "Dr"
#: templates/part.edit_name_dialog.php:50
msgid "Esq."
-msgstr ""
+msgstr "Esq."
#: templates/part.edit_name_dialog.php:51
msgid "Jr."
-msgstr ""
+msgstr "Jr."
#: templates/part.edit_name_dialog.php:52
msgid "Sn."
-msgstr ""
-
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Nouveau carnet d'adresses"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Éditer le carnet d'adresses"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Nom"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Carnet actif"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Sauvegarder"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Envoyer"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Annuler"
+msgstr "Sn."
#: templates/part.import.php:1
msgid "Import a contacts file"
@@ -769,57 +879,86 @@ msgstr "Créer un nouveau carnet d'adresses"
msgid "Name of new addressbook"
msgstr "Nom du nouveau carnet d'adresses"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importer"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "Importation des contacts"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "Selectionner le carnet d'adresses à importer vers:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "Selectionner depuis le disque dur"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "Il n'y a pas de contact dans votre carnet d'adresses."
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Ajouter un contact"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Paramétrer carnet d'adresses"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr "Choix du carnet d'adresses"
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr "Saisissez le nom"
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr "Saisissez une description"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "Synchronisation des contacts CardDAV"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "Plus d'infos"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "Adresse principale"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr "Afficher le lien CardDav"
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr "Afficher les liens VCF en lecture seule"
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr "Partager"
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Télécharger"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Modifier"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Nouveau Carnet d'adresses"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr "Nom"
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr "Description"
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Sauvegarder"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Annuler"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr "Plus…"
diff --git a/l10n/fr/core.po b/l10n/fr/core.po
index b2609663eaf..dfb7e40edfb 100644
--- a/l10n/fr/core.po
+++ b/l10n/fr/core.po
@@ -3,15 +3,18 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Nahir Mohamed <nahirmoha@gmail.com>, 2012.
+# <nathaplop@gmail.com>, 2012.
# <rom1dep@gmail.com>, 2011.
+# Romain DEP. <rom1dep@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: French (http://www.transifex.net/projects/p/owncloud/language/fr/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -32,85 +35,85 @@ msgstr "Cette catégorie existe déjà : "
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Paramètres"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Janvier"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Février"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Mars"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "Avril"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Mai"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Juin"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Juillet"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "Août"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "Septembre"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Octobre"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "Novembre"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "Décembre"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Annulé"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Non"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Oui"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Ok"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Aucune catégorie sélectionnée pour suppression"
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Erreur"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Réinitialisation de votre mot de passe Owncloud"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "Réinitialisation de votre mot de passe Owncloud"
@@ -218,7 +221,7 @@ msgstr "sera utilisé"
#: templates/installation.php:82
msgid "Database user"
-msgstr "Utilisateur de la base de données"
+msgstr "Utilisateur pour la base de données"
#: templates/installation.php:86
msgid "Database password"
@@ -240,14 +243,10 @@ msgstr "Terminer l'installation"
msgid "web services under your control"
msgstr "services web sous votre contrôle"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Se déconnecter"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Paramètres"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Mot de passe perdu ?"
diff --git a/l10n/fr/files.po b/l10n/fr/files.po
index b510e4ac0d2..19cb780d180 100644
--- a/l10n/fr/files.po
+++ b/l10n/fr/files.po
@@ -3,49 +3,53 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Cyril Glapa <kyriog@gmail.com>, 2012.
+# Geoffrey Guerrier <geoffrey.guerrier@gmail.com>, 2012.
# <guiguidu31300@gmail.com>, 2012.
+# Nahir Mohamed <nahirmoha@gmail.com>, 2012.
# <rom1dep@gmail.com>, 2011.
+# Romain DEP. <rom1dep@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: French (http://www.transifex.net/projects/p/owncloud/language/fr/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
-#: ajax/upload.php:19
+#: ajax/upload.php:20
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:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Le fichier téléversé excède la valeur de upload_max_filesize spécifiée dans php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Le fichier n'a été que partiellement téléversé"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Aucun fichier n'a été téléversé"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Il manque un répertoire temporaire"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Erreur d'écriture sur le disque"
@@ -53,57 +57,85 @@ msgstr "Erreur d'écriture sur le disque"
msgid "Files"
msgstr "Fichiers"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Supprimer"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "existe déjà"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "remplacer"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "annuler"
-#: js/files.js:170
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "remplacé"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "avec"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "annuler"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "supprimé"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "Générer un fichier ZIP, cela peut prendre du temps"
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Impossible de charger vos fichiers car il s'agit d'un dossier ou le fichier fait 0 octet."
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "Erreur de chargement"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "En cours"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "Chargement annulé"
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "Nom invalide, '/' n'est pas autorisé."
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Taille"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Modifié"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "dossier"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "dossiers"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "fichier"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "fichiers"
#: templates/admin.php:5
msgid "File handling"
@@ -173,10 +205,6 @@ msgstr "Partager"
msgid "Download"
msgstr "Téléchargement"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Supprimer"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Fichier trop volumineux"
diff --git a/l10n/fr/files_encryption.po b/l10n/fr/files_encryption.po
new file mode 100644
index 00000000000..cbad09601fc
--- /dev/null
+++ b/l10n/fr/files_encryption.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Romain DEP. <rom1dep@gmail.com>, 2012.
+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"
+"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"
+
+#: templates/settings.php:3
+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.php:5
+msgid "None"
+msgstr "Aucun"
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr "Activer le chiffrement"
diff --git a/l10n/fr/files_external.po b/l10n/fr/files_external.po
new file mode 100644
index 00000000000..488a6924a4d
--- /dev/null
+++ b/l10n/fr/files_external.po
@@ -0,0 +1,83 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Romain DEP. <rom1dep@gmail.com>, 2012.
+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:35+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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr "Stockage externe"
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr "Point de montage"
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr "Infrastructure"
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr "Configuration"
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr "Options"
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr "Disponible"
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr "Ajouter un point de montage"
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr "Aucun spécifié"
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr "Tous les utilisateurs"
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr "Groupes"
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr "Utilisateurs"
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr "Supprimer"
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr "Certificats racine SSL"
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr "Importer un certificat racine"
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr "Activer le stockage externe pour les utilisateurs"
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr "Autoriser les utilisateurs à monter leur propre stockage externe"
diff --git a/l10n/fr/files_sharing.po b/l10n/fr/files_sharing.po
new file mode 100644
index 00000000000..254df78bd12
--- /dev/null
+++ b/l10n/fr/files_sharing.po
@@ -0,0 +1,36 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <gp4004@arghh.org>, 2012.
+# Romain DEP. <rom1dep@gmail.com>, 2012.
+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-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr "Taille"
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr "Modifié"
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr "Tout effacer"
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr "Effacement"
diff --git a/l10n/fr/files_versions.po b/l10n/fr/files_versions.po
new file mode 100644
index 00000000000..74b1426e8c5
--- /dev/null
+++ b/l10n/fr/files_versions.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Romain DEP. <rom1dep@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-15 02:03+0200\n"
+"PO-Revision-Date: 2012-08-14 16:49+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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr "Supprimer les versions intermédiaires"
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr "Activer le versionnage"
diff --git a/l10n/fr/gallery.po b/l10n/fr/gallery.po
index 1bd09470792..ea45c42e53b 100644
--- a/l10n/fr/gallery.po
+++ b/l10n/fr/gallery.po
@@ -3,77 +3,43 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Nahir Mohamed <nahirmoha@gmail.com>, 2012.
# <rom1dep@gmail.com>, 2012.
+# Romain DEP. <rom1dep@gmail.com>, 2012.
# Soul Kim <warlock.rf@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: French (http://www.transifex.net/projects/p/owncloud/language/fr/)\n"
+"POT-Creation-Date: 2012-07-27 02:02+0200\n"
+"PO-Revision-Date: 2012-07-26 09:05+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"
-#: appinfo/app.php:37
+#: appinfo/app.php:39
msgid "Pictures"
msgstr "Images"
-#: js/album_cover.js:44
+#: js/pictures.js:12
msgid "Share gallery"
-msgstr ""
+msgstr "Partager la galerie"
-#: js/album_cover.js:64 js/album_cover.js:100 js/album_cover.js:133
+#: js/pictures.js:32
msgid "Error: "
-msgstr ""
+msgstr "Erreur :"
-#: js/album_cover.js:64 js/album_cover.js:100
+#: js/pictures.js:32
msgid "Internal error"
-msgstr ""
-
-#: js/album_cover.js:114
-msgid "Scanning root"
-msgstr ""
-
-#: js/album_cover.js:115
-msgid "Default order"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Ascending"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Descending"
-msgstr ""
-
-#: js/album_cover.js:117 templates/index.php:19
-msgid "Settings"
-msgstr "Préférences"
-
-#: js/album_cover.js:122
-msgid "Scanning root cannot be empty"
-msgstr ""
-
-#: js/album_cover.js:122 js/album_cover.js:133
-msgid "Error"
-msgstr ""
-
-#: templates/index.php:16
-msgid "Rescan"
-msgstr "Analyser à nouveau"
-
-#: templates/index.php:17
-msgid "Stop"
-msgstr "Arrêter"
+msgstr "Erreur interne"
-#: templates/index.php:18
-msgid "Share"
-msgstr "Partager"
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr "Diaporama"
#: templates/view_album.php:19
msgid "Back"
diff --git a/l10n/fr/lib.po b/l10n/fr/lib.po
new file mode 100644
index 00000000000..42c784ce915
--- /dev/null
+++ b/l10n/fr/lib.po
@@ -0,0 +1,114 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Geoffrey Guerrier <geoffrey.guerrier@gmail.com>, 2012.
+# Romain DEP. <rom1dep@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-07-31 22:53+0200\n"
+"PO-Revision-Date: 2012-07-31 00:22+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"
+
+#: app.php:287
+msgid "Help"
+msgstr "Aide"
+
+#: app.php:294
+msgid "Personal"
+msgstr "Personnel"
+
+#: app.php:299
+msgid "Settings"
+msgstr "Paramètres"
+
+#: app.php:304
+msgid "Users"
+msgstr "Utilisateurs"
+
+#: app.php:311
+msgid "Apps"
+msgstr "Applications"
+
+#: app.php:313
+msgid "Admin"
+msgstr "Administration"
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr "Téléchargement ZIP désactivé."
+
+#: files.php:246
+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:246 files.php:271
+msgid "Back to Files"
+msgstr "Retour aux Fichiers"
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr "Les fichiers sélectionnés sont trop volumineux pour être compressés."
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr "L'application n'est pas activée"
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr "Erreur d'authentification"
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr "La session a expiré. Veuillez recharger la page."
+
+#: template.php:86
+msgid "seconds ago"
+msgstr "à l'instant"
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr "il y a 1 minute"
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr "il y a %d minutes"
+
+#: template.php:91
+msgid "today"
+msgstr "aujourd'hui"
+
+#: template.php:92
+msgid "yesterday"
+msgstr "hier"
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr "il y a %d jours"
+
+#: template.php:94
+msgid "last month"
+msgstr "le mois dernier"
+
+#: template.php:95
+msgid "months ago"
+msgstr "il y a plusieurs mois"
+
+#: template.php:96
+msgid "last year"
+msgstr "l'année dernière"
+
+#: template.php:97
+msgid "years ago"
+msgstr "il y a plusieurs années"
diff --git a/l10n/fr/media.po b/l10n/fr/media.po
index e8dc770632c..9f757f487cf 100644
--- a/l10n/fr/media.po
+++ b/l10n/fr/media.po
@@ -3,32 +3,34 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <mathieu.payrol@gmail.com>, 2012.
+# Nahir Mohamed <nahirmoha@gmail.com>, 2012.
# <rom1dep@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: French (http://www.transifex.net/projects/p/owncloud/language/fr/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 11:57+0000\n"
+"Last-Translator: MathieuP <mathieu.payrol@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"
-#: appinfo/app.php:32 templates/player.php:8
+#: appinfo/app.php:45 templates/player.php:8
msgid "Music"
msgstr "Musique"
#: js/music.js:18
msgid "Add album to playlist"
-msgstr ""
+msgstr "Ajouter l'album à la playlist"
#: templates/music.php:3 templates/player.php:12
msgid "Play"
-msgstr "Play"
+msgstr "Lire"
#: templates/music.php:4 templates/music.php:26 templates/player.php:13
msgid "Pause"
diff --git a/l10n/fr/settings.po b/l10n/fr/settings.po
index 5184f5e460e..c1d17de2c44 100644
--- a/l10n/fr/settings.po
+++ b/l10n/fr/settings.po
@@ -3,86 +3,122 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Cyril Glapa <kyriog@gmail.com>, 2012.
# <fboulogne@april.org>, 2011.
+# <gp4004@arghh.org>, 2012.
# <guiguidu31300@gmail.com>, 2012.
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
+# Nahir Mohamed <nahirmoha@gmail.com>, 2012.
# <pierreamiel.giraud@gmail.com>, 2012.
# <rom1dep@gmail.com>, 2011, 2012.
+# Romain DEP. <rom1dep@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: French (http://www.transifex.net/projects/p/owncloud/language/fr/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-20 15:19+0000\n"
+"Last-Translator: gp4004 <gp4004@arghh.org>\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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "Impossible de charger la liste depuis l'App Store"
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "E-mail sauvegardé"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "E-mail invalide"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "Identifiant OpenID changé"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Requête invalide"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Erreur d'authentification"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Langue changée"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "Erreur"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "Désactiver"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Activer"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Sauvegarde..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "Français"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "Alertes de sécurité"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "Cron"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr "exécuter une tâche pour chaque page chargée"
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr "cron.php est enregistré comme un service webcron"
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr "utiliser le service cron du système "
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Journaux"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Plus"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
-msgstr "Ajouter votre application"
+msgstr "Ajoutez votre application"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Sélectionner une Application"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Voir la page des applications à l'url apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "sous licence"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "par"
@@ -116,7 +152,7 @@ msgstr "Vous utilisez"
#: templates/personal.php:8
msgid "of the available"
-msgstr "d'espace de stockage sur un total de"
+msgstr "de votre espace de stockage d'une taille totale de"
#: templates/personal.php:12
msgid "Desktop and Mobile Syncing Clients"
@@ -174,34 +210,38 @@ msgstr "Aidez à traduire"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "utilisez cette adresse pour vous connecter à votre ownCloud depuis un explorateur de fichiers"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Nom"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Mot de passe"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Groupes"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Créer"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Quota par défaut"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Autre"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr "Groupe Admin"
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Quota"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Supprimer"
diff --git a/l10n/fr/tasks.po b/l10n/fr/tasks.po
new file mode 100644
index 00000000000..8bb451354c8
--- /dev/null
+++ b/l10n/fr/tasks.po
@@ -0,0 +1,109 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <mathieu.payrol@gmail.com>, 2012.
+# Romain DEP. <rom1dep@gmail.com>, 2012.
+# Xavier BOUTEVILLAIN <xavier.boutevillain@gmail.com>, 2012.
+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 12:01+0000\n"
+"Last-Translator: MathieuP <mathieu.payrol@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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr "date/heure invalide"
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr "Tâches"
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr "Sans catégorie"
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr "Non spécifié"
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr "1=le plus important"
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr "5=importance moyenne"
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr "9=le moins important"
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr "Résumé vide"
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr "Pourcentage d'achèvement invalide"
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr "Priorité invalide"
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr "Ajouter une tâche"
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr "Echéance tâche"
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr "Liste tâche"
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr "Tâche réalisée"
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr "Lieu"
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr "Priorité"
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr "Etiquette tâche"
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr "Chargement des tâches…"
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr "Important"
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr "Plus"
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr "Moins"
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr "Supprimer"
diff --git a/l10n/fr/user_ldap.po b/l10n/fr/user_ldap.po
new file mode 100644
index 00000000000..1ca6075cb63
--- /dev/null
+++ b/l10n/fr/user_ldap.po
@@ -0,0 +1,166 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Romain DEP. <rom1dep@gmail.com>, 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-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 17:01+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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr "Hôte"
+
+#: templates/settings.php:8
+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:9
+msgid "Base DN"
+msgstr "DN de base"
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr "Vous pouvez spécifier le DN de base pour les utilisateurs et les groupes dans l'onglet Avancé"
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr "DN Utilisateur"
+
+#: templates/settings.php:10
+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."
+
+#: templates/settings.php:11
+msgid "Password"
+msgstr "Mot de passe"
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr "Pour l'accès anonyme, laisser le DN et le mot de passe vides."
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr "Filtre d'identifiants utilisateur"
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr "Définit le filtre à appliquer lors d'une tentative de connexion. %%uid remplace le nom d'utilisateur lors de la connexion."
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr "veuillez utiliser le champ %%uid , ex.: \"uid=%%uid\""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr "Filtre d'utilisateurs"
+
+#: templates/settings.php:13
+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:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr "sans élément de substitution, par exemple \"objectClass=person\"."
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr "Filtre de groupes"
+
+#: templates/settings.php:14
+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:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr "sans élément de substitution, par exemple \"objectClass=posixGroup\"."
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr "Port"
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr "Association groupe-membre"
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr "Utiliser TLS"
+
+#: templates/settings.php:21
+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:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr "Serveur LDAP insensible à la casse (Windows)"
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr "Désactiver la validation du certificat SSL"
+
+#: templates/settings.php:23
+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:23
+msgid "Not recommended, use for testing only."
+msgstr "Non recommendé, utilisation pour tests uniquement."
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+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:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+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:27
+msgid "in bytes"
+msgstr "en octets"
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr "en secondes. Tout changement vide le cache."
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr "Aide"
diff --git a/l10n/fr/user_migrate.po b/l10n/fr/user_migrate.po
new file mode 100644
index 00000000000..2b2802bbc83
--- /dev/null
+++ b/l10n/fr/user_migrate.po
@@ -0,0 +1,53 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <mathieu.payrol@gmail.com>, 2012.
+# Romain DEP. <rom1dep@gmail.com>, 2012.
+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 12:00+0000\n"
+"Last-Translator: MathieuP <mathieu.payrol@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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr "Exporter"
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr "Une erreur s'est produite pendant la génération du fichier d'export"
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr "Une erreur s'est produite"
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr "Exportez votre compte utilisateur"
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr "Cette action va créer une archive compressée qui contiendra les données de votre compte ownCloud."
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr "Importer un compte utilisateur"
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr "Archive Zip de l'utilisateur"
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr "Importer"
diff --git a/l10n/fr/user_openid.po b/l10n/fr/user_openid.po
new file mode 100644
index 00000000000..df7952aa7cc
--- /dev/null
+++ b/l10n/fr/user_openid.po
@@ -0,0 +1,55 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Romain DEP. <rom1dep@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-15 02:03+0200\n"
+"PO-Revision-Date: 2012-08-14 16:05+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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr "Ce serveur est un point d'accès OpenID. Pour plus d'informations, veuillez consulter"
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr "Identité : <b>"
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr "Domaine : <b>"
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr "Utilisateur : <b>"
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr "Connexion"
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr "Erreur : <b>Aucun nom d'utilisateur n'a été saisi"
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr "vous pouvez vous authentifier sur d'autres sites grâce à cette adresse"
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr "Fournisseur d'identité OpenID autorisé"
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr "Votre adresse Wordpress, Identi.ca, &hellip;"
diff --git a/l10n/gl/admin_dependencies_chk.po b/l10n/gl/admin_dependencies_chk.po
new file mode 100644
index 00000000000..09e5576eba1
--- /dev/null
+++ b/l10n/gl/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/gl/admin_migrate.po b/l10n/gl/admin_migrate.po
new file mode 100644
index 00000000000..7684dc62ca7
--- /dev/null
+++ b/l10n/gl/admin_migrate.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:
+# 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-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-13 06:27+0000\n"
+"Last-Translator: Xosé M. Lamas <correo.xmgz@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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr "Exporta esta instancia de ownCloud"
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr "Esto creará un ficheiro comprimido que contén os datos de esta instancia de ownCloud.\nPor favor escolla o modo de exportación:"
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr "Exportar"
diff --git a/l10n/gl/bookmarks.po b/l10n/gl/bookmarks.po
new file mode 100644
index 00000000000..9086620a94e
--- /dev/null
+++ b/l10n/gl/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/gl/calendar.po b/l10n/gl/calendar.po
index 64798f954a2..d9a060f2dc2 100644
--- a/l10n/gl/calendar.po
+++ b/l10n/gl/calendar.po
@@ -9,21 +9,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Galician (http://www.transifex.net/projects/p/owncloud/language/gl/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
"Content-Transfer-Encoding: 8bit\n"
"Language: gl\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Non se atoparon calendarios."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Non se atoparon eventos."
@@ -31,300 +39,394 @@ msgstr "Non se atoparon eventos."
msgid "Wrong calendar"
msgstr "Calendario equivocado"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Novo fuso horario:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Fuso horario trocado"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Petición non válida"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Calendario"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd M/d"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd M/d"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM yyyy"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "d MMM[ yyyy]{ '&#8212;'d [ MMM] yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, MMM d,yyyy"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Aniversario"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Traballo"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Chamada"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Clientes"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Remitente"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Vacacións"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Ideas"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Viaxe"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Aniversario especial"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Reunión"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Outro"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Persoal"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Proxectos"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Preguntas"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Traballo"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "sen nome"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Novo calendario"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Non se repite"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "A diario"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Semanalmente"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Todas as semanas"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Cada dúas semanas"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Mensual"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Anual"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "nunca"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "por acontecementos"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "por data"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "por día do mes"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "por día da semana"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Luns"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Martes"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Mércores"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Xoves"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Venres"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Sábado"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Domingo"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "semana dos eventos no mes"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "primeiro"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "segundo"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "terceiro"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "cuarto"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "quinto"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "último"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Xaneiro"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Febreiro"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Marzo"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Abril"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Maio"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Xuño"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Xullo"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "Agosto"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "Setembro"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Outubro"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "Novembro"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Decembro"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "por data dos eventos"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "por dia(s) do ano"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "por número(s) de semana"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "por día e mes"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Data"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Cal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Todo o dia"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Novo calendario"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Faltan campos"
@@ -358,40 +460,32 @@ msgstr "O evento remata antes de iniciarse"
msgid "There was a database fail"
msgstr "Produciuse un erro na base de datos"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Semana"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Mes"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Lista"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Hoxe"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Calendarios"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Produciuse un erro ao procesar o ficheiro"
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Escolla os calendarios activos"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Os seus calendarios"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "Ligazón CalDav"
@@ -403,19 +497,19 @@ msgstr "Calendarios compartidos"
msgid "No shared calendars"
msgstr "Sen calendarios compartidos"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Compartir calendario"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Descargar"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Editar"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Borrar"
@@ -501,23 +595,23 @@ msgstr "Separe as categorías con comas"
msgid "Edit categories"
msgstr "Editar categorías"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Eventos do día"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Desde"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "a"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Opcións avanzadas"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Localización"
@@ -525,7 +619,7 @@ msgstr "Localización"
msgid "Location of the Event"
msgstr "Localización do evento"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Descrición"
@@ -533,84 +627,86 @@ msgstr "Descrición"
msgid "Description of the Event"
msgstr "Descrición do evento"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Repetir"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Avanzado"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Seleccionar días da semana"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Seleccionar días"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "e día dos eventos no ano."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "e día dos eventos no mes."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Seleccione meses"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Seleccionar semanas"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "e semana dos eventos no ano."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Intervalo"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Fin"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "acontecementos"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "crear un novo calendario"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Importar un ficheiro de calendario"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Por favor, seleccione o calendario"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "crear un novo calendario"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Nome do novo calendario"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importar"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Importar calendario"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Calendario importado correctamente"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Importar"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Pechar diálogo"
@@ -626,45 +722,73 @@ msgstr "Ver un evento"
msgid "No categories selected"
msgstr "Non seleccionou as categorías"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Seleccionar categoría"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "de"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "a"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Fuso horario"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Comprobar sempre cambios de fuso horario"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Formato de hora"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24h"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12h"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Primeiro día da semana"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Enderezo de sincronización do calendario CalDAV:"
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/gl/contacts.po b/l10n/gl/contacts.po
index 2ee23b52a16..5ee98a039df 100644
--- a/l10n/gl/contacts.po
+++ b/l10n/gl/contacts.po
@@ -9,636 +9,769 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Galician (http://www.transifex.net/projects/p/owncloud/language/gl/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
"Content-Transfer-Encoding: 8bit\n"
"Language: gl\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Produciuse un erro (des)activando a axenda."
-#: ajax/addcontact.php:59
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "non se estableceu o id."
+
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Non se pode actualizar a libreta de enderezos sen completar o nome."
+
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Produciuse un erro actualizando a axenda."
+
+#: ajax/categories/categoriesfor.php:17
+msgid "No ID provided"
+msgstr "Non se proveeu ID"
+
+#: ajax/categories/categoriesfor.php:34
+msgid "Error setting checksum."
+msgstr "Erro establecendo a suma de verificación"
+
+#: ajax/categories/delete.php:19
+msgid "No categories selected for deletion."
+msgstr "Non se seleccionaron categorías para borrado."
+
+#: ajax/categories/delete.php:26
+msgid "No address books found."
+msgstr "Non se atoparon libretas de enderezos."
+
+#: ajax/categories/delete.php:34
+msgid "No contacts found."
+msgstr "Non se atoparon contactos."
+
+#: ajax/contact/add.php:47
msgid "There was an error adding the contact."
msgstr "Produciuse un erro engadindo o contacto."
-#: ajax/addproperty.php:40
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "non se nomeou o elemento."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
msgid "Cannot add empty property."
msgstr "Non se pode engadir unha propiedade baleira."
-#: ajax/addproperty.php:52
+#: ajax/contact/addproperty.php:67
msgid "At least one of the address fields has to be filled out."
msgstr "Polo menos un dos campos do enderezo ten que ser cuberto."
-#: ajax/addproperty.php:62
+#: ajax/contact/addproperty.php:76
msgid "Trying to add duplicate property: "
-msgstr ""
-
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Produciuse un erro engadindo unha propiedade do contacto."
-
-#: ajax/categories/categoriesfor.php:15
-msgid "No ID provided"
-msgstr ""
-
-#: ajax/categories/categoriesfor.php:27
-msgid "Error setting checksum."
-msgstr ""
+msgstr "Tentando engadir propiedade duplicada: "
-#: ajax/categories/delete.php:29
-msgid "No categories selected for deletion."
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
msgstr ""
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
-msgid "No address books found."
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
msgstr ""
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
-msgid "No contacts found."
-msgstr ""
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "A información sobre a vCard é incorrecta. Por favor volva cargar a páxina."
-#: ajax/contactdetails.php:37
+#: ajax/contact/details.php:31
msgid "Missing ID"
-msgstr ""
+msgstr "ID perdido"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
-msgstr ""
+msgstr "Erro procesando a VCard para o ID: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr ""
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "non se estableceu a suma de verificación."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Produciuse un erro engadindo a axenda."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "A información sobre a vCard é incorrecta. Por favor, recargue a páxina: "
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Produciuse un erro activando a axenda."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr ""
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
-msgstr ""
+msgstr "Non se enviou ningún ID de contacto."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
-msgstr ""
+msgstr "Erro lendo a fotografía do contacto."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
-msgstr ""
+msgstr "Erro gardando o ficheiro temporal."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
-msgstr ""
-
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr ""
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "A información sobre a vCard é incorrecta. Por favor volva cargar a páxina."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Produciuse un erro borrando a propiedade do contacto."
+msgstr "A fotografía cargada non é válida."
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
-msgstr ""
+msgstr "Falta o ID do contacto."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr ""
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
-msgstr ""
+msgstr "Non se enviou a ruta a unha foto."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
-msgstr ""
+msgstr "O ficheiro non existe:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
-msgstr ""
+msgstr "Erro cargando imaxe."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Erro obtendo o obxeto contacto."
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Erro obtendo a propiedade PHOTO."
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Erro gardando o contacto."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Erro cambiando o tamaño da imaxe"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Erro recortando a imaxe"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Erro creando a imaxe temporal"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr ""
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr ""
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Produciuse un erro actualizando a propiedade do contacto."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr ""
+msgstr "Erro buscando a imaxe: "
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Produciuse un erro actualizando a axenda."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
-msgstr ""
+msgstr "Erro subindo os contactos ao almacén."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Non houbo erros, o ficheiro subeuse con éxito"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
-msgstr ""
+msgstr "O ficheiro subido supera a directiva upload_max_filesize no php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
-msgstr ""
+msgstr "O ficheiro subido supera a directiva MAX_FILE_SIZE especificada no formulario HTML"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "O ficheiro so foi parcialmente subido"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
-msgstr ""
+msgstr "Non se subeu ningún ficheiro"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Falta o cartafol temporal"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Non se puido gardar a imaxe temporal: "
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Non se puido cargar a imaxe temporal: "
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Non se subeu ningún ficheiro. Erro descoñecido."
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Contactos"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Sentímolo, esta función aínda non foi implementada."
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "Non implementada."
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Non se puido obter un enderezo de correo válido."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Erro"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Esta propiedade non pode quedar baldeira."
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "Non se puido serializar os elementos."
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "'deleteProperty' chamado sen argumento. Por favor, informe en bugs.owncloud.org"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Editar nome"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Sen ficheiros escollidos para subir."
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "O ficheiro que tenta subir supera o tamaño máximo permitido neste servidor."
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
+msgstr "Seleccione tipo"
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
-msgstr ""
+#: js/loader.js:49
+msgid "Result: "
+msgstr "Resultado: "
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr " importado, "
+
+#: js/loader.js:49
+msgid " failed."
+msgstr " fallou."
-#: js/contacts.js:1494
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Esta non é a súa axenda."
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Non se atopou o contacto."
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
+#: lib/app.php:141
+msgid "Facebook"
msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Esta non é a súa axenda."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Non se atopou o contacto."
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Enderezo"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Teléfono"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "Correo electrónico"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organización"
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Traballo"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Casa"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Móbil"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Texto"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Voz"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
-msgstr ""
+msgstr "Mensaxe"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fax"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Vídeo"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Paxinador"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
+msgstr "Internet"
+
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Aniversario"
+
+#: lib/app.php:253
+msgid "Business"
msgstr ""
-#: lib/hooks.php:79
-msgid "{name}'s Birthday"
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
msgstr ""
-#: lib/search.php:22
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
+msgid "{name}'s Birthday"
+msgstr "Cumpleanos de {name}"
+
+#: lib/search.php:15
msgid "Contact"
msgstr "Contacto"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Engadir contacto"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Importar"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Axendas"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr ""
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Pechar"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Nova axenda"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
+#: templates/index.php:39
+msgid "Navigation"
msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "Ligazón CardDav"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Descargar"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Editar"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Eliminar"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Descargar contacto"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Borrar contacto"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
-msgid "Drop photo to upload"
+#: templates/index.php:57
+msgid "Refresh contacts list"
msgstr ""
-#: templates/part.contact.php:29
-msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
+#: templates/index.php:59
+msgid "Add new contact"
msgstr ""
-#: templates/part.contact.php:30
-msgid "Edit name details"
+#: templates/index.php:61
+msgid "Add new addressbook"
msgstr ""
-#: templates/part.contact.php:35 templates/part.contact.php:105
-msgid "Nickname"
+#: templates/index.php:63
+msgid "Delete current contact"
msgstr ""
+#: templates/part.contact.php:17
+msgid "Drop photo to upload"
+msgstr "Solte a foto a subir"
+
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Borrar foto actual"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Editar a foto actual"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Subir unha nova foto"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Escoller foto desde ownCloud"
+
+#: templates/part.contact.php:35
+msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
+msgstr "Formato personalizado, Nome corto, Nome completo, Inverso ou Inverso con coma"
+
#: templates/part.contact.php:36
+msgid "Edit name details"
+msgstr "Editar detalles do nome"
+
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organización"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Eliminar"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
+msgid "Nickname"
+msgstr "Apodo"
+
+#: templates/part.contact.php:42
msgid "Enter nickname"
+msgstr "Introuza apodo"
+
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
msgstr ""
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Aniversario"
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
-#: templates/part.contact.php:38
-msgid "dd-mm-yyyy"
+#: templates/part.contact.php:44
+msgid "Go to web site"
msgstr ""
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:46
+msgid "dd-mm-yyyy"
+msgstr "dd-mm-yyyy"
+
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
-msgstr ""
+msgstr "Grupos"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
-msgstr ""
+msgstr "Separe grupos con comas"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
-msgstr ""
+msgstr "Editar grupos"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Preferido"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
-msgstr ""
+msgstr "Por favor indique un enderezo de correo electrónico válido."
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
-msgstr ""
+msgstr "Introduza enderezo de correo electrónico"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
-msgstr ""
+msgstr "Correo ao enderezo"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
-msgstr ""
+msgstr "Borrar enderezo de correo electrónico"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
-msgstr ""
+msgstr "Introducir número de teléfono"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
+msgstr "Borrar número de teléfono"
+
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
msgstr ""
-#: templates/part.contact.php:84
-msgid "View on map"
+#: templates/part.contact.php:101
+msgid "Delete IM"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
+msgid "View on map"
+msgstr "Ver no mapa"
+
+#: templates/part.contact.php:110
msgid "Edit address details"
-msgstr ""
+msgstr "Editar detalles do enderezo"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
-msgstr ""
+msgstr "Engadir aquí as notas."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
-msgstr ""
-
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr ""
+msgstr "Engadir campo"
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Teléfono"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr ""
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "Correo electrónico"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr ""
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Enderezo"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr ""
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Nota"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr ""
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Descargar contacto"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Borrar contacto"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "A imaxe temporal foi eliminada da caché."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
-msgstr ""
+msgstr "Editar enderezo"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Escribir"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Apartado de correos"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Ampliado"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Rúa"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Cidade"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Autonomía"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Código postal"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
-msgid "Country"
-msgstr "País"
-
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
msgstr ""
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Engadir"
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr "País"
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
@@ -646,176 +779,176 @@ msgstr "Axenda"
#: templates/part.edit_name_dialog.php:23
msgid "Hon. prefixes"
-msgstr ""
+msgstr "Prefixos honoríficos"
#: templates/part.edit_name_dialog.php:27
msgid "Miss"
-msgstr ""
+msgstr "Srta"
#: templates/part.edit_name_dialog.php:28
msgid "Ms"
-msgstr ""
+msgstr "Sra/Srta"
#: templates/part.edit_name_dialog.php:29
msgid "Mr"
-msgstr ""
+msgstr "Sr"
#: templates/part.edit_name_dialog.php:30
msgid "Sir"
-msgstr ""
+msgstr "Sir"
#: templates/part.edit_name_dialog.php:31
msgid "Mrs"
-msgstr ""
+msgstr "Sra"
#: templates/part.edit_name_dialog.php:32
msgid "Dr"
-msgstr ""
+msgstr "Dr"
#: templates/part.edit_name_dialog.php:35
msgid "Given name"
-msgstr ""
+msgstr "Apodo"
#: templates/part.edit_name_dialog.php:37
msgid "Additional names"
-msgstr ""
+msgstr "Nomes adicionais"
#: templates/part.edit_name_dialog.php:39
msgid "Family name"
-msgstr ""
+msgstr "Nome familiar"
#: templates/part.edit_name_dialog.php:41
msgid "Hon. suffixes"
-msgstr ""
+msgstr "Sufixos honorarios"
#: templates/part.edit_name_dialog.php:45
msgid "J.D."
-msgstr ""
+msgstr "J.D."
#: templates/part.edit_name_dialog.php:46
msgid "M.D."
-msgstr ""
+msgstr "M.D."
#: templates/part.edit_name_dialog.php:47
msgid "D.O."
-msgstr ""
+msgstr "D.O."
#: templates/part.edit_name_dialog.php:48
msgid "D.C."
-msgstr ""
+msgstr "D.C."
#: templates/part.edit_name_dialog.php:49
msgid "Ph.D."
-msgstr ""
+msgstr "Ph.D."
#: templates/part.edit_name_dialog.php:50
msgid "Esq."
-msgstr ""
+msgstr "Esq."
#: templates/part.edit_name_dialog.php:51
msgid "Jr."
-msgstr ""
+msgstr "Jr."
#: templates/part.edit_name_dialog.php:52
msgid "Sn."
-msgstr ""
-
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Nova axenda"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Editar axenda"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Nome a mostrar"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Activo"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Gardar"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Enviar"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Cancelar"
+msgstr "Sn."
#: templates/part.import.php:1
msgid "Import a contacts file"
-msgstr ""
+msgstr "Importar un ficheiro de contactos"
#: templates/part.import.php:6
msgid "Please choose the addressbook"
-msgstr ""
+msgstr "Por favor escolla unha libreta de enderezos"
#: templates/part.import.php:10
msgid "create a new addressbook"
-msgstr ""
+msgstr "crear unha nova libreta de enderezos"
#: templates/part.import.php:15
msgid "Name of new addressbook"
-msgstr ""
-
-#: templates/part.import.php:17
-msgid "Import"
-msgstr ""
+msgstr "Nome da nova libreta de enderezos"
#: templates/part.import.php:20
msgid "Importing contacts"
-msgstr ""
+msgstr "Importando contactos"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
+msgstr "Non ten contactos na súa libreta de enderezos."
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
+msgstr "Engadir contacto"
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
msgstr ""
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
msgstr ""
-#: templates/part.no_contacts.php:2
-msgid "You have no contacts in your addressbook."
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
msgstr ""
-#: templates/part.no_contacts.php:4
-msgid "Add contact"
+#: templates/settings.php:3
+msgid "CardDAV syncing addresses"
+msgstr "Enderezos CardDAV a sincronizar"
+
+#: templates/settings.php:3
+msgid "more info"
+msgstr "máis información"
+
+#: templates/settings.php:5
+msgid "Primary address (Kontact et al)"
+msgstr "Enderezo primario (Kontact et al)"
+
+#: templates/settings.php:7
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
msgstr ""
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
msgstr ""
-#: templates/settings.php:4
-msgid "CardDAV syncing addresses"
+#: templates/settings.php:26
+msgid "Share"
msgstr ""
-#: templates/settings.php:4
-msgid "more info"
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Descargar"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Editar"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Nova axenda"
+
+#: templates/settings.php:44
+msgid "Name"
msgstr ""
-#: templates/settings.php:6
-msgid "Primary address (Kontact et al)"
+#: templates/settings.php:45
+msgid "Description"
msgstr ""
-#: templates/settings.php:8
-msgid "iOS/OS X"
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Gardar"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: templates/settings.php:52
+msgid "More..."
msgstr ""
diff --git a/l10n/gl/core.po b/l10n/gl/core.po
index 97abae07754..892b9c977f6 100644
--- a/l10n/gl/core.po
+++ b/l10n/gl/core.po
@@ -9,10 +9,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Galician (http://www.transifex.net/projects/p/owncloud/language/gl/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
"Content-Transfer-Encoding: 8bit\n"
@@ -33,85 +33,85 @@ msgstr "Esta categoría xa existe: "
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Preferencias"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Xaneiro"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Febreiro"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Marzo"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "Abril"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Maio"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Xuño"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Xullo"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "Agosto"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "Setembro"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Outubro"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "Novembro"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "Nadal"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Cancelar"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Non"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Si"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Ok"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Non hai categorías seleccionadas para eliminar."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Erro"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Restablecemento do contrasinal de Owncloud"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "Restablecer contrasinal de ownCloud"
@@ -241,14 +241,10 @@ msgstr "Rematar configuración"
msgid "web services under your control"
msgstr "servizos web baixo o seu control"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Desconectar"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Preferencias"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Perdeu o contrasinal?"
diff --git a/l10n/gl/files.po b/l10n/gl/files.po
index 971843534ca..6725283e332 100644
--- a/l10n/gl/files.po
+++ b/l10n/gl/files.po
@@ -9,43 +9,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Galician (http://www.transifex.net/projects/p/owncloud/language/gl/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
"Content-Transfer-Encoding: 8bit\n"
"Language: gl\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Non hai erros, o ficheiro enviouse correctamente"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "O ficheiro enviado supera a directiva upload_max_filesize no php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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"
-#: ajax/upload.php:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "O ficheiro enviado foi só parcialmente enviado"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Non se enviou ningún ficheiro"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Falta un cartafol temporal"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Erro ao escribir no disco"
@@ -53,57 +53,85 @@ msgstr "Erro ao escribir no disco"
msgid "Files"
msgstr "Ficheiros"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Eliminar"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "xa existe"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "substituír"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "cancelar"
-#: js/files.js:170
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "substituído"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "con"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "desfacer"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "eliminado"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "xerando ficheiro ZIP, pode levar un anaco."
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Non se puido subir o ficheiro pois ou é un directorio ou ten 0 bytes"
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "Erro na subida"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "Pendentes"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "Subida cancelada."
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "Nome non válido, '/' non está permitido."
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Tamaño"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Modificado"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "cartafol"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "cartafoles"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "ficheiro"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "ficheiros"
#: templates/admin.php:5
msgid "File handling"
@@ -173,10 +201,6 @@ msgstr "Compartir"
msgid "Download"
msgstr "Descargar"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Eliminar"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Envío demasiado grande"
diff --git a/l10n/gl/files_encryption.po b/l10n/gl/files_encryption.po
new file mode 100644
index 00000000000..c401e95b840
--- /dev/null
+++ b/l10n/gl/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/gl/files_external.po b/l10n/gl/files_external.po
new file mode 100644
index 00000000000..056cc10b6a9
--- /dev/null
+++ b/l10n/gl/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/gl/files_sharing.po b/l10n/gl/files_sharing.po
new file mode 100644
index 00000000000..ef1d19e933b
--- /dev/null
+++ b/l10n/gl/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: gl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/gl/files_versions.po b/l10n/gl/files_versions.po
new file mode 100644
index 00000000000..7c68c81752b
--- /dev/null
+++ b/l10n/gl/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/gl/lib.po b/l10n/gl/lib.po
new file mode 100644
index 00000000000..2e675b5678c
--- /dev/null
+++ b/l10n/gl/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/gl/settings.po b/l10n/gl/settings.po
index 2d3b9ac3383..8c45f0bd139 100644
--- a/l10n/gl/settings.po
+++ b/l10n/gl/settings.po
@@ -9,77 +9,109 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Galician (http://www.transifex.net/projects/p/owncloud/language/gl/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
"Content-Transfer-Encoding: 8bit\n"
"Language: gl\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: ajax/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "Non se puido cargar a lista desde a App Store"
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "Correo electrónico gardado"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "correo electrónico non válido"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "Mudou o OpenID"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Petición incorrecta"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Erro na autenticación"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "O idioma mudou"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "Erro"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "Deshabilitar"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Habilitar"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Gardando..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "Galego"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "Aviso de seguridade"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "Cron"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr "executar unha tarefa con cada páxina cargada"
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr "cron.php está rexistrada como un servizo webcron"
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr "utilice o servizo cron do sistema"
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Conectar"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Máis"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Engade o teu aplicativo"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Escolla un Aplicativo"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Vexa a páxina do aplicativo en apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-licenciado"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "por"
@@ -171,34 +203,38 @@ msgstr "Axude na tradución"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "utilice este enderezo para conectar ao seu ownCloud no xestor de ficheiros"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Nome"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Contrasinal"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Grupos"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Crear"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Cuota por omisión"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Outro"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Cota"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Borrar"
diff --git a/l10n/gl/tasks.po b/l10n/gl/tasks.po
new file mode 100644
index 00000000000..39ebfcde7c5
--- /dev/null
+++ b/l10n/gl/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/gl/user_ldap.po b/l10n/gl/user_ldap.po
new file mode 100644
index 00000000000..08efd8bd99f
--- /dev/null
+++ b/l10n/gl/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/gl/user_migrate.po b/l10n/gl/user_migrate.po
new file mode 100644
index 00000000000..b36741c479e
--- /dev/null
+++ b/l10n/gl/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/gl/user_openid.po b/l10n/gl/user_openid.po
new file mode 100644
index 00000000000..6566b274dfe
--- /dev/null
+++ b/l10n/gl/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/he/admin_dependencies_chk.po b/l10n/he/admin_dependencies_chk.po
new file mode 100644
index 00000000000..01c45eae4c9
--- /dev/null
+++ b/l10n/he/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/he/admin_migrate.po b/l10n/he/admin_migrate.po
new file mode 100644
index 00000000000..6968c6351ef
--- /dev/null
+++ b/l10n/he/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/he/bookmarks.po b/l10n/he/bookmarks.po
new file mode 100644
index 00000000000..14546978e03
--- /dev/null
+++ b/l10n/he/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/he/calendar.po b/l10n/he/calendar.po
index a29ec434338..2cbab15c828 100644
--- a/l10n/he/calendar.po
+++ b/l10n/he/calendar.po
@@ -4,27 +4,36 @@
#
# Translators:
# Elad Alfassa <elad@fedoraproject.org>, 2011.
+# <ido.parag@gmail.com>, 2012.
# <tomerc+transifex.net@gmail.com>, 2011.
# Yaron Shahrabani <sh.yaron@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Hebrew (http://www.transifex.net/projects/p/owncloud/language/he/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "×œ× × ×ž×¦×ו לוחות שנה."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "×œ× × ×ž×¦×ו ×ירועי×."
@@ -32,300 +41,394 @@ msgstr "×œ× × ×ž×¦×ו ×ירועי×."
msgid "Wrong calendar"
msgstr "לוח שנה ×œ× × ×›×•×Ÿ"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "×זור זמן חדש:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "×זור זמן השתנה"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "בקשה ×œ× ×—×•×§×™×ª"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "ח שנה"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd M/d"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd M/d"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM yyyy"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "d MMM [ yyyy]{ '&#8212;'d[ MMM] yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, MMM d, yyyy"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "×™×•× ×”×•×œ×“×ª"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "עסקי×"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "שיחה"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "לקוחות"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "משלוח"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "×—×’×™×"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "רעיונות"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "מסע"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "יובל"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "פגישה"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "×חר"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "×ישי"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "פרוייקטי×"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "ש×לות"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "עבודה"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "×œ×œ× ×©×"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "לוח שנה חדש"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "×œ×œ× ×—×–×¨×”"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "יומי"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "שבועי"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "כל ×™×•× ×¢×‘×•×“×”"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "דו שבועי"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "חודשי"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "שנתי"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "×œ×¢×•×œ× ×œ×"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "לפי מופעי×"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "לפי ת×ריך"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "לפי ×”×™×•× ×‘×—×•×“×©"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "לפי ×”×™×•× ×‘×©×‘×•×¢"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "×™×•× ×©× ×™"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "×™×•× ×©×œ×™×©×™"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "×™×•× ×¨×‘×™×¢×™"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "×™×•× ×—×ž×™×©×™"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "×™×•× ×©×™×©×™"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "שבת"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "×™×•× ×¨×שון"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "שבוע בחודש לציון הפעילות"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "ר×שון"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "שני"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "שלישי"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "רביעי"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "חמישי"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "×חרון"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "ינו×ר"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "פברו×ר"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "מרץ"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "×פריל"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "מ××™"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "יוני"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "יולי"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "×וגוסט"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "ספטמבר"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "×וקטובר"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "נובמבר"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "דצמבר"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "לפי ת×ריכי ×”×ירועי×"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "לפי ×™×ž×™× ×‘×©× ×”"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "לפי מספרי השבועות"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "לפי ×™×•× ×•×—×•×“×©"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "ת×ריך"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "לוח שנה"
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "היו×"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "לוח שנה חדש"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "שדות חסרי×"
@@ -359,40 +462,32 @@ msgstr "×”×ירוע ×ž×¡×ª×™×™× ×¢×•×“ לפני שהתחיל"
msgid "There was a database fail"
msgstr "×ירע כשל במסד הנתוני×"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "שבוע"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "חודש"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "רשימה"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "היו×"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "לוחות שנה"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "×ירעה שגי××” בעת פענוח הקובץ."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "בחר לוחות שנה פעילי×"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "לוחות השנה שלך"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "קישור CalDav"
@@ -404,19 +499,19 @@ msgstr "לוחות שנה מושתפי×"
msgid "No shared calendars"
msgstr "×ין לוחות שנה משותפי×"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "שיתוף לוח שנה"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "הורדה"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "עריכה"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "מחיקה"
@@ -502,23 +597,23 @@ msgstr "הפרדת קטגוריות בפסיק"
msgid "Edit categories"
msgstr "עריכת קטגוריות"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "×ירוע של כל היו×"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "מ×ת"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "עבור"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "×פשרויות מתקדמות"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "מיקו×"
@@ -526,7 +621,7 @@ msgstr "מיקו×"
msgid "Location of the Event"
msgstr "×ž×™×§×•× ×”×ירוע"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "תי×ור"
@@ -534,84 +629,86 @@ msgstr "תי×ור"
msgid "Description of the Event"
msgstr "תי×ור ×”×ירוע"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "חזרה"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "מתקד×"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "יש לבחור ×™×ž×™× ×‘×©×‘×•×¢"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "יש לבחור בימי×"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "×•×™×•× ×”×ירוע בשנה."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "×•×™×•× ×”×ירוע בחודש."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "יש לבחור בחודשי×"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "יש לבחור בשבועות"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "ומספור השבוע הפעיל בשנה."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "משך"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "סיו×"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "מופעי×"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "יצירת לוח שנה חדש"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "×™×‘×•× ×§×•×‘×¥ לוח שנה"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "× × ×œ×‘×—×•×¨ ×ת לוח השנה"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "יצירת לוח שנה חדש"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "×©× ×œ×•×— השנה החדש"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "יבו×"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "היומן מייוב×"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "היומן ×™×™×•×‘× ×‘×”×¦×œ×—×”"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "יבו×"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "סגירת הדו־שיח"
@@ -627,45 +724,73 @@ msgstr "צפייה ב×ירוע"
msgid "No categories selected"
msgstr "×œ× × ×‘×—×¨×• קטגוריות"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "בחר קטגוריה"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "מתוך"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "בשנה"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "×זור זמן"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "יש לבדוק תמיד ×× ×™×© ×”×‘×“×œ×™× ×‘×זורי הזמן"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "מבנה הת×ריך"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24 שעות"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12 שעות"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "×”×™×•× ×”×¨×שון בשבוע"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "כתובת הסנכרון ללוח שנה מסוג CalDAV:"
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/he/contacts.po b/l10n/he/contacts.po
index 76473c14871..df2a4bdc4e7 100644
--- a/l10n/he/contacts.po
+++ b/l10n/he/contacts.po
@@ -3,226 +3,213 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <ido.parag@gmail.com>, 2012.
# <tomerc+transifex.net@gmail.com>, 2011.
# Yaron Shahrabani <sh.yaron@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Hebrew (http://www.transifex.net/projects/p/owncloud/language/he/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "שגי××” בהפעלה ×ו בנטרול פנקס הכתובות."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "×ירעה שגי××” בעת הוספת ×יש הקשר."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "×œ× × ×™×ª×Ÿ להוסיף מ×פיין ריק."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "יש ×œ×ž×œ× ×œ×¤×—×•×ª ×חד משדות הכתובת."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "מספר מזהה ×œ× × ×§×‘×¢."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "ניסיון להוספת מ×פיין כפול: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "××™ ×פשר לעדכן ספר כתובות ×œ×œ× ×©×"
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "שגי××” בהוספת מ×פיין ל×יש הקשר."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "שגי××” בעדכון פנקס הכתובות."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "×œ× ×¦×•×™×Ÿ מזהה"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "שגי××” בהגדרת נתוני הביקורת."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "×œ× × ×‘×—×•×¨ קטגוריות למחיקה."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "×œ× × ×ž×¦×ו פנקסי כתובות."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "×œ× × ×ž×¦×ו ×נשי קשר."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "×ירעה שגי××” בעת הוספת ×יש הקשר."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "×©× ×”×למנט ×œ× × ×§×‘×¢."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "×œ× × ×™×ª×Ÿ להוסיף מ×פיין ריק."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "יש ×œ×ž×œ× ×œ×¤×—×•×ª ×חד משדות הכתובת."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "ניסיון להוספת מ×פיין כפול: "
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "המידע ×ודות vCard ×ינו נכון. × × ×œ×˜×¢×•×Ÿ מחדש ×ת הדף."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "מזהה חסר"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
-msgstr ""
+msgstr "שגי××” בפענוח ×” VCard עבור מספר המזהה: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr ""
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "×¡×™×›×•× ×‘×™×§×•×¨×ª ×œ× × ×§×‘×¢."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "שגי××” בהוספת פנקס הכתובות."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "המידע עבור ×” vCard ×ינו נכון. ×× × ×˜×¢×Ÿ ×ת העמוד: "
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "שגי××” בהפעלת פנקס הכתובות."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "משהו ×œ× ×”×ª× ×”×œ כצפוי."
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
-msgstr ""
+msgstr "מספר מזהה של ×ישר הקשר ×œ× × ×©×œ×—."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
-msgstr ""
+msgstr "שגי××” בקרי×ת תמונת ×יש הקשר."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
-msgstr ""
+msgstr "שגי××” בשמירת קובץ זמני."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
-msgstr ""
+msgstr "התמונה הנטענת ××™× ×” תקנית."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr ""
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "המידע ×ודות vCard ×ינו נכון. × × ×œ×˜×¢×•×Ÿ מחדש ×ת הדף."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "שגי××” במחיקת מ×פיין של ×יש הקשר."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
-msgstr ""
-
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr ""
+msgstr "מספר מזהה של ×ישר הקשר חסר."
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
-msgstr ""
+msgstr "כתובת התמונה ×œ× × ×©×œ×—×”"
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
-msgstr ""
+msgstr "קובץ ×œ× ×§×™×™×:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
-msgstr ""
+msgstr "שגי××” בטעינת התמונה."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "שגי××” בקבלת ×ובי×קט ×יש הקשר"
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "שגי××” בקבלת מידע של תמונה"
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "שגי××” בשמירת ×יש הקשר"
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "שגי××” בשינוי גודל התמונה"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
msgstr ""
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
msgstr ""
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
msgstr ""
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr ""
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr ""
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "שגי××” בעדכון המ×פיין של ×יש הקשר."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr ""
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "שגי××” בעדכון פנקס הכתובות."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
-msgstr ""
+msgstr "התרשה שגי××” בהעל×ת ×נשי הקשר ל×כסון."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "×œ× ×”×ª×¨×—×©×” שגי××”, הקובץ הועלה בהצלחה"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
-msgstr ""
+msgstr "גודל הקובץ שהועלה גדול מהערך upload_max_filesize שמוגדר בקובץ php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
-msgstr ""
+msgstr "הקובץ שהועלה גדוך מהערך MAX_FILE_SIZE שהוגדר בתופס HTML"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "הקובץ הועלה ב×ופן חלקי בלבד"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
-msgstr ""
+msgstr "×©×•× ×§×•×‘×¥ ×œ× ×”×•×¢×œ×”"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "תקיה זמנית חסרה"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
msgstr ""
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
msgstr ""
@@ -230,415 +217,562 @@ msgstr ""
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "×נשי קשר"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
msgstr ""
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
msgstr ""
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
msgstr ""
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
msgstr ""
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
msgstr ""
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/loader.js:49
+msgid "Result: "
msgstr ""
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
+#: js/loader.js:49
+msgid " imported, "
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: js/loader.js:49
+msgid " failed."
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "זהו ×ינו ספר הכתובות שלך"
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "×œ× × ×™×ª×Ÿ ל×תר ×יש קשר"
+
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "זהו ×ינו ספר הכתובות שלך"
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "×œ× × ×™×ª×Ÿ ל×תר ×יש קשר"
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "כתובת"
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "טלפון"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "דו×ר ×לקטרוני"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "×רגון"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "עבודה"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "בית"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "נייד"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "טקסט"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "קולי"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
-msgstr ""
+msgstr "הודעה"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "פקס"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "ויד×ו"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "זימונית"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
+msgstr "×ינטרנט"
+
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "×™×•× ×”×•×œ×“×ª"
+
+#: lib/app.php:253
+msgid "Business"
msgstr ""
-#: lib/hooks.php:79
-msgid "{name}'s Birthday"
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
msgstr ""
-#: lib/search.php:22
+#: lib/hooks.php:102
+msgid "{name}'s Birthday"
+msgstr "×™×•× ×”×”×•×œ×“×ª של {name}"
+
+#: lib/search.php:15
msgid "Contact"
msgstr "×יש קשר"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "הוספת ×יש קשר"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "יב×"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "פנקסי כתובות"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
msgstr ""
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "פנקס כתובות חדש"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
+#: templates/index.php:39
+msgid "Navigation"
msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "קישור "
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "הורדה"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "עריכה"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "מחיקה"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "הורדת ×יש קשר"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "מחיקת ×יש קשר"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
-msgid "Drop photo to upload"
+#: templates/index.php:57
+msgid "Refresh contacts list"
msgstr ""
-#: templates/part.contact.php:29
-msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
+#: templates/index.php:59
+msgid "Add new contact"
msgstr ""
-#: templates/part.contact.php:30
-msgid "Edit name details"
+#: templates/index.php:61
+msgid "Add new addressbook"
msgstr ""
-#: templates/part.contact.php:35 templates/part.contact.php:105
-msgid "Nickname"
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
+msgid "Drop photo to upload"
+msgstr "גרור ושחרר תמונה בשביל להעלות"
+
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "מחק תמונה נוכחית"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "ערוך תמונה נוכחית"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "העלה תמונה חדשה"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "בחר תמונה מ ownCloud"
+
+#: templates/part.contact.php:35
+msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr ""
#: templates/part.contact.php:36
+msgid "Edit name details"
+msgstr "ערוך פרטי ש×"
+
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "×רגון"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "מחיקה"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
+msgid "Nickname"
+msgstr "כינוי"
+
+#: templates/part.contact.php:42
msgid "Enter nickname"
+msgstr "הכנס כינוי"
+
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
msgstr ""
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "×™×•× ×”×•×œ×“×ª"
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
-#: templates/part.contact.php:38
-msgid "dd-mm-yyyy"
+#: templates/part.contact.php:44
+msgid "Go to web site"
msgstr ""
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:46
+msgid "dd-mm-yyyy"
+msgstr "dd-mm-yyyy"
+
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
-msgstr ""
+msgstr "קבוצות"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
-msgstr ""
+msgstr "הפרד קבוצות ×¢× ×¤×¡×™×§×™×"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
-msgstr ""
+msgstr "ערוך קבוצות"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "מועדף"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
-msgstr ""
+msgstr "×× × ×”×–×Ÿ כתובת דו×\"ל חוקית"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
-msgstr ""
+msgstr "הזן כתובת דו×\"ל"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
-msgstr ""
+msgstr "כתובת"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
-msgstr ""
+msgstr "מחק כתובת דו×\"ל"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
-msgstr ""
+msgstr "הכנס מספר טלפון"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
+msgstr "מחק מספר טלפון"
+
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
msgstr ""
-#: templates/part.contact.php:84
-msgid "View on map"
+#: templates/part.contact.php:101
+msgid "Delete IM"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
+msgid "View on map"
+msgstr "ר××” במפה"
+
+#: templates/part.contact.php:110
msgid "Edit address details"
-msgstr ""
+msgstr "ערוך פרטי כתובת"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
-msgstr ""
+msgstr "הוסף הערות ×›×ן."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
-msgstr ""
-
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr ""
+msgstr "הוסף שדה"
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "טלפון"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr ""
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "דו×ר ×לקטרוני"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr ""
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "כתובת"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr ""
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "הערה"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr ""
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "הורדת ×יש קשר"
-#: templates/part.cropphoto.php:64
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "מחיקת ×יש קשר"
+
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
msgstr ""
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
-msgstr ""
+msgstr "ערוך כתובת"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "סוג"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "×ª× ×“×•×ר"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "מורחב"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "רחוב"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "עיר"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "×זור"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "מיקוד"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
-msgid "Country"
-msgstr "מדינה"
-
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
msgstr ""
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "הוספה"
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr "מדינה"
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
@@ -646,176 +780,176 @@ msgstr "פנקס כתובות"
#: templates/part.edit_name_dialog.php:23
msgid "Hon. prefixes"
-msgstr ""
+msgstr "קידומות ש×"
#: templates/part.edit_name_dialog.php:27
msgid "Miss"
-msgstr ""
+msgstr "גב'"
#: templates/part.edit_name_dialog.php:28
msgid "Ms"
-msgstr ""
+msgstr "גב'"
#: templates/part.edit_name_dialog.php:29
msgid "Mr"
-msgstr ""
+msgstr "מר'"
#: templates/part.edit_name_dialog.php:30
msgid "Sir"
-msgstr ""
+msgstr "×דון"
#: templates/part.edit_name_dialog.php:31
msgid "Mrs"
-msgstr ""
+msgstr "גב'"
#: templates/part.edit_name_dialog.php:32
msgid "Dr"
-msgstr ""
+msgstr "ד\"ר"
#: templates/part.edit_name_dialog.php:35
msgid "Given name"
-msgstr ""
+msgstr "ש×"
#: templates/part.edit_name_dialog.php:37
msgid "Additional names"
-msgstr ""
+msgstr "שמות נוספי×"
#: templates/part.edit_name_dialog.php:39
msgid "Family name"
-msgstr ""
+msgstr "×©× ×ž×©×¤×—×”"
#: templates/part.edit_name_dialog.php:41
msgid "Hon. suffixes"
-msgstr ""
+msgstr "סיומות ש×"
#: templates/part.edit_name_dialog.php:45
msgid "J.D."
-msgstr ""
+msgstr "J.D."
#: templates/part.edit_name_dialog.php:46
msgid "M.D."
-msgstr ""
+msgstr "M.D."
#: templates/part.edit_name_dialog.php:47
msgid "D.O."
-msgstr ""
+msgstr "D.O."
#: templates/part.edit_name_dialog.php:48
msgid "D.C."
-msgstr ""
+msgstr "D.C."
#: templates/part.edit_name_dialog.php:49
msgid "Ph.D."
-msgstr ""
+msgstr "Ph.D."
#: templates/part.edit_name_dialog.php:50
msgid "Esq."
-msgstr ""
+msgstr "Esq."
#: templates/part.edit_name_dialog.php:51
msgid "Jr."
-msgstr ""
+msgstr "Jr."
#: templates/part.edit_name_dialog.php:52
msgid "Sn."
-msgstr ""
-
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "פנקס כתובות חדש"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "עריכת פנקס הכתובות"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "×©× ×”×ª×¦×•×’×”"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "פעיל"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "שמירה"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "ביצוע"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "ביטול"
+msgstr "Sn."
#: templates/part.import.php:1
msgid "Import a contacts file"
-msgstr ""
+msgstr "×™×‘× ×§×•×‘×¥ ×נשי קשר"
#: templates/part.import.php:6
msgid "Please choose the addressbook"
-msgstr ""
+msgstr "×× × ×‘×—×¨ ספר כתובות"
#: templates/part.import.php:10
msgid "create a new addressbook"
-msgstr ""
+msgstr "צור ספר כתובות חדש"
#: templates/part.import.php:15
msgid "Name of new addressbook"
-msgstr ""
-
-#: templates/part.import.php:17
-msgid "Import"
-msgstr ""
+msgstr "×©× ×¡×¤×¨ כתובות החדש"
#: templates/part.import.php:20
msgid "Importing contacts"
-msgstr ""
+msgstr "×ž×™×‘× ×נשי קשר"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
+msgstr "×יך לך ×נשי קשר בספר הכתובות"
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
+msgstr "הוסף ×יש קשר"
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
msgstr ""
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
msgstr ""
-#: templates/part.no_contacts.php:2
-msgid "You have no contacts in your addressbook."
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
msgstr ""
-#: templates/part.no_contacts.php:4
-msgid "Add contact"
+#: templates/settings.php:3
+msgid "CardDAV syncing addresses"
+msgstr "CardDAV מסנכרן כתובות"
+
+#: templates/settings.php:3
+msgid "more info"
+msgstr "מידע נוסף"
+
+#: templates/settings.php:5
+msgid "Primary address (Kontact et al)"
+msgstr "כתובת ר×שית"
+
+#: templates/settings.php:7
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
msgstr ""
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
msgstr ""
-#: templates/settings.php:4
-msgid "CardDAV syncing addresses"
+#: templates/settings.php:26
+msgid "Share"
msgstr ""
-#: templates/settings.php:4
-msgid "more info"
+#: templates/settings.php:29
+msgid "Download"
+msgstr "הורדה"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "עריכה"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "פנקס כתובות חדש"
+
+#: templates/settings.php:44
+msgid "Name"
msgstr ""
-#: templates/settings.php:6
-msgid "Primary address (Kontact et al)"
+#: templates/settings.php:45
+msgid "Description"
msgstr ""
-#: templates/settings.php:8
-msgid "iOS/OS X"
+#: templates/settings.php:46
+msgid "Save"
+msgstr "שמירה"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "ביטול"
+
+#: templates/settings.php:52
+msgid "More..."
msgstr ""
diff --git a/l10n/he/core.po b/l10n/he/core.po
index 4d10be3cda2..9f69d80ad1f 100644
--- a/l10n/he/core.po
+++ b/l10n/he/core.po
@@ -3,16 +3,17 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <ido.parag@gmail.com>, 2012.
# <tomerc+transifex.net@gmail.com>, 2011.
# Yaron Shahrabani <sh.yaron@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Hebrew (http://www.transifex.net/projects/p/owncloud/language/he/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -35,83 +36,83 @@ msgstr "קטגוריה ×–×ת כבר קיימת: "
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
msgstr ""
-#: js/js.js:520
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "הגדרות"
+
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "ינו×ר"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "פברו×ר"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "מרץ"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "×פריל"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "מ××™"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "יוני"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "יולי"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "×וגוסט"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "ספטמבר"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "×וקטובר"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "נובמבר"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "דצמבר"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "ביטול"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "ל×"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "כן"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "בסדר"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "×œ× × ×‘×—×¨×• קטגוריות למחיקה"
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "שגי××”"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "×יפוס הססמה של ownCloud"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "×יפוס הססמה של ownCloud"
@@ -241,14 +242,10 @@ msgstr "×¡×™×•× ×”×ª×§× ×”"
msgid "web services under your control"
msgstr "שירותי רשת בשליטתך"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "התנתקות"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "הגדרות"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "שכחת ×ת ססמתך?"
diff --git a/l10n/he/files.po b/l10n/he/files.po
index 12ed075b220..ae9614b3482 100644
--- a/l10n/he/files.po
+++ b/l10n/he/files.po
@@ -3,49 +3,50 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <ido.parag@gmail.com>, 2012.
# <tomerc+transifex.net@gmail.com>, 2011.
# Yaron Shahrabani <sh.yaron@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Hebrew (http://www.transifex.net/projects/p/owncloud/language/he/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "×œ× ×ירעה תקלה, ×”×§×‘×¦×™× ×”×•×¢×œ×• בהצלחה"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "הקובץ שהועלה חרג מההנחיה upload_max_filesize בקובץ php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "הקובץ שהועלה הועלה בצורה חלקית"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "×œ× ×”×•×¢×œ×• קבצי×"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "תיקייה זמנית חסרה"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "הכתיבה לכונן נכשלה"
@@ -53,57 +54,85 @@ msgstr "הכתיבה לכונן נכשלה"
msgid "Files"
msgstr "קבצי×"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "מחיקה"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
-msgid "generating ZIP-file, it may take some time."
+#: js/filelist.js:141
+msgid "replace"
msgstr ""
-#: js/files.js:199
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/filelist.js:141
+msgid "cancel"
msgstr ""
-#: js/files.js:199
-msgid "Upload Error"
+#: js/filelist.js:195
+msgid "replaced"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
-msgid "Pending"
+#: js/filelist.js:195
+msgid "with"
msgstr ""
-#: js/files.js:332
-msgid "Upload cancelled."
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
msgstr ""
-#: js/files.js:456
-msgid "Invalid name, '/' is not allowed."
+#: js/filelist.js:246
+msgid "deleted"
msgstr ""
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:171
+msgid "generating ZIP-file, it may take some time."
+msgstr "יוצר קובץ ZIP, ×× × ×”×ž×ª×Ÿ."
+
+#: js/files.js:200
+msgid "Unable to upload your file as it is a directory or has 0 bytes"
+msgstr "×œ× ×™×›×•×œ להעלות ×ת הקובץ מכיוון שזו תקיה ×ו שמשקל הקובץ 0 בתי×"
+
+#: js/files.js:200
+msgid "Upload Error"
+msgstr "שגי×ת העל××”"
+
+#: js/files.js:228 js/files.js:319 js/files.js:348
+msgid "Pending"
+msgstr "ממתין"
+
+#: js/files.js:333
+msgid "Upload cancelled."
+msgstr "ההעל××” בוטלה."
+
+#: js/files.js:457
+msgid "Invalid name, '/' is not allowed."
+msgstr "×©× ×œ× ×—×•×§×™, '/' ×סור לשימוש."
+
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "גודל"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "זמן שינוי"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "תקיה"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "תקיות"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "קובץ"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "קבצי×"
#: templates/admin.php:5
msgid "File handling"
@@ -173,10 +202,6 @@ msgstr "שיתוף"
msgid "Download"
msgstr "הורדה"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "מחיקה"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "העל××” גדולה מידי"
diff --git a/l10n/he/files_encryption.po b/l10n/he/files_encryption.po
new file mode 100644
index 00000000000..ab535b9271f
--- /dev/null
+++ b/l10n/he/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/he/files_external.po b/l10n/he/files_external.po
new file mode 100644
index 00000000000..ba3aa0596eb
--- /dev/null
+++ b/l10n/he/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/he/files_sharing.po b/l10n/he/files_sharing.po
new file mode 100644
index 00000000000..75c35f14622
--- /dev/null
+++ b/l10n/he/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/he/files_versions.po b/l10n/he/files_versions.po
new file mode 100644
index 00000000000..824d188bfd6
--- /dev/null
+++ b/l10n/he/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/he/lib.po b/l10n/he/lib.po
new file mode 100644
index 00000000000..78686b991a1
--- /dev/null
+++ b/l10n/he/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/he/settings.po b/l10n/he/settings.po
index c98f33ca80a..cd199ce76a6 100644
--- a/l10n/he/settings.po
+++ b/l10n/he/settings.po
@@ -3,83 +3,116 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <ido.parag@gmail.com>, 2012.
# <tomerc+transifex.net@gmail.com>, 2011.
# Yaron Shahrabani <sh.yaron@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Hebrew (http://www.transifex.net/projects/p/owncloud/language/he/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "הדו×״ל נשמר"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "דו×״ל ×œ× ×—×•×§×™"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID השתנה"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "בקשה ×œ× ×—×•×§×™×ª"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "שפה השתנתה"
-#: js/apps.js:31 js/apps.js:67
-msgid "Disable"
+#: js/apps.js:18
+msgid "Error"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr "בטל"
+
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "הפעל"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "שומר.."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "עברית"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr "יומן"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "עוד"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "הוספת ×”×™×™×©×•× ×©×œ×š"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "בחירת יישו×"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "צפה בעמוד ×”×™×©×•× ×‘ apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "רשיון"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "מ×ת"
@@ -171,34 +204,38 @@ msgstr "עזרה בתרגו×"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "השתמש בכתובת זו כדי להתחבר ל־ownCloude שלך ממנהל הקבצי×"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "ש×"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "ססמה"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "קבוצות"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "יצירה"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "מכסת בררת המחדל"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "×חר"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "מכסה"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "מחיקה"
diff --git a/l10n/he/tasks.po b/l10n/he/tasks.po
new file mode 100644
index 00000000000..7f26426e1cd
--- /dev/null
+++ b/l10n/he/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/he/user_ldap.po b/l10n/he/user_ldap.po
new file mode 100644
index 00000000000..4dfdbd692b4
--- /dev/null
+++ b/l10n/he/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/he/user_migrate.po b/l10n/he/user_migrate.po
new file mode 100644
index 00000000000..0a4f2c67393
--- /dev/null
+++ b/l10n/he/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/he/user_openid.po b/l10n/he/user_openid.po
new file mode 100644
index 00000000000..58c09141c7a
--- /dev/null
+++ b/l10n/he/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/hr/admin_dependencies_chk.po b/l10n/hr/admin_dependencies_chk.po
new file mode 100644
index 00000000000..5278ae63b01
--- /dev/null
+++ b/l10n/hr/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/hr/admin_migrate.po b/l10n/hr/admin_migrate.po
new file mode 100644
index 00000000000..6b445e7e51d
--- /dev/null
+++ b/l10n/hr/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/hr/bookmarks.po b/l10n/hr/bookmarks.po
new file mode 100644
index 00000000000..b9e98477cfe
--- /dev/null
+++ b/l10n/hr/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/hr/calendar.po b/l10n/hr/calendar.po
index 36235245142..e848e042a00 100644
--- a/l10n/hr/calendar.po
+++ b/l10n/hr/calendar.po
@@ -10,21 +10,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Croatian (http://www.transifex.net/projects/p/owncloud/language/hr/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Nisu pronađeni kalendari"
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Događaj nije pronađen."
@@ -32,300 +40,394 @@ msgstr "Događaj nije pronađen."
msgid "Wrong calendar"
msgstr "Pogrešan kalendar"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Nova vremenska zona:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Vremenska zona promijenjena"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Neispravan zahtjev"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Kalendar"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
msgstr ""
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
msgstr ""
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
msgstr ""
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
msgstr ""
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Rođendan"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Poslovno"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Poziv"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Klijenti"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "DostavljaÄ"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Praznici"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Ideje"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Putovanje"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Obljetnica"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Sastanak"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Ostalo"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Osobno"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projekti"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Pitanja"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Posao"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "bezimeno"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Novi kalendar"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Ne ponavlja se"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Dnevno"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Tjedno"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Svakog radnog dana"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Dvotjedno"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "MjeseÄno"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Godišnje"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "nikad"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "po pojavama"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "po datum"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "po dana mjeseca"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "po tjednu"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "ponedeljak"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "utorak"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "srijeda"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Äetvrtak"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "petak"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "subota"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "nedelja"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr ""
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "prvi"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "drugi"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "treći"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "Äetvrti"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "peti"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "zadnji"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "sijeÄanj"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "veljaÄa"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "ožujak"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "travanj"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "svibanj"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "lipanj"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "srpanj"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "kolovoz"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "rujan"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "listopad"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "studeni"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "prosinac"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "po datumu događaja"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "po godini(-nama)"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "po broju tjedna(-ana)"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "po danu i mjeseca"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "datum"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Kal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Cijeli dan"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Novi kalendar"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Nedostaju polja"
@@ -359,40 +461,32 @@ msgstr "DogaÄ‘aj zavrÅ¡ava prije nego poÄinje"
msgid "There was a database fail"
msgstr "Pogreška u bazi podataka"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Tjedan"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Mjesec"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Lista"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Danas"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Kalendari"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "PogreÅ¡ka pri Äitanju datoteke."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Odabir aktivnih kalendara"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Vaši kalendari"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDav poveznica"
@@ -404,19 +498,19 @@ msgstr "Podijeljeni kalendari"
msgid "No shared calendars"
msgstr "Nema zajedniÄkih kalendara"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Podjeli kalendar"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Spremi lokalno"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Uredi"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Briši"
@@ -502,23 +596,23 @@ msgstr "Odvoji kategorije zarezima"
msgid "Edit categories"
msgstr "Uredi kategorije"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Cjelodnevni događaj"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Od"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Za"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Napredne mogućnosti"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Lokacija"
@@ -526,7 +620,7 @@ msgstr "Lokacija"
msgid "Location of the Event"
msgstr "Lokacija događaja"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Opis"
@@ -534,84 +628,86 @@ msgstr "Opis"
msgid "Description of the Event"
msgstr "Opis događaja"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Ponavljanje"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Napredno"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Odaberi dane u tjednu"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Odaberi dane"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr ""
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr ""
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Odaberi mjesece"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Odaberi tjedne"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr ""
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Interval"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Kraj"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "pojave"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "stvori novi kalendar"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Uvozite datoteku kalendara"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Odaberi kalendar"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "stvori novi kalendar"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Ime novog kalendara"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Uvoz"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Uvoz kalendara"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Kalendar je uspješno uvezen"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Uvoz"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Zatvori dijalog"
@@ -627,45 +723,73 @@ msgstr "Vidjeti događaj"
msgid "No categories selected"
msgstr "Nema odabranih kategorija"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Odabir kategorije"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "od"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "na"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Vremenska zona"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Provjerite uvijek za promjene vremenske zone"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Format vremena"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24h"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12h"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Prvi dan tjedna"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Adresa za CalDAV sinkronizaciju kalendara:"
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/hr/contacts.po b/l10n/hr/contacts.po
index 14ede506d8c..1e98b008073 100644
--- a/l10n/hr/contacts.po
+++ b/l10n/hr/contacts.po
@@ -3,226 +3,212 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Davor Kustec <dkustec@gmail.com>, 2011.
+# Davor Kustec <dkustec@gmail.com>, 2011, 2012.
# Domagoj Delimar <transifex.net@domdelimar.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Croatian (http://www.transifex.net/projects/p/owncloud/language/hr/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
-msgstr ""
-
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr ""
+msgstr "Pogreška pri (de)aktivaciji adresara."
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr ""
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr ""
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "id nije postavljen."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr ""
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Ne mogu ažurirati adresar sa praznim nazivom."
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr ""
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Pogreška pri ažuriranju adresara."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
-msgstr ""
+msgstr "Nema dodijeljenog ID identifikatora"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
-msgstr ""
+msgstr "Pogreška pri postavljanju checksuma."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Niti jedna kategorija nije odabrana za brisanje."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
-msgstr ""
+msgstr "Nema adresara."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
-msgstr ""
+msgstr "Nema kontakata."
-#: ajax/contactdetails.php:37
-msgid "Missing ID"
-msgstr ""
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Dogodila se pogreška prilikom dodavanja kontakta."
-#: ajax/contactdetails.php:41
-msgid "Error parsing VCard for ID: \""
-msgstr ""
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "naziv elementa nije postavljen."
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
msgstr ""
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Prazno svojstvo se ne može dodati."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Morate ispuniti barem jedno od adresnih polja."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "Pokušali ste dodati duplo svojstvo:"
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
msgstr ""
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
msgstr ""
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informacija o vCard je neispravna. Osvježite stranicu."
+
+#: ajax/contact/details.php:31
+msgid "Missing ID"
+msgstr "Nedostupan ID identifikator"
+
+#: ajax/contact/details.php:36
+msgid "Error parsing VCard for ID: \""
+msgstr "PogreÅ¡ka pri raÅ¡Älanjivanju VCard za ID:"
+
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "checksum nije postavljen."
+
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "Informacije o VCard su pogreÅ¡ne. Molimo, uÄitajte ponovno stranicu:"
+
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Nešto je otišlo... krivo..."
+
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
-msgstr ""
+msgstr "ID kontakta nije podnešen."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
-msgstr ""
+msgstr "PogreÅ¡ka pri Äitanju kontakt fotografije."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
-msgstr ""
+msgstr "Pogreška pri spremanju privremene datoteke."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
-msgstr ""
+msgstr "Fotografija nije valjana."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr ""
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Informacija o vCard je neispravna. Osvježite stranicu."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr ""
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
-msgstr ""
-
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr ""
+msgstr "ID kontakta nije dostupan."
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
-msgstr ""
+msgstr "Putanja do fotografije nije podnešena."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Datoteka ne postoji:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
-msgstr ""
+msgstr "PogreÅ¡ka pri uÄitavanju slike."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
msgstr ""
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
msgstr ""
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
msgstr ""
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
msgstr ""
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
msgstr ""
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
msgstr ""
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
msgstr ""
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr ""
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr ""
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr ""
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr ""
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr ""
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
-msgstr ""
+msgstr "Pogreška pri slanju kontakata."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Nema pogreške, datoteka je poslana uspješno."
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
-msgstr ""
+msgstr "VeliÄina poslane datoteke prelazi veliÄinu prikazanu u upload_max_filesize direktivi u konfiguracijskoj datoteci php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
-msgstr ""
+msgstr "Poslana datoteka prelazi veliÄinu prikazanu u MAX_FILE_SIZE direktivi u HTML formi"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "Poslana datoteka je parcijalno poslana"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
-msgstr ""
+msgstr "Datoteka nije poslana"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Nedostaje privremeni direktorij"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
msgstr ""
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
msgstr ""
@@ -230,416 +216,563 @@ msgstr ""
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Kontakti"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
msgstr ""
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
msgstr ""
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:425
+msgid "Permission error"
+msgstr ""
+
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
msgstr ""
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
msgstr ""
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
msgstr ""
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/loader.js:49
+msgid "Result: "
msgstr ""
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
+#: js/loader.js:49
+msgid " imported, "
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: js/loader.js:49
+msgid " failed."
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Ovo nije vaš adresar."
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Kontakt ne postoji."
+
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Ovo nije vaš adresar."
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Kontakt ne postoji."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Adresa"
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefon"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "E-mail"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organizacija"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Posao"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Kuća"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mobitel"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Tekst"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Glasovno"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
-msgstr ""
+msgstr "Poruka"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fax"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Video"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Pager"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
+msgstr "Internet"
+
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Rođendan"
+
+#: lib/app.php:253
+msgid "Business"
msgstr ""
-#: lib/hooks.php:79
-msgid "{name}'s Birthday"
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
msgstr ""
-#: lib/search.php:22
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
+msgid "{name}'s Birthday"
+msgstr "{name} Rođendan"
+
+#: lib/search.php:15
msgid "Contact"
msgstr "Kontakt"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Dodaj kontakt"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Uvezi"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Adresari"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
msgstr ""
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Novi adresar"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
+#: templates/index.php:39
+msgid "Navigation"
msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDav poveznica"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Preuzimanje"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Uredi"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Obriši"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Preuzmi kontakt"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Izbriši kontakt"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
+msgstr "Dovucite fotografiju za slanje"
+
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Uredi trenutnu sliku"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
msgstr ""
-#: templates/part.contact.php:29
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr ""
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Uredi detalje imena"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organizacija"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Obriši"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Nadimak"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Unesi nadimank"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Rođendan"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "dd-mm-yyyy"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Grupe"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr ""
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Uredi grupe"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
-msgstr ""
+msgstr "Preferirano"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Unesi email adresu"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr ""
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr ""
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Unesi broj telefona"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Prikaži na karti"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Uredi detalje adrese"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Dodaj bilješke ovdje."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Dodaj polje"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr ""
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefon"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Bilješka"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "E-mail"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Uredi trenutnu sliku"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Adresa"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr ""
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Bilješka"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr ""
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Preuzmi kontakt"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Izbriši kontakt"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
msgstr ""
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Uredi adresu"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Tip"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Poštanski Pretinac"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Prošireno"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Ulica"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Grad"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Regija"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Poštanski broj"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "Država"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Uredi kategorije"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Dodaj"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Adresar"
@@ -720,35 +853,6 @@ msgstr ""
msgid "Sn."
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Novi adresar"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Uredi adresar"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr ""
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr ""
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Spremi"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Pošalji"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Prekini"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr ""
@@ -765,57 +869,86 @@ msgstr ""
msgid "Name of new addressbook"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Uvezi"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr ""
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
msgstr ""
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
msgstr ""
-#: templates/part.no_contacts.php:2
-msgid "You have no contacts in your addressbook."
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
msgstr ""
-#: templates/part.no_contacts.php:4
-msgid "Add contact"
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
msgstr ""
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
msgstr ""
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr ""
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr ""
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr ""
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr ""
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Preuzimanje"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Uredi"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Novi adresar"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Spremi"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Prekini"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/hr/core.po b/l10n/hr/core.po
index fb3ceb08083..bfd1c9f19b9 100644
--- a/l10n/hr/core.po
+++ b/l10n/hr/core.po
@@ -3,17 +3,17 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Davor Kustec <dkustec@gmail.com>, 2011.
+# Davor Kustec <dkustec@gmail.com>, 2011, 2012.
# Domagoj Delimar <transifex.net@domdelimar.com>, 2012.
# Thomas Silađi <thomas.siladi@net.hr>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Croatian (http://www.transifex.net/projects/p/owncloud/language/hr/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -34,85 +34,85 @@ msgstr "Ova kategorija već postoji: "
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Postavke"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "SijeÄanj"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "VeljaÄa"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Ožujak"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "Travanj"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Svibanj"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Lipanj"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Srpanj"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "Kolovoz"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "Rujan"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Listopad"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "Studeni"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "Prosinac"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Odustani"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Ne"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Da"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "U redu"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Nema odabranih kategorija za brisanje."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Pogreška"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "ownCloud resetiranje lozinke"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "ownCloud resetiranje lozinke"
@@ -242,14 +242,10 @@ msgstr "Završi postavljanje"
msgid "web services under your control"
msgstr "web usluge pod vašom kontrolom"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Odjava"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Postavke"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Izgubili ste lozinku?"
diff --git a/l10n/hr/files.po b/l10n/hr/files.po
index e9ae4069b9b..b14a71388e5 100644
--- a/l10n/hr/files.po
+++ b/l10n/hr/files.po
@@ -3,49 +3,49 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Davor Kustec <dkustec@gmail.com>, 2011.
+# Davor Kustec <dkustec@gmail.com>, 2011, 2012.
# Thomas Silađi <thomas.siladi@net.hr>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Croatian (http://www.transifex.net/projects/p/owncloud/language/hr/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Datoteka je poslana uspješno i bez pogrešaka"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Poslana datoteka izlazi iz okvira upload_max_size direktive postavljene u php.ini konfiguracijskoj datoteci"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Datoteka je poslana samo djelomiÄno"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Ni jedna datoteka nije poslana"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Nedostaje privremena mapa"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Neuspjelo pisanje na disk"
@@ -53,57 +53,85 @@ msgstr "Neuspjelo pisanje na disk"
msgid "Files"
msgstr "Datoteke"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Briši"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
-msgid "generating ZIP-file, it may take some time."
+#: js/filelist.js:141
+msgid "replace"
msgstr ""
-#: js/files.js:199
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/filelist.js:141
+msgid "cancel"
msgstr ""
-#: js/files.js:199
-msgid "Upload Error"
+#: js/filelist.js:195
+msgid "replaced"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
-msgid "Pending"
+#: js/filelist.js:195
+msgid "with"
msgstr ""
-#: js/files.js:332
-msgid "Upload cancelled."
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
msgstr ""
-#: js/files.js:456
-msgid "Invalid name, '/' is not allowed."
+#: js/filelist.js:246
+msgid "deleted"
msgstr ""
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:171
+msgid "generating ZIP-file, it may take some time."
+msgstr "generiranje ZIP datoteke, ovo može potrajati."
+
+#: js/files.js:200
+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:200
+msgid "Upload Error"
+msgstr "Pogreška pri slanju"
+
+#: js/files.js:228 js/files.js:319 js/files.js:348
+msgid "Pending"
+msgstr "U tijeku"
+
+#: js/files.js:333
+msgid "Upload cancelled."
+msgstr "Slanje poništeno."
+
+#: js/files.js:457
+msgid "Invalid name, '/' is not allowed."
+msgstr "Neispravan naziv, znak '/' nije dozvoljen."
+
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "VeliÄina"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Zadnja promjena"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "mapa"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "mape"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "datoteka"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "datoteke"
#: templates/admin.php:5
msgid "File handling"
@@ -173,10 +201,6 @@ msgstr "podjeli"
msgid "Download"
msgstr "Preuzmi"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Briši"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Prijenos je preobiman"
diff --git a/l10n/hr/files_encryption.po b/l10n/hr/files_encryption.po
new file mode 100644
index 00000000000..d2734fd9fd2
--- /dev/null
+++ b/l10n/hr/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/hr/files_external.po b/l10n/hr/files_external.po
new file mode 100644
index 00000000000..3406e426af5
--- /dev/null
+++ b/l10n/hr/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/hr/files_sharing.po b/l10n/hr/files_sharing.po
new file mode 100644
index 00000000000..902174e80eb
--- /dev/null
+++ b/l10n/hr/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/hr/files_versions.po b/l10n/hr/files_versions.po
new file mode 100644
index 00000000000..f49ed486081
--- /dev/null
+++ b/l10n/hr/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/hr/lib.po b/l10n/hr/lib.po
new file mode 100644
index 00000000000..d38126e621c
--- /dev/null
+++ b/l10n/hr/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/hr/settings.po b/l10n/hr/settings.po
index 8d0166d7016..1d03b6f4e4a 100644
--- a/l10n/hr/settings.po
+++ b/l10n/hr/settings.po
@@ -3,83 +3,115 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Davor Kustec <dkustec@gmail.com>, 2011.
+# Davor Kustec <dkustec@gmail.com>, 2011, 2012.
# Thomas Silađi <thomas.siladi@net.hr>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Croatian (http://www.transifex.net/projects/p/owncloud/language/hr/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "Email spremljen"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Neispravan email"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID promijenjen"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Neispravan zahtjev"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Jezik promijenjen"
-#: js/apps.js:31 js/apps.js:67
-msgid "Disable"
+#: js/apps.js:18
+msgid "Error"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr "IskljuÄi"
+
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "UkljuÄi"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Spremanje..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "__ime_jezika__"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr "dnevnik"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "više"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Dodajte vašu aplikaciju"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Odaberite Aplikaciju"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Pogledajte stranicu s aplikacijama na apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-licencirano"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "od"
@@ -171,34 +203,38 @@ msgstr "Pomoć prevesti"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "koristite ovu adresu za spajanje na Cloud u vašem upravitelju datoteka"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Ime"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Lozinka"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Grupe"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Izradi"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "standardni kvota"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "ostali"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "kvota"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Obriši"
diff --git a/l10n/hr/tasks.po b/l10n/hr/tasks.po
new file mode 100644
index 00000000000..210a819f64c
--- /dev/null
+++ b/l10n/hr/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/hr/user_ldap.po b/l10n/hr/user_ldap.po
new file mode 100644
index 00000000000..14dcd91c011
--- /dev/null
+++ b/l10n/hr/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/hr/user_migrate.po b/l10n/hr/user_migrate.po
new file mode 100644
index 00000000000..edbfa8b1764
--- /dev/null
+++ b/l10n/hr/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/hr/user_openid.po b/l10n/hr/user_openid.po
new file mode 100644
index 00000000000..1f9e7c5ad59
--- /dev/null
+++ b/l10n/hr/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/hu_HU/admin_dependencies_chk.po b/l10n/hu_HU/admin_dependencies_chk.po
new file mode 100644
index 00000000000..1dad50f27ac
--- /dev/null
+++ b/l10n/hu_HU/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/hu_HU/admin_migrate.po b/l10n/hu_HU/admin_migrate.po
new file mode 100644
index 00000000000..f23b87abaa3
--- /dev/null
+++ b/l10n/hu_HU/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/hu_HU/bookmarks.po b/l10n/hu_HU/bookmarks.po
new file mode 100644
index 00000000000..4fe0e566ab1
--- /dev/null
+++ b/l10n/hu_HU/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/hu_HU/calendar.po b/l10n/hu_HU/calendar.po
index 3922bbb27ed..4e689ee90eb 100644
--- a/l10n/hu_HU/calendar.po
+++ b/l10n/hu_HU/calendar.po
@@ -9,21 +9,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Hungarian (Hungary) (http://www.transifex.net/projects/p/owncloud/language/hu_HU/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Nem található naptár"
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Nem található esemény"
@@ -31,300 +39,394 @@ msgstr "Nem található esemény"
msgid "Wrong calendar"
msgstr "Hibás naptár"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Új időzóna"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Időzóna megváltozott"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Érvénytelen kérés"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Naptár"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "nnn"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "nnn H/n"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "nnnn H/n"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "HHHH éééé"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "nnnn, HHH n, éééé"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Születésap"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Ãœzlet"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Hívás"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Kliensek"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Szállító"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Ãœnnepek"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Ötletek"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Utazás"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Évforduló"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Találkozó"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Egyéb"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Személyes"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projektek"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Kérdések"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Munka"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "névtelen"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Új naptár"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Nem ismétlődik"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Napi"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Heti"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Minden hétköznap"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Kéthetente"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Havi"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Évi"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "soha"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "előfordulás szerint"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "dátum szerint"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "hónap napja szerint"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "hét napja szerint"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Hétfő"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Kedd"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Szerda"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Csütörtök"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Péntek"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Szombat"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Vasárnap"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "hónap heteinek sorszáma"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "első"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "második"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "harmadik"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "negyedik"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "ötödik"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "utolsó"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Január"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Február"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Március"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Ãprilis"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Május"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Június"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Július"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "Augusztus"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "Szeptember"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Október"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "November"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "December"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "az esemény napja szerint"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "az év napja(i) szerint"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "a hét sorszáma szerint"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "nap és hónap szerint"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Dátum"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Naptár"
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Egész nap"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Új naptár"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Hiányzó mezők"
@@ -358,40 +460,32 @@ msgstr "Az esemény véget ér a kezdés előtt."
msgid "There was a database fail"
msgstr "Adatbázis hiba történt"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Hét"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Hónap"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Lista"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Ma"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Naptárak"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Probléma volt a fájl elemzése közben."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Aktív naptár kiválasztása"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Naptárjaid"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDAV link"
@@ -403,19 +497,19 @@ msgstr "Megosztott naptárak"
msgid "No shared calendars"
msgstr "Nincs megosztott naptár"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Naptármegosztás"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Letöltés"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Szerkesztés"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Törlés"
@@ -501,23 +595,23 @@ msgstr "Vesszővel válaszd el a kategóriákat"
msgid "Edit categories"
msgstr "Kategóriák szerkesztése"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Egész napos esemény"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Ettől"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Eddig"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Haladó beállítások"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Hely"
@@ -525,7 +619,7 @@ msgstr "Hely"
msgid "Location of the Event"
msgstr "Az esemény helyszíne"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Leírás"
@@ -533,84 +627,86 @@ msgstr "Leírás"
msgid "Description of the Event"
msgstr "Az esemény leírása"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Ismétlés"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Haladó"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Hétköznapok kiválasztása"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Napok kiválasztása"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "és az éves esemény napja."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "és a havi esemény napja."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Hónapok kiválasztása"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Hetek kiválasztása"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "és az heti esemény napja."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Időköz"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Vége"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "előfordulások"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "új naptár létrehozása"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Naptár-fájl importálása"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Válassz naptárat"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "új naptár létrehozása"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Új naptár neve"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importálás"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Naptár importálása"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Naptár sikeresen importálva"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Importálás"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Párbeszédablak bezárása"
@@ -626,45 +722,73 @@ msgstr "Esemény megtekintése"
msgid "No categories selected"
msgstr "Nincs kiválasztott kategória"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Kategória kiválasztása"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr ", tulaj "
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr ", "
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Időzóna"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Mindig ellenőrizze az időzóna-változásokat"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Időformátum"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24h"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12h"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "A hét első napja"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Naptár CalDAV szinkronizálási cím:"
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/hu_HU/contacts.po b/l10n/hu_HU/contacts.po
index bff0548d69c..e1ab92a5a44 100644
--- a/l10n/hu_HU/contacts.po
+++ b/l10n/hu_HU/contacts.po
@@ -11,637 +11,770 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Hungarian (Hungary) (http://www.transifex.net/projects/p/owncloud/language/hu_HU/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Címlista (de)aktiválása sikertelen"
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Hiba a kapcsolat hozzáadásakor"
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Nem adható hozzá üres tulajdonság"
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Legalább egy címmező kitöltendő"
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "ID nincs beállítva"
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "Kísérlet dupla tulajdonság hozzáadására: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Üres névvel nem frissíthető a címlista"
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Hiba a kapcsolat-tulajdonság hozzáadásakor"
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Hiba a címlista frissítésekor"
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "Nincs ID megadva"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Hiba az ellenőrzőösszeg beállításakor"
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Nincs kiválasztva törlendő kategória"
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Nem található címlista"
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Nem található kontakt"
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Hiba a kapcsolat hozzáadásakor"
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "az elem neve nincs beállítva"
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Nem adható hozzá üres tulajdonság"
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Legalább egy címmező kitöltendő"
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "Kísérlet dupla tulajdonság hozzáadására: "
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "A vCardról szóló információ helytelen. Töltsd újra az oldalt."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "Hiányzó ID"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "VCard elemzése sikertelen a következő ID-hoz: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Nem adható hozzá névtelen címlista"
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "az ellenőrzőösszeg nincs beállítva"
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Hiba a címlista hozzáadásakor"
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "Helytelen információ a vCardról. Töltse újra az oldalt: "
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Címlista aktiválása sikertelen"
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Valami balul sült el."
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "Nincs ID megadva a kontakthoz"
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "A kontakt képének beolvasása sikertelen"
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Ideiglenes fájl mentése sikertelen"
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "A kép érvénytelen"
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "ID nincs beállítva"
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "A vCardról szóló információ helytelen. Töltsd újra az oldalt."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Hiba a kapcsolat-tulajdonság törlésekor"
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "Hiányzik a kapcsolat ID"
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "Hiányzik a kontakt ID"
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "Nincs fénykép-útvonal megadva"
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "A fájl nem létezik:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Kép betöltése sikertelen"
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "A kontakt-objektum feldolgozása sikertelen"
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "A PHOTO-tulajdonság feldolgozása sikertelen"
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "A kontakt mentése sikertelen"
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Képméretezés sikertelen"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Képvágás sikertelen"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Ideiglenes kép létrehozása sikertelen"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
+msgstr "A kép nem található"
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "az elem neve nincs beállítva"
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "az ellenőrzőösszeg nincs beállítva"
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "Helytelen információ a vCardról. Töltse újra az oldalt: "
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "Valami balul sült el."
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Hiba a kapcsolat-tulajdonság frissítésekor"
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "Üres névvel nem frissíthető a címlista"
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Hiba a címlista frissítésekor"
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "Hiba a kapcsolatok feltöltésekor"
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Nincs hiba, a fájl sikeresen feltöltődött"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "A feltöltött fájl mérete meghaladja az upload_max_filesize értéket a php.ini-ben"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
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 HTML form-ban megadott MAX_FILE_SIZE értéket"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "A fájl csak részlegesen lett feltöltve"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Nincs feltöltött fájl"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "Hiányzik az ideiglenes könyvtár"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Ideiglenes kép létrehozása sikertelen"
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Ideiglenes kép betöltése sikertelen"
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Nem történt feltöltés. Ismeretlen hiba"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Kapcsolatok"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Sajnáljuk, ez a funkció még nem támogatott"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "Nem támogatott"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Érvényes cím lekérése sikertelen"
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Hiba"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Ezt a tulajdonságot muszáj kitölteni"
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "Sorbarakás sikertelen"
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "A 'deleteProperty' argumentum nélkül lett meghívva. Kérjük, jelezze a hibát."
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Név szerkesztése"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Nincs kiválasztva feltöltendő fájl"
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "A feltöltendő fájl mérete meghaladja a megengedett mértéket"
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
+msgstr "Típus kiválasztása"
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "Húzza ide a VCF fájlt a kapcsolatok importálásához"
-
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1494
+#: js/loader.js:49
+msgid "Result: "
+msgstr "Eredmény: "
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr " beimportálva, "
+
+#: js/loader.js:49
+msgid " failed."
+msgstr " sikertelen"
+
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Ez nem a te címjegyzéked."
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Kapcsolat nem található."
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Címlista nem található"
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Ez nem a te címjegyzéked."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Kapcsolat nem található."
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Cím"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefonszám"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "E-mail"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Szervezet"
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Munkahelyi"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Otthoni"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mobiltelefonszám"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Szöveg"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Hang"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Ãœzenet"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fax"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Video"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Személyhívó"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Születésnap"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "{name} születésnapja"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Kapcsolat"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Kapcsolat hozzáadása"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Import"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Címlisták"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Címlisták beállítása"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Bezár"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Új címlista"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Importálás VCF-ből"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDav hivatkozás"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Letöltés"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Szerkesztés"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Törlés"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Kapcsolat letöltése"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Kapcsolat törlése"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Húzza ide a feltöltendő képet"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Aktuális kép törlése"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Aktuális kép szerkesztése"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Új kép feltöltése"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Kép kiválasztása ownCloud-ból"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr "Formátum egyedi, Rövid név, Teljes név, Visszafelé vagy Visszafelé vesszővel"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Név részleteinek szerkesztése"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Szervezet"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Törlés"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Becenév"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Becenév megadása"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Születésnap"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "yyyy-mm-dd"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Csoportok"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Vesszővel válassza el a csoportokat"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Csoportok szerkesztése"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Előnyben részesített"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Adjon meg érvényes email címet"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Adja meg az email címet"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "Postai cím"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Email cím törlése"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Adja meg a telefonszámot"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Telefonszám törlése"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Megtekintés a térképen"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Cím részleteinek szerkesztése"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Megjegyzések"
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Mező hozzáadása"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Profilkép"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefonszám"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Jegyzet"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "E-mail"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Aktuális kép törlése"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Aktuális kép szerkesztése"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Cím"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Új kép feltöltése"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Jegyzet"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Kép kiválasztása ownCloud-ból"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Kapcsolat letöltése"
-#: templates/part.cropphoto.php:64
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Kapcsolat törlése"
+
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "Az ideiglenes kép el lett távolítva a gyorsítótárból"
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Cím szerkesztése"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Típus"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Postafiók"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Kiterjesztett"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Utca"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Város"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Megye"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Irányítószám"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "Ország"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Kategóriák szerkesztése"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Hozzáad"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Címlista"
@@ -722,35 +855,6 @@ msgstr "Ifj."
msgid "Sn."
msgstr "Id."
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Új Címlista"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Címlista szerkesztése"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Megjelenített név"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Aktív"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Mentés"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Elküld"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Mégsem"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "Kapcsolat-fájl importálása"
@@ -767,57 +871,86 @@ msgstr "Címlista létrehozása"
msgid "Name of new addressbook"
msgstr "Új címlista neve"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Import"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "Kapcsolatok importálása"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "Melyik címlistába történjen az importálás:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "Kiválasztás merevlemezről"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "Nincsenek kapcsolatok a címlistában"
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Kapcsolat hozzáadása"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Címlisták beállítása"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr ""
-#: templates/settings.php:4
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr ""
+
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "CardDAV szinkronizációs címek"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "további információ"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "Elsődleges cím"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Letöltés"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Szerkesztés"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Új címlista"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Mentés"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Mégsem"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/hu_HU/core.po b/l10n/hu_HU/core.po
index 7aba93b9727..928cb018978 100644
--- a/l10n/hu_HU/core.po
+++ b/l10n/hu_HU/core.po
@@ -10,10 +10,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Hungarian (Hungary) (http://www.transifex.net/projects/p/owncloud/language/hu_HU/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -34,85 +34,85 @@ msgstr "Ez a kategória már létezik"
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Beállítások"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Január"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Február"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Március"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "Ãprilis"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Május"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Június"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Július"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "Augusztus"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "Szeptember"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Október"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "November"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "December"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Mégse"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Nem"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Igen"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Ok"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Nincs törlésre jelölt kategória"
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Hiba"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "ownCloud jelszó-visszaállítás"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "ownCloud jelszó-visszaállítás"
@@ -126,7 +126,7 @@ msgstr "Egy e-mailben kap értesítést a jelszóváltoztatás módjáról."
#: lostpassword/templates/lostpassword.php:5
msgid "Requested"
-msgstr "Kért"
+msgstr "Kérés elküldve"
#: lostpassword/templates/lostpassword.php:8
msgid "Login failed!"
@@ -135,7 +135,7 @@ msgstr "Belépés sikertelen!"
#: lostpassword/templates/lostpassword.php:11 templates/installation.php:25
#: templates/login.php:9
msgid "Username"
-msgstr "Felhasználói név"
+msgstr "Felhasználónév"
#: lostpassword/templates/lostpassword.php:15
msgid "Request reset"
@@ -143,7 +143,7 @@ msgstr "Visszaállítás igénylése"
#: lostpassword/templates/resetpassword.php:4
msgid "Your password was reset"
-msgstr "Jelszó megváltoztatásra került"
+msgstr "Jelszó megváltoztatva"
#: lostpassword/templates/resetpassword.php:5
msgid "To login page"
@@ -155,7 +155,7 @@ msgstr "Új jelszó"
#: lostpassword/templates/resetpassword.php:11
msgid "Reset password"
-msgstr "Jelszó beállítás"
+msgstr "Jelszó-visszaállítás"
#: strings.php:5
msgid "Personal"
@@ -171,7 +171,7 @@ msgstr "Alkalmazások"
#: strings.php:8
msgid "Admin"
-msgstr "Adminisztráció"
+msgstr "Admin"
#: strings.php:9
msgid "Help"
@@ -183,7 +183,7 @@ msgstr "Hozzáférés tiltva"
#: templates/404.php:12
msgid "Cloud not found"
-msgstr "Nem talált felhő"
+msgstr "A felhő nem található"
#: templates/edit_categories_dialog.php:4
msgid "Edit categories"
@@ -195,7 +195,7 @@ msgstr "Hozzáadás"
#: templates/installation.php:23
msgid "Create an <strong>admin account</strong>"
-msgstr "<strong>Adminisztrációs fiók</strong> létrehozása"
+msgstr "<strong>Rendszergazdafiók</strong> létrehozása"
#: templates/installation.php:29 templates/login.php:13
msgid "Password"
@@ -203,11 +203,11 @@ msgstr "Jelszó"
#: templates/installation.php:35
msgid "Advanced"
-msgstr "Fejlett"
+msgstr "Haladó"
#: templates/installation.php:37
msgid "Data folder"
-msgstr "Adat könyvtár"
+msgstr "Adatkönyvtár"
#: templates/installation.php:44
msgid "Configure the database"
@@ -220,7 +220,7 @@ msgstr "használva lesz"
#: templates/installation.php:82
msgid "Database user"
-msgstr "Adatbázis felhasználó"
+msgstr "Adatbázis felhasználónév"
#: templates/installation.php:86
msgid "Database password"
@@ -236,27 +236,23 @@ msgstr "Adatbázis szerver"
#: templates/installation.php:101
msgid "Finish setup"
-msgstr "Beállítások befejezése"
+msgstr "Beállítás befejezése"
#: templates/layout.guest.php:42
msgid "web services under your control"
msgstr "webszolgáltatások az irányításod alatt"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Kilépés"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Beállítások"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Elfelejtett jelszó?"
#: templates/login.php:17
msgid "remember"
-msgstr "emlékezni"
+msgstr "emlékezzen"
#: templates/login.php:18
msgid "Log in"
@@ -264,7 +260,7 @@ msgstr "Bejelentkezés"
#: templates/logout.php:1
msgid "You are logged out."
-msgstr "Kilépés sikerült."
+msgstr "Kilépett."
#: templates/part.pagenavi.php:3
msgid "prev"
diff --git a/l10n/hu_HU/files.po b/l10n/hu_HU/files.po
index 12a4d449b20..7ad223a345b 100644
--- a/l10n/hu_HU/files.po
+++ b/l10n/hu_HU/files.po
@@ -10,43 +10,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Hungarian (Hungary) (http://www.transifex.net/projects/p/owncloud/language/hu_HU/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Nincs hiba, a fájl sikeresen feltöltve."
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "A feltöltött file meghaladja az upload_max_filesize direktívát a php.ini-ben."
-#: ajax/upload.php:21
+#: ajax/upload.php:22
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "A feltöltött fájl meghaladja a MAX_FILE_SIZE direktívát ami meghatározott a HTML form-ban."
-#: ajax/upload.php:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Az eredeti fájl csak részlegesen van feltöltve."
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Nem lett fájl feltöltve."
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Hiányzik az ideiglenes könyvtár"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Nem írható lemezre"
@@ -54,57 +54,85 @@ msgstr "Nem írható lemezre"
msgid "Files"
msgstr "Fájlok"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Törlés"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "már létezik"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "cserél"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "mégse"
-#: js/files.js:170
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "kicserélve"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "-val/-vel"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "visszavon"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "törölve"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "ZIP-fájl generálása, ez eltarthat egy ideig."
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Nem tölthető fel, mert mappa volt, vagy 0 byte méretű"
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "Feltöltési hiba"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "Folyamatban"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "Feltöltés megszakítva"
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "Érvénytelen név, a '/' nem megengedett"
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Méret"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Módosítva"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "mappa"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "mappák"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "fájl"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "fájlok"
#: templates/admin.php:5
msgid "File handling"
@@ -174,10 +202,6 @@ msgstr "Megosztás"
msgid "Download"
msgstr "Letöltés"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Törlés"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Feltöltés túl nagy"
diff --git a/l10n/hu_HU/files_encryption.po b/l10n/hu_HU/files_encryption.po
new file mode 100644
index 00000000000..6b70a6b3688
--- /dev/null
+++ b/l10n/hu_HU/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/hu_HU/files_external.po b/l10n/hu_HU/files_external.po
new file mode 100644
index 00000000000..b08622b2d9b
--- /dev/null
+++ b/l10n/hu_HU/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/hu_HU/files_sharing.po b/l10n/hu_HU/files_sharing.po
new file mode 100644
index 00000000000..3b03c6a9432
--- /dev/null
+++ b/l10n/hu_HU/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/hu_HU/files_versions.po b/l10n/hu_HU/files_versions.po
new file mode 100644
index 00000000000..c7ef6a41ba6
--- /dev/null
+++ b/l10n/hu_HU/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/hu_HU/lib.po b/l10n/hu_HU/lib.po
new file mode 100644
index 00000000000..cd149d946d7
--- /dev/null
+++ b/l10n/hu_HU/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/hu_HU/settings.po b/l10n/hu_HU/settings.po
index 76b3a2b0407..0b5b94d6c6c 100644
--- a/l10n/hu_HU/settings.po
+++ b/l10n/hu_HU/settings.po
@@ -9,77 +9,109 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Hungarian (Hungary) (http://www.transifex.net/projects/p/owncloud/language/hu_HU/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "Nem tölthető le a lista az App Store-ból"
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "Email mentve"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Hibás email"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID megváltozott"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Érvénytelen kérés"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Hitelesítési hiba"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "A nyelv megváltozott"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "Hiba"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "Letiltás"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Engedélyezés"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Mentés..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "__language_name__"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "Biztonsági figyelmeztetés"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Napló"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Tovább"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "App hozzáadása"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Egy App kiválasztása"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Lásd apps.owncloud.com, alkalmazások oldal"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-licencelt"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr ":"
@@ -171,34 +203,38 @@ msgstr "Segíts lefordítani!"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "Használd ezt a címet hogy csatlakozz a saját ownCloud rendszeredhez a fájlkezelődben"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Név"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Jelszó"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Csoportok"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Létrehozás"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Alapértelmezett kvóta"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Egyéb"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Kvóta"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Törlés"
diff --git a/l10n/hu_HU/tasks.po b/l10n/hu_HU/tasks.po
new file mode 100644
index 00000000000..73f8d611037
--- /dev/null
+++ b/l10n/hu_HU/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/hu_HU/user_ldap.po b/l10n/hu_HU/user_ldap.po
new file mode 100644
index 00000000000..87c015d08c7
--- /dev/null
+++ b/l10n/hu_HU/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/hu_HU/user_migrate.po b/l10n/hu_HU/user_migrate.po
new file mode 100644
index 00000000000..ba51abb24d9
--- /dev/null
+++ b/l10n/hu_HU/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/hu_HU/user_openid.po b/l10n/hu_HU/user_openid.po
new file mode 100644
index 00000000000..bc86ad58968
--- /dev/null
+++ b/l10n/hu_HU/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/hy/admin_dependencies_chk.po b/l10n/hy/admin_dependencies_chk.po
new file mode 100644
index 00000000000..c649d0fc44d
--- /dev/null
+++ b/l10n/hy/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hy\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/hy/admin_migrate.po b/l10n/hy/admin_migrate.po
new file mode 100644
index 00000000000..2affc03615a
--- /dev/null
+++ b/l10n/hy/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hy\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/hy/bookmarks.po b/l10n/hy/bookmarks.po
new file mode 100644
index 00000000000..74aef263019
--- /dev/null
+++ b/l10n/hy/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hy\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/hy/calendar.po b/l10n/hy/calendar.po
index fa2e38c97a4..2187e755864 100644
--- a/l10n/hy/calendar.po
+++ b/l10n/hy/calendar.po
@@ -8,21 +8,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Armenian (http://www.transifex.net/projects/p/owncloud/language/hy/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: hy\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr ""
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr ""
@@ -30,298 +38,392 @@ msgstr ""
msgid "Wrong calendar"
msgstr ""
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr ""
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr ""
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr ""
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Õ•Ö€Õ¡ÖÕ¸Ö‚ÕµÖ"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
msgstr ""
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
msgstr ""
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
msgstr ""
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
msgstr ""
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr ""
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr ""
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr ""
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr ""
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr ""
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr ""
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr ""
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr ""
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr ""
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr ""
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr ""
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Ô±ÕµÕ¬"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr ""
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr ""
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr ""
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr ""
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr ""
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr ""
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr ""
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr ""
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr ""
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr ""
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr ""
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr ""
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr ""
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr ""
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr ""
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr ""
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr ""
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr ""
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr ""
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr ""
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr ""
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr ""
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr ""
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr ""
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr ""
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr ""
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr ""
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr ""
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr ""
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr ""
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr ""
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr ""
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr ""
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr ""
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr ""
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr ""
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr ""
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr ""
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr ""
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr ""
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr ""
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr ""
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr ""
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr ""
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr ""
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr ""
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr ""
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr ""
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr ""
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr ""
-#: templates/calendar.php:11
-msgid "All day"
+#: templates/calendar.php:6
+msgid "Sun."
msgstr ""
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
+#: templates/calendar.php:11
+msgid "All day"
msgstr ""
#: templates/calendar.php:13
@@ -357,32 +459,24 @@ msgstr ""
msgid "There was a database fail"
msgstr ""
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr ""
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Ô±Õ´Õ«Õ½"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr ""
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Ô±ÕµÕ½Ö…Ö€"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr ""
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr ""
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
msgstr ""
#: templates/part.choosecalendar.php:2
@@ -390,7 +484,7 @@ msgid "Your calendars"
msgstr ""
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr ""
@@ -402,19 +496,19 @@ msgstr ""
msgid "No shared calendars"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Ô²Õ¥Õ¼Õ¶Õ¥Õ¬"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Õ‹Õ¶Õ»Õ¥Õ¬"
@@ -500,23 +594,23 @@ msgstr ""
msgid "Edit categories"
msgstr ""
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr ""
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr ""
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr ""
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr ""
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr ""
@@ -524,7 +618,7 @@ msgstr ""
msgid "Location of the Event"
msgstr ""
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Õ†Õ¯Õ¡Ö€Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶"
@@ -532,84 +626,86 @@ msgstr "Õ†Õ¯Õ¡Ö€Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶"
msgid "Description of the Event"
msgstr ""
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr ""
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr ""
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr ""
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr ""
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr ""
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr ""
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr ""
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr ""
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr ""
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr ""
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr ""
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr ""
-#: templates/part.import.php:1
-msgid "Import a calendar file"
+#: templates/part.import.php:14
+msgid "create a new calendar"
msgstr ""
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
+#: templates/part.import.php:17
+msgid "Import a calendar file"
msgstr ""
-#: templates/part.import.php:10
-msgid "create a new calendar"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
+#: templates/part.import.php:44
+msgid "Take an available name!"
msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
+#: templates/part.import.php:47
+msgid "Import"
msgstr ""
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr ""
@@ -625,44 +721,72 @@ msgstr ""
msgid "No categories selected"
msgstr ""
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr ""
-
#: templates/part.showevent.php:37
msgid "of"
msgstr ""
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr ""
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr ""
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
+#: templates/settings.php:52
+msgid "Time format"
msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr ""
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr ""
-#: templates/settings.php:40
-msgid "First day of the week"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
msgstr ""
#: templates/share.dropdown.php:20
diff --git a/l10n/hy/contacts.po b/l10n/hy/contacts.po
index 824bab0c47d..4cffb4779e5 100644
--- a/l10n/hy/contacts.po
+++ b/l10n/hy/contacts.po
@@ -7,220 +7,206 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Armenian (http://www.transifex.net/projects/p/owncloud/language/hy/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: hy\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr ""
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr ""
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
msgstr ""
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
msgstr ""
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
msgstr ""
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr ""
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr ""
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr ""
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr ""
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr ""
-#: ajax/contactdetails.php:37
-msgid "Missing ID"
-msgstr ""
-
-#: ajax/contactdetails.php:41
-msgid "Error parsing VCard for ID: \""
-msgstr ""
-
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
msgstr ""
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
msgstr ""
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
-#: ajax/uploadphoto.php:68
-msgid "No contact ID was submitted."
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/currentphoto.php:40
-msgid "Error reading contact photo."
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/currentphoto.php:52
-msgid "Error saving temporary file."
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
msgstr ""
-#: ajax/currentphoto.php:55
-msgid "The loading photo is not valid."
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
msgstr ""
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
msgstr ""
-#: ajax/deleteproperty.php:36
+#: ajax/contact/deleteproperty.php:37
msgid "Information about vCard is incorrect. Please reload the page."
msgstr ""
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
+#: ajax/contact/details.php:31
+msgid "Missing ID"
msgstr ""
-#: ajax/editname.php:37
-msgid "Contact ID is missing."
+#: ajax/contact/details.php:36
+msgid "Error parsing VCard for ID: \""
msgstr ""
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
msgstr ""
-#: ajax/oc_photo.php:41
-msgid "No photo path was submitted."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
msgstr ""
-#: ajax/oc_photo.php:48
-msgid "File doesn't exist:"
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
msgstr ""
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
-msgid "Error loading image."
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
+#: ajax/uploadphoto.php:68
+msgid "No contact ID was submitted."
msgstr ""
-#: ajax/savecrop.php:68
-msgid "Error getting contact object."
+#: ajax/currentphoto.php:36
+msgid "Error reading contact photo."
msgstr ""
-#: ajax/savecrop.php:75
-msgid "Error getting PHOTO property."
+#: ajax/currentphoto.php:48
+msgid "Error saving temporary file."
msgstr ""
-#: ajax/savecrop.php:88
-msgid "Error saving contact."
+#: ajax/currentphoto.php:51
+msgid "The loading photo is not valid."
msgstr ""
-#: ajax/savecrop.php:98
-msgid "Error resizing image"
+#: ajax/editname.php:31
+msgid "Contact ID is missing."
msgstr ""
-#: ajax/savecrop.php:101
-msgid "Error cropping image"
+#: ajax/oc_photo.php:32
+msgid "No photo path was submitted."
msgstr ""
-#: ajax/savecrop.php:104
-msgid "Error creating temporary image"
+#: ajax/oc_photo.php:39
+msgid "File doesn't exist:"
msgstr ""
-#: ajax/savecrop.php:107
-msgid "Error finding image: "
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
+msgid "Error loading image."
msgstr ""
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
+#: ajax/savecrop.php:69
+msgid "Error getting contact object."
msgstr ""
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
+#: ajax/savecrop.php:79
+msgid "Error getting PHOTO property."
msgstr ""
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
+#: ajax/savecrop.php:98
+msgid "Error saving contact."
msgstr ""
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
+#: ajax/savecrop.php:109
+msgid "Error resizing image"
msgstr ""
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
+#: ajax/savecrop.php:112
+msgid "Error cropping image"
msgstr ""
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
+#: ajax/savecrop.php:115
+msgid "Error creating temporary image"
msgstr ""
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
+#: ajax/savecrop.php:118
+msgid "Error finding image: "
msgstr ""
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr ""
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr ""
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
msgstr ""
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
msgstr ""
@@ -228,414 +214,561 @@ msgstr ""
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
msgstr ""
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
msgstr ""
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:425
+msgid "Permission error"
+msgstr ""
+
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
msgstr ""
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
msgstr ""
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
msgstr ""
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/loader.js:49
+msgid "Result: "
msgstr ""
-#: js/contacts.js:1494
+#: js/loader.js:49
+msgid " imported, "
+msgstr ""
+
+#: js/loader.js:49
+msgid " failed."
+msgstr ""
+
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
+#: lib/app.php:52
+msgid "This is not your addressbook."
msgstr ""
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:71
+msgid "Contact could not be found."
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
+#: lib/app.php:141
+msgid "Facebook"
msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
+#: lib/app.php:146
+msgid "XMPP"
msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
+#: lib/app.php:151
+msgid "ICQ"
msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
+#: lib/app.php:156
+msgid "Yahoo"
msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
+#: lib/app.php:161
+msgid "Skype"
msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr ""
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr ""
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr ""
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr ""
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr ""
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr ""
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr ""
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr ""
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr ""
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr ""
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr ""
-#: templates/index.php:13
-msgid "Add Contact"
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
msgstr ""
#: templates/index.php:14
+msgid "Add Contact"
+msgstr ""
+
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr ""
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
msgstr ""
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
+#: templates/index.php:39
+msgid "Navigation"
msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
+#: templates/index.php:42
+msgid "Next contact in list"
msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
+#: templates/index.php:44
+msgid "Previous contact in list"
msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
+#: templates/index.php:48
+msgid "Next addressbook"
msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
+#: templates/index.php:50
+msgid "Previous addressbook"
msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
+#: templates/index.php:54
+msgid "Actions"
msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr ""
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr ""
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr ""
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr ""
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr ""
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr ""
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr ""
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr ""
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr ""
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr ""
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr ""
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr ""
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr ""
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr ""
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr ""
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr ""
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr ""
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr ""
-#: templates/part.contact.php:103
-msgid "Profile picture"
+#: templates/part.contact.php:129
+msgid "Phone"
msgstr ""
-#: templates/part.contact.php:107
-msgid "Phone"
+#: templates/part.contact.php:130
+msgid "Email"
msgstr ""
-#: templates/part.contact.php:110
-msgid "Note"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
msgstr ""
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
+#: templates/part.contact.php:132
+msgid "Address"
msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
+#: templates/part.contact.php:133
+msgid "Note"
msgstr ""
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
+#: templates/part.contact.php:138
+msgid "Download contact"
msgstr ""
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
+#: templates/part.contact.php:139
+msgid "Delete contact"
msgstr ""
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
msgstr ""
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr ""
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr ""
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr ""
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr ""
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr ""
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr ""
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
-msgid "Zipcode"
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
msgstr ""
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
-msgid "Country"
+#: templates/part.edit_address_dialog.php:48
+msgid "Zipcode"
msgstr ""
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
msgstr ""
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
msgstr ""
#: templates/part.edit_name_dialog.php:16
@@ -718,102 +851,102 @@ msgstr ""
msgid "Sn."
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
+#: templates/part.import.php:1
+msgid "Import a contacts file"
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
+#: templates/part.import.php:6
+msgid "Please choose the addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
+#: templates/part.import.php:10
+msgid "create a new addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:23
-msgid "Active"
+#: templates/part.import.php:15
+msgid "Name of new addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:29
-msgid "Save"
+#: templates/part.import.php:20
+msgid "Importing contacts"
msgstr ""
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
msgstr ""
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
msgstr ""
-#: templates/part.import.php:1
-msgid "Import a contacts file"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
msgstr ""
-#: templates/part.import.php:6
-msgid "Please choose the addressbook"
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
msgstr ""
-#: templates/part.import.php:10
-msgid "create a new addressbook"
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
msgstr ""
-#: templates/part.import.php:15
-msgid "Name of new addressbook"
+#: templates/settings.php:3
+msgid "CardDAV syncing addresses"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
+#: templates/settings.php:3
+msgid "more info"
msgstr ""
-#: templates/part.import.php:20
-msgid "Importing contacts"
+#: templates/settings.php:5
+msgid "Primary address (Kontact et al)"
msgstr ""
-#: templates/part.import.php:24
-msgid "Close"
+#: templates/settings.php:7
+msgid "iOS/OS X"
msgstr ""
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
+#: templates/settings.php:20
+msgid "Show CardDav link"
msgstr ""
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
msgstr ""
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
+#: templates/settings.php:26
+msgid "Share"
msgstr ""
-#: templates/part.no_contacts.php:2
-msgid "You have no contacts in your addressbook."
+#: templates/settings.php:29
+msgid "Download"
msgstr ""
-#: templates/part.no_contacts.php:4
-msgid "Add contact"
+#: templates/settings.php:33
+msgid "Edit"
msgstr ""
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
+#: templates/settings.php:43
+msgid "New Address Book"
msgstr ""
-#: templates/settings.php:4
-msgid "CardDAV syncing addresses"
+#: templates/settings.php:44
+msgid "Name"
msgstr ""
-#: templates/settings.php:4
-msgid "more info"
+#: templates/settings.php:45
+msgid "Description"
msgstr ""
-#: templates/settings.php:6
-msgid "Primary address (Kontact et al)"
+#: templates/settings.php:46
+msgid "Save"
msgstr ""
-#: templates/settings.php:8
-msgid "iOS/OS X"
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr ""
+
+#: templates/settings.php:52
+msgid "More..."
msgstr ""
diff --git a/l10n/hy/core.po b/l10n/hy/core.po
index 0880df331a4..bcf3a0d20c7 100644
--- a/l10n/hy/core.po
+++ b/l10n/hy/core.po
@@ -7,10 +7,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Armenian (http://www.transifex.net/projects/p/owncloud/language/hy/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -33,51 +33,55 @@ msgstr ""
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
msgstr ""
-#: js/js.js:520
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr ""
+
+#: js/js.js:573
msgid "January"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
msgstr ""
@@ -106,10 +110,6 @@ msgid "Error"
msgstr ""
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr ""
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr ""
@@ -239,14 +239,10 @@ msgstr ""
msgid "web services under your control"
msgstr ""
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr ""
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr ""
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr ""
diff --git a/l10n/hy/files.po b/l10n/hy/files.po
index e0a959181a0..7d158306ff6 100644
--- a/l10n/hy/files.po
+++ b/l10n/hy/files.po
@@ -7,43 +7,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Armenian (http://www.transifex.net/projects/p/owncloud/language/hy/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: hy\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:22
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/upload.php:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr ""
@@ -51,55 +51,83 @@ msgstr ""
msgid "Files"
msgstr ""
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
msgstr ""
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
msgstr ""
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr ""
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr ""
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
msgstr ""
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
msgstr ""
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
msgstr ""
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
msgstr ""
@@ -171,10 +199,6 @@ msgstr ""
msgid "Download"
msgstr ""
-#: templates/index.php:56
-msgid "Delete"
-msgstr ""
-
#: templates/index.php:64
msgid "Upload too large"
msgstr ""
diff --git a/l10n/hy/files_encryption.po b/l10n/hy/files_encryption.po
new file mode 100644
index 00000000000..00b039ad399
--- /dev/null
+++ b/l10n/hy/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hy\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/hy/files_external.po b/l10n/hy/files_external.po
new file mode 100644
index 00000000000..964bc85d34b
--- /dev/null
+++ b/l10n/hy/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hy\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/hy/files_sharing.po b/l10n/hy/files_sharing.po
new file mode 100644
index 00000000000..d7ecd0cfa11
--- /dev/null
+++ b/l10n/hy/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hy\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/hy/files_versions.po b/l10n/hy/files_versions.po
new file mode 100644
index 00000000000..756f8887dd8
--- /dev/null
+++ b/l10n/hy/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hy\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/hy/lib.po b/l10n/hy/lib.po
new file mode 100644
index 00000000000..1a8aea0ebb4
--- /dev/null
+++ b/l10n/hy/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hy\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/hy/settings.po b/l10n/hy/settings.po
index 36ffa29c8eb..13b4e166358 100644
--- a/l10n/hy/settings.po
+++ b/l10n/hy/settings.po
@@ -7,16 +7,20 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Armenian (http://www.transifex.net/projects/p/owncloud/language/hy/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: hy\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+#: ajax/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
msgstr ""
@@ -25,23 +29,31 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr ""
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr ""
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr ""
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
msgstr ""
@@ -49,35 +61,55 @@ msgstr ""
msgid "Saving..."
msgstr ""
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr ""
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr ""
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr ""
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr ""
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr ""
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr ""
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr ""
@@ -169,34 +201,38 @@ msgstr ""
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr ""
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr ""
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr ""
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr ""
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr ""
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr ""
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr ""
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr ""
diff --git a/l10n/hy/tasks.po b/l10n/hy/tasks.po
new file mode 100644
index 00000000000..d459a98917c
--- /dev/null
+++ b/l10n/hy/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hy\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/hy/user_ldap.po b/l10n/hy/user_ldap.po
new file mode 100644
index 00000000000..78202c352c0
--- /dev/null
+++ b/l10n/hy/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hy\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/hy/user_migrate.po b/l10n/hy/user_migrate.po
new file mode 100644
index 00000000000..b834f8ceeee
--- /dev/null
+++ b/l10n/hy/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hy\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/hy/user_openid.po b/l10n/hy/user_openid.po
new file mode 100644
index 00000000000..ccf243a3aa0
--- /dev/null
+++ b/l10n/hy/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Armenian (http://www.transifex.com/projects/p/owncloud/language/hy/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hy\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/ia/admin_dependencies_chk.po b/l10n/ia/admin_dependencies_chk.po
new file mode 100644
index 00000000000..1ac2e890832
--- /dev/null
+++ b/l10n/ia/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/ia/admin_migrate.po b/l10n/ia/admin_migrate.po
new file mode 100644
index 00000000000..c767ecf34f8
--- /dev/null
+++ b/l10n/ia/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/ia/bookmarks.po b/l10n/ia/bookmarks.po
new file mode 100644
index 00000000000..1848a204c0a
--- /dev/null
+++ b/l10n/ia/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/ia/calendar.po b/l10n/ia/calendar.po
index 125085ee3a1..1f981499635 100644
--- a/l10n/ia/calendar.po
+++ b/l10n/ia/calendar.po
@@ -8,21 +8,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Interlingua (http://www.transifex.net/projects/p/owncloud/language/ia/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Necun calendarios trovate."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Nulle eventos trovate."
@@ -30,300 +38,394 @@ msgstr "Nulle eventos trovate."
msgid "Wrong calendar"
msgstr ""
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Nove fuso horari"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr ""
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Requesta invalide."
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Calendario"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
msgstr ""
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
msgstr ""
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
msgstr ""
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
msgstr ""
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr ""
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Anniversario de nativitate"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Affaires"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Appello"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Clientes"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr ""
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Dies feriate"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr ""
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr ""
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr ""
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Incontro"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Altere"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Personal"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projectos"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Demandas"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Travalio"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "sin nomine"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Nove calendario"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Non repite"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Quotidian"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Septimanal"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Cata die"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr ""
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Mensual"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Cata anno"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "nunquam"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr ""
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "per data"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr ""
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr ""
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Lunedi"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Martedi"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Mercuridi"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Jovedi"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Venerdi"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Sabbato"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Dominica"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr ""
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "prime"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "secunde"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "tertie"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr ""
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr ""
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "ultime"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "januario"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Februario"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Martio"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "April"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Mai"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Junio"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Julio"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "Augusto"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "Septembre"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Octobre"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "Novembre"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Decembre"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "per data de eventos"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr ""
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr ""
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "per dia e mense"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Data"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr ""
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Omne die"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Nove calendario"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Campos incomplete"
@@ -357,40 +459,32 @@ msgstr ""
msgid "There was a database fail"
msgstr ""
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Septimana"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Mense"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Lista"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Hodie"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Calendarios"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
msgstr ""
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Selectionar calendarios active"
-
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Tu calendarios"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr ""
@@ -402,19 +496,19 @@ msgstr ""
msgid "No shared calendars"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Discarga"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Modificar"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Deler"
@@ -500,23 +594,23 @@ msgstr ""
msgid "Edit categories"
msgstr "Modificar categorias"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr ""
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Ab"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "A"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Optiones avantiate"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Loco"
@@ -524,7 +618,7 @@ msgstr "Loco"
msgid "Location of the Event"
msgstr "Loco del evento."
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Description"
@@ -532,84 +626,86 @@ msgstr "Description"
msgid "Description of the Event"
msgstr "Description del evento"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Repeter"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Avantiate"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Seliger dies del septimana"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Seliger dies"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr ""
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr ""
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Seliger menses"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Seliger septimanas"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr ""
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Intervallo"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Fin"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr ""
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "crear un nove calendario"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Importar un file de calendario"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Selige el calendario"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "crear un nove calendario"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Nomine del calendario"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importar"
-
-#: templates/part.import.php:20
-msgid "Importing calendar"
+#: templates/part.import.php:44
+msgid "Take an available name!"
msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
msgstr ""
-#: templates/part.import.php:24
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Importar"
+
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Clauder dialogo"
@@ -625,44 +721,72 @@ msgstr "Vide un evento"
msgid "No categories selected"
msgstr "Nulle categorias seligite"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Selectionar categoria"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "de"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "in"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Fuso horari"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
+#: templates/settings.php:52
+msgid "Time format"
msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr ""
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr ""
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Prime die del septimana"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
msgstr ""
#: templates/share.dropdown.php:20
diff --git a/l10n/ia/contacts.po b/l10n/ia/contacts.po
index 7c0c0d4b016..8b6bbeb6752 100644
--- a/l10n/ia/contacts.po
+++ b/l10n/ia/contacts.po
@@ -9,220 +9,206 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Interlingua (http://www.transifex.net/projects/p/owncloud/language/ia/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr ""
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Non pote adder proprietate vacue."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
msgstr ""
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
msgstr ""
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
msgstr ""
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr ""
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr ""
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr ""
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Nulle adressario trovate"
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Nulle contactos trovate."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr ""
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Non pote adder proprietate vacue."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr ""
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr ""
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr ""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
msgstr ""
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Error durante que il addeva le adressario."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr ""
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Error in activar adressario"
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr ""
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr ""
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr ""
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Error durante le scriptura in le file temporari"
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr ""
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr ""
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr ""
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr ""
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr ""
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr ""
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr ""
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr ""
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Il habeva un error durante le cargamento del imagine."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
msgstr ""
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
msgstr ""
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
msgstr ""
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
msgstr ""
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
msgstr ""
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
msgstr ""
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
msgstr ""
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr ""
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr ""
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr ""
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr ""
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr ""
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr ""
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Nulle file esseva incargate."
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "Manca un dossier temporari"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
msgstr ""
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
msgstr ""
@@ -230,416 +216,563 @@ msgstr ""
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Contactos"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
msgstr ""
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
msgstr ""
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:425
+msgid "Permission error"
+msgstr ""
+
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
msgstr ""
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
msgstr ""
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
msgstr ""
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/loader.js:49
+msgid "Result: "
msgstr ""
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
+#: js/loader.js:49
+msgid " imported, "
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: js/loader.js:49
+msgid " failed."
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Iste non es tu libro de adresses"
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Contacto non poterea esser legite"
+
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Adressario non trovate."
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Iste non es tu libro de adresses"
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Contacto non poterea esser legite"
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Adresse"
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telephono"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "E-posta"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organisation"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Travalio"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Domo"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mobile"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Texto"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Voce"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Message"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fax"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Video"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Pager"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Anniversario"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr ""
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Contacto"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Adder contacto"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Importar"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Adressarios"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
msgstr ""
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Nove adressario"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
+#: templates/index.php:39
+msgid "Navigation"
msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "Ligamine CardDav"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Discargar"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Modificar"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Deler"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Discargar contacto"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Deler contacto"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr ""
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Deler photo currente"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Modificar photo currente"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Incargar nove photo"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Seliger photo ex ownCloud"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr ""
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr ""
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organisation"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Deler"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Pseudonymo"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Inserer pseudonymo"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Anniversario"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr ""
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Gruppos"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr ""
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Modificar gruppos"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Preferite"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Entrar un adresse de e-posta"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr ""
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Deler adresse de E-posta"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Entrar un numero de telephono"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Deler numero de telephono"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Vider in un carta"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr ""
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Adder notas hic"
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Adder campo"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Imagine de profilo"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Phono"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Nota"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "E-posta"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Deler photo currente"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Modificar photo currente"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Adresse"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Incargar nove photo"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Nota"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Seliger photo ex ownCloud"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Discargar contacto"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Deler contacto"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
msgstr ""
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Modificar adresses"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Typo"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Cassa postal"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Extendite"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Strata"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Citate"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Region"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Codice postal"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "Pais"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Modificar categorias"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Adder"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Adressario"
@@ -720,35 +853,6 @@ msgstr ""
msgid "Sn."
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Nove adressario"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Modificar adressario"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr ""
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Active"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Salveguardar"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Submitter"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Cancellar"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "Importar un file de contactos"
@@ -765,57 +869,86 @@ msgstr "Crear un nove adressario"
msgid "Name of new addressbook"
msgstr "Nomine del nove gruppo:"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importar"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr ""
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
msgstr ""
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr ""
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
+msgstr "Adder adressario"
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
msgstr ""
-#: templates/part.no_contacts.php:2
-msgid "You have no contacts in your addressbook."
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
msgstr ""
-#: templates/part.no_contacts.php:4
-msgid "Add contact"
-msgstr "Adder adressario"
-
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
msgstr ""
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr ""
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "plus info"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr ""
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Discargar"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Modificar"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Nove adressario"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Salveguardar"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Cancellar"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/ia/core.po b/l10n/ia/core.po
index e81a57a40bc..bd15bf5a904 100644
--- a/l10n/ia/core.po
+++ b/l10n/ia/core.po
@@ -8,10 +8,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Interlingua (http://www.transifex.net/projects/p/owncloud/language/ia/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -34,51 +34,55 @@ msgstr "Iste categoria jam existe:"
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
msgstr ""
-#: js/js.js:520
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Configurationes"
+
+#: js/js.js:573
msgid "January"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
msgstr ""
@@ -107,10 +111,6 @@ msgid "Error"
msgstr ""
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Reinitialisation del contrasigno de Owncloud"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "Reinitialisation del contrasigno de ownCLoud"
@@ -240,14 +240,10 @@ msgstr ""
msgid "web services under your control"
msgstr "servicios web sub tu controlo"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Clauder le session"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Configurationes"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Tu perdeva le contrasigno?"
diff --git a/l10n/ia/files.po b/l10n/ia/files.po
index 6d9a5ffc3f1..64f2fc617a4 100644
--- a/l10n/ia/files.po
+++ b/l10n/ia/files.po
@@ -9,43 +9,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Interlingua (http://www.transifex.net/projects/p/owncloud/language/ia/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:22
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/upload.php:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Le file incargate solmente esseva incargate partialmente"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Nulle file esseva incargate"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr ""
@@ -53,55 +53,83 @@ msgstr ""
msgid "Files"
msgstr "Files"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Deler"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
msgstr ""
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
msgstr ""
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Dimension"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Modificate"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
msgstr ""
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
msgstr ""
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
msgstr ""
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
msgstr ""
@@ -173,10 +201,6 @@ msgstr ""
msgid "Download"
msgstr "Discargar"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Deler"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Incargamento troppo longe"
diff --git a/l10n/ia/files_encryption.po b/l10n/ia/files_encryption.po
new file mode 100644
index 00000000000..8b85b14f5c1
--- /dev/null
+++ b/l10n/ia/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/ia/files_external.po b/l10n/ia/files_external.po
new file mode 100644
index 00000000000..4cb49f32d3d
--- /dev/null
+++ b/l10n/ia/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/ia/files_sharing.po b/l10n/ia/files_sharing.po
new file mode 100644
index 00000000000..55cfbbcf2ea
--- /dev/null
+++ b/l10n/ia/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/ia/files_versions.po b/l10n/ia/files_versions.po
new file mode 100644
index 00000000000..d98c59df09f
--- /dev/null
+++ b/l10n/ia/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/ia/lib.po b/l10n/ia/lib.po
new file mode 100644
index 00000000000..49508111104
--- /dev/null
+++ b/l10n/ia/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/ia/settings.po b/l10n/ia/settings.po
index 304d175a077..fe56aae5b90 100644
--- a/l10n/ia/settings.po
+++ b/l10n/ia/settings.po
@@ -9,16 +9,20 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Interlingua (http://www.transifex.net/projects/p/owncloud/language/ia/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
msgstr ""
@@ -27,23 +31,31 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID cambiate"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Requesta invalide"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Linguage cambiate"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
msgstr ""
@@ -51,35 +63,55 @@ msgstr ""
msgid "Saving..."
msgstr ""
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "Interlingua"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Registro"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Plus"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Adder tu application"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Selectionar un app"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr ""
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "per"
@@ -171,34 +203,38 @@ msgstr "Adjuta a traducer"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "usa iste addresse pro connecter a tu ownCloud in tu administrator de files"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Nomine"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Contrasigno"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Gruppos"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Crear"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Quota predeterminate"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Altere"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Quota"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Deler"
diff --git a/l10n/ia/tasks.po b/l10n/ia/tasks.po
new file mode 100644
index 00000000000..be00099555c
--- /dev/null
+++ b/l10n/ia/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/ia/user_ldap.po b/l10n/ia/user_ldap.po
new file mode 100644
index 00000000000..f5bb1888f4f
--- /dev/null
+++ b/l10n/ia/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/ia/user_migrate.po b/l10n/ia/user_migrate.po
new file mode 100644
index 00000000000..b581cb2029f
--- /dev/null
+++ b/l10n/ia/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/ia/user_openid.po b/l10n/ia/user_openid.po
new file mode 100644
index 00000000000..a3e999d4377
--- /dev/null
+++ b/l10n/ia/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/id/admin_dependencies_chk.po b/l10n/id/admin_dependencies_chk.po
new file mode 100644
index 00000000000..ae358d17af8
--- /dev/null
+++ b/l10n/id/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/id/admin_migrate.po b/l10n/id/admin_migrate.po
new file mode 100644
index 00000000000..52a6b1908b9
--- /dev/null
+++ b/l10n/id/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/id/bookmarks.po b/l10n/id/bookmarks.po
new file mode 100644
index 00000000000..d9e1fba3aca
--- /dev/null
+++ b/l10n/id/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/id/calendar.po b/l10n/id/calendar.po
index 021c23176e5..9b2e6aaf97c 100644
--- a/l10n/id/calendar.po
+++ b/l10n/id/calendar.po
@@ -8,21 +8,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Indonesian (http://www.transifex.net/projects/p/owncloud/language/id/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr ""
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr ""
@@ -30,300 +38,394 @@ msgstr ""
msgid "Wrong calendar"
msgstr ""
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr ""
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Zona waktu telah diubah"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Permintaan tidak sah"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Kalender"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
msgstr ""
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
msgstr ""
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
msgstr ""
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
msgstr ""
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr ""
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr ""
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr ""
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr ""
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr ""
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr ""
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr ""
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr ""
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr ""
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr ""
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr ""
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr ""
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr ""
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr ""
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr ""
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr ""
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr ""
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr ""
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Tidak akan mengulangi"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Harian"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Mingguan"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Setiap Hari Minggu"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Dwi-mingguan"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Bulanan"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Tahunan"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr ""
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr ""
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr ""
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr ""
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr ""
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr ""
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr ""
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr ""
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr ""
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr ""
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr ""
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr ""
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr ""
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr ""
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr ""
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr ""
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr ""
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr ""
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr ""
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr ""
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr ""
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr ""
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr ""
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr ""
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr ""
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr ""
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr ""
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr ""
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr ""
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr ""
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr ""
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr ""
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr ""
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr ""
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr ""
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr ""
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr ""
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Semua Hari"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr ""
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr ""
@@ -357,40 +459,32 @@ msgstr ""
msgid "There was a database fail"
msgstr ""
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Minggu"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Bulan"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr ""
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Hari ini"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Kalender"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Terjadi kesalahan, saat mengurai berkas."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Pilih kalender aktif"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr ""
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr ""
@@ -402,19 +496,19 @@ msgstr ""
msgid "No shared calendars"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Unduh"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Sunting"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr ""
@@ -500,23 +594,23 @@ msgstr ""
msgid "Edit categories"
msgstr ""
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Agenda di Semua Hari"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Dari"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Ke"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr ""
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Lokasi"
@@ -524,7 +618,7 @@ msgstr "Lokasi"
msgid "Location of the Event"
msgstr "Lokasi Agenda"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Deskripsi"
@@ -532,84 +626,86 @@ msgstr "Deskripsi"
msgid "Description of the Event"
msgstr "Deskripsi dari Agenda"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Ulangi"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr ""
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr ""
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr ""
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr ""
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr ""
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr ""
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr ""
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr ""
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr ""
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr ""
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr ""
-#: templates/part.import.php:1
-msgid "Import a calendar file"
+#: templates/part.import.php:14
+msgid "create a new calendar"
msgstr ""
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
+#: templates/part.import.php:17
+msgid "Import a calendar file"
msgstr ""
-#: templates/part.import.php:10
-msgid "create a new calendar"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
+#: templates/part.import.php:44
+msgid "Take an available name!"
msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
+#: templates/part.import.php:47
+msgid "Import"
msgstr ""
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr ""
@@ -625,44 +721,72 @@ msgstr ""
msgid "No categories selected"
msgstr ""
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr ""
-
#: templates/part.showevent.php:37
msgid "of"
msgstr ""
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr ""
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Zonawaktu"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
+#: templates/settings.php:52
+msgid "Time format"
msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr ""
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr ""
-#: templates/settings.php:40
-msgid "First day of the week"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
msgstr ""
#: templates/share.dropdown.php:20
diff --git a/l10n/id/contacts.po b/l10n/id/contacts.po
index 0a3d9aab362..0b3df912c24 100644
--- a/l10n/id/contacts.po
+++ b/l10n/id/contacts.po
@@ -7,220 +7,206 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Indonesian (http://www.transifex.net/projects/p/owncloud/language/id/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr ""
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr ""
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
msgstr ""
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
msgstr ""
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
msgstr ""
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr ""
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr ""
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr ""
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr ""
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr ""
-#: ajax/contactdetails.php:37
-msgid "Missing ID"
-msgstr ""
-
-#: ajax/contactdetails.php:41
-msgid "Error parsing VCard for ID: \""
-msgstr ""
-
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
msgstr ""
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
msgstr ""
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
-#: ajax/uploadphoto.php:68
-msgid "No contact ID was submitted."
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/currentphoto.php:40
-msgid "Error reading contact photo."
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/currentphoto.php:52
-msgid "Error saving temporary file."
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
msgstr ""
-#: ajax/currentphoto.php:55
-msgid "The loading photo is not valid."
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
msgstr ""
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
msgstr ""
-#: ajax/deleteproperty.php:36
+#: ajax/contact/deleteproperty.php:37
msgid "Information about vCard is incorrect. Please reload the page."
msgstr ""
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
+#: ajax/contact/details.php:31
+msgid "Missing ID"
msgstr ""
-#: ajax/editname.php:37
-msgid "Contact ID is missing."
+#: ajax/contact/details.php:36
+msgid "Error parsing VCard for ID: \""
msgstr ""
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
msgstr ""
-#: ajax/oc_photo.php:41
-msgid "No photo path was submitted."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
msgstr ""
-#: ajax/oc_photo.php:48
-msgid "File doesn't exist:"
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
msgstr ""
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
-msgid "Error loading image."
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
+#: ajax/uploadphoto.php:68
+msgid "No contact ID was submitted."
msgstr ""
-#: ajax/savecrop.php:68
-msgid "Error getting contact object."
+#: ajax/currentphoto.php:36
+msgid "Error reading contact photo."
msgstr ""
-#: ajax/savecrop.php:75
-msgid "Error getting PHOTO property."
+#: ajax/currentphoto.php:48
+msgid "Error saving temporary file."
msgstr ""
-#: ajax/savecrop.php:88
-msgid "Error saving contact."
+#: ajax/currentphoto.php:51
+msgid "The loading photo is not valid."
msgstr ""
-#: ajax/savecrop.php:98
-msgid "Error resizing image"
+#: ajax/editname.php:31
+msgid "Contact ID is missing."
msgstr ""
-#: ajax/savecrop.php:101
-msgid "Error cropping image"
+#: ajax/oc_photo.php:32
+msgid "No photo path was submitted."
msgstr ""
-#: ajax/savecrop.php:104
-msgid "Error creating temporary image"
+#: ajax/oc_photo.php:39
+msgid "File doesn't exist:"
msgstr ""
-#: ajax/savecrop.php:107
-msgid "Error finding image: "
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
+msgid "Error loading image."
msgstr ""
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
+#: ajax/savecrop.php:69
+msgid "Error getting contact object."
msgstr ""
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
+#: ajax/savecrop.php:79
+msgid "Error getting PHOTO property."
msgstr ""
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
+#: ajax/savecrop.php:98
+msgid "Error saving contact."
msgstr ""
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
+#: ajax/savecrop.php:109
+msgid "Error resizing image"
msgstr ""
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
+#: ajax/savecrop.php:112
+msgid "Error cropping image"
msgstr ""
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
+#: ajax/savecrop.php:115
+msgid "Error creating temporary image"
msgstr ""
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
+#: ajax/savecrop.php:118
+msgid "Error finding image: "
msgstr ""
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr ""
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr ""
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
msgstr ""
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
msgstr ""
@@ -228,414 +214,561 @@ msgstr ""
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
msgstr ""
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
msgstr ""
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:425
+msgid "Permission error"
+msgstr ""
+
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
msgstr ""
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
msgstr ""
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
msgstr ""
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/loader.js:49
+msgid "Result: "
msgstr ""
-#: js/contacts.js:1494
+#: js/loader.js:49
+msgid " imported, "
+msgstr ""
+
+#: js/loader.js:49
+msgid " failed."
+msgstr ""
+
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
+#: lib/app.php:52
+msgid "This is not your addressbook."
msgstr ""
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:71
+msgid "Contact could not be found."
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
+#: lib/app.php:141
+msgid "Facebook"
msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
+#: lib/app.php:146
+msgid "XMPP"
msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
+#: lib/app.php:151
+msgid "ICQ"
msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
+#: lib/app.php:156
+msgid "Yahoo"
msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
+#: lib/app.php:161
+msgid "Skype"
msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr ""
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr ""
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr ""
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr ""
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr ""
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr ""
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr ""
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr ""
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr ""
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr ""
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr ""
-#: templates/index.php:13
-msgid "Add Contact"
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
msgstr ""
#: templates/index.php:14
+msgid "Add Contact"
+msgstr ""
+
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr ""
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
msgstr ""
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
+#: templates/index.php:39
+msgid "Navigation"
msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
+#: templates/index.php:42
+msgid "Next contact in list"
msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
+#: templates/index.php:44
+msgid "Previous contact in list"
msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
+#: templates/index.php:48
+msgid "Next addressbook"
msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
+#: templates/index.php:50
+msgid "Previous addressbook"
msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
+#: templates/index.php:54
+msgid "Actions"
msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr ""
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr ""
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr ""
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr ""
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr ""
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr ""
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr ""
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr ""
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr ""
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr ""
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr ""
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr ""
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr ""
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr ""
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr ""
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr ""
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr ""
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr ""
-#: templates/part.contact.php:103
-msgid "Profile picture"
+#: templates/part.contact.php:129
+msgid "Phone"
msgstr ""
-#: templates/part.contact.php:107
-msgid "Phone"
+#: templates/part.contact.php:130
+msgid "Email"
msgstr ""
-#: templates/part.contact.php:110
-msgid "Note"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
msgstr ""
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
+#: templates/part.contact.php:132
+msgid "Address"
msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
+#: templates/part.contact.php:133
+msgid "Note"
msgstr ""
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
+#: templates/part.contact.php:138
+msgid "Download contact"
msgstr ""
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
+#: templates/part.contact.php:139
+msgid "Delete contact"
msgstr ""
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
msgstr ""
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr ""
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr ""
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr ""
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr ""
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr ""
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr ""
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
-msgid "Zipcode"
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
msgstr ""
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
-msgid "Country"
+#: templates/part.edit_address_dialog.php:48
+msgid "Zipcode"
msgstr ""
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
msgstr ""
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
msgstr ""
#: templates/part.edit_name_dialog.php:16
@@ -718,102 +851,102 @@ msgstr ""
msgid "Sn."
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
+#: templates/part.import.php:1
+msgid "Import a contacts file"
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
+#: templates/part.import.php:6
+msgid "Please choose the addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
+#: templates/part.import.php:10
+msgid "create a new addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:23
-msgid "Active"
+#: templates/part.import.php:15
+msgid "Name of new addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:29
-msgid "Save"
+#: templates/part.import.php:20
+msgid "Importing contacts"
msgstr ""
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
msgstr ""
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
msgstr ""
-#: templates/part.import.php:1
-msgid "Import a contacts file"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
msgstr ""
-#: templates/part.import.php:6
-msgid "Please choose the addressbook"
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
msgstr ""
-#: templates/part.import.php:10
-msgid "create a new addressbook"
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
msgstr ""
-#: templates/part.import.php:15
-msgid "Name of new addressbook"
+#: templates/settings.php:3
+msgid "CardDAV syncing addresses"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
+#: templates/settings.php:3
+msgid "more info"
msgstr ""
-#: templates/part.import.php:20
-msgid "Importing contacts"
+#: templates/settings.php:5
+msgid "Primary address (Kontact et al)"
msgstr ""
-#: templates/part.import.php:24
-msgid "Close"
+#: templates/settings.php:7
+msgid "iOS/OS X"
msgstr ""
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
+#: templates/settings.php:20
+msgid "Show CardDav link"
msgstr ""
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
msgstr ""
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
+#: templates/settings.php:26
+msgid "Share"
msgstr ""
-#: templates/part.no_contacts.php:2
-msgid "You have no contacts in your addressbook."
+#: templates/settings.php:29
+msgid "Download"
msgstr ""
-#: templates/part.no_contacts.php:4
-msgid "Add contact"
+#: templates/settings.php:33
+msgid "Edit"
msgstr ""
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
+#: templates/settings.php:43
+msgid "New Address Book"
msgstr ""
-#: templates/settings.php:4
-msgid "CardDAV syncing addresses"
+#: templates/settings.php:44
+msgid "Name"
msgstr ""
-#: templates/settings.php:4
-msgid "more info"
+#: templates/settings.php:45
+msgid "Description"
msgstr ""
-#: templates/settings.php:6
-msgid "Primary address (Kontact et al)"
+#: templates/settings.php:46
+msgid "Save"
msgstr ""
-#: templates/settings.php:8
-msgid "iOS/OS X"
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr ""
+
+#: templates/settings.php:52
+msgid "More..."
msgstr ""
diff --git a/l10n/id/core.po b/l10n/id/core.po
index 04caad7d317..6245505a80b 100644
--- a/l10n/id/core.po
+++ b/l10n/id/core.po
@@ -9,10 +9,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Indonesian (http://www.transifex.net/projects/p/owncloud/language/id/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -35,51 +35,55 @@ msgstr "Kategori ini sudah ada:"
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
msgstr ""
-#: js/js.js:520
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Setelan"
+
+#: js/js.js:573
msgid "January"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
msgstr ""
@@ -108,10 +112,6 @@ msgid "Error"
msgstr ""
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Reset password Owncloud"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "reset password ownCloud"
@@ -241,14 +241,10 @@ msgstr "Selesaikan instalasi"
msgid "web services under your control"
msgstr "web service dibawah kontrol anda"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Keluar"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Setelan"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Lupa password anda?"
diff --git a/l10n/id/files.po b/l10n/id/files.po
index 8e1f3da5752..3a96e71072d 100644
--- a/l10n/id/files.po
+++ b/l10n/id/files.po
@@ -9,43 +9,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Indonesian (http://www.transifex.net/projects/p/owncloud/language/id/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Tidak ada galat, berkas sukses diunggah"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:22
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/upload.php:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Berkas hanya diunggah sebagian"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Tidak ada berkas yang diunggah"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Kehilangan folder temporer"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Gagal menulis ke disk"
@@ -53,55 +53,83 @@ msgstr "Gagal menulis ke disk"
msgid "Files"
msgstr "Berkas"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Hapus"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
msgstr ""
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
msgstr ""
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Ukuran"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Dimodifikasi"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
msgstr ""
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
msgstr ""
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
msgstr ""
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
msgstr ""
@@ -173,10 +201,6 @@ msgstr "Bagikan"
msgid "Download"
msgstr "Unduh"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Hapus"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Unggahan terlalu besar"
diff --git a/l10n/id/files_encryption.po b/l10n/id/files_encryption.po
new file mode 100644
index 00000000000..82e011fadab
--- /dev/null
+++ b/l10n/id/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/id/files_external.po b/l10n/id/files_external.po
new file mode 100644
index 00000000000..812c0c97ee5
--- /dev/null
+++ b/l10n/id/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/id/files_sharing.po b/l10n/id/files_sharing.po
new file mode 100644
index 00000000000..0a4a395144c
--- /dev/null
+++ b/l10n/id/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/id/files_versions.po b/l10n/id/files_versions.po
new file mode 100644
index 00000000000..2014a3f2f1b
--- /dev/null
+++ b/l10n/id/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/id/lib.po b/l10n/id/lib.po
new file mode 100644
index 00000000000..6c8b5a8c494
--- /dev/null
+++ b/l10n/id/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/id/settings.po b/l10n/id/settings.po
index f0fe672de83..8b4f28abc2e 100644
--- a/l10n/id/settings.po
+++ b/l10n/id/settings.po
@@ -9,16 +9,20 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Indonesian (http://www.transifex.net/projects/p/owncloud/language/id/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
msgstr ""
@@ -27,23 +31,31 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID telah dirubah"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Permintaan tidak valid"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Bahasa telah diganti"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
msgstr ""
@@ -51,35 +63,55 @@ msgstr ""
msgid "Saving..."
msgstr ""
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "__language_name__"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Log"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Lebih"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Tambahkan App anda"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Pilih satu aplikasi"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-terlisensi"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "oleh"
@@ -171,34 +203,38 @@ msgstr "Bantu menerjemahkan"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "gunakan alamat ini untuk terhubung dengan ownCloud anda dalam file manager anda"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Nama"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Password"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Group"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Buat"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Kuota default"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Lain-lain"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Quota"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Hapus"
diff --git a/l10n/id/tasks.po b/l10n/id/tasks.po
new file mode 100644
index 00000000000..bea6e2596fe
--- /dev/null
+++ b/l10n/id/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/id/user_ldap.po b/l10n/id/user_ldap.po
new file mode 100644
index 00000000000..528094a8b2b
--- /dev/null
+++ b/l10n/id/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/id/user_migrate.po b/l10n/id/user_migrate.po
new file mode 100644
index 00000000000..8ff8940b53f
--- /dev/null
+++ b/l10n/id/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/id/user_openid.po b/l10n/id/user_openid.po
new file mode 100644
index 00000000000..426a6396684
--- /dev/null
+++ b/l10n/id/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/id_ID/admin_dependencies_chk.po b/l10n/id_ID/admin_dependencies_chk.po
new file mode 100644
index 00000000000..359c14556bb
--- /dev/null
+++ b/l10n/id_ID/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id_ID\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/id_ID/admin_migrate.po b/l10n/id_ID/admin_migrate.po
new file mode 100644
index 00000000000..129c39c8d73
--- /dev/null
+++ b/l10n/id_ID/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id_ID\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/id_ID/bookmarks.po b/l10n/id_ID/bookmarks.po
new file mode 100644
index 00000000000..f954c1e8a4c
--- /dev/null
+++ b/l10n/id_ID/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id_ID\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/id_ID/calendar.po b/l10n/id_ID/calendar.po
new file mode 100644
index 00000000000..ebef9b9adec
--- /dev/null
+++ b/l10n/id_ID/calendar.po
@@ -0,0 +1,813 @@
+# 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: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id_ID\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
+msgid "No calendars found."
+msgstr ""
+
+#: ajax/categories/rescan.php:37
+msgid "No events found."
+msgstr ""
+
+#: ajax/event/edit.form.php:20
+msgid "Wrong calendar"
+msgstr ""
+
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
+#: ajax/settings/guesstimezone.php:25
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settings/settimezone.php:23
+msgid "Timezone changed"
+msgstr ""
+
+#: ajax/settings/settimezone.php:25
+msgid "Invalid request"
+msgstr ""
+
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
+msgid "Calendar"
+msgstr ""
+
+#: js/calendar.js:832
+msgid "ddd"
+msgstr ""
+
+#: js/calendar.js:833
+msgid "ddd M/d"
+msgstr ""
+
+#: js/calendar.js:834
+msgid "dddd M/d"
+msgstr ""
+
+#: js/calendar.js:837
+msgid "MMMM yyyy"
+msgstr ""
+
+#: js/calendar.js:839
+msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
+msgstr ""
+
+#: js/calendar.js:841
+msgid "dddd, MMM d, yyyy"
+msgstr ""
+
+#: lib/app.php:121
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:122
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:123
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:124
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:125
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:126
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:127
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:128
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:129
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:130
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:131
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:132
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:133
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:134
+msgid "Questions"
+msgstr ""
+
+#: lib/app.php:135
+msgid "Work"
+msgstr ""
+
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
+msgid "unnamed"
+msgstr ""
+
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr ""
+
+#: lib/object.php:372
+msgid "Does not repeat"
+msgstr ""
+
+#: lib/object.php:373
+msgid "Daily"
+msgstr ""
+
+#: lib/object.php:374
+msgid "Weekly"
+msgstr ""
+
+#: lib/object.php:375
+msgid "Every Weekday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "Bi-Weekly"
+msgstr ""
+
+#: lib/object.php:377
+msgid "Monthly"
+msgstr ""
+
+#: lib/object.php:378
+msgid "Yearly"
+msgstr ""
+
+#: lib/object.php:388
+msgid "never"
+msgstr ""
+
+#: lib/object.php:389
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:390
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:400
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:401
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:412 templates/calendar.php:5
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:413 templates/calendar.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:414 templates/calendar.php:5
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:415 templates/calendar.php:5
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:416 templates/calendar.php:5
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:427
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:428
+msgid "first"
+msgstr ""
+
+#: lib/object.php:429
+msgid "second"
+msgstr ""
+
+#: lib/object.php:430
+msgid "third"
+msgstr ""
+
+#: lib/object.php:431
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:432
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:433
+msgid "last"
+msgstr ""
+
+#: lib/object.php:467 templates/calendar.php:7
+msgid "January"
+msgstr ""
+
+#: lib/object.php:468 templates/calendar.php:7
+msgid "February"
+msgstr ""
+
+#: lib/object.php:469 templates/calendar.php:7
+msgid "March"
+msgstr ""
+
+#: lib/object.php:470 templates/calendar.php:7
+msgid "April"
+msgstr ""
+
+#: lib/object.php:471 templates/calendar.php:7
+msgid "May"
+msgstr ""
+
+#: lib/object.php:472 templates/calendar.php:7
+msgid "June"
+msgstr ""
+
+#: lib/object.php:473 templates/calendar.php:7
+msgid "July"
+msgstr ""
+
+#: lib/object.php:474 templates/calendar.php:7
+msgid "August"
+msgstr ""
+
+#: lib/object.php:475 templates/calendar.php:7
+msgid "September"
+msgstr ""
+
+#: lib/object.php:476 templates/calendar.php:7
+msgid "October"
+msgstr ""
+
+#: lib/object.php:477 templates/calendar.php:7
+msgid "November"
+msgstr ""
+
+#: lib/object.php:478 templates/calendar.php:7
+msgid "December"
+msgstr ""
+
+#: lib/object.php:488
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:489
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:490
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:491
+msgid "by day and month"
+msgstr ""
+
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:43
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
+#: templates/calendar.php:11
+msgid "All day"
+msgstr ""
+
+#: templates/calendar.php:13
+msgid "Missing fields"
+msgstr ""
+
+#: templates/calendar.php:14 templates/part.eventform.php:19
+#: templates/part.showevent.php:11
+msgid "Title"
+msgstr ""
+
+#: templates/calendar.php:16
+msgid "From Date"
+msgstr ""
+
+#: templates/calendar.php:17
+msgid "From Time"
+msgstr ""
+
+#: templates/calendar.php:18
+msgid "To Date"
+msgstr ""
+
+#: templates/calendar.php:19
+msgid "To Time"
+msgstr ""
+
+#: templates/calendar.php:20
+msgid "The event ends before it starts"
+msgstr ""
+
+#: templates/calendar.php:21
+msgid "There was a database fail"
+msgstr ""
+
+#: templates/calendar.php:39
+msgid "Week"
+msgstr ""
+
+#: templates/calendar.php:40
+msgid "Month"
+msgstr ""
+
+#: templates/calendar.php:41
+msgid "List"
+msgstr ""
+
+#: templates/calendar.php:45
+msgid "Today"
+msgstr ""
+
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
+
+#: templates/part.choosecalendar.php:2
+msgid "Your calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.php:27
+#: templates/part.choosecalendar.rowfields.php:11
+msgid "CalDav Link"
+msgstr ""
+
+#: templates/part.choosecalendar.php:31
+msgid "Shared calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.php:48
+msgid "No shared calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:8
+msgid "Share Calendar"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:14
+msgid "Download"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:17
+msgid "Edit"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:20
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.shared.php:4
+msgid "shared with you by"
+msgstr ""
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr ""
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr ""
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr ""
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr ""
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr ""
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr ""
+
+#: templates/part.eventform.php:8 templates/part.showevent.php:3
+msgid "Eventinfo"
+msgstr ""
+
+#: templates/part.eventform.php:9 templates/part.showevent.php:4
+msgid "Repeating"
+msgstr ""
+
+#: templates/part.eventform.php:10 templates/part.showevent.php:5
+msgid "Alarm"
+msgstr ""
+
+#: templates/part.eventform.php:11 templates/part.showevent.php:6
+msgid "Attendees"
+msgstr ""
+
+#: templates/part.eventform.php:13
+msgid "Share"
+msgstr ""
+
+#: templates/part.eventform.php:21
+msgid "Title of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:27 templates/part.showevent.php:19
+msgid "Category"
+msgstr ""
+
+#: templates/part.eventform.php:29
+msgid "Separate categories with commas"
+msgstr ""
+
+#: templates/part.eventform.php:30
+msgid "Edit categories"
+msgstr ""
+
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
+msgid "All Day Event"
+msgstr ""
+
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
+msgid "From"
+msgstr ""
+
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
+msgid "To"
+msgstr ""
+
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
+msgid "Advanced options"
+msgstr ""
+
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
+msgid "Location"
+msgstr ""
+
+#: templates/part.eventform.php:83
+msgid "Location of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
+msgid "Description"
+msgstr ""
+
+#: templates/part.eventform.php:91
+msgid "Description of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
+msgid "Repeat"
+msgstr ""
+
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:164 templates/part.eventform.php:177
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
+
+#: templates/part.import.php:36
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
+
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
+
+#: templates/part.import.php:47
+msgid "Import"
+msgstr ""
+
+#: templates/part.import.php:56
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr ""
+
+#: templates/part.showevent.php:1
+msgid "View an event"
+msgstr ""
+
+#: templates/part.showevent.php:23
+msgid "No categories selected"
+msgstr ""
+
+#: templates/part.showevent.php:37
+msgid "of"
+msgstr ""
+
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
+msgid "at"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "Timezone"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
+
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
+
+#: templates/settings.php:57
+msgid "24h"
+msgstr ""
+
+#: templates/settings.php:58
+msgid "12h"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
+
+#: templates/share.dropdown.php:20
+msgid "Users"
+msgstr ""
+
+#: templates/share.dropdown.php:21
+msgid "select users"
+msgstr ""
+
+#: templates/share.dropdown.php:36 templates/share.dropdown.php:62
+msgid "Editable"
+msgstr ""
+
+#: templates/share.dropdown.php:48
+msgid "Groups"
+msgstr ""
+
+#: templates/share.dropdown.php:49
+msgid "select groups"
+msgstr ""
+
+#: templates/share.dropdown.php:75
+msgid "make public"
+msgstr ""
diff --git a/l10n/id_ID/contacts.po b/l10n/id_ID/contacts.po
new file mode 100644
index 00000000000..a7964324daa
--- /dev/null
+++ b/l10n/id_ID/contacts.po
@@ -0,0 +1,952 @@
+# 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: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id_ID\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr ""
+
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr ""
+
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr ""
+
+#: ajax/categories/categoriesfor.php:17
+msgid "No ID provided"
+msgstr ""
+
+#: ajax/categories/categoriesfor.php:34
+msgid "Error setting checksum."
+msgstr ""
+
+#: ajax/categories/delete.php:19
+msgid "No categories selected for deletion."
+msgstr ""
+
+#: ajax/categories/delete.php:26
+msgid "No address books found."
+msgstr ""
+
+#: ajax/categories/delete.php:34
+msgid "No contacts found."
+msgstr ""
+
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr ""
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr ""
+
+#: ajax/contact/details.php:31
+msgid "Missing ID"
+msgstr ""
+
+#: ajax/contact/details.php:36
+msgid "Error parsing VCard for ID: \""
+msgstr ""
+
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr ""
+
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr ""
+
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr ""
+
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
+#: ajax/uploadphoto.php:68
+msgid "No contact ID was submitted."
+msgstr ""
+
+#: ajax/currentphoto.php:36
+msgid "Error reading contact photo."
+msgstr ""
+
+#: ajax/currentphoto.php:48
+msgid "Error saving temporary file."
+msgstr ""
+
+#: ajax/currentphoto.php:51
+msgid "The loading photo is not valid."
+msgstr ""
+
+#: ajax/editname.php:31
+msgid "Contact ID is missing."
+msgstr ""
+
+#: ajax/oc_photo.php:32
+msgid "No photo path was submitted."
+msgstr ""
+
+#: ajax/oc_photo.php:39
+msgid "File doesn't exist:"
+msgstr ""
+
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
+msgid "Error loading image."
+msgstr ""
+
+#: ajax/savecrop.php:69
+msgid "Error getting contact object."
+msgstr ""
+
+#: ajax/savecrop.php:79
+msgid "Error getting PHOTO property."
+msgstr ""
+
+#: ajax/savecrop.php:98
+msgid "Error saving contact."
+msgstr ""
+
+#: ajax/savecrop.php:109
+msgid "Error resizing image"
+msgstr ""
+
+#: ajax/savecrop.php:112
+msgid "Error cropping image"
+msgstr ""
+
+#: ajax/savecrop.php:115
+msgid "Error creating temporary image"
+msgstr ""
+
+#: ajax/savecrop.php:118
+msgid "Error finding image: "
+msgstr ""
+
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
+msgid "Error uploading contacts to storage."
+msgstr ""
+
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
+msgid "Couldn't save temporary image: "
+msgstr ""
+
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
+msgid "Couldn't load temporary image: "
+msgstr ""
+
+#: ajax/uploadphoto.php:71
+msgid "No file was uploaded. Unknown error"
+msgstr ""
+
+#: appinfo/app.php:21
+msgid "Contacts"
+msgstr ""
+
+#: js/contacts.js:71
+msgid "Sorry, this functionality has not been implemented yet"
+msgstr ""
+
+#: js/contacts.js:71
+msgid "Not implemented"
+msgstr ""
+
+#: js/contacts.js:76
+msgid "Couldn't get a valid address."
+msgstr ""
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
+msgid "Error"
+msgstr ""
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Permission error"
+msgstr ""
+
+#: js/contacts.js:763
+msgid "This property has to be non-empty."
+msgstr ""
+
+#: js/contacts.js:789
+msgid "Couldn't serialize elements."
+msgstr ""
+
+#: js/contacts.js:921 js/contacts.js:939
+msgid ""
+"'deleteProperty' called without type argument. Please report at "
+"bugs.owncloud.org"
+msgstr ""
+
+#: js/contacts.js:958
+msgid "Edit name"
+msgstr ""
+
+#: js/contacts.js:1250
+msgid "No files selected for upload."
+msgstr ""
+
+#: js/contacts.js:1258
+msgid ""
+"The file you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr ""
+
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
+msgid "Select type"
+msgstr ""
+
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr ""
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr ""
+
+#: js/loader.js:49
+msgid "Result: "
+msgstr ""
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr ""
+
+#: js/loader.js:49
+msgid " failed."
+msgstr ""
+
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
+msgstr ""
+
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr ""
+
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr ""
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr ""
+
+#: lib/app.php:116
+msgid "Jabber"
+msgstr ""
+
+#: lib/app.php:121
+msgid "AIM"
+msgstr ""
+
+#: lib/app.php:126
+msgid "MSN"
+msgstr ""
+
+#: lib/app.php:131
+msgid "Twitter"
+msgstr ""
+
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr ""
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
+
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
+
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
+
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
+
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
+msgid "Work"
+msgstr ""
+
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
+msgid "Home"
+msgstr ""
+
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
+msgid "Mobile"
+msgstr ""
+
+#: lib/app.php:203
+msgid "Text"
+msgstr ""
+
+#: lib/app.php:204
+msgid "Voice"
+msgstr ""
+
+#: lib/app.php:205
+msgid "Message"
+msgstr ""
+
+#: lib/app.php:206
+msgid "Fax"
+msgstr ""
+
+#: lib/app.php:207
+msgid "Video"
+msgstr ""
+
+#: lib/app.php:208
+msgid "Pager"
+msgstr ""
+
+#: lib/app.php:215
+msgid "Internet"
+msgstr ""
+
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
+msgid "{name}'s Birthday"
+msgstr ""
+
+#: lib/search.php:15
+msgid "Contact"
+msgstr ""
+
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
+msgid "Add Contact"
+msgstr ""
+
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr ""
+
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
+
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
+
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
+
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
+
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
+
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
+
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
+
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
+
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
+msgid "Drop photo to upload"
+msgstr ""
+
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
+msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
+msgstr ""
+
+#: templates/part.contact.php:36
+msgid "Edit name details"
+msgstr ""
+
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr ""
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr ""
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
+msgid "Nickname"
+msgstr ""
+
+#: templates/part.contact.php:42
+msgid "Enter nickname"
+msgstr ""
+
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
+msgid "dd-mm-yyyy"
+msgstr ""
+
+#: templates/part.contact.php:47 templates/part.contact.php:135
+msgid "Groups"
+msgstr ""
+
+#: templates/part.contact.php:49
+msgid "Separate groups with commas"
+msgstr ""
+
+#: templates/part.contact.php:50
+msgid "Edit groups"
+msgstr ""
+
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.contact.php:60
+msgid "Please specify a valid email address."
+msgstr ""
+
+#: templates/part.contact.php:60
+msgid "Enter email address"
+msgstr ""
+
+#: templates/part.contact.php:64
+msgid "Mail to address"
+msgstr ""
+
+#: templates/part.contact.php:65
+msgid "Delete email address"
+msgstr ""
+
+#: templates/part.contact.php:75
+msgid "Enter phone number"
+msgstr ""
+
+#: templates/part.contact.php:79
+msgid "Delete phone number"
+msgstr ""
+
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
+msgid "View on map"
+msgstr ""
+
+#: templates/part.contact.php:110
+msgid "Edit address details"
+msgstr ""
+
+#: templates/part.contact.php:116
+msgid "Add notes here."
+msgstr ""
+
+#: templates/part.contact.php:124
+msgid "Add field"
+msgstr ""
+
+#: templates/part.contact.php:129
+msgid "Phone"
+msgstr ""
+
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr ""
+
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
+
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr ""
+
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr ""
+
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.cropphoto.php:65
+msgid "The temporary image has been removed from cache."
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:6
+msgid "Edit address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:10
+msgid "Type"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
+msgid "PO Box"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
+msgid "Extended"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
+msgid "City"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:42
+msgid "Region"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
+msgid "Zipcode"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:16
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:23
+msgid "Hon. prefixes"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:27
+msgid "Miss"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:28
+msgid "Ms"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:29
+msgid "Mr"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:30
+msgid "Sir"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:31
+msgid "Mrs"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:32
+msgid "Dr"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:35
+msgid "Given name"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:37
+msgid "Additional names"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:39
+msgid "Family name"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:41
+msgid "Hon. suffixes"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:45
+msgid "J.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:46
+msgid "M.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:47
+msgid "D.O."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:48
+msgid "D.C."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:49
+msgid "Ph.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:50
+msgid "Esq."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:51
+msgid "Jr."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:52
+msgid "Sn."
+msgstr ""
+
+#: templates/part.import.php:1
+msgid "Import a contacts file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the addressbook"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new addressbook"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new addressbook"
+msgstr ""
+
+#: templates/part.import.php:20
+msgid "Importing contacts"
+msgstr ""
+
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
+msgstr ""
+
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "CardDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr ""
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr ""
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr ""
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/id_ID/core.po b/l10n/id_ID/core.po
new file mode 100644
index 00000000000..0d43d3618c8
--- /dev/null
+++ b/l10n/id_ID/core.po
@@ -0,0 +1,268 @@
+# 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: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id_ID\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ajax/vcategories/add.php:23 ajax/vcategories/delete.php:23
+msgid "Application name not provided."
+msgstr ""
+
+#: ajax/vcategories/add.php:29
+msgid "No category to add?"
+msgstr ""
+
+#: ajax/vcategories/add.php:36
+msgid "This category already exists: "
+msgstr ""
+
+#: js/jquery-ui-1.8.16.custom.min.js:511
+msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+msgstr ""
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr ""
+
+#: js/js.js:573
+msgid "January"
+msgstr ""
+
+#: js/js.js:573
+msgid "February"
+msgstr ""
+
+#: js/js.js:573
+msgid "March"
+msgstr ""
+
+#: js/js.js:573
+msgid "April"
+msgstr ""
+
+#: js/js.js:573
+msgid "May"
+msgstr ""
+
+#: js/js.js:573
+msgid "June"
+msgstr ""
+
+#: js/js.js:574
+msgid "July"
+msgstr ""
+
+#: js/js.js:574
+msgid "August"
+msgstr ""
+
+#: js/js.js:574
+msgid "September"
+msgstr ""
+
+#: js/js.js:574
+msgid "October"
+msgstr ""
+
+#: js/js.js:574
+msgid "November"
+msgstr ""
+
+#: js/js.js:574
+msgid "December"
+msgstr ""
+
+#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:159
+msgid "No"
+msgstr ""
+
+#: js/oc-dialogs.js:160
+msgid "Yes"
+msgstr ""
+
+#: js/oc-dialogs.js:177
+msgid "Ok"
+msgstr ""
+
+#: js/oc-vcategories.js:68
+msgid "No categories selected for deletion."
+msgstr ""
+
+#: js/oc-vcategories.js:68
+msgid "Error"
+msgstr ""
+
+#: lostpassword/index.php:26
+msgid "ownCloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+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 "Requested"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:25
+#: templates/login.php:9
+msgid "Username"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:15
+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:14
+msgid "Add"
+msgstr ""
+
+#: templates/installation.php:23
+msgid "Create an <strong>admin account</strong>"
+msgstr ""
+
+#: templates/installation.php:29 templates/login.php:13
+msgid "Password"
+msgstr ""
+
+#: templates/installation.php:35
+msgid "Advanced"
+msgstr ""
+
+#: templates/installation.php:37
+msgid "Data folder"
+msgstr ""
+
+#: templates/installation.php:44
+msgid "Configure the database"
+msgstr ""
+
+#: templates/installation.php:49 templates/installation.php:60
+#: templates/installation.php:70
+msgid "will be used"
+msgstr ""
+
+#: templates/installation.php:82
+msgid "Database user"
+msgstr ""
+
+#: templates/installation.php:86
+msgid "Database password"
+msgstr ""
+
+#: templates/installation.php:90
+msgid "Database name"
+msgstr ""
+
+#: templates/installation.php:96
+msgid "Database host"
+msgstr ""
+
+#: templates/installation.php:101
+msgid "Finish setup"
+msgstr ""
+
+#: templates/layout.guest.php:42
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:49
+msgid "Log out"
+msgstr ""
+
+#: templates/login.php:6
+msgid "Lost your password?"
+msgstr ""
+
+#: templates/login.php:17
+msgid "remember"
+msgstr ""
+
+#: templates/login.php:18
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr ""
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr ""
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr ""
diff --git a/l10n/id_ID/files.po b/l10n/id_ID/files.po
new file mode 100644
index 00000000000..4e35fb7c4e4
--- /dev/null
+++ b/l10n/id_ID/files.po
@@ -0,0 +1,218 @@
+# 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: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id_ID\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ajax/upload.php:20
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/upload.php:21
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: ajax/upload.php:22
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/upload.php:23
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/upload.php:24
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/upload.php:25
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/upload.php:26
+msgid "Failed to write to disk"
+msgstr ""
+
+#: appinfo/app.php:6
+msgid "Files"
+msgstr ""
+
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
+msgid "generating ZIP-file, it may take some time."
+msgstr ""
+
+#: js/files.js:200
+msgid "Unable to upload your file as it is a directory or has 0 bytes"
+msgstr ""
+
+#: js/files.js:200
+msgid "Upload Error"
+msgstr ""
+
+#: js/files.js:228 js/files.js:319 js/files.js:348
+msgid "Pending"
+msgstr ""
+
+#: js/files.js:333
+msgid "Upload cancelled."
+msgstr ""
+
+#: js/files.js:457
+msgid "Invalid name, '/' is not allowed."
+msgstr ""
+
+#: js/files.js:703 templates/index.php:55
+msgid "Size"
+msgstr ""
+
+#: js/files.js:704 templates/index.php:56
+msgid "Modified"
+msgstr ""
+
+#: js/files.js:731
+msgid "folder"
+msgstr ""
+
+#: js/files.js:733
+msgid "folders"
+msgstr ""
+
+#: js/files.js:741
+msgid "file"
+msgstr ""
+
+#: js/files.js:743
+msgid "files"
+msgstr ""
+
+#: templates/admin.php:5
+msgid "File handling"
+msgstr ""
+
+#: templates/admin.php:7
+msgid "Maximum upload size"
+msgstr ""
+
+#: templates/admin.php:7
+msgid "max. possible: "
+msgstr ""
+
+#: templates/admin.php:9
+msgid "Needed for multi-file and folder downloads."
+msgstr ""
+
+#: templates/admin.php:9
+msgid "Enable ZIP-download"
+msgstr ""
+
+#: templates/admin.php:11
+msgid "0 is unlimited"
+msgstr ""
+
+#: templates/admin.php:12
+msgid "Maximum input size for ZIP files"
+msgstr ""
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:11
+msgid "From url"
+msgstr ""
+
+#: templates/index.php:21
+msgid "Upload"
+msgstr ""
+
+#: templates/index.php:27
+msgid "Cancel upload"
+msgstr ""
+
+#: templates/index.php:39
+msgid "Nothing in here. Upload something!"
+msgstr ""
+
+#: templates/index.php:47
+msgid "Name"
+msgstr ""
+
+#: templates/index.php:49
+msgid "Share"
+msgstr ""
+
+#: templates/index.php:51
+msgid "Download"
+msgstr ""
+
+#: templates/index.php:64
+msgid "Upload too large"
+msgstr ""
+
+#: templates/index.php:66
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: templates/index.php:71
+msgid "Files are being scanned, please wait."
+msgstr ""
+
+#: templates/index.php:74
+msgid "Current scanning"
+msgstr ""
diff --git a/l10n/id_ID/files_encryption.po b/l10n/id_ID/files_encryption.po
new file mode 100644
index 00000000000..56ba9cd601f
--- /dev/null
+++ b/l10n/id_ID/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id_ID\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/id_ID/files_external.po b/l10n/id_ID/files_external.po
new file mode 100644
index 00000000000..1cdaed8b985
--- /dev/null
+++ b/l10n/id_ID/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id_ID\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/id_ID/files_sharing.po b/l10n/id_ID/files_sharing.po
new file mode 100644
index 00000000000..fdba039609d
--- /dev/null
+++ b/l10n/id_ID/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id_ID\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/id_ID/files_versions.po b/l10n/id_ID/files_versions.po
new file mode 100644
index 00000000000..f8b53c2af4e
--- /dev/null
+++ b/l10n/id_ID/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id_ID\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/id_ID/gallery.po b/l10n/id_ID/gallery.po
new file mode 100644
index 00000000000..6d62fde891d
--- /dev/null
+++ b/l10n/id_ID/gallery.po
@@ -0,0 +1,58 @@
+# 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: 2012-07-26 08:03+0200\n"
+"PO-Revision-Date: 2012-07-25 19:30+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id_ID\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: appinfo/app.php:39
+msgid "Pictures"
+msgstr ""
+
+#: js/pictures.js:12
+msgid "Share gallery"
+msgstr ""
+
+#: js/pictures.js:32
+msgid "Error: "
+msgstr ""
+
+#: js/pictures.js:32
+msgid "Internal error"
+msgstr ""
+
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+#: templates/view_album.php:36
+msgid "Remove confirmation"
+msgstr ""
+
+#: templates/view_album.php:37
+msgid "Do you want to remove album"
+msgstr ""
+
+#: templates/view_album.php:40
+msgid "Change album name"
+msgstr ""
+
+#: templates/view_album.php:43
+msgid "New album name"
+msgstr ""
diff --git a/l10n/id_ID/lib.po b/l10n/id_ID/lib.po
new file mode 100644
index 00000000000..62fef73ca05
--- /dev/null
+++ b/l10n/id_ID/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id_ID\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/id_ID/media.po b/l10n/id_ID/media.po
new file mode 100644
index 00000000000..1db3e2f400f
--- /dev/null
+++ b/l10n/id_ID/media.po
@@ -0,0 +1,66 @@
+# 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: 2012-07-26 08:03+0200\n"
+"PO-Revision-Date: 2011-08-13 02:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id_ID\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: appinfo/app.php:45 templates/player.php:8
+msgid "Music"
+msgstr ""
+
+#: js/music.js:18
+msgid "Add album to playlist"
+msgstr ""
+
+#: templates/music.php:3 templates/player.php:12
+msgid "Play"
+msgstr ""
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:13
+msgid "Pause"
+msgstr ""
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr ""
+
+#: templates/music.php:6 templates/player.php:14
+msgid "Next"
+msgstr ""
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr ""
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr ""
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr ""
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr ""
+
+#: templates/music.php:38
+msgid "Album"
+msgstr ""
+
+#: templates/music.php:39
+msgid "Title"
+msgstr ""
diff --git a/l10n/id_ID/settings.po b/l10n/id_ID/settings.po
new file mode 100644
index 00000000000..e6873fc49b4
--- /dev/null
+++ b/l10n/id_ID/settings.po
@@ -0,0 +1,238 @@
+# 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: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id_ID\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ajax/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
+#: ajax/lostpassword.php:14
+msgid "Email saved"
+msgstr ""
+
+#: ajax/lostpassword.php:16
+msgid "Invalid email"
+msgstr ""
+
+#: ajax/openid.php:16
+msgid "OpenID Changed"
+msgstr ""
+
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
+msgid "Invalid request"
+msgstr ""
+
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
+msgid "Language changed"
+msgstr ""
+
+#: js/apps.js:18
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:62
+msgid "Enable"
+msgstr ""
+
+#: js/personal.js:69
+msgid "Saving..."
+msgstr ""
+
+#: personal.php:46 personal.php:47
+msgid "__language_name__"
+msgstr ""
+
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
+msgid "Log"
+msgstr ""
+
+#: templates/admin.php:67
+msgid "More"
+msgstr ""
+
+#: templates/apps.php:10
+msgid "Add your App"
+msgstr ""
+
+#: templates/apps.php:26
+msgid "Select an App"
+msgstr ""
+
+#: templates/apps.php:29
+msgid "See application page at apps.owncloud.com"
+msgstr ""
+
+#: templates/apps.php:30
+msgid "-licensed"
+msgstr ""
+
+#: templates/apps.php:30
+msgid "by"
+msgstr ""
+
+#: templates/help.php:8
+msgid "Documentation"
+msgstr ""
+
+#: templates/help.php:9
+msgid "Managing Big Files"
+msgstr ""
+
+#: templates/help.php:10
+msgid "Ask a question"
+msgstr ""
+
+#: templates/help.php:22
+msgid "Problems connecting to help database."
+msgstr ""
+
+#: templates/help.php:23
+msgid "Go there manually."
+msgstr ""
+
+#: templates/help.php:31
+msgid "Answer"
+msgstr ""
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr ""
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr ""
+
+#: templates/personal.php:12
+msgid "Desktop and Mobile Syncing Clients"
+msgstr ""
+
+#: templates/personal.php:13
+msgid "Download"
+msgstr ""
+
+#: templates/personal.php:19
+msgid "Your password got changed"
+msgstr ""
+
+#: templates/personal.php:20
+msgid "Unable to change your password"
+msgstr ""
+
+#: templates/personal.php:21
+msgid "Current password"
+msgstr ""
+
+#: templates/personal.php:22
+msgid "New password"
+msgstr ""
+
+#: templates/personal.php:23
+msgid "show"
+msgstr ""
+
+#: templates/personal.php:24
+msgid "Change password"
+msgstr ""
+
+#: templates/personal.php:30
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:31
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:32
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:38 templates/personal.php:39
+msgid "Language"
+msgstr ""
+
+#: templates/personal.php:44
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:51
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr ""
+
+#: templates/users.php:21 templates/users.php:76
+msgid "Name"
+msgstr ""
+
+#: templates/users.php:23 templates/users.php:77
+msgid "Password"
+msgstr ""
+
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
+msgid "Groups"
+msgstr ""
+
+#: templates/users.php:32
+msgid "Create"
+msgstr ""
+
+#: templates/users.php:35
+msgid "Default Quota"
+msgstr ""
+
+#: templates/users.php:55 templates/users.php:138
+msgid "Other"
+msgstr ""
+
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:146
+msgid "Delete"
+msgstr ""
diff --git a/l10n/id_ID/tasks.po b/l10n/id_ID/tasks.po
new file mode 100644
index 00000000000..cf74571c756
--- /dev/null
+++ b/l10n/id_ID/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id_ID\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ajax/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/id_ID/user_ldap.po b/l10n/id_ID/user_ldap.po
new file mode 100644
index 00000000000..eb078008f53
--- /dev/null
+++ b/l10n/id_ID/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id_ID\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/id_ID/user_migrate.po b/l10n/id_ID/user_migrate.po
new file mode 100644
index 00000000000..fd3779f871c
--- /dev/null
+++ b/l10n/id_ID/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id_ID\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/id_ID/user_openid.po b/l10n/id_ID/user_openid.po
new file mode 100644
index 00000000000..42b92de9fa0
--- /dev/null
+++ b/l10n/id_ID/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Indonesian (Indonesia) (http://www.transifex.com/projects/p/owncloud/language/id_ID/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id_ID\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/it/admin_dependencies_chk.po b/l10n/it/admin_dependencies_chk.po
new file mode 100644
index 00000000000..46d1082e634
--- /dev/null
+++ b/l10n/it/admin_dependencies_chk.po
@@ -0,0 +1,74 @@
+# 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>, 2012.
+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 05: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"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: it\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr "Il modulo php-json è richiesto per l'intercomunicazione di diverse applicazioni"
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr "Il modulo php-curl è richiesto per scaricare il titolo della pagina quando si aggiunge un segnalibro"
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr "Il modulo php-gd è richiesto per creare miniature delle tue immagini"
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr "Il modulo php-ldap è richiesto per collegarsi a un server ldap"
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr "Il modulo php-zip è richiesto per scaricare diversi file contemporaneamente"
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr "Il modulo php-mb_multibyte è richiesto per gestire correttamente la codifica."
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr "Il modulo php-ctype è richiesto per la validazione dei dati."
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr "Il modulo php-xml è richiesto per condividere i file con webdav."
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr "La direttiva allow_url_fopen del tuo php.ini deve essere impostata a 1 per recuperare la base di conoscenza dai server di OCS"
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr "Il modulo php-pdo è richiesto per archiviare i dati di ownCloud in un database."
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr "Stato delle dipendenze"
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr "Usato da:"
diff --git a/l10n/it/admin_migrate.po b/l10n/it/admin_migrate.po
new file mode 100644
index 00000000000..2da23d877f8
--- /dev/null
+++ b/l10n/it/admin_migrate.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:
+# Vincenzo Reale <vinx.reale@gmail.com>, 2012.
+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 05:47+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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr "Esporta questa istanza di ownCloud"
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr "Questa operazione creerà un file compresso che contiene i dati dell'istanza di ownCloud. Scegli il tipo di esportazione:"
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr "Esporta"
diff --git a/l10n/it/bookmarks.po b/l10n/it/bookmarks.po
new file mode 100644
index 00000000000..7ed1ded6a77
--- /dev/null
+++ b/l10n/it/bookmarks.po
@@ -0,0 +1,61 @@
+# 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>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-07-31 22:53+0200\n"
+"PO-Revision-Date: 2012-07-30 08:36+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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr "Segnalibri"
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr "senza nome"
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr "Quando vuoi creare rapidamente un segnalibro, trascinalo sui segnalibri del browser e fai clic su di esso:"
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr "Leggi dopo"
+
+#: templates/list.php:13
+msgid "Address"
+msgstr "Indirizzo"
+
+#: templates/list.php:14
+msgid "Title"
+msgstr "Titolo"
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr "Tag"
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr "Salva segnalibro"
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr "Non hai segnalibri"
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr "Bookmarklet <br />"
diff --git a/l10n/it/calendar.po b/l10n/it/calendar.po
index ed36e36d84c..efdc82532d8 100644
--- a/l10n/it/calendar.po
+++ b/l10n/it/calendar.po
@@ -15,21 +15,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Italian (http://www.transifex.net/projects/p/owncloud/language/it/)\n"
+"POT-Creation-Date: 2012-08-12 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 07:01+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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr "Non tutti i calendari sono mantenuti completamente in cache"
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr "Tutto sembra essere mantenuto completamente in cache"
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Nessun calendario trovato."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Nessun evento trovato."
@@ -37,300 +45,394 @@ msgstr "Nessun evento trovato."
msgid "Wrong calendar"
msgstr "Calendario sbagliato"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr "Il file non conteneva alcun evento o tutti gli eventi erano già salvati nel tuo calendario."
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr "gli eventi sono stati salvati nel nuovo calendario"
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr "Importazione non riuscita"
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr "gli eventi sono stati salvati nel tuo calendario"
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Nuovo fuso orario:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Fuso orario cambiato"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Richiesta non valida"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Calendario"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd d/M"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd d/M"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM yyyy"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, d MMM yyyy"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Compleanno"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Azienda"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Chiama"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Clienti"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Consegna"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Vacanze"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Idee"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Viaggio"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Anniversario"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Riunione"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Altro"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Personale"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Progetti"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Domande"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Lavoro"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr "da"
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "senza nome"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Nuovo calendario"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Non ripetere"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Giornaliero"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Settimanale"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Ogni giorno della settimana"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Ogni due settimane"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Mensile"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Annuale"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "mai"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "per occorrenze"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "per data"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "per giorno del mese"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "per giorno della settimana"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Lunedì"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Martedì"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Mercoledì"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Giovedì"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Venerdì"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Sabato"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Domenica"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "settimana del mese degli eventi"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "primo"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "secondo"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "terzo"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "quarto"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "quinto"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "ultimo"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Gennaio"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Febbraio"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Marzo"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Aprile"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Maggio"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Giugno"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Luglio"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "Agosto"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "Settembre"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Ottobre"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "Novembre"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Dicembre"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "per data evento"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "per giorno/i dell'anno"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "per numero/i settimana"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "per giorno e mese"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Data"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Cal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr "Dom."
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr "Lun."
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr "Mar."
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr "Mer."
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr "Gio."
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr "Ven."
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr "Sab."
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr "Gen."
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr "Feb."
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr "Mar."
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr "Apr."
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr "Mag."
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr "Giu."
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr "Lug."
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr "Ago."
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr "Set."
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr "Ott."
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr "Nov."
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr "Dic."
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Tutti il giorno"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Nuovo calendario"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Campi mancanti"
@@ -364,40 +466,32 @@ msgstr "L'evento finisce prima d'iniziare"
msgid "There was a database fail"
msgstr "Si è verificato un errore del database"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Settimana"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Mese"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Elenco"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Oggi"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Calendari"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Si è verificato un errore durante l'analisi del file."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Scegli i calendari attivi"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr "Impostazioni"
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "I tuoi calendari"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "Collegamento CalDav"
@@ -409,19 +503,19 @@ msgstr "Calendari condivisi"
msgid "No shared calendars"
msgstr "Nessun calendario condiviso"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Condividi calendario"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Scarica"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Modifica"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Elimina"
@@ -501,29 +595,29 @@ msgstr "Categoria"
#: templates/part.eventform.php:29
msgid "Separate categories with commas"
-msgstr "Categorie separate con virgole"
+msgstr "Categorie separate da virgole"
#: templates/part.eventform.php:30
msgid "Edit categories"
msgstr "Modifica le categorie"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Evento che occupa tutta la giornata"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Da"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "A"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Opzioni avanzate"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Luogo"
@@ -531,7 +625,7 @@ msgstr "Luogo"
msgid "Location of the Event"
msgstr "Luogo dell'evento"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Descrizione"
@@ -539,84 +633,86 @@ msgstr "Descrizione"
msgid "Description of the Event"
msgstr "Descrizione dell'evento"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Ripeti"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Avanzato"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Seleziona i giorni della settimana"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Seleziona i giorni"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "e il giorno dell'anno degli eventi."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "e il giorno del mese degli eventi."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Seleziona i mesi"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Seleziona le settimane"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "e la settimana dell'anno degli eventi."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Intervallo"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Fine"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "occorrenze"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "Crea un nuovo calendario"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Importa un file di calendario"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Scegli il calendario"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "Crea un nuovo calendario"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr "Scegli un calendario"
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Nome del nuovo calendario"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importa"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr "Usa un nome disponibile!"
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Importazione del calendario in corso"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr "Un calendario con questo nome esiste già. Se continui, i due calendari saranno uniti."
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Calendario importato correttamente"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Importa"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Chiudi la finestra di dialogo"
@@ -632,45 +728,73 @@ msgstr "Visualizza un evento"
msgid "No categories selected"
msgstr "Nessuna categoria selezionata"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Seleziona una categoria"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "di"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "alle"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr "Generale"
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Fuso orario"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Controlla sempre i cambiamenti di fuso orario"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr "Aggiorna automaticamente il fuso orario"
-#: templates/settings.php:33
-msgid "Timeformat"
+#: templates/settings.php:52
+msgid "Time format"
msgstr "Formato orario"
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24h"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12h"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Primo giorno della settimana"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr "La settimana inizia il"
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr "Cache"
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr "Cancella gli eventi che si ripetono dalla cache"
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr "URL"
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr "Indirizzi di sincronizzazione calendari CalDAV"
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr "ulteriori informazioni"
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr "Indirizzo principale (Kontact e altri)"
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Indirizzo sincronizzazione calendario CalDAV:"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr "Collegamento(i) iCalendar sola lettura"
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/it/contacts.po b/l10n/it/contacts.po
index 0e1a62a6f93..d6611b80d04 100644
--- a/l10n/it/contacts.po
+++ b/l10n/it/contacts.po
@@ -11,637 +11,770 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Italian (http://www.transifex.net/projects/p/owncloud/language/it/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
-#: ajax/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Errore nel (dis)attivare la rubrica."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Si è verificato un errore nell'aggiunta del contatto."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Impossibile aggiungere una proprietà vuota."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Deve essere riempito almeno un indirizzo."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "ID non impostato."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "P"
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Impossibile aggiornare una rubrica senza nome."
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Errore durante l'aggiunta della proprietà del contatto."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Errore durante l'aggiornamento della rubrica."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "Nessun ID fornito"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Errore di impostazione del codice di controllo."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Nessuna categoria selezionata per l'eliminazione."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Nessuna rubrica trovata."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Nessun contatto trovato."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Si è verificato un errore nell'aggiunta del contatto."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "il nome dell'elemento non è impostato."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr "Impossibile elaborare il contatto: "
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Impossibile aggiungere una proprietà vuota."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Deve essere inserito almeno un indirizzo."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "P"
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr "Parametro IM mancante."
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr "IM sconosciuto:"
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informazioni sulla vCard non corrette. Ricarica la pagina."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "ID mancante"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "Errore in fase di elaborazione del file VCard per l'ID: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Impossibile aggiungere una rubrica senza nome."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "il codice di controllo non è impostato."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Errore durante l'aggiunta della rubrica."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "Le informazioni della vCard non sono corrette. Ricarica la pagina: "
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Errore durante l'attivazione della rubrica."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Qualcosa è andato storto. "
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "Nessun ID di contatto inviato."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Errore di lettura della foto del contatto."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Errore di salvataggio del file temporaneo."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "La foto caricata non è valida."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "ID non impostato."
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Informazioni sulla vCard non corrette. Ricarica la pagina."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Errore durante l'eliminazione della proprietà del contatto."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "Manca l'ID del contatto."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "ID di contatto mancante."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "Non è stato inviato alcun percorso a una foto."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Il file non esiste:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Errore di caricamento immagine."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Errore di recupero dell'oggetto contatto."
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Errore di recupero della proprietà FOTO."
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Errore di salvataggio del contatto."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Errore di ridimensionamento dell'immagine"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Errore di ritaglio dell'immagine"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Errore durante la creazione dell'immagine temporanea"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "il nome dell'elemento non è impostato."
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "il codice di controllo non è impostato."
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "Le informazioni della vCard non sono corrette. Ricarica la pagina: "
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "Qualcosa è andato storto. "
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Errore durante l'aggiornamento della proprietà del contatto."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "Impossibile aggiornare una rubrica senza nome."
+msgstr "Errore durante la ricerca dell'immagine: "
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Errore durante l'aggiornamento della rubrica."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "Errore di invio dei contatti in archivio."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Non ci sono errori, il file è stato inviato correttamente"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Il file inviato supera la direttiva upload_max_filesize nel php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Il file inviato supera la direttiva MAX_FILE_SIZE specificata nel modulo HTML"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "Il file è stato inviato solo parzialmente"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Nessun file è stato inviato"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "Manca una cartella temporanea"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Impossibile salvare l'immagine temporanea: "
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Impossibile caricare l'immagine temporanea: "
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Nessun file è stato inviato. Errore sconosciuto"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Contatti"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Siamo spiacenti, questa funzionalità non è stata ancora implementata"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "Non implementata"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Impossibile ottenere un indirizzo valido."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Errore"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Questa proprietà non può essere vuota."
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "Impossibile serializzare gli elementi."
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "'deleteProperty' invocata senza l'argomento di tipo. Segnalalo a bugs.owncloud.org"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Modifica il nome"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Nessun file selezionato per l'invio"
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "Il file che stai cercando di inviare supera la dimensione massima per l'invio dei file su questo server."
-#: js/contacts.js:1119
-msgid "Select photo"
-msgstr ""
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr "Errore durante il caricamento dell'immagine di profilo."
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
+msgstr "Seleziona il tipo"
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "Rilascia un file VCF per importare i contatti."
-
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
-msgstr ""
-
-#: js/contacts.js:1476
-msgid "OK"
-msgstr ""
-
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
-msgstr ""
-
-#: js/contacts.js:1634
-msgid "Upload too large"
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Wrong file type"
-msgstr ""
-
-#: js/contacts.js:1644
+#: js/contacts.js:1578
msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
-msgstr ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr "Alcuni contatti sono marcati per l'eliminazione, ma non sono stati ancora rimossi. Attendi fino al completamento dell'operazione."
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr "Vuoi unire queste rubriche?"
#: js/loader.js:49
msgid "Result: "
-msgstr ""
+msgstr "Risultato: "
#: js/loader.js:49
msgid " imported, "
-msgstr ""
+msgstr " importato, "
#: js/loader.js:49
msgid " failed."
-msgstr ""
+msgstr " non riuscito."
+
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
+msgstr "Il nome visualizzato non può essere vuoto."
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Rubrica non trovata."
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr "Rubrica non trovata:"
-#: lib/app.php:34
+#: lib/app.php:52
msgid "This is not your addressbook."
msgstr "Questa non è la tua rubrica."
-#: lib/app.php:45
+#: lib/app.php:71
msgid "Contact could not be found."
msgstr "Il contatto non può essere trovato."
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Indirizzo"
+#: lib/app.php:116
+msgid "Jabber"
+msgstr "Jabber"
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefono"
+#: lib/app.php:121
+msgid "AIM"
+msgstr "AIM"
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "Email"
+#: lib/app.php:126
+msgid "MSN"
+msgstr "MSN"
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organizzazione"
+#: lib/app.php:131
+msgid "Twitter"
+msgstr "Twitter"
+
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr "GoogleTalk"
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr "Facebook"
+
+#: lib/app.php:146
+msgid "XMPP"
+msgstr "XMPP"
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr "ICQ"
+
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr "Yahoo"
+
+#: lib/app.php:161
+msgid "Skype"
+msgstr "Skype"
+
+#: lib/app.php:166
+msgid "QQ"
+msgstr "QQ"
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr "GaduGadu"
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Lavoro"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Casa"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr "Altro"
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Cellulare"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Testo"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Voce"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Messaggio"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fax"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Video"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Cercapersone"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Compleanno"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr "Lavoro"
+
+#: lib/app.php:254
+msgid "Call"
+msgstr "Chiama"
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr "Client"
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr "Corriere"
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr "Festività"
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr "Idee"
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr "Viaggio"
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr "Anniversario"
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr "Riunione"
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr "Personale"
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr "Progetti"
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr "Domande"
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "Data di nascita di {name}"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Contatto"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Aggiungi contatto"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Importa"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr "Impostazioni"
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Rubriche"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Configura rubrica"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Chiudi"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Nuova rubrica"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr "Scorciatoie da tastiera"
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Importa da VCF"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr "Navigazione"
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "Link CardDav"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr "Contatto successivo in elenco"
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Scarica"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr "Contatto precedente in elenco"
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Modifica"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr "Espandi/Contrai la rubrica corrente"
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Elimina"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr "Rubrica successiva"
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Scarica contatto"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr "Rubrica precedente"
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Elimina contatto"
+#: templates/index.php:54
+msgid "Actions"
+msgstr "Azioni"
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr "Aggiorna l'elenco dei contatti"
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr "Aggiungi un nuovo contatto"
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr "Aggiungi una nuova rubrica"
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr "Elimina il contatto corrente"
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Rilascia una foto da inviare"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Elimina la foto corrente"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Modifica la foto corrente"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Invia una nuova foto"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Seleziona la foto da ownCloud"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr "Formato personalizzato, nome breve, nome completo, invertito o invertito con virgola"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Modifica dettagli del nome"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organizzazione"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Elimina"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Pseudonimo"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Inserisci pseudonimo"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Compleanno"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr "Sito web"
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr "http://www.somesite.com"
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr "Vai al sito web"
-#: templates/part.contact.php:38
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "gg-mm-aaaa"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Gruppi"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Separa i gruppi con virgole"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Modifica gruppi"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Preferito"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Specifica un indirizzo email valido"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Inserisci indirizzo email"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "Invia per email"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Elimina l'indirizzo email"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Inserisci il numero di telefono"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Elimina il numero di telefono"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr "Client di messaggistica istantanea"
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr "Elimina IM"
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Visualizza sulla mappa"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Modifica dettagli dell'indirizzo"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Aggiungi qui le note."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Aggiungi campo"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Immagine del profilo"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefono"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Nota"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "Email"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Elimina la foto corrente"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr "Messaggistica istantanea"
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Modifica la foto corrente"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Indirizzo"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Invia una nuova foto"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Nota"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Seleziona la foto da ownCloud"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Scarica contatto"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Elimina contatto"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "L'immagine temporanea è stata rimossa dalla cache."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Modifica indirizzo"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Tipo"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Casella postale"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr "Indirizzo"
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr "Via e numero"
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Esteso"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Via"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr "Numero appartamento ecc."
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Città"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Regione"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr "Ad es. stato o provincia"
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "CAP"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr "CAP"
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "Stato"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Modifica categorie"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Aggiungi"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Rubrica"
@@ -722,35 +855,6 @@ msgstr "Jr."
msgid "Sn."
msgstr "Sn."
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Nuova rubrica"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Modifica rubrica"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Nome visualizzato"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Attiva"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Salva"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Invia"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Annulla"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "Importa un file di contatti"
@@ -767,57 +871,86 @@ msgstr "crea una nuova rubrica"
msgid "Name of new addressbook"
msgstr "Nome della nuova rubrica"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importa"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "Importazione contatti"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "Seleziona la rubrica di destinazione:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "Seleziona da disco"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "Non hai contatti nella rubrica."
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Aggiungi contatto"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Configura rubriche"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr "Seleziona rubriche"
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr "Inserisci il nome"
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr "Inserisci una descrizione"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "Indirizzi di sincronizzazione CardDAV"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "altre informazioni"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "Indirizzo principale (Kontact e altri)"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr "Mostra collegamento CardDav"
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr "Mostra collegamento VCF in sola lettura"
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr "Condividi"
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Scarica"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Modifica"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Nuova rubrica"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr "Nome"
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr "Descrizione"
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Salva"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Annulla"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr "Altro..."
diff --git a/l10n/it/core.po b/l10n/it/core.po
index c2d63be3c97..95cfeb14f43 100644
--- a/l10n/it/core.po
+++ b/l10n/it/core.po
@@ -12,10 +12,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Italian (http://www.transifex.net/projects/p/owncloud/language/it/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -36,85 +36,85 @@ msgstr "Questa categoria esiste già: "
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Impostazioni"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Gennaio"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Febbraio"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Marzo"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "Aprile"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Maggio"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Giugno"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Luglio"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "Agosto"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "Settembre"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Ottobre"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "Novembre"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "Dicembre"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Annulla"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "No"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Sì"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Ok"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Nessuna categoria selezionata per l'eliminazione."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Errore"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Ripristino password di Owncloud"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "Ripristino password di ownCloud"
@@ -244,14 +244,10 @@ msgstr "Termina la configurazione"
msgid "web services under your control"
msgstr "servizi web nelle tue mani"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Esci"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Impostazioni"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Hai perso la password?"
diff --git a/l10n/it/files.po b/l10n/it/files.po
index 8db41dc6477..664d569fd47 100644
--- a/l10n/it/files.po
+++ b/l10n/it/files.po
@@ -11,43 +11,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Italian (http://www.transifex.net/projects/p/owncloud/language/it/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
-#: ajax/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Non ci sono errori, file caricato con successo"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Il file caricato supera il valore upload_max_filesize in php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Il file è stato parzialmente caricato"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Nessun file è stato caricato"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Cartella temporanea mancante"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Scrittura su disco non riuscita"
@@ -55,57 +55,85 @@ msgstr "Scrittura su disco non riuscita"
msgid "Files"
msgstr "File"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Elimina"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "esiste già"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "sostituisci"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "annulla"
-#: js/files.js:170
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "sostituito"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "con"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "annulla"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "eliminati"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "creazione file ZIP, potrebbe richiedere del tempo."
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Impossibile inviare il file poiché è una cartella o ha dimensione 0 byte"
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "Errore di invio"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "In corso"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "Invio annullato"
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "Nome non valido"
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Dimensione"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Modificato"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "cartella"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "cartelle"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "file"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "file"
#: templates/admin.php:5
msgid "File handling"
@@ -175,10 +203,6 @@ msgstr "Condividi"
msgid "Download"
msgstr "Scarica"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Elimina"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Il file caricato è troppo grande"
diff --git a/l10n/it/files_encryption.po b/l10n/it/files_encryption.po
new file mode 100644
index 00000000000..573a32a14a5
--- /dev/null
+++ b/l10n/it/files_encryption.po
@@ -0,0 +1,35 @@
+# 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>, 2012.
+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"
+"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"
+
+#: templates/settings.php:3
+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.php:5
+msgid "None"
+msgstr "Nessuna"
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr "Abilita cifratura"
diff --git a/l10n/it/files_external.po b/l10n/it/files_external.po
new file mode 100644
index 00000000000..801511ce3b5
--- /dev/null
+++ b/l10n/it/files_external.po
@@ -0,0 +1,84 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Innocenzo Ventre <el.diabl09@gmail.com>, 2012.
+# Vincenzo Reale <vinx.reale@gmail.com>, 2012.
+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 14:42+0000\n"
+"Last-Translator: Innocenzo Ventre <el.diabl09@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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr "Archiviazione esterna"
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr "Punto di mount"
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr "Motore"
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr "Configurazione"
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr "Opzioni"
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr "Applicabile"
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr "Aggiungi punto di mount"
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr "Nessuna impostazione"
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr "Tutti gli utenti"
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr "Gruppi"
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr "Utenti"
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr "Elimina"
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr "Certificato principale per SSL"
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr "Importa certificato principale"
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr "Abilita la memoria esterna dell'utente"
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr "Consente agli utenti di montare la propria memoria esterna"
diff --git a/l10n/it/files_sharing.po b/l10n/it/files_sharing.po
new file mode 100644
index 00000000000..94313868adf
--- /dev/null
+++ b/l10n/it/files_sharing.po
@@ -0,0 +1,35 @@
+# 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>, 2012.
+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-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr "Dimensione"
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr "Modificato"
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr "Elimina tutto"
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr "Eliminazione"
diff --git a/l10n/it/files_versions.po b/l10n/it/files_versions.po
new file mode 100644
index 00000000000..54f176fb2e3
--- /dev/null
+++ b/l10n/it/files_versions.po
@@ -0,0 +1,27 @@
+# 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>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-15 02:03+0200\n"
+"PO-Revision-Date: 2012-08-14 12:12+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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr "Scadenza di tutte le versioni"
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr "Abilita controllo di versione"
diff --git a/l10n/it/gallery.po b/l10n/it/gallery.po
index 794458ec1f1..d60292cea15 100644
--- a/l10n/it/gallery.po
+++ b/l10n/it/gallery.po
@@ -10,71 +10,35 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Italian (http://www.transifex.net/projects/p/owncloud/language/it/)\n"
+"POT-Creation-Date: 2012-07-26 02:01+0200\n"
+"PO-Revision-Date: 2012-07-25 20:36+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"
-#: appinfo/app.php:37
+#: appinfo/app.php:39
msgid "Pictures"
msgstr "Immagini"
-#: js/album_cover.js:44
+#: js/pictures.js:12
msgid "Share gallery"
-msgstr ""
+msgstr "Condividi la galleria"
-#: js/album_cover.js:64 js/album_cover.js:100 js/album_cover.js:133
+#: js/pictures.js:32
msgid "Error: "
-msgstr ""
+msgstr "Errore: "
-#: js/album_cover.js:64 js/album_cover.js:100
+#: js/pictures.js:32
msgid "Internal error"
-msgstr ""
-
-#: js/album_cover.js:114
-msgid "Scanning root"
-msgstr ""
-
-#: js/album_cover.js:115
-msgid "Default order"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Ascending"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Descending"
-msgstr ""
-
-#: js/album_cover.js:117 templates/index.php:19
-msgid "Settings"
-msgstr "Impostazioni"
-
-#: js/album_cover.js:122
-msgid "Scanning root cannot be empty"
-msgstr ""
-
-#: js/album_cover.js:122 js/album_cover.js:133
-msgid "Error"
-msgstr ""
-
-#: templates/index.php:16
-msgid "Rescan"
-msgstr "Nuova scansione"
-
-#: templates/index.php:17
-msgid "Stop"
-msgstr "Ferma"
+msgstr "Errore interno"
-#: templates/index.php:18
-msgid "Share"
-msgstr "Condividi"
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr "Presentazione"
#: templates/view_album.php:19
msgid "Back"
diff --git a/l10n/it/lib.po b/l10n/it/lib.po
new file mode 100644
index 00000000000..e34db2db96e
--- /dev/null
+++ b/l10n/it/lib.po
@@ -0,0 +1,113 @@
+# 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>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-07-31 22:53+0200\n"
+"PO-Revision-Date: 2012-07-30 10:25+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"
+
+#: app.php:287
+msgid "Help"
+msgstr "Aiuto"
+
+#: app.php:294
+msgid "Personal"
+msgstr "Personale"
+
+#: app.php:299
+msgid "Settings"
+msgstr "Impostazioni"
+
+#: app.php:304
+msgid "Users"
+msgstr "Utenti"
+
+#: app.php:311
+msgid "Apps"
+msgstr "Applicazioni"
+
+#: app.php:313
+msgid "Admin"
+msgstr "Admin"
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr "Lo scaricamento in formato ZIP è stato disabilitato."
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr "I file devono essere scaricati uno alla volta."
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr "Torna ai file"
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr "I file selezionati sono troppo grandi per generare un file zip."
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr "L'applicazione non è abilitata"
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr "Errore di autenticazione"
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr "Token scaduto. Ricarica la pagina."
+
+#: template.php:86
+msgid "seconds ago"
+msgstr "secondi fa"
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr "1 minuto fa"
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr "%d minuti fa"
+
+#: template.php:91
+msgid "today"
+msgstr "oggi"
+
+#: template.php:92
+msgid "yesterday"
+msgstr "ieri"
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr "%d giorni fa"
+
+#: template.php:94
+msgid "last month"
+msgstr "il mese scorso"
+
+#: template.php:95
+msgid "months ago"
+msgstr "mesi fa"
+
+#: template.php:96
+msgid "last year"
+msgstr "l'anno scorso"
+
+#: template.php:97
+msgid "years ago"
+msgstr "anni fa"
diff --git a/l10n/it/settings.po b/l10n/it/settings.po
index 56936ed81f1..b14c9fcd474 100644
--- a/l10n/it/settings.po
+++ b/l10n/it/settings.po
@@ -14,77 +14,109 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Italian (http://www.transifex.net/projects/p/owncloud/language/it/)\n"
+"POT-Creation-Date: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-22 20:01+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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "Impossibile caricare l'elenco dall'App Store"
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "Email salvata"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Email non valida"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID modificato"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Richiesta non valida"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Errore di autenticazione"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Lingua modificata"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "Errore"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "Disabilita"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Abilita"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Salvataggio in corso..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "Italiano"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "Avviso di sicurezza"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "Cron"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr "esegui un'attività con ogni pagina caricata"
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr "cron.php è registrato a un servizio webcron"
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr "usa il servizio cron di sistema"
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Registro"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Altro"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Aggiungi la tua applicazione"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Seleziona un'applicazione"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Vedere la pagina dell'applicazione su apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-rilasciato"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "da"
@@ -162,7 +194,7 @@ msgstr "Il tuo indirizzo email"
#: templates/personal.php:32
msgid "Fill in an email address to enable password recovery"
-msgstr "Inserici il tuo indirizzo email per abilitare il recupero della password"
+msgstr "Inserisci il tuo indirizzo email per abilitare il recupero della password"
#: templates/personal.php:38 templates/personal.php:39
msgid "Language"
@@ -176,34 +208,38 @@ msgstr "Migliora la traduzione"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "usa questo indirizzo per connetterti al tuo ownCloud dal gestore file"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Nome"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Password"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Gruppi"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Crea"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Quota predefinita"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Altro"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr "Gruppo di amministrazione"
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Quote"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Elimina"
diff --git a/l10n/it/tasks.po b/l10n/it/tasks.po
new file mode 100644
index 00000000000..6e5f07a0873
--- /dev/null
+++ b/l10n/it/tasks.po
@@ -0,0 +1,107 @@
+# 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>, 2012.
+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:00+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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr "Ora/Data non valida"
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr "Attività"
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr "Nessuna categoria"
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr "Non specificata"
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr "1=massima"
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr "5=media"
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr "9=minima"
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr "Riepilogo vuoto"
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr "Percentuale di completamento non valida"
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr "Priorità non valida"
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr "Aggiungi attività"
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr "Ordina per scadenza"
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr "Ordina per elenco"
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr "Ordina per completamento"
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr "Ordina per posizione"
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr "Ordina per priorità"
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr "Ordina per etichetta"
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr "Caricamento attività in corso..."
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr "Importante"
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr "Più"
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr "Meno"
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr "Elimina"
diff --git a/l10n/it/user_ldap.po b/l10n/it/user_ldap.po
new file mode 100644
index 00000000000..e99e56fc15c
--- /dev/null
+++ b/l10n/it/user_ldap.po
@@ -0,0 +1,166 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Innocenzo Ventre <el.diabl09@gmail.com>, 2012.
+# Vincenzo Reale <vinx.reale@gmail.com>, 2012.
+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 20:31+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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr "Host"
+
+#: templates/settings.php:8
+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:9
+msgid "Base DN"
+msgstr "DN base"
+
+#: templates/settings.php:9
+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:10
+msgid "User DN"
+msgstr "DN utente"
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr "Password"
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr "Per l'accesso anonimo, lasciare vuoti i campi DN e Password"
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr "Filtro per l'accesso utente"
+
+#: templates/settings.php:12
+#, 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:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr "utilizza il segnaposto %%uid, ad esempio \"uid=%%uid\""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr "Filtro per l'elenco utenti"
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr "Specifica quale filtro utilizzare durante il recupero degli utenti."
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr "senza nessun segnaposto, per esempio \"objectClass=person\"."
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr "Filtro per il gruppo"
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr "Specifica quale filtro utilizzare durante il recupero dei gruppi."
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr "senza nessun segnaposto, per esempio \"objectClass=posixGroup\"."
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr "Porta"
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr "Struttura base dell'utente"
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr "Struttura base del gruppo"
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr "Associazione gruppo-utente "
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr "Usa TLS"
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr "Non utilizzare per le connessioni SSL, fallirà."
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr "Case insensitve LDAP server (Windows)"
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr "Disattiva il controllo del certificato SSL."
+
+#: templates/settings.php:23
+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:23
+msgid "Not recommended, use for testing only."
+msgstr "Non consigliato, utilizzare solo per test."
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr "Campo per la visualizzazione del nome utente"
+
+#: templates/settings.php:24
+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:25
+msgid "Group Display Name Field"
+msgstr "Campo per la visualizzazione del nome del gruppo"
+
+#: templates/settings.php:25
+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:27
+msgid "in bytes"
+msgstr "in byte"
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr "in secondi. Il cambio svuota la cache."
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr "Aiuto"
diff --git a/l10n/it/user_migrate.po b/l10n/it/user_migrate.po
new file mode 100644
index 00000000000..9c918e027c5
--- /dev/null
+++ b/l10n/it/user_migrate.po
@@ -0,0 +1,52 @@
+# 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>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-15 02:03+0200\n"
+"PO-Revision-Date: 2012-08-14 11:55+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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr "Esporta"
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr "Si è verificato un errore durante la creazione del file di esportazione"
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr "Si è verificato un errore"
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr "Esporta il tuo account utente"
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr "Questa operazione creerà un file compresso che contiene il tuo account ownCloud."
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr "Importa account utente"
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr "Zip account utente"
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr "Importa"
diff --git a/l10n/it/user_openid.po b/l10n/it/user_openid.po
new file mode 100644
index 00000000000..b8036426bc9
--- /dev/null
+++ b/l10n/it/user_openid.po
@@ -0,0 +1,55 @@
+# 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>, 2012.
+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 20:39+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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr "Questo è un server OpenID. Per ulteriori informazioni, vedi "
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr "Identità: <b>"
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr "Dominio: <b>"
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr "Utente: <b>"
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr "Accesso"
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr "Errore: <b>nessun utente selezionato"
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr "puoi autenticarti ad altri siti con questo indirizzo"
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr "Fornitore OpenID autorizzato"
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr "Il tuo indirizzo su Wordpress, Identi.ca, &hellip;"
diff --git a/l10n/ja_JP/admin_dependencies_chk.po b/l10n/ja_JP/admin_dependencies_chk.po
new file mode 100644
index 00000000000..be8f217eba1
--- /dev/null
+++ b/l10n/ja_JP/admin_dependencies_chk.po
@@ -0,0 +1,74 @@
+# 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@is.nagoya-u.ac.jp>, 2012.
+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 03:08+0000\n"
+"Last-Translator: Daisuke Deguchi <ddeguchi@is.nagoya-u.ac.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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr "php-jsonモジュールã¯ã‚¢ãƒ—リケーション間ã®å†…部通信ã«å¿…è¦ã§ã™"
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr "php-curlモジュールã¯ãƒ–ックマーク追加時ã®ãƒšãƒ¼ã‚¸ã‚¿ã‚¤ãƒˆãƒ«å–å¾—ã«å¿…è¦ã§ã™"
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr "php-gdモジュールã¯ã‚µãƒ ãƒã‚¤ãƒ«ç”»åƒã®ç”Ÿæˆã«å¿…è¦ã§ã™"
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr "php-ldapモジュールã¯LDAPサーãƒã¸ã®æŽ¥ç¶šã«å¿…è¦ã§ã™"
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr "php-zipモジュールã¯è¤‡æ•°ãƒ•ã‚¡ã‚¤ãƒ«ã®åŒæ™‚ダウンロードã«å¿…è¦ã§ã™"
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr "php-mb_multibyteモジュールã¯ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã‚’æ­£ã—ã扱ã†ãŸã‚ã«å¿…è¦ã§ã™"
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr "php-ctypeモジュールã¯ãƒ‡ãƒ¼ã‚¿ã®ãƒãƒªãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ã«å¿…è¦ã§ã™"
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr "php-xmlモジュールã¯WebDAVã§ã®ãƒ•ã‚¡ã‚¤ãƒ«å…±æœ‰ã«å¿…è¦ã§ã™"
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr "php.iniã®allow_url_fopenã¯OCSサーãƒã‹ã‚‰çŸ¥è­˜ãƒ™ãƒ¼ã‚¹ã‚’å–å¾—ã™ã‚‹ãŸã‚ã«1ã«è¨­å®šã—ãªãã¦ã¯ãªã‚Šã¾ã›ã‚“"
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr "php-pdoモジュールã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ownCloudã®ãƒ‡ãƒ¼ã‚¿ã‚’æ ¼ç´ã™ã‚‹ãŸã‚ã«å¿…è¦ã§ã™"
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr "ä¾å­˜é–¢ä¿‚ã®çŠ¶æ³"
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr "利用先 :"
diff --git a/l10n/ja_JP/admin_migrate.po b/l10n/ja_JP/admin_migrate.po
new file mode 100644
index 00000000000..4411d9e77cd
--- /dev/null
+++ b/l10n/ja_JP/admin_migrate.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:
+# Daisuke Deguchi <ddeguchi@is.nagoya-u.ac.jp>, 2012.
+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 05:29+0000\n"
+"Last-Translator: Daisuke Deguchi <ddeguchi@is.nagoya-u.ac.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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr "ownCloudをエクスãƒãƒ¼ãƒˆ"
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr "ã“ã®ownCloudã®ãƒ‡ãƒ¼ã‚¿ã‚’å«ã‚€åœ§ç¸®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã—ã¾ã™ã€‚\nエクスãƒãƒ¼ãƒˆã®ç¨®é¡žã‚’é¸æŠžã—ã¦ãã ã•ã„:"
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr "エクスãƒãƒ¼ãƒˆ"
diff --git a/l10n/ja_JP/bookmarks.po b/l10n/ja_JP/bookmarks.po
new file mode 100644
index 00000000000..a708697103d
--- /dev/null
+++ b/l10n/ja_JP/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/ja_JP/calendar.po b/l10n/ja_JP/calendar.po
index 6062061a4fd..605bf02d2ef 100644
--- a/l10n/ja_JP/calendar.po
+++ b/l10n/ja_JP/calendar.po
@@ -4,25 +4,34 @@
#
# Translators:
# Daisuke Deguchi <ddeguchi@is.nagoya-u.ac.jp>, 2012.
+# <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-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Japanese (Japan) (http://www.transifex.net/projects/p/owncloud/language/ja_JP/)\n"
+"POT-Creation-Date: 2012-08-22 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 02:29+0000\n"
+"Last-Translator: Daisuke Deguchi <ddeguchi@is.nagoya-u.ac.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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr "ã™ã¹ã¦ã®ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã¯å®Œå…¨ã«ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã•ã‚Œã¦ã„ã¾ã›ã‚“"
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr "ã™ã¹ã¦å®Œå…¨ã«ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã•ã‚Œã¦ã„ã‚‹ã¨æ€ã‚ã‚Œã¾ã™"
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "カレンダーãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "イベントãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
@@ -30,300 +39,394 @@ msgstr "イベントãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
msgid "Wrong calendar"
msgstr "誤ã£ãŸã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã§ã™"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr "イベントã®ç„¡ã„ã‚‚ã—ãã¯ã™ã¹ã¦ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’å«ã‚€ãƒ•ã‚¡ã‚¤ãƒ«ã¯æ—¢ã«ã‚ãªãŸã®ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã«ä¿å­˜ã•ã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr "イベントã¯æ–°ã—ã„カレンダーã«ä¿å­˜ã•ã‚Œã¾ã—ãŸ"
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr "インãƒãƒ¼ãƒˆã«å¤±æ•—"
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr "イベントã¯ã‚ãªãŸã®ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã«ä¿å­˜ã•ã‚Œã¾ã—ãŸ"
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "æ–°ã—ã„タイムゾーン:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "タイムゾーンãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "無効ãªãƒªã‚¯ã‚¨ã‚¹ãƒˆã§ã™"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:37 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "カレンダー"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "dddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "M月d日 (dddd)"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "M月d日 (dddd)"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "yyyy年M月"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
+msgstr "yyyy年M月d日{ '~' [yyyy年][M月]d日}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "yyyy年M月d日 (dddd)"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "誕生日"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "ビジãƒã‚¹"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "電話をã‹ã‘ã‚‹"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "顧客"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "é‹é€ä¼šç¤¾"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "休日"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "アイデア"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "旅行"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "記念祭"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "ミーティング"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "ãã®ä»–"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "個人"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "プロジェクト"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "質å•äº‹é …"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "週ã®å§‹ã¾ã‚Š"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr "ã«ã‚ˆã‚‹"
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
-msgstr ""
+msgstr "ç„¡å"
+
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "æ–°ã—ãカレンダーを作æˆ"
-#: lib/object.php:330
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "ç¹°ã‚Šè¿”ã•ãªã„"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "毎日"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "毎週"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "毎平日"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "2週間ã”ã¨"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "毎月"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "毎年"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "ç„¡ã—"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "回数ã§æŒ‡å®š"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "日付ã§æŒ‡å®š"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "æ—¥ã«ã¡ã§æŒ‡å®š"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "曜日ã§æŒ‡å®š"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
-msgstr "月曜"
+msgstr "月"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
-msgstr "ç«æ›œ"
+msgstr "ç«"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
-msgstr "水曜"
+msgstr "æ°´"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
-msgstr "木曜"
+msgstr "木"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
-msgstr "金曜"
+msgstr "金"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
-msgstr "土曜"
+msgstr "土"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
-msgstr "日曜"
+msgstr "æ—¥"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "予定ã®ã‚る週を指定"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "1週目"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "2週目"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "3週目"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "4週目"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "5週目"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "最終週"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
-msgstr "1月"
+msgstr "1月"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
-msgstr "2月"
+msgstr "2月"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
-msgstr "3月"
+msgstr "3月"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
-msgstr "4月"
+msgstr "4月"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
-msgstr "5月"
+msgstr "5月"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
-msgstr "6月"
+msgstr "6月"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
-msgstr "7月"
+msgstr "7月"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
-msgstr "8月"
+msgstr "8月"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
-msgstr "9月"
+msgstr "9月"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
-msgstr "1ï¼æœˆ"
+msgstr "10月"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
-msgstr "11月"
+msgstr "11月"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
-msgstr "12月"
+msgstr "12月"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "日付ã§æŒ‡å®š"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "日番å·ã§æŒ‡å®š"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "週番å·ã§æŒ‡å®š"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "月ã¨æ—¥ã§æŒ‡å®š"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "日付"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "カレンダー"
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr "æ—¥"
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr "月"
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr "ç«"
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr "æ°´"
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr "木"
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr "金"
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr "土"
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr "1月"
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr "2月"
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr "3月"
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr "4月"
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr "5月"
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr "6月"
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr "7月"
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr "8月"
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr "9月"
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr "10月"
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr "11月"
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr "12月"
+
#: templates/calendar.php:11
msgid "All day"
msgstr "終日"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "æ–°ã—ãカレンダーを作æˆ"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "é …ç›®ãŒã‚ã‚Šã¾ã›ã‚“"
@@ -357,40 +460,32 @@ msgstr "イベント終了時間ãŒé–‹å§‹æ™‚間より先ã§ã™"
msgid "There was a database fail"
msgstr "データベースã®ã‚¨ãƒ©ãƒ¼ãŒã‚ã‚Šã¾ã—ãŸ"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "週"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "月"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
-msgstr "リスト"
+msgstr "予定リスト"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "今日"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "カレンダー"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "ファイルã®æ§‹æ–‡è§£æžã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "アクティブãªã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã‚’é¸æŠž"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr "設定"
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "ã‚ãªãŸã®ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDavã¸ã®ãƒªãƒ³ã‚¯"
@@ -402,26 +497,26 @@ msgstr "共有カレンダー"
msgid "No shared calendars"
msgstr "共有カレンダーã¯ã‚ã‚Šã¾ã›ã‚“"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "カレンダーを共有ã™ã‚‹"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "ダウンロード"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "編集"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "削除"
#: templates/part.choosecalendar.rowfields.shared.php:4
msgid "shared with you by"
-msgstr ""
+msgstr "共有者"
#: templates/part.editcalendar.php:9
msgid "New calendar"
@@ -500,23 +595,23 @@ msgstr "カテゴリをコンマã§åŒºåˆ‡ã‚‹"
msgid "Edit categories"
msgstr "カテゴリを編集"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "終日イベント"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "開始"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "終了"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "詳細設定"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "場所"
@@ -524,7 +619,7 @@ msgstr "場所"
msgid "Location of the Event"
msgstr "イベントã®å ´æ‰€"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "メモ"
@@ -532,84 +627,86 @@ msgstr "メモ"
msgid "Description of the Event"
msgstr "イベントã®èª¬æ˜Ž"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "ç¹°ã‚Šè¿”ã—"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "詳細設定"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "曜日を指定"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "日付を指定"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "対象ã®å¹´ã‚’é¸æŠžã™ã‚‹ã€‚"
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "対象ã®æœˆã‚’é¸æŠžã™ã‚‹ã€‚"
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "月を指定ã™ã‚‹"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "週を指定ã™ã‚‹"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "対象ã®é€±ã‚’é¸æŠžã™ã‚‹ã€‚"
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "é–“éš”"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "ç¹°ã‚Šè¿”ã™æœŸé–“"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "回繰り返ã™"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "æ–°è¦ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã®ä½œæˆ"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "カレンダーファイルをインãƒãƒ¼ãƒˆ"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
msgstr "カレンダーをé¸æŠžã—ã¦ãã ã•ã„"
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "æ–°è¦ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã®ä½œæˆ"
-
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "æ–°è¦ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã®å称"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "インãƒãƒ¼ãƒˆ"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr "利用å¯èƒ½ãªåå‰ã‚’指定ã—ã¦ãã ã•ã„ï¼"
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "カレンダーをå–ã‚Šè¾¼ã¿ä¸­"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr "ã“ã®ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼åã¯ã™ã§ã«ä½¿ã‚ã‚Œã¦ã„ã¾ã™ã€‚ã‚‚ã—続行ã™ã‚‹å ´åˆã¯ã€ã“れらã®ã‚«ãƒ¬ãƒ³ãƒ€ãƒ¼ã¯ãƒžãƒ¼ã‚¸ã•ã‚Œã¾ã™ã€‚"
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "カレンダーã®å–ã‚Šè¾¼ã¿ã«æˆåŠŸã—ã¾ã—ãŸ"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "インãƒãƒ¼ãƒˆ"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "ダイアログを閉ã˜ã‚‹"
@@ -625,45 +722,73 @@ msgstr "イベントを閲覧"
msgid "No categories selected"
msgstr "カテゴリãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "カテゴリーをé¸æŠžã—ã¦ãã ã•ã„"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "of"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "at"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr "一般"
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "タイムゾーン"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "タイムゾーンã®å¤‰æ›´ã‚’常ã«ç¢ºèª"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr "自動的ã«ã‚¿ã‚¤ãƒ ã‚¾ãƒ¼ãƒ³ã‚’æ›´æ–°"
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "時刻ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆ"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr "時刻ã®è¡¨ç¤ºå½¢å¼"
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24h"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12h"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "週ã®å§‹ã¾ã‚Š"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr "1週間ã®åˆã‚ã®æ›œæ—¥"
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr "キャッシュ"
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr "ç¹°ã‚Šè¿”ã—イベントã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’クリア"
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr "URL"
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr "CalDAVカレンダーã®åŒæœŸç”¨ã‚¢ãƒ‰ãƒ¬ã‚¹"
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr "ã•ã‚‰ã«"
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr "プライマリアドレス(コンタクト等)"
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "CalDAVカレンダーã®åŒæœŸã‚¢ãƒ‰ãƒ¬ã‚¹:"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr "読ã¿å–り専用ã®iCalendarリンク"
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/ja_JP/contacts.po b/l10n/ja_JP/contacts.po
index f48c9cc75bc..bda5ee92f23 100644
--- a/l10n/ja_JP/contacts.po
+++ b/l10n/ja_JP/contacts.po
@@ -4,648 +4,782 @@
#
# Translators:
# Daisuke Deguchi <ddeguchi@is.nagoya-u.ac.jp>, 2012.
+# <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-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Japanese (Japan) (http://www.transifex.net/projects/p/owncloud/language/ja_JP/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
-#: ajax/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
-msgstr "アドレスブックã®æœ‰åŠ¹/無効化ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+msgstr "アドレス帳ã®æœ‰åŠ¹ï¼ç„¡åŠ¹åŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "連絡先ã®è¿½åŠ ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "é …ç›®ã®æ–°è¦è¿½åŠ ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "ä½æ‰€ã®é …ç›®ã®ã†ã¡ï¼‘ã¤ã¯å…¥åŠ›ã—ã¦ä¸‹ã•ã„。"
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "idãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr ""
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "空白ã®åå‰ã§ã‚¢ãƒ‰ãƒ¬ã‚¹å¸³ã‚’æ›´æ–°ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "連絡先ã®è¿½åŠ ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "アドレス帳ã®æ›´æ–°ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "IDãŒæä¾›ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "ãƒã‚§ãƒƒã‚¯ã‚µãƒ ã®è¨­å®šã‚¨ãƒ©ãƒ¼ã€‚"
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "削除ã™ã‚‹ã‚«ãƒ†ã‚´ãƒªãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
-msgstr "アドレスブックãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
+msgstr "アドレス帳ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "連絡先ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "連絡先ã®è¿½åŠ ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "è¦ç´ åãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr "連絡先を解æžã§ãã¾ã›ã‚“ã§ã—ãŸ:"
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "é …ç›®ã®æ–°è¦è¿½åŠ ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "ä½æ‰€ã®é …ç›®ã®ã†ã¡ï¼‘ã¤ã¯å…¥åŠ›ã—ã¦ä¸‹ã•ã„。"
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "é‡è¤‡ã™ã‚‹å±žæ€§ã‚’追加: "
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr "IMã®ãƒ‘ラメータãŒä¸è¶³ã—ã¦ã„ã¾ã™ã€‚"
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr "ä¸æ˜ŽãªIM:"
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "vCardã®æƒ…å ±ã«èª¤ã‚ŠãŒã‚ã‚Šã¾ã™ã€‚ページをリロードã—ã¦ä¸‹ã•ã„。"
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
-msgstr ""
+msgstr "IDãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "VCardã‹ã‚‰IDã®æŠ½å‡ºã‚¨ãƒ©ãƒ¼: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "åå‰ã‚’空白ã«ã—ãŸã¾ã¾ã§ã‚¢ãƒ‰ãƒ¬ã‚¹ãƒ–ックを追加ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "ãƒã‚§ãƒƒã‚¯ã‚µãƒ ãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "アドレスブックã®è¿½åŠ ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "vCardã®æƒ…å ±ãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“。ページをå†èª­ã¿è¾¼ã¿ã—ã¦ãã ã•ã„: "
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "アドレスブックã®æœ‰åŠ¹åŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "何ã‹ãŒFUBARã¸ç§»å‹•ã—ã¾ã—ãŸã€‚"
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "連絡先IDã¯ç™»éŒ²ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "連絡先写真ã®èª­ã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼ã€‚"
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "一時ファイルã®ä¿å­˜ã‚¨ãƒ©ãƒ¼ã€‚"
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "写真ã®èª­ã¿è¾¼ã¿ã¯ç„¡åŠ¹ã§ã™ã€‚"
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "idãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "vCardã®æƒ…å ±ã«èª¤ã‚ŠãŒã‚ã‚Šã¾ã™ã€‚ページをリロードã—ã¦ä¸‹ã•ã„。"
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "連絡先ã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "コンタクトIDãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "コンタクトIDãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "写真ã®ãƒ‘スãŒç™»éŒ²ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "ファイルãŒå­˜åœ¨ã—ã¾ã›ã‚“:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "ç”»åƒã®èª­ã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼ã€‚"
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "コンタクトオブジェクトã®å–得エラー。"
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "写真属性ã®å–得エラー。"
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "コンタクトã®ä¿å­˜ã‚¨ãƒ©ãƒ¼ã€‚"
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "ç”»åƒã®ãƒªã‚µã‚¤ã‚ºã‚¨ãƒ©ãƒ¼"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "ç”»åƒã®åˆ‡ã‚ŠæŠœãエラー"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "一時画åƒã®ç”Ÿæˆã‚¨ãƒ©ãƒ¼"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "è¦ç´ åãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "ãƒã‚§ãƒƒã‚¯ã‚µãƒ ãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "vCardã®æƒ…å ±ãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“。ページをå†èª­ã¿è¾¼ã¿ã—ã¦ãã ã•ã„: "
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr ""
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "連絡先ã®æ›´æ–°ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "空白ã®åå‰ã§ã‚¢ãƒ‰ãƒ¬ã‚¹ãƒ–ックを更新ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+msgstr "ç”»åƒæ¤œç´¢ã‚¨ãƒ©ãƒ¼: "
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "アドレスブックã®æ›´æ–°ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "ストレージã¸ã®é€£çµ¡å…ˆã®ã‚¢ãƒƒãƒ—ロードエラー。"
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "エラーã¯ã‚ã‚Šã¾ã›ã‚“。ファイルã®ã‚¢ãƒƒãƒ—ロードã¯æˆåŠŸã—ã¾ã—ãŸ"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "アップロードファイル㯠php.ini 内㮠upload_max_filesize ã®åˆ¶é™ã‚’超ãˆã¦ã„ã¾ã™"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "アップロードファイルã¯HTMLフォームã§æŒ‡å®šã•ã‚ŒãŸ MAX_FILE_SIZE ã®åˆ¶é™ã‚’超ãˆã¦ã„ã¾ã™"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "アップロードファイルã¯ä¸€éƒ¨åˆ†ã ã‘アップロードã•ã‚Œã¾ã—ãŸ"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "ファイルã¯ã‚¢ãƒƒãƒ—ロードã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "一時ä¿å­˜ãƒ•ã‚©ãƒ«ãƒ€ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "一時的ãªç”»åƒã®ä¿å­˜ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ: "
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "一時的ãªç”»åƒã®èª­ã¿è¾¼ã¿ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ: "
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "ファイルã¯ä½•ã‚‚アップロードã•ã‚Œã¦ã„ã¾ã›ã‚“。ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "連絡先"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "申ã—訳ã‚ã‚Šã¾ã›ã‚“。ã“ã®æ©Ÿèƒ½ã¯ã¾ã å®Ÿè£…ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "未実装"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "有効ãªã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "エラー"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "ã“ã®å±žæ€§ã¯ç©ºã«ã§ãã¾ã›ã‚“。"
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "è¦ç´ ã‚’シリアライズã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "'deleteProperty' ã¯åž‹ã®å¼•æ•°ç„¡ã—ã§å‘¼ã³å‡ºã•ã‚Œã¾ã—ãŸã€‚bugs.owncloud.org ã¸å ±å‘Šã—ã¦ãã ã•ã„。"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "åå‰ã‚’編集"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "アップロードã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "アップロードã—よã†ã¨ã—ã¦ã„るファイルã¯ã€ã“ã®ã‚µãƒ¼ãƒã®æœ€å¤§ãƒ•ã‚¡ã‚¤ãƒ«ã‚¢ãƒƒãƒ—ロードサイズを超ãˆã¦ã„ã¾ã™ã€‚"
-#: js/contacts.js:1119
-msgid "Select photo"
-msgstr ""
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr "プロファイルã®ç”»åƒã®èª­ã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼"
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
+msgstr "タイプをé¸æŠž"
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "連絡先をインãƒãƒ¼ãƒˆã™ã‚‹VCFファイルをドロップã—ã¦ãã ã•ã„。"
-
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
-msgstr ""
-
-#: js/contacts.js:1476
-msgid "OK"
-msgstr ""
-
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
-msgstr ""
-
-#: js/contacts.js:1634
-msgid "Upload too large"
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Wrong file type"
-msgstr ""
-
-#: js/contacts.js:1644
+#: js/contacts.js:1578
msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
-msgstr ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr "ã„ãã¤ã‹ã®ã‚³ãƒ³ã‚¿ã‚¯ãƒˆãŒå‰Šé™¤ã¨ãƒžãƒ¼ã‚¯ã•ã‚Œã¦ã„ã¾ã™ãŒã€ã¾ã å‰Šé™¤ã•ã‚Œã¦ã„ã¾ã›ã‚“。削除ã™ã‚‹ã¾ã§ãŠå¾…ã¡ãã ã•ã„。"
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr "ã“れらã®ã‚¢ãƒ‰ãƒ¬ã‚¹å¸³ã‚’マージã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ"
#: js/loader.js:49
msgid "Result: "
-msgstr ""
+msgstr "çµæžœ: "
#: js/loader.js:49
msgid " imported, "
-msgstr ""
+msgstr " をインãƒãƒ¼ãƒˆã€ "
#: js/loader.js:49
msgid " failed."
-msgstr ""
+msgstr " ã¯å¤±æ•—ã—ã¾ã—ãŸã€‚"
+
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
+msgstr "表示åã¯ç©ºã«ã§ãã¾ã›ã‚“。"
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "アドレスブックãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr "アドレス帳ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“:"
-#: lib/app.php:34
+#: lib/app.php:52
msgid "This is not your addressbook."
msgstr "ã“ã‚Œã¯ã‚ãªãŸã®é›»è©±å¸³ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: lib/app.php:45
+#: lib/app.php:71
msgid "Contact could not be found."
msgstr "連絡先を見ã¤ã‘る事ãŒã§ãã¾ã›ã‚“。"
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "ä½æ‰€"
+#: lib/app.php:116
+msgid "Jabber"
+msgstr "Jabber"
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "電話番å·"
+#: lib/app.php:121
+msgid "AIM"
+msgstr "AIM"
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "メールアドレス"
+#: lib/app.php:126
+msgid "MSN"
+msgstr "MSN"
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "所属"
+#: lib/app.php:131
+msgid "Twitter"
+msgstr "Twitter"
+
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr "Googleトーク"
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr "Facebook"
+
+#: lib/app.php:146
+msgid "XMPP"
+msgstr "XMPP"
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr "ICQ"
+
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr "Yahoo"
+
+#: lib/app.php:161
+msgid "Skype"
+msgstr "Skype"
+
+#: lib/app.php:166
+msgid "QQ"
+msgstr "QQ"
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr "GaduGadu"
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "勤務先"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "ä½å±…"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr "ãã®ä»–"
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "æºå¸¯é›»è©±"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "TTY TDD"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "音声番å·"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "メッセージ"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "FAX"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "テレビ電話"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "ãƒã‚±ãƒ™ãƒ«"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "インターãƒãƒƒãƒˆ"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "誕生日"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr "ビジãƒã‚¹"
+
+#: lib/app.php:254
+msgid "Call"
+msgstr "電話"
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr "顧客"
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr "é‹é€ä¼šç¤¾"
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr "休日"
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr "アイデア"
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr "旅行"
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr "記念祭"
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr "打ã¡åˆã‚ã›"
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr "個人"
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr "プロジェクト"
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr "質å•"
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "{name}ã®èª•ç”Ÿæ—¥"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "連絡先"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "連絡先ã®è¿½åŠ "
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "インãƒãƒ¼ãƒˆ"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr "設定"
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
-msgstr "電話帳"
+msgstr "アドレス帳"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "アドレスブックを設定"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "é–‰ã˜ã‚‹"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "æ–°è¦é›»è©±å¸³"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr "キーボードショートカット"
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "VCFã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆ"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr "ナビゲーション"
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDAVリンク"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr "リスト内ã®æ¬¡ã®ã‚³ãƒ³ã‚¿ã‚¯ãƒˆ"
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "ダウンロード"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr "リスト内ã®å‰ã®ã‚³ãƒ³ã‚¿ã‚¯ãƒˆ"
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "編集"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr "ç¾åœ¨ã®ã‚¢ãƒ‰ãƒ¬ã‚¹å¸³ã‚’展開ã™ã‚‹ï¼æŠ˜ã‚ŠãŸãŸã‚€"
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "削除"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr "次ã®ã‚¢ãƒ‰ãƒ¬ã‚¹å¸³"
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "連絡先ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr "å‰ã®ã‚¢ãƒ‰ãƒ¬ã‚¹å¸³"
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "連絡先ã®å‰Šé™¤"
+#: templates/index.php:54
+msgid "Actions"
+msgstr "アクション"
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr "連絡先リストをå†èª­è¾¼ã™ã‚‹"
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr "æ–°ã—ã„コンタクトを追加"
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr "æ–°ã—ã„アドレス帳を追加"
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr "ç¾åœ¨ã®ã‚³ãƒ³ã‚¿ã‚¯ãƒˆã‚’削除"
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "写真をドロップã—ã¦ã‚¢ãƒƒãƒ—ロード"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "ç¾åœ¨ã®å†™çœŸã‚’削除"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "ç¾åœ¨ã®å†™çœŸã‚’編集"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "æ–°ã—ã„写真をアップロード"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "ownCloudã‹ã‚‰å†™çœŸã‚’é¸æŠž"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
-msgstr ""
+msgstr "編集フォーマットã€ã‚·ãƒ§ãƒ¼ãƒˆãƒãƒ¼ãƒ ã€ãƒ•ãƒ«ãƒãƒ¼ãƒ ã€é€†é †ã€ã‚«ãƒ³ãƒžåŒºåˆ‡ã‚Šã®é€†é †"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "åå‰ã®è©³ç´°ã‚’編集"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "所属"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "削除"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "ニックãƒãƒ¼ãƒ "
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "ニックãƒãƒ¼ãƒ ã‚’入力"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "誕生日"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr "ウェブサイト"
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr "http://www.somesite.com"
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr "Webサイトã¸ç§»å‹•"
-#: templates/part.contact.php:38
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "yyyy-mm-dd"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "グループ"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "コンマã§ã‚°ãƒ«ãƒ¼ãƒ—を分割"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "グループを編集"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "推奨"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
-msgstr "連絡先を追加"
+msgstr "有効ãªãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定ã—ã¦ãã ã•ã„。"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "メールアドレスを入力"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "アドレスã¸ãƒ¡ãƒ¼ãƒ«ã‚’é€ã‚‹"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "メールアドレスを削除"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "電話番å·ã‚’入力"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "電話番å·ã‚’削除"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr "インスタントメッセンジャー"
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr "IMを削除"
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "地図ã§è¡¨ç¤º"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "ä½æ‰€ã®è©³ç´°ã‚’編集"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "ã“ã“ã«ãƒ¡ãƒ¢ã‚’追加。"
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "項目を追加"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "プロフィール写真"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "電話番å·"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "メモ"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "メールアドレス"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "ç¾åœ¨ã®å†™çœŸã‚’削除"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr "インスタントメッセージ"
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "ç¾åœ¨ã®å†™çœŸã‚’編集"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "ä½æ‰€"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "æ–°ã—ã„写真をアップロード"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "メモ"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "ownCloudã‹ã‚‰å†™çœŸã‚’é¸æŠž"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "連絡先ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰"
-#: templates/part.cropphoto.php:64
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "連絡先ã®å‰Šé™¤"
+
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "一時画åƒã¯ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‹ã‚‰å‰Šé™¤ã•ã‚Œã¾ã—ãŸã€‚"
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "ä½æ‰€ã‚’編集"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "種類"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "ç§æ›¸ç®±"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr "ä½æ‰€1"
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr "番地"
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
-msgstr "番地2"
+msgstr "ä½æ‰€2"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "番地1"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr "アパートåç­‰"
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "都市"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "都é“府県"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr "例:æ±äº¬éƒ½ã€å¤§é˜ªåºœ"
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "郵便番å·"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr "郵便番å·"
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "国å"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "カテゴリを編集"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "追加"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
-msgstr "アドレスブック"
+msgstr "アドレス帳"
#: templates/part.edit_name_dialog.php:23
msgid "Hon. prefixes"
-msgstr ""
+msgstr "敬称"
#: templates/part.edit_name_dialog.php:27
msgid "Miss"
@@ -685,7 +819,7 @@ msgstr "姓"
#: templates/part.edit_name_dialog.php:41
msgid "Hon. suffixes"
-msgstr "ストレージã¸ã®é€£çµ¡å…ˆã®ã‚¢ãƒƒãƒ—ロードエラー。"
+msgstr "称å·"
#: templates/part.edit_name_dialog.php:45
msgid "J.D."
@@ -719,102 +853,102 @@ msgstr "Jr."
msgid "Sn."
msgstr "Sn."
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "アドレスブックã®æ–°è¦ä½œæˆ"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "アドレスブックを編集"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "表示å"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "アクティブ"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "ä¿å­˜"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "é€ä¿¡"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "å–り消ã—"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "コンタクトファイルをインãƒãƒ¼ãƒˆ"
#: templates/part.import.php:6
msgid "Please choose the addressbook"
-msgstr "アドレスブックをé¸æŠžã—ã¦ãã ã•ã„"
+msgstr "アドレス帳をé¸æŠžã—ã¦ãã ã•ã„"
#: templates/part.import.php:10
msgid "create a new addressbook"
-msgstr "æ–°ã—ã„アドレスブックを作æˆ"
+msgstr "æ–°ã—ã„アドレス帳を作æˆ"
#: templates/part.import.php:15
msgid "Name of new addressbook"
msgstr "æ–°ã—ã„アドレスブックã®åå‰"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "インãƒãƒ¼ãƒˆ"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "コンタクトをインãƒãƒ¼ãƒˆ"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "インãƒãƒ¼ãƒˆã™ã‚‹ã‚¢ãƒ‰ãƒ¬ã‚¹ãƒ–ックをé¸æŠž:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "HDã‹ã‚‰é¸æŠž"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
-msgstr "アドレスブックã«é€£çµ¡å…ˆãŒç™»éŒ²ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+msgstr "アドレス帳ã«é€£çµ¡å…ˆãŒç™»éŒ²ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "連絡先を追加"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "アドレス帳を設定"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr "アドレス帳をé¸æŠžã—ã¦ãã ã•ã„"
-#: templates/settings.php:4
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr "åå‰ã‚’入力"
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr "説明を入力ã—ã¦ãã ã•ã„"
+
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "CardDAVåŒæœŸã‚¢ãƒ‰ãƒ¬ã‚¹"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "詳細情報"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "プライマリアドレス(Kontact 他)"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr "CarDavリンクを表示"
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr "読ã¿å–り専用ã®VCFリンクを表示"
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr "共有"
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "ダウンロード"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "編集"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "æ–°è¦ã®ã‚¢ãƒ‰ãƒ¬ã‚¹å¸³"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr "åå‰"
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr "説明"
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "ä¿å­˜"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "å–り消ã—"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr "ã‚‚ã£ã¨..."
diff --git a/l10n/ja_JP/core.po b/l10n/ja_JP/core.po
index f0a07c435ac..18c7f43a644 100644
--- a/l10n/ja_JP/core.po
+++ b/l10n/ja_JP/core.po
@@ -8,10 +8,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Japanese (Japan) (http://www.transifex.net/projects/p/owncloud/language/ja_JP/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -32,85 +32,85 @@ msgstr "ã“ã®ã‚«ãƒ†ã‚´ãƒªã¯ã™ã§ã«å­˜åœ¨ã—ã¾ã™: "
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "設定"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "1月"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "2月"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "3月"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "4月"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "5月"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "6月"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "7月"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "8月"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "9月"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "10月"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "11月"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "12月"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "キャンセル"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "ã„ã„ãˆ"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "ã¯ã„"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "OK"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "削除ã™ã‚‹ã‚«ãƒ†ã‚´ãƒªãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“。"
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "エラー"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Owncloud ã®ãƒ‘スワードをリセット"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "ownCloudã®ãƒ‘スワードをリセットã—ã¾ã™"
@@ -240,14 +240,10 @@ msgstr "セットアップを完了ã—ã¾ã™"
msgid "web services under your control"
msgstr "管ç†ä¸‹ã«ã‚るウェブサービス"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "ログアウト"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "設定"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "パスワードを忘れã¾ã—ãŸã‹ï¼Ÿ"
diff --git a/l10n/ja_JP/files.po b/l10n/ja_JP/files.po
index 6e34a2dc603..97c519439bb 100644
--- a/l10n/ja_JP/files.po
+++ b/l10n/ja_JP/files.po
@@ -8,43 +8,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Japanese (Japan) (http://www.transifex.net/projects/p/owncloud/language/ja_JP/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
-#: ajax/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "エラーã¯ã‚ã‚Šã¾ã›ã‚“。ファイルã®ã‚¢ãƒƒãƒ—ロードã¯æˆåŠŸã—ã¾ã—ãŸ"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "アップロードã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã¯php.iniã®upload_max_filesizeã«è¨­å®šã•ã‚ŒãŸã‚µã‚¤ã‚ºã‚’超ãˆã¦ã„ã¾ã™"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "ファイルã¯ä¸€éƒ¨åˆ†ã—ã‹ã‚¢ãƒƒãƒ—ロードã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "ファイルã¯ã‚¢ãƒƒãƒ—ロードã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "テンãƒãƒ©ãƒªãƒ•ã‚©ãƒ«ãƒ€ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "ディスクã¸ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ"
@@ -52,57 +52,85 @@ msgstr "ディスクã¸ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ"
msgid "Files"
msgstr "ファイル"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "削除"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "æ—¢ã«å­˜åœ¨ã—ã¾ã™"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "ç½®ãæ›ãˆ"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "キャンセル"
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "ç½®æ›ï¼š"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "â†"
-#: js/files.js:170
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "å…ƒã«æˆ»ã™"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "削除"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "ZIPファイルを生æˆä¸­ã§ã™ã€ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。"
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "アップロード使用ã¨ã—ã¦ã„るファイルãŒãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã€ã‚‚ã—ãã¯ã‚µã‚¤ã‚ºãŒ0ãƒã‚¤ãƒˆã®ãŸã‚ã€ã‚¢ãƒƒãƒ—ロードã§ãã¾ã›ã‚“。"
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "アップロードエラー"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "ä¿ç•™"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "アップロードã¯ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã•ã‚Œã¾ã—ãŸã€‚"
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "無効ãªåå‰ã€'/' ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。"
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "サイズ"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "更新日時"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "フォルダ"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "フォルダ"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "ファイル"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "ファイル"
#: templates/admin.php:5
msgid "File handling"
@@ -172,10 +200,6 @@ msgstr "共有"
msgid "Download"
msgstr "ダウンロード"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "削除"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "ファイルサイズãŒå¤§ãã™ãŽã¾ã™"
diff --git a/l10n/ja_JP/files_encryption.po b/l10n/ja_JP/files_encryption.po
new file mode 100644
index 00000000000..c9941a81c9c
--- /dev/null
+++ b/l10n/ja_JP/files_encryption.po
@@ -0,0 +1,35 @@
+# 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@is.nagoya-u.ac.jp>, 2012.
+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"
+"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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr "æš—å·åŒ–"
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr "æš—å·åŒ–ã‹ã‚‰é™¤å¤–ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚¿ã‚¤ãƒ—"
+
+#: templates/settings.php:5
+msgid "None"
+msgstr "ãªã—"
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr "æš—å·åŒ–を有効ã«ã™ã‚‹"
diff --git a/l10n/ja_JP/files_external.po b/l10n/ja_JP/files_external.po
new file mode 100644
index 00000000000..1de6cdac432
--- /dev/null
+++ b/l10n/ja_JP/files_external.po
@@ -0,0 +1,83 @@
+# 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@is.nagoya-u.ac.jp>, 2012.
+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:46+0000\n"
+"Last-Translator: Daisuke Deguchi <ddeguchi@is.nagoya-u.ac.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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr "外部ストレージ"
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr "マウントãƒã‚¤ãƒ³ãƒˆ"
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr "ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰"
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr "設定"
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr "オプション"
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr "é©ç”¨ç¯„囲"
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr "マウントãƒã‚¤ãƒ³ãƒˆã‚’追加"
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr "未設定"
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr "ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶"
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr "グループ"
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr "ユーザ"
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr "削除"
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr "SSLルート証明書"
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr "ルート証明書をインãƒãƒ¼ãƒˆ"
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr "ユーザã®å¤–部ストレージを有効ã«ã™ã‚‹"
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr "ユーザã«å¤–部ストレージã®ãƒžã‚¦ãƒ³ãƒˆã‚’許å¯ã™ã‚‹"
diff --git a/l10n/ja_JP/files_sharing.po b/l10n/ja_JP/files_sharing.po
new file mode 100644
index 00000000000..b76508218b7
--- /dev/null
+++ b/l10n/ja_JP/files_sharing.po
@@ -0,0 +1,36 @@
+# 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@is.nagoya-u.ac.jp>, 2012.
+# <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-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr "サイズ"
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr "変更"
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr "ã™ã¹ã¦å‰Šé™¤"
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr "削除"
diff --git a/l10n/ja_JP/files_versions.po b/l10n/ja_JP/files_versions.po
new file mode 100644
index 00000000000..893e07db20b
--- /dev/null
+++ b/l10n/ja_JP/files_versions.po
@@ -0,0 +1,27 @@
+# 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@is.nagoya-u.ac.jp>, 2012.
+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:41+0000\n"
+"Last-Translator: Daisuke Deguchi <ddeguchi@is.nagoya-u.ac.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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr "ã™ã¹ã¦ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’削除ã™ã‚‹"
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr "ファイルã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç®¡ç†ã‚’有効ã«ã™ã‚‹"
diff --git a/l10n/ja_JP/lib.po b/l10n/ja_JP/lib.po
new file mode 100644
index 00000000000..30b50556235
--- /dev/null
+++ b/l10n/ja_JP/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/ja_JP/settings.po b/l10n/ja_JP/settings.po
index e0b699f7439..d269151c249 100644
--- a/l10n/ja_JP/settings.po
+++ b/l10n/ja_JP/settings.po
@@ -4,81 +4,114 @@
#
# Translators:
# Daisuke Deguchi <ddeguchi@is.nagoya-u.ac.jp>, 2012.
+# <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-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Japanese (Japan) (http://www.transifex.net/projects/p/owncloud/language/ja_JP/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-20 01:31+0000\n"
+"Last-Translator: Daisuke Deguchi <ddeguchi@is.nagoya-u.ac.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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "アプリストアã‹ã‚‰ãƒªã‚¹ãƒˆã‚’ロードã§ãã¾ã›ã‚“"
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "メールアドレスをä¿å­˜ã—ã¾ã—ãŸ"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "無効ãªãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenIDãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "無効ãªãƒªã‚¯ã‚¨ã‚¹ãƒˆã§ã™"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "èªè¨¼ã‚¨ãƒ©ãƒ¼"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "言語ãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "エラー"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "無効"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "有効"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "ä¿å­˜ä¸­..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "Japanese (日本語)"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "セキュリティ警告"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "cron(自動定期実行)"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr "ページを開ã毎ã«ã‚¿ã‚¹ã‚¯ã‚’1ã¤å®Ÿè¡Œ"
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr "cron.phpã‚’webcronサービスã«ç™»éŒ²ã—ã¾ã—ãŸ"
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr "システムã®cronサービスを使用"
+
+#: templates/admin.php:39
msgid "Log"
msgstr "ログ"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "ã‚‚ã£ã¨"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "アプリを追加"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "アプリをé¸æŠžã—ã¦ãã ã•ã„"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "apps.owncloud.com ã§ã‚¢ãƒ—リケーションã®ãƒšãƒ¼ã‚¸ã‚’見ã¦ãã ã•ã„"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "ライセンス"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "@"
@@ -170,34 +203,38 @@ msgstr "翻訳ã«å”力ã™ã‚‹"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "ファイルマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã§ã‚ãªãŸã®ownCloudã«æŽ¥ç¶šã™ã‚‹éš›ã¯ã€ã“ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’使用ã—ã¦ãã ã•ã„"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "åå‰"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "パスワード"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "グループ"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "作æˆ"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "デフォルトã®ã‚¯ã‚©ãƒ¼ã‚¿ã‚µã‚¤ã‚º"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "ãã®ä»–"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr "グループ管ç†è€…"
+
+#: templates/users.php:82
msgid "Quota"
msgstr "クオータ"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "削除"
diff --git a/l10n/ja_JP/tasks.po b/l10n/ja_JP/tasks.po
new file mode 100644
index 00000000000..13b0423ca16
--- /dev/null
+++ b/l10n/ja_JP/tasks.po
@@ -0,0 +1,108 @@
+# 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@is.nagoya-u.ac.jp>, 2012.
+# <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-08-16 02:04+0200\n"
+"PO-Revision-Date: 2012-08-15 03:40+0000\n"
+"Last-Translator: ttyn <tetuyano+transi@gmail.com>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr "無効ãªæ—¥ä»˜ï¼æ™‚刻"
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr "タスク"
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr "カテゴリ無ã—"
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr "未指定"
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr "1=高"
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr "5=中"
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr "9=低"
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr "è¦æ—¨ãŒæœªè¨˜å…¥"
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr "進æ—ï¼…ãŒä¸æ­£"
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr "無効ãªå„ªå…ˆåº¦"
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr "タスクを追加"
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr "期日ã§ä¸¦ã¹æ›¿ãˆ"
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr "リストã§ä¸¦ã³æ›¿ãˆ"
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr "完了ã§ä¸¦ã¹æ›¿ãˆ"
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr "場所ã§ä¸¦ã¹æ›¿ãˆ"
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr "優先度ã§ä¸¦ã¹æ›¿ãˆ"
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr "ラベルã§ä¸¦ã¹æ›¿ãˆ"
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr "タスクをロード中..."
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr "é‡è¦"
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr "詳細"
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr "é–‰ã˜ã‚‹"
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr "削除"
diff --git a/l10n/ja_JP/user_ldap.po b/l10n/ja_JP/user_ldap.po
new file mode 100644
index 00000000000..5c22b913b44
--- /dev/null
+++ b/l10n/ja_JP/user_ldap.po
@@ -0,0 +1,166 @@
+# 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@is.nagoya-u.ac.jp>, 2012.
+# <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-08-17 00:44+0200\n"
+"PO-Revision-Date: 2012-08-16 05:33+0000\n"
+"Last-Translator: Daisuke Deguchi <ddeguchi@is.nagoya-u.ac.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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr "ホスト"
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr "SSL通信ã—ãªã„å ´åˆã«ã¯ã€ãƒ—ロトコルåã‚’çœç•¥ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãã†ã§ãªã„å ´åˆã«ã¯ã€ldaps:// ã‹ã‚‰å§‹ã‚ã¦ãã ã•ã„。"
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr "ベースDN"
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr "拡張タブã§ãƒ¦ãƒ¼ã‚¶ã¨ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ™ãƒ¼ã‚¹DNを指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr "ユーザDN"
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr "パスワード"
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr "匿åアクセスã®å ´åˆã¯ã€DNã¨ãƒ‘スワードを空ã«ã—ã¦ãã ã•ã„。"
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr "ユーザログインフィルタ"
+
+#: templates/settings.php:12
+#, 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:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr "%%uid プレースホルダーを利用ã—ã¦ãã ã•ã„。例 \"uid=%%uid\""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr "ユーザリストフィルタ"
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr "ユーザーをå–å¾—ã™ã‚‹ã¨ãã«é©ç”¨ã™ã‚‹ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã‚’定義ã™ã‚‹ã€‚"
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr "プレースホルダーを利用ã—ãªã„ã§ãã ã•ã„。例 \"objectClass=person\""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr "グループフィルタ"
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr "グループをå–å¾—ã™ã‚‹ã¨ãã«é©ç”¨ã™ã‚‹ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã‚’定義ã™ã‚‹ã€‚"
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr "プレースホルダーを利用ã—ãªã„ã§ãã ã•ã„。例 \"objectClass=posixGroup\""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr "ãƒãƒ¼ãƒˆ"
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr "ベースユーザツリー"
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr "ベースグループツリー"
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr "グループã¨ãƒ¡ãƒ³ãƒãƒ¼ã®é–¢é€£ä»˜ã‘"
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr "TLSを利用"
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr "SSL接続ã«åˆ©ç”¨ã—ãªã„ã§ãã ã•ã„ã€å¤±æ•—ã—ã¾ã™ã€‚"
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr "大文字ï¼å°æ–‡å­—を区別ã—ãªã„LDAPサーãƒï¼ˆWindows)"
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr "SSL証明書ã®ç¢ºèªã‚’無効ã«ã™ã‚‹ã€‚"
+
+#: templates/settings.php:23
+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:23
+msgid "Not recommended, use for testing only."
+msgstr "推奨ã—ã¾ã›ã‚“ã€ãƒ†ã‚¹ãƒˆç›®çš„ã§ã®ã¿åˆ©ç”¨ã—ã¦ãã ã•ã„。"
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr "ユーザ表示åã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰"
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr "ユーザã®ownCloudåã®ç”Ÿæˆã«åˆ©ç”¨ã™ã‚‹LDAP属性。"
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr "グループ表示åã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰"
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr "グループã®ownCloudåã®ç”Ÿæˆã«åˆ©ç”¨ã™ã‚‹LDAP属性。"
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr "ãƒã‚¤ãƒˆ"
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr "秒。変更後ã«ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãŒã‚¯ãƒªã‚¢ã•ã‚Œã¾ã™ã€‚"
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr "ヘルプ"
diff --git a/l10n/ja_JP/user_migrate.po b/l10n/ja_JP/user_migrate.po
new file mode 100644
index 00000000000..71b2c612ed6
--- /dev/null
+++ b/l10n/ja_JP/user_migrate.po
@@ -0,0 +1,52 @@
+# 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@is.nagoya-u.ac.jp>, 2012.
+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 05:28+0000\n"
+"Last-Translator: Daisuke Deguchi <ddeguchi@is.nagoya-u.ac.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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr "エクスãƒãƒ¼ãƒˆ"
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr "エクスãƒãƒ¼ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã®ç”Ÿæˆæ™‚ã«ä½•ã‹ä¸å…·åˆãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr "エラーãŒç™ºç”Ÿã—ã¾ã—ãŸ"
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr "ユーザアカウントã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ"
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr "ã‚ãªãŸã®ownCloudアカウントをå«ã‚€åœ§ç¸®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã—ã¾ã™ã€‚"
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr "ユーザアカウントをインãƒãƒ¼ãƒˆ"
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr "ownCloudユーザZip"
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr "インãƒãƒ¼ãƒˆ"
diff --git a/l10n/ja_JP/user_openid.po b/l10n/ja_JP/user_openid.po
new file mode 100644
index 00000000000..5fe4094e683
--- /dev/null
+++ b/l10n/ja_JP/user_openid.po
@@ -0,0 +1,55 @@
+# 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@is.nagoya-u.ac.jp>, 2012.
+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 06:36+0000\n"
+"Last-Translator: Daisuke Deguchi <ddeguchi@is.nagoya-u.ac.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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr "ã“ã‚Œã¯OpenIDサーãƒã®ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã§ã™ã€‚詳細ã¯ä¸‹è¨˜ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„。"
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr "識別å­: <b>"
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr "レルム: <b>"
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr "ユーザ: <b>"
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr "ログイン"
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr "エラー: <b>ユーザãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“"
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr "ä»–ã®ã‚µã‚¤ãƒˆã«ã“ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã§èªè¨¼ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™"
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr "èªè¨¼ã•ã‚ŒãŸOpenIDプロãƒã‚¤ãƒ€"
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr "Wordpressã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã€Identi.caã€&hellip;"
diff --git a/l10n/ko/admin_dependencies_chk.po b/l10n/ko/admin_dependencies_chk.po
new file mode 100644
index 00000000000..a6510ce3a87
--- /dev/null
+++ b/l10n/ko/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/ko/admin_migrate.po b/l10n/ko/admin_migrate.po
new file mode 100644
index 00000000000..65b1d84b619
--- /dev/null
+++ b/l10n/ko/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/ko/bookmarks.po b/l10n/ko/bookmarks.po
new file mode 100644
index 00000000000..1992ba3b141
--- /dev/null
+++ b/l10n/ko/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/ko/calendar.po b/l10n/ko/calendar.po
index f433b04414b..89b070aa858 100644
--- a/l10n/ko/calendar.po
+++ b/l10n/ko/calendar.po
@@ -9,21 +9,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Korean (http://www.transifex.net/projects/p/owncloud/language/ko/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "ë‹¬ë ¥ì´ ì—†ìŠµë‹ˆë‹¤"
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "ì¼ì •ì´ 없습니다"
@@ -31,300 +39,394 @@ msgstr "ì¼ì •ì´ 없습니다"
msgid "Wrong calendar"
msgstr "ìž˜ëª»ëœ ë‹¬ë ¥"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "새로운 시간대 설정"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "시간대 변경ë¨"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "ìž˜ëª»ëœ ìš”ì²­"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "달력"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd M/d"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd M/d"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM yyyy"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-msgstr ""
+msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, MMM d, yyyy"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "ìƒì¼"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "사업"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "통화"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "í´ë¼ì´ì–¸íŠ¸"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "배송"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "공휴ì¼"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "ìƒê°"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "여행"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "기ë…ì¼"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "미팅"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "기타"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "ê°œì¸"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "프로ì íŠ¸"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "질문"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "ìž‘ì—…"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "ìµëª…ì˜"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "새로운 달력"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "반복 ì—†ìŒ"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "매ì¼"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "매주"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "매주 특정 ìš”ì¼"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "2주마다"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "매월"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "매년"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "전혀"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "번 ì´í›„"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "날짜"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "ì›”"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "주"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "월요ì¼"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "화요ì¼"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "수요ì¼"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "목요ì¼"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "금요ì¼"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "토요ì¼"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "ì¼ìš”ì¼"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "ì´ë‹¬ì˜ í•œ 주 ì¼ì •"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "첫번째"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "ë‘번째"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "세번째"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "네번째"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "다섯번째"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "마지막"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "1ì›”"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "2ì›”"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "3ì›”"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "4ì›”"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "5ì›”"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "6ì›”"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "7ì›”"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "8ì›”"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "9ì›”"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "10ì›”"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "11ì›”"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "12ì›”"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "ì´ë²¤íŠ¸ 날짜 순"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "날짜 번호 순"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "주 번호 순"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "날짜 순"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "날짜"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "달력"
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "매ì¼"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "새로운 달력"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "ê¸°ìž…ëž€ì´ ë¹„ì–´ìžˆìŠµë‹ˆë‹¤"
@@ -358,40 +460,32 @@ msgstr "마침ì¼ì •ì´ 시작ì¼ì • 보다 빠릅니다. "
msgid "There was a database fail"
msgstr "ë°ì´í„°ë² ì´ìŠ¤ ì—러입니다."
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "주"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "달"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "목ë¡"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "오늘"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "달력"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "파ì¼ì„ 처리하는 중 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "활성 달력 ì„ íƒ"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "내 달력"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDav ë§í¬"
@@ -403,19 +497,19 @@ msgstr "공유 달력"
msgid "No shared calendars"
msgstr "달력 공유하지 ì•ŠìŒ"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "달력 공유"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "다운로드"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "편집"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "삭제"
@@ -501,23 +595,23 @@ msgstr "쉼표로 카테고리 구분"
msgid "Edit categories"
msgstr "카테고리 수정"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "ì¢…ì¼ ì´ë²¤íŠ¸"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "시작"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "ë"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "고급 설정"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "위치"
@@ -525,7 +619,7 @@ msgstr "위치"
msgid "Location of the Event"
msgstr "ì´ë²¤íŠ¸ 위치"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "설명"
@@ -533,84 +627,86 @@ msgstr "설명"
msgid "Description of the Event"
msgstr "ì´ë²¤íŠ¸ 설명"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "반복"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "고급"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "ìš”ì¼ ì„ íƒ"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "날짜 ì„ íƒ"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "그리고 ì´ í•´ì˜ ì¼ì •"
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "그리고 ì´ ë‹¬ì˜ ì¼ì •"
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "달 ì„ íƒ"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "주 ì„ íƒ"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "그리고 ì´ í•´ì˜ ì£¼ê°„ ì¼ì •"
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "간격"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "ë"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "번 ì´í›„"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "새 달력 만들기"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "달력 íŒŒì¼ ê°€ì ¸ì˜¤ê¸°"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "ë‹¬ë ¥ì„ ì„ íƒí•´ 주세요"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "새 달력 만들기"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "새 달력 ì´ë¦„"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "ìž…ë ¥"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "달력 입력"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "달력 ìž…ë ¥ì„ ì„±ê³µì ìœ¼ë¡œ 마쳤습니다."
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "ìž…ë ¥"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "대화 마침"
@@ -626,45 +722,73 @@ msgstr "ì¼ì • 보기"
msgid "No categories selected"
msgstr "ì„ íƒëœ 카테고리 ì—†ìŒ"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "ì„ íƒ ì¹´í…Œê³ ë¦¬"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "ì˜"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "ì—ì„œ"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "시간대"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "í•­ìƒ ì‹œê°„ëŒ€ 변경 확ì¸í•˜ê¸°"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "시간 í˜•ì‹ ì„¤ì •"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24시간"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12시간"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "ê·¸ ì£¼ì˜ ì²«ì§¸ë‚ "
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "달력 CalDav ë™ê¸°í™” 주소"
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/ko/contacts.po b/l10n/ko/contacts.po
index 77bb4f1a398..410011e0825 100644
--- a/l10n/ko/contacts.po
+++ b/l10n/ko/contacts.po
@@ -9,636 +9,769 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Korean (http://www.transifex.net/projects/p/owncloud/language/ko/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "주소ë¡ì„ (비)활성화하는 ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "ì—°ë½ì²˜ë¥¼ 추가하는 중 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "빈 ì†ì„±ì„ 추가할 수 없습니다."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "최소한 í•˜ë‚˜ì˜ ì£¼ì†Œë¡ í•­ëª©ì„ ìž…ë ¥í•´ì•¼ 합니다."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "ì•„ì´ë””ê°€ 설정ë˜ì–´ 있지 않습니다. "
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr ""
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "주소ë¡ì— ì´ë¦„ëž€ì´ ë¹„ì–´ìžˆìœ¼ë©´ ì—…ë°ì´íŠ¸ë¥¼ í•  수 없습니다. "
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "ì—°ë½ì²˜ ì†ì„±ì„ 추가할 수 없습니다."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "주소ë¡ì„ ì—…ë°ì´íŠ¸í•  수 없습니다."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "제공ë˜ëŠ” ì•„ì´ë”” ì—†ìŒ"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "오류 검사합계 설정"
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "ì‚­ì œ 카테고리를 ì„ íƒí•˜ì§€ 않았습니다. "
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "주소ë¡ì„ ì°¾ì„ ìˆ˜ 없습니다."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "ì—°ë½ì²˜ë¥¼ ì°¾ì„ ìˆ˜ 없습니다."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "ì—°ë½ì²˜ë¥¼ 추가하는 중 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "element ì´ë¦„ì´ ì„¤ì •ë˜ì§€ 않았습니다."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "빈 ì†ì„±ì„ 추가할 수 없습니다."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "최소한 í•˜ë‚˜ì˜ ì£¼ì†Œë¡ í•­ëª©ì„ ìž…ë ¥í•´ì•¼ 합니다."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "중복 ì†ì„± 추가 ì‹œë„: "
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "vCard ì •ë³´ê°€ 올바르지 않습니다. 페ì´ì§€ë¥¼ 새로 고치십시오."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "ì•„ì´ë”” 분실"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
-msgstr ""
+msgstr "ì•„ì´ë””ì— ëŒ€í•œ VCard ë¶„ì„ ì˜¤ë¥˜"
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "ì„±ëª…ëž€ì´ ë¹„ì–´ 주소ë¡ì— 추가 í•  수 없습니다."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "ì²´í¬ì„¬ì´ 설정ë˜ì§€ 않았습니다."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "주소ë¡ì„ 추가할 수 없습니다."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr " vCardì— ëŒ€í•œ ì •ë³´ê°€ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤. 페ì´ì§€ë¥¼ 다시 로드하세요:"
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "주소ë¡ì„ 활성화할 수 없습니다."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr ""
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "ì ‘ì† ì•„ì´ë””ê°€ 기입ë˜ì§€ 않았습니다."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "사진 ì½ê¸° 오류"
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "ìž„ì‹œ 파ì¼ì„ 저장하는 ë™ì•ˆ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. "
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "로딩 ì‚¬ì§„ì´ ìœ íš¨í•˜ì§€ 않습니다. "
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "ì•„ì´ë””ê°€ 설정ë˜ì–´ 있지 않습니다. "
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "vCard ì •ë³´ê°€ 올바르지 않습니다. 페ì´ì§€ë¥¼ 새로 고치십시오."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "ì—°ë½ì²˜ ì†ì„±ì„ 삭제할 수 없습니다."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "ì ‘ì† ì•„ì´ë””ê°€ 없습니다. "
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "ì ‘ì† ì•„ì´ë”” 분실"
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
-msgstr ""
+msgstr "사진 경로가 제출ë˜ì§€ 않았습니다. "
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "파ì¼ì´ 존재하지 않습니다. "
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "로딩 ì´ë¯¸ì§€ 오류입니다."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "ì—°ë½ì²˜ 개체를 가져오는 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. "
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "사진 ì†ì„±ì„ 가져오는 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. "
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "ì—°ë½ì²˜ 저장 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "ì´ë¯¸ì§€ í¬ê¸° ì¡°ì • 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "ì´ë¯¸ì§€ë¥¼ ìžë¥´ë˜ 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "ìž„ì‹œ ì´ë¯¸ì§€ë¥¼ ìƒì„± 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr ""
+msgstr "ì´ë¯¸ì§€ë¥¼ ì°¾ë˜ ì¤‘ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤:"
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr ""
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "ì—°ë½ì²˜ ì†ì„±ì„ ì—…ë°ì´íŠ¸í•  수 없습니다."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr ""
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "주소ë¡ì„ ì—…ë°ì´íŠ¸í•  수 없습니다."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
-msgstr ""
+msgstr "스토리지 ì—러 업로드 ì—°ë½ì²˜."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "ì˜¤ë¥˜ì—†ì´ íŒŒì¼ì—…로드 성공."
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
-msgstr ""
+msgstr "php.ini 형ì‹ìœ¼ë¡œ 업로드 ëœ ì´ íŒŒì¼ì€ MAX_FILE_SIZE를 초과하였다."
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
-msgstr ""
+msgstr "HTML형ì‹ìœ¼ë¡œ 업로드 ëœ ì´ íŒŒì¼ì€ MAX_FILE_SIZE를 초과하였다."
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "ì´ ì—…ë¡œë“œëœ íŒŒì¼ì€ 부분ì ìœ¼ë¡œë§Œ 업로드 ë˜ì—ˆìŠµë‹ˆë‹¤."
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "파ì¼ì´ 업로드 ë˜ì–´ìžˆì§€ 않습니다"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "ìž„ì‹œ í´ë” 분실"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "ìž„ì‹œ ì´ë¯¸ì§€ë¥¼ 저장할 수 없습니다:"
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "ìž„ì‹œ ì´ë¯¸ì§€ë¥¼ 불러올 수 없습니다. "
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "파ì¼ì´ 업로드 ë˜ì§€ 않았습니다. ì•Œ 수 없는 오류."
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "ì—°ë½ì²˜"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "죄송합니다. ì´ ê¸°ëŠ¥ì€ ì•„ì§ êµ¬í˜„ë˜ì§€ 않았습니다. "
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "구현ë˜ì§€ ì•ŠìŒ"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "유효한 주소를 ì–»ì„ ìˆ˜ 없습니다."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "오류"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "요소를 ì§ë ¬í™” í•  수 없습니다."
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "'deleteProperty'ê°€ 문서형ì‹ì´ ì—†ì´ ë¶ˆë ¤ì™”ìŠµë‹ˆë‹¤. bugs.owncloud.orgì— ë³´ê³ í•´ì£¼ì„¸ìš”. "
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "ì´ë¦„ 편집"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "업로드를 위한 파ì¼ì´ ì„ íƒë˜ì§€ 않았습니다. "
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "ì´ íŒŒì¼ì€ ì´ ì„œë²„ íŒŒì¼ ì—…ë¡œë“œ 최대 ìš©ëŸ‰ì„ ì´ˆê³¼ 합니다. "
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
+msgstr "유형 ì„ íƒ"
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
-msgstr ""
+#: js/loader.js:49
+msgid "Result: "
+msgstr "ê²°ê³¼:"
-#: js/contacts.js:1494
+#: js/loader.js:49
+msgid " imported, "
+msgstr "불러오기,"
+
+#: js/loader.js:49
+msgid " failed."
+msgstr "실패."
+
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "ë‚´ 주소ë¡ì´ 아닙니다."
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "ì—°ë½ì²˜ë¥¼ ì°¾ì„ ìˆ˜ 없습니다."
+
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "주소ë¡ì„ ì°¾ì„ ìˆ˜ 없습니다."
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "ë‚´ 주소ë¡ì´ 아닙니다."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "ì—°ë½ì²˜ë¥¼ ì°¾ì„ ìˆ˜ 없습니다."
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "주소"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "전화 번호"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "ì „ìž ìš°íŽ¸"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "ì¡°ì§"
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "ì§ìž¥"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "ìžíƒ"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "휴대í°"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "ë¬¸ìž ë²ˆí˜¸"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "ìŒì„± 번호"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "메세지"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "팩스 번호"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "ì˜ìƒ 번호"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "호출기"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "ì¸í„°ë„·"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "ìƒì¼"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "{ì´ë¦„}ì˜ ìƒì¼"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "ì—°ë½ì²˜"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "ì—°ë½ì²˜ 추가"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "ìž…ë ¥"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "주소ë¡"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "ì£¼ì†Œë¡ êµ¬ì„±"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "닫기"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "새 주소ë¡"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "VCFì—ì„œ 가져오기"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDav ë§í¬"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "다운로드"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "편집"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "삭제"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "ì—°ë½ì²˜ 다운로드"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "ì—°ë½ì²˜ ì‚­ì œ"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Drop photo to upload"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "현재 사진 삭제"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "현재 사진 편집"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "새로운 사진 업로드"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "ownCloudì—ì„œ 사진 ì„ íƒ"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
-msgstr ""
+msgstr "Format custom, Short name, Full name, Reverse or Reverse with comma"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "ì´ë¦„ ì„¸ë¶€ì‚¬í•­ì„ íŽ¸ì§‘í•©ë‹ˆë‹¤. "
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "ì¡°ì§"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "삭제"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "별명"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "별명 입력"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "ìƒì¼"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "ì¼-ì›”-ë…„"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "그룹"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "쉼표로 그룹 구분"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "그룹 편집"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "선호함"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "올바른 ì´ë©”ì¼ ì£¼ì†Œë¥¼ 입력하세요."
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "ì´ë©”ì¼ ì£¼ì†Œ ìž…ë ¥"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr ""
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
-msgstr ""
+msgstr "ì´ë©”ì¼ ì£¼ì†Œ ì‚­ì œ"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
-msgstr ""
+msgstr "전화번호 입력"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
+msgstr "전화번호 삭제"
+
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
msgstr ""
-#: templates/part.contact.php:84
-msgid "View on map"
+#: templates/part.contact.php:101
+msgid "Delete IM"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
+msgid "View on map"
+msgstr "지ë„ì—ì„œ 보기"
+
+#: templates/part.contact.php:110
msgid "Edit address details"
-msgstr ""
+msgstr "ìƒì„¸ 주소 수정"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
-msgstr ""
+msgstr "ì—¬ê¸°ì— ë…¸íŠ¸ 추가."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
-msgstr ""
-
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr ""
+msgstr "íŒŒì¼ ì¶”ê°€"
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "전화 번호"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr ""
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "ì „ìž ìš°íŽ¸"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr ""
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "주소"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr ""
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "노트"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr ""
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "ì—°ë½ì²˜ 다운로드"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "ì—°ë½ì²˜ ì‚­ì œ"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "ìž„ì‹œ ì´ë¯¸ì§€ê°€ ìºì‹œì—ì„œ 제거 ë˜ì—ˆìŠµë‹ˆë‹¤. "
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
-msgstr ""
+msgstr "주소 수정"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "종류"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "사서함"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "확장"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "거리"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "ë„ì‹œ"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "지역"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "우편 번호"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
-msgid "Country"
-msgstr "êµ­ê°€"
-
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
msgstr ""
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "추가"
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr "êµ­ê°€"
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
@@ -646,176 +779,176 @@ msgstr "주소ë¡"
#: templates/part.edit_name_dialog.php:23
msgid "Hon. prefixes"
-msgstr ""
+msgstr "Hon. prefixes"
#: templates/part.edit_name_dialog.php:27
msgid "Miss"
-msgstr ""
+msgstr "Miss"
#: templates/part.edit_name_dialog.php:28
msgid "Ms"
-msgstr ""
+msgstr "Ms"
#: templates/part.edit_name_dialog.php:29
msgid "Mr"
-msgstr ""
+msgstr "Mr"
#: templates/part.edit_name_dialog.php:30
msgid "Sir"
-msgstr ""
+msgstr "Sir"
#: templates/part.edit_name_dialog.php:31
msgid "Mrs"
-msgstr ""
+msgstr "Mrs"
#: templates/part.edit_name_dialog.php:32
msgid "Dr"
-msgstr ""
+msgstr "Dr"
#: templates/part.edit_name_dialog.php:35
msgid "Given name"
-msgstr ""
+msgstr "Given name"
#: templates/part.edit_name_dialog.php:37
msgid "Additional names"
-msgstr ""
+msgstr "추가 ì´ë¦„"
#: templates/part.edit_name_dialog.php:39
msgid "Family name"
-msgstr ""
+msgstr "성"
#: templates/part.edit_name_dialog.php:41
msgid "Hon. suffixes"
-msgstr ""
+msgstr "Hon. suffixes"
#: templates/part.edit_name_dialog.php:45
msgid "J.D."
-msgstr ""
+msgstr "J.D."
#: templates/part.edit_name_dialog.php:46
msgid "M.D."
-msgstr ""
+msgstr "M.D."
#: templates/part.edit_name_dialog.php:47
msgid "D.O."
-msgstr ""
+msgstr "D.O."
#: templates/part.edit_name_dialog.php:48
msgid "D.C."
-msgstr ""
+msgstr "D.C."
#: templates/part.edit_name_dialog.php:49
msgid "Ph.D."
-msgstr ""
+msgstr "Ph.D."
#: templates/part.edit_name_dialog.php:50
msgid "Esq."
-msgstr ""
+msgstr "Esq."
#: templates/part.edit_name_dialog.php:51
msgid "Jr."
-msgstr ""
+msgstr "Jr."
#: templates/part.edit_name_dialog.php:52
msgid "Sn."
-msgstr ""
-
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "새 주소ë¡"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "ì£¼ì†Œë¡ íŽ¸ì§‘"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "표시 ì´ë¦„"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "활성"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "저장"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "보내기"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "취소"
+msgstr "Sn."
#: templates/part.import.php:1
msgid "Import a contacts file"
-msgstr ""
+msgstr "ì—°ë½ì²˜ íŒŒì¼ ìž…ë ¥"
#: templates/part.import.php:6
msgid "Please choose the addressbook"
-msgstr ""
+msgstr "주소ë¡ì„ ì„ íƒí•´ 주세요."
#: templates/part.import.php:10
msgid "create a new addressbook"
-msgstr ""
+msgstr "새 ì£¼ì†Œë¡ ë§Œë“¤ê¸°"
#: templates/part.import.php:15
msgid "Name of new addressbook"
-msgstr ""
-
-#: templates/part.import.php:17
-msgid "Import"
-msgstr ""
+msgstr "새 ì£¼ì†Œë¡ ì´ë¦„"
#: templates/part.import.php:20
msgid "Importing contacts"
-msgstr ""
+msgstr "ì—°ë½ì²˜ ìž…ë ¥"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
+msgstr "ë‹¹ì‹ ì˜ ì£¼ì†Œë¡ì—는 ì—°ë½ì²˜ê°€ 없습니다. "
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
+msgstr "ì—°ë½ì²˜ 추가"
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
msgstr ""
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
msgstr ""
-#: templates/part.no_contacts.php:2
-msgid "You have no contacts in your addressbook."
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
msgstr ""
-#: templates/part.no_contacts.php:4
-msgid "Add contact"
+#: templates/settings.php:3
+msgid "CardDAV syncing addresses"
+msgstr "CardDAV 주소 ë™ê¸°í™”"
+
+#: templates/settings.php:3
+msgid "more info"
+msgstr "ë” ë§Žì€ ì •ë³´"
+
+#: templates/settings.php:5
+msgid "Primary address (Kontact et al)"
+msgstr "기본 주소 (Kontact et al)"
+
+#: templates/settings.php:7
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
msgstr ""
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
msgstr ""
-#: templates/settings.php:4
-msgid "CardDAV syncing addresses"
+#: templates/settings.php:26
+msgid "Share"
msgstr ""
-#: templates/settings.php:4
-msgid "more info"
+#: templates/settings.php:29
+msgid "Download"
+msgstr "다운로드"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "편집"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "새 주소ë¡"
+
+#: templates/settings.php:44
+msgid "Name"
msgstr ""
-#: templates/settings.php:6
-msgid "Primary address (Kontact et al)"
+#: templates/settings.php:45
+msgid "Description"
msgstr ""
-#: templates/settings.php:8
-msgid "iOS/OS X"
+#: templates/settings.php:46
+msgid "Save"
+msgstr "저장"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "취소"
+
+#: templates/settings.php:52
+msgid "More..."
msgstr ""
diff --git a/l10n/ko/core.po b/l10n/ko/core.po
index 22330d05c9e..aaed23a766f 100644
--- a/l10n/ko/core.po
+++ b/l10n/ko/core.po
@@ -9,10 +9,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Korean (http://www.transifex.net/projects/p/owncloud/language/ko/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -33,85 +33,85 @@ msgstr "ì´ ì¹´í…Œê³ ë¦¬ëŠ” ì´ë¯¸ 존재합니다:"
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "설정"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "1ì›”"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "2ì›”"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "3ì›”"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "4ì›”"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "5ì›”"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "6ì›”"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "7ì›”"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "8ì›”"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "9ì›”"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "10ì›”"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "11ì›”"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "12ì›”"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "취소"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "아니오"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "예"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "승ë½"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "ì‚­ì œ 카테고리를 ì„ íƒí•˜ì§€ 않았습니다."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "ì—러"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Owncloud 암호 재설정"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "ownCloud 비밀번호 재설정"
@@ -241,14 +241,10 @@ msgstr "설치 완료"
msgid "web services under your control"
msgstr "내가 관리하는 웹 서비스"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "로그아웃"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "설정"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "암호를 잊으셨습니까?"
diff --git a/l10n/ko/files.po b/l10n/ko/files.po
index 07ce95f06ab..375947a2920 100644
--- a/l10n/ko/files.po
+++ b/l10n/ko/files.po
@@ -9,43 +9,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Korean (http://www.transifex.net/projects/p/owncloud/language/ko/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "ì—…ë¡œë“œì— ì„±ê³µí•˜ì˜€ìŠµë‹ˆë‹¤."
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "업로드한 파ì¼ì´ php.iniì—ì„œ 지정한 upload_max_filesize보다 ë” í¼"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "파ì¼ì´ 부분ì ìœ¼ë¡œ 업로드ë¨"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "ì—…ë¡œë“œëœ íŒŒì¼ ì—†ìŒ"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "ìž„ì‹œ í´ë”ê°€ 사ë¼ì§"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "디스í¬ì— 쓰지 못했습니다"
@@ -53,57 +53,85 @@ msgstr "디스í¬ì— 쓰지 못했습니다"
msgid "Files"
msgstr "파ì¼"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "삭제"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
-msgid "generating ZIP-file, it may take some time."
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
msgstr ""
-#: js/files.js:199
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
+msgid "generating ZIP-file, it may take some time."
+msgstr "ZIPíŒŒì¼ ìƒì„±ì— ì‹œê°„ì´ ê±¸ë¦´ 수 있습니다."
+
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "업로드 ì—러"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "보류 중"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "업로드 취소."
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "ìž˜ëª»ëœ ì´ë¦„, '/' ì€ í—ˆìš©ì´ ë˜ì§€ 않습니다."
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "í¬ê¸°"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "수정ë¨"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "í´ë”"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "í´ë”"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "파ì¼"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "파ì¼"
#: templates/admin.php:5
msgid "File handling"
@@ -173,10 +201,6 @@ msgstr "공유"
msgid "Download"
msgstr "다운로드"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "삭제"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "업로드 용량 초과"
diff --git a/l10n/ko/files_encryption.po b/l10n/ko/files_encryption.po
new file mode 100644
index 00000000000..4f31caefbd7
--- /dev/null
+++ b/l10n/ko/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/ko/files_external.po b/l10n/ko/files_external.po
new file mode 100644
index 00000000000..a2ca063a69b
--- /dev/null
+++ b/l10n/ko/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/ko/files_sharing.po b/l10n/ko/files_sharing.po
new file mode 100644
index 00000000000..970803e48ae
--- /dev/null
+++ b/l10n/ko/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/ko/files_versions.po b/l10n/ko/files_versions.po
new file mode 100644
index 00000000000..7646c3ad8eb
--- /dev/null
+++ b/l10n/ko/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/ko/lib.po b/l10n/ko/lib.po
new file mode 100644
index 00000000000..2308a069de8
--- /dev/null
+++ b/l10n/ko/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/ko/settings.po b/l10n/ko/settings.po
index 1e84863d07d..a4bfa5dacae 100644
--- a/l10n/ko/settings.po
+++ b/l10n/ko/settings.po
@@ -9,77 +9,109 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Korean (http://www.transifex.net/projects/p/owncloud/language/ko/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "ì´ë©”ì¼ ì €ìž¥"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "ìž˜ëª»ëœ ì´ë©”ì¼"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID 변경ë¨"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "ìž˜ëª»ëœ ìš”ì²­"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "언어가 변경ë˜ì—ˆìŠµë‹ˆë‹¤"
-#: js/apps.js:31 js/apps.js:67
-msgid "Disable"
+#: js/apps.js:18
+msgid "Error"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr "비활성화"
+
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "활성화"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "저장..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "한국어"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr "로그"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "ë”"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "앱 추가"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "프로그램 ì„ íƒ"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "application page at apps.owncloud.comì„ ë³´ì‹œì˜¤."
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr " ë¼ì´ì„ ìŠ¤ 사용"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr " by "
@@ -171,34 +203,38 @@ msgstr "번역 ë•ê¸°"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "íŒŒì¼ ê´€ë¦¬ìžì—ì„œ ë‚´ ownCloudì— ì—°ê²°í•  ë•Œ ì´ ì£¼ì†Œë¥¼ 사용하십시오"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "ì´ë¦„"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "암호"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "그룹"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "만들기"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "기본 할당량"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "다른"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "할당량"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "삭제"
diff --git a/l10n/ko/tasks.po b/l10n/ko/tasks.po
new file mode 100644
index 00000000000..58c447717b4
--- /dev/null
+++ b/l10n/ko/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/ko/user_ldap.po b/l10n/ko/user_ldap.po
new file mode 100644
index 00000000000..0cc01bfddf2
--- /dev/null
+++ b/l10n/ko/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/ko/user_migrate.po b/l10n/ko/user_migrate.po
new file mode 100644
index 00000000000..5d9886e7058
--- /dev/null
+++ b/l10n/ko/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/ko/user_openid.po b/l10n/ko/user_openid.po
new file mode 100644
index 00000000000..aaa8bf48371
--- /dev/null
+++ b/l10n/ko/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/l10n.pl b/l10n/l10n.pl
index 27b14c41bef..0f75cc5c7e9 100644
--- a/l10n/l10n.pl
+++ b/l10n/l10n.pl
@@ -101,7 +101,7 @@ if( $task eq 'read' ){
foreach my $file ( @totranslate ){
next if $ignore{$file};
my $keyword = ( $file =~ /\.js$/ ? 't:2' : 't');
- my $language = ( $file =~ /\.js$/ ? 'C' : 'PHP');
+ my $language = ( $file =~ /\.js$/ ? 'Perl' : 'PHP');
my $joinexisting = ( -e $output ? '--join-existing' : '');
print " Reading $file\n";
`xgettext --output="$output" $joinexisting --keyword=$keyword --language=$language "$file"`;
diff --git a/l10n/lb/admin_dependencies_chk.po b/l10n/lb/admin_dependencies_chk.po
new file mode 100644
index 00000000000..f49abb28140
--- /dev/null
+++ b/l10n/lb/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/lb/admin_migrate.po b/l10n/lb/admin_migrate.po
new file mode 100644
index 00000000000..a4912b42c83
--- /dev/null
+++ b/l10n/lb/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/lb/bookmarks.po b/l10n/lb/bookmarks.po
new file mode 100644
index 00000000000..024a705e243
--- /dev/null
+++ b/l10n/lb/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/lb/calendar.po b/l10n/lb/calendar.po
index 8436a2126d2..38971117596 100644
--- a/l10n/lb/calendar.po
+++ b/l10n/lb/calendar.po
@@ -8,21 +8,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Luxembourgish (http://www.transifex.net/projects/p/owncloud/language/lb/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Keng Kalenner fonnt."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Keng Evenementer fonnt."
@@ -30,300 +38,394 @@ msgstr "Keng Evenementer fonnt."
msgid "Wrong calendar"
msgstr "Falschen Kalenner"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Nei Zäitzone:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Zäitzon geännert"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Ongülteg Requête"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Kalenner"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
msgstr ""
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
msgstr ""
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
msgstr ""
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
msgstr ""
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Gebuertsdag"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Geschäftlech"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Uruff"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Clienten"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Liwwerant"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Vakanzen"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Ideeën"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Dag"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Jubiläum"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Meeting"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Aner"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Perséinlech"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projeten"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Froen"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Aarbecht"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr ""
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Neien Kalenner"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Widderhëlt sech net"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Deeglech"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "All Woch"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "All Wochendag"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "All zweet Woch"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "All Mount"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "All Joer"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "ni"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "no Virkommes"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "no Datum"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "no Mount-Dag"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "no Wochendag"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Méindes"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Dënschdes"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Mëttwoch"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Donneschdes"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Freides"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Samschdes"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Sonndes"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr ""
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "éischt"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "Sekonn"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "Drëtt"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "Féiert"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "Fënneft"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "Läscht"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Januar"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Februar"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Mäerz"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Abrëll"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Mee"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Juni"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Juli"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "August"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "September"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Oktober"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "November"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Dezember"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr ""
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr ""
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr ""
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr ""
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Datum"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Cal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "All Dag"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Neien Kalenner"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Felder déi feelen"
@@ -357,40 +459,32 @@ msgstr "D'Evenement hält op ier et ufänkt"
msgid "There was a database fail"
msgstr "En Datebank Feeler ass opgetrueden"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Woch"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Mount"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Lescht"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Haut"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Kalenneren"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Feeler beim lueden vum Fichier."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Wiel aktiv Kalenneren aus"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Deng Kalenneren"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDav Link"
@@ -402,19 +496,19 @@ msgstr "Gedeelte Kalenneren"
msgid "No shared calendars"
msgstr "Keng gedeelten Kalenneren"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Eroflueden"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Editéieren"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Läschen"
@@ -500,23 +594,23 @@ msgstr ""
msgid "Edit categories"
msgstr ""
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Ganz-Dag Evenement"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Vun"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Fir"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Avancéiert Optiounen"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Uert"
@@ -524,7 +618,7 @@ msgstr "Uert"
msgid "Location of the Event"
msgstr "Uert vum Evenement"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Beschreiwung"
@@ -532,84 +626,86 @@ msgstr "Beschreiwung"
msgid "Description of the Event"
msgstr "Beschreiwung vum Evenement"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Widderhuelen"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Erweidert"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Wochendeeg auswielen"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Deeg auswielen"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr ""
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr ""
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Méint auswielen"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Wochen auswielen"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr ""
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Intervall"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Enn"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "Virkommes"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "E neie Kalenner uleeën"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "E Kalenner Fichier importéieren"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Wiel den Kalenner aus"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "E neie Kalenner uleeën"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Numm vum neie Kalenner"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Import"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Importéiert Kalenner"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Kalenner erfollegräich importéiert"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Import"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Dialog zoumaachen"
@@ -625,45 +721,73 @@ msgstr ""
msgid "No categories selected"
msgstr ""
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Kategorie auswielen"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr ""
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr ""
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Zäitzon"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Zäit Format"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24h"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12h"
-#: templates/settings.php:40
-msgid "First day of the week"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "CalDAV Kalenner Synchronisatioun's Adress:"
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/lb/contacts.po b/l10n/lb/contacts.po
index 752a81e3f79..2d22dc6b1e6 100644
--- a/l10n/lb/contacts.po
+++ b/l10n/lb/contacts.po
@@ -8,220 +8,206 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Luxembourgish (http://www.transifex.net/projects/p/owncloud/language/lb/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
-msgstr ""
+msgstr "Fehler beim (de)aktivéieren vum Adressbuch."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr ""
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "ID ass net gesat."
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
msgstr ""
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr ""
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Fehler beim updaten vum Adressbuch."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr ""
+#: ajax/categories/categoriesfor.php:17
+msgid "No ID provided"
+msgstr "Keng ID uginn"
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr ""
+#: ajax/categories/categoriesfor.php:34
+msgid "Error setting checksum."
+msgstr "Fehler beim setzen vun der Checksum."
-#: ajax/categories/categoriesfor.php:15
-msgid "No ID provided"
+#: ajax/categories/delete.php:19
+msgid "No categories selected for deletion."
+msgstr "Keng Kategorien fir ze läschen ausgewielt."
+
+#: ajax/categories/delete.php:26
+msgid "No address books found."
+msgstr "Keen Adressbuch fonnt."
+
+#: ajax/categories/delete.php:34
+msgid "No contacts found."
+msgstr "Keng Kontakter fonnt."
+
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Fehler beim bäisetzen vun engem Kontakt."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
msgstr ""
-#: ajax/categories/categoriesfor.php:27
-msgid "Error setting checksum."
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
msgstr ""
-#: ajax/categories/delete.php:29
-msgid "No categories selected for deletion."
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Ka keng eidel Proprietéit bäisetzen."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
-msgid "No address books found."
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "Probéieren duebel Proprietéit bäi ze setzen:"
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
msgstr ""
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
-msgid "No contacts found."
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
msgstr ""
-#: ajax/contactdetails.php:37
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informatioun iwwert vCard ass net richteg. Lued d'Säit wegl nei."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
-msgstr ""
+msgstr "ID fehlt"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr ""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
msgstr ""
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
msgstr ""
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
msgstr ""
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
-msgstr ""
+msgstr "Kontakt ID ass net mat geschéckt ginn."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
-msgstr ""
+msgstr "Fehler beim liesen vun der Kontakt Photo."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
-msgstr ""
+msgstr "Fehler beim späicheren vum temporäre Fichier."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
-msgstr ""
-
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr ""
+msgstr "Déi geluede Photo ass net gülteg."
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Informatioun iwwert vCard ass net richteg. Lued d'Säit wegl nei."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr ""
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
-msgstr ""
+msgstr "Kontakt ID fehlt."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr ""
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr ""
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
-msgstr ""
+msgstr "Fichier existéiert net:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
-msgstr ""
+msgstr "Fehler beim lueden vum Bild."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
msgstr ""
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
msgstr ""
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
msgstr ""
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
msgstr ""
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
msgstr ""
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
msgstr ""
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
msgstr ""
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr ""
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr ""
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr ""
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr ""
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr ""
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr ""
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
-msgstr ""
+msgstr "Et ass kee Fichier ropgeluede ginn"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
msgstr ""
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
msgstr ""
@@ -229,415 +215,562 @@ msgstr ""
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
-msgstr ""
+msgstr "Kontakter"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
msgstr ""
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
msgstr ""
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Fehler"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
msgstr ""
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
msgstr ""
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
msgstr ""
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/loader.js:49
+msgid "Result: "
+msgstr "Resultat: "
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr " importéiert, "
+
+#: js/loader.js:49
+msgid " failed."
msgstr ""
-#: js/contacts.js:1494
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Dat do ass net däin Adressbuch."
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Konnt den Kontakt net fannen."
+
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
+#: lib/app.php:141
+msgid "Facebook"
msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Dat do ass net däin Adressbuch."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Konnt den Kontakt net fannen."
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Adress"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefon's Nummer"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "Email"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Firma"
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Aarbecht"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Doheem"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "GSM"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "SMS"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Voice"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
-msgstr ""
+msgstr "Message"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fax"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Video"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Pager"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
+msgstr "Internet"
+
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Gebuertsdag"
+
+#: lib/app.php:253
+msgid "Business"
msgstr ""
-#: lib/hooks.php:79
-msgid "{name}'s Birthday"
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
msgstr ""
-#: lib/search.php:22
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
+msgid "{name}'s Birthday"
+msgstr "{name} säi Gebuertsdag"
+
+#: lib/search.php:15
msgid "Contact"
msgstr "Kontakt"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Kontakt bäisetzen"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Adressbicher "
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Zoumaachen"
+
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
msgstr ""
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Neit Adressbuch"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
+#: templates/index.php:42
+msgid "Next contact in list"
msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDav Link"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Download"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Editéieren"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Läschen"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
+#: templates/index.php:54
+msgid "Actions"
msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Kontakt läschen"
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr ""
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr ""
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr ""
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Firma"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Läschen"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
-msgstr ""
+msgstr "Spëtznumm"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
+msgstr "Gëff e Spëtznumm an"
+
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
msgstr ""
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Gebuertsdag"
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
-#: templates/part.contact.php:38
-msgid "dd-mm-yyyy"
+#: templates/part.contact.php:44
+msgid "Go to web site"
msgstr ""
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:46
+msgid "dd-mm-yyyy"
+msgstr "dd-mm-yyyy"
+
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
-msgstr ""
+msgstr "Gruppen"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr ""
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
-msgstr ""
+msgstr "Gruppen editéieren"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr ""
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr ""
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr ""
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
-msgstr ""
+msgstr "Telefonsnummer aginn"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
+msgstr "Telefonsnummer läschen"
+
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
msgstr ""
-#: templates/part.contact.php:84
-msgid "View on map"
+#: templates/part.contact.php:101
+msgid "Delete IM"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
+msgid "View on map"
+msgstr "Op da Kaart uweisen"
+
+#: templates/part.contact.php:110
msgid "Edit address details"
-msgstr ""
+msgstr "Adress Detailer editéieren"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr ""
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr ""
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr ""
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefon"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr ""
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "Email"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr ""
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Adress"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr ""
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Note"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr ""
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Kontakt eroflueden"
-#: templates/part.cropphoto.php:64
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Kontakt läschen"
+
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
msgstr ""
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr ""
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Typ"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Postleetzuel"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Erweidert"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Strooss"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Staat"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Regioun"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Postleetzuel"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
-msgid "Country"
-msgstr "Land"
-
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
msgstr ""
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Dobäisetzen"
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr "Land"
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
@@ -657,31 +790,31 @@ msgstr ""
#: templates/part.edit_name_dialog.php:29
msgid "Mr"
-msgstr ""
+msgstr "M"
#: templates/part.edit_name_dialog.php:30
msgid "Sir"
-msgstr ""
+msgstr "Sir"
#: templates/part.edit_name_dialog.php:31
msgid "Mrs"
-msgstr ""
+msgstr "Mme"
#: templates/part.edit_name_dialog.php:32
msgid "Dr"
-msgstr ""
+msgstr "Dr"
#: templates/part.edit_name_dialog.php:35
msgid "Given name"
-msgstr ""
+msgstr "Virnumm"
#: templates/part.edit_name_dialog.php:37
msgid "Additional names"
-msgstr ""
+msgstr "Weider Nimm"
#: templates/part.edit_name_dialog.php:39
msgid "Family name"
-msgstr ""
+msgstr "Famillje Numm"
#: templates/part.edit_name_dialog.php:41
msgid "Hon. suffixes"
@@ -705,7 +838,7 @@ msgstr ""
#: templates/part.edit_name_dialog.php:49
msgid "Ph.D."
-msgstr ""
+msgstr "Ph.D."
#: templates/part.edit_name_dialog.php:50
msgid "Esq."
@@ -713,40 +846,11 @@ msgstr ""
#: templates/part.edit_name_dialog.php:51
msgid "Jr."
-msgstr ""
+msgstr "Jr."
#: templates/part.edit_name_dialog.php:52
msgid "Sn."
-msgstr ""
-
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Neit Adressbuch"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Adressbuch editéieren"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Ugewisene Numm"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr ""
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Späicheren"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Fortschécken"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Ofbriechen"
+msgstr "Sn."
#: templates/part.import.php:1
msgid "Import a contacts file"
@@ -764,57 +868,86 @@ msgstr ""
msgid "Name of new addressbook"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
-msgstr ""
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr ""
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
msgstr ""
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
msgstr ""
-#: templates/part.no_contacts.php:2
-msgid "You have no contacts in your addressbook."
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
msgstr ""
-#: templates/part.no_contacts.php:4
-msgid "Add contact"
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
msgstr ""
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
msgstr ""
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr ""
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr ""
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr ""
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
+msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Download"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Editéieren"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Neit Adressbuch"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Späicheren"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Ofbriechen"
+
+#: templates/settings.php:52
+msgid "More..."
msgstr ""
diff --git a/l10n/lb/core.po b/l10n/lb/core.po
index 0304df227cd..992723898f7 100644
--- a/l10n/lb/core.po
+++ b/l10n/lb/core.po
@@ -8,10 +8,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Luxembourgish (http://www.transifex.net/projects/p/owncloud/language/lb/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -34,51 +34,55 @@ msgstr "Des Kategorie existéiert schonn:"
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
msgstr ""
-#: js/js.js:520
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Astellungen"
+
+#: js/js.js:573
msgid "January"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
msgstr ""
@@ -107,10 +111,6 @@ msgid "Error"
msgstr ""
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Owncloud Passwuert reset"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "ownCloud Passwuert reset"
@@ -240,14 +240,10 @@ msgstr "Installatioun ofschléissen"
msgid "web services under your control"
msgstr "Web Servicer ënnert denger Kontroll"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Ausloggen"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Astellungen"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Passwuert vergiess?"
diff --git a/l10n/lb/files.po b/l10n/lb/files.po
index 5936d911244..c84f38bdc02 100644
--- a/l10n/lb/files.po
+++ b/l10n/lb/files.po
@@ -8,43 +8,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Luxembourgish (http://www.transifex.net/projects/p/owncloud/language/lb/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Keen Feeler, Datei ass komplett ropgelueden ginn"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Déi ropgelueden Datei ass méi grouss wei d'upload_max_filesize Eegenschaft an der php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Déi ropgelueden Datei ass nëmmen hallef ropgelueden ginn"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Et ass keng Datei ropgelueden ginn"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Et feelt en temporären Dossier"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Konnt net op den Disk schreiwen"
@@ -52,55 +52,83 @@ msgstr "Konnt net op den Disk schreiwen"
msgid "Files"
msgstr "Dateien"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Läschen"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
msgstr ""
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
msgstr ""
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Gréisst"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Geännert"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
msgstr ""
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
msgstr ""
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
msgstr ""
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
msgstr ""
@@ -172,10 +200,6 @@ msgstr "Share"
msgid "Download"
msgstr "Eroflueden"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Läschen"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Upload ze grouss"
diff --git a/l10n/lb/files_encryption.po b/l10n/lb/files_encryption.po
new file mode 100644
index 00000000000..5446d2366b4
--- /dev/null
+++ b/l10n/lb/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/lb/files_external.po b/l10n/lb/files_external.po
new file mode 100644
index 00000000000..0ea90478bd8
--- /dev/null
+++ b/l10n/lb/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/lb/files_sharing.po b/l10n/lb/files_sharing.po
new file mode 100644
index 00000000000..ca81053d9a2
--- /dev/null
+++ b/l10n/lb/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/lb/files_versions.po b/l10n/lb/files_versions.po
new file mode 100644
index 00000000000..1ecdf054fe4
--- /dev/null
+++ b/l10n/lb/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/lb/lib.po b/l10n/lb/lib.po
new file mode 100644
index 00000000000..bb55ec5a6fa
--- /dev/null
+++ b/l10n/lb/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/lb/settings.po b/l10n/lb/settings.po
index 533133695f2..6b1e939e537 100644
--- a/l10n/lb/settings.po
+++ b/l10n/lb/settings.po
@@ -8,16 +8,20 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Luxembourgish (http://www.transifex.net/projects/p/owncloud/language/lb/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
msgstr ""
@@ -26,23 +30,31 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID huet geännert"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Ongülteg Requête"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Sprooch huet geännert"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
msgstr ""
@@ -50,35 +62,55 @@ msgstr ""
msgid "Saving..."
msgstr ""
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "__language_name__"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Log"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Méi"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Setz deng App bei"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Wiel eng Applikatioun aus"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-Lizenséiert"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "vun"
@@ -170,34 +202,38 @@ msgstr "Hëllef iwwersetzen"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "benotz dës Adress fir dech un deng ownCloud iwwert däin Datei Manager ze verbannen"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Numm"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Passwuert"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Gruppen"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Erstellen"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Standard Quota"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Aner"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Quota"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Läschen"
diff --git a/l10n/lb/tasks.po b/l10n/lb/tasks.po
new file mode 100644
index 00000000000..62a9a4b722b
--- /dev/null
+++ b/l10n/lb/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/lb/user_ldap.po b/l10n/lb/user_ldap.po
new file mode 100644
index 00000000000..75252b76c95
--- /dev/null
+++ b/l10n/lb/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/lb/user_migrate.po b/l10n/lb/user_migrate.po
new file mode 100644
index 00000000000..7ecbf9a92b6
--- /dev/null
+++ b/l10n/lb/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/lb/user_openid.po b/l10n/lb/user_openid.po
new file mode 100644
index 00000000000..785483e7350
--- /dev/null
+++ b/l10n/lb/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/lt_LT/admin_dependencies_chk.po b/l10n/lt_LT/admin_dependencies_chk.po
new file mode 100644
index 00000000000..3cf43f2491e
--- /dev/null
+++ b/l10n/lt_LT/admin_dependencies_chk.po
@@ -0,0 +1,74 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Dr. ROX <to.dr.rox@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-23 02:02+0200\n"
+"PO-Revision-Date: 2012-08-22 13:30+0000\n"
+"Last-Translator: Dr. ROX <to.dr.rox@gmail.com>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr "Php-json modulis yra reikalingas duomenų keitimuisi tarp programų"
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr "Php-curl modulis automatiškai nuskaito tinklapio pavadinimą kuomet išsaugoma žymelė."
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr "Php-gd modulis yra naudojamas paveikslėlių miniatiūroms kurti."
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr "Php-ldap modulis yra reikalingas prisijungimui prie jūsų ldap serverio"
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr "Php-zip modulis yra reikalingas kelių failų atsiuntimui iš karto."
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr "Php-mb_multibyte modulis yra naudojamas apdoroti įvairius teksto kodavimo formatus."
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr "Php-ctype modulis yra reikalingas duomenų tikrinimui."
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr "Php-xml modulis yra reikalingas failų dalinimuisi naudojant webdav."
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr "allow_url_fopen direktyva turėtų būti nustatyta į \"1\" jei norite automatiškai gauti žinių bazės informaciją iš OCS serverių."
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr "Php-pdo modulis yra reikalingas duomenų saugojimui į owncloud duomenų bazę."
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr "PriklausomybÄ—s"
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr "Naudojama:"
diff --git a/l10n/lt_LT/admin_migrate.po b/l10n/lt_LT/admin_migrate.po
new file mode 100644
index 00000000000..8f3d5927fff
--- /dev/null
+++ b/l10n/lt_LT/admin_migrate.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:
+# Dr. ROX <to.dr.rox@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-23 02:02+0200\n"
+"PO-Revision-Date: 2012-08-22 14:12+0000\n"
+"Last-Translator: Dr. ROX <to.dr.rox@gmail.com>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr "Eksportuoti Å¡iÄ… ownCloud instaliacijÄ…"
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr "Bus sukurtas archyvas su visais owncloud duomenimis ir failais.\n Pasirinkite eksportavimo tipÄ…:"
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr "Eksportuoti"
diff --git a/l10n/lt_LT/bookmarks.po b/l10n/lt_LT/bookmarks.po
new file mode 100644
index 00000000000..4593ae1ec6f
--- /dev/null
+++ b/l10n/lt_LT/bookmarks.po
@@ -0,0 +1,61 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Dr. ROX <to.dr.rox@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-23 02:02+0200\n"
+"PO-Revision-Date: 2012-08-22 12:36+0000\n"
+"Last-Translator: Dr. ROX <to.dr.rox@gmail.com>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr "be pavadinimo"
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/lt_LT/calendar.po b/l10n/lt_LT/calendar.po
index 33742c956ee..9d116aac12f 100644
--- a/l10n/lt_LT/calendar.po
+++ b/l10n/lt_LT/calendar.po
@@ -8,21 +8,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Lithuanian (Lithuania) (http://www.transifex.net/projects/p/owncloud/language/lt_LT/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Kalendorių nerasta."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Įvykių nerasta."
@@ -30,300 +38,394 @@ msgstr "Įvykių nerasta."
msgid "Wrong calendar"
msgstr "Ne tas kalendorius"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Nauja laiko juosta:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Laiko zona pakeista"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Klaidinga užklausa"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Kalendorius"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
msgstr ""
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
msgstr ""
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
msgstr ""
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
msgstr ""
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Gimtadienis"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Verslas"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "SkambuÄiai"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Klientai"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Vykdytojas"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "IÅ¡eiginÄ—s"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "IdÄ—jos"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "KelionÄ—"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Jubiliejus"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Susitikimas"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Kiti"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Asmeniniai"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projektai"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Klausimai"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Darbas"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "be pavadinimo"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Naujas kalendorius"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Nekartoti"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Kasdien"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "KiekvienÄ… savaitÄ™"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "KiekvienÄ… savaitÄ—s dienÄ…"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Kas dvi savaites"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Kiekvieną mėnesį"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Kiekvienais metais"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "niekada"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr ""
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "pagal datÄ…"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "pagal mÄ—nesio dienÄ…"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "pagal savaitÄ—s dienÄ…"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Pirmadienis"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Antradienis"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "TreÄiadienis"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Ketvirtadienis"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Penktadienis"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Šeštadienis"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Sekmadienis"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr ""
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr ""
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr ""
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr ""
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr ""
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr ""
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr ""
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Sausis"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Vasaris"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Kovas"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Balandis"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Gegužė"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Birželis"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Liepa"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "Rugpjūtis"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "RugsÄ—jis"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Spalis"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "Lapkritis"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Gruodis"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr ""
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr ""
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr ""
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr ""
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Data"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Kal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Visa diena"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Naujas kalendorius"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Trūkstami laukai"
@@ -357,40 +459,32 @@ msgstr "Ä®vykis baigiasi anksÄiau nei jis prasideda"
msgid "There was a database fail"
msgstr "Įvyko duomenų bazės klaida"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "SavaitÄ—"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "MÄ—nuo"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Sąrašas"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Å iandien"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Kalendoriai"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Apdorojant failą įvyko klaida."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Pasirinkite naudojamus kalendorius"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Jūsų kalendoriai"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDav adresas"
@@ -402,19 +496,19 @@ msgstr "Bendri kalendoriai"
msgid "No shared calendars"
msgstr "Bendrų kalendorių nėra"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Dalintis kalendoriumi"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Atsisiųsti"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Keisti"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Trinti"
@@ -474,7 +568,7 @@ msgstr "Pasikartojantis"
#: templates/part.eventform.php:10 templates/part.showevent.php:5
msgid "Alarm"
-msgstr ""
+msgstr "Priminimas"
#: templates/part.eventform.php:11 templates/part.showevent.php:6
msgid "Attendees"
@@ -500,23 +594,23 @@ msgstr "Atskirkite kategorijas kableliais"
msgid "Edit categories"
msgstr "Redaguoti kategorijas"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Visos dienos įvykis"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Nuo"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Iki"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Papildomi nustatymai"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Vieta"
@@ -524,7 +618,7 @@ msgstr "Vieta"
msgid "Location of the Event"
msgstr "Įvykio vieta"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Aprašymas"
@@ -532,84 +626,86 @@ msgstr "Aprašymas"
msgid "Description of the Event"
msgstr "Įvykio aprašymas"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Kartoti"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr ""
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Pasirinkite savaitÄ—s dienas"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Pasirinkite dienas"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr ""
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr ""
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Pasirinkite mÄ—nesius"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Pasirinkite savaites"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr ""
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Intervalas"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Pabaiga"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr ""
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "sukurti naują kalendorių"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Importuoti kalendoriaus failÄ…"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Pasirinkite kalendorių"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "sukurti naują kalendorių"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Naujo kalendoriaus pavadinimas"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importuoti"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Importuojamas kalendorius"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Kalendorius sÄ—kmingai importuotas"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Importuoti"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Uždaryti"
@@ -625,45 +721,73 @@ msgstr "Peržiūrėti įvykį"
msgid "No categories selected"
msgstr "Nepasirinktos jokios katagorijos"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Pasirinkite kategorijÄ…"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr ""
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr ""
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Laiko juosta"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Visada tikrinti laiko zonos pasikeitimus"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Laiko formatas"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24val"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12val"
-#: templates/settings.php:40
-msgid "First day of the week"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "CalDAV kalendoriaus synchronizavimo adresas:"
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/lt_LT/contacts.po b/l10n/lt_LT/contacts.po
index 7191a755754..963907b2974 100644
--- a/l10n/lt_LT/contacts.po
+++ b/l10n/lt_LT/contacts.po
@@ -8,220 +8,206 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Lithuanian (Lithuania) (http://www.transifex.net/projects/p/owncloud/language/lt_LT/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Klaida (de)aktyvuojant adresų knygą."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Pridedant kontaktą įvyko klaida."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr ""
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
msgstr ""
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
msgstr ""
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
msgstr ""
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr ""
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr ""
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr ""
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr ""
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
-msgstr ""
+msgstr "Kontaktų nerasta."
-#: ajax/contactdetails.php:37
-msgid "Missing ID"
-msgstr ""
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Pridedant kontaktą įvyko klaida."
-#: ajax/contactdetails.php:41
-msgid "Error parsing VCard for ID: \""
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
msgstr ""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
msgstr ""
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Klaida pridedant adresų knygą."
-
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Klaida aktyvuojant adresų knygą."
-
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
-#: ajax/uploadphoto.php:68
-msgid "No contact ID was submitted."
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/currentphoto.php:40
-msgid "Error reading contact photo."
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/currentphoto.php:52
-msgid "Error saving temporary file."
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
msgstr ""
-#: ajax/currentphoto.php:55
-msgid "The loading photo is not valid."
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
msgstr ""
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
msgstr ""
-#: ajax/deleteproperty.php:36
+#: ajax/contact/deleteproperty.php:37
msgid "Information about vCard is incorrect. Please reload the page."
msgstr "Informacija apie vCard yra neteisinga. "
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
+#: ajax/contact/details.php:31
+msgid "Missing ID"
msgstr ""
-#: ajax/editname.php:37
-msgid "Contact ID is missing."
+#: ajax/contact/details.php:36
+msgid "Error parsing VCard for ID: \""
msgstr ""
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
msgstr ""
-#: ajax/oc_photo.php:41
-msgid "No photo path was submitted."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
msgstr ""
-#: ajax/oc_photo.php:48
-msgid "File doesn't exist:"
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
msgstr ""
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
-msgid "Error loading image."
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
+#: ajax/uploadphoto.php:68
+msgid "No contact ID was submitted."
msgstr ""
-#: ajax/savecrop.php:68
-msgid "Error getting contact object."
-msgstr ""
+#: ajax/currentphoto.php:36
+msgid "Error reading contact photo."
+msgstr "Klaida skaitant kontakto nuotraukÄ…."
-#: ajax/savecrop.php:75
-msgid "Error getting PHOTO property."
+#: ajax/currentphoto.php:48
+msgid "Error saving temporary file."
msgstr ""
-#: ajax/savecrop.php:88
-msgid "Error saving contact."
-msgstr ""
+#: ajax/currentphoto.php:51
+msgid "The loading photo is not valid."
+msgstr "Netinkama įkeliama nuotrauka."
-#: ajax/savecrop.php:98
-msgid "Error resizing image"
+#: ajax/editname.php:31
+msgid "Contact ID is missing."
msgstr ""
-#: ajax/savecrop.php:101
-msgid "Error cropping image"
+#: ajax/oc_photo.php:32
+msgid "No photo path was submitted."
msgstr ""
-#: ajax/savecrop.php:104
-msgid "Error creating temporary image"
-msgstr ""
+#: ajax/oc_photo.php:39
+msgid "File doesn't exist:"
+msgstr "Failas neegzistuoja:"
-#: ajax/savecrop.php:107
-msgid "Error finding image: "
-msgstr ""
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
+msgid "Error loading image."
+msgstr "Klaida įkeliant nuotrauką."
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
+#: ajax/savecrop.php:69
+msgid "Error getting contact object."
msgstr ""
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
+#: ajax/savecrop.php:79
+msgid "Error getting PHOTO property."
msgstr ""
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
+#: ajax/savecrop.php:98
+msgid "Error saving contact."
msgstr ""
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
+#: ajax/savecrop.php:109
+msgid "Error resizing image"
msgstr ""
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
+#: ajax/savecrop.php:112
+msgid "Error cropping image"
msgstr ""
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
+#: ajax/savecrop.php:115
+msgid "Error creating temporary image"
msgstr ""
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
+#: ajax/savecrop.php:118
+msgid "Error finding image: "
msgstr ""
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr ""
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Failas įkeltas sėkmingai, be klaidų"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
-msgstr ""
+msgstr "Įkeliamo failo dydis viršija upload_max_filesize nustatymą php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
-msgstr ""
+msgstr "Įkeliamo failo dydis viršija MAX_FILE_SIZE nustatymą, kuris naudojamas HTML formoje."
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "Failas buvo įkeltas tik dalinai"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
-msgstr ""
+msgstr "Nebuvo įkeltas joks failas"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
msgstr ""
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
msgstr ""
@@ -229,415 +215,562 @@ msgstr ""
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Kontaktai"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
msgstr ""
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
msgstr ""
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:425
+msgid "Permission error"
+msgstr ""
+
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
msgstr ""
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
msgstr ""
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
msgstr ""
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/loader.js:49
+msgid "Result: "
msgstr ""
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
+#: js/loader.js:49
+msgid " imported, "
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: js/loader.js:49
+msgid " failed."
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Tai ne jūsų adresų knygelė."
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Kontaktas nerastas"
+
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Tai ne jūsų adresų knygelė."
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Kontaktas nerastas"
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Adresas"
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefonas"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "El. paštas"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organizacija"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Darbo"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Namų"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mobilusis"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "ŽinuÄių"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Balso"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
-msgstr ""
+msgstr "Žinutė"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Faksas"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Vaizdo"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Pranešimų gaviklis"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
+msgstr "Internetas"
+
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Gimtadienis"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
msgstr ""
-#: lib/hooks.php:79
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr ""
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Kontaktas"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "PridÄ—ti kontaktÄ…"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Adresų knygos"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
msgstr ""
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Nauja adresų knyga"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
+#: templates/index.php:39
+msgid "Navigation"
msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDAV nuoroda"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Atsisiųsti"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Keisti"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Trinti"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Atsisųsti kontaktą"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "IÅ¡trinti kontaktÄ…"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr ""
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr ""
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr ""
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organizacija"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Trinti"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
-msgstr ""
+msgstr "Slapyvardis"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
+msgstr "Įveskite slapyvardį"
+
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
msgstr ""
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Gimtadienis"
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr ""
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr ""
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr ""
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr ""
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr ""
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr ""
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr ""
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr ""
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr ""
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr ""
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr ""
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr ""
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefonas"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr ""
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "El. paštas"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr ""
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Adresas"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
+#: templates/part.contact.php:133
+msgid "Note"
msgstr ""
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr ""
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Atsisųsti kontaktą"
-#: templates/part.cropphoto.php:64
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "IÅ¡trinti kontaktÄ…"
+
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
msgstr ""
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr ""
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Tipas"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Pašto dėžutė"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr ""
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "GatvÄ—"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Miestas"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Regionas"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Pašto indeksas"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
-msgid "Country"
-msgstr "Å alis"
-
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
msgstr ""
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "PridÄ—ti"
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr "Å alis"
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
@@ -719,35 +852,6 @@ msgstr ""
msgid "Sn."
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Nauja adresų knyga"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Redaguoti adresų knygą"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Rodomas vardas"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Aktyvus"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "IÅ¡saugoti"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr ""
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Atšaukti"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr ""
@@ -764,57 +868,86 @@ msgstr ""
msgid "Name of new addressbook"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
-msgstr ""
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr ""
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
msgstr ""
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
msgstr ""
-#: templates/part.no_contacts.php:2
-msgid "You have no contacts in your addressbook."
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
msgstr ""
-#: templates/part.no_contacts.php:4
-msgid "Add contact"
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
msgstr ""
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
msgstr ""
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr ""
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr ""
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr ""
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr ""
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Atsisiųsti"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Keisti"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Nauja adresų knyga"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "IÅ¡saugoti"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Atšaukti"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/lt_LT/core.po b/l10n/lt_LT/core.po
index c2bd15b3ef3..60b338d51cc 100644
--- a/l10n/lt_LT/core.po
+++ b/l10n/lt_LT/core.po
@@ -8,10 +8,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Lithuanian (Lithuania) (http://www.transifex.net/projects/p/owncloud/language/lt_LT/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -20,11 +20,11 @@ msgstr ""
#: ajax/vcategories/add.php:23 ajax/vcategories/delete.php:23
msgid "Application name not provided."
-msgstr ""
+msgstr "Nepateiktas programos pavadinimas."
#: ajax/vcategories/add.php:29
msgid "No category to add?"
-msgstr ""
+msgstr "NepridÄ—site jokios kategorijos?"
#: ajax/vcategories/add.php:36
msgid "This category already exists: "
@@ -32,85 +32,85 @@ msgstr "Tokia kategorija jau yra:"
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-#: js/js.js:520
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Nustatymai"
+
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Sausis"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Vasaris"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Kovas"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "Balandis"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Gegužė"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Birželis"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Liepa"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "Rugpjūtis"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "RugsÄ—jis"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Spalis"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "Lapkritis"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "Gruodis"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Atšaukti"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Ne"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Taip"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Gerai"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Trynimui nepasirinkta jokia kategorija."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Klaida"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Owncloud slaptažodžio atkūrimas"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "ownCloud slaptažodžio atkūrimas"
@@ -240,14 +240,10 @@ msgstr "Baigti diegimÄ…"
msgid "web services under your control"
msgstr "jūsų valdomos web paslaugos"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Atsijungti"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Nustatymai"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Pamiršote slaptažodį?"
diff --git a/l10n/lt_LT/files.po b/l10n/lt_LT/files.po
index b1643eeead2..bae53dc5d66 100644
--- a/l10n/lt_LT/files.po
+++ b/l10n/lt_LT/files.po
@@ -3,48 +3,49 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Denisas Kulumbegašvili <>, 2012.
# Dr. ROX <to.dr.rox@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Lithuanian (Lithuania) (http://www.transifex.net/projects/p/owncloud/language/lt_LT/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 07:58+0000\n"
+"Last-Translator: Dr. ROX <to.dr.rox@gmail.com>\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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Klaidų nėra, failas įkeltas sėkmingai"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Įkeliamo failo dydis viršija upload_max_filesize parametrą php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Failas buvo įkeltas tik dalinai"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Nebuvo įkeltas nė vienas failas"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "NÄ—ra laikinojo katalogo"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Nepavyko įrašyti į diską"
@@ -52,65 +53,93 @@ msgstr "Nepavyko įrašyti į diską"
msgid "Files"
msgstr "Failai"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "IÅ¡trinti"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
-msgid "generating ZIP-file, it may take some time."
+#: js/filelist.js:141
+msgid "replace"
msgstr ""
-#: js/files.js:199
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "atšaukti"
+
+#: js/filelist.js:195
+msgid "replaced"
msgstr ""
-#: js/files.js:199
-msgid "Upload Error"
+#: js/filelist.js:195
+msgid "with"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
-msgid "Pending"
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
msgstr ""
-#: js/files.js:332
-msgid "Upload cancelled."
+#: js/filelist.js:246
+msgid "deleted"
msgstr ""
-#: js/files.js:456
+#: js/files.js:171
+msgid "generating ZIP-file, it may take some time."
+msgstr "kuriamas ZIP archyvas, tai gali užtrukti šiek tiek laiko."
+
+#: js/files.js:200
+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:200
+msgid "Upload Error"
+msgstr "Įkėlimo klaida"
+
+#: js/files.js:228 js/files.js:319 js/files.js:348
+msgid "Pending"
+msgstr "Laukiantis"
+
+#: js/files.js:333
+msgid "Upload cancelled."
+msgstr "Įkėlimas atšauktas."
+
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "Pavadinime negali būti naudojamas ženklas \"/\"."
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Dydis"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Pakeista"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "katalogas"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "katalogai"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "failas"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "failai"
#: templates/admin.php:5
msgid "File handling"
-msgstr ""
+msgstr "Failų tvarkymas"
#: templates/admin.php:7
msgid "Maximum upload size"
-msgstr "Maksimalus failo dydis"
+msgstr "Maksimalus įkeliamo failo dydis"
#: templates/admin.php:7
msgid "max. possible: "
@@ -122,15 +151,15 @@ msgstr ""
#: templates/admin.php:9
msgid "Enable ZIP-download"
-msgstr ""
+msgstr "Įjungti atsisiuntimą ZIP archyvu"
#: templates/admin.php:11
msgid "0 is unlimited"
-msgstr ""
+msgstr "0 yra neribotas"
#: templates/admin.php:12
msgid "Maximum input size for ZIP files"
-msgstr ""
+msgstr "Maksimalus ZIP archyvo failo dydis"
#: templates/index.php:7
msgid "New"
@@ -172,10 +201,6 @@ msgstr "Dalintis"
msgid "Download"
msgstr "Atsisiųsti"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "IÅ¡trinti"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Įkėlimui failas per didelis"
@@ -188,8 +213,8 @@ msgstr "Bandomų įkelti failų dydis viršija maksimalų leidžiamą šiame ser
#: templates/index.php:71
msgid "Files are being scanned, please wait."
-msgstr ""
+msgstr "Skenuojami failai, prašome palaukti."
#: templates/index.php:74
msgid "Current scanning"
-msgstr ""
+msgstr "Å iuo metu skenuojama"
diff --git a/l10n/lt_LT/files_encryption.po b/l10n/lt_LT/files_encryption.po
new file mode 100644
index 00000000000..41529366d31
--- /dev/null
+++ b/l10n/lt_LT/files_encryption.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Dr. ROX <to.dr.rox@gmail.com>, 2012.
+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"
+"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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr "Å ifravimas"
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr "Nešifruoti pasirinkto tipo failų"
+
+#: templates/settings.php:5
+msgid "None"
+msgstr "Nieko"
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr "Įjungti šifravimą"
diff --git a/l10n/lt_LT/files_external.po b/l10n/lt_LT/files_external.po
new file mode 100644
index 00000000000..d4208432fa4
--- /dev/null
+++ b/l10n/lt_LT/files_external.po
@@ -0,0 +1,83 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Dr. ROX <to.dr.rox@gmail.com>, 2012.
+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:31+0000\n"
+"Last-Translator: Dr. ROX <to.dr.rox@gmail.com>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr "Konfigūracija"
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr "Nustatymai"
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr "Nieko nepasirinkta"
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr "Visi vartotojai"
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr "GrupÄ—s"
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr "Vartotojai"
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr "IÅ¡trinti"
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/lt_LT/files_sharing.po b/l10n/lt_LT/files_sharing.po
new file mode 100644
index 00000000000..d1693bb806f
--- /dev/null
+++ b/l10n/lt_LT/files_sharing.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Dr. ROX <to.dr.rox@gmail.com>, 2012.
+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-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr "Dydis"
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr "Pakeista"
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr "IÅ¡trinti viskÄ…"
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr "IÅ¡trinti"
diff --git a/l10n/lt_LT/files_versions.po b/l10n/lt_LT/files_versions.po
new file mode 100644
index 00000000000..78d03bc0515
--- /dev/null
+++ b/l10n/lt_LT/files_versions.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Dr. ROX <to.dr.rox@gmail.com>, 2012.
+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:34+0000\n"
+"Last-Translator: Dr. ROX <to.dr.rox@gmail.com>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr "Panaikinti visų versijų galiojimą"
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr "Įjungti failų versijų vedimą"
diff --git a/l10n/lt_LT/lib.po b/l10n/lt_LT/lib.po
new file mode 100644
index 00000000000..cf1cc1edba5
--- /dev/null
+++ b/l10n/lt_LT/lib.po
@@ -0,0 +1,113 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Dr. ROX <to.dr.rox@gmail.com>, 2012.
+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:43+0000\n"
+"Last-Translator: Dr. ROX <to.dr.rox@gmail.com>\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"
+
+#: app.php:288
+msgid "Help"
+msgstr "Pagalba"
+
+#: app.php:295
+msgid "Personal"
+msgstr "Asmeniniai"
+
+#: app.php:300
+msgid "Settings"
+msgstr "Nustatymai"
+
+#: app.php:305
+msgid "Users"
+msgstr "Vartotojai"
+
+#: app.php:312
+msgid "Apps"
+msgstr "Programos"
+
+#: app.php:314
+msgid "Admin"
+msgstr "Administravimas"
+
+#: files.php:276
+msgid "ZIP download is turned off."
+msgstr "ZIP atsisiuntimo galimybė yra išjungta."
+
+#: files.php:277
+msgid "Files need to be downloaded one by one."
+msgstr "Failai turi bÅ«ti parsiunÄiami vienas po kito."
+
+#: files.php:277 files.php:302
+msgid "Back to Files"
+msgstr "Atgal į Failus"
+
+#: files.php:301
+msgid "Selected files too large to generate zip file."
+msgstr "Pasirinkti failai per dideli archyvavimui į ZIP."
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr "Programa neįjungta"
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr "Autentikacijos klaida"
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr "prieš 1 minutę"
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr "prieÅ¡ %d minuÄių"
+
+#: template.php:91
+msgid "today"
+msgstr "Å¡iandien"
+
+#: template.php:92
+msgid "yesterday"
+msgstr "vakar"
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr "prieš %d dienų"
+
+#: template.php:94
+msgid "last month"
+msgstr "praėjusį mėnesį"
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr "pereitais metais"
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/lt_LT/settings.po b/l10n/lt_LT/settings.po
index c39cde8a336..8b8a1840192 100644
--- a/l10n/lt_LT/settings.po
+++ b/l10n/lt_LT/settings.po
@@ -8,77 +8,109 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Lithuanian (Lithuania) (http://www.transifex.net/projects/p/owncloud/language/lt_LT/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 07:15+0000\n"
+"Last-Translator: Dr. ROX <to.dr.rox@gmail.com>\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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "Neįmanoma įkelti sąrašo iš Programų Katalogo"
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "El. paštas išsaugotas"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Netinkamas el. paštas"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID pakeistas"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Klaidinga užklausa"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Kalba pakeista"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "Klaida"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "IÅ¡jungti"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Įjungti"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Saugoma.."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "Kalba"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "Saugumo įspėjimas"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "Cron"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr "naudoti sistemos cron servisÄ…"
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Žurnalas"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Daugiau"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "PridÄ—ti programÄ—lÄ™"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Pasirinkite programÄ…"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-licencijuota"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr ""
@@ -170,34 +202,38 @@ msgstr "Padėkite išversti"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "naudokite šį adresą, jei norite pasiekti savo ownCloud per failų tvarkyklę"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Vardas"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Slaptažodis"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "GrupÄ—s"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Sukurti"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Numatytoji kvota"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Kita"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Limitas"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "IÅ¡trinti"
diff --git a/l10n/lt_LT/tasks.po b/l10n/lt_LT/tasks.po
new file mode 100644
index 00000000000..4d53aef5a79
--- /dev/null
+++ b/l10n/lt_LT/tasks.po
@@ -0,0 +1,107 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Dr. ROX <to.dr.rox@gmail.com>, 2012.
+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 14:05+0000\n"
+"Last-Translator: Dr. ROX <to.dr.rox@gmail.com>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr "Netinkama data/laikas"
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr "Be kategorijos"
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr "TuÅ¡Äias apraÅ¡ymas"
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr "Netinkamas baigimo procentas"
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr "Svarbūs"
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr "Daugiau"
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr "Mažiau"
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr "IÅ¡trinti"
diff --git a/l10n/lt_LT/user_ldap.po b/l10n/lt_LT/user_ldap.po
new file mode 100644
index 00000000000..d648d9ba0ca
--- /dev/null
+++ b/l10n/lt_LT/user_ldap.po
@@ -0,0 +1,165 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Dr. ROX <to.dr.rox@gmail.com>, 2012.
+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 13:55+0000\n"
+"Last-Translator: Dr. ROX <to.dr.rox@gmail.com>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr "Slaptažodis"
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr "GrupÄ—s filtras"
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr "Prievadas"
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr "Naudoti TLS"
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr "IÅ¡jungti SSL sertifikato tikrinimÄ…."
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr "Nerekomenduojama, naudokite tik testavimui."
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr "Pagalba"
diff --git a/l10n/lt_LT/user_migrate.po b/l10n/lt_LT/user_migrate.po
new file mode 100644
index 00000000000..a0c8819f796
--- /dev/null
+++ b/l10n/lt_LT/user_migrate.po
@@ -0,0 +1,52 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Dr. ROX <to.dr.rox@gmail.com>, 2012.
+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 13:34+0000\n"
+"Last-Translator: Dr. ROX <to.dr.rox@gmail.com>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr "Eksportuoti"
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr "Įvyko klaida kuriant eksportuojamą failą"
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr "Įvyko klaida"
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr "Eksportuoti jūsų vartotojo paskyrą"
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr "Bus sukurtas suglaudintas failas su jūsų ownCloud vartotojo paskyra."
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr "Importuoti vartotojo paskyrÄ…"
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr "ownCloud vartotojo paskyros Zip archyvas"
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr "Importuoti"
diff --git a/l10n/lt_LT/user_openid.po b/l10n/lt_LT/user_openid.po
new file mode 100644
index 00000000000..9567cf6ec3a
--- /dev/null
+++ b/l10n/lt_LT/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/lv/admin_dependencies_chk.po b/l10n/lv/admin_dependencies_chk.po
new file mode 100644
index 00000000000..0ad70f34491
--- /dev/null
+++ b/l10n/lv/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/lv/admin_migrate.po b/l10n/lv/admin_migrate.po
new file mode 100644
index 00000000000..2be34daece4
--- /dev/null
+++ b/l10n/lv/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/lv/bookmarks.po b/l10n/lv/bookmarks.po
new file mode 100644
index 00000000000..2114fcd31a9
--- /dev/null
+++ b/l10n/lv/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/lv/calendar.po b/l10n/lv/calendar.po
new file mode 100644
index 00000000000..f3a17a29c46
--- /dev/null
+++ b/l10n/lv/calendar.po
@@ -0,0 +1,813 @@
+# 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: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
+
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
+msgid "No calendars found."
+msgstr ""
+
+#: ajax/categories/rescan.php:37
+msgid "No events found."
+msgstr ""
+
+#: ajax/event/edit.form.php:20
+msgid "Wrong calendar"
+msgstr ""
+
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
+#: ajax/settings/guesstimezone.php:25
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settings/settimezone.php:23
+msgid "Timezone changed"
+msgstr ""
+
+#: ajax/settings/settimezone.php:25
+msgid "Invalid request"
+msgstr ""
+
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
+msgid "Calendar"
+msgstr ""
+
+#: js/calendar.js:832
+msgid "ddd"
+msgstr ""
+
+#: js/calendar.js:833
+msgid "ddd M/d"
+msgstr ""
+
+#: js/calendar.js:834
+msgid "dddd M/d"
+msgstr ""
+
+#: js/calendar.js:837
+msgid "MMMM yyyy"
+msgstr ""
+
+#: js/calendar.js:839
+msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
+msgstr ""
+
+#: js/calendar.js:841
+msgid "dddd, MMM d, yyyy"
+msgstr ""
+
+#: lib/app.php:121
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:122
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:123
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:124
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:125
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:126
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:127
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:128
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:129
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:130
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:131
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:132
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:133
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:134
+msgid "Questions"
+msgstr ""
+
+#: lib/app.php:135
+msgid "Work"
+msgstr ""
+
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
+msgid "unnamed"
+msgstr ""
+
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr ""
+
+#: lib/object.php:372
+msgid "Does not repeat"
+msgstr ""
+
+#: lib/object.php:373
+msgid "Daily"
+msgstr ""
+
+#: lib/object.php:374
+msgid "Weekly"
+msgstr ""
+
+#: lib/object.php:375
+msgid "Every Weekday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "Bi-Weekly"
+msgstr ""
+
+#: lib/object.php:377
+msgid "Monthly"
+msgstr ""
+
+#: lib/object.php:378
+msgid "Yearly"
+msgstr ""
+
+#: lib/object.php:388
+msgid "never"
+msgstr ""
+
+#: lib/object.php:389
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:390
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:400
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:401
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:412 templates/calendar.php:5
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:413 templates/calendar.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:414 templates/calendar.php:5
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:415 templates/calendar.php:5
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:416 templates/calendar.php:5
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:427
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:428
+msgid "first"
+msgstr ""
+
+#: lib/object.php:429
+msgid "second"
+msgstr ""
+
+#: lib/object.php:430
+msgid "third"
+msgstr ""
+
+#: lib/object.php:431
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:432
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:433
+msgid "last"
+msgstr ""
+
+#: lib/object.php:467 templates/calendar.php:7
+msgid "January"
+msgstr ""
+
+#: lib/object.php:468 templates/calendar.php:7
+msgid "February"
+msgstr ""
+
+#: lib/object.php:469 templates/calendar.php:7
+msgid "March"
+msgstr ""
+
+#: lib/object.php:470 templates/calendar.php:7
+msgid "April"
+msgstr ""
+
+#: lib/object.php:471 templates/calendar.php:7
+msgid "May"
+msgstr ""
+
+#: lib/object.php:472 templates/calendar.php:7
+msgid "June"
+msgstr ""
+
+#: lib/object.php:473 templates/calendar.php:7
+msgid "July"
+msgstr ""
+
+#: lib/object.php:474 templates/calendar.php:7
+msgid "August"
+msgstr ""
+
+#: lib/object.php:475 templates/calendar.php:7
+msgid "September"
+msgstr ""
+
+#: lib/object.php:476 templates/calendar.php:7
+msgid "October"
+msgstr ""
+
+#: lib/object.php:477 templates/calendar.php:7
+msgid "November"
+msgstr ""
+
+#: lib/object.php:478 templates/calendar.php:7
+msgid "December"
+msgstr ""
+
+#: lib/object.php:488
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:489
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:490
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:491
+msgid "by day and month"
+msgstr ""
+
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:43
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
+#: templates/calendar.php:11
+msgid "All day"
+msgstr ""
+
+#: templates/calendar.php:13
+msgid "Missing fields"
+msgstr ""
+
+#: templates/calendar.php:14 templates/part.eventform.php:19
+#: templates/part.showevent.php:11
+msgid "Title"
+msgstr ""
+
+#: templates/calendar.php:16
+msgid "From Date"
+msgstr ""
+
+#: templates/calendar.php:17
+msgid "From Time"
+msgstr ""
+
+#: templates/calendar.php:18
+msgid "To Date"
+msgstr ""
+
+#: templates/calendar.php:19
+msgid "To Time"
+msgstr ""
+
+#: templates/calendar.php:20
+msgid "The event ends before it starts"
+msgstr ""
+
+#: templates/calendar.php:21
+msgid "There was a database fail"
+msgstr ""
+
+#: templates/calendar.php:39
+msgid "Week"
+msgstr ""
+
+#: templates/calendar.php:40
+msgid "Month"
+msgstr ""
+
+#: templates/calendar.php:41
+msgid "List"
+msgstr ""
+
+#: templates/calendar.php:45
+msgid "Today"
+msgstr ""
+
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
+
+#: templates/part.choosecalendar.php:2
+msgid "Your calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.php:27
+#: templates/part.choosecalendar.rowfields.php:11
+msgid "CalDav Link"
+msgstr ""
+
+#: templates/part.choosecalendar.php:31
+msgid "Shared calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.php:48
+msgid "No shared calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:8
+msgid "Share Calendar"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:14
+msgid "Download"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:17
+msgid "Edit"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:20
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.shared.php:4
+msgid "shared with you by"
+msgstr ""
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr ""
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr ""
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr ""
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr ""
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr ""
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr ""
+
+#: templates/part.eventform.php:8 templates/part.showevent.php:3
+msgid "Eventinfo"
+msgstr ""
+
+#: templates/part.eventform.php:9 templates/part.showevent.php:4
+msgid "Repeating"
+msgstr ""
+
+#: templates/part.eventform.php:10 templates/part.showevent.php:5
+msgid "Alarm"
+msgstr ""
+
+#: templates/part.eventform.php:11 templates/part.showevent.php:6
+msgid "Attendees"
+msgstr ""
+
+#: templates/part.eventform.php:13
+msgid "Share"
+msgstr ""
+
+#: templates/part.eventform.php:21
+msgid "Title of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:27 templates/part.showevent.php:19
+msgid "Category"
+msgstr ""
+
+#: templates/part.eventform.php:29
+msgid "Separate categories with commas"
+msgstr ""
+
+#: templates/part.eventform.php:30
+msgid "Edit categories"
+msgstr ""
+
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
+msgid "All Day Event"
+msgstr ""
+
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
+msgid "From"
+msgstr ""
+
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
+msgid "To"
+msgstr ""
+
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
+msgid "Advanced options"
+msgstr ""
+
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
+msgid "Location"
+msgstr ""
+
+#: templates/part.eventform.php:83
+msgid "Location of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
+msgid "Description"
+msgstr ""
+
+#: templates/part.eventform.php:91
+msgid "Description of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
+msgid "Repeat"
+msgstr ""
+
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:164 templates/part.eventform.php:177
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
+
+#: templates/part.import.php:36
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
+
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
+
+#: templates/part.import.php:47
+msgid "Import"
+msgstr ""
+
+#: templates/part.import.php:56
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr ""
+
+#: templates/part.showevent.php:1
+msgid "View an event"
+msgstr ""
+
+#: templates/part.showevent.php:23
+msgid "No categories selected"
+msgstr ""
+
+#: templates/part.showevent.php:37
+msgid "of"
+msgstr ""
+
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
+msgid "at"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "Timezone"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
+
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
+
+#: templates/settings.php:57
+msgid "24h"
+msgstr ""
+
+#: templates/settings.php:58
+msgid "12h"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
+
+#: templates/share.dropdown.php:20
+msgid "Users"
+msgstr ""
+
+#: templates/share.dropdown.php:21
+msgid "select users"
+msgstr ""
+
+#: templates/share.dropdown.php:36 templates/share.dropdown.php:62
+msgid "Editable"
+msgstr ""
+
+#: templates/share.dropdown.php:48
+msgid "Groups"
+msgstr ""
+
+#: templates/share.dropdown.php:49
+msgid "select groups"
+msgstr ""
+
+#: templates/share.dropdown.php:75
+msgid "make public"
+msgstr ""
diff --git a/l10n/lv/contacts.po b/l10n/lv/contacts.po
new file mode 100644
index 00000000000..206e0cb05d4
--- /dev/null
+++ b/l10n/lv/contacts.po
@@ -0,0 +1,952 @@
+# 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: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr ""
+
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr ""
+
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr ""
+
+#: ajax/categories/categoriesfor.php:17
+msgid "No ID provided"
+msgstr ""
+
+#: ajax/categories/categoriesfor.php:34
+msgid "Error setting checksum."
+msgstr ""
+
+#: ajax/categories/delete.php:19
+msgid "No categories selected for deletion."
+msgstr ""
+
+#: ajax/categories/delete.php:26
+msgid "No address books found."
+msgstr ""
+
+#: ajax/categories/delete.php:34
+msgid "No contacts found."
+msgstr ""
+
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr ""
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr ""
+
+#: ajax/contact/details.php:31
+msgid "Missing ID"
+msgstr ""
+
+#: ajax/contact/details.php:36
+msgid "Error parsing VCard for ID: \""
+msgstr ""
+
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr ""
+
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr ""
+
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr ""
+
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
+#: ajax/uploadphoto.php:68
+msgid "No contact ID was submitted."
+msgstr ""
+
+#: ajax/currentphoto.php:36
+msgid "Error reading contact photo."
+msgstr ""
+
+#: ajax/currentphoto.php:48
+msgid "Error saving temporary file."
+msgstr ""
+
+#: ajax/currentphoto.php:51
+msgid "The loading photo is not valid."
+msgstr ""
+
+#: ajax/editname.php:31
+msgid "Contact ID is missing."
+msgstr ""
+
+#: ajax/oc_photo.php:32
+msgid "No photo path was submitted."
+msgstr ""
+
+#: ajax/oc_photo.php:39
+msgid "File doesn't exist:"
+msgstr ""
+
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
+msgid "Error loading image."
+msgstr ""
+
+#: ajax/savecrop.php:69
+msgid "Error getting contact object."
+msgstr ""
+
+#: ajax/savecrop.php:79
+msgid "Error getting PHOTO property."
+msgstr ""
+
+#: ajax/savecrop.php:98
+msgid "Error saving contact."
+msgstr ""
+
+#: ajax/savecrop.php:109
+msgid "Error resizing image"
+msgstr ""
+
+#: ajax/savecrop.php:112
+msgid "Error cropping image"
+msgstr ""
+
+#: ajax/savecrop.php:115
+msgid "Error creating temporary image"
+msgstr ""
+
+#: ajax/savecrop.php:118
+msgid "Error finding image: "
+msgstr ""
+
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
+msgid "Error uploading contacts to storage."
+msgstr ""
+
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
+msgid "Couldn't save temporary image: "
+msgstr ""
+
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
+msgid "Couldn't load temporary image: "
+msgstr ""
+
+#: ajax/uploadphoto.php:71
+msgid "No file was uploaded. Unknown error"
+msgstr ""
+
+#: appinfo/app.php:21
+msgid "Contacts"
+msgstr ""
+
+#: js/contacts.js:71
+msgid "Sorry, this functionality has not been implemented yet"
+msgstr ""
+
+#: js/contacts.js:71
+msgid "Not implemented"
+msgstr ""
+
+#: js/contacts.js:76
+msgid "Couldn't get a valid address."
+msgstr ""
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
+msgid "Error"
+msgstr ""
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Permission error"
+msgstr ""
+
+#: js/contacts.js:763
+msgid "This property has to be non-empty."
+msgstr ""
+
+#: js/contacts.js:789
+msgid "Couldn't serialize elements."
+msgstr ""
+
+#: js/contacts.js:921 js/contacts.js:939
+msgid ""
+"'deleteProperty' called without type argument. Please report at "
+"bugs.owncloud.org"
+msgstr ""
+
+#: js/contacts.js:958
+msgid "Edit name"
+msgstr ""
+
+#: js/contacts.js:1250
+msgid "No files selected for upload."
+msgstr ""
+
+#: js/contacts.js:1258
+msgid ""
+"The file you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr ""
+
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
+msgid "Select type"
+msgstr ""
+
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr ""
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr ""
+
+#: js/loader.js:49
+msgid "Result: "
+msgstr ""
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr ""
+
+#: js/loader.js:49
+msgid " failed."
+msgstr ""
+
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
+msgstr ""
+
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr ""
+
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr ""
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr ""
+
+#: lib/app.php:116
+msgid "Jabber"
+msgstr ""
+
+#: lib/app.php:121
+msgid "AIM"
+msgstr ""
+
+#: lib/app.php:126
+msgid "MSN"
+msgstr ""
+
+#: lib/app.php:131
+msgid "Twitter"
+msgstr ""
+
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr ""
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
+
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
+
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
+
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
+
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
+msgid "Work"
+msgstr ""
+
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
+msgid "Home"
+msgstr ""
+
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
+msgid "Mobile"
+msgstr ""
+
+#: lib/app.php:203
+msgid "Text"
+msgstr ""
+
+#: lib/app.php:204
+msgid "Voice"
+msgstr ""
+
+#: lib/app.php:205
+msgid "Message"
+msgstr ""
+
+#: lib/app.php:206
+msgid "Fax"
+msgstr ""
+
+#: lib/app.php:207
+msgid "Video"
+msgstr ""
+
+#: lib/app.php:208
+msgid "Pager"
+msgstr ""
+
+#: lib/app.php:215
+msgid "Internet"
+msgstr ""
+
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
+msgid "{name}'s Birthday"
+msgstr ""
+
+#: lib/search.php:15
+msgid "Contact"
+msgstr ""
+
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
+msgid "Add Contact"
+msgstr ""
+
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr ""
+
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
+
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
+
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
+
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
+
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
+
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
+
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
+
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
+
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
+msgid "Drop photo to upload"
+msgstr ""
+
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
+msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
+msgstr ""
+
+#: templates/part.contact.php:36
+msgid "Edit name details"
+msgstr ""
+
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr ""
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr ""
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
+msgid "Nickname"
+msgstr ""
+
+#: templates/part.contact.php:42
+msgid "Enter nickname"
+msgstr ""
+
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
+msgid "dd-mm-yyyy"
+msgstr ""
+
+#: templates/part.contact.php:47 templates/part.contact.php:135
+msgid "Groups"
+msgstr ""
+
+#: templates/part.contact.php:49
+msgid "Separate groups with commas"
+msgstr ""
+
+#: templates/part.contact.php:50
+msgid "Edit groups"
+msgstr ""
+
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.contact.php:60
+msgid "Please specify a valid email address."
+msgstr ""
+
+#: templates/part.contact.php:60
+msgid "Enter email address"
+msgstr ""
+
+#: templates/part.contact.php:64
+msgid "Mail to address"
+msgstr ""
+
+#: templates/part.contact.php:65
+msgid "Delete email address"
+msgstr ""
+
+#: templates/part.contact.php:75
+msgid "Enter phone number"
+msgstr ""
+
+#: templates/part.contact.php:79
+msgid "Delete phone number"
+msgstr ""
+
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
+msgid "View on map"
+msgstr ""
+
+#: templates/part.contact.php:110
+msgid "Edit address details"
+msgstr ""
+
+#: templates/part.contact.php:116
+msgid "Add notes here."
+msgstr ""
+
+#: templates/part.contact.php:124
+msgid "Add field"
+msgstr ""
+
+#: templates/part.contact.php:129
+msgid "Phone"
+msgstr ""
+
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr ""
+
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
+
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr ""
+
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr ""
+
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.cropphoto.php:65
+msgid "The temporary image has been removed from cache."
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:6
+msgid "Edit address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:10
+msgid "Type"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
+msgid "PO Box"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
+msgid "Extended"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
+msgid "City"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:42
+msgid "Region"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
+msgid "Zipcode"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:16
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:23
+msgid "Hon. prefixes"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:27
+msgid "Miss"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:28
+msgid "Ms"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:29
+msgid "Mr"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:30
+msgid "Sir"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:31
+msgid "Mrs"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:32
+msgid "Dr"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:35
+msgid "Given name"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:37
+msgid "Additional names"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:39
+msgid "Family name"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:41
+msgid "Hon. suffixes"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:45
+msgid "J.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:46
+msgid "M.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:47
+msgid "D.O."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:48
+msgid "D.C."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:49
+msgid "Ph.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:50
+msgid "Esq."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:51
+msgid "Jr."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:52
+msgid "Sn."
+msgstr ""
+
+#: templates/part.import.php:1
+msgid "Import a contacts file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the addressbook"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new addressbook"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new addressbook"
+msgstr ""
+
+#: templates/part.import.php:20
+msgid "Importing contacts"
+msgstr ""
+
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
+msgstr ""
+
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "CardDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr ""
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr ""
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr ""
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/lv/core.po b/l10n/lv/core.po
new file mode 100644
index 00000000000..a9c0fffbecb
--- /dev/null
+++ b/l10n/lv/core.po
@@ -0,0 +1,269 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <aldis@udris.lv>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
+
+#: ajax/vcategories/add.php:23 ajax/vcategories/delete.php:23
+msgid "Application name not provided."
+msgstr ""
+
+#: ajax/vcategories/add.php:29
+msgid "No category to add?"
+msgstr ""
+
+#: ajax/vcategories/add.php:36
+msgid "This category already exists: "
+msgstr ""
+
+#: js/jquery-ui-1.8.16.custom.min.js:511
+msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+msgstr ""
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Iestatījumi"
+
+#: js/js.js:573
+msgid "January"
+msgstr ""
+
+#: js/js.js:573
+msgid "February"
+msgstr ""
+
+#: js/js.js:573
+msgid "March"
+msgstr ""
+
+#: js/js.js:573
+msgid "April"
+msgstr ""
+
+#: js/js.js:573
+msgid "May"
+msgstr ""
+
+#: js/js.js:573
+msgid "June"
+msgstr ""
+
+#: js/js.js:574
+msgid "July"
+msgstr ""
+
+#: js/js.js:574
+msgid "August"
+msgstr ""
+
+#: js/js.js:574
+msgid "September"
+msgstr ""
+
+#: js/js.js:574
+msgid "October"
+msgstr ""
+
+#: js/js.js:574
+msgid "November"
+msgstr ""
+
+#: js/js.js:574
+msgid "December"
+msgstr ""
+
+#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:159
+msgid "No"
+msgstr ""
+
+#: js/oc-dialogs.js:160
+msgid "Yes"
+msgstr ""
+
+#: js/oc-dialogs.js:177
+msgid "Ok"
+msgstr ""
+
+#: js/oc-vcategories.js:68
+msgid "No categories selected for deletion."
+msgstr ""
+
+#: js/oc-vcategories.js:68
+msgid "Error"
+msgstr ""
+
+#: lostpassword/index.php:26
+msgid "ownCloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr "Izmantojiet šo linku lai mainītu paroli"
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "JÅ«s savÄ epastÄ saņemsiet interneta saiti, caur kuru varÄ“siet atjaunot paroli."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "ObligÄts"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "NeizdevÄs ielogoties."
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:25
+#: templates/login.php:9
+msgid "Username"
+msgstr "LietotÄjvÄrds"
+
+#: lostpassword/templates/lostpassword.php:15
+msgid "Request reset"
+msgstr "Pieprasīt paroles maiņu"
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Jūsu parole tika nomainīta"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr "Uz ielogoÅ¡anÄs lapu"
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Jauna parole"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Mainīt paroli"
+
+#: strings.php:5
+msgid "Personal"
+msgstr "Personīgi"
+
+#: strings.php:6
+msgid "Users"
+msgstr "LietotÄji"
+
+#: strings.php:7
+msgid "Apps"
+msgstr "AplikÄcijas"
+
+#: strings.php:8
+msgid "Admin"
+msgstr "Administrators"
+
+#: strings.php:9
+msgid "Help"
+msgstr "Palīdzība"
+
+#: templates/403.php:12
+msgid "Access forbidden"
+msgstr ""
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr "MÄkonis netika atrasts"
+
+#: templates/edit_categories_dialog.php:4
+msgid "Edit categories"
+msgstr ""
+
+#: templates/edit_categories_dialog.php:14
+msgid "Add"
+msgstr ""
+
+#: templates/installation.php:23
+msgid "Create an <strong>admin account</strong>"
+msgstr ""
+
+#: templates/installation.php:29 templates/login.php:13
+msgid "Password"
+msgstr "Parole"
+
+#: templates/installation.php:35
+msgid "Advanced"
+msgstr ""
+
+#: templates/installation.php:37
+msgid "Data folder"
+msgstr "Datu mape"
+
+#: templates/installation.php:44
+msgid "Configure the database"
+msgstr "NokonfigurÄ“t datubÄzi"
+
+#: templates/installation.php:49 templates/installation.php:60
+#: templates/installation.php:70
+msgid "will be used"
+msgstr "tiks izmantots"
+
+#: templates/installation.php:82
+msgid "Database user"
+msgstr "DatubÄzes lietotÄjs"
+
+#: templates/installation.php:86
+msgid "Database password"
+msgstr "DatubÄzes parole"
+
+#: templates/installation.php:90
+msgid "Database name"
+msgstr "DatubÄzes nosaukums"
+
+#: templates/installation.php:96
+msgid "Database host"
+msgstr "DatubÄzes mÄjvieta"
+
+#: templates/installation.php:101
+msgid "Finish setup"
+msgstr "Pabeigt uzstÄdÄ«jumus"
+
+#: templates/layout.guest.php:42
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:49
+msgid "Log out"
+msgstr "Izlogoties"
+
+#: templates/login.php:6
+msgid "Lost your password?"
+msgstr "AizmirsÄt paroli?"
+
+#: templates/login.php:17
+msgid "remember"
+msgstr "atcerēties"
+
+#: templates/login.php:18
+msgid "Log in"
+msgstr "Ielogoties"
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr "Jūs esat veiksmīgi izlogojies."
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr "iepriekÅ¡Ä“jÄ"
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr "nÄkamÄ"
diff --git a/l10n/lv/files.po b/l10n/lv/files.po
new file mode 100644
index 00000000000..3f19f36b910
--- /dev/null
+++ b/l10n/lv/files.po
@@ -0,0 +1,219 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <aldis@udris.lv>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: ajax/upload.php:20
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/upload.php:21
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: ajax/upload.php:22
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/upload.php:23
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/upload.php:24
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/upload.php:25
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/upload.php:26
+msgid "Failed to write to disk"
+msgstr ""
+
+#: appinfo/app.php:6
+msgid "Files"
+msgstr "Faili"
+
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Izdzēst"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
+msgid "generating ZIP-file, it may take some time."
+msgstr ""
+
+#: js/files.js:200
+msgid "Unable to upload your file as it is a directory or has 0 bytes"
+msgstr ""
+
+#: js/files.js:200
+msgid "Upload Error"
+msgstr "AugÅ¡uplÄdÄ“Å¡anas laikÄ radÄs kļūda"
+
+#: js/files.js:228 js/files.js:319 js/files.js:348
+msgid "Pending"
+msgstr "Gaida savu kÄrtu"
+
+#: js/files.js:333
+msgid "Upload cancelled."
+msgstr "AugÅ¡uplÄde ir atcelta"
+
+#: js/files.js:457
+msgid "Invalid name, '/' is not allowed."
+msgstr "Šis simbols '/', nav atļauts."
+
+#: js/files.js:703 templates/index.php:55
+msgid "Size"
+msgstr "Izmērs"
+
+#: js/files.js:704 templates/index.php:56
+msgid "Modified"
+msgstr "Izmainīts"
+
+#: js/files.js:731
+msgid "folder"
+msgstr "mape"
+
+#: js/files.js:733
+msgid "folders"
+msgstr "mapes"
+
+#: js/files.js:741
+msgid "file"
+msgstr "fails"
+
+#: js/files.js:743
+msgid "files"
+msgstr "faili"
+
+#: templates/admin.php:5
+msgid "File handling"
+msgstr ""
+
+#: templates/admin.php:7
+msgid "Maximum upload size"
+msgstr "MaksimÄlais failu augÅ¡uplÄdes apjoms"
+
+#: templates/admin.php:7
+msgid "max. possible: "
+msgstr ""
+
+#: templates/admin.php:9
+msgid "Needed for multi-file and folder downloads."
+msgstr ""
+
+#: templates/admin.php:9
+msgid "Enable ZIP-download"
+msgstr ""
+
+#: templates/admin.php:11
+msgid "0 is unlimited"
+msgstr ""
+
+#: templates/admin.php:12
+msgid "Maximum input size for ZIP files"
+msgstr ""
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:11
+msgid "From url"
+msgstr ""
+
+#: templates/index.php:21
+msgid "Upload"
+msgstr "AugÅ¡uplÄdet"
+
+#: templates/index.php:27
+msgid "Cancel upload"
+msgstr ""
+
+#: templates/index.php:39
+msgid "Nothing in here. Upload something!"
+msgstr "Te vÄ“l nekas nav. RÄ«kojies, sÄc augÅ¡uplÄdÄ“t"
+
+#: templates/index.php:47
+msgid "Name"
+msgstr "Nosaukums"
+
+#: templates/index.php:49
+msgid "Share"
+msgstr ""
+
+#: templates/index.php:51
+msgid "Download"
+msgstr "LejuplÄdÄ“t"
+
+#: templates/index.php:64
+msgid "Upload too large"
+msgstr "Fails ir par lielu lai to augÅ¡uplÄdetu"
+
+#: templates/index.php:66
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: templates/index.php:71
+msgid "Files are being scanned, please wait."
+msgstr ""
+
+#: templates/index.php:74
+msgid "Current scanning"
+msgstr ""
diff --git a/l10n/lv/files_encryption.po b/l10n/lv/files_encryption.po
new file mode 100644
index 00000000000..6b2dc7673d7
--- /dev/null
+++ b/l10n/lv/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/lv/files_external.po b/l10n/lv/files_external.po
new file mode 100644
index 00000000000..5004aadaab7
--- /dev/null
+++ b/l10n/lv/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/lv/files_sharing.po b/l10n/lv/files_sharing.po
new file mode 100644
index 00000000000..4d7325ca83a
--- /dev/null
+++ b/l10n/lv/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/lv/files_versions.po b/l10n/lv/files_versions.po
new file mode 100644
index 00000000000..5802b0782b6
--- /dev/null
+++ b/l10n/lv/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/lv/gallery.po b/l10n/lv/gallery.po
new file mode 100644
index 00000000000..03b337f7da5
--- /dev/null
+++ b/l10n/lv/gallery.po
@@ -0,0 +1,58 @@
+# 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: 2012-07-27 02:02+0200\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:39
+msgid "Pictures"
+msgstr ""
+
+#: js/pictures.js:12
+msgid "Share gallery"
+msgstr ""
+
+#: js/pictures.js:32
+msgid "Error: "
+msgstr ""
+
+#: js/pictures.js:32
+msgid "Internal error"
+msgstr ""
+
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+#: templates/view_album.php:36
+msgid "Remove confirmation"
+msgstr ""
+
+#: templates/view_album.php:37
+msgid "Do you want to remove album"
+msgstr ""
+
+#: templates/view_album.php:40
+msgid "Change album name"
+msgstr ""
+
+#: templates/view_album.php:43
+msgid "New album name"
+msgstr ""
diff --git a/l10n/lv/lib.po b/l10n/lv/lib.po
new file mode 100644
index 00000000000..40959dcc424
--- /dev/null
+++ b/l10n/lv/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/lv/media.po b/l10n/lv/media.po
new file mode 100644
index 00000000000..8f717c8e6ef
--- /dev/null
+++ b/l10n/lv/media.po
@@ -0,0 +1,66 @@
+# 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: 2012-07-27 02:02+0200\n"
+"PO-Revision-Date: 2011-08-13 02:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:45 templates/player.php:8
+msgid "Music"
+msgstr ""
+
+#: js/music.js:18
+msgid "Add album to playlist"
+msgstr ""
+
+#: templates/music.php:3 templates/player.php:12
+msgid "Play"
+msgstr ""
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:13
+msgid "Pause"
+msgstr ""
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr ""
+
+#: templates/music.php:6 templates/player.php:14
+msgid "Next"
+msgstr ""
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr ""
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr ""
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr ""
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr ""
+
+#: templates/music.php:38
+msgid "Album"
+msgstr ""
+
+#: templates/music.php:39
+msgid "Title"
+msgstr ""
diff --git a/l10n/lv/settings.po b/l10n/lv/settings.po
new file mode 100644
index 00000000000..725d9531266
--- /dev/null
+++ b/l10n/lv/settings.po
@@ -0,0 +1,239 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <aldis@udris.lv>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: ajax/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
+#: ajax/lostpassword.php:14
+msgid "Email saved"
+msgstr "Epasts tika saglabÄts"
+
+#: ajax/lostpassword.php:16
+msgid "Invalid email"
+msgstr "Nepareizs epasts"
+
+#: ajax/openid.php:16
+msgid "OpenID Changed"
+msgstr "OpenID nomainīts"
+
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
+msgid "Invalid request"
+msgstr "Nepareizs vaicÄjums"
+
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
+msgid "Language changed"
+msgstr "Valoda tika nomainīta"
+
+#: js/apps.js:18
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr "Atvienot"
+
+#: js/apps.js:39 js/apps.js:62
+msgid "Enable"
+msgstr "Pievienot"
+
+#: js/personal.js:69
+msgid "Saving..."
+msgstr "SaglabÄ..."
+
+#: personal.php:46 personal.php:47
+msgid "__language_name__"
+msgstr "__valodas_nosaukums__"
+
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "BrÄ«dinÄjums par droÅ¡Ä«bu"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
+msgid "Log"
+msgstr "Log"
+
+#: templates/admin.php:67
+msgid "More"
+msgstr "VairÄk"
+
+#: templates/apps.php:10
+msgid "Add your App"
+msgstr "Pievieno savu aplikÄciju"
+
+#: templates/apps.php:26
+msgid "Select an App"
+msgstr "IzvÄ“lies aplikÄciju"
+
+#: templates/apps.php:29
+msgid "See application page at apps.owncloud.com"
+msgstr "Apskatie aplikÄciju lapu - apps.owncloud.com"
+
+#: templates/apps.php:30
+msgid "-licensed"
+msgstr "licenzēts"
+
+#: templates/apps.php:30
+msgid "by"
+msgstr "no"
+
+#: templates/help.php:8
+msgid "Documentation"
+msgstr "DokumentÄcija"
+
+#: templates/help.php:9
+msgid "Managing Big Files"
+msgstr "Rīkoties ar apjomīgiem failiem"
+
+#: templates/help.php:10
+msgid "Ask a question"
+msgstr "Uzdod jautajumu"
+
+#: templates/help.php:22
+msgid "Problems connecting to help database."
+msgstr "ProblÄ“mas ar datubÄzes savienojumu"
+
+#: templates/help.php:23
+msgid "Go there manually."
+msgstr "Nokļūt tur pašrocīgi"
+
+#: templates/help.php:31
+msgid "Answer"
+msgstr "Atbildēt"
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr "JÅ«s iymantojat"
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr "no pieejamajiem"
+
+#: templates/personal.php:12
+msgid "Desktop and Mobile Syncing Clients"
+msgstr "Desktop un mobÄ«lo ierÄ«Äu sinhronizÄcijas rÄ«ks"
+
+#: templates/personal.php:13
+msgid "Download"
+msgstr "LejuplÄdÄ“t"
+
+#: templates/personal.php:19
+msgid "Your password got changed"
+msgstr "Jūsu parole tika nomainīta"
+
+#: templates/personal.php:20
+msgid "Unable to change your password"
+msgstr "Nav iespējams nomainīt jūsu paroli"
+
+#: templates/personal.php:21
+msgid "Current password"
+msgstr "PaÅ¡reizÄ“jÄ parole"
+
+#: templates/personal.php:22
+msgid "New password"
+msgstr "Jauna parole"
+
+#: templates/personal.php:23
+msgid "show"
+msgstr "parÄdÄ«t"
+
+#: templates/personal.php:24
+msgid "Change password"
+msgstr "Nomainīt paroli"
+
+#: templates/personal.php:30
+msgid "Email"
+msgstr "Epasts"
+
+#: templates/personal.php:31
+msgid "Your email address"
+msgstr "JÅ«su epasta adrese"
+
+#: templates/personal.php:32
+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"
+
+#: templates/personal.php:38 templates/personal.php:39
+msgid "Language"
+msgstr "Valoda"
+
+#: templates/personal.php:44
+msgid "Help translate"
+msgstr "Palīdzi tulkot"
+
+#: templates/personal.php:51
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr "izmanto Å¡o adresi lai ielogotos ownCloud no sava failu pÄrlÅ«ka"
+
+#: templates/users.php:21 templates/users.php:76
+msgid "Name"
+msgstr "VÄrds"
+
+#: templates/users.php:23 templates/users.php:77
+msgid "Password"
+msgstr "Parole"
+
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
+msgid "Groups"
+msgstr "Grupas"
+
+#: templates/users.php:32
+msgid "Create"
+msgstr "Izveidot"
+
+#: templates/users.php:35
+msgid "Default Quota"
+msgstr "Apjoms pēc noklusējuma"
+
+#: templates/users.php:55 templates/users.php:138
+msgid "Other"
+msgstr "Cits"
+
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
+msgid "Quota"
+msgstr "Apjoms"
+
+#: templates/users.php:146
+msgid "Delete"
+msgstr "Izdzēst"
diff --git a/l10n/lv/tasks.po b/l10n/lv/tasks.po
new file mode 100644
index 00000000000..20b56238ac7
--- /dev/null
+++ b/l10n/lv/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/lv/user_ldap.po b/l10n/lv/user_ldap.po
new file mode 100644
index 00000000000..3596376f704
--- /dev/null
+++ b/l10n/lv/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/lv/user_migrate.po b/l10n/lv/user_migrate.po
new file mode 100644
index 00000000000..d54da6a081a
--- /dev/null
+++ b/l10n/lv/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/lv/user_openid.po b/l10n/lv/user_openid.po
new file mode 100644
index 00000000000..2dbaa488ad7
--- /dev/null
+++ b/l10n/lv/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/mk/admin_dependencies_chk.po b/l10n/mk/admin_dependencies_chk.po
new file mode 100644
index 00000000000..18aee717b6d
--- /dev/null
+++ b/l10n/mk/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/mk/admin_migrate.po b/l10n/mk/admin_migrate.po
new file mode 100644
index 00000000000..f692f219857
--- /dev/null
+++ b/l10n/mk/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/mk/bookmarks.po b/l10n/mk/bookmarks.po
new file mode 100644
index 00000000000..547a2c5da28
--- /dev/null
+++ b/l10n/mk/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/mk/calendar.po b/l10n/mk/calendar.po
index 547898941b7..6dfc90153f1 100644
--- a/l10n/mk/calendar.po
+++ b/l10n/mk/calendar.po
@@ -3,26 +3,35 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Miroslav Jovanovic <j.miroslav@gmail.com>, 2012.
# Miroslav Jovanovic <jmiroslav@softhome.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Macedonian (http://www.transifex.net/projects/p/owncloud/language/mk/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Ðе Ñе најдени календари."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Ðе Ñе најдени наÑтани."
@@ -30,300 +39,394 @@ msgstr "Ðе Ñе најдени наÑтани."
msgid "Wrong calendar"
msgstr "Погрешен календар"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Ðова временÑка зона:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "ВременÑката зона е променета"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Ðеправилно барање"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Календар"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ддд"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ддд М/д"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "дддд М/д"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "ММММ гггг"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "дддд, МММ д, гггг"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Роденден"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Деловно"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Повикај"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Клиенти"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "ДоÑтавувач"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Празници"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Идеи"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Патување"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Јубилеј"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "СоÑтанок"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "ОÑтанато"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Лично"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Проекти"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Прашања"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Работа"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "неименувано"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Ðов календар"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Ðе Ñе повторува"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Дневно"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Седмично"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Секој работен ден"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Дво-Ñедмично"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "МеÑечно"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Годишно"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "никогаш"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "по наÑтан"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "по датум"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "по ден во меÑецот"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "по работен ден"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Понеделник"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Вторник"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Среда"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Четврток"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Петок"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Сабота"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Ðедела"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "Ñедмични наÑтани од меÑец"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "прв"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "втор"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "трет"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "четврт"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "пет"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "поÑледен"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Јануари"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Февруари"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Март"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Ðприл"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Мај"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Јуни"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Јули"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "ÐвгуÑÑ‚"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "Септември"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Октомври"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "Ðоември"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Декември"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "по датумот на наÑтанот"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "по вчерашните"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "по број на Ñедмицата"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "по ден и меÑец"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Датум"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Кал."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Цел ден"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Ðов календар"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Полиња кои недоÑтаÑуваат"
@@ -357,40 +460,32 @@ msgstr "Овој наÑтан завршува пред за почне"
msgid "There was a database fail"
msgstr "Имаше проблем Ñо базата"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Седмица"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "МеÑец"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "ЛиÑта"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "ДенеÑка"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Календари"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Имаше проблем при парÑирање на датотеката."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Избери активни календари"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Ваши календари"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "Ð’Ñ€Ñка за CalDav"
@@ -402,19 +497,19 @@ msgstr "Споделени календари"
msgid "No shared calendars"
msgstr "Ðема Ñподелени календари"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Сподели календар"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Преземи"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Уреди"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Избриши"
@@ -500,23 +595,23 @@ msgstr "Одвоете ги категориите Ñо запирка"
msgid "Edit categories"
msgstr "Уреди категории"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Целодневен наÑтан"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Од"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "До"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Ðапредни опции"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Локација"
@@ -524,7 +619,7 @@ msgstr "Локација"
msgid "Location of the Event"
msgstr "Локација на наÑтанот"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "ОпиÑ"
@@ -532,84 +627,86 @@ msgstr "ОпиÑ"
msgid "Description of the Event"
msgstr "ÐžÐ¿Ð¸Ñ Ð½Ð° наÑтанот"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Повтори"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Ðапредно"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Избери работни денови"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Избери денови"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "и наÑтаните ден од година."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "и наÑтаните ден од меÑец."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Избери меÑеци"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Избери Ñедмици"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "и наÑтаните Ñедмица од година."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "интервал"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Крај"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "повторувања"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "Ñоздади нов календар"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "ВнеÑи календар од датотека "
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Ве молам изберете го календарот"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "Ñоздади нов календар"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Име на новиот календар"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Увези"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Увезување на календар"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Календарот беше уÑпешно увезен"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Увези"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Затвори дијалог"
@@ -625,45 +722,73 @@ msgstr "Погледај наÑтан"
msgid "No categories selected"
msgstr "Ðема избрано категории"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Избери категорија"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "од"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "на"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "ВременÑка зона"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Секогаш провери за промени на временÑката зона"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Формат на времето"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24ч"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12ч"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Прв ден од Ñедмицата"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "CalDAV календар адреÑата за Ñинхронизација:"
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/mk/contacts.po b/l10n/mk/contacts.po
index 6d30f17cb1d..5ad0cf28317 100644
--- a/l10n/mk/contacts.po
+++ b/l10n/mk/contacts.po
@@ -3,642 +3,776 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Miroslav Jovanovic <j.miroslav@gmail.com>, 2012.
# Miroslav Jovanovic <jmiroslav@softhome.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Macedonian (http://www.transifex.net/projects/p/owncloud/language/mk/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Грешка (де)активирање на адреÑарот."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Имаше грешка при додавање на контактот."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Ðеможе да Ñе додаде празна вредноÑÑ‚."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Барем една од полињата за адреÑа треба да биде пополнето."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "ид не е поÑтавено."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "Се обидовте да внеÑете дупликат вредноÑÑ‚:"
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Ðеможе да Ñе ажурира адреÑар Ñо празно име."
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Грешка при додавање на вредноÑÑ‚ за контактот."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Грешка при ажурирање на адреÑарот."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "Ðема доÑтавено ИД"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Грешка во поÑтавување Ñума за проверка."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Ðема избрано категории за бришење."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Ðе Ñе најдени адреÑари."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Ðе Ñе најдени контакти."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Имаше грешка при додавање на контактот."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "име за елементот не е поÑтавена."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Ðеможе да Ñе додаде празна вредноÑÑ‚."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Барем една од полињата за адреÑа треба да биде пополнето."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "Се обидовте да внеÑете дупликат вредноÑÑ‚:"
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Информацијата за vCard не е точна. Ве молам превчитајте ја Ñтраницава."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "ÐедоÑтаÑува ИД"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "Грешка при парÑирање VCard за ИД: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Ðеможе да Ñе внеÑе адреÑар Ñо празно име."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "Ñумата за проверка не е поÑтавена."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Грешки при додавање на адреÑарот."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "Информацијата за vCard не е точна. Ве молам превчитајте ја Ñтраницава:"
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Грешка при активирање на адреÑарот."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Ðешто Ñе раÑипа."
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "Ðе беше доÑтавено ИД за контакт."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Грешка во читање на контакт фотографија."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Грешка во Ñнимање на привремена датотека."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "Фотографијата која Ñе вчитува е невалидна."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "ид не е поÑтавено."
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Информацијата за vCard не е точна. Ве молам превчитајте ја Ñтраницава."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Греш при бришење на вредноÑта за контакт."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "ИД за контакт недоÑтаÑува."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "ÐедоÑтаÑува ид за контакт."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "Ðе беше поднеÑена патека за фотографија."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Ðе поÑтои датотеката:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Грешка во вчитување на Ñлика."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Грешка при преземањето на контакт објектот,"
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Грешка при утврдувањето на карактериÑтиките на фотографијата."
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Грешка при Ñнимање на контактите."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Грешка при Ñкалирање на фотографијата"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Грешка при Ñечење на фотографијата"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Грешка при креирањето на привремената фотографија"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "име за елементот не е поÑтавена."
+msgstr "Грешка при наоѓањето на фотографијата:"
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "Ñумата за проверка не е поÑтавена."
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "Информацијата за vCard не е точна. Ве молам превчитајте ја Ñтраницава:"
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "Ðешто Ñе раÑипа."
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Грешка при ажурирање на вредноÑта за контакт."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "Ðеможе да Ñе ажурира адреÑар Ñо празно име."
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Грешка при ажурирање на адреÑарот."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "Грешка во Ñнимање на контактите на диÑк."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Датотеката беше уÑпешно подигната."
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Големината на датотеката ја надминува upload_max_filesize директивата во php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Големината на датотеката ја надминува MAX_FILE_SIZE директивата која беше Ñпецифицирана во HTML формата"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "Датотеката беше Ñамо делумно подигната."
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Ðе беше подигната датотека."
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "ÐедоÑтаÑува привремена папка"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Ðе можеше да Ñе Ñними привремената фотографија:"
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Ðе можеше да Ñе вчита привремената фотографија:"
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Ðиту еден фајл не Ñе вчита. Ðепозната грешка"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Контакти"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Жалам, оваа функционалноÑÑ‚ уште не е имплементирана"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "Ðе е имплементирано"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Ðе можев да добијам иÑправна адреÑа."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Грешка"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "СвојÑтвото не Ñмее да биде празно."
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "Ðе може да Ñе Ñеријализираат елементите."
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "'deleteProperty' повикан без тип на аргументот. Пријавете грешка/проблем на bugs.owncloud.org"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Уреди го името"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Ðиту еден фајл не е избран за вчитување."
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "Датотеката која Ñе обидувате да ја префрлите ја надминува макÑималната големина дефинирана за Ð¿Ñ€ÐµÐ½Ð¾Ñ Ð½Ð° овој Ñервер."
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
-
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "Довлечкај VCF датотека да Ñе внеÑат контакти."
+msgstr "Одбери тип"
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1494
+#: js/loader.js:49
+msgid "Result: "
+msgstr "Резултат: "
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr "увезено,"
+
+#: js/loader.js:49
+msgid " failed."
+msgstr "неуÑпешно."
+
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Ова не е во Вашиот адреÑар."
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Контактот неможе да биде најден."
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "ÐдреÑарот не е најден."
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Ова не е во Вашиот адреÑар."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Контактот неможе да биде најден."
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "ÐдреÑа"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Телефон"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "Е-пошта"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Организација"
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Работа"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Дома"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Мобилен"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "ТекÑÑ‚"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "ГлаÑ"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Порака"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "ФакÑ"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Видео"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Пејџер"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Интернет"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Роденден"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "Роденден на {name}"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Контакт"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Додади контакт"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "ВнеÑи"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "ÐдреÑари"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Конфигурирај адреÑар"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Затвои"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Ðов адреÑар"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "ВнеÑи од VCF"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "Ð’Ñ€Ñка за CardDav"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Преземи"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Уреди"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Избриши"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Преземи го контактот"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Избриши го контактот"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Довлечкај фотографија за да Ñе подигне"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Избриши моментална фотографија"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Уреди моментална фотографија"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Подигни нова фотографија"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Изберете фотографија од ownCloud"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr "Прилагоден формат, кратко име, цело име, обратно или обратно Ñо запирка"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Уреди детали за име"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Организација"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Избриши"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Прекар"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "ВнеÑи прекар"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Роденден"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "dd-mm-yyyy"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Групи"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Одвоете ги групите Ñо запирка"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Уреди групи"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Претпочитано"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Ве молам внеÑете правилна адреÑа за е-пошта."
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "ВнеÑете е-пошта"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "Прати порака до адреÑа"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Избриши адреÑа за е-пошта"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "ВнеÑете телефонÑки број"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Избриши телефонÑки број"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Погледајте на мапа"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Уреди детали за адреÑа"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "ВнеÑете забелешки тука."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Додади поле"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Фотографија за профил"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Телефон"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Забелешка"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "Е-пошта"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Избриши моментална фотографија"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Уреди моментална фотографија"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "ÐдреÑа"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Подигни нова фотографија"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Забелешка"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Изберете фотографија од ownCloud"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Преземи го контактот"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Избриши го контактот"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "Привремената Ñлика е отÑтранета од кешот."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Уреди адреÑа"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Тип"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "ПоштенÑки фах"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Дополнително"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Улица"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Град"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Регион"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "ПоштенÑки код"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "Држава"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Уреди категории"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Додади"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "ÐдреÑар"
@@ -719,35 +853,6 @@ msgstr "Помлад."
msgid "Sn."
msgstr "ПоÑтар."
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Ðов адреÑар"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Уреди адреÑар"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Прикажано име"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Ðктивно"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Сними"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Прати"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Откажи"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "ВнеÑи датотека Ñо контакти"
@@ -764,57 +869,86 @@ msgstr "креирај нов адреÑар"
msgid "Name of new addressbook"
msgstr "Име на новиот адреÑар"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "ВнеÑи"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "ВнеÑување контакти"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "Изберете адреÑар да Ñе внеÑе:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "Изберете од хард диÑк"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "Ðемате контакти во Вашиот адреÑар."
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Додади контакт"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Уреди адреÑари"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr ""
-#: templates/settings.php:4
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr ""
+
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "ÐдреÑа за Ñинхронизација Ñо CardDAV"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "повеќе информации"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "Примарна адреÑа"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Преземи"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Уреди"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Ðов адреÑар"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Сними"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Откажи"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/mk/core.po b/l10n/mk/core.po
index c6179ebf6fb..845e2aa68c7 100644
--- a/l10n/mk/core.po
+++ b/l10n/mk/core.po
@@ -4,15 +4,16 @@
#
# Translators:
# Georgi Stanojevski <glisha@gmail.com>, 2012.
+# Miroslav Jovanovic <j.miroslav@gmail.com>, 2012.
# Miroslav Jovanovic <jmiroslav@softhome.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Macedonian (http://www.transifex.net/projects/p/owncloud/language/mk/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -33,85 +34,85 @@ msgstr "Оваа категорија веќе поÑтои:"
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "ПоÑтавки"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Јануари"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Февруари"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Март"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "Ðприл"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Мај"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Јуни"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Јули"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "ÐвгуÑÑ‚"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "Септември"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Октомври"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "Ðоември"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "Декември"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Откажи"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Ðе"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Да"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Во ред"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Ðе е одбрана категорија за бришење."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Грешка"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "РеÑетирање на Owncloud лозинка"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "реÑетирање на лозинка за ownCloud"
@@ -241,14 +242,10 @@ msgstr "Заврши го подеÑувањето"
msgid "web services under your control"
msgstr "веб ÑервиÑи под Ваша контрола"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Одјава"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "ПоÑтавки"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Ја заборавивте лозинката?"
diff --git a/l10n/mk/files.po b/l10n/mk/files.po
index e4ad1541e95..374cb871393 100644
--- a/l10n/mk/files.po
+++ b/l10n/mk/files.po
@@ -4,48 +4,49 @@
#
# Translators:
# Georgi Stanojevski <glisha@gmail.com>, 2012.
+# Miroslav Jovanovic <j.miroslav@gmail.com>, 2012.
# Miroslav Jovanovic <jmiroslav@softhome.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Macedonian (http://www.transifex.net/projects/p/owncloud/language/mk/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Ðема грешка, датотеката беше подигната уÑпешно"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Подигнатата датотека ја надминува upload_max_filesize директивата во php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Датотеката беше Ñамо делумно подигната."
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Ðе беше подигната датотека"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Ðе поÑтои привремена папка"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "ÐеуÑпеав да запишам на диÑк"
@@ -53,57 +54,85 @@ msgstr "ÐеуÑпеав да запишам на диÑк"
msgid "Files"
msgstr "Датотеки"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Избриши"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
-msgid "generating ZIP-file, it may take some time."
+#: js/filelist.js:141
+msgid "replace"
msgstr ""
-#: js/files.js:199
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/filelist.js:141
+msgid "cancel"
msgstr ""
-#: js/files.js:199
-msgid "Upload Error"
+#: js/filelist.js:195
+msgid "replaced"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
-msgid "Pending"
+#: js/filelist.js:195
+msgid "with"
msgstr ""
-#: js/files.js:332
-msgid "Upload cancelled."
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
msgstr ""
-#: js/files.js:456
-msgid "Invalid name, '/' is not allowed."
+#: js/filelist.js:246
+msgid "deleted"
msgstr ""
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:171
+msgid "generating ZIP-file, it may take some time."
+msgstr "Се генерира ZIP фајлот, ќе треба извеÑно време."
+
+#: js/files.js:200
+msgid "Unable to upload your file as it is a directory or has 0 bytes"
+msgstr "Ðе може да Ñе преземе вашата датотека бидејќи фолдерот во кој Ñе наоѓа фајлот има големина од 0 бајти"
+
+#: js/files.js:200
+msgid "Upload Error"
+msgstr "Грешка при преземање"
+
+#: js/files.js:228 js/files.js:319 js/files.js:348
+msgid "Pending"
+msgstr "Чека"
+
+#: js/files.js:333
+msgid "Upload cancelled."
+msgstr "Преземањето е прекинато."
+
+#: js/files.js:457
+msgid "Invalid name, '/' is not allowed."
+msgstr "неиÑправно име, '/' не е дозволено."
+
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Големина"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Променето"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "фолдер"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "фолдери"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "датотека"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "датотеки"
#: templates/admin.php:5
msgid "File handling"
@@ -173,10 +202,6 @@ msgstr "Сподели"
msgid "Download"
msgstr "Преземи"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Избриши"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Датотеката е премногу голема"
diff --git a/l10n/mk/files_encryption.po b/l10n/mk/files_encryption.po
new file mode 100644
index 00000000000..7a40ba3a3b1
--- /dev/null
+++ b/l10n/mk/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/mk/files_external.po b/l10n/mk/files_external.po
new file mode 100644
index 00000000000..25166e22cca
--- /dev/null
+++ b/l10n/mk/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/mk/files_sharing.po b/l10n/mk/files_sharing.po
new file mode 100644
index 00000000000..eedc221287d
--- /dev/null
+++ b/l10n/mk/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/mk/files_versions.po b/l10n/mk/files_versions.po
new file mode 100644
index 00000000000..cafc33279cf
--- /dev/null
+++ b/l10n/mk/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/mk/lib.po b/l10n/mk/lib.po
new file mode 100644
index 00000000000..713abb126dc
--- /dev/null
+++ b/l10n/mk/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/mk/settings.po b/l10n/mk/settings.po
index 3f9e5cf1760..6fd5df90dcc 100644
--- a/l10n/mk/settings.po
+++ b/l10n/mk/settings.po
@@ -3,82 +3,115 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Miroslav Jovanovic <j.miroslav@gmail.com>, 2012.
# Miroslav Jovanovic <jmiroslav@softhome.net>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Macedonian (http://www.transifex.net/projects/p/owncloud/language/mk/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "ЕлектронÑката пошта е Ñнимена"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "ÐеиÑправна електронÑка пошта"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID Ñменето"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "неправилно барање"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Јазикот е Ñменет"
-#: js/apps.js:31 js/apps.js:67
-msgid "Disable"
+#: js/apps.js:18
+msgid "Error"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr "Оневозможи"
+
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Овозможи"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Снимам..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "__language_name__"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr "ЗапиÑник"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Повеќе"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Додадете ја Вашата апликација"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Избери аппликација"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Види ја Ñтраницата Ñо апликации на apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-licensed"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "од"
@@ -170,34 +203,38 @@ msgstr "Помогни во преводот"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "кориÑтете ја оваа адреÑа во менаџерот за датотеки да Ñе поврзете Ñо Вашиот ownCloud"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Име"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Лозинка"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Групи"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Создај"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Предефинирана квота"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "ОÑтанато"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Квота"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Избриши"
diff --git a/l10n/mk/tasks.po b/l10n/mk/tasks.po
new file mode 100644
index 00000000000..f06174892d7
--- /dev/null
+++ b/l10n/mk/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/mk/user_ldap.po b/l10n/mk/user_ldap.po
new file mode 100644
index 00000000000..bcde61dcc65
--- /dev/null
+++ b/l10n/mk/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/mk/user_migrate.po b/l10n/mk/user_migrate.po
new file mode 100644
index 00000000000..06c88c2599f
--- /dev/null
+++ b/l10n/mk/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/mk/user_openid.po b/l10n/mk/user_openid.po
new file mode 100644
index 00000000000..3636c401f61
--- /dev/null
+++ b/l10n/mk/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/ms_MY/admin_dependencies_chk.po b/l10n/ms_MY/admin_dependencies_chk.po
new file mode 100644
index 00000000000..00564b0cf2a
--- /dev/null
+++ b/l10n/ms_MY/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/ms_MY/admin_migrate.po b/l10n/ms_MY/admin_migrate.po
new file mode 100644
index 00000000000..30cd1e1be64
--- /dev/null
+++ b/l10n/ms_MY/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/ms_MY/bookmarks.po b/l10n/ms_MY/bookmarks.po
new file mode 100644
index 00000000000..06c58f9a868
--- /dev/null
+++ b/l10n/ms_MY/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/ms_MY/calendar.po b/l10n/ms_MY/calendar.po
index 76a0bb2ba12..b7b41176326 100644
--- a/l10n/ms_MY/calendar.po
+++ b/l10n/ms_MY/calendar.po
@@ -3,328 +3,433 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Ahmed Noor Kader Mustajir Md Eusoff <sir.ade@gmail.com>, 2012.
# <hadri.hilmi@gmail.com>, 2011, 2012.
+# Hadri Hilmi <hadri.hilmi@gmail.com>, 2012.
# Hafiz Ismail <mhbinet@gmail.com>, 2012.
+# Zulhilmi Rosnin <zulhilmi.rosnin@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Malay (Malaysia) (http://www.transifex.net/projects/p/owncloud/language/ms_MY/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
-msgid "No calendars found."
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
msgstr ""
-#: ajax/categories/rescan.php:36
-msgid "No events found."
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
msgstr ""
+#: ajax/categories/rescan.php:29
+msgid "No calendars found."
+msgstr "Tiada kalendar dijumpai."
+
+#: ajax/categories/rescan.php:37
+msgid "No events found."
+msgstr "Tiada agenda dijumpai."
+
#: ajax/event/edit.form.php:20
msgid "Wrong calendar"
msgstr "Silap kalendar"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Timezone Baru"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Zon waktu diubah"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Permintaan tidak sah"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Kalendar"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "dd M/d"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd M/d"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM yyyy"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-msgstr ""
+msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, MMM d, yyy"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Hari lahir"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Perniagaan"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Panggilan"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Klien"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Penghantar"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Cuti"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Idea"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Perjalanan"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Jubli"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Perjumpaan"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Lain"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Peribadi"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projek"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Soalan"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Kerja"
-#: lib/app.php:380
-msgid "unnamed"
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
msgstr ""
-#: lib/object.php:330
+#: lib/app.php:359 lib/app.php:399
+msgid "unnamed"
+msgstr "tiada nama"
+
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Kalendar baru"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Tidak berulang"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Harian"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Mingguan"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Setiap hari minggu"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Dua kali seminggu"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Bulanan"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Tahunan"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "jangan"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "dari kekerapan"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "dari tarikh"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "dari haribulan"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "dari hari minggu"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Isnin"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Selasa"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Rabu"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Khamis"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Jumaat"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Sabtu"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Ahad"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "event minggu dari bulan"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "pertama"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "kedua"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "ketiga"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "keempat"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "kelima"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "akhir"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Januari"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Februari"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Mac"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "April"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Mei"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Jun"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Julai"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "Ogos"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "September"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Oktober"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "November"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Disember"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "dari tarikh event"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "dari tahun"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "dari nombor minggu"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "dari hari dan bulan"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Tarikh"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Kalendar"
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Sepanjang hari"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Kalendar baru"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Ruangan tertinggal"
@@ -358,71 +463,63 @@ msgstr "Peristiwa berakhir sebelum bermula"
msgid "There was a database fail"
msgstr "Terdapat kegagalan pada pengkalan data"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Minggu"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Bulan"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Senarai"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Hari ini"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Kalendar"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Berlaku kegagalan ketika penguraian fail. "
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Pilih kalendar yang aktif"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
-msgstr ""
+msgstr "Kalendar anda"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "Pautan CalDav"
#: templates/part.choosecalendar.php:31
msgid "Shared calendars"
-msgstr ""
+msgstr "Kalendar Kongsian"
#: templates/part.choosecalendar.php:48
msgid "No shared calendars"
-msgstr ""
+msgstr "Tiada kalendar kongsian"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
-msgstr ""
+msgstr "Kongsi Kalendar"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Muat turun"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Edit"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Hapus"
#: templates/part.choosecalendar.rowfields.shared.php:4
msgid "shared with you by"
-msgstr ""
+msgstr "dikongsi dengan kamu oleh"
#: templates/part.editcalendar.php:9
msgid "New calendar"
@@ -467,23 +564,23 @@ msgstr "Export"
#: templates/part.eventform.php:8 templates/part.showevent.php:3
msgid "Eventinfo"
-msgstr ""
+msgstr "Maklumat agenda"
#: templates/part.eventform.php:9 templates/part.showevent.php:4
msgid "Repeating"
-msgstr ""
+msgstr "Pengulangan"
#: templates/part.eventform.php:10 templates/part.showevent.php:5
msgid "Alarm"
-msgstr ""
+msgstr "Penggera"
#: templates/part.eventform.php:11 templates/part.showevent.php:6
msgid "Attendees"
-msgstr ""
+msgstr "Jemputan"
#: templates/part.eventform.php:13
msgid "Share"
-msgstr ""
+msgstr "Berkongsi"
#: templates/part.eventform.php:21
msgid "Title of the Event"
@@ -495,29 +592,29 @@ msgstr "kategori"
#: templates/part.eventform.php:29
msgid "Separate categories with commas"
-msgstr ""
+msgstr "Asingkan kategori dengan koma"
#: templates/part.eventform.php:30
msgid "Edit categories"
-msgstr ""
+msgstr "Sunting Kategori"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Agenda di sepanjang hari "
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Dari"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "ke"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Pilihan maju"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Lokasi"
@@ -525,7 +622,7 @@ msgstr "Lokasi"
msgid "Location of the Event"
msgstr "Lokasi agenda"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Huraian"
@@ -533,84 +630,86 @@ msgstr "Huraian"
msgid "Description of the Event"
msgstr "Huraian agenda"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Ulang"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Maju"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Pilih hari minggu"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Pilih hari"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "dan hari event dalam tahun."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "dan hari event dalam bulan."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Pilih bulan"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Pilih minggu"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "dan event mingguan dalam setahun."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Tempoh"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Tamat"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "Peristiwa"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "Cipta kalendar baru"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Import fail kalendar"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Sila pilih kalendar"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "Cipta kalendar baru"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Nama kalendar baru"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Import"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Import kalendar"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Kalendar berjaya diimport"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Import"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Tutup dialog"
@@ -620,72 +719,100 @@ msgstr "Buat agenda baru"
#: templates/part.showevent.php:1
msgid "View an event"
-msgstr ""
+msgstr "Papar peristiwa"
#: templates/part.showevent.php:23
msgid "No categories selected"
-msgstr ""
-
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Pilih kategori"
+msgstr "Tiada kategori dipilih"
#: templates/part.showevent.php:37
msgid "of"
-msgstr ""
+msgstr "dari"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
+msgstr "di"
+
+#: templates/settings.php:10
+msgid "General"
msgstr ""
-#: templates/settings.php:14
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Zon waktu"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Sentiasa mengemaskini perubahan zon masa"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Timeformat"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24h"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12h"
-#: templates/settings.php:40
-msgid "First day of the week"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Kelendar CalDAV mengemaskini alamat:"
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
-msgstr ""
+msgstr "Pengguna"
#: templates/share.dropdown.php:21
msgid "select users"
-msgstr ""
+msgstr "Pilih pengguna"
#: templates/share.dropdown.php:36 templates/share.dropdown.php:62
msgid "Editable"
-msgstr ""
+msgstr "Boleh disunting"
#: templates/share.dropdown.php:48
msgid "Groups"
-msgstr ""
+msgstr "Kumpulan-kumpulan"
#: templates/share.dropdown.php:49
msgid "select groups"
-msgstr ""
+msgstr "pilih kumpulan-kumpulan"
#: templates/share.dropdown.php:75
msgid "make public"
-msgstr ""
+msgstr "jadikan tontonan awam"
diff --git a/l10n/ms_MY/contacts.po b/l10n/ms_MY/contacts.po
index 8c1d5f72cad..f3b425c71f2 100644
--- a/l10n/ms_MY/contacts.po
+++ b/l10n/ms_MY/contacts.po
@@ -5,641 +5,776 @@
# Translators:
# Ahmed Noor Kader Mustajir Md Eusoff <sir.ade@gmail.com>, 2012.
# <hadri.hilmi@gmail.com>, 2012.
+# Hadri Hilmi <hadri.hilmi@gmail.com>, 2012.
# Hafiz Ismail <mhbinet@gmail.com>, 2012.
+# Zulhilmi Rosnin <zulhilmi.rosnin@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Malay (Malaysia) (http://www.transifex.net/projects/p/owncloud/language/ms_MY/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Ralat nyahaktif buku alamat."
-#: ajax/addcontact.php:59
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "ID tidak ditetapkan."
+
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Tidak boleh kemaskini buku alamat dengan nama yang kosong."
+
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Masalah mengemaskini buku alamat."
+
+#: ajax/categories/categoriesfor.php:17
+msgid "No ID provided"
+msgstr "tiada ID diberi"
+
+#: ajax/categories/categoriesfor.php:34
+msgid "Error setting checksum."
+msgstr "Ralat menetapkan checksum."
+
+#: ajax/categories/delete.php:19
+msgid "No categories selected for deletion."
+msgstr "Tiada kategori dipilih untuk dibuang."
+
+#: ajax/categories/delete.php:26
+msgid "No address books found."
+msgstr "Tiada buku alamat dijumpai."
+
+#: ajax/categories/delete.php:34
+msgid "No contacts found."
+msgstr "Tiada kenalan dijumpai."
+
+#: ajax/contact/add.php:47
msgid "There was an error adding the contact."
msgstr "Terdapat masalah menambah maklumat."
-#: ajax/addproperty.php:40
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "nama elemen tidak ditetapkan."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
msgid "Cannot add empty property."
msgstr "Tidak boleh menambah ruang kosong."
-#: ajax/addproperty.php:52
+#: ajax/contact/addproperty.php:67
msgid "At least one of the address fields has to be filled out."
msgstr "Sekurangnya satu ruangan alamat perlu diisikan."
-#: ajax/addproperty.php:62
+#: ajax/contact/addproperty.php:76
msgid "Trying to add duplicate property: "
-msgstr ""
-
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Terdapat masalah menambah maklumat."
+msgstr "Cuba untuk letak nilai duplikasi:"
-#: ajax/categories/categoriesfor.php:15
-msgid "No ID provided"
-msgstr ""
-
-#: ajax/categories/categoriesfor.php:27
-msgid "Error setting checksum."
-msgstr ""
-
-#: ajax/categories/delete.php:29
-msgid "No categories selected for deletion."
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
msgstr ""
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
-msgid "No address books found."
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
msgstr ""
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
-msgid "No contacts found."
-msgstr ""
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Maklumat vCard tidak tepat. Sila reload semula halaman ini."
-#: ajax/contactdetails.php:37
+#: ajax/contact/details.php:31
msgid "Missing ID"
-msgstr ""
+msgstr "ID Hilang"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
-msgstr ""
+msgstr "Ralat VCard untuk ID: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr ""
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "checksum tidak ditetapkan."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Masalah menambah buku alamat."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "Maklumat tentang vCard tidak betul."
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Masalah mengaktifkan buku alamat."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Sesuatu tidak betul."
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
-msgstr ""
+msgstr "Tiada ID kenalan yang diberi."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
-msgstr ""
+msgstr "Ralat pada foto kenalan."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
-msgstr ""
+msgstr "Ralat menyimpan fail sementara"
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
-msgstr ""
+msgstr "Foto muatan tidak sah."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr ""
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Maklumat vCard tidak tepat. Sila reload semula halaman ini."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Masalah memadam maklumat."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
-msgstr ""
+msgstr "ID Kenalan telah hilang."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr ""
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
-msgstr ""
+msgstr "Tiada direktori gambar yang diberi."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
-msgstr ""
+msgstr "Fail tidak wujud:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
-msgstr ""
+msgstr "Ralat pada muatan imej."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Ralat mendapatkan objek pada kenalan."
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Ralat mendapatkan maklumat gambar."
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Ralat menyimpan kenalan."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Ralat mengubah saiz imej"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Ralat memotong imej"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Ralat mencipta imej sementara"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr ""
+msgstr "Ralat mencari imej: "
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr ""
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr ""
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Masalah mengemaskini maklumat."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr ""
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Masalah mengemaskini buku alamat."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
-msgstr ""
+msgstr "Ralat memuatnaik senarai kenalan."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "Tiada ralat berlaku, fail berjaya dimuatnaik"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
-msgstr ""
+msgstr "Saiz fail yang dimuatnaik melebihi upload_max_filesize yang ditetapkan dalam php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
-msgstr ""
+msgstr "Saiz fail yang dimuatnaik melebihi MAX_FILE_SIZE yang ditetapkan dalam borang HTML"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "Fail yang dimuatnaik tidak lengkap"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
-msgstr ""
+msgstr "Tiada fail dimuatnaik"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Direktori sementara hilang"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Tidak boleh menyimpan imej sementara: "
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Tidak boleh membuka imej sementara: "
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Tiada fail dimuatnaik. Ralat tidak diketahui."
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Hubungan-hubungan"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Maaf, fungsi ini masih belum boleh diguna lagi"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "Tidak digunakan"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Tidak boleh mendapat alamat yang sah."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Ralat"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Nilai ini tidak boleh kosong."
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "Tidak boleh menggabungkan elemen."
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "'deleteProperty' dipanggil tanpa argumen taip. Sila maklumkan di bugs.owncloud.org"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Ubah nama"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Tiada fail dipilih untuk muatnaik."
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "Fail yang ingin dimuatnaik melebihi saiz yang dibenarkan."
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
+msgstr "PIlih jenis"
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
-msgstr ""
+#: js/loader.js:49
+msgid "Result: "
+msgstr "Hasil: "
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr " import, "
+
+#: js/loader.js:49
+msgid " failed."
+msgstr " gagal."
-#: js/contacts.js:1494
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
-msgstr ""
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr "Buku alamat tidak ditemui:"
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Ini bukan buku alamat anda."
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Hubungan tidak dapat ditemui"
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
+#: lib/app.php:141
+msgid "Facebook"
msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Ini bukan buku alamat anda."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Hubungan tidak dapat ditemui"
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Alamat"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefon"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "Emel"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organisasi"
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Kerja"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Rumah"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr "Lain"
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mudah alih"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Teks"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Suara"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
-msgstr ""
+msgstr "Mesej"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fax"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Video"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Alat Kelui"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
+msgstr "Internet"
+
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Hari lahir"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr "Perniagaan"
+
+#: lib/app.php:254
+msgid "Call"
msgstr ""
-#: lib/hooks.php:79
-msgid "{name}'s Birthday"
+#: lib/app.php:255
+msgid "Clients"
+msgstr "klien"
+
+#: lib/app.php:256
+msgid "Deliverer"
msgstr ""
-#: lib/search.php:22
+#: lib/app.php:257
+msgid "Holidays"
+msgstr "Hari kelepasan"
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr "Idea"
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr "Perjalanan"
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr "Jubli"
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr "Mesyuarat"
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr "Peribadi"
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr "Projek"
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
+msgid "{name}'s Birthday"
+msgstr "Hari Lahir {name}"
+
+#: lib/search.php:15
msgid "Contact"
msgstr "Hubungan"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Tambah kenalan"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Import"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr "Tetapan"
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Senarai Buku Alamat"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr ""
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Tutup"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Buku Alamat Baru"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
+#: templates/index.php:39
+msgid "Navigation"
msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "Sambungan CardDav"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Muat naik"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Sunting"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Padam"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr "Buku alamat seterusnya"
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Muat turun hubungan"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr "Buku alamat sebelumnya"
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Padam hubungan"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
-msgid "Drop photo to upload"
+#: templates/index.php:57
+msgid "Refresh contacts list"
msgstr ""
-#: templates/part.contact.php:29
-msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
+#: templates/index.php:59
+msgid "Add new contact"
msgstr ""
-#: templates/part.contact.php:30
-msgid "Edit name details"
+#: templates/index.php:61
+msgid "Add new addressbook"
msgstr ""
-#: templates/part.contact.php:35 templates/part.contact.php:105
-msgid "Nickname"
+#: templates/index.php:63
+msgid "Delete current contact"
msgstr ""
+#: templates/part.contact.php:17
+msgid "Drop photo to upload"
+msgstr "Letak foto disini untuk muatnaik"
+
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Padam foto semasa"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Ubah foto semasa"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Muatnaik foto baru"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Pilih foto dari ownCloud"
+
+#: templates/part.contact.php:35
+msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
+msgstr "Format bebas, Nama pendek, Nama penuh, Unduran dengan koma"
+
#: templates/part.contact.php:36
+msgid "Edit name details"
+msgstr "Ubah butiran nama"
+
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organisasi"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Padam"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
+msgid "Nickname"
+msgstr "Nama Samaran"
+
+#: templates/part.contact.php:42
msgid "Enter nickname"
+msgstr "Masukkan nama samaran"
+
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
msgstr ""
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Hari lahir"
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
-#: templates/part.contact.php:38
-msgid "dd-mm-yyyy"
+#: templates/part.contact.php:44
+msgid "Go to web site"
msgstr ""
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:46
+msgid "dd-mm-yyyy"
+msgstr "dd-mm-yyyy"
+
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
-msgstr ""
+msgstr "Kumpulan"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
-msgstr ""
+msgstr "Asingkan kumpulan dengan koma"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
-msgstr ""
+msgstr "Ubah kumpulan"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Pilihan"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
-msgstr ""
+msgstr "Berikan alamat emel yang sah."
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
-msgstr ""
+msgstr "Masukkan alamat emel"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
-msgstr ""
+msgstr "Hantar ke alamat"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
-msgstr ""
+msgstr "Padam alamat emel"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
-msgstr ""
+msgstr "Masukkan nombor telefon"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
+msgstr "Padam nombor telefon"
+
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
msgstr ""
-#: templates/part.contact.php:84
-msgid "View on map"
+#: templates/part.contact.php:101
+msgid "Delete IM"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
+msgid "View on map"
+msgstr "Lihat pada peta"
+
+#: templates/part.contact.php:110
msgid "Edit address details"
-msgstr ""
+msgstr "Ubah butiran alamat"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
-msgstr ""
+msgstr "Letak nota disini."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
-msgstr ""
+msgstr "Letak ruangan"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr ""
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefon"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr ""
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "Emel"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr ""
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Alamat"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr ""
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Nota"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr ""
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Muat turun hubungan"
-#: templates/part.cropphoto.php:64
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Padam hubungan"
+
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "Imej sementara telah dibuang dari cache."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
-msgstr ""
+msgstr "Ubah alamat"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Jenis"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Peti surat"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Sambungan"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Jalan"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "bandar"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Wilayah"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Poskod"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
-msgid "Country"
-msgstr "Negara"
-
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
msgstr ""
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Tambah"
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr "Negara"
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
@@ -647,176 +782,176 @@ msgstr "Buku alamat"
#: templates/part.edit_name_dialog.php:23
msgid "Hon. prefixes"
-msgstr ""
+msgstr "Awalan nama"
#: templates/part.edit_name_dialog.php:27
msgid "Miss"
-msgstr ""
+msgstr "Cik"
#: templates/part.edit_name_dialog.php:28
msgid "Ms"
-msgstr ""
+msgstr "Cik"
#: templates/part.edit_name_dialog.php:29
msgid "Mr"
-msgstr ""
+msgstr "Encik"
#: templates/part.edit_name_dialog.php:30
msgid "Sir"
-msgstr ""
+msgstr "Tuan"
#: templates/part.edit_name_dialog.php:31
msgid "Mrs"
-msgstr ""
+msgstr "Puan"
#: templates/part.edit_name_dialog.php:32
msgid "Dr"
-msgstr ""
+msgstr "Dr"
#: templates/part.edit_name_dialog.php:35
msgid "Given name"
-msgstr ""
+msgstr "Nama diberi"
#: templates/part.edit_name_dialog.php:37
msgid "Additional names"
-msgstr ""
+msgstr "Nama tambahan"
#: templates/part.edit_name_dialog.php:39
msgid "Family name"
-msgstr ""
+msgstr "Nama keluarga"
#: templates/part.edit_name_dialog.php:41
msgid "Hon. suffixes"
-msgstr ""
+msgstr "Awalan nama"
#: templates/part.edit_name_dialog.php:45
msgid "J.D."
-msgstr ""
+msgstr "J.D."
#: templates/part.edit_name_dialog.php:46
msgid "M.D."
-msgstr ""
+msgstr "M.D."
#: templates/part.edit_name_dialog.php:47
msgid "D.O."
-msgstr ""
+msgstr "D.O."
#: templates/part.edit_name_dialog.php:48
msgid "D.C."
-msgstr ""
+msgstr "D.C."
#: templates/part.edit_name_dialog.php:49
msgid "Ph.D."
-msgstr ""
+msgstr "Ph.D."
#: templates/part.edit_name_dialog.php:50
msgid "Esq."
-msgstr ""
+msgstr "Esq."
#: templates/part.edit_name_dialog.php:51
msgid "Jr."
-msgstr ""
+msgstr "Jr."
#: templates/part.edit_name_dialog.php:52
msgid "Sn."
-msgstr ""
-
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Buku Alamat Baru"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Kemaskini Buku Alamat"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Paparan nama"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Aktif"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Simpan"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Hantar"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Batal"
+msgstr "Sn."
#: templates/part.import.php:1
msgid "Import a contacts file"
-msgstr ""
+msgstr "Import fail kenalan"
#: templates/part.import.php:6
msgid "Please choose the addressbook"
-msgstr ""
+msgstr "Sila pilih buku alamat"
#: templates/part.import.php:10
msgid "create a new addressbook"
-msgstr ""
+msgstr "Cipta buku alamat baru"
#: templates/part.import.php:15
msgid "Name of new addressbook"
-msgstr ""
-
-#: templates/part.import.php:17
-msgid "Import"
-msgstr ""
+msgstr "Nama buku alamat"
#: templates/part.import.php:20
msgid "Importing contacts"
-msgstr ""
-
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr ""
+msgstr "Import senarai kenalan"
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr ""
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
-msgstr ""
+msgstr "Anda tidak mempunyai sebarang kenalan didalam buku alamat."
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
-msgstr ""
+msgstr "Letak kenalan"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr ""
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr "Pilih Buku Alamat"
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr "Masukkan nama"
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr "Masukkan keterangan"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
-msgstr ""
+msgstr "alamat selarian CardDAV"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
-msgstr ""
+msgstr "maklumat lanjut"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
-msgstr ""
+msgstr "Alamat utama"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
+msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Muat naik"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Sunting"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Buku Alamat Baru"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr "Nama"
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr "Keterangan"
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Simpan"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Batal"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr "Lagi..."
diff --git a/l10n/ms_MY/core.po b/l10n/ms_MY/core.po
index 1e876b63d1d..468102d63d9 100644
--- a/l10n/ms_MY/core.po
+++ b/l10n/ms_MY/core.po
@@ -3,16 +3,17 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Ahmed Noor Kader Mustajir Md Eusoff <sir.ade@gmail.com>, 2012.
# <hadri.hilmi@gmail.com>, 2011, 2012.
# Hadri Hilmi <hadri.hilmi@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Malay (Malaysia) (http://www.transifex.net/projects/p/owncloud/language/ms_MY/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -21,99 +22,99 @@ msgstr ""
#: ajax/vcategories/add.php:23 ajax/vcategories/delete.php:23
msgid "Application name not provided."
-msgstr ""
+msgstr "nama applikasi tidak disediakan"
#: ajax/vcategories/add.php:29
msgid "No category to add?"
-msgstr ""
+msgstr "Tiada kategori untuk di tambah?"
#: ajax/vcategories/add.php:36
msgid "This category already exists: "
-msgstr ""
+msgstr "Kategori ini telah wujud"
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-#: js/js.js:520
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Tetapan"
+
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Januari"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Februari"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Mac"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "April"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Mei"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Jun"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Julai"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "Ogos"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "September"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Oktober"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "November"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "Disember"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Batal"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Tidak"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Ya"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Ok"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "tiada kategori dipilih untuk penghapusan"
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Ralat"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Penetapan kata laluan Owncloud"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
-msgstr ""
+msgstr "Set semula kata lalaun ownCloud"
#: lostpassword/templates/email.php:1
msgid "Use the following link to reset your password: {link}"
@@ -178,7 +179,7 @@ msgstr "Bantuan"
#: templates/403.php:12
msgid "Access forbidden"
-msgstr ""
+msgstr "Larangan akses"
#: templates/404.php:12
msgid "Cloud not found"
@@ -186,7 +187,7 @@ msgstr "Awan tidak dijumpai"
#: templates/edit_categories_dialog.php:4
msgid "Edit categories"
-msgstr ""
+msgstr "Edit kategori"
#: templates/edit_categories_dialog.php:14
msgid "Add"
@@ -241,14 +242,10 @@ msgstr "Setup selesai"
msgid "web services under your control"
msgstr "Perkhidmatan web di bawah kawalan anda"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Log keluar"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Tetapan"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Hilang kata laluan?"
diff --git a/l10n/ms_MY/files.po b/l10n/ms_MY/files.po
index 3720c951525..d25d888cfc1 100644
--- a/l10n/ms_MY/files.po
+++ b/l10n/ms_MY/files.po
@@ -5,109 +5,139 @@
# Translators:
# Ahmed Noor Kader Mustajir Md Eusoff <sir.ade@gmail.com>, 2012.
# <hadri.hilmi@gmail.com>, 2011, 2012.
+# Hadri Hilmi <hadri.hilmi@gmail.com>, 2012.
+# Zulhilmi Rosnin <zulhilmi.rosnin@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Malay (Malaysia) (http://www.transifex.net/projects/p/owncloud/language/ms_MY/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Tiada ralat, fail berjaya dimuat naik."
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Fail yang dimuat naik melebihi penyata upload_max_filesize dalam php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Sebahagian daripada fail telah dimuat naik. "
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Tiada fail yang dimuat naik"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Folder sementara hilang"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
-msgstr ""
+msgstr "Gagal untuk disimpan"
#: appinfo/app.php:6
msgid "Files"
msgstr "fail"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Padam"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "Sudah wujud"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "ganti"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "Batal"
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "diganti"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "dengan"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
msgstr ""
-#: js/files.js:170
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "dihapus"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "sedang menghasilkan fail ZIP, mungkin mengambil sedikit masa."
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Tidak boleh memuatnaik fail anda kerana mungkin ianya direktori atau saiz fail 0 bytes"
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "Muat naik ralat"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "Dalam proses"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "Muatnaik dibatalkan."
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "penggunaa nama tidak sah, '/' tidak dibenarkan."
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Saiz"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Dimodifikasi"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "direktori"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "direktori"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "fail"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "fail"
#: templates/admin.php:5
msgid "File handling"
-msgstr ""
+msgstr "Pengendalian fail"
#: templates/admin.php:7
msgid "Maximum upload size"
@@ -115,23 +145,23 @@ msgstr "Saiz maksimum muat naik"
#: templates/admin.php:7
msgid "max. possible: "
-msgstr ""
+msgstr "maksimum:"
#: templates/admin.php:9
msgid "Needed for multi-file and folder downloads."
-msgstr ""
+msgstr "Diperlukan untuk muatturun fail pelbagai "
#: templates/admin.php:9
msgid "Enable ZIP-download"
-msgstr ""
+msgstr "Aktifkan muatturun ZIP"
#: templates/admin.php:11
msgid "0 is unlimited"
-msgstr ""
+msgstr "0 adalah tanpa had"
#: templates/admin.php:12
msgid "Maximum input size for ZIP files"
-msgstr ""
+msgstr "Saiz maksimum input untuk fail ZIP"
#: templates/index.php:7
msgid "New"
@@ -147,7 +177,7 @@ msgstr "Folder"
#: templates/index.php:11
msgid "From url"
-msgstr ""
+msgstr "Dari url"
#: templates/index.php:21
msgid "Upload"
@@ -155,7 +185,7 @@ msgstr "Muat naik"
#: templates/index.php:27
msgid "Cancel upload"
-msgstr ""
+msgstr "Batal muat naik"
#: templates/index.php:39
msgid "Nothing in here. Upload something!"
@@ -167,16 +197,12 @@ msgstr "Nama "
#: templates/index.php:49
msgid "Share"
-msgstr ""
+msgstr "Kongsi"
#: templates/index.php:51
msgid "Download"
msgstr "Muat turun"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Padam"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Muat naik terlalu besar"
@@ -189,8 +215,8 @@ msgstr "Fail yang cuba dimuat naik melebihi saiz maksimum fail upload server"
#: templates/index.php:71
msgid "Files are being scanned, please wait."
-msgstr ""
+msgstr "Fail sedang diimbas, harap bersabar."
#: templates/index.php:74
msgid "Current scanning"
-msgstr ""
+msgstr "Imbasan semasa"
diff --git a/l10n/ms_MY/files_encryption.po b/l10n/ms_MY/files_encryption.po
new file mode 100644
index 00000000000..33de1d365d7
--- /dev/null
+++ b/l10n/ms_MY/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/ms_MY/files_external.po b/l10n/ms_MY/files_external.po
new file mode 100644
index 00000000000..98ff53cf444
--- /dev/null
+++ b/l10n/ms_MY/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/ms_MY/files_sharing.po b/l10n/ms_MY/files_sharing.po
new file mode 100644
index 00000000000..ced7a00ab30
--- /dev/null
+++ b/l10n/ms_MY/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/ms_MY/files_versions.po b/l10n/ms_MY/files_versions.po
new file mode 100644
index 00000000000..3e40393f2ae
--- /dev/null
+++ b/l10n/ms_MY/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/ms_MY/lib.po b/l10n/ms_MY/lib.po
new file mode 100644
index 00000000000..cd3b8e2f803
--- /dev/null
+++ b/l10n/ms_MY/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/ms_MY/settings.po b/l10n/ms_MY/settings.po
index 9a11c708255..07857601beb 100644
--- a/l10n/ms_MY/settings.po
+++ b/l10n/ms_MY/settings.po
@@ -5,91 +5,125 @@
# Translators:
# Ahmed Noor Kader Mustajir Md Eusoff <sir.ade@gmail.com>, 2012.
# <hadri.hilmi@gmail.com>, 2011, 2012.
+# Hadri Hilmi <hadri.hilmi@gmail.com>, 2012.
+# Zulhilmi Rosnin <zulhilmi.rosnin@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Malay (Malaysia) (http://www.transifex.net/projects/p/owncloud/language/ms_MY/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "Emel disimpan"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Emel tidak sah"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
-msgstr "OpenID ditukar"
+msgstr "OpenID diubah"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Permintaan tidak sah"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Ralat pengesahan"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
-msgstr "Bahasa ditukar"
+msgstr "Bahasa diubah"
-#: js/apps.js:31 js/apps.js:67
-msgid "Disable"
+#: js/apps.js:18
+msgid "Error"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr "Nyahaktif"
+
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Aktif"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Simpan..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "_nama_bahasa_"
-#: templates/admin.php:13
-msgid "Log"
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "Amaran keselamatan"
+
+#: templates/admin.php:29
+msgid "Cron"
msgstr ""
-#: templates/admin.php:40
-msgid "More"
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
msgstr ""
-#: templates/apps.php:8
-msgid "Add your App"
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
msgstr ""
-#: templates/apps.php:22
+#: templates/admin.php:39
+msgid "Log"
+msgstr "Log"
+
+#: templates/admin.php:67
+msgid "More"
+msgstr "Lanjutan"
+
+#: templates/apps.php:10
+msgid "Add your App"
+msgstr "Tambah apps anda"
+
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Pilih aplikasi"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Lihat halaman applikasi di apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-dilesen"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "oleh"
#: templates/help.php:8
msgid "Documentation"
-msgstr ""
+msgstr "Dokumentasi"
#: templates/help.php:9
msgid "Managing Big Files"
-msgstr ""
+msgstr "Mengurus Fail Besar"
#: templates/help.php:10
msgid "Ask a question"
@@ -117,23 +151,23 @@ msgstr "yang tersedia"
#: templates/personal.php:12
msgid "Desktop and Mobile Syncing Clients"
-msgstr ""
+msgstr "Klien Selarian untuk Desktop dan Mobile"
#: templates/personal.php:13
msgid "Download"
-msgstr ""
+msgstr "Muat turun"
#: templates/personal.php:19
msgid "Your password got changed"
-msgstr "Kata laluan anda ditukar"
+msgstr "Kata laluan anda diubah"
#: templates/personal.php:20
msgid "Unable to change your password"
-msgstr "Gagal menukar kata laluan anda "
+msgstr "Gagal mengubah kata laluan anda "
#: templates/personal.php:21
msgid "Current password"
-msgstr "Kata laluan terkini"
+msgstr "Kata laluan semasa"
#: templates/personal.php:22
msgid "New password"
@@ -145,7 +179,7 @@ msgstr "Papar"
#: templates/personal.php:24
msgid "Change password"
-msgstr "Tukar kata laluan"
+msgstr "Ubah kata laluan"
#: templates/personal.php:30
msgid "Email"
@@ -171,34 +205,38 @@ msgstr "Bantu terjemah"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "guna alamat ini untuk menyambung owncloud anda dalam pengurus fail anda"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Nama"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Kata laluan "
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Kumpulan"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Buat"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
-msgstr ""
+msgstr "Kuota Lalai"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
+msgstr "Lain"
+
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
msgstr ""
-#: templates/users.php:47
+#: templates/users.php:82
msgid "Quota"
msgstr "Kuota"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Padam"
diff --git a/l10n/ms_MY/tasks.po b/l10n/ms_MY/tasks.po
new file mode 100644
index 00000000000..6a67235eeee
--- /dev/null
+++ b/l10n/ms_MY/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/ms_MY/user_ldap.po b/l10n/ms_MY/user_ldap.po
new file mode 100644
index 00000000000..744d804e9c7
--- /dev/null
+++ b/l10n/ms_MY/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/ms_MY/user_migrate.po b/l10n/ms_MY/user_migrate.po
new file mode 100644
index 00000000000..f4e730b7c83
--- /dev/null
+++ b/l10n/ms_MY/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/ms_MY/user_openid.po b/l10n/ms_MY/user_openid.po
new file mode 100644
index 00000000000..867a3bb7370
--- /dev/null
+++ b/l10n/ms_MY/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/nb_NO/admin_dependencies_chk.po b/l10n/nb_NO/admin_dependencies_chk.po
new file mode 100644
index 00000000000..0a6cff69a08
--- /dev/null
+++ b/l10n/nb_NO/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/nb_NO/admin_migrate.po b/l10n/nb_NO/admin_migrate.po
new file mode 100644
index 00000000000..12728fa65ed
--- /dev/null
+++ b/l10n/nb_NO/admin_migrate.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:
+# Arvid Nornes <arvid.nornes@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-24 02:01+0200\n"
+"PO-Revision-Date: 2012-08-23 17:37+0000\n"
+"Last-Translator: Arvid Nornes <arvid.nornes@gmail.com>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr "Eksporter denne ownCloud forekomsten"
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr "Dette vil opprette en komprimert fil som inneholder dataene fra denne ownCloud forekomsten.⎠Vennligst velg eksporttype:"
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr "Eksport"
diff --git a/l10n/nb_NO/bookmarks.po b/l10n/nb_NO/bookmarks.po
new file mode 100644
index 00000000000..ff93307a65a
--- /dev/null
+++ b/l10n/nb_NO/bookmarks.po
@@ -0,0 +1,61 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Arvid Nornes <arvid.nornes@gmail.com>, 2012.
+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:23+0000\n"
+"Last-Translator: Arvid Nornes <arvid.nornes@gmail.com>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr "Bokmerker"
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr "uten navn"
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr "Dra denne over din nettlesers bokmerker og klikk den, hvis du ønsker å hurtig legge til bokmerke for en nettside"
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr "Les senere"
+
+#: templates/list.php:13
+msgid "Address"
+msgstr "Adresse"
+
+#: templates/list.php:14
+msgid "Title"
+msgstr "Tittel"
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr "Etikett"
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr "Lagre bokmerke"
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr "Du har ingen bokmerker"
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/nb_NO/calendar.po b/l10n/nb_NO/calendar.po
index 09f790c740a..b001de5a262 100644
--- a/l10n/nb_NO/calendar.po
+++ b/l10n/nb_NO/calendar.po
@@ -12,21 +12,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.net/projects/p/owncloud/language/nb_NO/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Ingen kalendere funnet"
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Ingen hendelser funnet"
@@ -34,300 +42,394 @@ msgstr "Ingen hendelser funnet"
msgid "Wrong calendar"
msgstr "Feil kalender"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Ny tidssone:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Tidssone endret"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Ugyldig forespørsel"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Kalender"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
msgstr ""
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
msgstr ""
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
msgstr ""
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
msgstr ""
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr ""
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Bursdag"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Forretninger"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
-msgstr ""
+msgstr "Ring"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Kunder"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr ""
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Ferie"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Ideér"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Reise"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Jubileum"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Møte"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Annet"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "ersonlig"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Prosjekter"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Spørsmål"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Arbeid"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "uten navn"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Ny kalender"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Gjentas ikke"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Daglig"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Ukentlig"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Hver ukedag"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Annenhver uke"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "MÃ¥nedlig"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Ã…rlig"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "aldri"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "etter hyppighet"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "etter dato"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "etter dag i måned"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "etter ukedag"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Mandag"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Tirsdag"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Onsdag"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Torsdag"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Fredag"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Lørdag"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Søndag"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "begivenhetens uke denne måneden"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "første"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "andre"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "tredje"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "fjerde"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "femte"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "siste"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Januar"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Februar"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Mars"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "April"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Mai"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Juni"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Juli"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "August"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "September"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Oktober"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "November"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Desember"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "etter hendelsenes dato"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "etter dag i året"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "etter ukenummer/-numre"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "etter dag og måned"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Dato"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Kal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Hele dagen "
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Ny kalender"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Manglende felt"
@@ -361,40 +463,32 @@ msgstr "En hendelse kan ikke slutte før den har begynt."
msgid "There was a database fail"
msgstr "Det oppstod en databasefeil."
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Uke"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "ned"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Liste"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "I dag"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Kalendre"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Det oppstod en feil under åpningen av filen."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Velg en aktiv kalender"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Dine kalendere"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDav-lenke"
@@ -406,19 +500,19 @@ msgstr "Delte kalendere"
msgid "No shared calendars"
msgstr "Ingen delte kalendere"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Del Kalender"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Last ned"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Endre"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Slett"
@@ -504,23 +598,23 @@ msgstr "Separer kategorier med komma"
msgid "Edit categories"
msgstr "Rediger kategorier"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Hele dagen-hendelse"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Fra"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Til"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Avanserte innstillinger"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Sted"
@@ -528,7 +622,7 @@ msgstr "Sted"
msgid "Location of the Event"
msgstr "Hendelsessted"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Beskrivelse"
@@ -536,84 +630,86 @@ msgstr "Beskrivelse"
msgid "Description of the Event"
msgstr "Hendelesebeskrivelse"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Gjenta"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Avansert"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Velg ukedager"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Velg dager"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "og hendelsenes dag i året."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "og hendelsenes dag i måneden."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Velg måneder"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Velg uker"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "og hendelsenes uke i året."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Intervall"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Slutt"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "forekomster"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "Lag en ny kalender"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Importer en kalenderfil"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Vennligst velg kalenderen"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "Lag en ny kalender"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Navn på ny kalender:"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importer"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Importerer kalender"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Kalenderen ble importert uten feil"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Importer"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Lukk dialog"
@@ -629,45 +725,73 @@ msgstr "Se på hendelse"
msgid "No categories selected"
msgstr "Ingen kategorier valgt"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Velg kategori"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr ""
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr ""
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Tidssone"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Se alltid etter endringer i tidssone"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Tidsformat:"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24 t"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12 t"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Ukens første dag"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Synkroniseringsadresse fo kalender CalDAV:"
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/nb_NO/contacts.po b/l10n/nb_NO/contacts.po
index 3c4fd0d4297..524dec3bd0d 100644
--- a/l10n/nb_NO/contacts.po
+++ b/l10n/nb_NO/contacts.po
@@ -11,644 +11,777 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.net/projects/p/owncloud/language/nb_NO/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Et problem oppsto med å (de)aktivere adresseboken."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Et problem oppsto med å legge til kontakten."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Kan ikke legge til tomt felt."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Minst en av adressefeltene må oppgis."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "id er ikke satt."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr ""
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Kan ikke oppdatere adressebøker uten navn."
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Et problem oppsto med å legge til kontaktfeltet."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Et problem oppsto med å oppdatere adresseboken."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "Ingen ID angitt"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr ""
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Ingen kategorier valgt for sletting."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Ingen adressebok funnet."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Ingen kontakter funnet."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Et problem oppsto med å legge til kontakten."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr ""
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Kan ikke legge til tomt felt."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Minst en av adressefeltene må oppgis."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informasjonen om vCard-filen er ikke riktig. Last inn siden på nytt."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "Manglende ID"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr ""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Kan ikke legge til en adressebok uten navn."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr ""
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Et problem oppsto med å legge til adresseboken."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr ""
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Et problem oppsto med å aktivere adresseboken."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Noe gikk fryktelig galt."
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr ""
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Klarte ikke å lese kontaktbilde."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Klarte ikke å lagre midlertidig fil."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "Bildet som lastes inn er ikke gyldig."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "id er ikke satt."
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Informasjonen om vCard-filen er ikke riktig. Last inn siden på nytt."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Et problem oppsto med å fjerne kontaktfeltet."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
-msgstr ""
+msgstr "Kontakt-ID mangler."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "Mangler kontakt-id."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "Ingen filsti ble lagt inn."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Filen eksisterer ikke:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Klarte ikke å laste bilde."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
msgstr ""
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
msgstr ""
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Klarte ikke å lagre kontakt."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Klarte ikke å endre størrelse på bildet"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Klarte ikke å beskjære bildet"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Klarte ikke å lage et midlertidig bilde"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr ""
+msgstr "Kunne ikke finne bilde:"
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr ""
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "Noe gikk fryktelig galt."
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Et problem oppsto med å legge til kontaktfeltet."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "Kan ikke oppdatere adressebøker uten navn."
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Et problem oppsto med å oppdatere adresseboken."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
-msgstr ""
+msgstr "Klarte ikke å laste opp kontakter til lagringsplassen"
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Pust ut, ingen feil. Filen ble lastet opp problemfritt"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Filen du prøvde å laste opp var større enn grensen upload_max_filesize i php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Filen du prøvde å laste opp var større enn grensen satt i MAX_FILE_SIZE i HTML-skjemaet."
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "Filen du prøvde å laste opp ble kun delvis lastet opp"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Ingen filer ble lastet opp"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "Mangler midlertidig mappe"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Kunne ikke lagre midlertidig bilde:"
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Kunne ikke laste midlertidig bilde:"
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Ingen filer ble lastet opp. Ukjent feil."
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Kontakter"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
msgstr ""
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
msgstr ""
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Feil"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Endre navn"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Ingen filer valgt for opplasting."
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "Filen du prøver å laste opp er for stor."
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
+msgstr "Velg type"
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
-msgstr ""
+#: js/loader.js:49
+msgid "Result: "
+msgstr "Resultat:"
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr "importert,"
-#: js/contacts.js:1494
+#: js/loader.js:49
+msgid " failed."
+msgstr "feilet."
+
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Dette er ikke dine adressebok."
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Kontakten ble ikke funnet."
+
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Adresseboken ble ikke funnet."
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Dette er ikke dine adressebok."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Kontakten ble ikke funnet."
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Adresse"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefon"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "E-post"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organisasjon"
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Arbeid"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Hjem"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mobil"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Tekst"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Svarer"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Melding"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Faks"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Video"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Pager"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internett"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Bursdag"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
-msgstr "bursdagen til {name}"
+msgstr "{name}s bursdag"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Kontakt"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Ny kontakt"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Importer"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Adressebøker"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Konfigurer adressebok"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Lukk"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Ny adressebok"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Importer fra VDF"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDAV-lenke"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Hent ned"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Rediger"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Slett"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Hend ned kontakten"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Slett kontakt"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Dra bilder hit for å laste opp"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Fjern nåværende bilde"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Rediger nåværende bilde"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Last opp nytt bilde"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Velg bilde fra ownCloud"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr ""
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Endre detaljer rundt navn"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organisasjon"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Slett"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Kallenavn"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Skriv inn kallenavn"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Bursdag"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "dd-mm-åååå"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Grupper"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Skill gruppene med komma"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Endre grupper"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Foretrukket"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Vennligst angi en gyldig e-postadresse."
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Skriv inn e-postadresse"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "Send e-post til adresse"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Fjern e-postadresse"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Skriv inn telefonnummer"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Fjern telefonnummer"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Se på kart"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Endre detaljer rundt adresse"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Legg inn notater her."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Legg til felt"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Profilbilde"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefon"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Notat"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "E-post"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Fjern nåværende bilde"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Rediger nåværende bilde"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Adresse"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Last opp nytt bilde"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Notat"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Velg bilde fra ownCloud"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Hend ned kontakten"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Slett kontakt"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "Det midlertidige bildet er fjernet fra cache."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Endre adresse"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Type"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Postboks"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Utvidet"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Gate"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "By"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Området"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Postnummer"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "Land"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Endre kategorier"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Ny"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Adressebok"
#: templates/part.edit_name_dialog.php:23
msgid "Hon. prefixes"
-msgstr ""
+msgstr "Ærestitler"
#: templates/part.edit_name_dialog.php:27
msgid "Miss"
@@ -722,35 +855,6 @@ msgstr "Jr."
msgid "Sn."
msgstr "Sr."
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Ny adressebok"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Endre adressebok"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Visningsnavn"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Aktiv"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Lagre"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Lagre"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Avbryt"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "Importer en fil med kontakter."
@@ -767,57 +871,86 @@ msgstr "Lag ny adressebok"
msgid "Name of new addressbook"
msgstr "Navn på ny adressebok"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importer"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "Importerer kontakter"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr ""
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr ""
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "Du har ingen kontakter i din adressebok"
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Ny kontakt"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Konfigurer adressebøker"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr ""
-#: templates/settings.php:4
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr ""
+
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "Synkroniseringsadresse for CardDAV"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "mer info"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr ""
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Hent ned"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Rediger"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Ny adressebok"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Lagre"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/nb_NO/core.po b/l10n/nb_NO/core.po
index 235bd24a6b2..010ea337041 100644
--- a/l10n/nb_NO/core.po
+++ b/l10n/nb_NO/core.po
@@ -11,10 +11,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.net/projects/p/owncloud/language/nb_NO/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -37,83 +37,83 @@ msgstr "Denne kategorien finnes allerede:"
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
msgstr ""
-#: js/js.js:520
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Innstillinger"
+
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Januar"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Februar"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Mars"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "April"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Mai"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Juni"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Juli"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "August"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "September"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Oktober"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "November"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "Desember"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Avbryt"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Nei"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Ja"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Ok"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Ingen kategorier merket for sletting."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Feil"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "OwnCloud passordtilbakestilling"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "Tilbakestill ownCloud passord"
@@ -243,14 +243,10 @@ msgstr "Fullfør oppsetting"
msgid "web services under your control"
msgstr "nettjenester under din kontroll"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Logg ut"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Innstillinger"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Mistet passordet ditt?"
diff --git a/l10n/nb_NO/files.po b/l10n/nb_NO/files.po
index ced2b123595..b2428379040 100644
--- a/l10n/nb_NO/files.po
+++ b/l10n/nb_NO/files.po
@@ -4,49 +4,50 @@
#
# Translators:
# <ajarmund@gmail.com>, 2011, 2012.
+# Arvid Nornes <arvid.nornes@gmail.com>, 2012.
# Christer Eriksson <post@hc3web.com>, 2012.
# Daniel <i18n@daniel.priv.no>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.net/projects/p/owncloud/language/nb_NO/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Det er ingen feil. Filen ble lastet opp."
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Filstørrelsen overskrider maksgrensedirektivet upload_max_filesize i php.ini-konfigurasjonen."
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Filopplastningen ble bare delvis gjennomført"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Ingen fil ble lastet opp"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Mangler en midlertidig mappe"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Klarte ikke å skrive til disk"
@@ -54,57 +55,85 @@ msgstr "Klarte ikke å skrive til disk"
msgid "Files"
msgstr "Filer"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Slett"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
-msgid "generating ZIP-file, it may take some time."
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
msgstr ""
-#: js/files.js:199
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
+msgid "generating ZIP-file, it may take some time."
+msgstr "opprettet ZIP-fil, dette kan ta litt tid"
+
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "Ventende"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
msgstr ""
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Størrelse"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Endret"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "mappe"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "mapper"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "fil"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "filer"
#: templates/admin.php:5
msgid "File handling"
@@ -174,10 +203,6 @@ msgstr "Del"
msgid "Download"
msgstr "Last ned"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Slett"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Opplasting for stor"
diff --git a/l10n/nb_NO/files_encryption.po b/l10n/nb_NO/files_encryption.po
new file mode 100644
index 00000000000..a74d1bacc7e
--- /dev/null
+++ b/l10n/nb_NO/files_encryption.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Arvid Nornes <arvid.nornes@gmail.com>, 2012.
+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"
+"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"
+
+#: templates/settings.php:3
+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.php:5
+msgid "None"
+msgstr "Ingen"
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr "Slå på kryptering"
diff --git a/l10n/nb_NO/files_external.po b/l10n/nb_NO/files_external.po
new file mode 100644
index 00000000000..757e0be549b
--- /dev/null
+++ b/l10n/nb_NO/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/nb_NO/files_sharing.po b/l10n/nb_NO/files_sharing.po
new file mode 100644
index 00000000000..f869bfc1fba
--- /dev/null
+++ b/l10n/nb_NO/files_sharing.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Arvid Nornes <arvid.nornes@gmail.com>, 2012.
+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:27+0000\n"
+"Last-Translator: Arvid Nornes <arvid.nornes@gmail.com>\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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr "Størrelse"
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr "Endret"
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr "Slett alle"
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr "Slett"
diff --git a/l10n/nb_NO/files_versions.po b/l10n/nb_NO/files_versions.po
new file mode 100644
index 00000000000..9b44f482736
--- /dev/null
+++ b/l10n/nb_NO/files_versions.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Arvid Nornes <arvid.nornes@gmail.com>, 2012.
+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:25+0000\n"
+"Last-Translator: Arvid Nornes <arvid.nornes@gmail.com>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr "Slå på versjonering"
diff --git a/l10n/nb_NO/lib.po b/l10n/nb_NO/lib.po
new file mode 100644
index 00000000000..0d9ea115adc
--- /dev/null
+++ b/l10n/nb_NO/lib.po
@@ -0,0 +1,113 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Arvid Nornes <arvid.nornes@gmail.com>, 2012.
+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:31+0000\n"
+"Last-Translator: Arvid Nornes <arvid.nornes@gmail.com>\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"
+
+#: app.php:288
+msgid "Help"
+msgstr "Hjelp"
+
+#: app.php:295
+msgid "Personal"
+msgstr "Personlig"
+
+#: app.php:300
+msgid "Settings"
+msgstr "Innstillinger"
+
+#: app.php:305
+msgid "Users"
+msgstr "Brukere"
+
+#: app.php:312
+msgid "Apps"
+msgstr "Apper"
+
+#: app.php:314
+msgid "Admin"
+msgstr "Admin"
+
+#: files.php:276
+msgid "ZIP download is turned off."
+msgstr "ZIP-nedlasting av avslått"
+
+#: files.php:277
+msgid "Files need to be downloaded one by one."
+msgstr "Filene må lastes ned en om gangen"
+
+#: files.php:277 files.php:302
+msgid "Back to Files"
+msgstr "Tilbake til filer"
+
+#: files.php:301
+msgid "Selected files too large to generate zip file."
+msgstr "De valgte filene er for store til å kunne generere ZIP-fil"
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr "Applikasjon er ikke påslått"
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr "Autentiseringsfeil"
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr "sekunder siden"
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr "1 minuitt siden"
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr "%d minutter siden"
+
+#: template.php:91
+msgid "today"
+msgstr "i dag"
+
+#: template.php:92
+msgid "yesterday"
+msgstr "i går"
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr "%d dager siden"
+
+#: template.php:94
+msgid "last month"
+msgstr "forrige måned"
+
+#: template.php:95
+msgid "months ago"
+msgstr "måneder siden"
+
+#: template.php:96
+msgid "last year"
+msgstr "i fjor"
+
+#: template.php:97
+msgid "years ago"
+msgstr "Ã¥r siden"
diff --git a/l10n/nb_NO/settings.po b/l10n/nb_NO/settings.po
index 0b26d8f5056..551c484ea51 100644
--- a/l10n/nb_NO/settings.po
+++ b/l10n/nb_NO/settings.po
@@ -4,6 +4,7 @@
#
# Translators:
# <ajarmund@gmail.com>, 2011.
+# Arvid Nornes <arvid.nornes@gmail.com>, 2012.
# Christer Eriksson <post@hc3web.com>, 2012.
# Daniel <i18n@daniel.priv.no>, 2012.
# <itssmail@yahoo.no>, 2012.
@@ -11,77 +12,109 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.net/projects/p/owncloud/language/nb_NO/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "Epost lagret"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Ugyldig epost"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID endret"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Ugyldig forespørsel"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Språk endret"
-#: js/apps.js:31 js/apps.js:67
-msgid "Disable"
+#: js/apps.js:18
+msgid "Error"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr "Slå avBehandle "
+
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Slå på"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Lagrer..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "__language_name__"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Logg"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Mer"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Legg til din App"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Velg en app"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Se applikasjonens side på apps.owncloud.org"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-lisensiert"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "av"
@@ -91,7 +124,7 @@ msgstr "Dokumentasjon"
#: templates/help.php:9
msgid "Managing Big Files"
-msgstr ""
+msgstr "HÃ¥ndtere store filer"
#: templates/help.php:10
msgid "Ask a question"
@@ -119,7 +152,7 @@ msgstr "av den tilgjengelige"
#: templates/personal.php:12
msgid "Desktop and Mobile Syncing Clients"
-msgstr ""
+msgstr "Klienter for datamaskiner og mobile enheter"
#: templates/personal.php:13
msgid "Download"
@@ -173,34 +206,38 @@ msgstr "Bidra til oversettelsen"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "bruk denne adressen for å koble til din ownCloud gjennom filhåndtereren"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Navn"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Passord"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Grupper"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Opprett"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Standard Kvote"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
+msgstr "Annet"
+
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
msgstr ""
-#: templates/users.php:47
+#: templates/users.php:82
msgid "Quota"
msgstr "Kvote"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Slett"
diff --git a/l10n/nb_NO/tasks.po b/l10n/nb_NO/tasks.po
new file mode 100644
index 00000000000..bf07aa76d0e
--- /dev/null
+++ b/l10n/nb_NO/tasks.po
@@ -0,0 +1,107 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Arvid Nornes <arvid.nornes@gmail.com>, 2012.
+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:17+0000\n"
+"Last-Translator: Arvid Nornes <arvid.nornes@gmail.com>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr "feil i dato/klokkeslett"
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr "Oppgaver"
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr "Ingen kategori"
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr "Uspesifisert"
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr "1=høyest"
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr "5=middels"
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr "9=lavest"
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr "Feil i prosent fullført"
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr "Ulovlig prioritet"
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr "Legg til oppgave"
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr "Henter oppgaver..."
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr "Viktig"
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr "Mer"
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr "Mindre"
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr "Slett"
diff --git a/l10n/nb_NO/user_ldap.po b/l10n/nb_NO/user_ldap.po
new file mode 100644
index 00000000000..3a14ed0b28c
--- /dev/null
+++ b/l10n/nb_NO/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/nb_NO/user_migrate.po b/l10n/nb_NO/user_migrate.po
new file mode 100644
index 00000000000..2e2605cb75e
--- /dev/null
+++ b/l10n/nb_NO/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/nb_NO/user_openid.po b/l10n/nb_NO/user_openid.po
new file mode 100644
index 00000000000..cf98d889a49
--- /dev/null
+++ b/l10n/nb_NO/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/nl/admin_dependencies_chk.po b/l10n/nl/admin_dependencies_chk.po
new file mode 100644
index 00000000000..436ece1cdef
--- /dev/null
+++ b/l10n/nl/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/nl/admin_migrate.po b/l10n/nl/admin_migrate.po
new file mode 100644
index 00000000000..ad085a1d153
--- /dev/null
+++ b/l10n/nl/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/nl/bookmarks.po b/l10n/nl/bookmarks.po
new file mode 100644
index 00000000000..7aa6cc6bfc0
--- /dev/null
+++ b/l10n/nl/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/nl/calendar.po b/l10n/nl/calendar.po
index 1d7f622b145..8ef2a74f325 100644
--- a/l10n/nl/calendar.po
+++ b/l10n/nl/calendar.po
@@ -6,27 +6,36 @@
# <bart.formosus@gmail.com>, 2011.
# <bartv@thisnet.nl>, 2011.
# Erik Bent <hj.bent.60@gmail.com>, 2012.
+# <georg.stefan.germany@googlemail.com>, 2012.
# <jos@gelauff.net>, 2012.
# <pietje8501@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Dutch (http://www.transifex.net/projects/p/owncloud/language/nl/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Geen kalenders gevonden."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Geen gebeurtenissen gevonden."
@@ -34,300 +43,394 @@ msgstr "Geen gebeurtenissen gevonden."
msgid "Wrong calendar"
msgstr "Verkeerde kalender"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Nieuwe tijdszone:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Tijdzone is veranderd"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Ongeldige aanvraag"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Kalender"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd d.M"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd d.M"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM yyyy"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-msgstr "d MMM[ yyyy]{ '&#8212;' d[ MMM] yyyy}"
+msgstr "d[ MMM][ yyyy]{ '&#8212;' d MMM yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, d. MMM yyyy"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Verjaardag"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Zakelijk"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Bellen"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Klanten"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Leverancier"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Vakantie"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Ideeën"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Reis"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Jubileum"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Vergadering"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Ander"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Persoonlijk"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projecten"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Vragen"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Werk"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "onbekend"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Nieuwe Kalender"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Wordt niet herhaald"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Dagelijks"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Wekelijks"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Elke weekdag"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Tweewekelijks"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Maandelijks"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Jaarlijks"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "nooit meer"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "volgens gebeurtenissen"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "op datum"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "per dag van de maand"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "op weekdag"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Maandag"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Dinsdag"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Woensdag"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Donderdag"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Vrijdag"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Zaterdag"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Zondag"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "gebeurtenissen week van maand"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "eerste"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "tweede"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "derde"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "vierde"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "vijfde"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "laatste"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Januari"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Februari"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Maart"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "April"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Mei"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Juni"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Juli"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "Augustus"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "September"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Oktober"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "November"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "December"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "volgens evenementsdatum"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "volgens jaardag(en)"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "volgens weeknummer(s)"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "per dag en maand"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Datum"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Cal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Hele dag"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Nieuwe Kalender"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "missende velden"
@@ -361,40 +464,32 @@ msgstr "Het evenement eindigt voordat het begint"
msgid "There was a database fail"
msgstr "Er was een databasefout"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Week"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Maand"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Lijst"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Vandaag"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Kalenders"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Er is een fout opgetreden bij het verwerken van het bestand."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Kies actieve kalenders"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Je kalenders"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDav Link"
@@ -406,19 +501,19 @@ msgstr "Gedeelde kalenders"
msgid "No shared calendars"
msgstr "Geen gedeelde kalenders"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Deel kalender"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Download"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Bewerken"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Verwijderen"
@@ -504,23 +599,23 @@ msgstr "Gescheiden door komma's"
msgid "Edit categories"
msgstr "Wijzig categorieën"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Hele dag"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Van"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Aan"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Geavanceerde opties"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Locatie"
@@ -528,7 +623,7 @@ msgstr "Locatie"
msgid "Location of the Event"
msgstr "Locatie van de afspraak"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Beschrijving"
@@ -536,84 +631,86 @@ msgstr "Beschrijving"
msgid "Description of the Event"
msgstr "Beschrijving van het evenement"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Herhalen"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Geavanceerd"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Selecteer weekdagen"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Selecteer dagen"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "en de gebeurtenissen dag van het jaar"
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "en de gebeurtenissen dag van de maand"
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Selecteer maanden"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Selecteer weken"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "en de gebeurtenissen week van het jaar"
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Interval"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Einde"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "gebeurtenissen"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "Maak een nieuw agenda"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Importeer een agenda bestand"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Kies de kalender"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "Maak een nieuw agenda"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Naam van de nieuwe agenda"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importeer"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Importeer agenda"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Agenda succesvol geïmporteerd"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Importeer"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Sluit venster"
@@ -629,45 +726,73 @@ msgstr "Bekijk een gebeurtenis"
msgid "No categories selected"
msgstr "Geen categorieën geselecteerd"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Kies een categorie"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "van"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "op"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Tijdzone"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Controleer altijd op aanpassingen van de tijdszone"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Tijdformaat"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24uur"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12uur"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Eerste dag van de week"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "CalDAV kalender synchronisatie adres:"
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/nl/contacts.po b/l10n/nl/contacts.po
index af8b706fd49..facb131ffaf 100644
--- a/l10n/nl/contacts.po
+++ b/l10n/nl/contacts.po
@@ -12,220 +12,206 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Dutch (http://www.transifex.net/projects/p/owncloud/language/nl/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Fout bij het (de)activeren van het adresboek."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Er was een fout bij het toevoegen van het contact."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Kan geen lege eigenschap toevoegen."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Minstens één van de adresvelden moet ingevuld worden."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "id is niet ingesteld."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "Eigenschap bestaat al: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Kan adresboek zonder naam niet wijzigen"
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Fout bij het toevoegen van de contacteigenschap."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Fout bij het updaten van het adresboek."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "Geen ID opgegeven"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Instellen controlegetal mislukt"
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Geen categorieën geselecteerd om te verwijderen."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Geen adresboek gevonden"
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Geen contracten gevonden"
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Er was een fout bij het toevoegen van het contact."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "onderdeel naam is niet opgegeven."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Kan geen lege eigenschap toevoegen."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Minstens één van de adresvelden moet ingevuld worden."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "Eigenschap bestaat al: "
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informatie over de vCard is onjuist. Herlaad de pagina."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "Ontbrekend ID"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "Fout bij inlezen VCard voor ID: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Kan geen adresboek toevoegen zonder naam."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "controlegetal is niet opgegeven."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Fout bij het toevoegen van het adresboek."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "Informatie over vCard is fout. Herlaad de pagina: "
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Fout bij het activeren van het adresboek."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Er ging iets totaal verkeerd. "
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "Geen contact ID opgestuurd."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Lezen van contact foto mislukt."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Tijdelijk bestand opslaan mislukt."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "De geladen foto is niet goed."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "id is niet ingesteld."
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Informatie over de vCard is onjuist. Herlaad de pagina."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Fout bij het verwijderen van de contacteigenschap."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "Contact ID ontbreekt."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "Ontbrekende contact id."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "Geen fotopad opgestuurd."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Bestand bestaat niet:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Fout bij laden plaatje."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
msgstr ""
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
msgstr ""
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
msgstr ""
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
msgstr ""
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
msgstr ""
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
msgstr ""
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
msgstr ""
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "onderdeel naam is niet opgegeven."
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "controlegetal is niet opgegeven."
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "Informatie over vCard is fout. Herlaad de pagina: "
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "Er ging iets totaal verkeerd. "
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Fout bij het updaten van de contacteigenschap."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "Kan adresboek zonder naam niet wijzigen"
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Fout bij het updaten van het adresboek."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "Fout bij opslaan van contacten."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "De upload van het bestand is goedgegaan."
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Het bestand overschrijdt de upload_max_filesize instelling in php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Het bestand overschrijdt de MAX_FILE_SIZE instelling dat is opgegeven in het HTML formulier"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "Het bestand is gedeeltelijk geüpload"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Er is geen bestand geüpload"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "Er ontbreekt een tijdelijke map"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
msgstr ""
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
msgstr ""
@@ -233,416 +219,563 @@ msgstr ""
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Contacten"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
msgstr ""
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
msgstr ""
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
msgstr ""
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
msgstr ""
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
msgstr ""
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "Sleep een VCF bestand om de contacten te importeren."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/loader.js:49
+msgid "Result: "
msgstr ""
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
+#: js/loader.js:49
+msgid " imported, "
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: js/loader.js:49
+msgid " failed."
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Dit is niet uw adresboek."
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Contact kon niet worden gevonden."
+
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Adresboek niet gevonden."
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Dit is niet uw adresboek."
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Contact kon niet worden gevonden."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Adres"
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefoon"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "E-mail"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organisatie"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Werk"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Thuis"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mobiel"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Tekst"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Stem"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Bericht"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fax"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Video"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Pieper"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Verjaardag"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "{name}'s verjaardag"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Contact"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Contact toevoegen"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Importeer"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Adresboeken"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Instellen adresboeken"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr ""
+
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Nieuw Adresboek"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Importeer uit VCF"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDav Link"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Download"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Bewerken"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Verwijderen"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Download contact"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Verwijder contact"
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Verwijder foto uit upload"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Verwijdere huidige foto"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Wijzig huidige foto"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Upload nieuwe foto"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Selecteer foto uit ownCloud"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr "Formateer aangepast, Korte naam, Volledige naam, Achteruit of Achteruit met komma"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Wijzig naam gegevens"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organisatie"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Verwijderen"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Roepnaam"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Voer roepnaam in"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Verjaardag"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "dd-mm-yyyy"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Groepen"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Gebruik komma bij meerder groepen"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Wijzig groepen"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Voorkeur"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Geef een geldig email adres op."
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Voer email adres in"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "Mail naar adres"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Verwijder email adres"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Voer telefoonnummer in"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Verwijdere telefoonnummer"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Bekijk op een kaart"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Wijzig adres gegevens"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Voeg notitie toe"
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Voeg veld toe"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Profiel foto"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefoon"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Notitie"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "E-mail"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Verwijdere huidige foto"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Wijzig huidige foto"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Adres"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Upload nieuwe foto"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Notitie"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Selecteer foto uit ownCloud"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Download contact"
-#: templates/part.cropphoto.php:64
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Verwijder contact"
+
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
msgstr ""
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Wijzig adres"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Type"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Postbus"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Uitgebreide"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Straat"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Stad"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Regio"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Postcode"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "Land"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Wijzig categorieën"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Voeg toe"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Adresboek"
@@ -723,35 +856,6 @@ msgstr ""
msgid "Sn."
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Nieuw adresboek"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Wijzig adresboek"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Weergavenaam"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Actief"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Opslaan"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Opslaan"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Anuleren"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "Importeer een contacten bestand"
@@ -768,57 +872,86 @@ msgstr "Maak een nieuw adresboek"
msgid "Name of new addressbook"
msgstr "Naam van nieuw adresboek"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importeer"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "Importeren van contacten"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "Selecteer adresboek voor import:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "Selecteer van schijf"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "Je hebt geen contacten in je adresboek"
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Contactpersoon toevoegen"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Bewerken adresboeken"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr ""
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "CardDAV synchroniseert de adressen"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "meer informatie"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "Standaardadres"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "IOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Download"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Bewerken"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Nieuw Adresboek"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Opslaan"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Anuleren"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/nl/core.po b/l10n/nl/core.po
index 1bdd585b7e4..cdbdada846a 100644
--- a/l10n/nl/core.po
+++ b/l10n/nl/core.po
@@ -6,16 +6,17 @@
# <bart.formosus@gmail.com>, 2011.
# Erik Bent <hj.bent.60@gmail.com>, 2012.
# <icewind1991@gmail.com>, 2011.
+# <jos@gelauff.net>, 2012.
# <koen@vervloesem.eu>, 2011.
# <pietje8501@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Dutch (http://www.transifex.net/projects/p/owncloud/language/nl/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -38,83 +39,83 @@ msgstr "De categorie bestaat al."
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
msgstr ""
-#: js/js.js:520
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Instellingen"
+
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Januari"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Februari"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Maart"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "April"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Mei"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Juni"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Juli"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "Augustus"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "September"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Oktober"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "November"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "December"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Annuleren"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Nee"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Ja"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Ok"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Geen categorie geselecteerd voor verwijdering."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Fout"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Reset je ownCloud wachtwoord"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "ownCloud wachtwoord herstellen"
@@ -244,14 +245,10 @@ msgstr "Installatie afronden"
msgid "web services under your control"
msgstr "webdiensten die je beheerst"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Afmelden"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Instellingen"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Uw wachtwoord vergeten?"
diff --git a/l10n/nl/files.po b/l10n/nl/files.po
index d6e80473b09..247cc814a9c 100644
--- a/l10n/nl/files.po
+++ b/l10n/nl/files.po
@@ -7,49 +7,50 @@
# <bartv@thisnet.nl>, 2011.
# Erik Bent <hj.bent.60@gmail.com>, 2012.
# <icewind1991@gmail.com>, 2011.
+# <jos@gelauff.net>, 2012.
# <koen@vervloesem.eu>, 2011.
# <pietje8501@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Dutch (http://www.transifex.net/projects/p/owncloud/language/nl/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Geen fout opgetreden, bestand successvol geupload."
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Het geüploade bestand is groter dan de upload_max_filesize instelling in php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Het bestand is slechts gedeeltelijk geupload"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Geen bestand geüpload"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Een tijdelijke map mist"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Schrijven naar schijf mislukt"
@@ -57,57 +58,85 @@ msgstr "Schrijven naar schijf mislukt"
msgid "Files"
msgstr "Bestanden"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Verwijder"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
-msgid "generating ZIP-file, it may take some time."
+#: js/filelist.js:141
+msgid "replace"
msgstr ""
-#: js/files.js:199
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/filelist.js:141
+msgid "cancel"
msgstr ""
-#: js/files.js:199
-msgid "Upload Error"
+#: js/filelist.js:195
+msgid "replaced"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
-msgid "Pending"
+#: js/filelist.js:195
+msgid "with"
msgstr ""
-#: js/files.js:332
-msgid "Upload cancelled."
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
msgstr ""
-#: js/files.js:456
-msgid "Invalid name, '/' is not allowed."
+#: js/filelist.js:246
+msgid "deleted"
msgstr ""
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:171
+msgid "generating ZIP-file, it may take some time."
+msgstr "aanmaken ZIP-file, dit kan enige tijd duren."
+
+#: js/files.js:200
+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:200
+msgid "Upload Error"
+msgstr "Upload Fout"
+
+#: js/files.js:228 js/files.js:319 js/files.js:348
+msgid "Pending"
+msgstr "Wachten"
+
+#: js/files.js:333
+msgid "Upload cancelled."
+msgstr "Uploaden geannuleerd."
+
+#: js/files.js:457
+msgid "Invalid name, '/' is not allowed."
+msgstr "Ongeldige naam, '/' is niet toegestaan."
+
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Bestandsgrootte"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Laatst aangepast"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "map"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "mappen"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "bestand"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "bestanden"
#: templates/admin.php:5
msgid "File handling"
@@ -177,10 +206,6 @@ msgstr "Delen"
msgid "Download"
msgstr "Download"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Verwijder"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Bestanden te groot"
diff --git a/l10n/nl/files_encryption.po b/l10n/nl/files_encryption.po
new file mode 100644
index 00000000000..bae30cdd153
--- /dev/null
+++ b/l10n/nl/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/nl/files_external.po b/l10n/nl/files_external.po
new file mode 100644
index 00000000000..c9d33125417
--- /dev/null
+++ b/l10n/nl/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/nl/files_sharing.po b/l10n/nl/files_sharing.po
new file mode 100644
index 00000000000..ebeb97ffe94
--- /dev/null
+++ b/l10n/nl/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/nl/files_versions.po b/l10n/nl/files_versions.po
new file mode 100644
index 00000000000..94bdd0d707a
--- /dev/null
+++ b/l10n/nl/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/nl/lib.po b/l10n/nl/lib.po
new file mode 100644
index 00000000000..fbe8ced9f77
--- /dev/null
+++ b/l10n/nl/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/nl/settings.po b/l10n/nl/settings.po
index 977be9bdbcb..15427dff1bc 100644
--- a/l10n/nl/settings.po
+++ b/l10n/nl/settings.po
@@ -6,83 +6,116 @@
# <bart.formosus@gmail.com>, 2011.
# Erik Bent <hj.bent.60@gmail.com>, 2012.
# <icewind1991@gmail.com>, 2011, 2012.
+# <jos@gelauff.net>, 2012.
# <koen@vervloesem.eu>, 2011.
# <pietje8501@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Dutch (http://www.transifex.net/projects/p/owncloud/language/nl/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "E-mail bewaard"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Ongeldige e-mail"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID is aangepast"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Ongeldig verzoek"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Taal aangepast"
-#: js/apps.js:31 js/apps.js:67
-msgid "Disable"
+#: js/apps.js:18
+msgid "Error"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr "Uitschakelen"
+
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Inschakelen"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Aan het bewaren....."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "Nederlands"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Log"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Meer"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Voeg je App toe"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Selecteer een app"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Zie de applicatiepagina op apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-gelicentieerd"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "door"
@@ -174,34 +207,38 @@ msgstr "Help met vertalen"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "gebruik dit adres om verbinding te maken met ownCloud in uw bestandsbeheerprogramma"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Naam"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Wachtwoord"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Groepen"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Creëer"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Standaard limiet"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Andere"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Limieten"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "verwijderen"
diff --git a/l10n/nl/tasks.po b/l10n/nl/tasks.po
new file mode 100644
index 00000000000..f413e75158d
--- /dev/null
+++ b/l10n/nl/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/nl/user_ldap.po b/l10n/nl/user_ldap.po
new file mode 100644
index 00000000000..89b469b7ed9
--- /dev/null
+++ b/l10n/nl/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/nl/user_migrate.po b/l10n/nl/user_migrate.po
new file mode 100644
index 00000000000..cf6e2f0cd31
--- /dev/null
+++ b/l10n/nl/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/nl/user_openid.po b/l10n/nl/user_openid.po
new file mode 100644
index 00000000000..c046633481f
--- /dev/null
+++ b/l10n/nl/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/nn_NO/admin_dependencies_chk.po b/l10n/nn_NO/admin_dependencies_chk.po
new file mode 100644
index 00000000000..e15c7820ec8
--- /dev/null
+++ b/l10n/nn_NO/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/nn_NO/admin_migrate.po b/l10n/nn_NO/admin_migrate.po
new file mode 100644
index 00000000000..55090003437
--- /dev/null
+++ b/l10n/nn_NO/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/nn_NO/bookmarks.po b/l10n/nn_NO/bookmarks.po
new file mode 100644
index 00000000000..0eb3cfe7ed4
--- /dev/null
+++ b/l10n/nn_NO/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/nn_NO/calendar.po b/l10n/nn_NO/calendar.po
index 420f41350ef..97f56855aec 100644
--- a/l10n/nn_NO/calendar.po
+++ b/l10n/nn_NO/calendar.po
@@ -9,21 +9,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.net/projects/p/owncloud/language/nn_NO/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr ""
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr ""
@@ -31,300 +39,394 @@ msgstr ""
msgid "Wrong calendar"
msgstr "Feil kalender"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Ny tidssone:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Endra tidssone"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Ugyldig førespurnad"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Kalender"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
msgstr ""
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
msgstr ""
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
msgstr ""
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
msgstr ""
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr ""
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Bursdag"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Forretning"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Telefonsamtale"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Klientar"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Forsending"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Høgtid"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Idear"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Reise"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Jubileum"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Møte"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Anna"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Personleg"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Prosjekt"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Spørsmål"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Arbeid"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr ""
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Ny kalender"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Ikkje gjenta"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Kvar dag"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Kvar veke"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Kvar vekedag"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Annakvar veke"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Kvar månad"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Kvart år"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "aldri"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "av førekomstar"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "av dato"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "av månadsdag"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "av vekedag"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "MÃ¥ndag"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Tysdag"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Onsdag"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Torsdag"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Fredag"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Laurdag"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Søndag"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "hendingas veke av månad"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "første"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "andre"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "tredje"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "fjerde"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "femte"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "siste"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Januar"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Februar"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Mars"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "April"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Mai"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Juni"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Juli"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "August"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "September"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Oktober"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "November"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Desember"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "av hendingsdato"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "av årsdag(ar)"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "av vekenummer"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "av dag og månad"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Dato"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Kal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Heile dagen"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Ny kalender"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Manglande felt"
@@ -358,40 +460,32 @@ msgstr "Hendinga endar før den startar"
msgid "There was a database fail"
msgstr "Det oppstod ein databasefeil"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Veke"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "MÃ¥nad"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Liste"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "I dag"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Kalendarar"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Feil ved tolking av fila."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Vel aktive kalendarar"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr ""
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDav-lenkje"
@@ -403,19 +497,19 @@ msgstr ""
msgid "No shared calendars"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Last ned"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Endra"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Slett"
@@ -501,23 +595,23 @@ msgstr ""
msgid "Edit categories"
msgstr ""
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Heildagshending"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Frå"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Til"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Avanserte alternativ"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Stad"
@@ -525,7 +619,7 @@ msgstr "Stad"
msgid "Location of the Event"
msgstr "Stad for hendinga"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Skildring"
@@ -533,84 +627,86 @@ msgstr "Skildring"
msgid "Description of the Event"
msgstr "Skildring av hendinga"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Gjenta"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Avansert"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Vel vekedagar"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Vel dagar"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "og hendingane dag for år."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "og hendingane dag for månad."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Vel månedar"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Vel veker"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "og hendingane veke av året."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Intervall"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Ende"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "førekomstar"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "Lag ny kalender"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Importer ei kalenderfil"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Venlegast vel kalenderen"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "Lag ny kalender"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Namn for ny kalender"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importer"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Importerar kalender"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Kalender importert utan feil"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Importer"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Steng dialog"
@@ -626,45 +722,73 @@ msgstr ""
msgid "No categories selected"
msgstr ""
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Vel kategori"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr ""
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr ""
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Tidssone"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Sjekk alltid for endringar i tidssona"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Tidsformat"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24t"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12t"
-#: templates/settings.php:40
-msgid "First day of the week"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Kalender CalDAV synkroniseringsadresse:"
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/nn_NO/contacts.po b/l10n/nn_NO/contacts.po
index 93385875c22..aee7e872562 100644
--- a/l10n/nn_NO/contacts.po
+++ b/l10n/nn_NO/contacts.po
@@ -9,220 +9,206 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.net/projects/p/owncloud/language/nn_NO/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Ein feil oppstod ved (de)aktivering av adressebok."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Det kom ei feilmelding då kontakta vart lagt til."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Kan ikkje leggja til tomt felt."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Minst eit av adressefelta må fyllast ut."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr ""
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
msgstr ""
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Eit problem oppstod ved å leggja til kontakteltet."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Eit problem oppstod ved å oppdatere adresseboka."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr ""
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr ""
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr ""
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr ""
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr ""
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Det kom ei feilmelding då kontakta vart lagt til."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr ""
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Kan ikkje leggja til tomt felt."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Minst eit av adressefelta må fyllast ut."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informasjonen om vCard-et er feil, ver venleg og last sida på nytt."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr ""
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr ""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
msgstr ""
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Eit problem oppstod ved å leggja til adresseboka."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr ""
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Eit problem oppstod ved aktivering av adresseboka."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr ""
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr ""
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr ""
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr ""
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr ""
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr ""
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Informasjonen om vCard-et er feil, ver venleg og last sida på nytt."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Eit problem oppstod ved å slette kontaktfeltet."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr ""
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr ""
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr ""
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr ""
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr ""
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
msgstr ""
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
msgstr ""
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
msgstr ""
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
msgstr ""
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
msgstr ""
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
msgstr ""
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
msgstr ""
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr ""
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr ""
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Eit problem oppstod ved å endre kontaktfeltet."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr ""
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Eit problem oppstod ved å oppdatere adresseboka."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr ""
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr ""
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
msgstr ""
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
msgstr ""
@@ -230,415 +216,562 @@ msgstr ""
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Kotaktar"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
msgstr ""
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
msgstr ""
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
msgstr ""
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
msgstr ""
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
msgstr ""
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/loader.js:49
+msgid "Result: "
msgstr ""
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
+#: js/loader.js:49
+msgid " imported, "
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: js/loader.js:49
+msgid " failed."
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Dette er ikkje di adressebok."
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Fann ikkje kontakten."
+
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Dette er ikkje di adressebok."
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Fann ikkje kontakten."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Adresse"
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefonnummer"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "Epost"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organisasjon"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Arbeid"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Heime"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mobil"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Tekst"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Tale"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr ""
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Faks"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Video"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Personsøkjar"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr ""
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Bursdag"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr ""
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Kontakt"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Legg til kontakt"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Adressebøker"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
msgstr ""
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Ny adressebok"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
+#: templates/index.php:39
+msgid "Navigation"
msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDav lenkje"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Last ned"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Endra"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Slett"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Last ned kontakt"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Slett kontakt"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr ""
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr ""
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr ""
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organisasjon"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Slett"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr ""
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr ""
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Bursdag"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr ""
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr ""
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr ""
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr ""
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Føretrekt"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr ""
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr ""
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr ""
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr ""
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr ""
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr ""
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr ""
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr ""
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefonnummer"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr ""
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "Epost"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr ""
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Adresse"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
+#: templates/part.contact.php:133
+msgid "Note"
msgstr ""
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr ""
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Last ned kontakt"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Slett kontakt"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
msgstr ""
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr ""
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Skriv"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Postboks"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Utvida"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Gate"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Stad"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Region/fylke"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Postnummer"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
-msgid "Country"
-msgstr "Land"
-
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
msgstr ""
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Legg til"
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr "Land"
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
@@ -720,35 +853,6 @@ msgstr ""
msgid "Sn."
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Ny adressebok"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Endre adressebok"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Visningsnamn"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Aktiv"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Lagre"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Send"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Kanseller"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr ""
@@ -765,57 +869,86 @@ msgstr ""
msgid "Name of new addressbook"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
-msgstr ""
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr ""
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
msgstr ""
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
msgstr ""
-#: templates/part.no_contacts.php:2
-msgid "You have no contacts in your addressbook."
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
msgstr ""
-#: templates/part.no_contacts.php:4
-msgid "Add contact"
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
msgstr ""
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
msgstr ""
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr ""
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr ""
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr ""
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr ""
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Last ned"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Endra"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Ny adressebok"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Lagre"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Kanseller"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/nn_NO/core.po b/l10n/nn_NO/core.po
index f8af21ff3e1..707892db958 100644
--- a/l10n/nn_NO/core.po
+++ b/l10n/nn_NO/core.po
@@ -9,10 +9,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.net/projects/p/owncloud/language/nn_NO/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -35,51 +35,55 @@ msgstr ""
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
msgstr ""
-#: js/js.js:520
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Innstillingar"
+
+#: js/js.js:573
msgid "January"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
msgstr ""
@@ -108,10 +112,6 @@ msgid "Error"
msgstr ""
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Owncloud Passord tilbakestilling"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr ""
@@ -241,14 +241,10 @@ msgstr "Fullfør oppsettet"
msgid "web services under your control"
msgstr "Vev tjenester under din kontroll"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Logg ut"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Innstillingar"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Gløymt passordet?"
diff --git a/l10n/nn_NO/files.po b/l10n/nn_NO/files.po
index c5cc1159e3d..f0ce0b444a2 100644
--- a/l10n/nn_NO/files.po
+++ b/l10n/nn_NO/files.po
@@ -9,43 +9,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.net/projects/p/owncloud/language/nn_NO/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Ingen feil, fila vart lasta opp"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Den opplasta fila er større enn variabelen upload_max_filesize i php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Fila vart berre delvis lasta opp"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Ingen filer vart lasta opp"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Manglar ei mellombels mappe"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr ""
@@ -53,55 +53,83 @@ msgstr ""
msgid "Files"
msgstr "Filer"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Slett"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
msgstr ""
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
msgstr ""
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Storleik"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Endra"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
msgstr ""
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
msgstr ""
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
msgstr ""
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
msgstr ""
@@ -173,10 +201,6 @@ msgstr ""
msgid "Download"
msgstr "Last ned"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Slett"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "For stor opplasting"
diff --git a/l10n/nn_NO/files_encryption.po b/l10n/nn_NO/files_encryption.po
new file mode 100644
index 00000000000..8ad39e5cbfb
--- /dev/null
+++ b/l10n/nn_NO/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/nn_NO/files_external.po b/l10n/nn_NO/files_external.po
new file mode 100644
index 00000000000..c89d2fd6309
--- /dev/null
+++ b/l10n/nn_NO/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/nn_NO/files_sharing.po b/l10n/nn_NO/files_sharing.po
new file mode 100644
index 00000000000..1ae9969855c
--- /dev/null
+++ b/l10n/nn_NO/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/nn_NO/files_versions.po b/l10n/nn_NO/files_versions.po
new file mode 100644
index 00000000000..3ae26d5f131
--- /dev/null
+++ b/l10n/nn_NO/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/nn_NO/lib.po b/l10n/nn_NO/lib.po
new file mode 100644
index 00000000000..17b3f9e58db
--- /dev/null
+++ b/l10n/nn_NO/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/nn_NO/settings.po b/l10n/nn_NO/settings.po
index f8c099c030f..465d4e3f602 100644
--- a/l10n/nn_NO/settings.po
+++ b/l10n/nn_NO/settings.po
@@ -9,77 +9,109 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.net/projects/p/owncloud/language/nn_NO/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-20 06:17+0000\n"
+"Last-Translator: Alexander Stevenson <assteve@gmail.com>\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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "Klarer ikkje å laste inn liste fra App Store"
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "E-postadresse lagra"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Ugyldig e-postadresse"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID endra"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Ugyldig førespurnad"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Feil i autentisering"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Språk endra"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "Feil"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "Slå av"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Slå på"
#: js/personal.js:69
msgid "Saving..."
msgstr ""
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "Nynorsk"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr ""
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr ""
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr ""
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Vel ein applikasjon"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-lisensiert"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "av"
@@ -171,34 +203,38 @@ msgstr "Hjelp oss å oversett"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "bruk denne adressa for å kopla til ownCloud i filhandsamaren din"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Namn"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Passord"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Grupper"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Lag"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr ""
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr ""
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Kvote"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Slett"
diff --git a/l10n/nn_NO/tasks.po b/l10n/nn_NO/tasks.po
new file mode 100644
index 00000000000..9ebb58b030c
--- /dev/null
+++ b/l10n/nn_NO/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/nn_NO/user_ldap.po b/l10n/nn_NO/user_ldap.po
new file mode 100644
index 00000000000..86099dc6064
--- /dev/null
+++ b/l10n/nn_NO/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/nn_NO/user_migrate.po b/l10n/nn_NO/user_migrate.po
new file mode 100644
index 00000000000..40d6c0dac7a
--- /dev/null
+++ b/l10n/nn_NO/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/nn_NO/user_openid.po b/l10n/nn_NO/user_openid.po
new file mode 100644
index 00000000000..eb58b25dcb4
--- /dev/null
+++ b/l10n/nn_NO/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/pl/admin_dependencies_chk.po b/l10n/pl/admin_dependencies_chk.po
new file mode 100644
index 00000000000..952d2fda7b4
--- /dev/null
+++ b/l10n/pl/admin_dependencies_chk.po
@@ -0,0 +1,74 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Cyryl Sochacki <>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-20 09:01+0000\n"
+"Last-Translator: Cyryl Sochacki <>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr "Moduł php-json jest wymagane przez wiele aplikacji do wewnętrznej łączności"
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr "Modude php-curl jest wymagany do pobrania tytułu strony podczas dodawania zakładki"
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr "Moduł php-gd jest wymagany do tworzenia miniatury obrazów"
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr "Moduł php-ldap jest wymagany aby połączyć się z serwerem ldap"
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr "Moduł php-zip jest wymagany aby pobrać wiele plików na raz"
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr "Moduł php-mb_multibyte jest wymagany do poprawnego zarządzania kodowaniem."
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr "Moduł php-ctype jest wymagany do sprawdzania poprawności danych."
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr "Moduł php-xml jest wymagany do udostępniania plików przy użyciu protokołu webdav."
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr "Dyrektywy allow_url_fopen użytkownika php.ini powinna być ustawiona na 1 do pobierania bazy wiedzy z serwerów OCS"
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr "Moduł php-pdo jest wymagany do przechowywania danych owncloud w bazie danych."
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr "Stan zależności"
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr "Używane przez:"
diff --git a/l10n/pl/admin_migrate.po b/l10n/pl/admin_migrate.po
new file mode 100644
index 00000000000..096d746c63f
--- /dev/null
+++ b/l10n/pl/admin_migrate.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:
+# Cyryl Sochacki <>, 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 12:31+0000\n"
+"Last-Translator: Cyryl Sochacki <>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr "Eksportuj instancjÄ™ ownCloud"
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr "Spowoduje to utworzenie pliku skompresowanego, który zawiera dane tej instancji ownCloud.⎠proszę wybrać typ eksportu:"
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr "Eksport"
diff --git a/l10n/pl/bookmarks.po b/l10n/pl/bookmarks.po
new file mode 100644
index 00000000000..4eee7979454
--- /dev/null
+++ b/l10n/pl/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/pl/calendar.po b/l10n/pl/calendar.po
index 1a335acb352..8039d555b58 100644
--- a/l10n/pl/calendar.po
+++ b/l10n/pl/calendar.po
@@ -3,27 +3,36 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Cyryl Sochacki <>, 2012.
# Marcin Małecki <gerber@tkdami.net>, 2011, 2012.
# Piotr Sokół <psokol@jabster.pl>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Polish (http://www.transifex.net/projects/p/owncloud/language/pl/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Brak kalendarzy"
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Brak wydzarzeń"
@@ -31,300 +40,394 @@ msgstr "Brak wydzarzeń"
msgid "Wrong calendar"
msgstr "Nieprawidłowy kalendarz"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr "Import nieudany"
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr "zdarzenie zostało zapisane w twoim kalendarzu"
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Nowa strefa czasowa:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Zmieniono strefÄ™ czasowÄ…"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Nieprawidłowe żądanie"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Kalendarz"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd M/d"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd M/d"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM rrrr"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, MMM d, rrrr"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Urodziny"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Interesy"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Rozmowy"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Klienci"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Dostawcy"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Święta"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Pomysły"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Podróże"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Jubileusze"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Spotkania"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Inne"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Osobiste"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projekty"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Pytania"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Zawodowe"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr "przez"
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "nienazwany"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Nowy kalendarz"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Brak"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Codziennie"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Tygodniowo"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Każdego dnia tygodnia"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Dwa razy w tygodniu"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Miesięcznie"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Rocznie"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "nigdy"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "przez wydarzenia"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "po dacie"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "miesięcznie"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "tygodniowo"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Poniedziałek"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Wtorek"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Åšroda"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Czwartek"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "PiÄ…tek"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Sobota"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Niedziela"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "wydarzenia miesiÄ…ca"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "pierwszy"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "drugi"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "trzeci"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "czwarty"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "piÄ…ty"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "ostatni"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Styczeń"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Luty"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Marzec"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Kwiecień"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Maj"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Czerwiec"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Lipiec"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "Sierpień"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "Wrzesień"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Październik"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "Listopad"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Grudzień"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "po datach wydarzeń"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "po dniach roku"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "po tygodniach"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "przez dzień i miesiąc"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Data"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Kal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr "N."
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr "Pn."
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr "Wt."
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr "Åšr."
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr "Cz."
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr "Pt."
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr "S."
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr "Sty."
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr "Lut."
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr "Mar."
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr "Kwi."
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr "Maj."
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr "Cze."
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr "Lip."
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr "Sie."
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr "Wrz."
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr "Paź."
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr "Lis."
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr "Gru."
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Cały dzień"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Nowy kalendarz"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "BrakujÄ…ce pola"
@@ -358,40 +461,32 @@ msgstr "Wydarzenie kończy się przed rozpoczęciem"
msgid "There was a database fail"
msgstr "Awaria bazy danych"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Tydzień"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "MiesiÄ…c"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Lista"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Dzisiaj"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Kalendarze"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Nie udało się przetworzyć pliku."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Wybór aktywnych kalendarzy"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Twoje kalendarze"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "Wyświetla odnośnik CalDAV"
@@ -403,19 +498,19 @@ msgstr "Współdzielone kalendarze"
msgid "No shared calendars"
msgstr "Brak współdzielonych kalendarzy"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Współdziel kalendarz"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Pobiera kalendarz"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Edytuje kalendarz"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Usuwa kalendarz"
@@ -501,23 +596,23 @@ msgstr "Oddziel kategorie przecinkami"
msgid "Edit categories"
msgstr "Edytuj kategorie"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Wydarzenie całodniowe"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Od"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Do"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Opcje zaawansowane"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Lokalizacja"
@@ -525,7 +620,7 @@ msgstr "Lokalizacja"
msgid "Location of the Event"
msgstr "Lokalizacja wydarzenia"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Opis"
@@ -533,84 +628,86 @@ msgstr "Opis"
msgid "Description of the Event"
msgstr "Opis wydarzenia"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Powtarzanie"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Zaawansowane"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Wybierz dni powszechne"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Wybierz dni"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "oraz wydarzenia roku"
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "oraz wydarzenia miesiÄ…ca"
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Wybierz miesiÄ…ce"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Wybierz tygodnie"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "oraz wydarzenia roku."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Interwał"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Koniec"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "wystÄ…pienia"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "stwórz nowy kalendarz"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Zaimportuj plik kalendarza"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Proszę wybrać kalendarz"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "stwórz nowy kalendarz"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr "ProszÄ™ wybierz kalendarz"
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Nazwa kalendarza"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Import"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Importuje kalendarz"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Zaimportowano kalendarz"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Import"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Zamknij okno"
@@ -626,45 +723,73 @@ msgstr "Zobacz wydarzenie"
msgid "No categories selected"
msgstr "nie zaznaczono kategorii"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Wybierz kategoriÄ™"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "z"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "w"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Strefa czasowa"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Zawsze sprawdzaj zmiany strefy czasowej"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Format czasu"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24h"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12h"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Pierwszy dzień tygodnia"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr "więcej informacji"
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Adres synchronizacji kalendarza CalDAV:"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr "Odczytać tylko linki iCalendar"
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/pl/contacts.po b/l10n/pl/contacts.po
index 2219380006f..c0d1d34b692 100644
--- a/l10n/pl/contacts.po
+++ b/l10n/pl/contacts.po
@@ -5,643 +5,777 @@
# Translators:
# Bartek <bart.p.pl@gmail.com>, 2012.
# Cyryl Sochacki <>, 2012.
+# <czarnystokrotek@mailoo.org>, 2012.
# Marcin Małecki <gerber@tkdami.net>, 2011, 2012.
# Piotr Sokół <psokol@jabster.pl>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Polish (http://www.transifex.net/projects/p/owncloud/language/pl/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Błąd (de)aktywowania książki adresowej."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Wystąpił błąd podczas dodawania kontaktu."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Nie można dodać pustego elementu."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Należy wypełnić przynajmniej jedno pole adresu."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "id nie ustawione."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "Próba dodania z duplikowanej właściwości:"
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Nie można zaktualizować książki adresowej z pustą nazwą."
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "BÅ‚Ä…d dodawania elementu."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Błąd uaktualniania książki adresowej."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "Brak opatrzonego ID "
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Błąd ustawień sumy kontrolnej"
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Nie zaznaczono kategorii do usunięcia"
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Nie znaleziono książek adresowych"
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Nie znaleziono kontaktów."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Wystąpił błąd podczas dodawania kontaktu."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "nazwa elementu nie jest ustawiona."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr "Nie można parsować kontaktu:"
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Nie można dodać pustego elementu."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Należy wypełnić przynajmniej jedno pole adresu."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "Próba dodania z duplikowanej właściwości:"
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informacje o vCard są nieprawidłowe. Proszę odświeżyć stronę."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "Brak ID"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "Wystąpił błąd podczas przetwarzania VCard ID: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Nie można dodać książki adresowej z pusta nazwą"
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "checksum-a nie ustawiona"
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Błąd dodawania książki adresowej."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "Informacje na temat vCard są niepoprawne. Proszę przeładuj stronę:"
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Błąd aktywowania książki adresowej."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Gdyby coś poszło FUBAR."
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "ID kontaktu nie został utworzony."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Błąd odczytu zdjęcia kontaktu."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Wystąpił błąd podczas zapisywania pliku tymczasowego."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "Wczytywane zdjęcie nie jest poprawne."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "id nie ustawione."
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Informacje o vCard są nieprawidłowe. Proszę odświeżyć stronę."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "BÅ‚Ä…d usuwania elementu."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "Brak kontaktu id."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "Brak kontaktu id."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "Ścieżka do zdjęcia nie została podana."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Plik nie istnieje:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "BÅ‚Ä…d Å‚adowania obrazu."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "BÅ‚Ä…d pobrania kontaktu."
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Błąd uzyskiwania właściwości ZDJĘCIA."
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "BÅ‚Ä…d zapisu kontaktu."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "BÅ‚Ä…d zmiany rozmiaru obrazu"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "BÅ‚Ä…d przycinania obrazu"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "BÅ‚Ä…d utworzenia obrazu tymczasowego"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "nazwa elementu nie jest ustawiona."
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "checksum-a nie ustawiona"
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "Informacje na temat vCard są niepoprawne. Proszę przeładuj stronę:"
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "Gdyby coś poszło FUBAR."
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "BÅ‚Ä…d uaktualniania elementu."
+msgstr "BÅ‚Ä…d znajdowanie obrazu: "
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "Nie można zaktualizować książki adresowej z pustą nazwą."
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Błąd uaktualniania książki adresowej."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "Wystąpił błąd podczas wysyłania kontaktów do magazynu."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Nie było błędów, plik wyczytano poprawnie."
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Załadowany plik przekracza wielkość upload_max_filesize w php.ini "
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Wczytywany plik przekracza wielkość MAX_FILE_SIZE, która została określona w formularzu HTML"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "Załadowany plik tylko częściowo został wysłany."
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Plik nie został załadowany"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "Brak folderu tymczasowego"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Nie można zapisać obrazu tymczasowego: "
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Nie można wczytać obrazu tymczasowego: "
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Plik nie został załadowany. Nieznany błąd"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Kontakty"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Niestety, ta funkcja nie została jeszcze zaimplementowana"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "Nie wdrożono"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Nie można pobrać prawidłowego adresu."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "BÅ‚Ä…d"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Ta właściwość nie może być pusta."
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "Nie można serializować elementów."
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "\"deleteProperty' wywołana bez argumentu typu. Proszę raportuj na bugs.owncloud.org"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Zmień nazwę"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Żadne pliki nie zostały zaznaczone do wysłania."
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "Plik, który próbujesz wysłać przekracza maksymalny rozmiar pliku przekazywania na tym serwerze."
-#: js/contacts.js:1119
-msgid "Select photo"
-msgstr ""
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr "Błąd wczytywania zdjęcia profilu."
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
-
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "Upuść plik VCF do importu kontaktów."
-
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
-msgstr ""
-
-#: js/contacts.js:1476
-msgid "OK"
-msgstr ""
+msgstr "Wybierz typ"
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
-msgstr ""
-
-#: js/contacts.js:1634
-msgid "Upload too large"
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Wrong file type"
-msgstr ""
-
-#: js/contacts.js:1644
+#: js/contacts.js:1578
msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
-msgstr ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr "Niektóre kontakty są zaznaczone do usunięcia, ale nie są usunięte jeszcze. Proszę czekać na ich usunięcie."
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr "Czy chcesz scalić te książki adresowe?"
#: js/loader.js:49
msgid "Result: "
-msgstr ""
+msgstr "Wynik: "
#: js/loader.js:49
msgid " imported, "
-msgstr ""
+msgstr " importowane, "
#: js/loader.js:49
msgid " failed."
-msgstr ""
+msgstr " nie powiodło się."
+
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
+msgstr "Nazwa nie może być pusta."
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Nie znaleziono książki adresowej"
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr "Nie znaleziono książki adresowej:"
-#: lib/app.php:34
+#: lib/app.php:52
msgid "This is not your addressbook."
msgstr "To nie jest Twoja książka adresowa."
-#: lib/app.php:45
+#: lib/app.php:71
msgid "Contact could not be found."
msgstr "Nie można odnaleźć kontaktu."
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Adres"
+#: lib/app.php:116
+msgid "Jabber"
+msgstr "Jabber"
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefon"
+#: lib/app.php:121
+msgid "AIM"
+msgstr "AIM"
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "E-mail"
+#: lib/app.php:126
+msgid "MSN"
+msgstr "MSN"
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organizacja"
+#: lib/app.php:131
+msgid "Twitter"
+msgstr "Twitter"
+
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr "GoogleTalk"
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr "Facebook"
+
+#: lib/app.php:146
+msgid "XMPP"
+msgstr "XMPP"
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr "ICQ"
+
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr "Yahoo"
+
+#: lib/app.php:161
+msgid "Skype"
+msgstr "Skype"
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:166
+msgid "QQ"
+msgstr "QQ"
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr "GG"
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Praca"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Dom"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr "Inne"
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Komórka"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Połączenie tekstowe"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Połączenie głosowe"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Wiadomość"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Faks"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Połączenie wideo"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Pager"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Urodziny"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr "Biznesowe"
+
+#: lib/app.php:254
+msgid "Call"
+msgstr "Wywołanie"
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr "Klienci"
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr "Doręczanie"
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr "Święta"
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr "Pomysły"
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr "Podróż"
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr "Jubileusz"
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr "Spotkanie"
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr "Osobiste"
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr "Projekty"
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr "Pytania"
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "{name} Urodzony"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Kontakt"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Dodaj kontakt"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Import"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr "Ustawienia"
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Książki adresowe"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Konfiguruj książkę adresową"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Zamknij"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Nowa książka adresowa"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr "Skróty klawiatury"
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Importuj z VFC"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr "Nawigacja"
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "Wyświetla odnośnik CardDav"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr "Następny kontakt na liście"
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Pobiera książkę adresową"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr "Poprzedni kontakt na liście"
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Edytuje książkę adresową"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr "Rozwiń/Zwiń bieżącą książkę adresową"
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Usuwa książkę adresową"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr "Następna książka adresowa"
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Pobiera kontakt"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr "Poprzednia książka adresowa"
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Usuwa kontakt"
+#: templates/index.php:54
+msgid "Actions"
+msgstr "Akcje"
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr "Odśwież listę kontaktów"
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr "Dodaj nowy kontakt"
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr "Dodaj nowa książkę adresową"
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr "Usuń obecny kontakt"
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Upuść fotografię aby załadować"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Usuń aktualne zdjęcie"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Edytuj aktualne zdjęcie"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Wczytaj nowe zdjęcie"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Wybierz zdjęcie z ownCloud"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr "Format niestandardowy, krótkie nazwy, imię i nazwisko, Odwracać lub Odwrócić z przecinkiem"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Edytuj szczegóły nazwy"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organizacja"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Usuwa książkę adresową"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Nazwa"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Wpisz nazwÄ™"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Urodziny"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr "Strona www"
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr "http://www.jakasstrona.pl"
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr "Idż do strony www"
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "dd-mm-rrrr"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Grupy"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Oddziel grupy przecinkami"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Edytuj grupy"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Preferowane"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Określ prawidłowy adres e-mail."
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Wpisz adres email"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "Mail na adres"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Usuń adres mailowy"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Wpisz numer telefonu"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Usuń numer telefonu"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Zobacz na mapie"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Edytuj szczegóły adresu"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Dodaj notatkÄ™ tutaj."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Dodaj pole"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Zdjęcie profilu"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefon"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Uwaga"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "E-mail"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Usuń aktualne zdjęcie"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Edytuj aktualne zdjęcie"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Adres"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Wczytaj nowe zdjęcie"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Uwaga"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Wybierz zdjęcie z ownCloud"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Pobiera kontakt"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Usuwa kontakt"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "Tymczasowy obraz został usunięty z pamięci podręcznej."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Edytuj adres"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Typ"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Skrzynka pocztowa"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr "Ulica"
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr "Ulica i numer"
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Rozszerzony"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Ulica"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr "Numer lokalu"
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Miasto"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Region"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr "Np. stanu lub prowincji"
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Kod pocztowy"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr "Kod pocztowy"
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "Kraj"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Edytuj kategorie"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Dodaj"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Książka adresowa"
@@ -722,35 +856,6 @@ msgstr "Jr."
msgid "Sn."
msgstr "Sn."
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Nowa książka adresowa"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Edytowanie książki adresowej"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Wyświetlana nazwa"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Aktywna"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Zapisz"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Potwierdź"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Anuluj"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "Importuj plik z kontaktami"
@@ -767,57 +872,86 @@ msgstr "utwórz nową książkę adresową"
msgid "Name of new addressbook"
msgstr "Nazwa nowej książki adresowej"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Import"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "importuj kontakty"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "Zaznacz książkę adresową do importu do:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "Wybierz z HD"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "Nie masz żadnych kontaktów w swojej książce adresowej."
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Dodaj kontakt"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Konfiguruj książkę adresową"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr "Wybierz książki adresowe"
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr "Wpisz nazwÄ™"
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr "Wprowadź opis"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "adres do synchronizacji CardDAV"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "więcej informacji"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "Pierwszy adres"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr "Pokaż link CardDAV"
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr "Pokaż tylko do odczytu łącze VCF"
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr "Udostępnij"
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Pobiera książkę adresową"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Edytuje książkę adresową"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Nowa książka adresowa"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr "Nazwa"
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr "Opis"
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Zapisz"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Anuluj"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr "Więcej..."
diff --git a/l10n/pl/core.po b/l10n/pl/core.po
index 905b545290d..ea413953c7f 100644
--- a/l10n/pl/core.po
+++ b/l10n/pl/core.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Cyryl Sochacki <>, 2012.
# Kamil Domański <kdomanski@kdemail.net>, 2011.
# Marcin Małecki <gerber@tkdami.net>, 2011, 2012.
# Marcin Małecki <mosslar@gmail.com>, 2011.
@@ -12,10 +13,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Polish (http://www.transifex.net/projects/p/owncloud/language/pl/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -36,85 +37,85 @@ msgstr "Ta kategoria już istnieje"
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Ustawienia"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Styczeń"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Luty"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Marzec"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "Kwiecień"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Maj"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Czerwiec"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Lipiec"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "Sierpień"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "Wrzesień"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Październik"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "Listopad"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "Grudzień"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Anuluj"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Nie"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Tak"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Ok"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Nie ma kategorii zaznaczonych do usunięcia."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "BÅ‚Ä…d"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Resetowanie hasła"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "restart hasła"
@@ -244,14 +245,10 @@ msgstr "Zakończ konfigurowanie"
msgid "web services under your control"
msgstr "usługi internetowe pod kontrolą"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Wylogowuje użytkownika"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Ustawienia"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Nie pamiętasz hasła?"
diff --git a/l10n/pl/files.po b/l10n/pl/files.po
index b37c9903ee3..706d14931b0 100644
--- a/l10n/pl/files.po
+++ b/l10n/pl/files.po
@@ -11,43 +11,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Polish (http://www.transifex.net/projects/p/owncloud/language/pl/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Przesłano plik"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Rozmiar przesłanego pliku przekracza maksymalną wartość dyrektywy upload_max_filesize, zawartą w pliku php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Plik przesłano tylko częściowo"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Nie przesłano żadnego pliku"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Brak katalogu tymczasowego"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "BÅ‚Ä…d zapisu na dysk"
@@ -55,57 +55,85 @@ msgstr "BÅ‚Ä…d zapisu na dysk"
msgid "Files"
msgstr "Pliki"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Usuwa element"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "Już istnieje"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "zastap"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "anuluj"
-#: js/files.js:170
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "zastÄ…pione"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "z"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "wróć"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "skasuj"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "Generowanie pliku ZIP, może potrwać pewien czas."
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Nie można wczytać pliku jeśli jest katalogiem lub ma 0 bajtów"
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "BÅ‚Ä…d wczytywania"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "OczekujÄ…ce"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "Wczytywanie anulowane."
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "Nieprawidłowa nazwa '/' jest niedozwolone."
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Rozmiar"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Czas modyfikacji"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "folder"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "foldery"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "plik"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "pliki"
#: templates/admin.php:5
msgid "File handling"
@@ -175,10 +203,6 @@ msgstr "Współdziel"
msgid "Download"
msgstr "Pobiera element"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Usuwa element"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Wysyłany plik ma za duży rozmiar"
diff --git a/l10n/pl/files_encryption.po b/l10n/pl/files_encryption.po
new file mode 100644
index 00000000000..fbb12dbe1fb
--- /dev/null
+++ b/l10n/pl/files_encryption.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Cyryl Sochacki <>, 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 12:15+0000\n"
+"Last-Translator: Cyryl Sochacki <>\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"
+
+#: templates/settings.php:3
+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.php:5
+msgid "None"
+msgstr "Brak"
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr "WÅ‚Ä…cz szyfrowanie"
diff --git a/l10n/pl/files_external.po b/l10n/pl/files_external.po
new file mode 100644
index 00000000000..6257d725994
--- /dev/null
+++ b/l10n/pl/files_external.po
@@ -0,0 +1,83 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Cyryl Sochacki <>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-20 09:06+0000\n"
+"Last-Translator: Cyryl Sochacki <>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr "Zewnętrzna zasoby dyskowe"
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr "Punkt montowania"
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr "Zaplecze"
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr "Konfiguracja"
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr "Opcje"
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr "Zastosowanie"
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr "Dodaj punkt montowania"
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr "Nie ustawione"
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr "Wszyscy uzytkownicy"
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr "Grupy"
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr "Użytkownicy"
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr "Usuń"
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr "Główny certyfikat SSL"
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr "Importuj główny certyfikat"
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr "Włącz zewnętrzne zasoby dyskowe użytkownika"
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr "Zezwalaj użytkownikom na montowanie ich własnych zewnętrznych zasobów dyskowych"
diff --git a/l10n/pl/files_sharing.po b/l10n/pl/files_sharing.po
new file mode 100644
index 00000000000..576158713dd
--- /dev/null
+++ b/l10n/pl/files_sharing.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Cyryl Sochacki <>, 2012.
+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-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr "Rozmiar"
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr "Zmodyfikowane"
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr "Usuń wszystko"
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr "Usuń"
diff --git a/l10n/pl/files_versions.po b/l10n/pl/files_versions.po
new file mode 100644
index 00000000000..bdacd74f04a
--- /dev/null
+++ b/l10n/pl/files_versions.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Cyryl Sochacki <>, 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 12:35+0000\n"
+"Last-Translator: Cyryl Sochacki <>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr "WygasajÄ… wszystkie wersje"
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr "Włącz wersjonowanie plików"
diff --git a/l10n/pl/gallery.po b/l10n/pl/gallery.po
index b53b2545d66..ff5aef8d74e 100644
--- a/l10n/pl/gallery.po
+++ b/l10n/pl/gallery.po
@@ -4,77 +4,42 @@
#
# Translators:
# Bartek <bart.p.pl@gmail.com>, 2012.
+# Cyryl Sochacki <>, 2012.
# Marcin Małecki <gerber@tkdami.net>, 2012.
# Piotr Sokół <psokol@jabster.pl>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Polish (http://www.transifex.net/projects/p/owncloud/language/pl/)\n"
+"POT-Creation-Date: 2012-07-31 22:53+0200\n"
+"PO-Revision-Date: 2012-07-30 10:41+0000\n"
+"Last-Translator: Marcin Małecki <gerber@tkdami.net>\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"
-#: appinfo/app.php:37
+#: appinfo/app.php:39
msgid "Pictures"
msgstr "Zdjęcia"
-#: js/album_cover.js:44
+#: js/pictures.js:12
msgid "Share gallery"
-msgstr ""
+msgstr "Udostępnij galerię"
-#: js/album_cover.js:64 js/album_cover.js:100 js/album_cover.js:133
+#: js/pictures.js:32
msgid "Error: "
-msgstr ""
+msgstr "BÅ‚Ä…d: "
-#: js/album_cover.js:64 js/album_cover.js:100
+#: js/pictures.js:32
msgid "Internal error"
-msgstr ""
-
-#: js/album_cover.js:114
-msgid "Scanning root"
-msgstr ""
-
-#: js/album_cover.js:115
-msgid "Default order"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Ascending"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Descending"
-msgstr ""
-
-#: js/album_cover.js:117 templates/index.php:19
-msgid "Settings"
-msgstr "Ustawienia"
-
-#: js/album_cover.js:122
-msgid "Scanning root cannot be empty"
-msgstr ""
-
-#: js/album_cover.js:122 js/album_cover.js:133
-msgid "Error"
-msgstr ""
-
-#: templates/index.php:16
-msgid "Rescan"
-msgstr "Przeszukaj"
-
-#: templates/index.php:17
-msgid "Stop"
-msgstr "Stop"
+msgstr "Błąd wewnętrzny"
-#: templates/index.php:18
-msgid "Share"
-msgstr "Współdziel"
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr "Pokaz slajdów"
#: templates/view_album.php:19
msgid "Back"
diff --git a/l10n/pl/lib.po b/l10n/pl/lib.po
new file mode 100644
index 00000000000..5b7d557a682
--- /dev/null
+++ b/l10n/pl/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/pl/settings.po b/l10n/pl/settings.po
index 25b7eda7751..b9273c4c45f 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:
+# Cyryl Sochacki <>, 2012.
# <icewind1991@gmail.com>, 2012.
# Kamil Domański <kdomanski@kdemail.net>, 2011.
# Marcin Małecki <gerber@tkdami.net>, 2011, 2012.
@@ -13,77 +14,109 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Polish (http://www.transifex.net/projects/p/owncloud/language/pl/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-20 07:48+0000\n"
+"Last-Translator: Cyryl Sochacki <>\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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "Nie mogę załadować listy aplikacji"
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "Email zapisany"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Niepoprawny email"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "Zmieniono OpenID"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Nieprawidłowe żądanie"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "BÅ‚Ä…d uwierzytelniania"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Język zmieniony"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "BÅ‚Ä…d"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "Wyłączone"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "WÅ‚Ä…czone"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Zapisywanie..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "Polski"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "Ostrzeżenia bezpieczeństwa"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "Cron"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr "wykonanie jednego zadania z każdej załadowanej strony"
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr "cron.php jest zarejestrowany w usłudze webcron"
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr "korzystaj z usługi systemowej cron"
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Log"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Więcej"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Dodaj aplikacje"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Zaznacz aplikacje"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Zobacz stronÄ™ aplikacji na apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-licencjonowany"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "przez"
@@ -175,34 +208,38 @@ msgstr "Pomóż w tłumaczeniu"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "Proszę użyć tego adresu, aby uzyskać dostęp do usługi ownCloud w menedżerze plików."
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Nazwa"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Hasło"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Grupy"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Utwórz"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Domyślny udział"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Inne"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr "Grupa Admin"
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Udział"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "UsunÌ"
diff --git a/l10n/pl/tasks.po b/l10n/pl/tasks.po
new file mode 100644
index 00000000000..39026f90209
--- /dev/null
+++ b/l10n/pl/tasks.po
@@ -0,0 +1,107 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Cyryl Sochacki <>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-20 09:20+0000\n"
+"Last-Translator: Cyryl Sochacki <>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr "ZÅ‚a data/czas"
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr "Zadania"
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr "Brak kategorii"
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr "Nieokreślona"
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr "1=najwyższy"
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr "5=średni"
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr "9=mało ważny "
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr "Podsumowanie puste"
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr "Nieprawidłowy procent wykonania"
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr "Nieprawidłowy priorytet"
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr "Dodaj zadanie"
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr "Kolejność - domyślna"
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr "Kolejność - wg lista"
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr "Kolejność - wg kompletności"
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr "Kolejność - wg lokalizacja"
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr "Kolejność - wg priorytetu"
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr "Kolejność - wg nazywy"
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr "ÅadujÄ™ zadania"
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr "Ważne"
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr "Więcej"
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr "Mniej"
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr "Usuń"
diff --git a/l10n/pl/user_ldap.po b/l10n/pl/user_ldap.po
new file mode 100644
index 00000000000..8dce1f22d4e
--- /dev/null
+++ b/l10n/pl/user_ldap.po
@@ -0,0 +1,165 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Cyryl Sochacki <>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-20 08:52+0000\n"
+"Last-Translator: Cyryl Sochacki <>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr "Host"
+
+#: templates/settings.php:8
+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:9
+msgid "Base DN"
+msgstr "Baza DN"
+
+#: templates/settings.php:9
+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:10
+msgid "User DN"
+msgstr "Użytkownik DN"
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr "Hasło"
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr "Dla dostępu anonimowego pozostawić DN i hasło puste."
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr "Filtr logowania użytkownika"
+
+#: templates/settings.php:12
+#, 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:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr "Użyj %%uid zastępczy, np. \"uid=%%uid\""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr "Lista filtrów użytkownika"
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr "Definiuje filtry do zastosowania, podczas pobierania użytkowników."
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr "bez żadnych symboli zastępczych np. \"objectClass=person\"."
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr "Grupa filtrów"
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr "Definiuje filtry do zastosowania, podczas pobierania grup."
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr "bez żadnych symboli zastępczych np. \"objectClass=posixGroup\"."
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr "Port"
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr "Drzewo bazy użytkowników"
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr "Drzewo bazy grup"
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr "Członek grupy stowarzyszenia"
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr "Użyj TLS"
+
+#: templates/settings.php:21
+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:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr "Wielkość liter serwera LDAP (Windows)"
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr "Wyłączyć sprawdzanie poprawności certyfikatu SSL."
+
+#: templates/settings.php:23
+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:23
+msgid "Not recommended, use for testing only."
+msgstr "Niezalecane, użyj tylko testowo."
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr "Pole wyświetlanej nazwy użytkownika"
+
+#: templates/settings.php:24
+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:25
+msgid "Group Display Name Field"
+msgstr "Pole wyświetlanej nazwy grupy"
+
+#: templates/settings.php:25
+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:27
+msgid "in bytes"
+msgstr "w bajtach"
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr "w sekundach. Zmiana opróżnia pamięć podręczną."
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr "Pomoc"
diff --git a/l10n/pl/user_migrate.po b/l10n/pl/user_migrate.po
new file mode 100644
index 00000000000..4b85ca025a2
--- /dev/null
+++ b/l10n/pl/user_migrate.po
@@ -0,0 +1,52 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Cyryl Sochacki <>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-20 09:09+0000\n"
+"Last-Translator: Cyryl Sochacki <>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr "Eksport"
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr "Coś poszło źle, podczas generowania pliku eksportu"
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr "Wystąpił błąd"
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr "Eksportuj konto użytkownika"
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr "Spowoduje to utworzenie pliku skompresowanego, który zawiera konto ownCloud."
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr "Importuj konto użytkownika"
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr "paczka Zip użytkownika ownCloud"
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr "Importuj"
diff --git a/l10n/pl/user_openid.po b/l10n/pl/user_openid.po
new file mode 100644
index 00000000000..c199a51dcb2
--- /dev/null
+++ b/l10n/pl/user_openid.po
@@ -0,0 +1,55 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Cyryl Sochacki <>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-20 09:12+0000\n"
+"Last-Translator: Cyryl Sochacki <>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr "To jest punkt końcowy serwera OpenID. Aby uzyskać więcej informacji zobacz"
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr "Tożsamość: <b>"
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr "Obszar: <b>"
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr "Użytkownik: <b>"
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr "Login"
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr "Błąd:<b>Nie wybrano użytkownika"
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr "można uwierzytelniać do innych witryn z tego adresu"
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr "Autoryzowani dostawcy OpenID"
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr "Twój adres na Wordpress, Identi.ca, &hellip;"
diff --git a/l10n/pt_BR/admin_dependencies_chk.po b/l10n/pt_BR/admin_dependencies_chk.po
new file mode 100644
index 00000000000..571f626c304
--- /dev/null
+++ b/l10n/pt_BR/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/pt_BR/admin_migrate.po b/l10n/pt_BR/admin_migrate.po
new file mode 100644
index 00000000000..57e754066c5
--- /dev/null
+++ b/l10n/pt_BR/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/pt_BR/bookmarks.po b/l10n/pt_BR/bookmarks.po
new file mode 100644
index 00000000000..e574ace5f82
--- /dev/null
+++ b/l10n/pt_BR/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/pt_BR/calendar.po b/l10n/pt_BR/calendar.po
index 9d5c7712694..5ffc4e305f9 100644
--- a/l10n/pt_BR/calendar.po
+++ b/l10n/pt_BR/calendar.po
@@ -4,27 +4,36 @@
#
# Translators:
# Guilherme Maluf Balzana <guimalufb@gmail.com>, 2012.
+# Sandro Venezuela <sandrovenezuela@gmail.com>, 2012.
# Thiago Vicente <thiagovice@gmail.com>, 2012.
# Van Der Fran <transifex@vanderland.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Portuguese (Brazil) (http://www.transifex.net/projects/p/owncloud/language/pt_BR/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Nenhum calendário encontrado."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Nenhum evento encontrado."
@@ -32,300 +41,394 @@ msgstr "Nenhum evento encontrado."
msgid "Wrong calendar"
msgstr "Calendário incorreto"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Novo fuso horário"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Fuso horário alterado"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Pedido inválido"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Calendário"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd M/d"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd M/d"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM yyyy"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, MMM d, yyyy"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Aniversário"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Negócio"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Chamada"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Clientes"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Entrega"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Feriados"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Idéias"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Jornada"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Jubileu"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Reunião"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Outros"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Pessoal"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projetos"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Perguntas"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Trabalho"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "sem nome"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Novo Calendário"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Não repetir"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Diariamente"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Semanal"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Cada dia da semana"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "De duas em duas semanas"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Mensal"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Anual"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "nunca"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "por ocorrências"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "por data"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "por dia do mês"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "por dia da semana"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Segunda-feira"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Terça-feira"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Quarta-feira"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Quinta-feira"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Sexta-feira"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Sábado"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Domingo"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "semana do evento no mês"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "primeiro"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "segundo"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "terceiro"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "quarto"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "quinto"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "último"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Janeiro"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Fevereiro"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Março"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Abril"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Maio"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Junho"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Julho"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "Agosto"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "Setembro"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Outubro"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "Novembro"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Dezembro"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "eventos por data"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "por dia(s) do ano"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "por número(s) da semana"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "por dia e mês"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Data"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Cal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Todo o dia"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Novo Calendário"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Campos incompletos"
@@ -359,40 +462,32 @@ msgstr "O evento termina antes de começar"
msgid "There was a database fail"
msgstr "Houve uma falha de banco de dados"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Semana"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Mês"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Lista"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Hoje"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Calendários"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Houve uma falha, ao analisar o arquivo."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Escolha calendários ativos"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Meus Calendários"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "Link para CalDav"
@@ -404,19 +499,19 @@ msgstr "Calendários Compartilhados"
msgid "No shared calendars"
msgstr "Nenhum Calendário Compartilhado"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Compartilhar Calendário"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Baixar"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Editar"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Excluir"
@@ -502,23 +597,23 @@ msgstr "Separe as categorias por vírgulas"
msgid "Edit categories"
msgstr "Editar categorias"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Evento de dia inteiro"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "De"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Para"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Opções avançadas"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Local"
@@ -526,7 +621,7 @@ msgstr "Local"
msgid "Location of the Event"
msgstr "Local do evento"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Descrição"
@@ -534,84 +629,86 @@ msgstr "Descrição"
msgid "Description of the Event"
msgstr "Descrição do Evento"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Repetir"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Avançado"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Selecionar dias da semana"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Selecionar dias"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "e o dia do evento no ano."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "e o dia do evento no mês."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Selecionar meses"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Selecionar semanas"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "e a semana do evento no ano."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Intervalo"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Final"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "ocorrências"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "criar um novo calendário"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Importar um arquivo de calendário"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Por favor, escolha o calendário"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "criar um novo calendário"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Nome do novo calendário"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importar"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Importar calendário"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Calendário importado com sucesso"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Importar"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Fechar caixa de diálogo"
@@ -627,45 +724,73 @@ msgstr "Visualizar evento"
msgid "No categories selected"
msgstr "Nenhuma categoria selecionada"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Selecionar categoria"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "de"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "para"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Fuso horário"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Verificar sempre mudanças no fuso horário"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Formato da Hora"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24h"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12h"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Primeiro dia da semana"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Sincronização de endereço do calendário CalDAV :"
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/pt_BR/contacts.po b/l10n/pt_BR/contacts.po
index f2be42ae681..e4a7f97946b 100644
--- a/l10n/pt_BR/contacts.po
+++ b/l10n/pt_BR/contacts.po
@@ -5,642 +5,775 @@
# Translators:
# Guilherme Maluf Balzana <guimalufb@gmail.com>, 2012.
# Thiago Vicente <thiagovice@gmail.com>, 2012.
-# Van Der Fran <transifex@vanderland.com>, 2011.
+# Van Der Fran <transifex@vanderland.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Portuguese (Brazil) (http://www.transifex.net/projects/p/owncloud/language/pt_BR/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Erro ao (des)ativar agenda."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Ocorreu um erro ao adicionar o contato."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Não é possível adicionar propriedade vazia."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Pelo menos um dos campos de endereço tem que ser preenchido."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "ID não definido."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "Tentando adiciona propriedade duplicada:"
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Não é possível atualizar sua agenda com um nome em branco."
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Erro ao adicionar propriedade de contato."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Erro ao atualizar agenda."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "Nenhum ID fornecido"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Erro ajustando checksum."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Nenhum categoria selecionada para remoção."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Nenhuma agenda de endereços encontrada."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Nenhum contato encontrado."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Ocorreu um erro ao adicionar o contato."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "nome do elemento não definido."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Não é possível adicionar propriedade vazia."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Pelo menos um dos campos de endereço tem que ser preenchido."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "Tentando adiciona propriedade duplicada:"
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informações sobre vCard é incorreta. Por favor, recarregue a página."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "Faltando ID"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "Erro de identificação VCard para ID:"
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Não é possivel adicionar uma agenda de endereços com o nome em branco."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "checksum não definido."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Erro ao adicionar agenda."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "Informação sobre vCard incorreto. Por favor, recarregue a página:"
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Erro ao ativar agenda."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Something went FUBAR. "
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "Nenhum ID do contato foi submetido."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Erro de leitura na foto do contato."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Erro ao salvar arquivo temporário."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "Foto carregada não é válida."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "ID não definido."
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Informações sobre vCard é incorreta. Por favor, recarregue a página."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Erro ao excluir propriedade de contato."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "ID do contato está faltando."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "Faltando ID do contato."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "Nenhum caminho para foto foi submetido."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Arquivo não existe:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Erro ao carregar imagem."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Erro ao obter propriedade de contato."
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Erro ao obter propriedade da FOTO."
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Erro ao salvar contato."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Erro ao modificar tamanho da imagem"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Erro ao recortar imagem"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Erro ao criar imagem temporária"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
+msgstr "Erro ao localizar imagem:"
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "nome do elemento não definido."
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "checksum não definido."
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "Informação sobre vCard incorreto. Por favor, recarregue a página:"
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "Something went FUBAR. "
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Erro ao atualizar propriedades do contato."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "Não é possível atualizar sua agenda com um nome em branco."
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Erro ao atualizar agenda."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "Erro enviando contatos para armazenamento."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Arquivo enviado com sucesso"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "O arquivo enviado excede a diretiva upload_max_filesize em php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "O arquivo carregado excede o argumento MAX_FILE_SIZE especificado no formulário HTML"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "O arquivo foi parcialmente carregado"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Nenhum arquivo carregado"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "Diretório temporário não encontrado"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Não foi possível salvar a imagem temporária:"
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Não foi possível carregar a imagem temporária:"
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Nenhum arquivo foi transferido. Erro desconhecido"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Contatos"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Desculpe, esta funcionalidade não foi implementada ainda"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "não implementado"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Não foi possível obter um endereço válido."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Erro"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Esta propriedade não pode estar vazia."
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "Não foi possível serializar elementos."
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "\"deleteProperty\" chamado sem argumento de tipo. Por favor, informe a bugs.owncloud.org"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Editar nome"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Nenhum arquivo selecionado para carregar."
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "O arquivo que você está tentando carregar excede o tamanho máximo para este servidor."
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
+msgstr "Selecione o tipo"
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "Arraste um arquivo VCF para importar contatos."
-
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1494
+#: js/loader.js:49
+msgid "Result: "
+msgstr "Resultado:"
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr "importado,"
+
+#: js/loader.js:49
+msgid " failed."
+msgstr "falhou."
+
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Esta não é a sua agenda de endereços."
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Contato não pôde ser encontrado."
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Lista de endereços não encontrado."
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Esta não é a sua agenda de endereços."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Contato não pôde ser encontrado."
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Endereço"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefone"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "E-mail"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organização"
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Trabalho"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Home"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Móvel"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Texto"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Voz"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Mensagem"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fax"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Vídeo"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Pager"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Aniversário"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "Aniversário de {name}"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Contato"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Adicionar Contato"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Importar"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Agendas de Endereço"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Configurar Livro de Endereços"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Fechar."
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Nova agenda"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Importar de VCF"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "Link CardDav"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Baixar"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Editar"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Excluir"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Baixar contato"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Apagar contato"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Arraste a foto para ser carregada"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Deletar imagem atual"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Editar imagem atual"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Carregar nova foto"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Selecionar foto do OwnCloud"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr "Formato personalizado, Nome curto, Nome completo, Inverter ou Inverter com vírgula"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Editar detalhes do nome"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organização"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Excluir"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Apelido"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Digite o apelido"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Aniversário"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "dd-mm-aaaa"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Grupos"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Separe grupos por virgula"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Editar grupos"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Preferido"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Por favor, especifique um email válido."
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Digite um endereço de email"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "Correio para endereço"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Remover endereço de email"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Digite um número de telefone"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Remover número de telefone"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Visualizar no mapa"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Editar detalhes de endereço"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Adicionar notas"
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Adicionar campo"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Imagem do Perfil"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefone"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Nota"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "E-mail"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Deletar imagem atual"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Editar imagem atual"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Endereço"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Carregar nova foto"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Nota"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Selecionar foto do OwnCloud"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Baixar contato"
-#: templates/part.cropphoto.php:64
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Apagar contato"
+
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "A imagem temporária foi removida cache."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Editar endereço"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Digite"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Caixa Postal"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Estendido"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Rua"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Cidade"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Região"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "CEP"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "País"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Editar categorias"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Adicionar"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Agenda de Endereço"
@@ -721,35 +854,6 @@ msgstr "Jr."
msgid "Sn."
msgstr "Sn."
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Nova Agenda de Endereço"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Editar Agenda de Endereço"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Nome de exibição"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Ativo"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Salvar"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Enviar"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Cancelar"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "Importar arquivos de contato."
@@ -766,57 +870,86 @@ msgstr "Criar nova agenda de endereços"
msgid "Name of new addressbook"
msgstr "Nome da nova agenda de endereços"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importar"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "Importar contatos"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "Selecione agenda de endereços para importar ao destino:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "Selecione do disco rigído"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "Voce não tem contatos em sua agenda de endereços."
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Adicionar contatos"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Configurar agenda de endereços"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr ""
-#: templates/settings.php:4
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr ""
+
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "Sincronizando endereços CardDAV"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "leia mais"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "Endereço primário(Kontact et al)"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Baixar"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Editar"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Nova agenda"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Salvar"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/pt_BR/core.po b/l10n/pt_BR/core.po
index 0c9e514fdb3..bdf2c828c38 100644
--- a/l10n/pt_BR/core.po
+++ b/l10n/pt_BR/core.po
@@ -6,15 +6,16 @@
# <duda.nogueira@metasys.com.br>, 2011.
# Guilherme Maluf Balzana <guimalufb@gmail.com>, 2012.
# Thiago Vicente <thiagovice@gmail.com>, 2012.
+# Unforgiving Fallout <>, 2012.
# Van Der Fran <transifex@vanderland.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Portuguese (Brazil) (http://www.transifex.net/projects/p/owncloud/language/pt_BR/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -35,85 +36,85 @@ msgstr "Essa categoria já existe"
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Configurações"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Janeiro"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Fevereiro"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Março"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "Abril"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Maio"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Junho"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Julho"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "Agosto"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "Setembro"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Outubro"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "Novembro"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "Dezembro"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Cancelar"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Não"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Sim"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Ok"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Nenhuma categoria selecionada para deletar."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Erro"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Mudar senha do Owncloud"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "Redefinir senha ownCloud"
@@ -243,14 +244,10 @@ msgstr "Concluir configuração"
msgid "web services under your control"
msgstr "web services sob seu controle"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Sair"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Configurações"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Esqueçeu sua senha?"
diff --git a/l10n/pt_BR/files.po b/l10n/pt_BR/files.po
index ef9cf274d91..2fedc1a4e0a 100644
--- a/l10n/pt_BR/files.po
+++ b/l10n/pt_BR/files.po
@@ -5,48 +5,49 @@
# Translators:
# Guilherme Maluf Balzana <guimalufb@gmail.com>, 2012.
# Thiago Vicente <thiagovice@gmail.com>, 2012.
+# Unforgiving Fallout <>, 2012.
# Van Der Fran <transifex@vanderland.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Portuguese (Brazil) (http://www.transifex.net/projects/p/owncloud/language/pt_BR/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
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:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "O tamanho do arquivo excede o limed especifiicado em upload_max_filesize no php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "O arquivo foi transferido parcialmente"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Nenhum arquivo foi transferido"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Pasta temporária não encontrada"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Falha ao escrever no disco"
@@ -54,57 +55,85 @@ msgstr "Falha ao escrever no disco"
msgid "Files"
msgstr "Arquivos"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Excluir"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
-msgid "generating ZIP-file, it may take some time."
+#: js/filelist.js:141
+msgid "replace"
msgstr ""
-#: js/files.js:199
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/filelist.js:141
+msgid "cancel"
msgstr ""
-#: js/files.js:199
-msgid "Upload Error"
+#: js/filelist.js:195
+msgid "replaced"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
-msgid "Pending"
+#: js/filelist.js:195
+msgid "with"
msgstr ""
-#: js/files.js:332
-msgid "Upload cancelled."
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
msgstr ""
-#: js/files.js:456
-msgid "Invalid name, '/' is not allowed."
+#: js/filelist.js:246
+msgid "deleted"
msgstr ""
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:171
+msgid "generating ZIP-file, it may take some time."
+msgstr "gerando arquivo ZIP, isso pode levar um tempo."
+
+#: js/files.js:200
+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:200
+msgid "Upload Error"
+msgstr "Erro de envio"
+
+#: js/files.js:228 js/files.js:319 js/files.js:348
+msgid "Pending"
+msgstr "Pendente"
+
+#: js/files.js:333
+msgid "Upload cancelled."
+msgstr "Envio cancelado."
+
+#: js/files.js:457
+msgid "Invalid name, '/' is not allowed."
+msgstr "Nome inválido, '/' não é permitido."
+
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Tamanho"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Modificado"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "pasta"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "pastas"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "arquivo"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "arquivos"
#: templates/admin.php:5
msgid "File handling"
@@ -174,10 +203,6 @@ msgstr "Compartilhar"
msgid "Download"
msgstr "Baixar"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Excluir"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Arquivo muito grande"
diff --git a/l10n/pt_BR/files_encryption.po b/l10n/pt_BR/files_encryption.po
new file mode 100644
index 00000000000..aba18662d48
--- /dev/null
+++ b/l10n/pt_BR/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/pt_BR/files_external.po b/l10n/pt_BR/files_external.po
new file mode 100644
index 00000000000..8af2e8806b4
--- /dev/null
+++ b/l10n/pt_BR/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/pt_BR/files_sharing.po b/l10n/pt_BR/files_sharing.po
new file mode 100644
index 00000000000..3e73c6ab3cf
--- /dev/null
+++ b/l10n/pt_BR/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/pt_BR/files_versions.po b/l10n/pt_BR/files_versions.po
new file mode 100644
index 00000000000..86c54e71050
--- /dev/null
+++ b/l10n/pt_BR/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/pt_BR/lib.po b/l10n/pt_BR/lib.po
new file mode 100644
index 00000000000..d9a3c6dbc4a
--- /dev/null
+++ b/l10n/pt_BR/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/pt_BR/settings.po b/l10n/pt_BR/settings.po
index 88a8425439c..333a52a86e3 100644
--- a/l10n/pt_BR/settings.po
+++ b/l10n/pt_BR/settings.po
@@ -5,83 +5,116 @@
# Translators:
# <duda.nogueira@metasys.com.br>, 2011.
# Guilherme Maluf Balzana <guimalufb@gmail.com>, 2012.
+# Sandro Venezuela <sandrovenezuela@gmail.com>, 2012.
# Thiago Vicente <thiagovice@gmail.com>, 2012.
# Van Der Fran <transifex@vanderland.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Portuguese (Brazil) (http://www.transifex.net/projects/p/owncloud/language/pt_BR/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "Email gravado"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Email inválido"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "Mudou OpenID"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Pedido inválido"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Mudou Idioma"
-#: js/apps.js:31 js/apps.js:67
-msgid "Disable"
+#: js/apps.js:18
+msgid "Error"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr "Desabilitado"
+
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Habilitado"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Gravando..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "Português"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Log"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Mais"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Adicione seu Aplicativo"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Selecione uma Aplicação"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Ver página do aplicativo em apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-licenciados"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "por"
@@ -173,34 +206,38 @@ msgstr "Ajude a traduzir"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "use este endereço para se conectar ao seu ownCloud no seu gerenciador de arquvos"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Nome"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Senha"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Grupos"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Criar"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Quota Padrão"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Outro"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Cota"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Apagar"
diff --git a/l10n/pt_BR/tasks.po b/l10n/pt_BR/tasks.po
new file mode 100644
index 00000000000..5e8358f8c6b
--- /dev/null
+++ b/l10n/pt_BR/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/pt_BR/user_ldap.po b/l10n/pt_BR/user_ldap.po
new file mode 100644
index 00000000000..206781082f4
--- /dev/null
+++ b/l10n/pt_BR/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/pt_BR/user_migrate.po b/l10n/pt_BR/user_migrate.po
new file mode 100644
index 00000000000..bb939a947ab
--- /dev/null
+++ b/l10n/pt_BR/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/pt_BR/user_openid.po b/l10n/pt_BR/user_openid.po
new file mode 100644
index 00000000000..5abf549de33
--- /dev/null
+++ b/l10n/pt_BR/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/pt_PT/admin_dependencies_chk.po b/l10n/pt_PT/admin_dependencies_chk.po
new file mode 100644
index 00000000000..33d13a5a563
--- /dev/null
+++ b/l10n/pt_PT/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/pt_PT/admin_migrate.po b/l10n/pt_PT/admin_migrate.po
new file mode 100644
index 00000000000..0daf518350a
--- /dev/null
+++ b/l10n/pt_PT/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/pt_PT/bookmarks.po b/l10n/pt_PT/bookmarks.po
new file mode 100644
index 00000000000..b4ba2758a3e
--- /dev/null
+++ b/l10n/pt_PT/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/pt_PT/calendar.po b/l10n/pt_PT/calendar.po
index 02385945ce9..b82792c41e0 100644
--- a/l10n/pt_PT/calendar.po
+++ b/l10n/pt_PT/calendar.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <geral@ricardolameiro.pt>, 2012.
# <helder.meneses@gmail.com>, 2011.
# Helder Meneses <helder.meneses@gmail.com>, 2012.
# <rjgpp.1994@gmail.com>, 2012.
@@ -10,21 +11,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Portuguese (Portugal) (http://www.transifex.net/projects/p/owncloud/language/pt_PT/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 20:06+0000\n"
+"Last-Translator: rlameiro <geral@ricardolameiro.pt>\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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr "Nem todos os calendários estão completamente pré-carregados"
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr "Parece que tudo está completamente pré-carregado"
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Nenhum calendário encontrado."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Nenhum evento encontrado."
@@ -32,300 +41,394 @@ msgstr "Nenhum evento encontrado."
msgid "Wrong calendar"
msgstr "Calendário errado"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr "O ficheiro não continha nenhuns eventos ou então todos os eventos já estavam carregados no seu calendário"
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr "Os eventos foram guardados no novo calendário"
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr "Falha na importação"
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr "Os eventos foram guardados no seu calendário"
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Nova zona horária"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Zona horária alterada"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Pedido inválido"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:37 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Calendário"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd M/d"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd M/d"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM aaaa"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, MMM d, aaaa"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Dia de anos"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Negócio"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Telefonar"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Clientes"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Entregar"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Férias"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Ideias"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Jornada"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Jublieu"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Encontro"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Outro"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Pessoal"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projetos"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Perguntas"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Trabalho"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr "por"
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "não definido"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Novo calendário"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Não repete"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Diário"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Semanal"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Todos os dias da semana"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Bi-semanal"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Mensal"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Anual"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "nunca"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "por ocorrências"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "por data"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "por dia do mês"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "por dia da semana"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Segunda"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Terça"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Quarta"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Quinta"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Sexta"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Sábado"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Domingo"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "Eventos da semana do mês"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "primeiro"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "segundo"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "terçeiro"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "quarto"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "quinto"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "último"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Janeiro"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Fevereiro"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Março"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Abril"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Maio"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Junho"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Julho"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "Agosto"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "Setembro"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Outubro"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "Novembro"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Dezembro"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "por data de evento"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "por dia(s) do ano"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "por número(s) da semana"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "por dia e mês"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Data"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Cal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr "Dom."
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr "Seg."
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr "ter."
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr "Qua."
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr "Qui."
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr "Sex."
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr "Sáb."
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr "Jan."
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr "Fev,"
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr "Mar."
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr "Abr."
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr "Mai."
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr "Jun."
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr "Jul."
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr "Ago."
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr "Set."
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr "Out."
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr "Nov."
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr "Dez."
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Todo o dia"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Novo calendário"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Falta campos"
@@ -359,40 +462,32 @@ msgstr "O evento acaba antes de começar"
msgid "There was a database fail"
msgstr "Houve uma falha de base de dados"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Semana"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Mês"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Lista"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Hoje"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Calendários"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Houve uma falha durante a análise do ficheiro"
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Escolhe calendários ativos"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr "Configurações"
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Os seus calendários"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "Endereço CalDav"
@@ -404,19 +499,19 @@ msgstr "Calendários partilhados"
msgid "No shared calendars"
msgstr "Nenhum calendário partilhado"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Partilhar calendário"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Transferir"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Editar"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Apagar"
@@ -502,23 +597,23 @@ msgstr "Separe categorias por virgulas"
msgid "Edit categories"
msgstr "Editar categorias"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Evento de dia inteiro"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "De"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Para"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Opções avançadas"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Localização"
@@ -526,7 +621,7 @@ msgstr "Localização"
msgid "Location of the Event"
msgstr "Localização do evento"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Descrição"
@@ -534,84 +629,86 @@ msgstr "Descrição"
msgid "Description of the Event"
msgstr "Descrição do evento"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Repetir"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Avançado"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Seleciona os dias da semana"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Seleciona os dias"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "e o dia de eventos do ano."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "e o dia de eventos do mês."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Seleciona os meses"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Seleciona as semanas"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "e a semana de eventos do ano."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Intervalo"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Fim"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "ocorrências"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "criar novo calendário"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Importar um ficheiro de calendário"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Por favor escolhe o calendário"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "criar novo calendário"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr "Escolha um calendário por favor"
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Nome do novo calendário"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importar"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr "Escolha um nome disponível!"
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "A importar calendário"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr "Já existe um Calendário com esse nome. Se mesmo assim continuar, esses calendários serão fundidos."
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Calendário importado com sucesso"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Importar"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Fechar diálogo"
@@ -627,45 +724,73 @@ msgstr "Ver um evento"
msgid "No categories selected"
msgstr "Nenhuma categoria seleccionada"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Selecionar categoria"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "de"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "em"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr "Geral"
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Zona horária"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Verificar sempre por alterações na zona horária"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr "Actualizar automaticamente o fuso horário"
-#: templates/settings.php:33
-msgid "Timeformat"
+#: templates/settings.php:52
+msgid "Time format"
msgstr "Formato da hora"
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24h"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12h"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Primeiro dia da semana"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr "Começar semana em"
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr "Memória de pré-carregamento"
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr "Limpar a memória de pré carregamento para eventos recorrentes"
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr "Endereço(s) web"
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr "Endereços de sincronização de calendários CalDAV"
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr "mais informação"
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr "Endereço principal (contactos et al.)"
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Endereço de sincronização CalDav do calendário"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr "Ligaç(ão/ões) só de leitura do iCalendar"
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/pt_PT/contacts.po b/l10n/pt_PT/contacts.po
index 4b0f48cbee5..ee8c370515a 100644
--- a/l10n/pt_PT/contacts.po
+++ b/l10n/pt_PT/contacts.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <geral@ricardolameiro.pt>, 2012.
# <helder.meneses@gmail.com>, 2011.
# Helder Meneses <helder.meneses@gmail.com>, 2012.
# <rjgpp.1994@gmail.com>, 2012.
@@ -10,648 +11,781 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Portuguese (Portugal) (http://www.transifex.net/projects/p/owncloud/language/pt_PT/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
"Content-Transfer-Encoding: 8bit\n"
"Language: pt_PT\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: ajax/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Erro a (des)ativar o livro de endereços"
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Erro ao adicionar contato"
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Não é possivel adicionar uma propriedade vazia"
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Pelo menos um dos campos de endereço precisa de estar preenchido"
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "id não está definido"
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "A tentar adicionar propriedade duplicada: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Não é possivel actualizar o livro de endereços com o nome vazio."
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Erro ao adicionar propriedade do contato"
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Erro a atualizar o livro de endereços"
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "Nenhum ID inserido"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Erro a definir checksum."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Nenhuma categoria selecionada para eliminar."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Nenhum livro de endereços encontrado."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Nenhum contacto encontrado."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Erro ao adicionar contato"
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "o nome do elemento não está definido."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr "Incapaz de processar contacto"
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Não é possivel adicionar uma propriedade vazia"
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Pelo menos um dos campos de endereço precisa de estar preenchido"
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "A tentar adicionar propriedade duplicada: "
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr "Falta o parâmetro de mensagens instantâneas (IM)"
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr "Mensagens instantâneas desconhecida (IM)"
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "A informação sobre o vCard está incorreta. Por favor refresque a página"
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "Falta ID"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "Erro a analisar VCard para o ID: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Não é possivel adicionar Livro de endereços com nome vazio."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "Checksum não está definido."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Erro ao adicionar livro de endereços"
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "A informação sobre o VCard está incorrecta. Por favor refresque a página: "
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Erro ao ativar livro de endereços"
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Algo provocou um FUBAR. "
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "Nenhum ID de contacto definido."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Erro a ler a foto do contacto."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Erro a guardar ficheiro temporário."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "A foto carregada não é valida."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "id não está definido"
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "A informação sobre o vCard está incorreta. Por favor refresque a página"
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Erro ao apagar propriedade do contato"
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "Falta o ID do contacto."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "Falta o ID do contacto."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "Nenhum caminho da foto definido."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "O ficheiro não existe:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Erro a carregar a imagem."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Erro a obter o objecto dos contactos"
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Erro a obter a propriedade Foto"
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Erro a guardar o contacto."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Erro a redimensionar a imagem"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Erro a recorar a imagem"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Erro a criar a imagem temporária"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "o nome do elemento não está definido."
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "Checksum não está definido."
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "A informação sobre o VCard está incorrecta. Por favor refresque a página: "
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "Algo provocou um FUBAR. "
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Erro ao atualizar propriedade do contato"
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "Não é possivel actualizar o livro de endereços com o nome vazio."
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Erro a atualizar o livro de endereços"
+msgstr "Erro enquanto pesquisava pela imagem: "
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "Erro a carregar os contactos para o armazenamento."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Não ocorreu erros, o ficheiro foi submetido com sucesso"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
-msgstr ""
+msgstr "O tamanho do ficheiro carregado excede o parametro upload_max_filesize em php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
-msgstr ""
+msgstr "O tamanho do ficheiro carregado ultrapassa o valor MAX_FILE_SIZE definido no formulário HTML"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
-msgstr ""
+msgstr "O ficheiro seleccionado foi apenas carregado parcialmente"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Nenhum ficheiro foi submetido"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
-msgstr ""
+msgstr "Está a faltar a pasta temporária"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Não foi possível guardar a imagem temporária: "
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Não é possível carregar a imagem temporária: "
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Nenhum ficheiro foi carregado. Erro desconhecido"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Contactos"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Desculpe, esta funcionalidade ainda não está implementada"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "Não implementado"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Não foi possível obter um endereço válido."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Erro"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Esta propriedade não pode estar vazia."
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "Não foi possivel serializar os elementos"
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "'deleteProperty' chamada sem argumento definido. Por favor report o problema em bugs.owncloud.org"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Editar nome"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Nenhum ficheiro seleccionado para enviar."
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "O tamanho do ficheiro que está a tentar carregar ultrapassa o limite máximo definido para ficheiros no servidor."
-#: js/contacts.js:1119
-msgid "Select photo"
-msgstr ""
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr "Erro ao carregar imagem de perfil."
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
+msgstr "Seleccionar tipo"
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr ""
-
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
-msgstr ""
-
-#: js/contacts.js:1476
-msgid "OK"
-msgstr ""
-
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
-msgstr ""
-
-#: js/contacts.js:1634
-msgid "Upload too large"
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Wrong file type"
-msgstr ""
-
-#: js/contacts.js:1644
+#: js/contacts.js:1578
msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
-msgstr ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr "Alguns contactos forma marcados para apagar, mas ainda não foram apagados. Por favor espere que ele sejam apagados."
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr "Quer fundir estes Livros de endereços?"
#: js/loader.js:49
msgid "Result: "
-msgstr ""
+msgstr "Resultado: "
#: js/loader.js:49
msgid " imported, "
-msgstr ""
+msgstr " importado, "
#: js/loader.js:49
msgid " failed."
-msgstr ""
+msgstr " falhou."
-#: lib/app.php:30
-msgid "Addressbook not found."
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
+msgstr "Displayname não pode ser vazio"
+
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr "Livro de endereços não encontrado."
-#: lib/app.php:34
+#: lib/app.php:52
msgid "This is not your addressbook."
msgstr "Esta não é a sua lista de contactos"
-#: lib/app.php:45
+#: lib/app.php:71
msgid "Contact could not be found."
msgstr "O contacto não foi encontrado"
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Morada"
+#: lib/app.php:116
+msgid "Jabber"
+msgstr "Jabber"
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefone"
+#: lib/app.php:121
+msgid "AIM"
+msgstr "AIM"
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "Email"
+#: lib/app.php:126
+msgid "MSN"
+msgstr "MSN"
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organização"
+#: lib/app.php:131
+msgid "Twitter"
+msgstr "Twitter"
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr "GoogleTalk"
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr "Facebook"
+
+#: lib/app.php:146
+msgid "XMPP"
+msgstr "XMPP"
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr "ICQ"
+
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr "Yahoo"
+
+#: lib/app.php:161
+msgid "Skype"
+msgstr "Skype"
+
+#: lib/app.php:166
+msgid "QQ"
+msgstr "QQ"
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr "GaduGadu"
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Emprego"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Casa"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr "Outro"
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Telemovel"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Texto"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Voz"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Mensagem"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fax"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Vídeo"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Pager"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Aniversário"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr "Empresa"
+
+#: lib/app.php:254
+msgid "Call"
+msgstr "Telefonar"
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr "Clientes"
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr "Fornecedor"
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr "Férias"
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr "Ideias"
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr "Viagem"
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr "Jubileu"
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr "Encontro"
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr "Pessoal"
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr "Projectos"
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr "Questões"
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "Aniversário de {name}"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Contacto"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Adicionar Contacto"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Importar"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr "Configurações"
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Livros de endereços"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Configurar livros de endereços"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Fechar"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Novo livro de endereços"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr "Atalhos de teclado"
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Importar de VCF"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr "Navegação"
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "Endereço CardDav"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr "Próximo contacto na lista"
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Transferir"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr "Contacto anterior na lista"
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Editar"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr "Expandir/encolher o livro de endereços atual"
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Apagar"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr "Próximo livro de endereços"
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Transferir contacto"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr "Livro de endereços anterior"
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Apagar contato"
+#: templates/index.php:54
+msgid "Actions"
+msgstr "Ações"
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr "Recarregar lista de contactos"
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr "Adicionar novo contacto"
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr "Adicionar novo Livro de endereços"
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr "Apagar o contacto atual"
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
-msgstr ""
+msgstr "Arraste e solte fotos para carregar"
+
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Eliminar a foto actual"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Editar a foto actual"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Carregar nova foto"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Selecionar uma foto da ownCloud"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
-msgstr ""
+msgstr "Formate personalizado, Nome curto, Nome completo, Reverso ou Reverso com virgula"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Editar detalhes do nome"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organização"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Apagar"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Alcunha"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Introduza alcunha"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Aniversário"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr "Página web"
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr "http://www.somesite.com"
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr "Ir para página web"
-#: templates/part.contact.php:38
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "dd-mm-aaaa"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Grupos"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Separe os grupos usando virgulas"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Editar grupos"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Preferido"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Por favor indique um endereço de correio válido"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Introduza endereço de email"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "Enviar correio para o endereço"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Eliminar o endereço de correio"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Insira o número de telefone"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Eliminar o número de telefone"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr "Mensageiro instantâneo"
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr "Apagar mensageiro instantâneo (IM)"
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Ver no mapa"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Editar os detalhes do endereço"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Insira notas aqui."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Adicionar campo"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Foto do perfil"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefone"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Nota"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "Email"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Eliminar a foto actual"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr "Mensagens Instantâneas"
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Editar a foto actual"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Morada"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr ""
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Nota"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Selecionar uma foto da ownCloud"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Transferir contacto"
-#: templates/part.cropphoto.php:64
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Apagar contato"
+
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "A imagem temporária foi retirada do cache."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Editar endereço"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Tipo"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Apartado"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr "Endereço da Rua"
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr "Rua e número"
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Extendido"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Rua"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr "Número de Apartamento, etc."
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Cidade"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Região"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr "Por Ex. Estado ou província"
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Código Postal"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr "Código Postal"
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "País"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Editar categorias"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Adicionar"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Livro de endereços"
#: templates/part.edit_name_dialog.php:23
msgid "Hon. prefixes"
-msgstr ""
+msgstr "Prefixos honoráveis"
#: templates/part.edit_name_dialog.php:27
msgid "Miss"
-msgstr ""
+msgstr "Menina"
#: templates/part.edit_name_dialog.php:28
msgid "Ms"
@@ -667,7 +801,7 @@ msgstr "Sr"
#: templates/part.edit_name_dialog.php:31
msgid "Mrs"
-msgstr ""
+msgstr "Senhora"
#: templates/part.edit_name_dialog.php:32
msgid "Dr"
@@ -675,7 +809,7 @@ msgstr "Dr"
#: templates/part.edit_name_dialog.php:35
msgid "Given name"
-msgstr ""
+msgstr "Nome introduzido"
#: templates/part.edit_name_dialog.php:37
msgid "Additional names"
@@ -687,68 +821,39 @@ msgstr "Nome de familia"
#: templates/part.edit_name_dialog.php:41
msgid "Hon. suffixes"
-msgstr ""
+msgstr "Sufixos Honoráveis"
#: templates/part.edit_name_dialog.php:45
msgid "J.D."
-msgstr ""
+msgstr "D.J."
#: templates/part.edit_name_dialog.php:46
msgid "M.D."
-msgstr ""
+msgstr "D.M."
#: templates/part.edit_name_dialog.php:47
msgid "D.O."
-msgstr ""
+msgstr "Dr."
#: templates/part.edit_name_dialog.php:48
msgid "D.C."
-msgstr ""
+msgstr "Dr."
#: templates/part.edit_name_dialog.php:49
msgid "Ph.D."
-msgstr ""
+msgstr "Dr."
#: templates/part.edit_name_dialog.php:50
msgid "Esq."
-msgstr ""
+msgstr "Esq."
#: templates/part.edit_name_dialog.php:51
msgid "Jr."
-msgstr ""
+msgstr "Jr."
#: templates/part.edit_name_dialog.php:52
msgid "Sn."
-msgstr ""
-
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Novo livro de endereços"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Editar livro de endereços"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Nome de exibição"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Ativo"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Guardar"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Submeter"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Cancelar"
+msgstr "r."
#: templates/part.import.php:1
msgid "Import a contacts file"
@@ -764,59 +869,88 @@ msgstr "Criar um novo livro de endereços"
#: templates/part.import.php:15
msgid "Name of new addressbook"
-msgstr ""
-
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importar"
+msgstr "Nome do novo livro de endereços"
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "A importar os contactos"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr ""
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr ""
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
-msgstr ""
+msgstr "Não tem contactos no seu livro de endereços."
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Adicionar contacto"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr ""
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr "Selecionar Livros de contactos"
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr "Introduzir nome"
-#: templates/settings.php:4
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr "Introduzir descrição"
+
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
-msgstr ""
+msgstr "CardDAV a sincronizar endereços"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "mais informação"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
-msgstr ""
+msgstr "Endereço primario (Kontact et al)"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr "Mostrar ligação CardDAV"
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr "Mostrar ligações VCF só de leitura"
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr "Partilhar"
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Transferir"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Editar"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Novo livro de endereços"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr "Nome"
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr "Descrição"
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Guardar"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr "Mais..."
diff --git a/l10n/pt_PT/core.po b/l10n/pt_PT/core.po
index c1427407a88..18fae557ab6 100644
--- a/l10n/pt_PT/core.po
+++ b/l10n/pt_PT/core.po
@@ -10,10 +10,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Portuguese (Portugal) (http://www.transifex.net/projects/p/owncloud/language/pt_PT/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
"Content-Transfer-Encoding: 8bit\n"
@@ -34,85 +34,85 @@ msgstr "Esta categoria já existe:"
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Definições"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Janeiro"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Fevereiro"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Março"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "Abril"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Maio"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Junho"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Julho"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "Agosto"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "Setembro"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Outubro"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "Novembro"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "Dezembro"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Cancelar"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Não"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Sim"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Ok"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Nenhuma categoria seleccionar para eliminar"
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Erro"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Redefinir palavra-chave ownCloud"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "Reposição da password ownCloud"
@@ -242,14 +242,10 @@ msgstr "Acabar instalação"
msgid "web services under your control"
msgstr "serviços web sob o seu controlo"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Sair"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Definições"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Esqueceu a sua password?"
diff --git a/l10n/pt_PT/files.po b/l10n/pt_PT/files.po
index 8779bcac2b3..d816aedc336 100644
--- a/l10n/pt_PT/files.po
+++ b/l10n/pt_PT/files.po
@@ -3,49 +3,50 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <geral@ricardolameiro.pt>, 2012.
# Helder Meneses <helder.meneses@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: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Portuguese (Portugal) (http://www.transifex.net/projects/p/owncloud/language/pt_PT/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 19:39+0000\n"
+"Last-Translator: rlameiro <geral@ricardolameiro.pt>\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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Sem erro, ficheiro enviado com sucesso"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "O ficheiro enviado escede o diretivo upload_max_filesize no php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "O ficheiro enviado só foi enviado parcialmente"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Não foi enviado nenhum ficheiro"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Falta uma pasta temporária"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Falhou a escrita no disco"
@@ -53,57 +54,85 @@ msgstr "Falhou a escrita no disco"
msgid "Files"
msgstr "Ficheiros"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Apagar"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "Já existe"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "substituir"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "cancelar"
-#: js/files.js:170
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "substituido"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "com"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "desfazer"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "apagado"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "a gerar o ficheiro ZIP, poderá demorar algum tempo."
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Não é possivel fazer o upload do ficheiro devido a ser uma pasta ou ter 0 bytes"
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "Erro no upload"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "Pendente"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "O upload foi cancelado."
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "nome inválido, '/' não permitido."
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Tamanho"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Modificado"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "pasta"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "pastas"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "ficheiro"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "ficheiros"
#: templates/admin.php:5
msgid "File handling"
@@ -173,10 +202,6 @@ msgstr "Partilhar"
msgid "Download"
msgstr "Transferir"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Apagar"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Envio muito grande"
diff --git a/l10n/pt_PT/files_encryption.po b/l10n/pt_PT/files_encryption.po
new file mode 100644
index 00000000000..ea24c46071b
--- /dev/null
+++ b/l10n/pt_PT/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/pt_PT/files_external.po b/l10n/pt_PT/files_external.po
new file mode 100644
index 00000000000..b0c55a3de6e
--- /dev/null
+++ b/l10n/pt_PT/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/pt_PT/files_sharing.po b/l10n/pt_PT/files_sharing.po
new file mode 100644
index 00000000000..3a921893278
--- /dev/null
+++ b/l10n/pt_PT/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt_PT\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/pt_PT/files_versions.po b/l10n/pt_PT/files_versions.po
new file mode 100644
index 00000000000..5d6fb5fe067
--- /dev/null
+++ b/l10n/pt_PT/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/pt_PT/gallery.po b/l10n/pt_PT/gallery.po
index 5a8f443a916..91c5cb18537 100644
--- a/l10n/pt_PT/gallery.po
+++ b/l10n/pt_PT/gallery.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <geral@ricardolameiro.pt>, 2012.
# <helder.meneses@gmail.com>, 2012.
# Helder Meneses <helder.meneses@gmail.com>, 2012.
# <rjgpp.1994@gmail.com>, 2012.
@@ -10,88 +11,32 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Portuguese (Portugal) (http://www.transifex.net/projects/p/owncloud/language/pt_PT/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 19:50+0000\n"
+"Last-Translator: rlameiro <geral@ricardolameiro.pt>\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"
-#: appinfo/app.php:37
+#: appinfo/app.php:42
msgid "Pictures"
msgstr "Imagens"
-#: js/album_cover.js:44
+#: js/pictures.js:12
msgid "Share gallery"
-msgstr ""
+msgstr "Partilhar a galeria"
-#: js/album_cover.js:64 js/album_cover.js:100 js/album_cover.js:133
+#: js/pictures.js:32
msgid "Error: "
-msgstr ""
+msgstr "Erro: "
-#: js/album_cover.js:64 js/album_cover.js:100
+#: js/pictures.js:32
msgid "Internal error"
-msgstr ""
-
-#: js/album_cover.js:114
-msgid "Scanning root"
-msgstr ""
-
-#: js/album_cover.js:115
-msgid "Default order"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Ascending"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Descending"
-msgstr ""
-
-#: js/album_cover.js:117 templates/index.php:19
-msgid "Settings"
-msgstr "Definições"
-
-#: js/album_cover.js:122
-msgid "Scanning root cannot be empty"
-msgstr ""
-
-#: js/album_cover.js:122 js/album_cover.js:133
-msgid "Error"
-msgstr ""
-
-#: templates/index.php:16
-msgid "Rescan"
-msgstr "Atualizar"
-
-#: templates/index.php:17
-msgid "Stop"
-msgstr "Parar"
-
-#: templates/index.php:18
-msgid "Share"
-msgstr "Partilhar"
-
-#: templates/view_album.php:19
-msgid "Back"
-msgstr "Voltar"
-
-#: templates/view_album.php:36
-msgid "Remove confirmation"
-msgstr "Remove confirmação"
-
-#: templates/view_album.php:37
-msgid "Do you want to remove album"
-msgstr "Deseja remover o album"
-
-#: templates/view_album.php:40
-msgid "Change album name"
-msgstr "Mudar o nome do album"
+msgstr "Erro interno"
-#: templates/view_album.php:43
-msgid "New album name"
-msgstr "Novo nome do album"
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr "Slideshow"
diff --git a/l10n/pt_PT/lib.po b/l10n/pt_PT/lib.po
new file mode 100644
index 00000000000..70d233eab3d
--- /dev/null
+++ b/l10n/pt_PT/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/pt_PT/settings.po b/l10n/pt_PT/settings.po
index 9a87a9c31f9..1cc82a6ea45 100644
--- a/l10n/pt_PT/settings.po
+++ b/l10n/pt_PT/settings.po
@@ -3,83 +3,116 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <geral@ricardolameiro.pt>, 2012.
# Helder Meneses <helder.meneses@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: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Portuguese (Portugal) (http://www.transifex.net/projects/p/owncloud/language/pt_PT/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 19:46+0000\n"
+"Last-Translator: rlameiro <geral@ricardolameiro.pt>\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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "Incapaz de carregar a lista da App Store"
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "Email guardado"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Email inválido"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID alterado"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Pedido inválido"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Erro de autenticação"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Idioma alterado"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "Erro"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "Desativar"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Ativar"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "A guardar..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "__language_name__"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "Aviso de Segurança"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "Cron"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr "Executar uma tarefa com cada página carregada"
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr "cron.php está registado num serviço webcron"
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr "usar o serviço cron do sistema"
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Log"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Mais"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Adicione a sua aplicação"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Selecione uma aplicação"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Ver a página da aplicação em apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-licenciado"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "por"
@@ -171,34 +204,38 @@ msgstr "Ajude a traduzir"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "utilize este endereço para conectar ao seu ownCloud através do seu gerenciador de ficheiros"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Nome"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Palavra-chave"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Grupos"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Criar"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Quota por defeito"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Outro"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr "Grupo Administrador"
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Quota"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Apagar"
diff --git a/l10n/pt_PT/tasks.po b/l10n/pt_PT/tasks.po
new file mode 100644
index 00000000000..405b6d903ff
--- /dev/null
+++ b/l10n/pt_PT/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/pt_PT/user_ldap.po b/l10n/pt_PT/user_ldap.po
new file mode 100644
index 00000000000..a4088cac2b6
--- /dev/null
+++ b/l10n/pt_PT/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/pt_PT/user_migrate.po b/l10n/pt_PT/user_migrate.po
new file mode 100644
index 00000000000..dc1013582b8
--- /dev/null
+++ b/l10n/pt_PT/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/pt_PT/user_openid.po b/l10n/pt_PT/user_openid.po
new file mode 100644
index 00000000000..617e967bddc
--- /dev/null
+++ b/l10n/pt_PT/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/ro/admin_dependencies_chk.po b/l10n/ro/admin_dependencies_chk.po
new file mode 100644
index 00000000000..76d2d0539d3
--- /dev/null
+++ b/l10n/ro/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/ro/admin_migrate.po b/l10n/ro/admin_migrate.po
new file mode 100644
index 00000000000..44132a5cdd3
--- /dev/null
+++ b/l10n/ro/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/ro/bookmarks.po b/l10n/ro/bookmarks.po
new file mode 100644
index 00000000000..e02fd456c98
--- /dev/null
+++ b/l10n/ro/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/ro/calendar.po b/l10n/ro/calendar.po
index 0521a803f4c..bb0d41a50a7 100644
--- a/l10n/ro/calendar.po
+++ b/l10n/ro/calendar.po
@@ -11,21 +11,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Romanian (http://www.transifex.net/projects/p/owncloud/language/ro/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Nici un calendar găsit."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Nici un eveniment găsit."
@@ -33,300 +41,394 @@ msgstr "Nici un eveniment găsit."
msgid "Wrong calendar"
msgstr "Calendar greșit"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Fus orar nou:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Fus orar schimbat"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Cerere eronată"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Calendar"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
msgstr ""
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
msgstr ""
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
msgstr ""
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
msgstr ""
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "LLL z[aaaa]{'&#8212;'[LLL] z aaaa}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Zi de naștere"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Afaceri"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Sună"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Clienți"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Curier"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Sărbători"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Idei"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Călătorie"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Aniversare"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Întâlnire"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Altele"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Personal"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Proiecte"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Întrebări"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Servici"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "fără nume"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Calendar nou"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Nerepetabil"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Zilnic"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Săptămânal"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "În fiecare zii a săptămânii"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "La fiecare două săptămâni"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Lunar"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Anual"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "niciodată"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "după repetiție"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "după dată"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "după ziua lunii"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "după ziua săptămânii"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Luni"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Marți"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Miercuri"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Joi"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Vineri"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Sâmbătă"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Duminică"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "evenimentele săptămânii din luna"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "primul"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "al doilea"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "al treilea"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "al patrulea"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "al cincilea"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "ultimul"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Ianuarie"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Februarie"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Martie"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Aprilie"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Mai"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Iunie"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Iulie"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "August"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "Septembrie"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Octombrie"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "Noiembrie"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Decembrie"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "după data evenimentului"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "după ziua(zilele) anului"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "după numărul săptămânii"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "după zi și lună"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Data"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Cal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Toată ziua"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Calendar nou"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Câmpuri lipsă"
@@ -360,40 +462,32 @@ msgstr "Evenimentul se termină înainte să înceapă"
msgid "There was a database fail"
msgstr "A avut loc o eroare a bazei de date"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Săptămâna"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Luna"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Listă"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Astăzi"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Calendare"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "A fost întâmpinată o eroare în procesarea fișierului"
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Alege calendarele active"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Calendarele tale"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "Legătură CalDav"
@@ -405,19 +499,19 @@ msgstr "Calendare partajate"
msgid "No shared calendars"
msgstr "Nici un calendar partajat"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Partajați calendarul"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Descarcă"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Modifică"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Șterge"
@@ -503,23 +597,23 @@ msgstr "Separă categoriile prin virgule"
msgid "Edit categories"
msgstr "Editează categorii"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Toată ziua"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "De la"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Către"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Opțiuni avansate"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Locație"
@@ -527,7 +621,7 @@ msgstr "Locație"
msgid "Location of the Event"
msgstr "Locația evenimentului"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Descriere"
@@ -535,84 +629,86 @@ msgstr "Descriere"
msgid "Description of the Event"
msgstr "Descrierea evenimentului"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Repetă"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Avansat"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Selectează zilele săptămânii"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Selectează zilele"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "și evenimentele de zi cu zi ale anului."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "și evenimentele de zi cu zi ale lunii."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Selectează lunile"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Selectează săptămânile"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "și evenimentele săptămânale ale anului."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Interval"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Sfârșit"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "repetiții"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "crează un calendar nou"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Importă un calendar"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Alegeți calendarul"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "crează un calendar nou"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Numele noului calendar"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importă"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Importă calendar"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Calendarul a fost importat cu succes"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Importă"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "ÃŽnchide"
@@ -628,45 +724,73 @@ msgstr "Vizualizează un eveniment"
msgid "No categories selected"
msgstr "Nici o categorie selectată"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Selecteză categoria"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "din"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "la"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Fus orar"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Verifică mereu pentru schimbări ale fusului orar"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Forma de afișare a orei"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24h"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12h"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Prima zi a săptămînii"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Adresa pentru sincronizarea calendarului CalDAV"
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/ro/contacts.po b/l10n/ro/contacts.po
index 1a257a79476..ab7e082bbeb 100644
--- a/l10n/ro/contacts.po
+++ b/l10n/ro/contacts.po
@@ -10,220 +10,206 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Romanian (http://www.transifex.net/projects/p/owncloud/language/ro/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "(Dez)activarea agendei a întâmpinat o eroare."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "O eroare a împiedicat adăugarea contactului."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Nu se poate adăuga un câmp gol."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Cel puțin unul din câmpurile adresei trebuie completat."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "ID-ul nu este stabilit"
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
msgstr ""
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Contactul nu a putut fi adăugat."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Eroare la actualizarea agendei."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "Nici un ID nu a fost furnizat"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Eroare la stabilirea sumei de control"
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Nici o categorie selectată pentru ștergere"
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Nici o carte de adrese găsită"
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Nici un contact găsit"
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "O eroare a împiedicat adăugarea contactului."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "numele elementului nu este stabilit."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Nu se poate adăuga un câmp gol."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Cel puțin unul din câmpurile adresei trebuie completat."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informațiile cărții de vizită sunt incorecte. Te rog reîncarcă pagina."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "ID lipsă"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "Eroare la prelucrarea VCard-ului pentru ID:\""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Nu e posibil de adăugat o carte de adrese fără nume"
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "suma de control nu este stabilită."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Agenda nu a putut fi adăugată."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr ""
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Eroare la activarea agendei."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr ""
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "Nici un ID de contact nu a fost transmis"
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Eroare la citerea fotografiei de contact"
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Eroare la salvarea fișierului temporar."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "Fotografia care se încarcă nu este validă."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "ID-ul nu este stabilit"
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Informațiile cărții de vizită sunt incorecte. Te rog reîncarcă pagina."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Eroare la ștergerea proprietăților contactului."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "ID-ul de contact lipsește."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "ID de contact lipsă."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "Nici o adresă către fotografie nu a fost transmisă"
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Fișierul nu există:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Eroare la încărcarea imaginii."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
msgstr ""
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
msgstr ""
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
msgstr ""
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
msgstr ""
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
msgstr ""
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
msgstr ""
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
msgstr ""
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "numele elementului nu este stabilit."
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "suma de control nu este stabilită."
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr ""
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr ""
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Eroare la actualizarea proprietăților contactului."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr ""
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Eroare la actualizarea agendei."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr ""
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr ""
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
msgstr ""
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
msgstr ""
@@ -231,415 +217,562 @@ msgstr ""
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Contacte"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
msgstr ""
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
msgstr ""
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
msgstr ""
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
msgstr ""
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
msgstr ""
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/loader.js:49
+msgid "Result: "
msgstr ""
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
+#: js/loader.js:49
+msgid " imported, "
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: js/loader.js:49
+msgid " failed."
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Nu se găsește în agendă."
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Contactul nu a putut fi găsit."
+
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Nu se găsește în agendă."
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Contactul nu a putut fi găsit."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Adresă"
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefon"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "Email"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organizație"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Servicu"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Acasă"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mobil"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Text"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Voce"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Mesaj"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fax"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Video"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Pager"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Zi de naștere"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "Ziua de naștere a {name}"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Contact"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Adaugă contact"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Agende"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
msgstr ""
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Agendă nouă"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
+#: templates/index.php:39
+msgid "Navigation"
msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "Legătură CardDev"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Descarcă"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Editează"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Șterge"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Descarcă acest contact"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Șterge contact"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr ""
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr ""
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Introdu detalii despre nume"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organizație"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Șterge"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Pseudonim"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Introdu pseudonim"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Zi de naștere"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "zz-ll-aaaa"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Grupuri"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Separă grupurile cu virgule"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Editează grupuri"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Preferat"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Te rog să specifici un e-mail corect"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Introdu adresa de e-mail"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "Trimite mesaj la e-mail"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Șterge e-mail"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr ""
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr ""
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr ""
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr ""
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr ""
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefon"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr ""
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "Email"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr ""
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Adresă"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
+#: templates/part.contact.php:133
+msgid "Note"
msgstr ""
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr ""
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Descarcă acest contact"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Șterge contact"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
msgstr ""
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr ""
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Tip"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "CP"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Extins"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Stradă"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "OraÈ™"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Regiune"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Cod poștal"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
-msgid "Country"
-msgstr "Țară"
-
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
msgstr ""
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Adaugă"
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr "Țară"
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
@@ -721,35 +854,6 @@ msgstr ""
msgid "Sn."
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Agendă nouă"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Modifică agenda"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Nume afișat"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Activ"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Salvează"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Trimite"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Anulează"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr ""
@@ -766,57 +870,86 @@ msgstr ""
msgid "Name of new addressbook"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
-msgstr ""
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr ""
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
msgstr ""
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
msgstr ""
-#: templates/part.no_contacts.php:2
-msgid "You have no contacts in your addressbook."
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
msgstr ""
-#: templates/part.no_contacts.php:4
-msgid "Add contact"
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
msgstr ""
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
msgstr ""
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr ""
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr ""
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr ""
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr ""
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Descarcă"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Editează"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Agendă nouă"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Salvează"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Anulează"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/ro/core.po b/l10n/ro/core.po
index 3aed0fedf49..5a733b5eb1a 100644
--- a/l10n/ro/core.po
+++ b/l10n/ro/core.po
@@ -10,10 +10,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Romanian (http://www.transifex.net/projects/p/owncloud/language/ro/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -36,51 +36,55 @@ msgstr "Această categorie deja există:"
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
msgstr ""
-#: js/js.js:520
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Configurări"
+
+#: js/js.js:573
msgid "January"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
msgstr ""
@@ -109,10 +113,6 @@ msgid "Error"
msgstr ""
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Resetarea parolei ownCloud"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "Resetarea parolei ownCloud "
@@ -242,14 +242,10 @@ msgstr "Finalizează instalarea"
msgid "web services under your control"
msgstr "servicii web controlate de tine"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Ieșire"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Configurări"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Ai uitat parola?"
diff --git a/l10n/ro/files.po b/l10n/ro/files.po
index 06c259c228f..e7d65b7a034 100644
--- a/l10n/ro/files.po
+++ b/l10n/ro/files.po
@@ -10,43 +10,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Romanian (http://www.transifex.net/projects/p/owncloud/language/ro/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Nicio eroare, fișierul a fost încărcat cu succes"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Fișierul are o dimensiune mai mare decât cea specificată în variabila upload_max_filesize din php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Fișierul a fost încărcat doar parțial"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Niciun fișier încărcat"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Lipsește un dosar temporar"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Eroare la scriere pe disc"
@@ -54,55 +54,83 @@ msgstr "Eroare la scriere pe disc"
msgid "Files"
msgstr "Fișiere"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Șterge"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
msgstr ""
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
msgstr ""
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Dimensiune"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Modificat"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
msgstr ""
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
msgstr ""
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
msgstr ""
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
msgstr ""
@@ -174,10 +202,6 @@ msgstr "Partajează"
msgid "Download"
msgstr "Descarcă"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Șterge"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Fișierul încărcat este prea mare"
diff --git a/l10n/ro/files_encryption.po b/l10n/ro/files_encryption.po
new file mode 100644
index 00000000000..f042cb49fcf
--- /dev/null
+++ b/l10n/ro/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/ro/files_external.po b/l10n/ro/files_external.po
new file mode 100644
index 00000000000..6b9e6f09555
--- /dev/null
+++ b/l10n/ro/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/ro/files_sharing.po b/l10n/ro/files_sharing.po
new file mode 100644
index 00000000000..ab936035380
--- /dev/null
+++ b/l10n/ro/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/ro/files_versions.po b/l10n/ro/files_versions.po
new file mode 100644
index 00000000000..bb1b9526f0f
--- /dev/null
+++ b/l10n/ro/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/ro/lib.po b/l10n/ro/lib.po
new file mode 100644
index 00000000000..b0fd2256d65
--- /dev/null
+++ b/l10n/ro/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/ro/settings.po b/l10n/ro/settings.po
index 542bfa8f1c2..736ab30fa14 100644
--- a/l10n/ro/settings.po
+++ b/l10n/ro/settings.po
@@ -11,16 +11,20 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Romanian (http://www.transifex.net/projects/p/owncloud/language/ro/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
msgstr ""
@@ -29,23 +33,31 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID schimbat"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Cerere eronată"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Limba a fost schimbată"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
msgstr ""
@@ -53,35 +65,55 @@ msgstr ""
msgid "Saving..."
msgstr ""
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "_language_name_"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Jurnal de activitate"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Mai mult"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Adaugă aplicația ta"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Selectează o aplicație"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-autorizat"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "de"
@@ -173,34 +205,38 @@ msgstr "Ajută la traducere"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "folosește această adresă pentru a te conecta la managerul tău de fișiere din ownCloud"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Nume"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Parolă"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Grupuri"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Crează"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Cotă implicită"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Altele"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Cotă"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Șterge"
diff --git a/l10n/ro/tasks.po b/l10n/ro/tasks.po
new file mode 100644
index 00000000000..c7869fb6c68
--- /dev/null
+++ b/l10n/ro/tasks.po
@@ -0,0 +1,107 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Dumitru Ursu <>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-15 02:03+0200\n"
+"PO-Revision-Date: 2012-08-14 20:30+0000\n"
+"Last-Translator: Dumitru Ursu <>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr "Data/timpul invalid"
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr "Sarcini"
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr "Fără categorie"
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr "Nespecificat"
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr "1=cel mai înalt"
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr "5=mediu"
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr "9=cel mai jos"
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr "Rezumat gol"
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr "Completare procentuală greșită"
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr "Prioritare greșită"
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr "Adaugă sarcină"
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr "Comandă până la"
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr "Lista de comenzi"
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr "Comandă executată"
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr "Locația comenzii"
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr "Prioritarea comenzii"
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr "Eticheta comenzii"
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr "Încărcare sarcini"
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr "Important"
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr "Mai mult"
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr "Mai puțin"
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr "Șterge"
diff --git a/l10n/ro/user_ldap.po b/l10n/ro/user_ldap.po
new file mode 100644
index 00000000000..644c43d43de
--- /dev/null
+++ b/l10n/ro/user_ldap.po
@@ -0,0 +1,165 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Dumitru Ursu <>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-15 02:03+0200\n"
+"PO-Revision-Date: 2012-08-14 20:24+0000\n"
+"Last-Translator: Dumitru Ursu <>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr "Gazdă"
+
+#: templates/settings.php:8
+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:9
+msgid "Base DN"
+msgstr "DN de bază"
+
+#: templates/settings.php:9
+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:10
+msgid "User DN"
+msgstr "DN al utilizatorului"
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr "Parolă"
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr "Pentru acces anonim, lăsați DN și Parolă libere."
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr "Filtrare după Nume Utilizator"
+
+#: templates/settings.php:12
+#, 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:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr "folosiți substituentul %%uid , d.e. \"uid=%%uid\""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr "Filtrarea după lista utilizatorilor"
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr "Definește filtrele care trebui aplicate, când se peiau utilzatorii."
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr "fără substituenți, d.e. \"objectClass=person\"."
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr "Fitrare Grup"
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr "Definește filtrele care se aplică, când se preiau grupurile."
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr "fără substituenți, d.e. \"objectClass=posixGroup\""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr "Portul"
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr "Arborele de bază al Utilizatorilor"
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr "Arborele de bază al Grupurilor"
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr "Asocierea Grup-Membru"
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr "Utilizează TLS"
+
+#: templates/settings.php:21
+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:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr "Server LDAP insensibil la majuscule (Windows)"
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr "Oprește validarea certificatelor SSL "
+
+#: templates/settings.php:23
+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:23
+msgid "Not recommended, use for testing only."
+msgstr "Nu este recomandat, a se utiliza doar pentru testare."
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr "Câmpul cu numele vizibil al utilizatorului"
+
+#: templates/settings.php:24
+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:25
+msgid "Group Display Name Field"
+msgstr "Câmpul cu numele grupului"
+
+#: templates/settings.php:25
+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:27
+msgid "in bytes"
+msgstr "în octeți"
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr "în secunde. O schimbare curăță memoria tampon."
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr "Ajutor"
diff --git a/l10n/ro/user_migrate.po b/l10n/ro/user_migrate.po
new file mode 100644
index 00000000000..de0b6551e99
--- /dev/null
+++ b/l10n/ro/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/ro/user_openid.po b/l10n/ro/user_openid.po
new file mode 100644
index 00000000000..e5598de2c94
--- /dev/null
+++ b/l10n/ro/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/ru/admin_dependencies_chk.po b/l10n/ru/admin_dependencies_chk.po
new file mode 100644
index 00000000000..1d16b4f757e
--- /dev/null
+++ b/l10n/ru/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/ru/admin_migrate.po b/l10n/ru/admin_migrate.po
new file mode 100644
index 00000000000..9f8eb42ef78
--- /dev/null
+++ b/l10n/ru/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/ru/bookmarks.po b/l10n/ru/bookmarks.po
new file mode 100644
index 00000000000..151205b731a
--- /dev/null
+++ b/l10n/ru/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/ru/calendar.po b/l10n/ru/calendar.po
index 32c4700f8df..3b4d2ffe82d 100644
--- a/l10n/ru/calendar.po
+++ b/l10n/ru/calendar.po
@@ -6,26 +6,36 @@
# Denis <reg.transifex.net@demitel.ru>, 2012.
# <jekader@gmail.com>, 2011, 2012.
# Nick Remeslennikov <homolibere@gmail.com>, 2012.
+# <rasperepodvipodvert@gmail.com>, 2012.
# <tony.mccourin@gmail.com>, 2011.
+# Victor Bravo <>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Russian (http://www.transifex.net/projects/p/owncloud/language/ru/)\n"
+"POT-Creation-Date: 2012-08-20 02:01+0200\n"
+"PO-Revision-Date: 2012-08-19 17:21+0000\n"
+"Last-Translator: rasperepodvipodvert <rasperepodvipodvert@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr "Ðе вÑе календари полноÑтью кешированы"
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr "Ð’Ñе, вроде бы, закешировано"
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Календари не найдены."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Ð¡Ð¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð½Ðµ найдены."
@@ -33,300 +43,394 @@ msgstr "Ð¡Ð¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð½Ðµ найдены."
msgid "Wrong calendar"
msgstr "Ðеверный календарь"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr "Файл либо не Ñобержит Ñобытий, либо вÑе ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ ÑƒÐ¶Ðµ еÑÑ‚ÑŒ в календаре"
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr "ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð±Ñ‹Ð»Ð¸ Ñохранены в новый календарь"
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr "Ошибка импорта"
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr "ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð±Ñ‹Ð»Ð¸ Ñохранены в вашем календаре"
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Ðовый чаÑовой поÑÑ:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "ЧаÑовой поÑÑ Ð¸Ð·Ð¼ÐµÐ½Ñ‘Ð½"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Ðеверный запроÑ"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Календарь"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ддд"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ддд М/д"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "дддд М/д"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "ММММ гггг"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-msgstr ""
+msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "дддд, МММ д, гггг"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "День рождениÑ"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "БизнеÑ"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Звонить"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Клиенты"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "ДоÑтавщик"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Праздники"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Идеи"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Поездка"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Юбилей"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Ð’Ñтреча"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Другое"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Личное"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Проекты"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "ВопроÑÑ‹"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Работа"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr "до ÑвиданиÑ"
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "без имени"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Ðовый Календарь"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Ðе повторÑетÑÑ"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Ежедневно"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Еженедельно"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "По буднÑм"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Каждые две недели"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Каждый меÑÑц"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Каждый год"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "никогда"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "по чиÑлу повторений"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "по дате"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "по дню меÑÑца"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "по дню недели"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Понедельник"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Вторник"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Среда"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Четверг"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "ПÑтница"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Суббота"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "ВоÑкреÑенье"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "Ð½ÐµÐ´ÐµÐ»Ñ Ð¼ÐµÑÑца"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "перваÑ"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "втораÑ"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "третьÑ"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "червётраÑ"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "пÑтаÑ"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "поÑледнÑÑ"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Январь"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Февраль"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Март"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Ðпрель"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Май"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Июнь"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Июль"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "ÐвгуÑÑ‚"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "СентÑбрь"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "ОктÑбрь"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "ÐоÑбрь"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Декабрь"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "по дате Ñобытий"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "по днÑм недели"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "по номерам недели"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "по дню и меÑÑцу"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Дата"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Кал."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr "Ð’Ñ."
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr "Пн."
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr "Ð’Ñ‚."
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr "Ср."
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr "Чт."
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr "Пт."
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr "Сб."
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr "Янв."
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr "Фев."
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr "Мар."
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr "Ðпр."
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr "Май."
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr "Июн."
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr "Июл."
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr "Ðвг."
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr "Сен."
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr "Окт."
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr "ÐоÑ."
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr "Дек."
+
#: templates/calendar.php:11
msgid "All day"
msgstr "ВеÑÑŒ день"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Ðовый Календарь"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Ðезаполненные полÑ"
@@ -360,40 +464,32 @@ msgstr "Окончание ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ñ€Ð°Ð½ÑŒÑˆÐµ, чем его начал
msgid "There was a database fail"
msgstr "Ошибка базы данных"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "ÐеделÑ"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "МеÑÑц"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "СпиÑок"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "СегоднÑ"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Календари"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Ðе удалоÑÑŒ обработать файл."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Выберите активные календари"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr "Параметры"
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Ваши календари"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "СÑылка Ð´Ð»Ñ CalDav"
@@ -405,19 +501,19 @@ msgstr "Общие календари"
msgid "No shared calendars"
msgstr "Ðет общих календарей"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Сделать календарь общим"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Скачать"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Редактировать"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Удалить"
@@ -503,23 +599,23 @@ msgstr "РазделÑйте категории запÑтыми"
msgid "Edit categories"
msgstr "Редактировать категории"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Событие на веÑÑŒ день"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "От"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "До"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Дополнительные параметры"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "МеÑто"
@@ -527,7 +623,7 @@ msgstr "МеÑто"
msgid "Location of the Event"
msgstr "МеÑто ÑобытиÑ"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "ОпиÑание"
@@ -535,84 +631,86 @@ msgstr "ОпиÑание"
msgid "Description of the Event"
msgstr "ОпиÑание ÑобытиÑ"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Повтор"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Дополнительно"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Выбрать дни недели"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Выбрать дни"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "и день года ÑобытиÑ"
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "и день меÑÑца ÑобытиÑ"
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Выбрать меÑÑцы"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Выбрать недели"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "и номер недели ÑобытиÑ"
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Интервал"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Окончание"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "повторений"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "Создать новый календарь"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Импортировать календарь из файла"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
msgstr "ПожалуйÑта, выберите календарь"
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "Создать новый календарь"
-
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Ðазвание нового календарÑ"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Импортировать"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr "Возьмите разрешенное имÑ!"
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "ИмпортируетÑÑ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€ÑŒ"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr "Календарь Ñ Ñ‚Ð°ÐºÐ¸Ð¼ именем уже ÑущеÑтвует. ЕÑли вы продолжите, одноименный календарь будет удален."
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Календарь уÑпешно импортирован"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Импортировать"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Закрыть Сообщение"
@@ -628,45 +726,73 @@ msgstr "Показать Ñобытие"
msgid "No categories selected"
msgstr "Категории не выбраны"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Выбрать категорию"
-
#: templates/part.showevent.php:37
msgid "of"
-msgstr ""
+msgstr "из"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
-msgstr ""
+msgstr "на"
+
+#: templates/settings.php:10
+msgid "General"
+msgstr "ОÑновные"
-#: templates/settings.php:14
+#: templates/settings.php:15
msgid "Timezone"
msgstr "ЧаÑовой поÑÑ"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Ð’Ñегда проверÑйте изменение чаÑового поÑÑа"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr "ÐвтоматичеÑкое обновление временной зоны"
-#: templates/settings.php:33
-msgid "Timeformat"
+#: templates/settings.php:52
+msgid "Time format"
msgstr "Формат времени"
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24ч"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12ч"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Первый день недели"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr "Ðачало недели"
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr "КÑш"
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr "ОчиÑтить кÑш повторÑющихÑÑ Ñобытий"
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr "URLs"
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr "ÐÐ´Ñ€ÐµÑ Ñинхронизации CalDAV"
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr "подробнее"
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr "ОÑновной Ð°Ð´Ñ€ÐµÑ (Контакта)"
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "ÐÐ´Ñ€ÐµÑ Ñинхронизации ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ CalDAV:"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr "Читать только ÑÑылки iCalendar"
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/ru/contacts.po b/l10n/ru/contacts.po
index f44e9700f0d..e4c51a539bc 100644
--- a/l10n/ru/contacts.po
+++ b/l10n/ru/contacts.po
@@ -9,672 +9,806 @@
# <lankme@gmail.com>, 2012.
# Nick Remeslennikov <homolibere@gmail.com>, 2012.
# <tony.mccourin@gmail.com>, 2011.
+# Victor Bravo <>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Russian (http://www.transifex.net/projects/p/owncloud/language/ru/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
-#: ajax/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Ошибка (де)активации адреÑной книги."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Произошла ошибка при добавлении контакта."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Ðевозможно добавить пуÑтой параметр."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Как минимум одно поле адреÑа должно быть заполнено."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "id не уÑтановлен."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr ""
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "ÐÐµÐ»ÑŒÐ·Ñ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ адреÑную книгу Ñ Ð¿ÑƒÑтым именем."
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Ошибка Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ к контакту."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Ошибка Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð°Ð´Ñ€ÐµÑной книги."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "ID не предоÑтавлен"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Ошибка уÑтановки контрольной Ñуммы."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Категории Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð½Ðµ уÑтановлены."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "ÐдреÑные книги не найдены."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Контакты не найдены."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Произошла ошибка при добавлении контакта."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "Ð¸Ð¼Ñ Ñлемента не уÑтановлено."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr "Ðевозможно раÑпознать контакт:"
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Ðевозможно добавить пуÑтой параметр."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Как минимум одно поле адреÑа должно быть заполнено."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "При попытке добавить дубликат:"
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr "ÐеизвеÑтный IM:"
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ vCard некорректна. ПожалуйÑта, обновите Ñтраницу."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "ОтÑутÑтвует ID"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "Ошибка обработки VCard Ð´Ð»Ñ ID: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "ÐÐµÐ»ÑŒÐ·Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ адреÑную книгу без имени."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñумма не уÑтановлена."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Ошибка Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð°Ð´Ñ€ÐµÑной книги."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ vCard не корректна. Перезагрузите Ñтраницу: "
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Ошибка активации адреÑной книги."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Что-то пошло FUBAR."
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
-msgstr ""
+msgstr "Ðет контакта ID"
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ„Ð¾Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ð¸ контакта."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Ошибка ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð³Ð¾ файла."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "Ð—Ð°Ð³Ñ€ÑƒÐ¶Ð°ÐµÐ¼Ð°Ñ Ñ„Ð¾Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ Ð¸Ñпорчена."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "id не уÑтановлен."
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ vCard некорректна. ПожалуйÑта, обновите Ñтраницу."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Ошибка ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ из контакта."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "ID контакта отÑутÑтвует."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr ""
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
-msgstr ""
+msgstr "Ðет фото по адреÑу."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Файл не ÑущеÑтвует:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Ошибка загрузки картинки."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Ошибка при получении контактов"
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Ошибка при получении ФОТО."
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Ошибка при Ñохранении контактов."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Ошибка Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° изображений"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Ошибка обрезки изображений"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ñ… изображений"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
+msgstr "Ошибка поиÑка изображений:"
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "Ð¸Ð¼Ñ Ñлемента не уÑтановлено."
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñумма не уÑтановлена."
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ vCard не корректна. Перезагрузите Ñтраницу: "
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr ""
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Ошибка Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ контакта."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "ÐÐµÐ»ÑŒÐ·Ñ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ адреÑную книгу Ñ Ð¿ÑƒÑтым именем."
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Ошибка Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð°Ð´Ñ€ÐµÑной книги."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "Ошибка загрузки контактов в хранилище."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Файл загружен уÑпешно."
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Загружаемый файл первоÑходит значение переменной upload_max_filesize, уÑтановленно в php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Загружаемый файл превоÑходит значение переменной MAX_FILE_SIZE, указанной в форме HTML"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "Файл загружен чаÑтично"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Файл не был загружен"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "ОтÑутÑтвует Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Ðе удалоÑÑŒ Ñохранить временное изображение:"
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Ðе удалоÑÑŒ загрузить временное изображение:"
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Файл не был загружен. ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Контакты"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "К Ñожалению, Ñта Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð½Ðµ была реализована"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "Ðе реализовано"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Ðе удалоÑÑŒ получить адреÑ."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Ошибка"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Это ÑвойÑтво должно быть не пуÑтым."
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "Ðе удалоÑÑŒ Ñериализовать Ñлементы."
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "'deleteProperty' called without type argument. Please report at bugs.owncloud.org"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Изменить имÑ"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Ðет выбранных файлов Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸."
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "Файл, который вы пытаетеÑÑŒ загрузить превышать макÑимальный размер загружаемых файлов на Ñтом Ñервере."
-#: js/contacts.js:1119
-msgid "Select photo"
-msgstr ""
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr "Ошибка загрузки Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ."
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
-
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr ""
-
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
-msgstr ""
-
-#: js/contacts.js:1476
-msgid "OK"
-msgstr ""
+msgstr "Выберите тип"
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
-msgstr ""
-
-#: js/contacts.js:1634
-msgid "Upload too large"
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Wrong file type"
-msgstr ""
-
-#: js/contacts.js:1644
+#: js/contacts.js:1578
msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
-msgstr ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr "Ðекоторые контакты помечены на удаление, но ещё не удалены. Подождите, пока они удалÑÑŽÑ‚ÑÑ."
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr "Ð’Ñ‹ хотите Ñоединить Ñти адреÑные книги?"
#: js/loader.js:49
msgid "Result: "
-msgstr ""
+msgstr "Результат:"
#: js/loader.js:49
msgid " imported, "
-msgstr ""
+msgstr "импортировано, "
#: js/loader.js:49
msgid " failed."
-msgstr ""
+msgstr "не удалоÑÑŒ."
+
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
+msgstr "Отображаемое Ð¸Ð¼Ñ Ð½Ðµ может быть пуÑтым."
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "ÐдреÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð° не найдена."
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr "ÐдреÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð° не найдена:"
-#: lib/app.php:34
+#: lib/app.php:52
msgid "This is not your addressbook."
msgstr "Это не ваша адреÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°."
-#: lib/app.php:45
+#: lib/app.php:71
msgid "Contact could not be found."
msgstr "Контакт не найден."
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "ÐдреÑ"
+#: lib/app.php:116
+msgid "Jabber"
+msgstr "Jabber"
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Телефон"
+#: lib/app.php:121
+msgid "AIM"
+msgstr "AIM"
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "Ящик Ñл. почты"
+#: lib/app.php:126
+msgid "MSN"
+msgstr "MSN"
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "ОрганизациÑ"
+#: lib/app.php:131
+msgid "Twitter"
+msgstr "Twitter"
+
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr "GoogleTalk"
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr "Facebook"
+
+#: lib/app.php:146
+msgid "XMPP"
+msgstr "XMPP"
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr "ICQ"
+
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr "Yahoo"
+
+#: lib/app.php:161
+msgid "Skype"
+msgstr "Skype"
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:166
+msgid "QQ"
+msgstr "QQ"
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr "GaduGadu"
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Рабочий"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Домашний"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr "Другое"
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Мобильный"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "ТекÑÑ‚"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "ГолоÑ"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Сообщение"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "ФакÑ"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Видео"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Пейджер"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Интернет"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "День рождениÑ"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr "БизнеÑ"
+
+#: lib/app.php:254
+msgid "Call"
+msgstr "Вызов"
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr "Клиенты"
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr "Праздники"
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr "Идеи"
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr "Поездка"
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr "Юбилей"
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr "Ð’Ñтреча"
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr "Личный"
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr "Проекты"
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr "ВопроÑÑ‹"
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "День Ñ€Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ {name}"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Контакт"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Добавить Контакт"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Импорт"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr "ÐаÑтройки"
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "ÐдреÑные книги"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "ÐаÑтроить ÐдреÑную книгу"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Закрыть"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "ÐÐ¾Ð²Ð°Ñ Ð°Ð´Ñ€ÐµÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr "ГорÑчие клавиши"
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Импортировать из VCF"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr "ÐавигациÑ"
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "СÑылка CardDAV"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr "Следующий контакт в ÑпиÑке"
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Скачать"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr "Предыдущий контакт в ÑпиÑке"
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Редактировать"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr "Развернуть/Ñвернуть текущую адреÑную книгу"
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Удалить"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð°Ð´Ñ€ÐµÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°"
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Скачать контакт"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð°Ð´Ñ€ÐµÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°"
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Удалить контакт"
+#: templates/index.php:54
+msgid "Actions"
+msgstr "ДейÑтвиÑ"
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr "Обновить ÑпиÑок контактов"
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr "Добавить новый контакт"
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr "Добавить новую адреÑную книгу"
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr "Удалить текущий контакт"
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "ПеретÑните фотографии Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Удалить текущую фотографию"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Редактировать текущую фотографию"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Загрузить новую фотографию"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Выбрать фотографию из ownCloud"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
-msgstr ""
+msgstr "Формат Краткое имÑ, Полное имÑ"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
-msgstr ""
+msgstr "Изменить детали имени"
+
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "ОрганизациÑ"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Удалить"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "ПÑевдоним"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Введите пÑевдоним"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "День рождениÑ"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr "Веб-Ñайт"
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr "http://www.somesite.com"
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr "Перейти на веб-Ñайт"
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "dd-mm-yyyy"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Группы"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
-msgstr ""
+msgstr "Разделить группы запÑтыми"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Редактировать группы"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Предпочитаемый"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Укажите дейÑтвительный Ð°Ð´Ñ€ÐµÑ Ñлектронной почты."
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Укажите Ð°Ð´Ñ€ÐµÑ Ñлектронной почты"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "ÐапиÑать по адреÑу"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Удалить Ð°Ð´Ñ€ÐµÑ Ñлектронной почты"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "ВвеÑти номер телефона"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Удалить номер телефона"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr "Удалить IM"
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Показать на карте"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "ВвеÑти детали адреÑа"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Добавьте заметки здеÑÑŒ."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Добавить поле"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Фото профилÑ"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Телефон"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Заметка"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "Ящик Ñл. почты"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Удалить текущую фотографию"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Редактировать текущую фотографию"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "ÐдреÑ"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Загрузить новую фотографию"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Заметка"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Выбрать фотографию из ownCloud"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Скачать контакт"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Удалить контакт"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "Временный образ был удален из кÑша."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Редактировать адреÑ"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Тип"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "ÐО"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr "Улица"
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr "Улица и дом"
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "РаÑширенный"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Улица"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr "Ðомер квартиры и Ñ‚.д."
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Город"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "ОблаÑÑ‚ÑŒ"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr "Ðапример, облаÑÑ‚ÑŒ или район"
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Почтовый индекÑ"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr "Почтовый индекÑ"
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "Страна"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Редактировать категрии"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Добавить"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "ÐдреÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°"
#: templates/part.edit_name_dialog.php:23
msgid "Hon. prefixes"
-msgstr ""
+msgstr "Уважительные префикÑÑ‹"
#: templates/part.edit_name_dialog.php:27
msgid "Miss"
-msgstr ""
+msgstr "МиÑÑ"
#: templates/part.edit_name_dialog.php:28
msgid "Ms"
-msgstr ""
+msgstr "Г-жа"
#: templates/part.edit_name_dialog.php:29
msgid "Mr"
-msgstr ""
+msgstr "Г-н"
#: templates/part.edit_name_dialog.php:30
msgid "Sir"
-msgstr ""
+msgstr "СÑÑ€"
#: templates/part.edit_name_dialog.php:31
msgid "Mrs"
-msgstr ""
+msgstr "Г-жа"
#: templates/part.edit_name_dialog.php:32
msgid "Dr"
-msgstr ""
+msgstr "Доктор"
#: templates/part.edit_name_dialog.php:35
msgid "Given name"
@@ -690,68 +824,39 @@ msgstr "ФамилиÑ"
#: templates/part.edit_name_dialog.php:41
msgid "Hon. suffixes"
-msgstr ""
+msgstr "Hon. suffixes"
#: templates/part.edit_name_dialog.php:45
msgid "J.D."
-msgstr ""
+msgstr "Уважительные ÑуффикÑÑ‹"
#: templates/part.edit_name_dialog.php:46
msgid "M.D."
-msgstr ""
+msgstr "M.D."
#: templates/part.edit_name_dialog.php:47
msgid "D.O."
-msgstr ""
+msgstr "D.O."
#: templates/part.edit_name_dialog.php:48
msgid "D.C."
-msgstr ""
+msgstr "D.C."
#: templates/part.edit_name_dialog.php:49
msgid "Ph.D."
-msgstr ""
+msgstr "Ph.D."
#: templates/part.edit_name_dialog.php:50
msgid "Esq."
-msgstr ""
+msgstr "Esq."
#: templates/part.edit_name_dialog.php:51
msgid "Jr."
-msgstr ""
+msgstr "Jr."
#: templates/part.edit_name_dialog.php:52
msgid "Sn."
-msgstr ""
-
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "ÐÐ¾Ð²Ð°Ñ Ð°Ð´Ñ€ÐµÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Редактировать адреÑную книгу"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Отображаемое имÑ"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Ðктивно"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Сохранить"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Отправить"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Отменить"
+msgstr "Sn."
#: templates/part.import.php:1
msgid "Import a contacts file"
@@ -769,57 +874,86 @@ msgstr "Ñоздать новую адреÑную книгу"
msgid "Name of new addressbook"
msgstr "Ð˜Ð¼Ñ Ð½Ð¾Ð²Ð¾Ð¹ адреÑной книги"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Импорт"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "Импорт контактов"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr ""
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr ""
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
-msgstr "Ð’ адреÑной книге еÑÑ‚ÑŒ контакты."
+msgstr "Ð’ адреÑной книге нет контактов."
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Добавить контакт"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "ÐаÑтроить адреÑную книгу"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr "Выбрать адреÑную книгу"
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr "Введите имÑ"
-#: templates/settings.php:4
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr "Ввдите опиÑание"
+
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
-msgstr ""
+msgstr "CardDAV Ñинхронизации адреÑов"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
-msgstr ""
+msgstr "Первичный Ð°Ð´Ñ€ÐµÑ (Kontact и др.)"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
+msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Скачать"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Редактировать"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "ÐÐ¾Ð²Ð°Ñ Ð°Ð´Ñ€ÐµÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr "ИмÑ"
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr "ОпиÑание"
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Сохранить"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Отменить"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr "Ещё..."
diff --git a/l10n/ru/core.po b/l10n/ru/core.po
index 315d1deac67..eb287d69881 100644
--- a/l10n/ru/core.po
+++ b/l10n/ru/core.po
@@ -6,14 +6,15 @@
# Denis <reg.transifex.net@demitel.ru>, 2012.
# <jekader@gmail.com>, 2011, 2012.
# <tony.mccourin@gmail.com>, 2011.
+# Victor Bravo <>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Russian (http://www.transifex.net/projects/p/owncloud/language/ru/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -34,85 +35,85 @@ msgstr "Эта ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ ÑƒÐ¶Ðµ ÑущеÑтвует: "
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "ÐаÑтройки"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Январь"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Февраль"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Март"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "Ðпрель"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Май"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Июнь"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Июль"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "ÐвгуÑÑ‚"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "СентÑбрь"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "ОктÑбрь"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "ÐоÑбрь"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "Декабрь"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Отмена"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Ðет"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Да"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Ок"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Ðет категорий Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Ошибка"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Ð¡Ð±Ñ€Ð¾Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ OwnCloud"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "Ð¡Ð±Ñ€Ð¾Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ "
@@ -242,14 +243,10 @@ msgstr "Завершить уÑтановку"
msgid "web services under your control"
msgstr "Сетевые Ñлужбы под твоим контролем"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Выйти"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "ÐаÑтройки"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Забыли пароль?"
diff --git a/l10n/ru/files.po b/l10n/ru/files.po
index bda52040720..dcab1d38908 100644
--- a/l10n/ru/files.po
+++ b/l10n/ru/files.po
@@ -6,48 +6,50 @@
# Denis <reg.transifex.net@demitel.ru>, 2012.
# <jekader@gmail.com>, 2012.
# <lankme@gmail.com>, 2012.
+# Nick Remeslennikov <homolibere@gmail.com>, 2012.
# <tony.mccourin@gmail.com>, 2011.
+# Victor Bravo <>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Russian (http://www.transifex.net/projects/p/owncloud/language/ru/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 17:08+0000\n"
+"Last-Translator: Denis <reg.transifex.net@demitel.ru>\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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Файл уÑпешно загружен"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Файл превышает допуÑтимые размеры (опиÑаны как upload_max_filesize в php.ini)"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Файл был загружен не полноÑтью"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Файл не был загружен"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Ðевозможно найти временную папку"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Ошибка запиÑи на диÑк"
@@ -55,57 +57,85 @@ msgstr "Ошибка запиÑи на диÑк"
msgid "Files"
msgstr "Файлы"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Удалить"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "уже ÑущеÑтвует"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "заменить"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "отмена"
-#: js/files.js:170
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "заменён"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "Ñ"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "отмена"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "удален"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "Ñоздание ZIP-файла, Ñто может занÑÑ‚ÑŒ некоторое времÑ."
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Ðе удаетÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ файл размером 0 байт в каталог"
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "Ошибка загрузки"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "Ожидание"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "Загрузка отменена."
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "Ðеверное имÑ, '/' не допуÑкаетÑÑ."
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Размер"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Изменен"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "папка"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "папки"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "файл"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "файлы"
#: templates/admin.php:5
msgid "File handling"
@@ -175,10 +205,6 @@ msgstr "ПоделитьÑÑ"
msgid "Download"
msgstr "Скачать"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Удалить"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Файл Ñлишком большой"
diff --git a/l10n/ru/files_encryption.po b/l10n/ru/files_encryption.po
new file mode 100644
index 00000000000..51c8bc94cc2
--- /dev/null
+++ b/l10n/ru/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/ru/files_external.po b/l10n/ru/files_external.po
new file mode 100644
index 00000000000..72084a423c2
--- /dev/null
+++ b/l10n/ru/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/ru/files_sharing.po b/l10n/ru/files_sharing.po
new file mode 100644
index 00000000000..915d33bafb3
--- /dev/null
+++ b/l10n/ru/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/ru/files_versions.po b/l10n/ru/files_versions.po
new file mode 100644
index 00000000000..f9d067172cf
--- /dev/null
+++ b/l10n/ru/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/ru/gallery.po b/l10n/ru/gallery.po
index 34a7474dd40..c80be67674f 100644
--- a/l10n/ru/gallery.po
+++ b/l10n/ru/gallery.po
@@ -7,92 +7,37 @@
# <jekader@gmail.com>, 2012.
# <lankme@gmail.com>, 2012.
# Soul Kim <warlock.rf@gmail.com>, 2012.
+# Victor Bravo <>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Russian (http://www.transifex.net/projects/p/owncloud/language/ru/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-23 17:08+0000\n"
+"Last-Translator: Denis <reg.transifex.net@demitel.ru>\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"
-#: appinfo/app.php:37
+#: appinfo/app.php:42
msgid "Pictures"
msgstr "РиÑунки"
-#: js/album_cover.js:44
+#: js/pictures.js:12
msgid "Share gallery"
-msgstr ""
+msgstr "Опубликовать"
-#: js/album_cover.js:64 js/album_cover.js:100 js/album_cover.js:133
+#: js/pictures.js:32
msgid "Error: "
-msgstr ""
+msgstr "Ошибка"
-#: js/album_cover.js:64 js/album_cover.js:100
+#: js/pictures.js:32
msgid "Internal error"
-msgstr ""
-
-#: js/album_cover.js:114
-msgid "Scanning root"
-msgstr ""
-
-#: js/album_cover.js:115
-msgid "Default order"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Ascending"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Descending"
-msgstr ""
-
-#: js/album_cover.js:117 templates/index.php:19
-msgid "Settings"
-msgstr "ÐаÑтройки"
-
-#: js/album_cover.js:122
-msgid "Scanning root cannot be empty"
-msgstr ""
-
-#: js/album_cover.js:122 js/album_cover.js:133
-msgid "Error"
-msgstr ""
-
-#: templates/index.php:16
-msgid "Rescan"
-msgstr "Обновить"
-
-#: templates/index.php:17
-msgid "Stop"
-msgstr "ОÑтановить"
-
-#: templates/index.php:18
-msgid "Share"
-msgstr "ПоделитьÑÑ"
-
-#: templates/view_album.php:19
-msgid "Back"
-msgstr "Ðазад"
-
-#: templates/view_album.php:36
-msgid "Remove confirmation"
-msgstr "Подтверждение удалениÑ"
-
-#: templates/view_album.php:37
-msgid "Do you want to remove album"
-msgstr "Вы хотите удалить альбом?"
-
-#: templates/view_album.php:40
-msgid "Change album name"
-msgstr "Изменить Ð¸Ð¼Ñ Ð°Ð»ÑŒÐ±Ð¾Ð¼Ð°"
+msgstr "ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°"
-#: templates/view_album.php:43
-msgid "New album name"
-msgstr "Ðовое Ð¸Ð¼Ñ Ð°Ð»ÑŒÐ±Ð¾Ð¼Ð°"
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr "Слайдшоу"
diff --git a/l10n/ru/lib.po b/l10n/ru/lib.po
new file mode 100644
index 00000000000..97723dd617f
--- /dev/null
+++ b/l10n/ru/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/ru/settings.po b/l10n/ru/settings.po
index 05b03aad0b9..8dfb19bb77b 100644
--- a/l10n/ru/settings.po
+++ b/l10n/ru/settings.po
@@ -7,82 +7,117 @@
# <icewind1991@gmail.com>, 2012.
# <jekader@gmail.com>, 2012.
# <lankme@gmail.com>, 2012.
+# Nick Remeslennikov <homolibere@gmail.com>, 2012.
+# <rasperepodvipodvert@gmail.com>, 2012.
# <tony.mccourin@gmail.com>, 2011.
+# Victor Bravo <>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Russian (http://www.transifex.net/projects/p/owncloud/language/ru/)\n"
+"POT-Creation-Date: 2012-08-19 02:02+0200\n"
+"PO-Revision-Date: 2012-08-18 11:59+0000\n"
+"Last-Translator: rasperepodvipodvert <rasperepodvipodvert@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "Загрузка из App Store запрещена"
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "Email Ñохранен"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Ðеправильный Email"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID изменён"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Ðеверный запроÑ"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Ошибка авторизации"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Язык изменён"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "Ошибка"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "Отключить"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Включить"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Сохранение..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "РуÑÑкий "
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "Предупреждение безопаÑноÑти"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "Задание"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr "ЗапуÑкать задание при загрузке каждой Ñтраницы"
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr "cron.php зарегиÑтрирован в webcron ÑервиÑе"
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr "иÑпользовать ÑиÑтемные заданиÑ"
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Журнал"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Ещё"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Добавить приложение"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Выберите приложение"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Смотрите Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½Ð° apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-лицензиÑ"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "от"
@@ -174,34 +209,38 @@ msgstr "Помочь Ñ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð¾Ð¼"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "иÑпользуйте данный Ð°Ð´Ñ€ÐµÑ Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº ownCloud в вашем файловом менеджере"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "ИмÑ"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Пароль"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Группы"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Создать"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Квота по умолчанию"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Другое"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr "Группа ÐдминиÑтраторы"
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Квота"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Удалить"
diff --git a/l10n/ru/tasks.po b/l10n/ru/tasks.po
new file mode 100644
index 00000000000..202e76b9a50
--- /dev/null
+++ b/l10n/ru/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/ru/user_ldap.po b/l10n/ru/user_ldap.po
new file mode 100644
index 00000000000..01320218dcc
--- /dev/null
+++ b/l10n/ru/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/ru/user_migrate.po b/l10n/ru/user_migrate.po
new file mode 100644
index 00000000000..bf0f6d4c8ba
--- /dev/null
+++ b/l10n/ru/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/ru/user_openid.po b/l10n/ru/user_openid.po
new file mode 100644
index 00000000000..354e17e01da
--- /dev/null
+++ b/l10n/ru/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/sk_SK/admin_dependencies_chk.po b/l10n/sk_SK/admin_dependencies_chk.po
new file mode 100644
index 00000000000..1381cc2a7f5
--- /dev/null
+++ b/l10n/sk_SK/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/sk_SK/admin_migrate.po b/l10n/sk_SK/admin_migrate.po
new file mode 100644
index 00000000000..00e8e196c08
--- /dev/null
+++ b/l10n/sk_SK/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/sk_SK/bookmarks.po b/l10n/sk_SK/bookmarks.po
new file mode 100644
index 00000000000..1f1343ccd6a
--- /dev/null
+++ b/l10n/sk_SK/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/sk_SK/calendar.po b/l10n/sk_SK/calendar.po
index 3092e784c25..9b560742022 100644
--- a/l10n/sk_SK/calendar.po
+++ b/l10n/sk_SK/calendar.po
@@ -9,21 +9,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Slovak (Slovakia) (http://www.transifex.net/projects/p/owncloud/language/sk_SK/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
"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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Nenašiel sa žiadny kalendár."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Nenašla sa žiadna udalosť."
@@ -31,300 +39,394 @@ msgstr "Nenašla sa žiadna udalosť."
msgid "Wrong calendar"
msgstr "Zlý kalendár"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Nová Äasová zóna:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Časové pásmo zmenené"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Neplatná požiadavka"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Kalendár"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd M/d"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd M/d"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM rrrr"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "d. MMM[ yyyy]{ '&#8212;' d.[ MMM] yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, MMM d, rrrr"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Narodeniny"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Podnikanie"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Hovor"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Klienti"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "DoruÄovateľ"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Prázdniny"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Nápady"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Cesta"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Jubileá"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Stretnutia"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Ostatné"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Osobné"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projekty"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Otázky"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Práca"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "nepomenovaný"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Nový kalendár"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Neopakovať"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Denne"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Týždenne"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Každý deň v týždni"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Každý druhý týždeň"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "MesaÄne"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "RoÄne"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "nikdy"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "podľa výskytu"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "podľa dátumu"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "podľa dňa v mesiaci"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "podľa dňa v týždni"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Pondelok"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Utorok"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Streda"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Å tvrtok"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Piatok"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Sobota"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Nedeľa"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "týždenné udalosti v mesiaci"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "prvý"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "druhý"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "tretí"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "štvrtý"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "piaty"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "posledný"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Január"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Február"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Marec"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Apríl"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Máj"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Jún"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Júl"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "August"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "September"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Október"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "November"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "December"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "podľa dátumu udalosti"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "po dňoch"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "podľa Äísel týždňov"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "podľa dňa a mesiaca"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Dátum"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Kal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Celý deň"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Nový kalendár"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Nevyplnené položky"
@@ -358,40 +460,32 @@ msgstr "UdalosÅ¥ konÄí eÅ¡te pred tým než zaÄne"
msgid "There was a database fail"
msgstr "Nastala chyba databázy"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Týždeň"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Mesiac"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Zoznam"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Dnes"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Kalendáre"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Nastala chyba poÄas parsovania súboru."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Zvoľte aktívne kalendáre"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Vaše kalendáre"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDav odkaz"
@@ -403,19 +497,19 @@ msgstr "Zdielané kalendáre"
msgid "No shared calendars"
msgstr "Žiadne zdielané kalendáre"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Zdielať kalendár"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Stiahnuť"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Upraviť"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Odstrániť"
@@ -501,23 +595,23 @@ msgstr "Kategórie oddelené Äiarkami"
msgid "Edit categories"
msgstr "Úprava kategórií"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Celodenná udalosť"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Od"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Do"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "PokroÄilé možnosti"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Poloha"
@@ -525,7 +619,7 @@ msgstr "Poloha"
msgid "Location of the Event"
msgstr "Poloha udalosti"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Popis"
@@ -533,84 +627,86 @@ msgstr "Popis"
msgid "Description of the Event"
msgstr "Popis udalosti"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Opakovať"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "PokroÄilé"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Do Äasu"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Vybrať dni"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "a denné udalosti v roku."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "a denné udalosti v mesiaci."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Vybrať mesiace"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Vybrať týždne"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "a týždenné udalosti v roku."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Interval"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Koniec"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "výskyty"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "vytvoriť nový kalendár"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Importovať súbor kalendára"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Prosím zvoľte kalendár"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "vytvoriť nový kalendár"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Meno nového kalendára"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importovať"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Importujem kalendár"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Kalendár úspešne importovaný"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Importovať"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Zatvoriť dialóg"
@@ -626,45 +722,73 @@ msgstr "Zobraziť udalosť"
msgid "No categories selected"
msgstr "Žiadne vybraté kategórie"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Vybrať kategóriu"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "z"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "v"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Časová zóna"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Vždy kontroluj zmeny Äasového pásma"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Formát Äasu"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24h"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12h"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Prvý deň v týždni"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "SynchronizaÄná adresa kalendára CalDAV: "
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/sk_SK/contacts.po b/l10n/sk_SK/contacts.po
index 5f8e53bfa12..d66125ae02c 100644
--- a/l10n/sk_SK/contacts.po
+++ b/l10n/sk_SK/contacts.po
@@ -5,641 +5,775 @@
# Translators:
# <intense.feel@gmail.com>, 2012.
# Roman Priesol <roman@priesol.net>, 2012.
+# <zixo@zixo.sk>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Slovak (Slovakia) (http://www.transifex.net/projects/p/owncloud/language/sk_SK/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
"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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Chyba (de)aktivácie adresára."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Vyskytla sa chyba pri pridávaní kontaktu."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Nemôžem pridať prázdny údaj."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Musí byť uvedený aspoň jeden adresný údaj."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "ID nie je nastavené."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "Pokúšate sa pridať rovnaký atribút:"
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Nedá sa upraviť adresár s prázdnym menom."
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Chyba pridania údaju kontaktu"
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Chyba aktualizácie adresára."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "ID nezadané"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Chyba pri nastavovaní kontrolného súÄtu."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Žiadne kategórie neboli vybraté na odstránenie."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Žiadny adresár nenájdený."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Žiadne kontakty nenájdené."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Vyskytla sa chyba pri pridávaní kontaktu."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "meno elementu nie je nastavené."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Nemôžem pridať prázdny údaj."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Musí byť uvedený aspoň jeden adresný údaj."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "Pokúšate sa pridať rovnaký atribút:"
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informácie o vCard sú neplatné. Prosím obnovte stránku."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "Chýba ID"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "Chyba pri vyňatí ID z VCard:"
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Nedá sa pridať adresár s prázdnym menom."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "kontrolný súÄet nie je nastavený."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Chyba poÄas pridávania adresára."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "Informácia o vCard je nesprávna. Obnovte stránku, prosím."
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Chyba aktivovania adresára."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "NieÄo sa pokazilo."
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "Nebolo nastavené ID kontaktu."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Chyba pri Äítaní fotky kontaktu."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Chyba pri ukladaní doÄasného súboru."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "NaÄítaná fotka je vadná."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "ID nie je nastavené."
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Informácie o vCard sú neplatné. Prosím obnovte stránku."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Chyba odstránenia údaju kontaktu."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "Chýba ID kontaktu."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "Chýba ID kontaktu."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "Žiadna fotka nebola poslaná."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Súbor neexistuje:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Chyba pri nahrávaní obrázka."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Chyba poÄas prevzatia objektu kontakt."
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Chyba poÄas získavania fotky."
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Chyba poÄas ukladania kontaktu."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Chyba poÄas zmeny obrázku."
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Chyba poÄas orezania obrázku."
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Chyba poÄas vytvárania doÄasného obrázku."
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "meno elementu nie je nastavené."
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "kontrolný súÄet nie je nastavený."
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "Informácia o vCard je nesprávna. Obnovte stránku, prosím."
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "NieÄo sa pokazilo."
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Chyba aktualizovania údaju kontaktu."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "Nedá sa upraviť adresár s prázdnym menom."
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Chyba aktualizácie adresára."
+msgstr "Chyba vyhľadania obrázku: "
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "Chyba pri ukladaní kontaktov na úložisko."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Nevyskytla sa žiadna chyba, súbor úspešne uložené."
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Ukladaný súbor prekraÄuje nastavenie upload_max_filesize v php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Ukladaný súbor prekraÄuje nastavenie MAX_FILE_SIZE z volieb HTML formulára."
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "Ukladaný súbor sa nahral len ÄiastoÄne"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Žiadny súbor nebol uložený"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "Chýba doÄasný prieÄinok"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Nemôžem uložiÅ¥ doÄasný obrázok: "
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Nemôžem naÄítaÅ¥ doÄasný obrázok: "
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Žiaden súbor nebol odoslaný. Neznáma chyba"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Kontakty"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Bohužiaľ, táto funkcia ešte nebola implementovaná"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "Neimplementované"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Nemôžem získať platnú adresu."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Chyba"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Tento parameter nemôže byť prázdny."
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "Nemôžem previesť prvky."
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "'deleteProperty' zavolané bez argument. Prosím oznámte chybu na bugs.owncloud.org"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Upraviť meno"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Žiadne súbory neboli vybrané k nahratiu"
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "Súbor, ktorý sa pokúšate nahrať, presahuje maximálnu povolenú veľkosť."
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
-
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "Pretiahnite VCF súbor pre import kontaktov."
+msgstr "Vybrať typ"
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1494
+#: js/loader.js:49
+msgid "Result: "
+msgstr "Výsledok: "
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr " importovaných, "
+
+#: js/loader.js:49
+msgid " failed."
+msgstr " zlyhaných."
+
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Toto nie je váš adresár."
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Kontakt nebol nájdený."
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Adresár sa nenašiel."
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Toto nie je váš adresár."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Kontakt nebol nájdený."
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Adresa"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefón"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "E-mail"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organizácia"
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Práca"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Domov"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr "Iné"
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mobil"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "SMS"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Odkazová schránka"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Správa"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fax"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Video"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Pager"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Narodeniny"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr "Biznis"
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr "Klienti"
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr "Prázdniny"
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr "Stretnutie"
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr "Projekty"
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr "Otázky"
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "Narodeniny {name}"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Kontakt"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Pridať Kontakt."
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Importovať"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Adresáre"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Nastaviť adresáre"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Zatvoriť"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Nový adresár"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr "Klávesové skratky"
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Importovať z VCF"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr "Navigácia"
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDav odkaz"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr "Ďalší kontakt v zozname"
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Stiahnuť"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr "Predchádzajúci kontakt v zozname"
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Upraviť"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Odstrániť"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Stiahnuť kontakt"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Odstrániť kontakt"
+#: templates/index.php:54
+msgid "Actions"
+msgstr "Akcie"
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr "Obnov zoznam kontaktov"
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr "Pridaj nový kontakt"
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr "Pridaj nový adresár"
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr "Vymaž súÄasný kontakt"
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Pretiahnite sem fotku pre nahratie"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "OdstrániÅ¥ súÄasnú fotku"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "UpraviÅ¥ súÄasnú fotku"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Nahrať novú fotku"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Vybrať fotku z ownCloud"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr "Formát vlastný, krátke meno, celé meno, obrátené alebo obrátené s Äiarkami"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Upraviť podrobnosti mena"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organizácia"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Odstrániť"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Prezývka"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Zadajte prezývku"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Narodeniny"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "dd. mm. yyyy"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Skupiny"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Oddelte skupiny Äiarkami"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Úprava skupín"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Uprednostňované"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Prosím zadajte platnú e-mailovú adresu."
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Zadajte e-mailové adresy"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "Odoslať na adresu"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Odstrániť e-mailové adresy"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Zadajte telefónne Äíslo"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "OdstrániÅ¥ telefónne Äíslo"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Zobraziť na mape"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Upraviť podrobnosti adresy"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Tu môžete pridať poznámky."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Pridať pole"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Profilová fotka"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefón"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Poznámka"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "E-mail"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "OdstrániÅ¥ súÄasnú fotku"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "UpraviÅ¥ súÄasnú fotku"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Adresa"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Nahrať novú fotku"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Poznámka"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Vybrať fotku z ownCloud"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Stiahnuť kontakt"
-#: templates/part.cropphoto.php:64
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Odstrániť kontakt"
+
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "DoÄasný obrázok bol odstránený z cache."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Upraviť adresu"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Typ"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "PO Box"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr "Ulica"
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr "Ulica a Äíslo"
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Rozšírené"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Ulica"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Mesto"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Región"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "PSČ"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr "PSČ"
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "Krajina"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Upraviť kategórie"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Pridať"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Adresár"
@@ -698,11 +832,11 @@ msgstr "MUDr."
#: templates/part.edit_name_dialog.php:47
msgid "D.O."
-msgstr ""
+msgstr "D.O."
#: templates/part.edit_name_dialog.php:48
msgid "D.C."
-msgstr ""
+msgstr "D.C."
#: templates/part.edit_name_dialog.php:49
msgid "Ph.D."
@@ -720,35 +854,6 @@ msgstr "ml."
msgid "Sn."
msgstr "st."
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Nový Adresár"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Upraviť Adresár"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Zobrazené meno"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Aktívny"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Uložiť"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Odoslať"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Zrušiť"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "Importovať súbor kontaktu"
@@ -765,57 +870,86 @@ msgstr "vytvoriť nový adresár"
msgid "Name of new addressbook"
msgstr "Meno nového adresára"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importovať"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "Importovanie kontaktov"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "Vyberte adresár, do ktorého chcete importovať:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "Vyberte z pevného disku"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "Nemáte žiadne kontakty v adresári."
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Pridať kontakt"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Nastaviť adresáre"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr ""
-#: templates/settings.php:4
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr "Zadaj meno"
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr ""
+
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "Adresy pre synchronizáciu s CardDAV"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "viac informácií"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "Predvolená adresa (Kontakt etc)"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Stiahnuť"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Upraviť"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Nový adresár"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Uložiť"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Zrušiť"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/sk_SK/core.po b/l10n/sk_SK/core.po
index bff7d669a11..42eb5199757 100644
--- a/l10n/sk_SK/core.po
+++ b/l10n/sk_SK/core.po
@@ -9,10 +9,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Slovak (Slovakia) (http://www.transifex.net/projects/p/owncloud/language/sk_SK/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
"Content-Transfer-Encoding: 8bit\n"
@@ -33,85 +33,85 @@ msgstr "Táto kategória už existuje:"
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Nastavenia"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Január"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Február"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Marec"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "Apríl"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Máj"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Jún"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Júl"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "August"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "September"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Október"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "November"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "December"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Zrušiť"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Nie"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Ãno"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Ok"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Neboli vybrané žiadne kategórie pre odstránenie."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Chyba"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Obnova Owncloud hesla"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "Obnovenie hesla pre ownCloud"
@@ -241,14 +241,10 @@ msgstr "DokonÄiÅ¥ inÅ¡taláciu"
msgid "web services under your control"
msgstr "webové služby pod vašou kontrolou"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Odhlásiť"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Nastavenia"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Zabudli ste heslo?"
diff --git a/l10n/sk_SK/files.po b/l10n/sk_SK/files.po
index 4b6d83e8caa..cadb54078e2 100644
--- a/l10n/sk_SK/files.po
+++ b/l10n/sk_SK/files.po
@@ -9,43 +9,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Slovak (Slovakia) (http://www.transifex.net/projects/p/owncloud/language/sk_SK/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
"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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Nenastala žiadna chyba, súbor bol úspešne nahraný"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Nahraný súbor presiahol direktívu upload_max_filesize v php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Nahrávaný súbor bol iba ÄiastoÄne nahraný"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Žiaden súbor nebol nahraný"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Chýbajúci doÄasný prieÄinok"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Zápis na disk sa nepodaril"
@@ -53,57 +53,85 @@ msgstr "Zápis na disk sa nepodaril"
msgid "Files"
msgstr "Súbory"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Odstrániť"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
-msgid "generating ZIP-file, it may take some time."
+#: js/filelist.js:141
+msgid "replace"
msgstr ""
-#: js/files.js:199
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/filelist.js:141
+msgid "cancel"
msgstr ""
-#: js/files.js:199
-msgid "Upload Error"
+#: js/filelist.js:195
+msgid "replaced"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
-msgid "Pending"
+#: js/filelist.js:195
+msgid "with"
msgstr ""
-#: js/files.js:332
-msgid "Upload cancelled."
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
msgstr ""
-#: js/files.js:456
-msgid "Invalid name, '/' is not allowed."
+#: js/filelist.js:246
+msgid "deleted"
msgstr ""
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:171
+msgid "generating ZIP-file, it may take some time."
+msgstr "generujem ZIP-súbor, môže to chvíľu trvať."
+
+#: js/files.js:200
+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:200
+msgid "Upload Error"
+msgstr "Chyba nahrávania"
+
+#: js/files.js:228 js/files.js:319 js/files.js:348
+msgid "Pending"
+msgstr "Čaká sa"
+
+#: js/files.js:333
+msgid "Upload cancelled."
+msgstr "Nahrávanie zrušené"
+
+#: js/files.js:457
+msgid "Invalid name, '/' is not allowed."
+msgstr "Chybný názov, \"/\" nie je povolené"
+
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Veľkosť"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Upravené"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "prieÄinok"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "prieÄinky"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "súbor"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "súbory"
#: templates/admin.php:5
msgid "File handling"
@@ -173,10 +201,6 @@ msgstr "Zdielať"
msgid "Download"
msgstr "Stiahnuť"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Odstrániť"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Nahrávanie príliš veľké"
diff --git a/l10n/sk_SK/files_encryption.po b/l10n/sk_SK/files_encryption.po
new file mode 100644
index 00000000000..c7ae40ae63c
--- /dev/null
+++ b/l10n/sk_SK/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/sk_SK/files_external.po b/l10n/sk_SK/files_external.po
new file mode 100644
index 00000000000..99cbb6e3c46
--- /dev/null
+++ b/l10n/sk_SK/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/sk_SK/files_sharing.po b/l10n/sk_SK/files_sharing.po
new file mode 100644
index 00000000000..3a4f00533b8
--- /dev/null
+++ b/l10n/sk_SK/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk_SK\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/sk_SK/files_versions.po b/l10n/sk_SK/files_versions.po
new file mode 100644
index 00000000000..0b50ad267a9
--- /dev/null
+++ b/l10n/sk_SK/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/sk_SK/lib.po b/l10n/sk_SK/lib.po
new file mode 100644
index 00000000000..1e1e954af89
--- /dev/null
+++ b/l10n/sk_SK/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/sk_SK/settings.po b/l10n/sk_SK/settings.po
index bbf5f21ccea..8184b873557 100644
--- a/l10n/sk_SK/settings.po
+++ b/l10n/sk_SK/settings.po
@@ -10,77 +10,109 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Slovak (Slovakia) (http://www.transifex.net/projects/p/owncloud/language/sk_SK/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
"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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "Email uložený"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Neplatný email"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID zmenené"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Neplatná požiadavka"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Jazyk zmenený"
-#: js/apps.js:31 js/apps.js:67
-msgid "Disable"
+#: js/apps.js:18
+msgid "Error"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr "Zakázať"
+
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Povoliť"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Ukladám..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "Slovensky"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Záznam"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Viac"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Pridať vašu aplikáciu"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Vyberte aplikáciu"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Pozrite si stránku aplikácie na apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-licencované"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "od"
@@ -172,34 +204,38 @@ msgstr "Pomôcť s prekladom"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "použite túto adresu pre spojenie s vaším ownCloud v správcovi súborov"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Meno"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Heslo"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Skupiny"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Vytvoriť"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Predvolená kvóta"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Iné"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Kvóta"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Odstrániť"
diff --git a/l10n/sk_SK/tasks.po b/l10n/sk_SK/tasks.po
new file mode 100644
index 00000000000..2ea079cbf69
--- /dev/null
+++ b/l10n/sk_SK/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/sk_SK/user_ldap.po b/l10n/sk_SK/user_ldap.po
new file mode 100644
index 00000000000..1fdd9af1e54
--- /dev/null
+++ b/l10n/sk_SK/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/sk_SK/user_migrate.po b/l10n/sk_SK/user_migrate.po
new file mode 100644
index 00000000000..49ca2414b0d
--- /dev/null
+++ b/l10n/sk_SK/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/sk_SK/user_openid.po b/l10n/sk_SK/user_openid.po
new file mode 100644
index 00000000000..56440f66cc3
--- /dev/null
+++ b/l10n/sk_SK/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/sl/admin_dependencies_chk.po b/l10n/sl/admin_dependencies_chk.po
new file mode 100644
index 00000000000..f60a8e1d14f
--- /dev/null
+++ b/l10n/sl/admin_dependencies_chk.po
@@ -0,0 +1,74 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Peter Peroša <peter.perosa@gmail.com>, 2012.
+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 20:55+0000\n"
+"Last-Translator: Peter Peroša <peter.perosa@gmail.com>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr "Modul php-json je potreben za medsebojno komunikacijo veliko aplikacij."
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr "Modul php-curl je potreben za pridobivanje naslova strani pri dodajanju zaznamkov."
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr "Modul php-gd je potreben za ustvarjanje sliÄic za predogled."
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr "Modul php-ldap je potreben za povezavo z vašim ldap strežnikom."
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr "Modul php-zip je potreben za prenaÅ¡anje veÄih datotek hkrati."
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr "Modul php-mb_multibyte je potreben za pravilno upravljanje kodiranja."
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr "Modul php-ctype je potreben za preverjanje veljavnosti podatkov."
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr "Modul php-xml je potreben za izmenjavo datotek preko protokola WebDAV."
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr "Direktiva allow_url_fopen v vaÅ¡i php.ini datoteki mora biti nastavljena na 1, Äe želite omogoÄiti dostop do zbirke znanja na strežnikih OCS."
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr "Modul php-pdo je potreben za shranjevanje ownCloud podatkov v podatkovno zbirko."
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr "Stanje odvisnosti"
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr "Uporablja:"
diff --git a/l10n/sl/admin_migrate.po b/l10n/sl/admin_migrate.po
new file mode 100644
index 00000000000..5a600890b71
--- /dev/null
+++ b/l10n/sl/admin_migrate.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:
+# Peter Peroša <peter.perosa@gmail.com>, 2012.
+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 00:17+0000\n"
+"Last-Translator: Peter Peroša <peter.perosa@gmail.com>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr "Izvozi to ownCloud namestitev"
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr "Ustvarjena bo stisnjena datoteka s podatki te ownCloud namestitve.\n Prosimo, Äe izberete vrsto izvoza:"
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr "Izvozi"
diff --git a/l10n/sl/bookmarks.po b/l10n/sl/bookmarks.po
new file mode 100644
index 00000000000..7a522308d46
--- /dev/null
+++ b/l10n/sl/bookmarks.po
@@ -0,0 +1,61 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Peter Peroša <peter.perosa@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-07-29 02:03+0200\n"
+"PO-Revision-Date: 2012-07-28 02:18+0000\n"
+"Last-Translator: Peter Peroša <peter.perosa@gmail.com>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr "Zaznamki"
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr "neimenovano"
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr "Povlecite to povezavo med zaznamke v vašem brskalniku in jo, ko želite ustvariti zaznamek trenutne strani, preprosto kliknite:"
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr "Preberi kasneje"
+
+#: templates/list.php:13
+msgid "Address"
+msgstr "Naslov"
+
+#: templates/list.php:14
+msgid "Title"
+msgstr "Ime"
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr "Oznake"
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr "Shrani zaznamek"
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr "Nimate zaznamkov"
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr "Bookmarklet <br />"
diff --git a/l10n/sl/calendar.po b/l10n/sl/calendar.po
index d4f7e0cf0dd..8d2ba48009e 100644
--- a/l10n/sl/calendar.po
+++ b/l10n/sl/calendar.po
@@ -11,21 +11,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Slovenian (http://www.transifex.net/projects/p/owncloud/language/sl/)\n"
+"POT-Creation-Date: 2012-08-16 02:04+0200\n"
+"PO-Revision-Date: 2012-08-15 13:25+0000\n"
+"Last-Translator: Peter Peroša <peter.perosa@gmail.com>\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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr "Vsi koledarji niso povsem predpomnjeni"
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr "Izgleda, da je vse v predpomnilniku"
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Ni bilo najdenih koledarjev."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Ni bilo najdenih dogodkov."
@@ -33,300 +41,394 @@ msgstr "Ni bilo najdenih dogodkov."
msgid "Wrong calendar"
msgstr "NapaÄen koledar"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr "Datoteka ni vsebovala dogodkov ali pa so vsi dogodki že shranjeni v koledarju."
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr "dogodki so bili shranjeni v nov koledar"
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr "Uvoz je spodletel"
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr "dogodki so bili shranjeni v vaš koledar"
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Nov Äasovni pas:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "ÄŒasovni pas je bil spremenjen"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Neveljaven zahtevek"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Koledar"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd M/d"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd M/d"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM yyyy"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, MMM d, yyyy"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Rojstni dan"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Poslovno"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "PokliÄi"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Stranke"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Dobavitelj"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Dopust"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Ideje"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Potovanje"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Obletnica"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Sestanek"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Ostalo"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Osebno"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projekt"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Vprašanja"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Delo"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr "od"
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "neimenovan"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Nov koledar"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Se ne ponavlja"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Dnevno"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Tedensko"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Vsak dan v tednu"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Dvakrat tedensko"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "MeseÄno"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Letno"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "nikoli"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "po Å¡tevilu dogodkov"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "po datumu"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "po dnevu v mesecu"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "po dnevu v tednu"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "ponedeljek"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "torek"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "sreda"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Äetrtek"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "petek"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "sobota"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "nedelja"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "dogodki tedna v mesecu"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "prvi"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "drugi"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "tretji"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "Äetrti"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "peti"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "zadnji"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "januar"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "februar"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "marec"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "april"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "maj"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "junij"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "julij"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "avgust"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "september"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "oktober"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "november"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "december"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "po datumu dogodka"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "po Å¡tevilu let"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "po tednu v letu"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "po dnevu in mesecu"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Datum"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Kol."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr "ned."
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr "pon."
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr "tor."
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr "sre."
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr "Äet."
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr "pet."
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr "sob."
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr "jan."
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr "feb."
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr "mar."
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr "apr."
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr "maj"
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr "jun."
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr "jul."
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr "avg."
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr "sep."
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr "okt."
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr "nov."
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr "dec."
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Cel dan"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Nov koledar"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "MankajoÄa polja"
@@ -360,40 +462,32 @@ msgstr "Dogodek se konÄa preden se zaÄne"
msgid "There was a database fail"
msgstr "Napaka v podatkovni zbirki"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Teden"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Mesec"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Seznam"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Danes"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Koledarji"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Pri razÄlenjevanju datoteke je priÅ¡lo do napake."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Izberite aktivne koledarje"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr "Nastavitve"
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Vaši koledarji"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDav povezava"
@@ -405,19 +499,19 @@ msgstr "Koledarji v souporabi"
msgid "No shared calendars"
msgstr "Ni koledarjev v souporabi"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Daj koledar v souporabo"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Prenesi"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Uredi"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Izbriši"
@@ -503,23 +597,23 @@ msgstr "Kategorije loÄite z vejico"
msgid "Edit categories"
msgstr "Uredi kategorije"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Celodnevni dogodek"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Od"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Do"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Napredne možnosti"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Kraj"
@@ -527,7 +621,7 @@ msgstr "Kraj"
msgid "Location of the Event"
msgstr "Kraj dogodka"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Opis"
@@ -535,84 +629,86 @@ msgstr "Opis"
msgid "Description of the Event"
msgstr "Opis dogodka"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Ponovi"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Napredno"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Izberite dneve v tednu"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Izberite dneve"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "in dnevu dogodka v letu."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "in dnevu dogodka v mesecu."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Izberite mesece"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Izberite tedne"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "in tednu dogodka v letu."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "ÄŒasovni razmik"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Konec"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "ponovitev"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "Ustvari nov koledar"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Uvozi datoteko koledarja"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Izberi koledar"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "Ustvari nov koledar"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr "Prosimo, Äe izberete koledar"
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Ime novega koledarja"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Uvozi"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr "Izberite prosto ime!"
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Uvažam koledar"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr "Koledar s tem imenom že obstaja. Če nadaljujete, bosta koledarja združena."
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Koledar je bil uspešno uvožen"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Uvozi"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Zapri dialog"
@@ -628,45 +724,73 @@ msgstr "Poglej dogodek"
msgid "No categories selected"
msgstr "Nobena kategorija ni izbrana"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Izberi kategorijo"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "od"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "pri"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr "Splošno"
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "ÄŒasovni pas"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Vedno preveri za spremembe Äasovnega pasu"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr "Samodejno posodobi Äasovni pas"
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Zapis Äasa"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr "Oblika zapisa Äasa"
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24ur"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12ur"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Prvi dan v tednu"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr "ZaÄni teden z"
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr "Predpomnilnik"
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr "PoÄisti predpomnilnik za ponavljajoÄe dogodke"
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr "URLji"
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr "CalDAV naslov za usklajevanje koledarjev"
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr "dodatne informacije"
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr "Glavni naslov (Kontakt et al)"
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "CalDAV sinhronizacijski naslov koledarja:"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr "iCalendar povezava/e samo za branje"
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/sl/contacts.po b/l10n/sl/contacts.po
index cdcf17de4ed..c721143614d 100644
--- a/l10n/sl/contacts.po
+++ b/l10n/sl/contacts.po
@@ -10,637 +10,770 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Slovenian (http://www.transifex.net/projects/p/owncloud/language/sl/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Napaka med (de)aktivacijo imenika."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Med dodajanjem stika je prišlo do napake"
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Ne morem dodati prazne lastnosti."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Vsaj eno izmed polj je Å¡e potrebno izpolniti."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "id ni nastavljen."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "Poskušam dodati podvojeno lastnost:"
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Ne morem posodobiti imenika s praznim imenom."
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Napaka pri dodajanju informacije o stiku."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Napaka pri posodabljanju imenika."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "ID ni bil podan"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Napaka pri nastavljanju nadzorne vsote."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Nobena kategorija ni bila izbrana za izbris."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Ni bilo najdenih imenikov."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Ni bilo najdenih stikov."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Med dodajanjem stika je prišlo do napake"
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "ime elementa ni nastavljeno."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr "Ne morem razÄleniti stika:"
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Ne morem dodati prazne lastnosti."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Vsaj eno izmed polj je Å¡e potrebno izpolniti."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "Poskušam dodati podvojeno lastnost:"
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr "ManjkajoÄ IM parameter."
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr "Neznan IM:"
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Informacije o vCard niso pravilne. Prosimo, Äe ponovno naložite stran."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "ManjkajoÄ ID"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "Napaka pri razÄlenjevanju VCard za ID: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Ne morem dodati imenika s praznim imenom."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "nadzorna vsota ni nastavljena."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Napaka pri dodajanju imenika."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "Informacija o vCard je napaÄna. Prosimo, Äe ponovno naložite stran: "
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Napaka pri aktiviranju imenika."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Nekaj je šlo v franže. "
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "ID stika ni bil poslan."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Napaka pri branju slike stika."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Napaka pri shranjevanju zaÄasne datoteke."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "Slika, ki se nalaga ni veljavna."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "id ni nastavljen."
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Informacije o vCard niso pravilne. Prosimo, Äe ponovno naložite stran."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Napaka pri brisanju lastnosti stika."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "Manjka ID stika."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "Manjka id stika."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "Pot slike ni bila poslana."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Datoteka ne obstaja:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Napaka pri nalaganju slike."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Napaka pri pridobivanju kontakta predmeta."
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Napaka pri pridobivanju lastnosti fotografije."
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Napaka pri shranjevanju stika."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Napaka pri spreminjanju velikosti slike"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Napaka pri obrezovanju slike"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Napaka pri ustvarjanju zaÄasne slike"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "ime elementa ni nastavljeno."
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "nadzorna vsota ni nastavljena."
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "Informacija o vCard je napaÄna. Prosimo, Äe ponovno naložite stran: "
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "Nekaj je šlo v franže. "
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Napaka pri posodabljanju lastnosti stika."
+msgstr "Napaka pri iskanju datoteke: "
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "Ne morem posodobiti imenika s praznim imenom."
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Napaka pri posodabljanju imenika."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "Napaka pri nalaganju stikov v hrambo."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Datoteka je bila uspešno naložena."
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Naložena datoteka presega velikost, ki jo doloÄa parameter upload_max_filesize v datoteki php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
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/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "Datoteka je bila le delno naložena"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Nobena datoteka ni bila naložena"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "Manjka zaÄasna mapa"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "ZaÄasne slike ni bilo mogoÄe shraniti: "
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "ZaÄasne slike ni bilo mogoÄe naložiti: "
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Nobena datoteka ni bila naložena. Neznana napaka"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Stiki"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Žal ta funkcionalnost še ni podprta"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "Ni podprto"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Ne morem dobiti veljavnega naslova."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Napaka"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Ta lastnost ne sme biti prazna"
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "Predmetov ni bilo mogoÄe dati v zaporedje."
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "\"deleteProperty\" je bila klicana brez vrste argumenta. Prosimo, Äe oddate poroÄilo o napaki na bugs.owncloud.org"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Uredi ime"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Nobena datoteka ni bila izbrana za nalaganje."
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "Datoteka, ki jo poskuÅ¡ate naložiti, presega najveÄjo dovoljeno velikost za nalaganje na tem strežniku."
-#: js/contacts.js:1119
-msgid "Select photo"
-msgstr ""
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr "Napaka pri nalaganju slike profila."
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
-
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "Za uvoz stikov spustite VCF datoteko tukaj."
-
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
-msgstr ""
-
-#: js/contacts.js:1476
-msgid "OK"
-msgstr ""
-
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
-msgstr ""
+msgstr "Izberite vrsto"
-#: js/contacts.js:1634
-msgid "Upload too large"
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Wrong file type"
-msgstr ""
-
-#: js/contacts.js:1644
+#: js/contacts.js:1578
msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
-msgstr ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr "Nekateri stiki so oznaÄeni za izbris, vendar Å¡e niso izbrisani. Prosimo, Äe poÄakate na njihov izbris."
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr "Ali želite združiti adresarje?"
#: js/loader.js:49
msgid "Result: "
-msgstr ""
+msgstr "Rezultati: "
#: js/loader.js:49
msgid " imported, "
-msgstr ""
+msgstr " uvoženih, "
#: js/loader.js:49
msgid " failed."
-msgstr ""
+msgstr " je spodletelo."
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Imenik ni bil najden."
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
+msgstr "Ime za prikaz ne more biti prazno."
-#: lib/app.php:34
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr "Adresar ni bil najden:"
+
+#: lib/app.php:52
msgid "This is not your addressbook."
msgstr "To ni vaš imenik."
-#: lib/app.php:45
+#: lib/app.php:71
msgid "Contact could not be found."
msgstr "Stika ni bilo mogoÄe najti."
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Naslov"
+#: lib/app.php:116
+msgid "Jabber"
+msgstr "Jabber"
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefon"
+#: lib/app.php:121
+msgid "AIM"
+msgstr "AIM"
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "E-pošta"
+#: lib/app.php:126
+msgid "MSN"
+msgstr "MSN"
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organizacija"
+#: lib/app.php:131
+msgid "Twitter"
+msgstr "Twitter"
+
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr "GoogleTalk"
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr "Facebook"
+
+#: lib/app.php:146
+msgid "XMPP"
+msgstr "XMPP"
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr "ICQ"
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr "Yahoo"
+
+#: lib/app.php:161
+msgid "Skype"
+msgstr "Skype"
+
+#: lib/app.php:166
+msgid "QQ"
+msgstr "QQ"
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr "GaduGadu"
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Delo"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Doma"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr "Drugo"
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mobilni telefon"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Besedilo"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Glas"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "SporoÄilo"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Faks"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Video"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Pozivnik"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Rojstni dan"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr "Poslovno"
+
+#: lib/app.php:254
+msgid "Call"
+msgstr "Klic"
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr "Stranka"
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr "Dostavljalec"
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr "Prazniki"
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr "Ideje"
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr "Potovanje"
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr "Jubilej"
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr "Sestanek"
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr "Osebno"
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr "Projekti"
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr "Vprašanja"
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "{name} - rojstni dan"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Stik"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Dodaj stik"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Uvozi"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr "Nastavitve"
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Imeniki"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Nastavi imenike"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Zapri"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Nov imenik"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr "Bližnjice na tipkovnici"
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Uvozi iz VCF"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr "Krmarjenje"
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDav povezava"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr "Naslednji stik na seznamu"
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Prenesi"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr "Predhodni stik na seznamu"
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Uredi"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr "RazÅ¡iri/skrÄi trenutni adresar"
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Izbriši"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr "Naslednji adresar"
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Prenesi stik"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr "Predhodni adresar"
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Izbriši stik"
+#: templates/index.php:54
+msgid "Actions"
+msgstr "Dejanja"
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr "Osveži seznam stikov"
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr "Dodaj nov stik"
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr "Dodaj nov adresar"
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr "Izbriši trenutni stik"
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Spustite sliko tukaj, da bi jo naložili"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Izbriši trenutno sliko"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Uredi trenutno sliko"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Naloži novo sliko"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Izberi sliko iz ownCloud"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr "Format po meri, Kratko ime, Polno ime, Obratno ali Obratno z vejico"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Uredite podrobnosti imena"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organizacija"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Izbriši"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Vzdevek"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Vnesite vzdevek"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Rojstni dan"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr "Spletna stran"
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr "http://www.nekastran.si"
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr "Pojdi na spletno stran"
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "dd. mm. yyyy"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Skupine"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Skupine loÄite z vejicami"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Uredi skupine"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Prednosten"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Prosimo, Äe navedete veljaven e-poÅ¡tni naslov."
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Vnesite e-poštni naslov"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "E-pošta naslovnika"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Izbriši e-poštni naslov"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Vpiši telefonsko številko"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Izbriši telefonsko številko"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr "TakojÅ¡ni sporoÄilnik"
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr "Izbriši IM"
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Prikaz na zemljevidu"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Uredi podrobnosti"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Opombe dodajte tukaj."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Dodaj polje"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Slika profila"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefon"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Opomba"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "E-pošta"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Izbriši trenutno sliko"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr "Neposredno sporoÄanje"
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Uredi trenutno sliko"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Naslov"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Naloži novo sliko"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Opomba"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Izberi sliko iz ownCloud"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Prenesi stik"
-#: templates/part.cropphoto.php:64
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Izbriši stik"
+
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "ZaÄasna slika je bila odstranjena iz predpomnilnika."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Uredi naslov"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Vrsta"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Poštni predal"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr "UliÄni naslov"
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr "Ulica in Å¡telika"
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Razširjeno"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Ulica"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr "Å tevilka stanovanja itd."
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Mesto"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Regija"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr "Npr. dežela ali pokrajina"
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Poštna št."
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr "Poštna številka"
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "Dežela"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Uredi kategorije"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Dodaj"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Imenik"
@@ -721,35 +854,6 @@ msgstr "mlajši"
msgid "Sn."
msgstr "starejši"
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Nov imenik"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Uredi imenik"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Ime za prikaz"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Aktiven"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Shrani"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Potrdi"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "PrekliÄi"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "Uvozi datoteko s stiki"
@@ -766,57 +870,86 @@ msgstr "Ustvari nov imenik"
msgid "Name of new addressbook"
msgstr "Ime novega imenika"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Uvozi"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "Uvažam stike"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "Izberite imenik v katerega boste uvažali:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "Izberi iz HD"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "V vašem imeniku ni stikov."
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Dodaj stik"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Nastavi imenike"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr "Izberite adresarje"
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr "Vnesite ime"
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr "Vnesite opis"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "CardDAV naslovi za sinhronizacijo"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "veÄ informacij"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "Primarni naslov (za kontakt et al)"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr "Pokaži CardDav povezavo"
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr "Pokaži VCF povezavo samo za branje"
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr "Souporaba"
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Prenesi"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Uredi"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Nov imenik"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr "Ime"
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr "Opis"
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Shrani"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "PrekliÄi"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr "VeÄ..."
diff --git a/l10n/sl/core.po b/l10n/sl/core.po
index 18d08e1a93a..c3f2d15c367 100644
--- a/l10n/sl/core.po
+++ b/l10n/sl/core.po
@@ -10,10 +10,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Slovenian (http://www.transifex.net/projects/p/owncloud/language/sl/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -34,85 +34,85 @@ msgstr "Ta kategorija že obstaja:"
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Nastavitve"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "januar"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "februar"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "marec"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "april"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "maj"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "junij"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "julij"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "avgust"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "september"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "oktober"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "november"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "december"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "PrekliÄi"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Ne"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Da"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "V redu"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Za izbris ni bila izbrana nobena kategorija."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Napaka"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Ponastavi ownCloud geslo"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "Ponastavitev gesla ownCloud"
@@ -242,14 +242,10 @@ msgstr "DokonÄaj namestitev"
msgid "web services under your control"
msgstr "spletne storitve pod vašim nadzorom"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Odjava"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Nastavitve"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Ste pozabili vaše geslo?"
diff --git a/l10n/sl/files.po b/l10n/sl/files.po
index 7c9c372c04c..11c8ef18045 100644
--- a/l10n/sl/files.po
+++ b/l10n/sl/files.po
@@ -10,43 +10,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Slovenian (http://www.transifex.net/projects/p/owncloud/language/sl/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Datoteka je bila uspešno naložena."
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Naložena datoteka presega velikost, ki jo doloÄa parameter upload_max_filesize v datoteki php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Datoteka je bila le delno naložena"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Nobena datoteka ni bila naložena"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Manjka zaÄasna mapa"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Pisanje na disk je spodletelo"
@@ -54,57 +54,85 @@ msgstr "Pisanje na disk je spodletelo"
msgid "Files"
msgstr "Datoteke"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Izbriši"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "že obstaja"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "nadomesti"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "ekliÄi"
-#: js/files.js:170
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "nadomeÅ¡Äen"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "z"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "razveljavi"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "izbrisano"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "Ustvarjam ZIP datoteko. To lahko traja nekaj Äasa."
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Nalaganje ni mogoÄe, saj gre za mapo, ali pa ima datoteka velikost 0 bajtov."
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "Napaka pri nalaganju"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "Na Äakanju"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "Nalaganje je bilo preklicano."
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "Neveljavno ime. Znak '/' ni dovoljen."
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Velikost"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Spremenjeno"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "mapa"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "mape"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "datoteka"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "datoteke"
#: templates/admin.php:5
msgid "File handling"
@@ -172,11 +200,7 @@ msgstr "Souporaba"
#: templates/index.php:51
msgid "Download"
-msgstr "Prejmi"
-
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Izbriši"
+msgstr "Prenesi"
#: templates/index.php:64
msgid "Upload too large"
diff --git a/l10n/sl/files_encryption.po b/l10n/sl/files_encryption.po
new file mode 100644
index 00000000000..294eea91d13
--- /dev/null
+++ b/l10n/sl/files_encryption.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Peter Peroša <peter.perosa@gmail.com>, 2012.
+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 00:19+0000\n"
+"Last-Translator: Peter Peroša <peter.perosa@gmail.com>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr "Å ifriranje"
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr "Naslednje vrste datotek naj se ne Å¡ifrirajo"
+
+#: templates/settings.php:5
+msgid "None"
+msgstr "Brez"
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr "OmogoÄi Å¡ifriranje"
diff --git a/l10n/sl/files_external.po b/l10n/sl/files_external.po
new file mode 100644
index 00000000000..19d395b99dd
--- /dev/null
+++ b/l10n/sl/files_external.po
@@ -0,0 +1,83 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Peter Peroša <peter.perosa@gmail.com>, 2012.
+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 00:14+0000\n"
+"Last-Translator: Peter Peroša <peter.perosa@gmail.com>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr "Zunanja podatkovna shramba"
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr "Priklopna toÄka"
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr "Zaledje"
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr "Nastavitve"
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr "Možnosti"
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr "Se uporablja"
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr "Dodaj priklopno toÄko"
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr "Ni nastavljeno"
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr "Vsi uporabniki"
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr "Skupine"
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr "Uporabniki"
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr "Izbriši"
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr "SSL korenski certifikati"
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr "Uvozi korenski certifikat"
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr "OmogoÄi uporabo zunanje podatkovne shrambe za uporabnike"
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr "Dovoli uporabnikom priklop lastne zunanje podatkovne shrambe"
diff --git a/l10n/sl/files_sharing.po b/l10n/sl/files_sharing.po
new file mode 100644
index 00000000000..56ed4e9046f
--- /dev/null
+++ b/l10n/sl/files_sharing.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Peter Peroša <peter.perosa@gmail.com>, 2012.
+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-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr "Velikost"
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr "Spremenjeno"
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr "Izbriši vse"
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr "Izbris"
diff --git a/l10n/sl/files_versions.po b/l10n/sl/files_versions.po
new file mode 100644
index 00000000000..5e6bbbb4859
--- /dev/null
+++ b/l10n/sl/files_versions.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Peter Peroša <peter.perosa@gmail.com>, 2012.
+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 00:25+0000\n"
+"Last-Translator: Peter Peroša <peter.perosa@gmail.com>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr "Zastaraj vse razliÄice"
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr "OmogoÄi sledenje razliÄicam datotek"
diff --git a/l10n/sl/gallery.po b/l10n/sl/gallery.po
index 1fe6c5af7b9..f9c47144b65 100644
--- a/l10n/sl/gallery.po
+++ b/l10n/sl/gallery.po
@@ -10,71 +10,35 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Slovenian (http://www.transifex.net/projects/p/owncloud/language/sl/)\n"
+"POT-Creation-Date: 2012-07-29 02:03+0200\n"
+"PO-Revision-Date: 2012-07-28 02:03+0000\n"
+"Last-Translator: Peter Peroša <peter.perosa@gmail.com>\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"
-#: appinfo/app.php:37
+#: appinfo/app.php:39
msgid "Pictures"
msgstr "Slike"
-#: js/album_cover.js:44
+#: js/pictures.js:12
msgid "Share gallery"
-msgstr ""
+msgstr "Daj galerijo v souporabo"
-#: js/album_cover.js:64 js/album_cover.js:100 js/album_cover.js:133
+#: js/pictures.js:32
msgid "Error: "
-msgstr ""
+msgstr "Napaka: "
-#: js/album_cover.js:64 js/album_cover.js:100
+#: js/pictures.js:32
msgid "Internal error"
-msgstr ""
-
-#: js/album_cover.js:114
-msgid "Scanning root"
-msgstr ""
-
-#: js/album_cover.js:115
-msgid "Default order"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Ascending"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Descending"
-msgstr ""
-
-#: js/album_cover.js:117 templates/index.php:19
-msgid "Settings"
-msgstr "Nastavitve"
-
-#: js/album_cover.js:122
-msgid "Scanning root cannot be empty"
-msgstr ""
-
-#: js/album_cover.js:122 js/album_cover.js:133
-msgid "Error"
-msgstr ""
-
-#: templates/index.php:16
-msgid "Rescan"
-msgstr "Ponovno preiÅ¡Äi"
-
-#: templates/index.php:17
-msgid "Stop"
-msgstr "Stop"
+msgstr "Notranja napaka"
-#: templates/index.php:18
-msgid "Share"
-msgstr "Deli"
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr "predstavitev"
#: templates/view_album.php:19
msgid "Back"
diff --git a/l10n/sl/lib.po b/l10n/sl/lib.po
new file mode 100644
index 00000000000..58fda368690
--- /dev/null
+++ b/l10n/sl/lib.po
@@ -0,0 +1,113 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Peter Peroša <peter.perosa@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-22 02:04+0200\n"
+"PO-Revision-Date: 2012-08-21 13:10+0000\n"
+"Last-Translator: Peter Peroša <peter.perosa@gmail.com>\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"
+
+#: app.php:288
+msgid "Help"
+msgstr "PomoÄ"
+
+#: app.php:295
+msgid "Personal"
+msgstr "Osebno"
+
+#: app.php:300
+msgid "Settings"
+msgstr "Nastavitve"
+
+#: app.php:305
+msgid "Users"
+msgstr "Uporabniki"
+
+#: app.php:312
+msgid "Apps"
+msgstr "Aplikacije"
+
+#: app.php:314
+msgid "Admin"
+msgstr "Skrbnik"
+
+#: files.php:276
+msgid "ZIP download is turned off."
+msgstr "ZIP prenos je onemogoÄen."
+
+#: files.php:277
+msgid "Files need to be downloaded one by one."
+msgstr "Datoteke morajo biti prenešene posamezno."
+
+#: files.php:277 files.php:302
+msgid "Back to Files"
+msgstr "Nazaj na datoteke"
+
+#: files.php:301
+msgid "Selected files too large to generate zip file."
+msgstr "Izbrane datoteke so prevelike, da bi lahko ustvarili zip datoteko."
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr "Aplikacija ni omogoÄena"
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr "Napaka overitve"
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr "Žeton je potekel. Prosimo, Äe spletno stran znova naložite."
+
+#: template.php:86
+msgid "seconds ago"
+msgstr "sekund nazaj"
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr "pred minuto"
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr "pred %d minutami"
+
+#: template.php:91
+msgid "today"
+msgstr "danes"
+
+#: template.php:92
+msgid "yesterday"
+msgstr "vÄeraj"
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr "pred %d dnevi"
+
+#: template.php:94
+msgid "last month"
+msgstr "prejšnji mesec"
+
+#: template.php:95
+msgid "months ago"
+msgstr "mesecev nazaj"
+
+#: template.php:96
+msgid "last year"
+msgstr "lani"
+
+#: template.php:97
+msgid "years ago"
+msgstr "let nazaj"
diff --git a/l10n/sl/settings.po b/l10n/sl/settings.po
index b5b8a14fb3c..32ff133a37f 100644
--- a/l10n/sl/settings.po
+++ b/l10n/sl/settings.po
@@ -10,77 +10,109 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Slovenian (http://www.transifex.net/projects/p/owncloud/language/sl/)\n"
+"POT-Creation-Date: 2012-08-19 02:02+0200\n"
+"PO-Revision-Date: 2012-08-18 13:08+0000\n"
+"Last-Translator: Peter Peroša <peter.perosa@gmail.com>\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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "Ne morem naložiti seznama iz App Store"
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "E-poštni naslov je bil shranjen"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Neveljaven e-poštni naslov"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID je bil spremenjen"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Neveljaven zahtevek"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Napaka overitve"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Jezik je bil spremenjen"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "Napaka"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "OnemogoÄi"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "OmogoÄi"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Shranjevanje..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "__ime_jezika__"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "Varnostno opozorilo"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "PeriodiÄno opravilo"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr "izvedi eno nalogo z vsako naloženo stranjo"
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr "cron.php je vpisan na storitev webcron"
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr "uporabi sistemski servis za periodiÄna opravila"
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Dnevnik"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "VeÄ"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Dodajte vašo aplikacijo"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Izberite aplikacijo"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "ObiÅ¡Äite spletno stran aplikacije na apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-licencirana"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "s strani"
@@ -172,34 +204,38 @@ msgstr "Pomagajte pri prevajanju"
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/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Ime"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Geslo"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Skupine"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Ustvari"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Privzeta koliÄinska omejitev"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Drugo"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr "Administrator skupine"
+
+#: templates/users.php:82
msgid "Quota"
msgstr "KoliÄinska omejitev"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Izbriši"
diff --git a/l10n/sl/tasks.po b/l10n/sl/tasks.po
new file mode 100644
index 00000000000..ac56c8067ff
--- /dev/null
+++ b/l10n/sl/tasks.po
@@ -0,0 +1,107 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Peter Peroša <peter.perosa@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-22 02:04+0200\n"
+"PO-Revision-Date: 2012-08-21 11:22+0000\n"
+"Last-Translator: Peter Peroša <peter.perosa@gmail.com>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr "Neveljaven datum/Äas"
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr "Opravila"
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr "Ni kategorije"
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr "NedoloÄen"
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr "1=najvišje"
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr "5=srednje"
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr "9=najnižje"
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr "Prazen povzetek"
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr "Neveljaven odstotek dokonÄanja"
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr "Neveljavna prednost"
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr "Dodaj opravilo"
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr "Razvrsti po roku"
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr "Razvrsti v seznam"
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr "Razvrsti po zakljuÄenosti"
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr "Razvrsti po lokacijah"
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr "Razvrsti po prednosti"
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr "Razvrsti po oznakah"
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr "Nalagam opravila..."
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr "Pomembno"
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr "VeÄ"
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr "Manj"
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr "Izbriši"
diff --git a/l10n/sl/user_ldap.po b/l10n/sl/user_ldap.po
new file mode 100644
index 00000000000..c405fb64d9e
--- /dev/null
+++ b/l10n/sl/user_ldap.po
@@ -0,0 +1,165 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Peter Peroša <peter.perosa@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-22 02:04+0200\n"
+"PO-Revision-Date: 2012-08-21 11:45+0000\n"
+"Last-Translator: Peter Peroša <peter.perosa@gmail.com>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr "Gostitelj"
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr "Protokol lahko izpustite, razen Äe zahtevate SSL. V tem primeru zaÄnite z ldaps://"
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr "Osnovni DN"
+
+#: templates/settings.php:9
+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:10
+msgid "User DN"
+msgstr "Uporabnik DN"
+
+#: templates/settings.php:10
+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 pustite polji DN in geslo prazni."
+
+#: templates/settings.php:11
+msgid "Password"
+msgstr "Geslo"
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr "Za anonimni dostop pustite polji DN in geslo prazni."
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr "Filter prijav uporabnikov"
+
+#: templates/settings.php:12
+#, 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 uporaniÅ¡ko ime pri prijavi."
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr "Uporabite ogrado %%uid, npr. \"uid=%%uid\"."
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr "Filter seznama uporabnikov"
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr "DoloÄi filter za uporabo med pridobivanjem uporabnikov."
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr "Brez katerekoli ograde, npr. \"objectClass=person\"."
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr "Filter skupin"
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr "DoloÄi filter za uporabo med pridobivanjem skupin."
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr "Brez katerekoli ograde, npr. \"objectClass=posixGroup\"."
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr "Vrata"
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr "Osnovno uporabniško drevo"
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr "Osnovno drevo skupine"
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr "Povezava Älana skupine"
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr "Uporabi TLS"
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr "Ne uporabljajte ga za SSL povezave, saj ne bo delovalo."
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr "LDAP strežnik je neobÄutljiv na velikost Ärk (Windows)"
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr "OnemogoÄi potrditev veljavnosti SSL certifikata."
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr "Če povezava deluje samo s to možnostjo, uvozite SSL potrdilo iz LDAP strežnika v vaš ownCloud strežnik."
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr "Odsvetovano, uporabite le v namene preizkušanja."
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr "Polje za uporabnikovo prikazano ime"
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr "LDAP atribut uporabljen pri ustvarjanju ownCloud uporabniških imen."
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr "Polje za prikazano ime skupine"
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr "LDAP atribut uporabljen pri ustvarjanju ownCloud imen skupin."
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr "v bajtih"
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr "v sekundah. Sprememba izprazni predpomnilnik."
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr "PomoÄ"
diff --git a/l10n/sl/user_migrate.po b/l10n/sl/user_migrate.po
new file mode 100644
index 00000000000..ec8deacf770
--- /dev/null
+++ b/l10n/sl/user_migrate.po
@@ -0,0 +1,52 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Peter Peroša <peter.perosa@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-15 02:03+0200\n"
+"PO-Revision-Date: 2012-08-14 13:17+0000\n"
+"Last-Translator: Peter Peroša <peter.perosa@gmail.com>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr "Izvozi"
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr "Med ustvarjanjem datoteke za izvoz je prišlo do napake"
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr "Prišlo je do napake"
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr "Izvozi vaÅ¡ uporabniÅ¡ki raÄun"
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr "Ustvarjena bo stisnjena datoteka z vaÅ¡im ownCloud raÄunom."
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr "Uvozi uporabniÅ¡ki raÄun"
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr "Zip datoteka ownCloud uporabnika"
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr "Uvozi"
diff --git a/l10n/sl/user_openid.po b/l10n/sl/user_openid.po
new file mode 100644
index 00000000000..38b10648491
--- /dev/null
+++ b/l10n/sl/user_openid.po
@@ -0,0 +1,55 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Peter Peroša <peter.perosa@gmail.com>, 2012.
+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 00:29+0000\n"
+"Last-Translator: Peter Peroša <peter.perosa@gmail.com>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr "To je OpenID strežniÅ¡ka konÄna toÄka. Za veÄ informacij si oglejte"
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr "Identiteta: <b>"
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr "PodroÄje: <b>"
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr "Uporabnik:"
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr "Prijava"
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr "Napaka: <b>Uporabnik ni bil izbran"
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr "s tem naslovom se lahko overite tudi na drugih straneh"
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr "Odobren ponudnik OpenID"
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr "Vaš naslov pri Wordpress, Identi.ca, &hellip;"
diff --git a/l10n/so/admin_dependencies_chk.po b/l10n/so/admin_dependencies_chk.po
new file mode 100644
index 00000000000..2d1d442a09b
--- /dev/null
+++ b/l10n/so/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: so\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/so/admin_migrate.po b/l10n/so/admin_migrate.po
new file mode 100644
index 00000000000..2f3aebc46ea
--- /dev/null
+++ b/l10n/so/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: so\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/so/bookmarks.po b/l10n/so/bookmarks.po
new file mode 100644
index 00000000000..63be2e28018
--- /dev/null
+++ b/l10n/so/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: so\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/so/calendar.po b/l10n/so/calendar.po
new file mode 100644
index 00000000000..eb308550f95
--- /dev/null
+++ b/l10n/so/calendar.po
@@ -0,0 +1,813 @@
+# 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: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: so\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
+msgid "No calendars found."
+msgstr ""
+
+#: ajax/categories/rescan.php:37
+msgid "No events found."
+msgstr ""
+
+#: ajax/event/edit.form.php:20
+msgid "Wrong calendar"
+msgstr ""
+
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
+#: ajax/settings/guesstimezone.php:25
+msgid "New Timezone:"
+msgstr ""
+
+#: ajax/settings/settimezone.php:23
+msgid "Timezone changed"
+msgstr ""
+
+#: ajax/settings/settimezone.php:25
+msgid "Invalid request"
+msgstr ""
+
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
+msgid "Calendar"
+msgstr ""
+
+#: js/calendar.js:832
+msgid "ddd"
+msgstr ""
+
+#: js/calendar.js:833
+msgid "ddd M/d"
+msgstr ""
+
+#: js/calendar.js:834
+msgid "dddd M/d"
+msgstr ""
+
+#: js/calendar.js:837
+msgid "MMMM yyyy"
+msgstr ""
+
+#: js/calendar.js:839
+msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
+msgstr ""
+
+#: js/calendar.js:841
+msgid "dddd, MMM d, yyyy"
+msgstr ""
+
+#: lib/app.php:121
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:122
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:123
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:124
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:125
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:126
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:127
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:128
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:129
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:130
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:131
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:132
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:133
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:134
+msgid "Questions"
+msgstr ""
+
+#: lib/app.php:135
+msgid "Work"
+msgstr ""
+
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
+msgid "unnamed"
+msgstr ""
+
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr ""
+
+#: lib/object.php:372
+msgid "Does not repeat"
+msgstr ""
+
+#: lib/object.php:373
+msgid "Daily"
+msgstr ""
+
+#: lib/object.php:374
+msgid "Weekly"
+msgstr ""
+
+#: lib/object.php:375
+msgid "Every Weekday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "Bi-Weekly"
+msgstr ""
+
+#: lib/object.php:377
+msgid "Monthly"
+msgstr ""
+
+#: lib/object.php:378
+msgid "Yearly"
+msgstr ""
+
+#: lib/object.php:388
+msgid "never"
+msgstr ""
+
+#: lib/object.php:389
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:390
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:400
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:401
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:412 templates/calendar.php:5
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:413 templates/calendar.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:414 templates/calendar.php:5
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:415 templates/calendar.php:5
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:416 templates/calendar.php:5
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:427
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:428
+msgid "first"
+msgstr ""
+
+#: lib/object.php:429
+msgid "second"
+msgstr ""
+
+#: lib/object.php:430
+msgid "third"
+msgstr ""
+
+#: lib/object.php:431
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:432
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:433
+msgid "last"
+msgstr ""
+
+#: lib/object.php:467 templates/calendar.php:7
+msgid "January"
+msgstr ""
+
+#: lib/object.php:468 templates/calendar.php:7
+msgid "February"
+msgstr ""
+
+#: lib/object.php:469 templates/calendar.php:7
+msgid "March"
+msgstr ""
+
+#: lib/object.php:470 templates/calendar.php:7
+msgid "April"
+msgstr ""
+
+#: lib/object.php:471 templates/calendar.php:7
+msgid "May"
+msgstr ""
+
+#: lib/object.php:472 templates/calendar.php:7
+msgid "June"
+msgstr ""
+
+#: lib/object.php:473 templates/calendar.php:7
+msgid "July"
+msgstr ""
+
+#: lib/object.php:474 templates/calendar.php:7
+msgid "August"
+msgstr ""
+
+#: lib/object.php:475 templates/calendar.php:7
+msgid "September"
+msgstr ""
+
+#: lib/object.php:476 templates/calendar.php:7
+msgid "October"
+msgstr ""
+
+#: lib/object.php:477 templates/calendar.php:7
+msgid "November"
+msgstr ""
+
+#: lib/object.php:478 templates/calendar.php:7
+msgid "December"
+msgstr ""
+
+#: lib/object.php:488
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:489
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:490
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:491
+msgid "by day and month"
+msgstr ""
+
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:43
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
+#: templates/calendar.php:11
+msgid "All day"
+msgstr ""
+
+#: templates/calendar.php:13
+msgid "Missing fields"
+msgstr ""
+
+#: templates/calendar.php:14 templates/part.eventform.php:19
+#: templates/part.showevent.php:11
+msgid "Title"
+msgstr ""
+
+#: templates/calendar.php:16
+msgid "From Date"
+msgstr ""
+
+#: templates/calendar.php:17
+msgid "From Time"
+msgstr ""
+
+#: templates/calendar.php:18
+msgid "To Date"
+msgstr ""
+
+#: templates/calendar.php:19
+msgid "To Time"
+msgstr ""
+
+#: templates/calendar.php:20
+msgid "The event ends before it starts"
+msgstr ""
+
+#: templates/calendar.php:21
+msgid "There was a database fail"
+msgstr ""
+
+#: templates/calendar.php:39
+msgid "Week"
+msgstr ""
+
+#: templates/calendar.php:40
+msgid "Month"
+msgstr ""
+
+#: templates/calendar.php:41
+msgid "List"
+msgstr ""
+
+#: templates/calendar.php:45
+msgid "Today"
+msgstr ""
+
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
+
+#: templates/part.choosecalendar.php:2
+msgid "Your calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.php:27
+#: templates/part.choosecalendar.rowfields.php:11
+msgid "CalDav Link"
+msgstr ""
+
+#: templates/part.choosecalendar.php:31
+msgid "Shared calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.php:48
+msgid "No shared calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:8
+msgid "Share Calendar"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:14
+msgid "Download"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:17
+msgid "Edit"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:20
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.shared.php:4
+msgid "shared with you by"
+msgstr ""
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr ""
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr ""
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr ""
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr ""
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr ""
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr ""
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr ""
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr ""
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr ""
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr ""
+
+#: templates/part.eventform.php:8 templates/part.showevent.php:3
+msgid "Eventinfo"
+msgstr ""
+
+#: templates/part.eventform.php:9 templates/part.showevent.php:4
+msgid "Repeating"
+msgstr ""
+
+#: templates/part.eventform.php:10 templates/part.showevent.php:5
+msgid "Alarm"
+msgstr ""
+
+#: templates/part.eventform.php:11 templates/part.showevent.php:6
+msgid "Attendees"
+msgstr ""
+
+#: templates/part.eventform.php:13
+msgid "Share"
+msgstr ""
+
+#: templates/part.eventform.php:21
+msgid "Title of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:27 templates/part.showevent.php:19
+msgid "Category"
+msgstr ""
+
+#: templates/part.eventform.php:29
+msgid "Separate categories with commas"
+msgstr ""
+
+#: templates/part.eventform.php:30
+msgid "Edit categories"
+msgstr ""
+
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
+msgid "All Day Event"
+msgstr ""
+
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
+msgid "From"
+msgstr ""
+
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
+msgid "To"
+msgstr ""
+
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
+msgid "Advanced options"
+msgstr ""
+
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
+msgid "Location"
+msgstr ""
+
+#: templates/part.eventform.php:83
+msgid "Location of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
+msgid "Description"
+msgstr ""
+
+#: templates/part.eventform.php:91
+msgid "Description of the Event"
+msgstr ""
+
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
+msgid "Repeat"
+msgstr ""
+
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
+msgid "Select weekdays"
+msgstr ""
+
+#: templates/part.eventform.php:164 templates/part.eventform.php:177
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
+
+#: templates/part.import.php:36
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
+
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
+
+#: templates/part.import.php:47
+msgid "Import"
+msgstr ""
+
+#: templates/part.import.php:56
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr ""
+
+#: templates/part.showevent.php:1
+msgid "View an event"
+msgstr ""
+
+#: templates/part.showevent.php:23
+msgid "No categories selected"
+msgstr ""
+
+#: templates/part.showevent.php:37
+msgid "of"
+msgstr ""
+
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
+msgid "at"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "Timezone"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
+
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
+
+#: templates/settings.php:57
+msgid "24h"
+msgstr ""
+
+#: templates/settings.php:58
+msgid "12h"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
+
+#: templates/share.dropdown.php:20
+msgid "Users"
+msgstr ""
+
+#: templates/share.dropdown.php:21
+msgid "select users"
+msgstr ""
+
+#: templates/share.dropdown.php:36 templates/share.dropdown.php:62
+msgid "Editable"
+msgstr ""
+
+#: templates/share.dropdown.php:48
+msgid "Groups"
+msgstr ""
+
+#: templates/share.dropdown.php:49
+msgid "select groups"
+msgstr ""
+
+#: templates/share.dropdown.php:75
+msgid "make public"
+msgstr ""
diff --git a/l10n/so/contacts.po b/l10n/so/contacts.po
new file mode 100644
index 00000000000..2e9f2b1c0dd
--- /dev/null
+++ b/l10n/so/contacts.po
@@ -0,0 +1,952 @@
+# 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: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: so\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr ""
+
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr ""
+
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr ""
+
+#: ajax/categories/categoriesfor.php:17
+msgid "No ID provided"
+msgstr ""
+
+#: ajax/categories/categoriesfor.php:34
+msgid "Error setting checksum."
+msgstr ""
+
+#: ajax/categories/delete.php:19
+msgid "No categories selected for deletion."
+msgstr ""
+
+#: ajax/categories/delete.php:26
+msgid "No address books found."
+msgstr ""
+
+#: ajax/categories/delete.php:34
+msgid "No contacts found."
+msgstr ""
+
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr ""
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr ""
+
+#: ajax/contact/details.php:31
+msgid "Missing ID"
+msgstr ""
+
+#: ajax/contact/details.php:36
+msgid "Error parsing VCard for ID: \""
+msgstr ""
+
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr ""
+
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr ""
+
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr ""
+
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
+#: ajax/uploadphoto.php:68
+msgid "No contact ID was submitted."
+msgstr ""
+
+#: ajax/currentphoto.php:36
+msgid "Error reading contact photo."
+msgstr ""
+
+#: ajax/currentphoto.php:48
+msgid "Error saving temporary file."
+msgstr ""
+
+#: ajax/currentphoto.php:51
+msgid "The loading photo is not valid."
+msgstr ""
+
+#: ajax/editname.php:31
+msgid "Contact ID is missing."
+msgstr ""
+
+#: ajax/oc_photo.php:32
+msgid "No photo path was submitted."
+msgstr ""
+
+#: ajax/oc_photo.php:39
+msgid "File doesn't exist:"
+msgstr ""
+
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
+msgid "Error loading image."
+msgstr ""
+
+#: ajax/savecrop.php:69
+msgid "Error getting contact object."
+msgstr ""
+
+#: ajax/savecrop.php:79
+msgid "Error getting PHOTO property."
+msgstr ""
+
+#: ajax/savecrop.php:98
+msgid "Error saving contact."
+msgstr ""
+
+#: ajax/savecrop.php:109
+msgid "Error resizing image"
+msgstr ""
+
+#: ajax/savecrop.php:112
+msgid "Error cropping image"
+msgstr ""
+
+#: ajax/savecrop.php:115
+msgid "Error creating temporary image"
+msgstr ""
+
+#: ajax/savecrop.php:118
+msgid "Error finding image: "
+msgstr ""
+
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
+msgid "Error uploading contacts to storage."
+msgstr ""
+
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
+msgid "Couldn't save temporary image: "
+msgstr ""
+
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
+msgid "Couldn't load temporary image: "
+msgstr ""
+
+#: ajax/uploadphoto.php:71
+msgid "No file was uploaded. Unknown error"
+msgstr ""
+
+#: appinfo/app.php:21
+msgid "Contacts"
+msgstr ""
+
+#: js/contacts.js:71
+msgid "Sorry, this functionality has not been implemented yet"
+msgstr ""
+
+#: js/contacts.js:71
+msgid "Not implemented"
+msgstr ""
+
+#: js/contacts.js:76
+msgid "Couldn't get a valid address."
+msgstr ""
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
+msgid "Error"
+msgstr ""
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Permission error"
+msgstr ""
+
+#: js/contacts.js:763
+msgid "This property has to be non-empty."
+msgstr ""
+
+#: js/contacts.js:789
+msgid "Couldn't serialize elements."
+msgstr ""
+
+#: js/contacts.js:921 js/contacts.js:939
+msgid ""
+"'deleteProperty' called without type argument. Please report at "
+"bugs.owncloud.org"
+msgstr ""
+
+#: js/contacts.js:958
+msgid "Edit name"
+msgstr ""
+
+#: js/contacts.js:1250
+msgid "No files selected for upload."
+msgstr ""
+
+#: js/contacts.js:1258
+msgid ""
+"The file you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr ""
+
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
+msgid "Select type"
+msgstr ""
+
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr ""
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr ""
+
+#: js/loader.js:49
+msgid "Result: "
+msgstr ""
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr ""
+
+#: js/loader.js:49
+msgid " failed."
+msgstr ""
+
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
+msgstr ""
+
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr ""
+
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr ""
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr ""
+
+#: lib/app.php:116
+msgid "Jabber"
+msgstr ""
+
+#: lib/app.php:121
+msgid "AIM"
+msgstr ""
+
+#: lib/app.php:126
+msgid "MSN"
+msgstr ""
+
+#: lib/app.php:131
+msgid "Twitter"
+msgstr ""
+
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr ""
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
+
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
+
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
+
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
+
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
+msgid "Work"
+msgstr ""
+
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
+msgid "Home"
+msgstr ""
+
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
+msgid "Mobile"
+msgstr ""
+
+#: lib/app.php:203
+msgid "Text"
+msgstr ""
+
+#: lib/app.php:204
+msgid "Voice"
+msgstr ""
+
+#: lib/app.php:205
+msgid "Message"
+msgstr ""
+
+#: lib/app.php:206
+msgid "Fax"
+msgstr ""
+
+#: lib/app.php:207
+msgid "Video"
+msgstr ""
+
+#: lib/app.php:208
+msgid "Pager"
+msgstr ""
+
+#: lib/app.php:215
+msgid "Internet"
+msgstr ""
+
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
+msgid "{name}'s Birthday"
+msgstr ""
+
+#: lib/search.php:15
+msgid "Contact"
+msgstr ""
+
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
+msgid "Add Contact"
+msgstr ""
+
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr ""
+
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
+
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
+
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
+
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
+
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
+
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
+
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
+
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
+
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
+msgid "Drop photo to upload"
+msgstr ""
+
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
+msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
+msgstr ""
+
+#: templates/part.contact.php:36
+msgid "Edit name details"
+msgstr ""
+
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr ""
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr ""
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
+msgid "Nickname"
+msgstr ""
+
+#: templates/part.contact.php:42
+msgid "Enter nickname"
+msgstr ""
+
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
+msgid "dd-mm-yyyy"
+msgstr ""
+
+#: templates/part.contact.php:47 templates/part.contact.php:135
+msgid "Groups"
+msgstr ""
+
+#: templates/part.contact.php:49
+msgid "Separate groups with commas"
+msgstr ""
+
+#: templates/part.contact.php:50
+msgid "Edit groups"
+msgstr ""
+
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.contact.php:60
+msgid "Please specify a valid email address."
+msgstr ""
+
+#: templates/part.contact.php:60
+msgid "Enter email address"
+msgstr ""
+
+#: templates/part.contact.php:64
+msgid "Mail to address"
+msgstr ""
+
+#: templates/part.contact.php:65
+msgid "Delete email address"
+msgstr ""
+
+#: templates/part.contact.php:75
+msgid "Enter phone number"
+msgstr ""
+
+#: templates/part.contact.php:79
+msgid "Delete phone number"
+msgstr ""
+
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
+msgid "View on map"
+msgstr ""
+
+#: templates/part.contact.php:110
+msgid "Edit address details"
+msgstr ""
+
+#: templates/part.contact.php:116
+msgid "Add notes here."
+msgstr ""
+
+#: templates/part.contact.php:124
+msgid "Add field"
+msgstr ""
+
+#: templates/part.contact.php:129
+msgid "Phone"
+msgstr ""
+
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr ""
+
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
+
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr ""
+
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr ""
+
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.cropphoto.php:65
+msgid "The temporary image has been removed from cache."
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:6
+msgid "Edit address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:10
+msgid "Type"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
+msgid "PO Box"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
+msgid "Extended"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
+msgid "City"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:42
+msgid "Region"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
+msgid "Zipcode"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:16
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:23
+msgid "Hon. prefixes"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:27
+msgid "Miss"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:28
+msgid "Ms"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:29
+msgid "Mr"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:30
+msgid "Sir"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:31
+msgid "Mrs"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:32
+msgid "Dr"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:35
+msgid "Given name"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:37
+msgid "Additional names"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:39
+msgid "Family name"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:41
+msgid "Hon. suffixes"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:45
+msgid "J.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:46
+msgid "M.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:47
+msgid "D.O."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:48
+msgid "D.C."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:49
+msgid "Ph.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:50
+msgid "Esq."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:51
+msgid "Jr."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:52
+msgid "Sn."
+msgstr ""
+
+#: templates/part.import.php:1
+msgid "Import a contacts file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the addressbook"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new addressbook"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new addressbook"
+msgstr ""
+
+#: templates/part.import.php:20
+msgid "Importing contacts"
+msgstr ""
+
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
+msgstr ""
+
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "CardDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr ""
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr ""
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr ""
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/so/core.po b/l10n/so/core.po
new file mode 100644
index 00000000000..81021ac3e6d
--- /dev/null
+++ b/l10n/so/core.po
@@ -0,0 +1,268 @@
+# 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: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: so\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/vcategories/add.php:23 ajax/vcategories/delete.php:23
+msgid "Application name not provided."
+msgstr ""
+
+#: ajax/vcategories/add.php:29
+msgid "No category to add?"
+msgstr ""
+
+#: ajax/vcategories/add.php:36
+msgid "This category already exists: "
+msgstr ""
+
+#: js/jquery-ui-1.8.16.custom.min.js:511
+msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+msgstr ""
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr ""
+
+#: js/js.js:573
+msgid "January"
+msgstr ""
+
+#: js/js.js:573
+msgid "February"
+msgstr ""
+
+#: js/js.js:573
+msgid "March"
+msgstr ""
+
+#: js/js.js:573
+msgid "April"
+msgstr ""
+
+#: js/js.js:573
+msgid "May"
+msgstr ""
+
+#: js/js.js:573
+msgid "June"
+msgstr ""
+
+#: js/js.js:574
+msgid "July"
+msgstr ""
+
+#: js/js.js:574
+msgid "August"
+msgstr ""
+
+#: js/js.js:574
+msgid "September"
+msgstr ""
+
+#: js/js.js:574
+msgid "October"
+msgstr ""
+
+#: js/js.js:574
+msgid "November"
+msgstr ""
+
+#: js/js.js:574
+msgid "December"
+msgstr ""
+
+#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
+msgid "Cancel"
+msgstr ""
+
+#: js/oc-dialogs.js:159
+msgid "No"
+msgstr ""
+
+#: js/oc-dialogs.js:160
+msgid "Yes"
+msgstr ""
+
+#: js/oc-dialogs.js:177
+msgid "Ok"
+msgstr ""
+
+#: js/oc-vcategories.js:68
+msgid "No categories selected for deletion."
+msgstr ""
+
+#: js/oc-vcategories.js:68
+msgid "Error"
+msgstr ""
+
+#: lostpassword/index.php:26
+msgid "ownCloud password reset"
+msgstr ""
+
+#: lostpassword/templates/email.php:1
+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 "Requested"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:25
+#: templates/login.php:9
+msgid "Username"
+msgstr ""
+
+#: lostpassword/templates/lostpassword.php:15
+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:14
+msgid "Add"
+msgstr ""
+
+#: templates/installation.php:23
+msgid "Create an <strong>admin account</strong>"
+msgstr ""
+
+#: templates/installation.php:29 templates/login.php:13
+msgid "Password"
+msgstr ""
+
+#: templates/installation.php:35
+msgid "Advanced"
+msgstr ""
+
+#: templates/installation.php:37
+msgid "Data folder"
+msgstr ""
+
+#: templates/installation.php:44
+msgid "Configure the database"
+msgstr ""
+
+#: templates/installation.php:49 templates/installation.php:60
+#: templates/installation.php:70
+msgid "will be used"
+msgstr ""
+
+#: templates/installation.php:82
+msgid "Database user"
+msgstr ""
+
+#: templates/installation.php:86
+msgid "Database password"
+msgstr ""
+
+#: templates/installation.php:90
+msgid "Database name"
+msgstr ""
+
+#: templates/installation.php:96
+msgid "Database host"
+msgstr ""
+
+#: templates/installation.php:101
+msgid "Finish setup"
+msgstr ""
+
+#: templates/layout.guest.php:42
+msgid "web services under your control"
+msgstr ""
+
+#: templates/layout.user.php:49
+msgid "Log out"
+msgstr ""
+
+#: templates/login.php:6
+msgid "Lost your password?"
+msgstr ""
+
+#: templates/login.php:17
+msgid "remember"
+msgstr ""
+
+#: templates/login.php:18
+msgid "Log in"
+msgstr ""
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr ""
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr ""
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr ""
diff --git a/l10n/so/files.po b/l10n/so/files.po
new file mode 100644
index 00000000000..576444ca8ee
--- /dev/null
+++ b/l10n/so/files.po
@@ -0,0 +1,218 @@
+# 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: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: so\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/upload.php:20
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/upload.php:21
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: ajax/upload.php:22
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/upload.php:23
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/upload.php:24
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/upload.php:25
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/upload.php:26
+msgid "Failed to write to disk"
+msgstr ""
+
+#: appinfo/app.php:6
+msgid "Files"
+msgstr ""
+
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
+msgid "generating ZIP-file, it may take some time."
+msgstr ""
+
+#: js/files.js:200
+msgid "Unable to upload your file as it is a directory or has 0 bytes"
+msgstr ""
+
+#: js/files.js:200
+msgid "Upload Error"
+msgstr ""
+
+#: js/files.js:228 js/files.js:319 js/files.js:348
+msgid "Pending"
+msgstr ""
+
+#: js/files.js:333
+msgid "Upload cancelled."
+msgstr ""
+
+#: js/files.js:457
+msgid "Invalid name, '/' is not allowed."
+msgstr ""
+
+#: js/files.js:703 templates/index.php:55
+msgid "Size"
+msgstr ""
+
+#: js/files.js:704 templates/index.php:56
+msgid "Modified"
+msgstr ""
+
+#: js/files.js:731
+msgid "folder"
+msgstr ""
+
+#: js/files.js:733
+msgid "folders"
+msgstr ""
+
+#: js/files.js:741
+msgid "file"
+msgstr ""
+
+#: js/files.js:743
+msgid "files"
+msgstr ""
+
+#: templates/admin.php:5
+msgid "File handling"
+msgstr ""
+
+#: templates/admin.php:7
+msgid "Maximum upload size"
+msgstr ""
+
+#: templates/admin.php:7
+msgid "max. possible: "
+msgstr ""
+
+#: templates/admin.php:9
+msgid "Needed for multi-file and folder downloads."
+msgstr ""
+
+#: templates/admin.php:9
+msgid "Enable ZIP-download"
+msgstr ""
+
+#: templates/admin.php:11
+msgid "0 is unlimited"
+msgstr ""
+
+#: templates/admin.php:12
+msgid "Maximum input size for ZIP files"
+msgstr ""
+
+#: templates/index.php:7
+msgid "New"
+msgstr ""
+
+#: templates/index.php:9
+msgid "Text file"
+msgstr ""
+
+#: templates/index.php:10
+msgid "Folder"
+msgstr ""
+
+#: templates/index.php:11
+msgid "From url"
+msgstr ""
+
+#: templates/index.php:21
+msgid "Upload"
+msgstr ""
+
+#: templates/index.php:27
+msgid "Cancel upload"
+msgstr ""
+
+#: templates/index.php:39
+msgid "Nothing in here. Upload something!"
+msgstr ""
+
+#: templates/index.php:47
+msgid "Name"
+msgstr ""
+
+#: templates/index.php:49
+msgid "Share"
+msgstr ""
+
+#: templates/index.php:51
+msgid "Download"
+msgstr ""
+
+#: templates/index.php:64
+msgid "Upload too large"
+msgstr ""
+
+#: templates/index.php:66
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: templates/index.php:71
+msgid "Files are being scanned, please wait."
+msgstr ""
+
+#: templates/index.php:74
+msgid "Current scanning"
+msgstr ""
diff --git a/l10n/so/files_encryption.po b/l10n/so/files_encryption.po
new file mode 100644
index 00000000000..eb887dea6cf
--- /dev/null
+++ b/l10n/so/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: so\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/so/files_external.po b/l10n/so/files_external.po
new file mode 100644
index 00000000000..668e7833888
--- /dev/null
+++ b/l10n/so/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: so\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/so/files_sharing.po b/l10n/so/files_sharing.po
new file mode 100644
index 00000000000..c05e0f049ba
--- /dev/null
+++ b/l10n/so/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: so\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/so/files_versions.po b/l10n/so/files_versions.po
new file mode 100644
index 00000000000..0c1f4e95a6e
--- /dev/null
+++ b/l10n/so/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: so\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/so/gallery.po b/l10n/so/gallery.po
new file mode 100644
index 00000000000..e520c32b948
--- /dev/null
+++ b/l10n/so/gallery.po
@@ -0,0 +1,58 @@
+# 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: 2012-07-26 08:03+0200\n"
+"PO-Revision-Date: 2012-07-25 19:30+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: so\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:39
+msgid "Pictures"
+msgstr ""
+
+#: js/pictures.js:12
+msgid "Share gallery"
+msgstr ""
+
+#: js/pictures.js:32
+msgid "Error: "
+msgstr ""
+
+#: js/pictures.js:32
+msgid "Internal error"
+msgstr ""
+
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+#: templates/view_album.php:36
+msgid "Remove confirmation"
+msgstr ""
+
+#: templates/view_album.php:37
+msgid "Do you want to remove album"
+msgstr ""
+
+#: templates/view_album.php:40
+msgid "Change album name"
+msgstr ""
+
+#: templates/view_album.php:43
+msgid "New album name"
+msgstr ""
diff --git a/l10n/so/lib.po b/l10n/so/lib.po
new file mode 100644
index 00000000000..a9d32f69499
--- /dev/null
+++ b/l10n/so/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: so\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/so/media.po b/l10n/so/media.po
new file mode 100644
index 00000000000..ed91c8d409b
--- /dev/null
+++ b/l10n/so/media.po
@@ -0,0 +1,66 @@
+# 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: 2012-07-26 08:03+0200\n"
+"PO-Revision-Date: 2011-08-13 02:19+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: so\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: appinfo/app.php:45 templates/player.php:8
+msgid "Music"
+msgstr ""
+
+#: js/music.js:18
+msgid "Add album to playlist"
+msgstr ""
+
+#: templates/music.php:3 templates/player.php:12
+msgid "Play"
+msgstr ""
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:13
+msgid "Pause"
+msgstr ""
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr ""
+
+#: templates/music.php:6 templates/player.php:14
+msgid "Next"
+msgstr ""
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr ""
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr ""
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr ""
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr ""
+
+#: templates/music.php:38
+msgid "Album"
+msgstr ""
+
+#: templates/music.php:39
+msgid "Title"
+msgstr ""
diff --git a/l10n/so/settings.po b/l10n/so/settings.po
new file mode 100644
index 00000000000..bc0ef8b76cb
--- /dev/null
+++ b/l10n/so/settings.po
@@ -0,0 +1,238 @@
+# 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: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@tmit.eu>\n"
+"Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: so\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
+#: ajax/lostpassword.php:14
+msgid "Email saved"
+msgstr ""
+
+#: ajax/lostpassword.php:16
+msgid "Invalid email"
+msgstr ""
+
+#: ajax/openid.php:16
+msgid "OpenID Changed"
+msgstr ""
+
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
+msgid "Invalid request"
+msgstr ""
+
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
+msgid "Language changed"
+msgstr ""
+
+#: js/apps.js:18
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:62
+msgid "Enable"
+msgstr ""
+
+#: js/personal.js:69
+msgid "Saving..."
+msgstr ""
+
+#: personal.php:46 personal.php:47
+msgid "__language_name__"
+msgstr ""
+
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
+msgid "Log"
+msgstr ""
+
+#: templates/admin.php:67
+msgid "More"
+msgstr ""
+
+#: templates/apps.php:10
+msgid "Add your App"
+msgstr ""
+
+#: templates/apps.php:26
+msgid "Select an App"
+msgstr ""
+
+#: templates/apps.php:29
+msgid "See application page at apps.owncloud.com"
+msgstr ""
+
+#: templates/apps.php:30
+msgid "-licensed"
+msgstr ""
+
+#: templates/apps.php:30
+msgid "by"
+msgstr ""
+
+#: templates/help.php:8
+msgid "Documentation"
+msgstr ""
+
+#: templates/help.php:9
+msgid "Managing Big Files"
+msgstr ""
+
+#: templates/help.php:10
+msgid "Ask a question"
+msgstr ""
+
+#: templates/help.php:22
+msgid "Problems connecting to help database."
+msgstr ""
+
+#: templates/help.php:23
+msgid "Go there manually."
+msgstr ""
+
+#: templates/help.php:31
+msgid "Answer"
+msgstr ""
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr ""
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr ""
+
+#: templates/personal.php:12
+msgid "Desktop and Mobile Syncing Clients"
+msgstr ""
+
+#: templates/personal.php:13
+msgid "Download"
+msgstr ""
+
+#: templates/personal.php:19
+msgid "Your password got changed"
+msgstr ""
+
+#: templates/personal.php:20
+msgid "Unable to change your password"
+msgstr ""
+
+#: templates/personal.php:21
+msgid "Current password"
+msgstr ""
+
+#: templates/personal.php:22
+msgid "New password"
+msgstr ""
+
+#: templates/personal.php:23
+msgid "show"
+msgstr ""
+
+#: templates/personal.php:24
+msgid "Change password"
+msgstr ""
+
+#: templates/personal.php:30
+msgid "Email"
+msgstr ""
+
+#: templates/personal.php:31
+msgid "Your email address"
+msgstr ""
+
+#: templates/personal.php:32
+msgid "Fill in an email address to enable password recovery"
+msgstr ""
+
+#: templates/personal.php:38 templates/personal.php:39
+msgid "Language"
+msgstr ""
+
+#: templates/personal.php:44
+msgid "Help translate"
+msgstr ""
+
+#: templates/personal.php:51
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr ""
+
+#: templates/users.php:21 templates/users.php:76
+msgid "Name"
+msgstr ""
+
+#: templates/users.php:23 templates/users.php:77
+msgid "Password"
+msgstr ""
+
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
+msgid "Groups"
+msgstr ""
+
+#: templates/users.php:32
+msgid "Create"
+msgstr ""
+
+#: templates/users.php:35
+msgid "Default Quota"
+msgstr ""
+
+#: templates/users.php:55 templates/users.php:138
+msgid "Other"
+msgstr ""
+
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
+msgid "Quota"
+msgstr ""
+
+#: templates/users.php:146
+msgid "Delete"
+msgstr ""
diff --git a/l10n/so/tasks.po b/l10n/so/tasks.po
new file mode 100644
index 00000000000..3b036ed9b2b
--- /dev/null
+++ b/l10n/so/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: so\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: ajax/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/so/user_ldap.po b/l10n/so/user_ldap.po
new file mode 100644
index 00000000000..bf35a13096a
--- /dev/null
+++ b/l10n/so/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: so\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/so/user_migrate.po b/l10n/so/user_migrate.po
new file mode 100644
index 00000000000..40d3c1c0733
--- /dev/null
+++ b/l10n/so/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: so\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/so/user_openid.po b/l10n/so/user_openid.po
new file mode 100644
index 00000000000..2001365d2d2
--- /dev/null
+++ b/l10n/so/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Somali (http://www.transifex.com/projects/p/owncloud/language/so/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: so\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/sr/admin_dependencies_chk.po b/l10n/sr/admin_dependencies_chk.po
new file mode 100644
index 00000000000..bc9e8912ee7
--- /dev/null
+++ b/l10n/sr/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/sr/admin_migrate.po b/l10n/sr/admin_migrate.po
new file mode 100644
index 00000000000..13be5b1a58b
--- /dev/null
+++ b/l10n/sr/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/sr/bookmarks.po b/l10n/sr/bookmarks.po
new file mode 100644
index 00000000000..c0abe8d98b9
--- /dev/null
+++ b/l10n/sr/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/sr/calendar.po b/l10n/sr/calendar.po
index 4245b5f8f00..4e95b27e793 100644
--- a/l10n/sr/calendar.po
+++ b/l10n/sr/calendar.po
@@ -8,21 +8,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Serbian (http://www.transifex.net/projects/p/owncloud/language/sr/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr ""
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr ""
@@ -30,300 +38,394 @@ msgstr ""
msgid "Wrong calendar"
msgstr "Погрешан календар"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr ""
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "ВременÑка зона је промењена"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "ÐеиÑправан захтев"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Календар"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
msgstr ""
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
msgstr ""
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
msgstr ""
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
msgstr ""
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr ""
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Рођендан"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "ПоÑао"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Позив"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Клијенти"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "ДоÑтављач"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Празници"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Идеје"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "путовање"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "јубилеј"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "СаÑтанак"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Друго"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Лично"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Пројекти"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Питања"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "ПоÑао"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr ""
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Ðови календар"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Ðе понавља Ñе"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "дневно"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "недељно"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Ñваког дана у недељи"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "двонедељно"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "меÑечно"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "годишње"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr ""
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr ""
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr ""
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr ""
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr ""
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr ""
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr ""
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr ""
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr ""
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr ""
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr ""
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr ""
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr ""
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr ""
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr ""
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr ""
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr ""
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr ""
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr ""
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr ""
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr ""
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr ""
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr ""
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr ""
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr ""
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr ""
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr ""
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr ""
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr ""
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr ""
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr ""
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr ""
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr ""
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr ""
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr ""
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr ""
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr ""
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Цео дан"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Ðови календар"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr ""
@@ -357,40 +459,32 @@ msgstr ""
msgid "There was a database fail"
msgstr ""
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Ðедеља"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "МеÑец"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "СпиÑак"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "ДанаÑ"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Календари"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "дошло је до грешке при раÑчлањивању фајла."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Изаберите активне календаре"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr ""
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "КалДав веза"
@@ -402,19 +496,19 @@ msgstr ""
msgid "No shared calendars"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Преузми"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Уреди"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Обриши"
@@ -500,23 +594,23 @@ msgstr ""
msgid "Edit categories"
msgstr ""
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Целодневни догађај"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Од"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "До"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr ""
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Локација"
@@ -524,7 +618,7 @@ msgstr "Локација"
msgid "Location of the Event"
msgstr "Локација догађаја"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "ОпиÑ"
@@ -532,84 +626,86 @@ msgstr "ОпиÑ"
msgid "Description of the Event"
msgstr "ÐžÐ¿Ð¸Ñ Ð´Ð¾Ð³Ð°Ñ’Ð°Ñ˜Ð°"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Понављај"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr ""
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr ""
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr ""
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr ""
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr ""
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr ""
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr ""
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr ""
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr ""
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr ""
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr ""
-#: templates/part.import.php:1
-msgid "Import a calendar file"
+#: templates/part.import.php:14
+msgid "create a new calendar"
msgstr ""
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
+#: templates/part.import.php:17
+msgid "Import a calendar file"
msgstr ""
-#: templates/part.import.php:10
-msgid "create a new calendar"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
+#: templates/part.import.php:44
+msgid "Take an available name!"
msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
+#: templates/part.import.php:47
+msgid "Import"
msgstr ""
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr ""
@@ -625,44 +721,72 @@ msgstr ""
msgid "No categories selected"
msgstr ""
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Изаберите категорију"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr ""
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr ""
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "ВременÑка зона"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
+#: templates/settings.php:52
+msgid "Time format"
msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr ""
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr ""
-#: templates/settings.php:40
-msgid "First day of the week"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
msgstr ""
#: templates/share.dropdown.php:20
diff --git a/l10n/sr/contacts.po b/l10n/sr/contacts.po
index 2ab147d01cb..9b88aad65bc 100644
--- a/l10n/sr/contacts.po
+++ b/l10n/sr/contacts.po
@@ -8,220 +8,206 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Serbian (http://www.transifex.net/projects/p/owncloud/language/sr/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr ""
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr ""
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
msgstr ""
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
msgstr ""
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
msgstr ""
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr ""
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr ""
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr ""
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr ""
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr ""
-#: ajax/contactdetails.php:37
-msgid "Missing ID"
-msgstr ""
-
-#: ajax/contactdetails.php:41
-msgid "Error parsing VCard for ID: \""
-msgstr ""
-
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
msgstr ""
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
msgstr ""
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
-#: ajax/uploadphoto.php:68
-msgid "No contact ID was submitted."
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/currentphoto.php:40
-msgid "Error reading contact photo."
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/currentphoto.php:52
-msgid "Error saving temporary file."
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
msgstr ""
-#: ajax/currentphoto.php:55
-msgid "The loading photo is not valid."
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
msgstr ""
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
msgstr ""
-#: ajax/deleteproperty.php:36
+#: ajax/contact/deleteproperty.php:37
msgid "Information about vCard is incorrect. Please reload the page."
msgstr "Подаци о вКарти Ñу неиÑправни. Поново учитајте Ñтраницу."
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
+#: ajax/contact/details.php:31
+msgid "Missing ID"
msgstr ""
-#: ajax/editname.php:37
-msgid "Contact ID is missing."
+#: ajax/contact/details.php:36
+msgid "Error parsing VCard for ID: \""
msgstr ""
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
msgstr ""
-#: ajax/oc_photo.php:41
-msgid "No photo path was submitted."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
msgstr ""
-#: ajax/oc_photo.php:48
-msgid "File doesn't exist:"
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
msgstr ""
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
-msgid "Error loading image."
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
+#: ajax/uploadphoto.php:68
+msgid "No contact ID was submitted."
msgstr ""
-#: ajax/savecrop.php:68
-msgid "Error getting contact object."
+#: ajax/currentphoto.php:36
+msgid "Error reading contact photo."
msgstr ""
-#: ajax/savecrop.php:75
-msgid "Error getting PHOTO property."
+#: ajax/currentphoto.php:48
+msgid "Error saving temporary file."
msgstr ""
-#: ajax/savecrop.php:88
-msgid "Error saving contact."
+#: ajax/currentphoto.php:51
+msgid "The loading photo is not valid."
msgstr ""
-#: ajax/savecrop.php:98
-msgid "Error resizing image"
+#: ajax/editname.php:31
+msgid "Contact ID is missing."
msgstr ""
-#: ajax/savecrop.php:101
-msgid "Error cropping image"
+#: ajax/oc_photo.php:32
+msgid "No photo path was submitted."
msgstr ""
-#: ajax/savecrop.php:104
-msgid "Error creating temporary image"
+#: ajax/oc_photo.php:39
+msgid "File doesn't exist:"
msgstr ""
-#: ajax/savecrop.php:107
-msgid "Error finding image: "
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
+msgid "Error loading image."
msgstr ""
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
+#: ajax/savecrop.php:69
+msgid "Error getting contact object."
msgstr ""
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
+#: ajax/savecrop.php:79
+msgid "Error getting PHOTO property."
msgstr ""
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
+#: ajax/savecrop.php:98
+msgid "Error saving contact."
msgstr ""
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
+#: ajax/savecrop.php:109
+msgid "Error resizing image"
msgstr ""
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
+#: ajax/savecrop.php:112
+msgid "Error cropping image"
msgstr ""
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
+#: ajax/savecrop.php:115
+msgid "Error creating temporary image"
msgstr ""
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
+#: ajax/savecrop.php:118
+msgid "Error finding image: "
msgstr ""
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr ""
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr ""
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
msgstr ""
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
msgstr ""
@@ -229,415 +215,562 @@ msgstr ""
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Контакти"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
msgstr ""
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
msgstr ""
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:425
+msgid "Permission error"
+msgstr ""
+
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
msgstr ""
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
msgstr ""
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
msgstr ""
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/loader.js:49
+msgid "Result: "
msgstr ""
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
+#: js/loader.js:49
+msgid " imported, "
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: js/loader.js:49
+msgid " failed."
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Ово није ваш адреÑар."
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Контакт Ñе не може наћи."
+
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Ово није ваш адреÑар."
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Контакт Ñе не може наћи."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "ÐдреÑа"
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Телефон"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "Е-маил"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Организација"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "ПоÑао"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Кућа"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Мобилни"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "ТекÑÑ‚"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "ГлаÑ"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr ""
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "ФакÑ"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Видео"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Пејџер"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr ""
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Рођендан"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr ""
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Контакт"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Додај контакт"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "ÐдреÑар"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
msgstr ""
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Ðови адреÑар"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
+#: templates/index.php:39
+msgid "Navigation"
msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
+#: templates/index.php:42
+msgid "Next contact in list"
msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Преузимање"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Уреди"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Обриши"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Преузми контакт"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Обриши контакт"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr ""
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr ""
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr ""
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Организација"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Обриши"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr ""
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr ""
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Рођендан"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr ""
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr ""
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr ""
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr ""
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Пожељан"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr ""
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr ""
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr ""
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr ""
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr ""
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr ""
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr ""
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr ""
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Телефон"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr ""
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "Е-маил"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr ""
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "ÐдреÑа"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
+#: templates/part.contact.php:133
+msgid "Note"
msgstr ""
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr ""
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Преузми контакт"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Обриши контакт"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
msgstr ""
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr ""
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Тип"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "ПоштанÑки број"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Прошири"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Улица"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Град"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Регија"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Зип код"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
-msgid "Country"
-msgstr "Земља"
-
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
msgstr ""
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Додај"
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr "Земља"
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
@@ -719,35 +852,6 @@ msgstr ""
msgid "Sn."
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Ðови адреÑар"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Уреди адреÑар"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Приказано име"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Ðктиван"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Сними"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Пошаљи"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Откажи"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr ""
@@ -764,57 +868,86 @@ msgstr ""
msgid "Name of new addressbook"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
-msgstr ""
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr ""
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
msgstr ""
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
msgstr ""
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
msgstr ""
-#: templates/part.no_contacts.php:2
-msgid "You have no contacts in your addressbook."
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
msgstr ""
-#: templates/part.no_contacts.php:4
-msgid "Add contact"
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
msgstr ""
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr ""
-
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr ""
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr ""
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr ""
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr ""
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Преузимање"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Уреди"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Ðови адреÑар"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Сними"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Откажи"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/sr/core.po b/l10n/sr/core.po
index a6aac06e0fe..58a7f8706ac 100644
--- a/l10n/sr/core.po
+++ b/l10n/sr/core.po
@@ -8,10 +8,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Serbian (http://www.transifex.net/projects/p/owncloud/language/sr/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -34,51 +34,55 @@ msgstr ""
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
msgstr ""
-#: js/js.js:520
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Подешавања"
+
+#: js/js.js:573
msgid "January"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
msgstr ""
@@ -107,10 +111,6 @@ msgid "Error"
msgstr ""
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "РеÑетовање лозинке за Оунклауд"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr ""
@@ -240,14 +240,10 @@ msgstr "Заврши подешавање"
msgid "web services under your control"
msgstr "веб ÑервиÑи под контролом"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Одјава"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Подешавања"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Изгубили Ñте лозинку?"
diff --git a/l10n/sr/files.po b/l10n/sr/files.po
index af2fa73a8c8..f8aaefdd550 100644
--- a/l10n/sr/files.po
+++ b/l10n/sr/files.po
@@ -8,43 +8,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Serbian (http://www.transifex.net/projects/p/owncloud/language/sr/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Ðема грешке, фајл је уÑпешно поÑлат"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "ПоÑлати фајл превазилази директиву upload_max_filesize из "
-#: ajax/upload.php:21
+#: ajax/upload.php:22
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "ПоÑлати фајл превазилази директиву MAX_FILE_SIZE која је наведена у ХТМЛ форми"
-#: ajax/upload.php:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "ПоÑлати фајл је Ñамо делимично отпремљен!"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Ðиједан фајл није поÑлат"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "ÐедоÑтаје привремена фаÑцикла"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr ""
@@ -52,55 +52,83 @@ msgstr ""
msgid "Files"
msgstr "Фајлови"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Обриши"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
msgstr ""
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
msgstr ""
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Величина"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Задња измена"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
msgstr ""
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
msgstr ""
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
msgstr ""
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
msgstr ""
@@ -172,10 +200,6 @@ msgstr ""
msgid "Download"
msgstr "Преузми"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Обриши"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Пошиљка је превелика"
diff --git a/l10n/sr/files_encryption.po b/l10n/sr/files_encryption.po
new file mode 100644
index 00000000000..b1c6edcc0c1
--- /dev/null
+++ b/l10n/sr/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/sr/files_external.po b/l10n/sr/files_external.po
new file mode 100644
index 00000000000..4dd07191910
--- /dev/null
+++ b/l10n/sr/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/sr/files_sharing.po b/l10n/sr/files_sharing.po
new file mode 100644
index 00000000000..b7dbb671d27
--- /dev/null
+++ b/l10n/sr/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/sr/files_versions.po b/l10n/sr/files_versions.po
new file mode 100644
index 00000000000..e25e3766f30
--- /dev/null
+++ b/l10n/sr/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/sr/lib.po b/l10n/sr/lib.po
new file mode 100644
index 00000000000..2ee133933bf
--- /dev/null
+++ b/l10n/sr/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/sr/settings.po b/l10n/sr/settings.po
index f6582fdc740..58e3af2ba44 100644
--- a/l10n/sr/settings.po
+++ b/l10n/sr/settings.po
@@ -8,16 +8,20 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Serbian (http://www.transifex.net/projects/p/owncloud/language/sr/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
msgstr ""
@@ -26,23 +30,31 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID је измењен"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "ÐеиÑправан захтев"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Језик је измењен"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
msgstr ""
@@ -50,35 +62,55 @@ msgstr ""
msgid "Saving..."
msgstr ""
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr ""
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr ""
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr ""
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr ""
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Изаберите програм"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-лиценциран"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "од"
@@ -170,34 +202,38 @@ msgstr " Помозите у превођењу"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "кориÑтите ову адреÑу да би Ñе повезали на ownCloud путем менаџњера фајлова"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Име"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Лозинка"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Групе"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Ðаправи"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr ""
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr ""
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr ""
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Обриши"
diff --git a/l10n/sr/tasks.po b/l10n/sr/tasks.po
new file mode 100644
index 00000000000..d20e414436b
--- /dev/null
+++ b/l10n/sr/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/sr/user_ldap.po b/l10n/sr/user_ldap.po
new file mode 100644
index 00000000000..4e3f01a3b62
--- /dev/null
+++ b/l10n/sr/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/sr/user_migrate.po b/l10n/sr/user_migrate.po
new file mode 100644
index 00000000000..9c6020b5fc4
--- /dev/null
+++ b/l10n/sr/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/sr/user_openid.po b/l10n/sr/user_openid.po
new file mode 100644
index 00000000000..a5de6c42c8d
--- /dev/null
+++ b/l10n/sr/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/sr@latin/admin_dependencies_chk.po b/l10n/sr@latin/admin_dependencies_chk.po
new file mode 100644
index 00000000000..826e736f5e3
--- /dev/null
+++ b/l10n/sr@latin/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/sr@latin/admin_migrate.po b/l10n/sr@latin/admin_migrate.po
new file mode 100644
index 00000000000..b76fec786a6
--- /dev/null
+++ b/l10n/sr@latin/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/sr@latin/bookmarks.po b/l10n/sr@latin/bookmarks.po
new file mode 100644
index 00000000000..e78fc1875cc
--- /dev/null
+++ b/l10n/sr@latin/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/sr@latin/calendar.po b/l10n/sr@latin/calendar.po
index cfea90215cb..fd13b07471f 100644
--- a/l10n/sr@latin/calendar.po
+++ b/l10n/sr@latin/calendar.po
@@ -8,21 +8,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Serbian (Latin) (http://www.transifex.net/projects/p/owncloud/language/sr@latin/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr ""
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr ""
@@ -30,300 +38,394 @@ msgstr ""
msgid "Wrong calendar"
msgstr "Pogrešan kalendar"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr ""
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Vremenska zona je promenjena"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Neispravan zahtev"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Kalendar"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
msgstr ""
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
msgstr ""
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
msgstr ""
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
msgstr ""
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr ""
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Rođendan"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Posao"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Poziv"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Klijenti"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "DostavljaÄ"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Praznici"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Ideje"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "putovanje"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "jubilej"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Sastanak"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Drugo"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "LiÄno"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projekti"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Pitanja"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Posao"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr ""
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Novi kalendar"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Ne ponavlja se"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "dnevno"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "nedeljno"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "svakog dana u nedelji"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "dvonedeljno"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "meseÄno"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "godišnje"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr ""
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr ""
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr ""
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr ""
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr ""
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr ""
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr ""
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr ""
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr ""
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr ""
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr ""
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr ""
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr ""
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr ""
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr ""
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr ""
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr ""
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr ""
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr ""
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr ""
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr ""
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr ""
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr ""
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr ""
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr ""
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr ""
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr ""
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr ""
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr ""
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr ""
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr ""
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr ""
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr ""
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr ""
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr ""
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr ""
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr ""
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Ceo dan"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Novi kalendar"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr ""
@@ -357,40 +459,32 @@ msgstr ""
msgid "There was a database fail"
msgstr ""
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Nedelja"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Mesec"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Spisak"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Danas"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Kalendari"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "doÅ¡lo je do greÅ¡ke pri rasÄlanjivanju fajla."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Izaberite aktivne kalendare"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr ""
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "KalDav veza"
@@ -402,19 +496,19 @@ msgstr ""
msgid "No shared calendars"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Preuzmi"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Uredi"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Obriši"
@@ -500,23 +594,23 @@ msgstr ""
msgid "Edit categories"
msgstr ""
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Celodnevni događaj"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Od"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Do"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr ""
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Lokacija"
@@ -524,7 +618,7 @@ msgstr "Lokacija"
msgid "Location of the Event"
msgstr "Lokacija događaja"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Opis"
@@ -532,84 +626,86 @@ msgstr "Opis"
msgid "Description of the Event"
msgstr "Opis događaja"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Ponavljaj"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr ""
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr ""
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr ""
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr ""
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr ""
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr ""
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr ""
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr ""
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr ""
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr ""
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr ""
-#: templates/part.import.php:1
-msgid "Import a calendar file"
+#: templates/part.import.php:14
+msgid "create a new calendar"
msgstr ""
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
+#: templates/part.import.php:17
+msgid "Import a calendar file"
msgstr ""
-#: templates/part.import.php:10
-msgid "create a new calendar"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
+#: templates/part.import.php:44
+msgid "Take an available name!"
msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
+#: templates/part.import.php:47
+msgid "Import"
msgstr ""
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr ""
@@ -625,44 +721,72 @@ msgstr ""
msgid "No categories selected"
msgstr ""
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Izaberite kategoriju"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr ""
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr ""
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Vremenska zona"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
+#: templates/settings.php:52
+msgid "Time format"
msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr ""
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr ""
-#: templates/settings.php:40
-msgid "First day of the week"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
msgstr ""
#: templates/share.dropdown.php:20
diff --git a/l10n/sr@latin/contacts.po b/l10n/sr@latin/contacts.po
index 612bae66873..826a00d5e68 100644
--- a/l10n/sr@latin/contacts.po
+++ b/l10n/sr@latin/contacts.po
@@ -8,220 +8,206 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Serbian (Latin) (http://www.transifex.net/projects/p/owncloud/language/sr@latin/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr ""
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr ""
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
msgstr ""
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
msgstr ""
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
msgstr ""
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr ""
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr ""
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr ""
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr ""
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr ""
-#: ajax/contactdetails.php:37
-msgid "Missing ID"
-msgstr ""
-
-#: ajax/contactdetails.php:41
-msgid "Error parsing VCard for ID: \""
-msgstr ""
-
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
msgstr ""
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
msgstr ""
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
-#: ajax/uploadphoto.php:68
-msgid "No contact ID was submitted."
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/currentphoto.php:40
-msgid "Error reading contact photo."
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/currentphoto.php:52
-msgid "Error saving temporary file."
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
msgstr ""
-#: ajax/currentphoto.php:55
-msgid "The loading photo is not valid."
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
msgstr ""
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
msgstr ""
-#: ajax/deleteproperty.php:36
+#: ajax/contact/deleteproperty.php:37
msgid "Information about vCard is incorrect. Please reload the page."
msgstr "Podaci o vKarti su neispravni. Ponovo uÄitajte stranicu."
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
+#: ajax/contact/details.php:31
+msgid "Missing ID"
msgstr ""
-#: ajax/editname.php:37
-msgid "Contact ID is missing."
+#: ajax/contact/details.php:36
+msgid "Error parsing VCard for ID: \""
msgstr ""
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
msgstr ""
-#: ajax/oc_photo.php:41
-msgid "No photo path was submitted."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
msgstr ""
-#: ajax/oc_photo.php:48
-msgid "File doesn't exist:"
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
msgstr ""
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
-msgid "Error loading image."
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
+#: ajax/uploadphoto.php:68
+msgid "No contact ID was submitted."
msgstr ""
-#: ajax/savecrop.php:68
-msgid "Error getting contact object."
+#: ajax/currentphoto.php:36
+msgid "Error reading contact photo."
msgstr ""
-#: ajax/savecrop.php:75
-msgid "Error getting PHOTO property."
+#: ajax/currentphoto.php:48
+msgid "Error saving temporary file."
msgstr ""
-#: ajax/savecrop.php:88
-msgid "Error saving contact."
+#: ajax/currentphoto.php:51
+msgid "The loading photo is not valid."
msgstr ""
-#: ajax/savecrop.php:98
-msgid "Error resizing image"
+#: ajax/editname.php:31
+msgid "Contact ID is missing."
msgstr ""
-#: ajax/savecrop.php:101
-msgid "Error cropping image"
+#: ajax/oc_photo.php:32
+msgid "No photo path was submitted."
msgstr ""
-#: ajax/savecrop.php:104
-msgid "Error creating temporary image"
+#: ajax/oc_photo.php:39
+msgid "File doesn't exist:"
msgstr ""
-#: ajax/savecrop.php:107
-msgid "Error finding image: "
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
+msgid "Error loading image."
msgstr ""
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
+#: ajax/savecrop.php:69
+msgid "Error getting contact object."
msgstr ""
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
+#: ajax/savecrop.php:79
+msgid "Error getting PHOTO property."
msgstr ""
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
+#: ajax/savecrop.php:98
+msgid "Error saving contact."
msgstr ""
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
+#: ajax/savecrop.php:109
+msgid "Error resizing image"
msgstr ""
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
+#: ajax/savecrop.php:112
+msgid "Error cropping image"
msgstr ""
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
+#: ajax/savecrop.php:115
+msgid "Error creating temporary image"
msgstr ""
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
+#: ajax/savecrop.php:118
+msgid "Error finding image: "
msgstr ""
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr ""
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr ""
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
msgstr ""
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
msgstr ""
@@ -229,415 +215,562 @@ msgstr ""
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
msgstr ""
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
msgstr ""
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:425
+msgid "Permission error"
+msgstr ""
+
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
msgstr ""
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
msgstr ""
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
msgstr ""
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/loader.js:49
+msgid "Result: "
msgstr ""
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
+#: js/loader.js:49
+msgid " imported, "
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: js/loader.js:49
+msgid " failed."
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Ovo nije vaš adresar."
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Kontakt se ne može naći."
+
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Ovo nije vaš adresar."
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Kontakt se ne može naći."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Adresa"
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefon"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "E-mail"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organizacija"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Posao"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Kuća"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mobilni"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Tekst"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Glas"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr ""
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Faks"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Video"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Pejdžer"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr ""
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Rođendan"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr ""
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr ""
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Dodaj kontakt"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr ""
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
msgstr ""
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
+#: templates/index.php:39
+msgid "Navigation"
msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
+#: templates/index.php:42
+msgid "Next contact in list"
msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
+#: templates/index.php:44
+msgid "Previous contact in list"
msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Uredi"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Obriši"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
+#: templates/index.php:50
+msgid "Previous addressbook"
msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
+#: templates/index.php:54
+msgid "Actions"
msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr ""
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr ""
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr ""
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organizacija"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Obriši"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr ""
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr ""
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Rođendan"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr ""
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr ""
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr ""
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr ""
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr ""
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr ""
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr ""
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr ""
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr ""
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr ""
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr ""
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr ""
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefon"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr ""
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "E-mail"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Adresa"
+
+#: templates/part.contact.php:133
+msgid "Note"
msgstr ""
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
+#: templates/part.contact.php:138
+msgid "Download contact"
msgstr ""
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
+#: templates/part.contact.php:139
+msgid "Delete contact"
msgstr ""
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
msgstr ""
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr ""
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr ""
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Poštanski broj"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Proširi"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Ulica"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Grad"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Regija"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Zip kod"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
-msgid "Country"
-msgstr "Zemlja"
-
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
msgstr ""
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr ""
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr "Zemlja"
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
@@ -719,102 +852,102 @@ msgstr ""
msgid "Sn."
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
+#: templates/part.import.php:1
+msgid "Import a contacts file"
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
+#: templates/part.import.php:6
+msgid "Please choose the addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
+#: templates/part.import.php:10
+msgid "create a new addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:23
-msgid "Active"
+#: templates/part.import.php:15
+msgid "Name of new addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:29
-msgid "Save"
+#: templates/part.import.php:20
+msgid "Importing contacts"
msgstr ""
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
msgstr ""
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
msgstr ""
-#: templates/part.import.php:1
-msgid "Import a contacts file"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
msgstr ""
-#: templates/part.import.php:6
-msgid "Please choose the addressbook"
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
msgstr ""
-#: templates/part.import.php:10
-msgid "create a new addressbook"
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
msgstr ""
-#: templates/part.import.php:15
-msgid "Name of new addressbook"
+#: templates/settings.php:3
+msgid "CardDAV syncing addresses"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
+#: templates/settings.php:3
+msgid "more info"
msgstr ""
-#: templates/part.import.php:20
-msgid "Importing contacts"
+#: templates/settings.php:5
+msgid "Primary address (Kontact et al)"
msgstr ""
-#: templates/part.import.php:24
-msgid "Close"
+#: templates/settings.php:7
+msgid "iOS/OS X"
msgstr ""
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
+#: templates/settings.php:20
+msgid "Show CardDav link"
msgstr ""
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
msgstr ""
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
+#: templates/settings.php:26
+msgid "Share"
msgstr ""
-#: templates/part.no_contacts.php:2
-msgid "You have no contacts in your addressbook."
+#: templates/settings.php:29
+msgid "Download"
msgstr ""
-#: templates/part.no_contacts.php:4
-msgid "Add contact"
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Uredi"
+
+#: templates/settings.php:43
+msgid "New Address Book"
msgstr ""
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
+#: templates/settings.php:44
+msgid "Name"
msgstr ""
-#: templates/settings.php:4
-msgid "CardDAV syncing addresses"
+#: templates/settings.php:45
+msgid "Description"
msgstr ""
-#: templates/settings.php:4
-msgid "more info"
+#: templates/settings.php:46
+msgid "Save"
msgstr ""
-#: templates/settings.php:6
-msgid "Primary address (Kontact et al)"
+#: templates/settings.php:47
+msgid "Cancel"
msgstr ""
-#: templates/settings.php:8
-msgid "iOS/OS X"
+#: templates/settings.php:52
+msgid "More..."
msgstr ""
diff --git a/l10n/sr@latin/core.po b/l10n/sr@latin/core.po
index c11fdd41d68..4577fbf12de 100644
--- a/l10n/sr@latin/core.po
+++ b/l10n/sr@latin/core.po
@@ -8,10 +8,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Serbian (Latin) (http://www.transifex.net/projects/p/owncloud/language/sr@latin/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -34,51 +34,55 @@ msgstr ""
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
msgstr ""
-#: js/js.js:520
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Podešavanja"
+
+#: js/js.js:573
msgid "January"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
msgstr ""
@@ -107,10 +111,6 @@ msgid "Error"
msgstr ""
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr ""
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr ""
@@ -240,14 +240,10 @@ msgstr "Završi podešavanje"
msgid "web services under your control"
msgstr ""
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Odjava"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Podešavanja"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Izgubili ste lozinku?"
diff --git a/l10n/sr@latin/files.po b/l10n/sr@latin/files.po
index 1f04e281901..b72a13bcbbc 100644
--- a/l10n/sr@latin/files.po
+++ b/l10n/sr@latin/files.po
@@ -8,43 +8,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Serbian (Latin) (http://www.transifex.net/projects/p/owncloud/language/sr@latin/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Nema greške, fajl je uspešno poslat"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Poslati fajl prevazilazi direktivu upload_max_filesize iz "
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Poslati fajl je samo delimiÄno otpremljen!"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Nijedan fajl nije poslat"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Nedostaje privremena fascikla"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr ""
@@ -52,55 +52,83 @@ msgstr ""
msgid "Files"
msgstr "Fajlovi"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Obriši"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
msgstr ""
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
msgstr ""
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "VeliÄina"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Zadnja izmena"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
msgstr ""
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
msgstr ""
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
msgstr ""
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
msgstr ""
@@ -172,10 +200,6 @@ msgstr ""
msgid "Download"
msgstr "Preuzmi"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Obriši"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Pošiljka je prevelika"
diff --git a/l10n/sr@latin/files_encryption.po b/l10n/sr@latin/files_encryption.po
new file mode 100644
index 00000000000..c6f3f5b636c
--- /dev/null
+++ b/l10n/sr@latin/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/sr@latin/files_external.po b/l10n/sr@latin/files_external.po
new file mode 100644
index 00000000000..639f9f143bf
--- /dev/null
+++ b/l10n/sr@latin/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/sr@latin/files_sharing.po b/l10n/sr@latin/files_sharing.po
new file mode 100644
index 00000000000..4f3a03c203e
--- /dev/null
+++ b/l10n/sr@latin/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/sr@latin/files_versions.po b/l10n/sr@latin/files_versions.po
new file mode 100644
index 00000000000..5fae2a88e1d
--- /dev/null
+++ b/l10n/sr@latin/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/sr@latin/lib.po b/l10n/sr@latin/lib.po
new file mode 100644
index 00000000000..7b9a1d577a7
--- /dev/null
+++ b/l10n/sr@latin/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/sr@latin/settings.po b/l10n/sr@latin/settings.po
index cd74e98410f..75b8006fa26 100644
--- a/l10n/sr@latin/settings.po
+++ b/l10n/sr@latin/settings.po
@@ -8,16 +8,20 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Serbian (Latin) (http://www.transifex.net/projects/p/owncloud/language/sr@latin/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
msgstr ""
@@ -26,23 +30,31 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID je izmenjen"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Neispravan zahtev"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Jezik je izmenjen"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
msgstr ""
@@ -50,35 +62,55 @@ msgstr ""
msgid "Saving..."
msgstr ""
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr ""
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr ""
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr ""
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr ""
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Izaberite program"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-licenciran"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "od"
@@ -170,34 +202,38 @@ msgstr ""
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "koristite ovu adresu da bi se povezali na ownCloud putem menadžnjera fajlova"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Ime"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Lozinka"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Grupe"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Napravi"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr ""
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr ""
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr ""
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Obriši"
diff --git a/l10n/sr@latin/tasks.po b/l10n/sr@latin/tasks.po
new file mode 100644
index 00000000000..c4dff86e0a6
--- /dev/null
+++ b/l10n/sr@latin/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/sr@latin/user_ldap.po b/l10n/sr@latin/user_ldap.po
new file mode 100644
index 00000000000..c37681c1218
--- /dev/null
+++ b/l10n/sr@latin/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/sr@latin/user_migrate.po b/l10n/sr@latin/user_migrate.po
new file mode 100644
index 00000000000..198d0844fdd
--- /dev/null
+++ b/l10n/sr@latin/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/sr@latin/user_openid.po b/l10n/sr@latin/user_openid.po
new file mode 100644
index 00000000000..0c9792f1bb0
--- /dev/null
+++ b/l10n/sr@latin/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/sv/admin_dependencies_chk.po b/l10n/sv/admin_dependencies_chk.po
new file mode 100644
index 00000000000..daf145daa7d
--- /dev/null
+++ b/l10n/sv/admin_dependencies_chk.po
@@ -0,0 +1,74 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Magnus Höglund <magnus@linux.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 10:16+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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr "Modulen php-json behövs av många applikationer som interagerar."
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr "Modulen php-curl behövs för att hämta sidans titel när du lägger till bokmärken."
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr "Modulen php-gd behövs för att skapa miniatyrer av dina bilder."
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr "Modulen php-ldap behövs för att ansluta mot din ldapserver."
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr "Modulen php-zip behövs för att kunna ladda ner flera filer på en gång."
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr "Modulen php-mb_multibyte behövs för att hantera korrekt teckenkodning."
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr "Modulen php-ctype behövs för att validera data."
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr "Modulen php-xml behövs för att kunna dela filer med webdav."
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr "Direktivet allow_url_fopen i php.ini bör sättas till 1 för att kunna hämta kunskapsbasen från OCS-servrar."
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr "Modulen php-pdo behövs för att kunna lagra ownCloud data i en databas."
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr "Beroenden status"
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr "Används av:"
diff --git a/l10n/sv/admin_migrate.po b/l10n/sv/admin_migrate.po
new file mode 100644
index 00000000000..68573f42214
--- /dev/null
+++ b/l10n/sv/admin_migrate.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:
+# Magnus Höglund <magnus@linux.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 09:53+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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr "Exportera denna instans av ownCloud"
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr "Detta kommer att skapa en komprimerad fil som innehåller all data från denna instans av ownCloud.\n Välj exporttyp:"
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr "Exportera"
diff --git a/l10n/sv/bookmarks.po b/l10n/sv/bookmarks.po
new file mode 100644
index 00000000000..cd3fb598dab
--- /dev/null
+++ b/l10n/sv/bookmarks.po
@@ -0,0 +1,61 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <magnus@linux.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-07-30 02:02+0200\n"
+"PO-Revision-Date: 2012-07-29 20:39+0000\n"
+"Last-Translator: maghog <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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr "Bokmärken"
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr "namnlös"
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr "Dra till din webbläsares bokmärken och klicka på det när du vill bokmärka en webbsida snabbt:"
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr "Läs senare"
+
+#: templates/list.php:13
+msgid "Address"
+msgstr "Adress"
+
+#: templates/list.php:14
+msgid "Title"
+msgstr "Titel"
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr "Taggar"
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr "Spara bokmärke"
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr "Du har inga bokmärken"
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr "Skriptbokmärke <br />"
diff --git a/l10n/sv/calendar.po b/l10n/sv/calendar.po
index f8c88e6587d..1d0bf440909 100644
--- a/l10n/sv/calendar.po
+++ b/l10n/sv/calendar.po
@@ -5,26 +5,35 @@
# Translators:
# Christer Eriksson <post@hc3web.com>, 2012.
# Daniel Sandman <revoltism@gmail.com>, 2012.
+# <magnus@linux.com>, 2012.
# <revoltism@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Swedish (http://www.transifex.net/projects/p/owncloud/language/sv/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
-#: ajax/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr "Alla kalendrar är inte fullständigt sparade i cache"
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr "Allt verkar vara fullständigt sparat i cache"
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Inga kalendrar funna"
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Inga händelser funna."
@@ -32,300 +41,394 @@ msgstr "Inga händelser funna."
msgid "Wrong calendar"
msgstr "Fel kalender"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr "Filen innehöll inga händelser eller så är alla händelser redan sparade i kalendern."
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr "händelser har sparats i den nya kalendern"
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr "Misslyckad import"
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr "händelse har sparats i din kalender"
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Ny tidszon:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Tidszon ändrad"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Ogiltig begäran"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Kalender"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd M/d"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd M/d"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM åååå"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "ddd, MMM d, åååå"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Födelsedag"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Företag"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Ringa"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Klienter"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Leverantör"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Semester"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Idéer"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Resa"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Jubileum"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Möte"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Annat"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "Personlig"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projekt"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Frågor"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Arbetet"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr "av"
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "Namn saknas"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Ny kalender"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Upprepas inte"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Dagligen"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Varje vecka"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Varje vardag"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Varannan vecka"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Varje månad"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Ã…rligen"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "aldrig"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "efter händelser"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "efter datum"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "efter dag i månaden"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "efter veckodag"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "MÃ¥ndag"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Tisdag"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Onsdag"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Torsdag"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Fredag"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Lördag"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Söndag"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "händelse vecka av månad"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "första"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "andra"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "tredje"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "fjärde"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "femte"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "sist"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Januari"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Februari"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Mars"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "April"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Maj"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Juni"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Juli"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "Augusti"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "September"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Oktober"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "November"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "December"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "efter händelsedatum"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "efter årsdag(ar)"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "efter veckonummer"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "efter dag och månad"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Datum"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Kal."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr "Sön."
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr "MÃ¥n."
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr "Tis."
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr "Ons."
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr "Tor."
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr "Fre."
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr "Lör."
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr "Jan."
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr "Feb."
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr "Mar."
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr "Apr."
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr "Maj."
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr "Jun."
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr "Jul."
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr "Aug."
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr "Sep."
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr "Okt."
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr "Nov."
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr "Dec."
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Hela dagen"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Ny kalender"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Saknade fält"
@@ -359,40 +462,32 @@ msgstr "Händelsen slutar innan den börjar"
msgid "There was a database fail"
msgstr "Det blev ett databasfel"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Vecka"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "MÃ¥nad"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Lista"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Idag"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Kalendrar"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Det blev ett fel medan filen analyserades."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Välj aktiva kalendrar"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Dina kalendrar"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDAV-länk"
@@ -404,19 +499,19 @@ msgstr "Delade kalendrar"
msgid "No shared calendars"
msgstr "Inga delade kalendrar"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Dela kalender"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Ladda ner"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Redigera"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Radera"
@@ -502,23 +597,23 @@ msgstr "Separera kategorier med komman"
msgid "Edit categories"
msgstr "Redigera kategorier"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Hela dagen"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Från"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Till"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "Avancerade alternativ"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Plats"
@@ -526,7 +621,7 @@ msgstr "Plats"
msgid "Location of the Event"
msgstr "Platsen för händelsen"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Beskrivning"
@@ -534,84 +629,86 @@ msgstr "Beskrivning"
msgid "Description of the Event"
msgstr "Beskrivning av händelse"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Upprepa"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "Avancerad"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Välj veckodagar"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Välj dagar"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "och händelsedagen för året."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "och händelsedagen för månaden."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Välj månader"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Välj veckor"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "och händelsevecka för året."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Hur ofta"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Slut"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "Händelser"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "skapa en ny kalender"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Importera en kalenderfil"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Välj kalender"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "skapa en ny kalender"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr "Välj en kalender"
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Namn på ny kalender"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importera"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr "Ta ett ledigt namn!"
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Importerar kalender"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr "En kalender med detta namn finns redan. Om du fortsätter ändå så kommer dessa kalendrar att slås samman."
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Kalender importerades utan problem"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Importera"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Stäng "
@@ -627,45 +724,73 @@ msgstr "Visa en händelse"
msgid "No categories selected"
msgstr "Inga kategorier valda"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Välj kategori"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "av"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "på"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Tidszon"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Kontrollera alltid ändringar i tidszon."
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Tidsformat"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24h"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12h"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Första dagen av veckan"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr "Cache"
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr "Töm cache för upprepade händelser"
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr "Kalender CalDAV synkroniserar adresser"
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr "mer info"
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr "Primary address (Kontact et al)"
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "Synkroniseringsadress för CalDAV kalender:"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr "Read only iCalendar link(s)"
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/sv/contacts.po b/l10n/sv/contacts.po
index 0de8591cea9..4e4a64bd2c4 100644
--- a/l10n/sv/contacts.po
+++ b/l10n/sv/contacts.po
@@ -5,674 +5,809 @@
# Translators:
# Christer Eriksson <post@hc3web.com>, 2012.
# Daniel Sandman <revoltism@gmail.com>, 2012.
+# Magnus Höglund <magnus@linux.com>, 2012.
+# <magnus@linux.com>, 2012.
# <revoltism@gmail.com>, 2011, 2012.
# <tscooter@hotmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Swedish (http://www.transifex.net/projects/p/owncloud/language/sv/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
-#: ajax/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
-msgstr "Fel när (av)aktivera adressbok"
+msgstr "Fel (av)aktivera adressbok."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "Det uppstod ett fel när kontakt skulle läggas till"
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Kan inte lägga till en tom egenskap"
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Minst ett fält måste fyllas i"
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "ID är inte satt."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr ""
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Kan inte uppdatera adressboken med ett tomt namn."
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Fel när kontaktegenskap skulle läggas till"
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Fel uppstod när adressbok skulle uppdateras."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "Inget ID angett"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Fel uppstod när kontrollsumma skulle sättas."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Inga kategorier valda för borttaging"
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Ingen adressbok funnen."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Inga kontakter funna."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "Det uppstod ett fel när kontakten skulle läggas till."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "elementnamn ej angett."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr "Kunde inte läsa kontakt:"
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Kan inte lägga till en tom egenskap."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Minst ett fält måste fyllas i."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "Försöker lägga till dubblett:"
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr "IM parameter saknas."
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr "Okänt IM:"
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "Information om vCard är felaktigt. Vänligen ladda om sidan."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "ID saknas"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
-msgstr ""
+msgstr "Fel vid läsning av VCard för ID: \""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Kan inte lägga till adressbok med ett tomt namn."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "kontrollsumma är inte satt."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Fel när adressbok skulle läggas till"
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "Informationen om vCard är fel. Ladda om sidan:"
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Fel uppstod när adressbok skulle aktiveras"
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "NÃ¥got gick fel."
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "Inget kontakt-ID angavs."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
-msgstr "Fel uppstod när "
+msgstr "Fel uppstod vid läsning av kontaktfoto."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Fel uppstod när temporär fil skulle sparas."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "Det laddade fotot är inte giltigt."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "ID är inte satt."
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "Information om vCard är felaktigt. Vänligen ladda om sidan."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Fel uppstod när kontaktegenskap skulle tas bort"
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "Kontakt-ID saknas."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "Saknar kontakt-ID."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "Ingen sökväg till foto angavs."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Filen existerar inte."
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "Fel uppstod när bild laddades."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Fel vid hämtning av kontakt."
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Fel vid hämtning av egenskaper för FOTO."
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Fel vid sparande av kontakt."
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Fel vid storleksförändring av bilden"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Fel vid beskärning av bilden"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Fel vid skapande av tillfällig bild"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "kontrollsumma är inte satt."
+msgstr "Kunde inte hitta bild:"
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "Informationen om vCard är fel. Ladda om sidan:"
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr ""
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Fel uppstod när kontaktegenskap skulle uppdateras"
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "Kan inte uppdatera adressboken med ett tomt namn."
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Fel uppstod när adressbok skulle uppdateras"
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "Fel uppstod när kontakt skulle lagras."
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Inga fel uppstod. Filen laddades upp utan problem."
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Den uppladdade filen överskrider upload_max_filesize direktivet i php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Den uppladdade filen överskrider MAX_FILE_SIZE direktivet som har angetts i HTML formuläret"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "Den uppladdade filen var bara delvist uppladdad"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Ingen fil laddades upp"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "En temporär mapp saknas"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Kunde inte spara tillfällig bild:"
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Kunde inte ladda tillfällig bild:"
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Ingen fil uppladdad. Okänt fel"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "Kontakter"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Tyvärr är denna funktion inte införd än"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "Inte införd"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Kunde inte hitta en giltig adress."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Fel"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Denna egenskap får inte vara tom."
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "Kunde inte serialisera element."
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "\"deleteProperty\" anropades utan typargument. Vänligen rapportera till bugs.owncloud.org"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "Ändra namn"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Inga filer valda för uppladdning"
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "Filen du försöker ladda upp är större än den maximala storleken för filuppladdning på denna server."
-#: js/contacts.js:1119
-msgid "Select photo"
-msgstr ""
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr "Fel vid hämtning av profilbild."
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
-
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "Släpp en VCF-fil för att importera kontakter."
-
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
-msgstr ""
-
-#: js/contacts.js:1476
-msgid "OK"
-msgstr ""
-
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
-msgstr ""
-
-#: js/contacts.js:1634
-msgid "Upload too large"
-msgstr ""
+msgstr "Välj typ"
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
-
-#: js/contacts.js:1638
-msgid "Wrong file type"
-msgstr ""
-
-#: js/contacts.js:1644
+#: js/contacts.js:1578
msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
-msgstr ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr "Vissa kontakter är markerade för radering, men är inte raderade än. Vänta tills dom är raderade."
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr "Vill du slå samman dessa adressböcker?"
#: js/loader.js:49
msgid "Result: "
-msgstr ""
+msgstr "Resultat:"
#: js/loader.js:49
msgid " imported, "
-msgstr ""
+msgstr "importerad,"
#: js/loader.js:49
msgid " failed."
-msgstr ""
+msgstr "misslyckades."
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Hittade inte adressboken"
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
+msgstr "Visningsnamn får inte vara tomt."
-#: lib/app.php:34
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr "Adressboken hittades inte:"
+
+#: lib/app.php:52
msgid "This is not your addressbook."
msgstr "Det här är inte din adressbok."
-#: lib/app.php:45
+#: lib/app.php:71
msgid "Contact could not be found."
msgstr "Kontakt kunde inte hittas."
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Adress"
+#: lib/app.php:116
+msgid "Jabber"
+msgstr "Jabber"
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefon"
+#: lib/app.php:121
+msgid "AIM"
+msgstr "AIM"
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "E-post"
+#: lib/app.php:126
+msgid "MSN"
+msgstr "MSN"
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organisation"
+#: lib/app.php:131
+msgid "Twitter"
+msgstr "Twitter"
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr "GoogleTalk"
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr "Facebook"
+
+#: lib/app.php:146
+msgid "XMPP"
+msgstr "XMPP"
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr "ICQ"
+
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr "Yahoo"
+
+#: lib/app.php:161
+msgid "Skype"
+msgstr "Skype"
+
+#: lib/app.php:166
+msgid "QQ"
+msgstr "QQ"
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr "GaduGadu"
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Arbete"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Hem"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr "Annat"
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mobil"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Text"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Röst"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "Meddelande"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Fax"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Video"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Personsökare"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Internet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Födelsedag"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr "Företag"
+
+#: lib/app.php:254
+msgid "Call"
+msgstr "Ring"
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr "Kunder"
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr "Leverera"
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr "Helgdagar"
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr "Idéer"
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr "Resa"
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr "Jubileum"
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr "Möte"
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr "Privat"
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr "Projekt"
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr "Frågor"
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "{name}'s födelsedag"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "Kontakt"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Lägg till kontakt"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "Importera"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr "Inställningar"
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Adressböcker"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Konfigurera adressböcker"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Stäng"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Ny adressbok"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr "Kortkommandon"
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "Importera från VCF"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr "Navigering"
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDAV länk"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr "Nästa kontakt i listan"
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Nedladdning"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr "Föregående kontakt i listan"
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Redigera"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr "Visa/dölj aktuell adressbok"
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Radera"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr "Nästa adressbok"
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "Ladda ner kontakt"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr "Föregående adressbok"
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Radera kontakt"
+#: templates/index.php:54
+msgid "Actions"
+msgstr "Åtgärder"
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr "Uppdatera kontaktlistan"
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr "Lägg till ny kontakt"
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr "Lägg till ny adressbok"
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr "Radera denna kontakt"
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Släpp foto för att ladda upp"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Ta bort aktuellt foto"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Redigera aktuellt foto"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Ladda upp ett nytt foto"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "Välj foto från ownCloud"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr " anpassad, korta namn, hela namn, bakåt eller bakåt med komma"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "Redigera detaljer för namn"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organisation"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Radera"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Smeknamn"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Ange smeknamn"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Födelsedag"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr "Webbplats"
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr "http://www.somesite.com"
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr "GÃ¥ till webbplats"
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "dd-mm-åååå"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Grupper"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Separera grupperna med kommatecken"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Editera grupper"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Föredragen"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
-msgstr "Vänligen ange en giltig e-postadress"
+msgstr "Vänligen ange en giltig e-postadress."
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Ange e-postadress"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "Posta till adress."
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Ta bort e-postadress"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
-msgstr "Ange ett telefonnummer"
+msgstr "Ange telefonnummer"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Ta bort telefonnummer"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr "Instant Messenger"
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr "Radera IM"
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Visa på karta"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Redigera detaljer för adress"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Lägg till noteringar här."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Lägg till fält"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Profilbild"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefon"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Notering"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "E-post"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Ta bort aktuellt foto"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr "Instant Messaging"
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Redigera aktuellt foto"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Adress"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Ladda upp ett nytt foto"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Notering"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "Välj foto från ownCloud"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "Ladda ner kontakt"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Radera kontakt"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "Den tillfälliga bilden har raderats från cache."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Editera adress"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Typ"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Postbox"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr "Gatuadress"
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr "Gata och nummer"
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Utökad"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Gata"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr "Lägenhetsnummer"
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Stad"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Län"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr "T.ex. stat eller provins"
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Postnummer"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr "Postnummer"
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "Land"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Editera kategorier"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Ny"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Adressbok"
#: templates/part.edit_name_dialog.php:23
msgid "Hon. prefixes"
-msgstr ""
+msgstr "Ledande titlar"
#: templates/part.edit_name_dialog.php:27
msgid "Miss"
-msgstr "Herr"
+msgstr "Fröken"
#: templates/part.edit_name_dialog.php:28
msgid "Ms"
-msgstr "Ingen adressbok funnen."
+msgstr "Fru"
#: templates/part.edit_name_dialog.php:29
msgid "Mr"
-msgstr "Fru"
+msgstr "Herr"
#: templates/part.edit_name_dialog.php:30
msgid "Sir"
-msgstr ""
+msgstr "Herr"
#: templates/part.edit_name_dialog.php:31
msgid "Mrs"
-msgstr "Fröken"
+msgstr "Fru"
#: templates/part.edit_name_dialog.php:32
msgid "Dr"
-msgstr "Dr"
+msgstr "Dr."
#: templates/part.edit_name_dialog.php:35
msgid "Given name"
@@ -688,23 +823,23 @@ msgstr "Efternamn"
#: templates/part.edit_name_dialog.php:41
msgid "Hon. suffixes"
-msgstr ""
+msgstr "Efterställda titlar"
#: templates/part.edit_name_dialog.php:45
msgid "J.D."
-msgstr ""
+msgstr "Kand. Jur."
#: templates/part.edit_name_dialog.php:46
msgid "M.D."
-msgstr ""
+msgstr "M.D."
#: templates/part.edit_name_dialog.php:47
msgid "D.O."
-msgstr ""
+msgstr "D.O."
#: templates/part.edit_name_dialog.php:48
msgid "D.C."
-msgstr ""
+msgstr "D.C."
#: templates/part.edit_name_dialog.php:49
msgid "Ph.D."
@@ -712,44 +847,15 @@ msgstr "Fil.dr."
#: templates/part.edit_name_dialog.php:50
msgid "Esq."
-msgstr ""
+msgstr "Esq."
#: templates/part.edit_name_dialog.php:51
msgid "Jr."
-msgstr ""
+msgstr "Jr."
#: templates/part.edit_name_dialog.php:52
msgid "Sn."
-msgstr ""
-
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Ny adressbok"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Redigera adressbok"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Visningsnamn"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Aktiv"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Spara"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Skicka in"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Avbryt"
+msgstr "Sn."
#: templates/part.import.php:1
msgid "Import a contacts file"
@@ -767,57 +873,86 @@ msgstr "skapa en ny adressbok"
msgid "Name of new addressbook"
msgstr "Namn för ny adressbok"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "Importera"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "Importerar kontakter"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "Importera till adressbok:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "Välj från hårddisk"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "Du har inga kontakter i din adressbok."
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Lägg till en kontakt"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Konfigurera adressböcker"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr "Välj adressböcker"
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr "Ange namn"
-#: templates/settings.php:4
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr "Ange beskrivning"
+
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "CardDAV synkningsadresser"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
-msgstr "mera information"
+msgstr "mer information"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "Primär adress (Kontakt o.a.)"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr "Visa CardDav-länk"
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr "Visa skrivskyddad VCF-länk"
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr "Dela"
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Nedladdning"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Redigera"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Ny adressbok"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr "Namn"
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr "Beskrivning"
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Spara"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr "Mer..."
diff --git a/l10n/sv/core.po b/l10n/sv/core.po
index 2dc7248b2ff..92631fa7607 100644
--- a/l10n/sv/core.po
+++ b/l10n/sv/core.po
@@ -6,15 +6,17 @@
# 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@linux.com>, 2012.
# <revoltism@gmail.com>, 2011, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Swedish (http://www.transifex.net/projects/p/owncloud/language/sv/)\n"
+"POT-Creation-Date: 2012-08-22 02:04+0200\n"
+"PO-Revision-Date: 2012-08-21 08:33+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"
@@ -23,7 +25,7 @@ msgstr ""
#: ajax/vcategories/add.php:23 ajax/vcategories/delete.php:23
msgid "Application name not provided."
-msgstr "Programnamn har inte angetts"
+msgstr "Programnamn har inte angetts."
#: ajax/vcategories/add.php:29
msgid "No category to add?"
@@ -35,85 +37,85 @@ msgstr "Denna kategori finns redan:"
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:190 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Inställningar"
-#: js/js.js:520
+#: js/js.js:575
msgid "January"
-msgstr ""
+msgstr "Januari"
-#: js/js.js:520
+#: js/js.js:575
msgid "February"
-msgstr ""
+msgstr "Februari"
-#: js/js.js:520
+#: js/js.js:575
msgid "March"
-msgstr ""
+msgstr "Mars"
-#: js/js.js:520
+#: js/js.js:575
msgid "April"
-msgstr ""
+msgstr "April"
-#: js/js.js:520
+#: js/js.js:575
msgid "May"
-msgstr ""
+msgstr "Maj"
-#: js/js.js:520
+#: js/js.js:575
msgid "June"
-msgstr ""
+msgstr "Juni"
-#: js/js.js:521
+#: js/js.js:576
msgid "July"
-msgstr ""
+msgstr "Juli"
-#: js/js.js:521
+#: js/js.js:576
msgid "August"
-msgstr ""
+msgstr "Augusti"
-#: js/js.js:521
+#: js/js.js:576
msgid "September"
-msgstr ""
+msgstr "September"
-#: js/js.js:521
+#: js/js.js:576
msgid "October"
-msgstr ""
+msgstr "Oktober"
-#: js/js.js:521
+#: js/js.js:576
msgid "November"
-msgstr ""
+msgstr "November"
-#: js/js.js:521
+#: js/js.js:576
msgid "December"
-msgstr ""
+msgstr "December"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Avbryt"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Nej"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Ja"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Ok"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Inga kategorier valda för radering."
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Fel"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Owncloud lösenordsåterställning"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "ownCloud lösenordsåterställning"
@@ -131,7 +133,7 @@ msgstr "Begärd"
#: lostpassword/templates/lostpassword.php:8
msgid "Login failed!"
-msgstr "Inloggning misslyckades!"
+msgstr "Misslyckad inloggning!"
#: lostpassword/templates/lostpassword.php:11 templates/installation.php:25
#: templates/login.php:9
@@ -148,7 +150,7 @@ msgstr "Ditt lösenord har återställts"
#: lostpassword/templates/resetpassword.php:5
msgid "To login page"
-msgstr "Till logga in sidan"
+msgstr "Till logginsidan"
#: lostpassword/templates/resetpassword.php:8
msgid "New password"
@@ -160,7 +162,7 @@ msgstr "Återställ lösenordet"
#: strings.php:5
msgid "Personal"
-msgstr "Personlig"
+msgstr "Personligt"
#: strings.php:6
msgid "Users"
@@ -221,15 +223,15 @@ msgstr "kommer att användas"
#: templates/installation.php:82
msgid "Database user"
-msgstr "Databas-användare"
+msgstr "Databasanvändare"
#: templates/installation.php:86
msgid "Database password"
-msgstr "Lösenord för databasen"
+msgstr "Lösenord till databasen"
#: templates/installation.php:90
msgid "Database name"
-msgstr "Databasens namn"
+msgstr "Databasnamn"
#: templates/installation.php:96
msgid "Database host"
@@ -243,14 +245,10 @@ msgstr "Avsluta installation"
msgid "web services under your control"
msgstr "webbtjänster under din kontroll"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Logga ut"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Inställningar"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Glömt ditt lösenord?"
@@ -265,7 +263,7 @@ msgstr "Logga in"
#: templates/logout.php:1
msgid "You are logged out."
-msgstr "Du är utloggad"
+msgstr "Du är utloggad."
#: templates/part.pagenavi.php:3
msgid "prev"
diff --git a/l10n/sv/files.po b/l10n/sv/files.po
index 60c136d6117..14004c7faea 100644
--- a/l10n/sv/files.po
+++ b/l10n/sv/files.po
@@ -5,49 +5,51 @@
# Translators:
# Christer Eriksson <post@hc3web.com>, 2012.
# Daniel Sandman <revoltism@gmail.com>, 2012.
+# Magnus Höglund <magnus@linux.com>, 2012.
+# <magnus@linux.com>, 2012.
# <revoltism@gmail.com>, 2011, 2012.
# <tscooter@hotmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Swedish (http://www.transifex.net/projects/p/owncloud/language/sv/)\n"
+"POT-Creation-Date: 2012-08-22 02:04+0200\n"
+"PO-Revision-Date: 2012-08-21 08:24+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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Inga fel uppstod. Filen laddades upp utan problem"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Den uppladdade filen överskrider upload_max_filesize direktivet i php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
-msgstr "Den uppladdade filen var endast delvist uppladdad"
+msgstr "Den uppladdade filen var endast delvis uppladdad"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Ingen fil blev uppladdad"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Saknar en tillfällig mapp"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Misslyckades spara till disk"
@@ -55,57 +57,85 @@ msgstr "Misslyckades spara till disk"
msgid "Files"
msgstr "Filer"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Radera"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "finns redan"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "ersätt"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "avbryt"
-#: js/files.js:170
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "ersatt"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "med"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "Ã¥ngra"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "raderad"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "genererar ZIP-fil, det kan ta lite tid."
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "Kunde inte ladda upp dina filer eftersom det antingen är en mapp eller har 0 bytes."
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "Uppladdningsfel"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "Väntar"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "Uppladdning avbruten."
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "Ogiltigt namn, '/' är inte tillåten."
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Storlek"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Ändrad"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "mapp"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "mappar"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "fil"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "filer"
#: templates/admin.php:5
msgid "File handling"
@@ -121,7 +151,7 @@ msgstr "max. möjligt:"
#: templates/admin.php:9
msgid "Needed for multi-file and folder downloads."
-msgstr "Krävs för nerladdning av flera mappar och filer"
+msgstr "Krävs för nerladdning av flera mappar och filer."
#: templates/admin.php:9
msgid "Enable ZIP-download"
@@ -129,11 +159,11 @@ msgstr "Aktivera ZIP-nerladdning"
#: templates/admin.php:11
msgid "0 is unlimited"
-msgstr "0 är lika med oändligt"
+msgstr "0 är oändligt"
#: templates/admin.php:12
msgid "Maximum input size for ZIP files"
-msgstr "Största tillåtna storlek för ZIP filer"
+msgstr "Största tillåtna storlek för ZIP-filer"
#: templates/index.php:7
msgid "New"
@@ -173,11 +203,7 @@ msgstr "Dela"
#: templates/index.php:51
msgid "Download"
-msgstr "Ladda ned"
-
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Ta bort"
+msgstr "Ladda ner"
#: templates/index.php:64
msgid "Upload too large"
@@ -191,8 +217,8 @@ msgstr "Filerna du försöker ladda upp överstiger den maximala storleken för
#: templates/index.php:71
msgid "Files are being scanned, please wait."
-msgstr "Filerna skannas, var god vänta"
+msgstr "Filer skannas, var god vänta"
#: templates/index.php:74
msgid "Current scanning"
-msgstr "Aktuell avsökning"
+msgstr "Aktuell skanning"
diff --git a/l10n/sv/files_encryption.po b/l10n/sv/files_encryption.po
new file mode 100644
index 00000000000..42165069483
--- /dev/null
+++ b/l10n/sv/files_encryption.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Magnus Höglund <magnus@linux.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 10: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"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sv\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+#: templates/settings.php:3
+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.php:5
+msgid "None"
+msgstr "Ingen"
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr "Aktivera kryptering"
diff --git a/l10n/sv/files_external.po b/l10n/sv/files_external.po
new file mode 100644
index 00000000000..a010550da65
--- /dev/null
+++ b/l10n/sv/files_external.po
@@ -0,0 +1,83 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Magnus Höglund <magnus@linux.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 10:31+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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr "Extern lagring"
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr "Monteringspunkt"
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr "Källa"
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr "Konfiguration"
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr "Alternativ"
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr "Tillämplig"
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr "Lägg till monteringspunkt"
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr "Ingen angiven"
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr "Alla användare"
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr "Grupper"
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr "Användare"
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr "Radera"
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr "SSL rotcertifikat"
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr "Importera rotcertifikat"
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr "Aktivera extern lagring för användare"
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr "Tillåt användare att montera egen extern lagring"
diff --git a/l10n/sv/files_sharing.po b/l10n/sv/files_sharing.po
new file mode 100644
index 00000000000..dada4f4e79b
--- /dev/null
+++ b/l10n/sv/files_sharing.po
@@ -0,0 +1,35 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Magnus Höglund <magnus@linux.com>, 2012.
+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-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr "Storlek"
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr "Ändrad"
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr "Radera alla"
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr "Radera"
diff --git a/l10n/sv/files_versions.po b/l10n/sv/files_versions.po
new file mode 100644
index 00000000000..f33072ac6d9
--- /dev/null
+++ b/l10n/sv/files_versions.po
@@ -0,0 +1,27 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Magnus Höglund <magnus@linux.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 10:33+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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr "Upphör alla versioner"
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr "Aktivera versionshantering"
diff --git a/l10n/sv/gallery.po b/l10n/sv/gallery.po
index 8af72bc5192..3bb99841a7b 100644
--- a/l10n/sv/gallery.po
+++ b/l10n/sv/gallery.po
@@ -4,77 +4,42 @@
#
# Translators:
# Christer Eriksson <post@hc3web.com>, 2012.
+# <magnus@linux.com>, 2012.
# <revoltism@gmail.com>, 2012.
# <tscooter@hotmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Swedish (http://www.transifex.net/projects/p/owncloud/language/sv/)\n"
+"POT-Creation-Date: 2012-07-30 02:02+0200\n"
+"PO-Revision-Date: 2012-07-29 07:37+0000\n"
+"Last-Translator: maghog <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"
-#: appinfo/app.php:37
+#: appinfo/app.php:39
msgid "Pictures"
msgstr "Bilder"
-#: js/album_cover.js:44
+#: js/pictures.js:12
msgid "Share gallery"
-msgstr ""
+msgstr "Dela galleri"
-#: js/album_cover.js:64 js/album_cover.js:100 js/album_cover.js:133
+#: js/pictures.js:32
msgid "Error: "
-msgstr ""
+msgstr "Fel:"
-#: js/album_cover.js:64 js/album_cover.js:100
+#: js/pictures.js:32
msgid "Internal error"
-msgstr ""
-
-#: js/album_cover.js:114
-msgid "Scanning root"
-msgstr ""
-
-#: js/album_cover.js:115
-msgid "Default order"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Ascending"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Descending"
-msgstr ""
-
-#: js/album_cover.js:117 templates/index.php:19
-msgid "Settings"
-msgstr "Inställningar"
-
-#: js/album_cover.js:122
-msgid "Scanning root cannot be empty"
-msgstr ""
-
-#: js/album_cover.js:122 js/album_cover.js:133
-msgid "Error"
-msgstr ""
-
-#: templates/index.php:16
-msgid "Rescan"
-msgstr "Sök igen"
-
-#: templates/index.php:17
-msgid "Stop"
-msgstr "Stoppa"
+msgstr "Internt fel"
-#: templates/index.php:18
-msgid "Share"
-msgstr "Dela"
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr "Bildspel"
#: templates/view_album.php:19
msgid "Back"
diff --git a/l10n/sv/lib.po b/l10n/sv/lib.po
new file mode 100644
index 00000000000..b4e0a3e8656
--- /dev/null
+++ b/l10n/sv/lib.po
@@ -0,0 +1,114 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Magnus Höglund <magnus@linux.com>, 2012.
+# <magnus@linux.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-22 02:04+0200\n"
+"PO-Revision-Date: 2012-08-21 08:40+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"
+
+#: app.php:288
+msgid "Help"
+msgstr "Hjälp"
+
+#: app.php:295
+msgid "Personal"
+msgstr "Personligt"
+
+#: app.php:300
+msgid "Settings"
+msgstr "Inställningar"
+
+#: app.php:305
+msgid "Users"
+msgstr "Användare"
+
+#: app.php:312
+msgid "Apps"
+msgstr "Program"
+
+#: app.php:314
+msgid "Admin"
+msgstr "Admin"
+
+#: files.php:276
+msgid "ZIP download is turned off."
+msgstr "Nerladdning av ZIP är avstängd."
+
+#: files.php:277
+msgid "Files need to be downloaded one by one."
+msgstr "Filer laddas ner en åt gången."
+
+#: files.php:277 files.php:302
+msgid "Back to Files"
+msgstr "Tillbaka till Filer"
+
+#: files.php:301
+msgid "Selected files too large to generate zip file."
+msgstr "Valda filer är för stora för att skapa zip-fil."
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr "Applikationen är inte aktiverad"
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr "Fel vid autentisering"
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr "Ogiltig token. Ladda om sidan."
+
+#: template.php:86
+msgid "seconds ago"
+msgstr "sekunder sedan"
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr "1 minut sedan"
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr "%d minuter sedan"
+
+#: template.php:91
+msgid "today"
+msgstr "idag"
+
+#: template.php:92
+msgid "yesterday"
+msgstr "igår"
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr "%d dagar sedan"
+
+#: template.php:94
+msgid "last month"
+msgstr "förra månaden"
+
+#: template.php:95
+msgid "months ago"
+msgstr "månader sedan"
+
+#: template.php:96
+msgid "last year"
+msgstr "förra året"
+
+#: template.php:97
+msgid "years ago"
+msgstr "Ã¥r sedan"
diff --git a/l10n/sv/media.po b/l10n/sv/media.po
index b5dc0720403..f6f24a16265 100644
--- a/l10n/sv/media.po
+++ b/l10n/sv/media.po
@@ -3,28 +3,30 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Daniel Sandman <revoltism@gmail.com>, 2012.
+# Magnus Höglund <magnus@linux.com>, 2012.
# <revoltism@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Swedish (http://www.transifex.net/projects/p/owncloud/language/sv/)\n"
+"POT-Creation-Date: 2012-08-22 02:04+0200\n"
+"PO-Revision-Date: 2012-08-21 08:29+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"
-#: appinfo/app.php:32 templates/player.php:8
+#: appinfo/app.php:45 templates/player.php:8
msgid "Music"
msgstr "Musik"
#: js/music.js:18
msgid "Add album to playlist"
-msgstr ""
+msgstr "Lägg till album till spellistan"
#: templates/music.php:3 templates/player.php:12
msgid "Play"
diff --git a/l10n/sv/settings.po b/l10n/sv/settings.po
index 557d08cbe8f..f764a35f035 100644
--- a/l10n/sv/settings.po
+++ b/l10n/sv/settings.po
@@ -4,84 +4,119 @@
#
# Translators:
# 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@linux.com>, 2012.
# <revoltism@gmail.com>, 2011, 2012.
# <tscooter@hotmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Swedish (http://www.transifex.net/projects/p/owncloud/language/sv/)\n"
+"POT-Creation-Date: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-22 06:21+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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "Kan inte ladda listan från App Store"
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "E-post sparad"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Ogiltig e-post"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID ändrat"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Ogiltig begäran"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "Autentiseringsfel"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Språk ändrades"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "Fel"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "Deaktivera"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Aktivera"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Sparar..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "__language_name__"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "Säkerhetsvarning"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "Cron"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr "utför en uppgift vid varje sidladdning"
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr "cron.php är registrerad på en webcron-tjänst"
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr "använd systemets cron-tjänst"
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Logg"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Mera"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Lägg till din applikation"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Välj en App"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Se programsida på apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-licensierat"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "av"
@@ -99,11 +134,11 @@ msgstr "Ställ en fråga"
#: templates/help.php:22
msgid "Problems connecting to help database."
-msgstr "Problem med att ansluta till hjälp-databasen."
+msgstr "Problem med att ansluta till hjälpdatabasen."
#: templates/help.php:23
msgid "Go there manually."
-msgstr "GÃ¥ dit manuellt"
+msgstr "GÃ¥ dit manuellt."
#: templates/help.php:31
msgid "Answer"
@@ -127,7 +162,7 @@ msgstr "Ladda ner"
#: templates/personal.php:19
msgid "Your password got changed"
-msgstr "Ditt lösenord ändrades"
+msgstr "Ditt lösenord har ändrats"
#: templates/personal.php:20
msgid "Unable to change your password"
@@ -173,34 +208,38 @@ msgstr "Hjälp att översätta"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "använd denna adress för att ansluta ownCloud till din filhanterare"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Namn"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Lösenord"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Grupper"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "Skapa"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Förvald datakvot"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "Annat"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr "Gruppadministratör"
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Kvot"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
-msgstr "Ta bort"
+msgstr "Radera"
diff --git a/l10n/sv/tasks.po b/l10n/sv/tasks.po
new file mode 100644
index 00000000000..b397a7d18da
--- /dev/null
+++ b/l10n/sv/tasks.po
@@ -0,0 +1,107 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Magnus Höglund <magnus@linux.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 13:36+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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr "Felaktigt datum/tid"
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr "Uppgifter"
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr "Ingen kategori"
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr "Ospecificerad "
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr "1=högsta"
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr "5=mellan"
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr "9=lägsta"
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr "Tom sammanfattning"
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr "Ogiltig andel procent klar"
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr "Felaktig prioritet"
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr "Lägg till uppgift"
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr "Förfaller"
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr "Kategori"
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr "Slutförd"
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr "Plats"
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr "Prioritet"
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr "Etikett"
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr "Laddar uppgifter..."
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr "Viktigt"
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr "Mer"
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr "Mindre"
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr "Radera"
diff --git a/l10n/sv/user_ldap.po b/l10n/sv/user_ldap.po
new file mode 100644
index 00000000000..55f7bbecf97
--- /dev/null
+++ b/l10n/sv/user_ldap.po
@@ -0,0 +1,165 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Magnus Höglund <magnus@linux.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 12:33+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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr "Server"
+
+#: templates/settings.php:8
+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:9
+msgid "Base DN"
+msgstr "Start DN"
+
+#: templates/settings.php:9
+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:10
+msgid "User DN"
+msgstr "Användare DN"
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr "Lösenord"
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr "För anonym åtkomst, lämna DN och lösenord tomt."
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr "Filter logga in användare"
+
+#: templates/settings.php:12
+#, 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:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr "använd platshållare %%uid, t ex \"uid=%%uid\""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr "Filter lista användare"
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr "Definierar filter att tillämpa vid listning av användare."
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr "utan platshållare, t.ex. \"objectClass=person\"."
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr "Gruppfilter"
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr "Definierar filter att tillämpa vid listning av grupper."
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr "utan platshållare, t.ex. \"objectClass=posixGroup\"."
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr "Port"
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr "Bas för användare i katalogtjänst"
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr "Bas för grupper i katalogtjänst"
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr "Attribut för gruppmedlemmar"
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr "Använd TLS"
+
+#: templates/settings.php:21
+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:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr "LDAP-servern är okänslig för gemener och versaler (Windows)"
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr "Stäng av verifiering av SSL-certifikat."
+
+#: templates/settings.php:23
+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:23
+msgid "Not recommended, use for testing only."
+msgstr "Rekommenderas inte, använd bara för test. "
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr "Attribut för användarnamn"
+
+#: templates/settings.php:24
+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:25
+msgid "Group Display Name Field"
+msgstr "Attribut för gruppnamn"
+
+#: templates/settings.php:25
+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:27
+msgid "in bytes"
+msgstr "i bytes"
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr "i sekunder. En förändring tömmer cache."
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr "Hjälp"
diff --git a/l10n/sv/user_migrate.po b/l10n/sv/user_migrate.po
new file mode 100644
index 00000000000..3c9b00b3f6f
--- /dev/null
+++ b/l10n/sv/user_migrate.po
@@ -0,0 +1,52 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Magnus Höglund <magnus@linux.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 12:39+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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr "Exportera"
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr "Något gick fel när exportfilen skulle genereras"
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr "Ett fel har uppstått"
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr "Exportera ditt användarkonto"
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr "Detta vill skapa en komprimerad fil som innehåller ditt ownCloud-konto."
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr "Importera ett användarkonto"
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr "ownCloud Zip-fil"
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr "Importera"
diff --git a/l10n/sv/user_openid.po b/l10n/sv/user_openid.po
new file mode 100644
index 00000000000..f05dbf48fd2
--- /dev/null
+++ b/l10n/sv/user_openid.po
@@ -0,0 +1,55 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Magnus Höglund <magnus@linux.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 13:42+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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr "Detta är en OpenID-server slutpunkt. För mer information, se"
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr "Identitet: <b>"
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr "Realm: <b>"
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr "Användare: <b>"
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr "Logga in"
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr "Fel: <b>Ingen användare vald"
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr "du kan autentisera till andra webbplatser med denna adress"
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr "Godkänd openID leverantör"
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr "Din adress på Wordpress, Identi.ca, &hellip;"
diff --git a/l10n/templates/admin_dependencies_chk.pot b/l10n/templates/admin_dependencies_chk.pot
new file mode 100644
index 00000000000..c4d46ecc46f
--- /dev/null
+++ b/l10n/templates/admin_dependencies_chk.pot
@@ -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.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-08-24 02:01+0200\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid "The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve "
+"knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/templates/admin_migrate.pot b/l10n/templates/admin_migrate.pot
new file mode 100644
index 00000000000..e72d72e374b
--- /dev/null
+++ b/l10n/templates/admin_migrate.pot
@@ -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.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-08-24 02:01+0200\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud "
+"instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/templates/bookmarks.pot b/l10n/templates/bookmarks.pot
index a55aacd8701..9d10db08bac 100644
--- a/l10n/templates/bookmarks.pot
+++ b/l10n/templates/bookmarks.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\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,7 +21,7 @@ msgstr ""
msgid "Bookmarks"
msgstr ""
-#: bookmarksHelper.php:98
+#: bookmarksHelper.php:99
msgid "unnamed"
msgstr ""
diff --git a/l10n/templates/calendar.pot b/l10n/templates/calendar.pot
index bab10467584..64b4584db75 100644
--- a/l10n/templates/calendar.pot
+++ b/l10n/templates/calendar.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\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,11 +17,19 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ajax/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr ""
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr ""
@@ -29,298 +37,392 @@ msgstr ""
msgid "Wrong calendar"
msgstr ""
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr ""
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr ""
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr ""
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:37 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr ""
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
msgstr ""
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
msgstr ""
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
msgstr ""
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
msgstr ""
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr ""
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr ""
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr ""
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr ""
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr ""
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr ""
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr ""
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr ""
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr ""
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr ""
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr ""
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr ""
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr ""
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr ""
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr ""
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr ""
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr ""
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr ""
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr ""
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr ""
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr ""
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr ""
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr ""
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr ""
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr ""
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr ""
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr ""
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr ""
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr ""
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr ""
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr ""
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr ""
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr ""
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr ""
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr ""
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr ""
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr ""
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr ""
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr ""
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr ""
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr ""
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr ""
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr ""
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr ""
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr ""
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr ""
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr ""
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr ""
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr ""
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr ""
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr ""
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr ""
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr ""
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr ""
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr ""
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr ""
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr ""
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr ""
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr ""
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr ""
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr ""
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr ""
-#: templates/calendar.php:11
-msgid "All day"
+#: templates/calendar.php:6
+msgid "Sun."
msgstr ""
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
+#: templates/calendar.php:11
+msgid "All day"
msgstr ""
#: templates/calendar.php:13
@@ -356,32 +458,24 @@ msgstr ""
msgid "There was a database fail"
msgstr ""
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr ""
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr ""
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr ""
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr ""
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr ""
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr ""
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
msgstr ""
#: templates/part.choosecalendar.php:2
@@ -389,7 +483,7 @@ msgid "Your calendars"
msgstr ""
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr ""
@@ -401,19 +495,19 @@ msgstr ""
msgid "No shared calendars"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr ""
@@ -499,23 +593,23 @@ msgstr ""
msgid "Edit categories"
msgstr ""
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr ""
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr ""
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr ""
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr ""
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr ""
@@ -523,7 +617,7 @@ msgstr ""
msgid "Location of the Event"
msgstr ""
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr ""
@@ -531,84 +625,86 @@ msgstr ""
msgid "Description of the Event"
msgstr ""
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr ""
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr ""
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr ""
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr ""
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr ""
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr ""
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr ""
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr ""
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr ""
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr ""
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr ""
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr ""
-#: templates/part.import.php:1
-msgid "Import a calendar file"
+#: templates/part.import.php:14
+msgid "create a new calendar"
msgstr ""
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
+#: templates/part.import.php:17
+msgid "Import a calendar file"
msgstr ""
-#: templates/part.import.php:10
-msgid "create a new calendar"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
+#: templates/part.import.php:44
+msgid "Take an available name!"
msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
+#: templates/part.import.php:47
+msgid "Import"
msgstr ""
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr ""
@@ -624,44 +720,72 @@ msgstr ""
msgid "No categories selected"
msgstr ""
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr ""
-
#: templates/part.showevent.php:37
msgid "of"
msgstr ""
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr ""
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr ""
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
+#: templates/settings.php:52
+msgid "Time format"
msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr ""
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr ""
-#: templates/settings.php:40
-msgid "First day of the week"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
msgstr ""
#: templates/share.dropdown.php:20
diff --git a/l10n/templates/contacts.pot b/l10n/templates/contacts.pot
index 15859a85e53..6b35ece6d79 100644
--- a/l10n/templates/contacts.pot
+++ b/l10n/templates/contacts.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\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,210 +17,196 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ajax/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr ""
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr ""
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
msgstr ""
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
msgstr ""
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
msgstr ""
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr ""
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr ""
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr ""
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr ""
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr ""
-#: ajax/contactdetails.php:37
-msgid "Missing ID"
-msgstr ""
-
-#: ajax/contactdetails.php:41
-msgid "Error parsing VCard for ID: \""
-msgstr ""
-
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
msgstr ""
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
msgstr ""
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
-#: ajax/uploadphoto.php:68
-msgid "No contact ID was submitted."
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/currentphoto.php:40
-msgid "Error reading contact photo."
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
msgstr ""
-#: ajax/currentphoto.php:52
-msgid "Error saving temporary file."
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
msgstr ""
-#: ajax/currentphoto.php:55
-msgid "The loading photo is not valid."
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
msgstr ""
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
msgstr ""
-#: ajax/deleteproperty.php:36
+#: ajax/contact/deleteproperty.php:37
msgid "Information about vCard is incorrect. Please reload the page."
msgstr ""
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
+#: ajax/contact/details.php:31
+msgid "Missing ID"
msgstr ""
-#: ajax/editname.php:37
-msgid "Contact ID is missing."
+#: ajax/contact/details.php:36
+msgid "Error parsing VCard for ID: \""
msgstr ""
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
msgstr ""
-#: ajax/oc_photo.php:41
-msgid "No photo path was submitted."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
msgstr ""
-#: ajax/oc_photo.php:48
-msgid "File doesn't exist:"
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
msgstr ""
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
-msgid "Error loading image."
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
+#: ajax/uploadphoto.php:68
+msgid "No contact ID was submitted."
msgstr ""
-#: ajax/savecrop.php:68
-msgid "Error getting contact object."
+#: ajax/currentphoto.php:36
+msgid "Error reading contact photo."
msgstr ""
-#: ajax/savecrop.php:75
-msgid "Error getting PHOTO property."
+#: ajax/currentphoto.php:48
+msgid "Error saving temporary file."
msgstr ""
-#: ajax/savecrop.php:88
-msgid "Error saving contact."
+#: ajax/currentphoto.php:51
+msgid "The loading photo is not valid."
msgstr ""
-#: ajax/savecrop.php:98
-msgid "Error resizing image"
+#: ajax/editname.php:31
+msgid "Contact ID is missing."
msgstr ""
-#: ajax/savecrop.php:101
-msgid "Error cropping image"
+#: ajax/oc_photo.php:32
+msgid "No photo path was submitted."
msgstr ""
-#: ajax/savecrop.php:104
-msgid "Error creating temporary image"
+#: ajax/oc_photo.php:39
+msgid "File doesn't exist:"
msgstr ""
-#: ajax/savecrop.php:107
-msgid "Error finding image: "
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
+msgid "Error loading image."
msgstr ""
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
+#: ajax/savecrop.php:69
+msgid "Error getting contact object."
msgstr ""
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
+#: ajax/savecrop.php:79
+msgid "Error getting PHOTO property."
msgstr ""
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
+#: ajax/savecrop.php:98
+msgid "Error saving contact."
msgstr ""
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
+#: ajax/savecrop.php:109
+msgid "Error resizing image"
msgstr ""
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
+#: ajax/savecrop.php:112
+msgid "Error cropping image"
msgstr ""
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
+#: ajax/savecrop.php:115
+msgid "Error creating temporary image"
msgstr ""
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
+#: ajax/savecrop.php:118
+msgid "Error finding image: "
msgstr ""
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr ""
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr ""
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
msgstr ""
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
msgstr ""
@@ -228,414 +214,561 @@ msgstr ""
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
msgstr ""
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
msgstr ""
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:425
+msgid "Permission error"
+msgstr ""
+
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at bugs."
"owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
msgstr ""
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
msgstr ""
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
msgstr ""
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/loader.js:49
+msgid "Result: "
msgstr ""
-#: js/contacts.js:1494
+#: js/loader.js:49
+msgid " imported, "
+msgstr ""
+
+#: js/loader.js:49
+msgid " failed."
+msgstr ""
+
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
+#: lib/app.php:52
+msgid "This is not your addressbook."
msgstr ""
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:71
+msgid "Contact could not be found."
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
+#: lib/app.php:141
+msgid "Facebook"
msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
+#: lib/app.php:146
+msgid "XMPP"
msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
+#: lib/app.php:151
+msgid "ICQ"
msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
+#: lib/app.php:156
+msgid "Yahoo"
msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
+#: lib/app.php:161
+msgid "Skype"
msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr ""
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr ""
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr ""
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr ""
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr ""
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr ""
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr ""
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr ""
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr ""
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr ""
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr ""
-#: templates/index.php:13
-msgid "Add Contact"
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
msgstr ""
#: templates/index.php:14
+msgid "Add Contact"
+msgstr ""
+
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr ""
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
msgstr ""
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
+#: templates/index.php:39
+msgid "Navigation"
msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
+#: templates/index.php:42
+msgid "Next contact in list"
msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
+#: templates/index.php:44
+msgid "Previous contact in list"
msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
+#: templates/index.php:48
+msgid "Next addressbook"
msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
+#: templates/index.php:50
+msgid "Previous addressbook"
msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
+#: templates/index.php:54
+msgid "Actions"
msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr ""
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr ""
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr ""
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr ""
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr ""
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr ""
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr ""
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr ""
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr ""
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr ""
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr ""
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr ""
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr ""
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr ""
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr ""
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr ""
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr ""
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr ""
-#: templates/part.contact.php:103
-msgid "Profile picture"
+#: templates/part.contact.php:129
+msgid "Phone"
msgstr ""
-#: templates/part.contact.php:107
-msgid "Phone"
+#: templates/part.contact.php:130
+msgid "Email"
msgstr ""
-#: templates/part.contact.php:110
-msgid "Note"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
msgstr ""
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
+#: templates/part.contact.php:132
+msgid "Address"
msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
+#: templates/part.contact.php:133
+msgid "Note"
msgstr ""
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
+#: templates/part.contact.php:138
+msgid "Download contact"
msgstr ""
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
+#: templates/part.contact.php:139
+msgid "Delete contact"
msgstr ""
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
msgstr ""
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr ""
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr ""
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr ""
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr ""
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr ""
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr ""
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
-msgid "Zipcode"
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
msgstr ""
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
-msgid "Country"
+#: templates/part.edit_address_dialog.php:48
+msgid "Zipcode"
msgstr ""
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
msgstr ""
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
msgstr ""
#: templates/part.edit_name_dialog.php:16
@@ -718,101 +851,102 @@ msgstr ""
msgid "Sn."
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
+#: templates/part.import.php:1
+msgid "Import a contacts file"
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
+#: templates/part.import.php:6
+msgid "Please choose the addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
+#: templates/part.import.php:10
+msgid "create a new addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:23
-msgid "Active"
+#: templates/part.import.php:15
+msgid "Name of new addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:29
-msgid "Save"
+#: templates/part.import.php:20
+msgid "Importing contacts"
msgstr ""
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
msgstr ""
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
msgstr ""
-#: templates/part.import.php:1
-msgid "Import a contacts file"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
msgstr ""
-#: templates/part.import.php:6
-msgid "Please choose the addressbook"
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
msgstr ""
-#: templates/part.import.php:10
-msgid "create a new addressbook"
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
msgstr ""
-#: templates/part.import.php:15
-msgid "Name of new addressbook"
+#: templates/settings.php:3
+msgid "CardDAV syncing addresses"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
+#: templates/settings.php:3
+msgid "more info"
msgstr ""
-#: templates/part.import.php:20
-msgid "Importing contacts"
+#: templates/settings.php:5
+msgid "Primary address (Kontact et al)"
msgstr ""
-#: templates/part.import.php:24
-msgid "Close"
+#: templates/settings.php:7
+msgid "iOS/OS X"
msgstr ""
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br /"
-">Please upload your VCF file with the file manager and click on it to import."
+#: templates/settings.php:20
+msgid "Show CardDav link"
msgstr ""
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
msgstr ""
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
+#: templates/settings.php:26
+msgid "Share"
msgstr ""
-#: templates/part.no_contacts.php:2
-msgid "You have no contacts in your addressbook."
+#: templates/settings.php:29
+msgid "Download"
msgstr ""
-#: templates/part.no_contacts.php:4
-msgid "Add contact"
+#: templates/settings.php:33
+msgid "Edit"
msgstr ""
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
+#: templates/settings.php:43
+msgid "New Address Book"
msgstr ""
-#: templates/settings.php:4
-msgid "CardDAV syncing addresses"
+#: templates/settings.php:44
+msgid "Name"
msgstr ""
-#: templates/settings.php:4
-msgid "more info"
+#: templates/settings.php:45
+msgid "Description"
msgstr ""
-#: templates/settings.php:6
-msgid "Primary address (Kontact et al)"
+#: templates/settings.php:46
+msgid "Save"
msgstr ""
-#: templates/settings.php:8
-msgid "iOS/OS X"
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr ""
+
+#: templates/settings.php:52
+msgid "More..."
msgstr ""
diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot
index 46ee521dfa0..2849d9d546f 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: 2012-06-06 00:12+0200\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -33,51 +33,55 @@ msgstr ""
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
msgstr ""
-#: js/js.js:520
+#: js/js.js:190 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr ""
+
+#: js/js.js:575
msgid "January"
msgstr ""
-#: js/js.js:520
+#: js/js.js:575
msgid "February"
msgstr ""
-#: js/js.js:520
+#: js/js.js:575
msgid "March"
msgstr ""
-#: js/js.js:520
+#: js/js.js:575
msgid "April"
msgstr ""
-#: js/js.js:520
+#: js/js.js:575
msgid "May"
msgstr ""
-#: js/js.js:520
+#: js/js.js:575
msgid "June"
msgstr ""
-#: js/js.js:521
+#: js/js.js:576
msgid "July"
msgstr ""
-#: js/js.js:521
+#: js/js.js:576
msgid "August"
msgstr ""
-#: js/js.js:521
+#: js/js.js:576
msgid "September"
msgstr ""
-#: js/js.js:521
+#: js/js.js:576
msgid "October"
msgstr ""
-#: js/js.js:521
+#: js/js.js:576
msgid "November"
msgstr ""
-#: js/js.js:521
+#: js/js.js:576
msgid "December"
msgstr ""
@@ -106,10 +110,6 @@ msgid "Error"
msgstr ""
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr ""
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr ""
@@ -239,14 +239,10 @@ msgstr ""
msgid "web services under your control"
msgstr ""
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr ""
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr ""
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr ""
diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot
index d38e5942c2e..3b44bf95e0d 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: 2012-06-06 00:12+0200\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\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,33 +17,33 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ajax/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/upload.php:21
+#: ajax/upload.php:22
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/upload.php:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr ""
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr ""
@@ -51,55 +51,83 @@ msgstr ""
msgid "Files"
msgstr ""
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
msgstr ""
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
msgstr ""
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr ""
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr ""
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
msgstr ""
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
msgstr ""
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
msgstr ""
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
msgstr ""
@@ -171,10 +199,6 @@ msgstr ""
msgid "Download"
msgstr ""
-#: templates/index.php:56
-msgid "Delete"
-msgstr ""
-
#: templates/index.php:64
msgid "Upload too large"
msgstr ""
diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot
new file mode 100644
index 00000000000..11b30e234d1
--- /dev/null
+++ b/l10n/templates/files_encryption.pot
@@ -0,0 +1,34 @@
+# 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: 2012-08-24 02:02+0200\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot
new file mode 100644
index 00000000000..bfc76cf3e8e
--- /dev/null
+++ b/l10n/templates/files_external.pot
@@ -0,0 +1,82 @@
+# 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: 2012-08-24 02:02+0200\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot
new file mode 100644
index 00000000000..9403fd1cb8c
--- /dev/null
+++ b/l10n/templates/files_sharing.pot
@@ -0,0 +1,34 @@
+# 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: 2012-08-24 02:02+0200\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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot
new file mode 100644
index 00000000000..f3d7fe95dba
--- /dev/null
+++ b/l10n/templates/files_versions.pot
@@ -0,0 +1,26 @@
+# 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: 2012-08-24 02:02+0200\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/templates/gallery.pot b/l10n/templates/gallery.pot
index 0cf2a7db970..974a3600c81 100644
--- a/l10n/templates/gallery.pot
+++ b/l10n/templates/gallery.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\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,78 +17,22 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: appinfo/app.php:37
+#: appinfo/app.php:42
msgid "Pictures"
msgstr ""
-#: js/album_cover.js:44
+#: js/pictures.js:12
msgid "Share gallery"
msgstr ""
-#: js/album_cover.js:64 js/album_cover.js:100 js/album_cover.js:133
+#: js/pictures.js:32
msgid "Error: "
msgstr ""
-#: js/album_cover.js:64 js/album_cover.js:100
+#: js/pictures.js:32
msgid "Internal error"
msgstr ""
-#: js/album_cover.js:114
-msgid "Scanning root"
-msgstr ""
-
-#: js/album_cover.js:115
-msgid "Default order"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Ascending"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Descending"
-msgstr ""
-
-#: js/album_cover.js:117 templates/index.php:19
-msgid "Settings"
-msgstr ""
-
-#: js/album_cover.js:122
-msgid "Scanning root cannot be empty"
-msgstr ""
-
-#: js/album_cover.js:122 js/album_cover.js:133
-msgid "Error"
-msgstr ""
-
-#: templates/index.php:16
-msgid "Rescan"
-msgstr ""
-
-#: templates/index.php:17
-msgid "Stop"
-msgstr ""
-
-#: templates/index.php:18
-msgid "Share"
-msgstr ""
-
-#: templates/view_album.php:19
-msgid "Back"
-msgstr ""
-
-#: templates/view_album.php:36
-msgid "Remove confirmation"
-msgstr ""
-
-#: templates/view_album.php:37
-msgid "Do you want to remove album"
-msgstr ""
-
-#: templates/view_album.php:40
-msgid "Change album name"
-msgstr ""
-
-#: templates/view_album.php:43
-msgid "New album name"
+#: templates/index.php:27
+msgid "Slideshow"
msgstr ""
diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot
new file mode 100644
index 00000000000..9f10129eab3
--- /dev/null
+++ b/l10n/templates/lib.pot
@@ -0,0 +1,112 @@
+# 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: 2012-08-24 02:02+0200\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"
+
+#: app.php:288
+msgid "Help"
+msgstr ""
+
+#: app.php:295
+msgid "Personal"
+msgstr ""
+
+#: app.php:300
+msgid "Settings"
+msgstr ""
+
+#: app.php:305
+msgid "Users"
+msgstr ""
+
+#: app.php:312
+msgid "Apps"
+msgstr ""
+
+#: app.php:314
+msgid "Admin"
+msgstr ""
+
+#: files.php:276
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:277
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:277 files.php:302
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:301
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/templates/media.pot b/l10n/templates/media.pot
index b722f87d435..628c493ff3f 100644
--- a/l10n/templates/media.pot
+++ b/l10n/templates/media.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\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,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: appinfo/app.php:32 templates/player.php:8
+#: appinfo/app.php:45 templates/player.php:8
msgid "Music"
msgstr ""
diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot
index 85b693c5c01..3ce71ef31c2 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: 2012-06-06 00:12+0200\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\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,10 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
+#: ajax/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
msgstr ""
@@ -25,23 +29,31 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr ""
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr ""
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr ""
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
msgstr ""
@@ -49,35 +61,55 @@ msgstr ""
msgid "Saving..."
msgstr ""
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr ""
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr ""
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr ""
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr ""
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr ""
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr ""
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr ""
@@ -169,34 +201,38 @@ msgstr ""
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr ""
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr ""
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr ""
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr ""
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr ""
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr ""
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr ""
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr ""
diff --git a/l10n/templates/tasks.pot b/l10n/templates/tasks.pot
new file mode 100644
index 00000000000..876cc1deaba
--- /dev/null
+++ b/l10n/templates/tasks.pot
@@ -0,0 +1,106 @@
+# 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: 2012-08-24 02:02+0200\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot
new file mode 100644
index 00000000000..815e4a59db7
--- /dev/null
+++ b/l10n/templates/user_ldap.pot
@@ -0,0 +1,163 @@
+# 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: 2012-08-24 02:02+0200\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/templates/user_migrate.pot b/l10n/templates/user_migrate.pot
new file mode 100644
index 00000000000..50810fb3686
--- /dev/null
+++ b/l10n/templates/user_migrate.pot
@@ -0,0 +1,50 @@
+# 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: 2012-08-24 02:02+0200\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/templates/user_openid.pot b/l10n/templates/user_openid.pot
new file mode 100644
index 00000000000..1fe92139e3d
--- /dev/null
+++ b/l10n/templates/user_openid.pot
@@ -0,0 +1,54 @@
+# 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: 2012-08-24 02:02+0200\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/th_TH/admin_dependencies_chk.po b/l10n/th_TH/admin_dependencies_chk.po
new file mode 100644
index 00000000000..95abe0c6526
--- /dev/null
+++ b/l10n/th_TH/admin_dependencies_chk.po
@@ -0,0 +1,74 @@
+# 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>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-20 02:01+0200\n"
+"PO-Revision-Date: 2012-08-19 14:18+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: th_TH\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr "โมดูล php-json จำเป็นต้องใช้สำหรับà¹à¸­à¸žà¸žà¸¥à¸´à¹€à¸„ชั่นหลายๆตัวเพื่อà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸ªà¸²à¸à¸¥"
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr "โมดูล php-curl จำเป็นต้องใช้สำหรับดึงข้อมูลชื่อหัวเว็บเมื่อเพิ่มเข้าไปยังรายà¸à¸²à¸£à¹‚ปรด"
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr "โมดูล php-gd จำเป็นต้องใช้สำหรับสร้างรูปภาพขนาดย่อของรูปภาพของคุณ"
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr "โมดูล php-ldap จำเป็นต้องใช้สำหรับà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸à¸±à¸šà¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸­à¸£à¹Œ ldap ของคุณ"
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr "โมดูล php-zip จำเป็นต้องใช้สำหรับดาวน์โหลดไฟล์พร้อมà¸à¸±à¸™à¸«à¸¥à¸²à¸¢à¹†à¹„ฟล์ในครั้งเดียว"
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr "โมดูล php-mb_multibyte จำเป็นต้องใช้สำหรับà¸à¸²à¸£à¸ˆà¸±à¸”à¸à¸²à¸£à¸à¸²à¸£à¹à¸›à¸¥à¸‡à¸£à¸«à¸±à¸ªà¹„ฟล์อย่างถูà¸à¸•à¹‰à¸­à¸‡"
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr "โมดูล php-ctype จำเป็นต้องใช้สำหรับตรวจสอบความถูà¸à¸•à¹‰à¸­à¸‡à¸‚องข้อมูล"
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr "โมดูล php-xml จำเป็นต้องใช้สำหรับà¹à¸Šà¸£à¹Œà¹„ฟล์ด้วย webdav"
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr "คำสั่ง allow_url_fopen ที่อยู่ในไฟล์ php.ini ของคุณ ควรà¸à¸³à¸«à¸™à¸”เป็น 1 เพื่อดึงข้อมูลของà¸à¸²à¸™à¸„วามรู้ต่างๆจาà¸à¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸­à¸£à¹Œà¸‚อง OCS"
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr "โมดูล php-pdo จำเป็นต้องใช้สำหรับจัดเà¸à¹‡à¸šà¸‚้อมูลใน owncloud เข้าไปไว้ยังà¸à¸²à¸™à¸‚้อมูล"
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr "สถานะà¸à¸²à¸£à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡"
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr "ใช้งานโดย:"
diff --git a/l10n/th_TH/admin_migrate.po b/l10n/th_TH/admin_migrate.po
new file mode 100644
index 00000000000..c3f57864015
--- /dev/null
+++ b/l10n/th_TH/admin_migrate.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:
+# AriesAnywhere Anywhere <ariesanywhere@gmail.com>, 2012.
+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:09+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: th_TH\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr "ส่งออà¸à¸‚้อมูลค่าสมมุติของ ownCloud นี้"
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr "ส่วนนี้จะเป็นà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹„ฟล์บีบอัดที่บรรจุข้อมูลค่าสมมุติของ ownCloud.\n à¸à¸£à¸¸à¸“าเลือà¸à¸Šà¸™à¸´à¸”ของà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸­à¸­à¸à¸‚้อมูล:"
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr "ส่งออà¸"
diff --git a/l10n/th_TH/bookmarks.po b/l10n/th_TH/bookmarks.po
new file mode 100644
index 00000000000..0c6e7c61e3d
--- /dev/null
+++ b/l10n/th_TH/bookmarks.po
@@ -0,0 +1,61 @@
+# 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>, 2012.
+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:16+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: th_TH\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr "รายà¸à¸²à¸£à¹‚ปรด"
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr "ยังไม่มีชื่อ"
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr "ลาà¸à¸ªà¸´à¹ˆà¸‡à¸™à¸µà¹‰à¹„ปไว้ที่รายà¸à¸²à¸£à¹‚ปรดในโปรà¹à¸à¸£à¸¡à¸šà¸£à¸²à¸§à¹€à¸‹à¸­à¸£à¹Œà¸‚องคุณ à¹à¸¥à¹‰à¸§à¸„ลิà¸à¸—ี่นั่น, เมื่อคุณต้องà¸à¸²à¸£à¹€à¸à¹‡à¸šà¸«à¸™à¹‰à¸²à¹€à¸§à¹‡à¸šà¹€à¸žà¸ˆà¹€à¸‚้าไปไว้ในรายà¸à¸²à¸£à¹‚ปรดอย่างรวดเร็ว"
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr "อ่านภายหลัง"
+
+#: templates/list.php:13
+msgid "Address"
+msgstr "ที่อยู่"
+
+#: templates/list.php:14
+msgid "Title"
+msgstr "ชื่อ"
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr "ป้ายà¸à¸³à¸à¸±à¸š"
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr "บันทึà¸à¸£à¸²à¸¢à¸à¸²à¸£à¹‚ปรด"
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr "คุณยังไม่มีรายà¸à¸²à¸£à¹‚ปรด"
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr "Bookmarklet <br />"
diff --git a/l10n/th_TH/calendar.po b/l10n/th_TH/calendar.po
index 85bdc87fc03..db695db5dca 100644
--- a/l10n/th_TH/calendar.po
+++ b/l10n/th_TH/calendar.po
@@ -9,21 +9,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Thai (Thailand) (http://www.transifex.net/projects/p/owncloud/language/th_TH/)\n"
+"POT-Creation-Date: 2012-08-15 02:02+0200\n"
+"PO-Revision-Date: 2012-08-14 13:30+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"
"Content-Transfer-Encoding: 8bit\n"
"Language: th_TH\n"
"Plural-Forms: nplurals=1; plural=0\n"
-#: ajax/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr "ไม่ใช่ปà¸à¸´à¸—ินทั้งหมดที่จะถูà¸à¸ˆà¸±à¸”เà¸à¹‡à¸šà¸‚้อมูลไว้ในหน่วยความจำà¹à¸„ชอย่างสมบูรณ์"
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr "ทุà¸à¸ªà¸´à¹ˆà¸‡à¸—ุà¸à¸­à¸¢à¹ˆà¸²à¸‡à¹„ด้ถูà¸à¹€à¸à¹‡à¸šà¹€à¸‚้าไปไว้ในหน่วยความจำà¹à¸„ชอย่างสมบูรณ์à¹à¸¥à¹‰à¸§"
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "ไม่พบปà¸à¸´à¸—ินที่ต้องà¸à¸²à¸£"
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "ไม่พบà¸à¸´à¸ˆà¸à¸£à¸£à¸¡à¸—ี่ต้องà¸à¸²à¸£"
@@ -31,300 +39,394 @@ msgstr "ไม่พบà¸à¸´à¸ˆà¸à¸£à¸£à¸¡à¸—ี่ต้องà¸à¸²à¸£"
msgid "Wrong calendar"
msgstr "ปà¸à¸´à¸—ินไม่ถูà¸à¸•à¹‰à¸­à¸‡"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr "ไฟล์ดังà¸à¸¥à¹ˆà¸²à¸§à¸šà¸£à¸£à¸ˆà¸¸à¸‚้อมูลà¸à¸´à¸ˆà¸à¸£à¸£à¸¡à¸—ี่มีอยู่à¹à¸¥à¹‰à¸§à¹ƒà¸™à¸›à¸à¸´à¸—ินของคุณ"
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr "à¸à¸´à¸ˆà¸à¸£à¸£à¸¡à¹„ด้ถูà¸à¸šà¸±à¸™à¸—ึà¸à¹„ปไว้ในปà¸à¸´à¸—ินที่สร้างขึ้นใหม่à¹à¸¥à¹‰à¸§"
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr "à¸à¸²à¸£à¸™à¸³à¹€à¸‚้าข้อมูลล้มเหลว"
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr "à¸à¸´à¸ˆà¸à¸£à¸£à¸¡à¹„ด้ถูà¸à¸šà¸±à¸™à¸—ึà¸à¹€à¸‚้าไปไว้ในปà¸à¸´à¸—ินของคุณà¹à¸¥à¹‰à¸§"
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "สร้างโซนเวลาใหม่:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "โซนเวลาถูà¸à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸¥à¹‰à¸§"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "คำร้องขอไม่ถูà¸à¸•à¹‰à¸­à¸‡"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "ปà¸à¸´à¸—ิน"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd M/d"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd M/d"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM yyyy"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, MMM d, yyyy"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "วันเà¸à¸´à¸”"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "ธุรà¸à¸´à¸ˆ"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "โทรติดต่อ"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "ลูà¸à¸„้า"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "จัดส่ง"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "วันหยุด"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "ไอเดีย"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "à¸à¸²à¸£à¹€à¸”ินทาง"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "งานเลี้ยง"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "นัดประชุม"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "อื่นๆ"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "ส่วนตัว"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "โครงà¸à¸²à¸£"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "คำถาม"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "งาน"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr "โดย"
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "ไม่มีชื่อ"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "สร้างปà¸à¸´à¸—ินใหม่"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "ไม่ต้องทำซ้ำ"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "รายวัน"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "รายสัปดาห์"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "ทุà¸à¸§à¸±à¸™à¸«à¸¢à¸¸à¸”"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "รายปัà¸à¸©à¹Œ"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "รายเดือน"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "รายปี"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "ไม่ต้องเลย"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "ตามจำนวนที่ปราà¸à¸"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "ตามวันที่"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "จาà¸à¹€à¸”ือน"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "จาà¸à¸ªà¸±à¸›à¸”าห์"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "วันจันทร์"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "วันอังคาร"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "วันพุธ"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "วันพฤหัสบดี"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "วันศุà¸à¸£à¹Œ"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "วันเสาร์"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "วันอาทิตย์"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "สัปดาห์ที่มีà¸à¸´à¸ˆà¸à¸£à¸£à¸¡à¸‚องเดือน"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "ลำดับà¹à¸£à¸"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "ลำดับที่สอง"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "ลำดับที่สาม"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "ลำดับที่สี่"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "ลำดับที่ห้า"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "ลำดับสุดท้าย"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "มà¸à¸£à¸²à¸„ม"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "มีนาคม"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "เมษายน"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "พฤษภาคม"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "มิถุนายน"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "à¸à¸£à¸à¸à¸²à¸„ม"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "สิงหาคม"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "à¸à¸±à¸™à¸¢à¸²à¸¢à¸™"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "ตุลาคม"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "พฤศจิà¸à¸²à¸¢à¸™"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "ธันวาคม"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "ตามวันที่จัดà¸à¸´à¸ˆà¸à¸£à¸£à¸¡"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "ของเมื่อวานนี้"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "จาà¸à¸«à¸¡à¸²à¸¢à¹€à¸¥à¸‚ของสัปดาห์"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "ตามวันà¹à¸¥à¸°à¹€à¸”ือน"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "วันที่"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "คำนวณ"
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr "อา."
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr "จ."
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr "อ."
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr "พ."
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr "พฤ."
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr "ศ."
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr "ส."
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr "ม.ค."
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr "à¸.พ."
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr "มี.ค."
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr "เม.ย."
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr "พ.ค."
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr "มิ.ย."
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr "à¸.ค."
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr "ส.ค."
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr "à¸.ย."
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr "ต.ค."
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr "พ.ย."
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr "ธ.ค."
+
#: templates/calendar.php:11
msgid "All day"
msgstr "ทั้งวัน"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "สร้างปà¸à¸´à¸—ินใหม่"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "ช่องฟิลด์เà¸à¸´à¸”à¸à¸²à¸£à¸ªà¸¹à¸à¸«à¸²à¸¢"
@@ -358,40 +460,32 @@ msgstr "วันที่สิ้นสุดà¸à¸´à¸ˆà¸à¸£à¸£à¸¡à¸”ังà¸
msgid "There was a database fail"
msgstr "เà¸à¸´à¸”ความล้มเหลวà¸à¸±à¸šà¸à¸²à¸™à¸‚้อมูล"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "สัปดาห์"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "เดือน"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "รายà¸à¸²à¸£"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "วันนี้"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "ปà¸à¸´à¸—ิน"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "เà¸à¸´à¸”ความล้มเหลวในà¸à¸²à¸£à¹à¸¢à¸à¹„ฟล์"
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "เลือà¸à¸›à¸à¸´à¸—ินที่ต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr "ตั้งค่า"
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "ปà¸à¸´à¸—ินของคุณ"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "ลิงค์ CalDav"
@@ -403,19 +497,19 @@ msgstr "ปà¸à¸´à¸—ินที่เปิดà¹à¸Šà¸£à¹Œ"
msgid "No shared calendars"
msgstr "ไม่มีปà¸à¸´à¸—ินที่เปิดà¹à¸Šà¸£à¹Œà¹„ว้"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "เปิดà¹à¸Šà¸£à¹Œà¸›à¸à¸´à¸—ิน"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "ดาวน์โหลด"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "à¹à¸à¹‰à¹„ข"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "ลบ"
@@ -501,23 +595,23 @@ msgstr "คั่นระหว่างรายà¸à¸²à¸£à¸«à¸¡à¸§à¸”หมู
msgid "Edit categories"
msgstr "à¹à¸à¹‰à¹„ขหมวดหมู่"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "เป็นà¸à¸´à¸ˆà¸à¸£à¸£à¸¡à¸•à¸¥à¸­à¸”ทั้งวัน"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "จาà¸"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "ถึง"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "ตัวเลือà¸à¸‚ั้นสูง"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "สถานที่"
@@ -525,7 +619,7 @@ msgstr "สถานที่"
msgid "Location of the Event"
msgstr "สถานที่จัดà¸à¸´à¸ˆà¸à¸£à¸£à¸¡"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "คำอธิบาย"
@@ -533,84 +627,86 @@ msgstr "คำอธิบาย"
msgid "Description of the Event"
msgstr "คำอธิบายเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸à¸´à¸ˆà¸à¸£à¸£à¸¡"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "ทำซ้ำ"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "ขั้นสูง"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "เลือà¸à¸ªà¸±à¸›à¸”าห์"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "เลือà¸à¸§à¸±à¸™"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "à¹à¸¥à¸°à¸§à¸±à¸™à¸—ี่มีเหตุà¸à¸²à¸£à¸“์เà¸à¸´à¸”ขึ้นในปี"
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "à¹à¸¥à¸°à¸§à¸±à¸™à¸—ี่มีเหตุà¸à¸²à¸£à¸“์เà¸à¸´à¸”ขึ้นในเดือน"
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "เลือà¸à¹€à¸”ือน"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "เลือà¸à¸ªà¸±à¸›à¸”าห์"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "à¹à¸¥à¸°à¸ªà¸±à¸›à¸”าห์ที่มีเหตุà¸à¸²à¸£à¸“์เà¸à¸´à¸”ขึ้นในปี"
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "ช่วงเวลา"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "สิ้นสุด"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "จำนวนที่ปราà¸à¸"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "สร้างปà¸à¸´à¸—ินใหม่"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "นำเข้าไฟล์ปà¸à¸´à¸—ิน"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "à¸à¸£à¸“าเลือà¸à¸›à¸à¸´à¸—ิน"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "สร้างปà¸à¸´à¸—ินใหม่"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr "à¸à¸£à¸¸à¸“าเลือà¸à¸›à¸à¸´à¸—ิน"
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "ชื่อของปà¸à¸´à¸—ิน"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "นำเข้าข้อมูล"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr "เลือà¸à¸Šà¸·à¹ˆà¸­à¸—ี่ต้องà¸à¸²à¸£"
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "นำเข้าข้อมูลปà¸à¸´à¸—ิน"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr "ปà¸à¸´à¸—ินชื่อดังà¸à¸¥à¹ˆà¸²à¸§à¸–ูà¸à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹„ปà¹à¸¥à¹‰à¸§ หาà¸à¸„ุณยังดำเนินà¸à¸²à¸£à¸•à¹ˆà¸­à¹„ป ปà¸à¸´à¸—ินดังà¸à¸¥à¹ˆà¸²à¸§à¸™à¸µà¹‰à¸ˆà¸°à¸–ูà¸à¸œà¸ªà¸²à¸™à¸‚้อมูลเข้าด้วยà¸à¸±à¸™"
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "ปà¸à¸´à¸—ินถูà¸à¸™à¸³à¹€à¸‚้าข้อมูลเรียบร้อยà¹à¸¥à¹‰à¸§"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "นำเข้าข้อมูล"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "ปิดà¸à¸¥à¹ˆà¸­à¸‡à¸‚้อความโต้ตอบ"
@@ -626,45 +722,73 @@ msgstr "ดูà¸à¸´à¸ˆà¸à¸£à¸£à¸¡"
msgid "No categories selected"
msgstr "ยังไม่ได้เลือà¸à¸«à¸¡à¸§à¸”หมู่"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "เลือà¸à¸«à¸¡à¸§à¸”หมู่"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "ของ"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "ที่"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr "ทั่วไป"
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "โซนเวลา"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "ตรวจสอบà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¹‚ซนเวลาอยู่เสมอ"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr "อัพเดทโซนเวลาอัตโนมัติ"
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "รูปà¹à¸šà¸šà¸à¸²à¸£à¹à¸ªà¸”งเวลา"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr "รูปà¹à¸šà¸šà¹€à¸§à¸¥à¸²"
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24 ช.ม."
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12 ช.ม."
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "วันà¹à¸£à¸à¸‚องสัปดาห์"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr "เริ่มต้นสัปดาห์ด้วย"
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr "หน่วยความจำà¹à¸„ช"
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr "ล้างข้อมูลในหน่วยความจำà¹à¸„ชสำหรับà¸à¸´à¸ˆà¸à¸£à¸£à¸¡à¸—ี่ซ้ำซ้อน"
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr "URLs"
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr "ที่อยู่ที่ใช้สำหรับเชื่อมข้อมูลปà¸à¸´à¸—ิน CalDAV"
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr "ข้อมูลเพิ่มเติม"
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr "ที่อยู่หลัภ(Kontact et al)"
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "ที่อยู่ในà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸‚้อมูลà¸à¸±à¸šà¸›à¸à¸´à¸—ิน CalDav:"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr "อ่านเฉพาะลิงà¸à¹Œ iCalendar เท่านั้น"
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/th_TH/contacts.po b/l10n/th_TH/contacts.po
index c97c27d4e9a..978e20b0669 100644
--- a/l10n/th_TH/contacts.po
+++ b/l10n/th_TH/contacts.po
@@ -9,637 +9,770 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Thai (Thailand) (http://www.transifex.net/projects/p/owncloud/language/th_TH/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "เà¸à¸´à¸”ข้อผิดพลาดใน (ยà¸à¹€à¸¥à¸´à¸)à¸à¸²à¸£à¹€à¸›à¸´à¸”ใช้งานสมุดบันทึà¸à¸—ี่อยู่"
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸­à¸œà¸¹à¹‰à¸•à¸´à¸”ต่อใหม่"
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "ไม่สามารถเพิ่มรายละเอียดที่ไม่มีข้อมูลได้"
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "อย่างน้อยที่สุดช่องข้อมูลที่อยู่จะต้องถูà¸à¸à¸£à¸­à¸à¸¥à¸‡à¹„ป"
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "ยังไม่ได้à¸à¸³à¸«à¸™à¸”รหัส"
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "พยายามที่จะเพิ่มทรัพยาà¸à¸£à¸—ี่ซ้ำซ้อนà¸à¸±à¸™: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "ไม่สามารถอัพเดทสมุดบันทึà¸à¸—ี่อยู่โดยไม่มีชื่อได้"
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸£à¸²à¸¢à¸¥à¸°à¹€à¸­à¸µà¸¢à¸”à¸à¸²à¸£à¸•à¸´à¸”ต่อ"
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸­à¸±à¸žà¹€à¸”ทสมุดบันทึà¸à¸—ี่อยู่"
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "ยังไม่ได้ใส่รหัส"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่า checksum"
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "ยังไม่ได้เลือà¸à¸«à¸¡à¸§à¸”หมู่ที่ต้องà¸à¸²à¸£à¸¥à¸š"
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "ไม่พบสมุดบันทึà¸à¸—ี่อยู่ที่ต้องà¸à¸²à¸£"
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "ไม่พบข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อที่ต้องà¸à¸²à¸£"
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸­à¸œà¸¹à¹‰à¸•à¸´à¸”ต่อใหม่"
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "ยังไม่ได้à¸à¸³à¸«à¸™à¸”ชื่อ"
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr "ไม่สามารถà¹à¸ˆà¸à¹à¸ˆà¸‡à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸­à¸œà¸¹à¹‰à¸•à¸´à¸”ต่อได้"
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "ไม่สามารถเพิ่มรายละเอียดที่ไม่มีข้อมูลได้"
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "อย่างน้อยที่สุดช่องข้อมูลที่อยู่จะต้องถูà¸à¸à¸£à¸­à¸à¸¥à¸‡à¹„ป"
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "พยายามที่จะเพิ่มทรัพยาà¸à¸£à¸—ี่ซ้ำซ้อนà¸à¸±à¸™: "
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "ข้อมูลเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸š vCard ไม่ถูà¸à¸•à¹‰à¸­à¸‡ à¸à¸£à¸¸à¸“าโหลดหน้าเวปใหม่อีà¸à¸„รั้ง"
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "รหัสสูà¸à¸«à¸²à¸¢"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "พบข้อผิดพลาดในà¸à¸²à¸£à¹à¸¢à¸à¸£à¸«à¸±à¸ª VCard:\""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "ไม่สามารถเพิ่มสมุดบันทึà¸à¸—ี่อยู่โดยไม่มีชื่อได้"
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "ยังไม่ได้à¸à¸³à¸«à¸™à¸”ค่า checksum"
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸ªà¸¡à¸¸à¸”บันทึà¸à¸—ี่อยู่ใหม่"
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "ข้อมูล vCard ไม่ถูà¸à¸•à¹‰à¸­à¸‡ à¸à¸£à¸¸à¸“าโหลดหน้าเว็บใหม่อีà¸à¸„รั้ง: "
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¹€à¸›à¸´à¸”ใช้งานสมุดบันทึà¸à¸—ี่อยู่"
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "มีบางอย่างเà¸à¸´à¸”à¸à¸²à¸£ FUBAR. "
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "ไม่มีรหัสข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อถูà¸à¸ªà¹ˆà¸‡à¸¡à¸²"
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸­à¹ˆà¸²à¸™à¸£à¸¹à¸›à¸ à¸²à¸žà¸‚องข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ"
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¹„ฟล์ชั่วคราว"
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "โหลดรูปภาพไม่ถูà¸à¸•à¹‰à¸­à¸‡"
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "ยังไม่ได้à¸à¸³à¸«à¸™à¸”รหัส"
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "ข้อมูลเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸š vCard ไม่ถูà¸à¸•à¹‰à¸­à¸‡ à¸à¸£à¸¸à¸“าโหลดหน้าเวปใหม่อีà¸à¸„รั้ง"
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸¥à¸šà¸£à¸²à¸¢à¸¥à¸°à¹€à¸­à¸µà¸¢à¸”à¸à¸²à¸£à¸•à¸´à¸”ต่อ"
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "รหัสข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อเà¸à¸´à¸”à¸à¸²à¸£à¸ªà¸¹à¸à¸«à¸²à¸¢"
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "รหัสข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อเà¸à¸´à¸”à¸à¸²à¸£à¸ªà¸¹à¸à¸«à¸²à¸¢"
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "ไม่พบตำà¹à¸«à¸™à¹ˆà¸‡à¸žà¸²à¸˜à¸‚องรูปภาพ"
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "ไม่มีไฟล์ดังà¸à¸¥à¹ˆà¸²à¸§"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¹‚หลดรูปภาพ"
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸”ึงข้อมูลติดต่อ"
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸”ึงคุณสมบัติของรูปภาพ"
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¸‚้อมูลผู้ติดต่อ"
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸›à¸£à¸±à¸šà¸‚นาดรูปภาพ"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸„รอบตัดภาพ"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸£à¸¹à¸›à¸ à¸²à¸žà¸Šà¸±à¹ˆà¸§à¸„ราว"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "ยังไม่ได้à¸à¸³à¸«à¸™à¸”ชื่อ"
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "ยังไม่ได้à¸à¸³à¸«à¸™à¸”ค่า checksum"
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸„้นหารูปภาพ: "
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "ข้อมูล vCard ไม่ถูà¸à¸•à¹‰à¸­à¸‡ à¸à¸£à¸¸à¸“าโหลดหน้าเว็บใหม่อีà¸à¸„รั้ง: "
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "มีบางอย่างเà¸à¸´à¸”à¸à¸²à¸£ FUBAR. "
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸­à¸±à¸žà¹€à¸”ทข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ"
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "ไม่สามารถอัพเดทสมุดบันทึà¸à¸—ี่อยู่โดยไม่มีชื่อได้"
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸­à¸±à¸žà¹€à¸”ทสมุดบันทึà¸à¸—ี่อยู่"
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸­à¸±à¸žà¹‚หลดข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อไปยังพื้นที่จัดเà¸à¹‡à¸šà¸‚้อมูล"
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "ไม่พบข้อผิดพลาดใดๆ, ไฟล์ถูà¸à¸­à¸±à¸žà¹‚หลดเรียบร้อยà¹à¸¥à¹‰à¸§"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "ไฟล์ที่อัพโหลดมีขนาดไฟล์ใหà¸à¹ˆà¹€à¸à¸´à¸™à¸ˆà¸³à¸™à¸§à¸™à¸—ี่à¸à¸³à¸«à¸™à¸”ไว้ในคำสั่ง upload_max_filesize ที่อยู่ในไฟล์ php.ini"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "ไฟล์ที่อัพโหลดมีขนาดไฟล์ใหà¸à¹ˆà¹€à¸à¸´à¸™à¸ˆà¸³à¸™à¸§à¸™à¸—ี่à¸à¸³à¸«à¸™à¸”ไว้ในคำสั่ง MAX_FILE_SIZE ที่ถูà¸à¸£à¸°à¸šà¸¸à¹„ว้ในรูปà¹à¸šà¸šà¸‚อง HTML"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "ไฟล์ถูà¸à¸­à¸±à¸žà¹‚หลดได้เพียงบางส่วนเท่านั้น"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "ไม่มีไฟล์ที่ถูà¸à¸­à¸±à¸žà¹‚หลด"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "โฟลเดอร์ชั่วคราวเà¸à¸´à¸”à¸à¸²à¸£à¸ªà¸¹à¸à¸«à¸²à¸¢"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "ไม่สามารถบันทึà¸à¸£à¸¹à¸›à¸ à¸²à¸žà¸Šà¸±à¹ˆà¸§à¸„ราวได้: "
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "ไม่สามารถโหลดรูปภาพชั่วคราวได้: "
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "ยังไม่มีไฟล์ใดที่ถูà¸à¸­à¸±à¸žà¹‚หลด เà¸à¸´à¸”ข้อผิดพลาดที่ไม่ทราบสาเหตุ"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "ข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "ขออภัย, ฟังà¸à¹Œà¸Šà¸±à¹ˆà¸™à¸à¸²à¸£à¸—ำงานนี้ยังไม่ได้ถูà¸à¸”ำเนินà¸à¸²à¸£"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "ยังไม่ได้ถูà¸à¸”ำเนินà¸à¸²à¸£"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "ไม่สามารถดึงที่อยู่ที่ถูà¸à¸•à¹‰à¸­à¸‡à¹„ด้"
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "พบข้อผิดพลาด"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "คุณสมบัตินี้ต้องไม่มีข้อมูลว่างอยู่"
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "ไม่สามารถทำสัà¸à¸¥à¸±à¸à¸©à¸“์องค์ประà¸à¸­à¸šà¸•à¹ˆà¸²à¸‡à¹†à¹ƒà¸«à¹‰à¹€à¸›à¹‡à¸™à¸•à¸±à¸§à¹€à¸¥à¸‚ตามลำดับได้"
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "'deleteProperty' ถูà¸à¹€à¸£à¸µà¸¢à¸à¹ƒà¸Šà¹‰à¹‚ดยไม่มีอาร์à¸à¸´à¸§à¹€à¸¡à¸™à¸•à¹Œ à¸à¸£à¸¸à¸“าà¹à¸ˆà¹‰à¸‡à¹„ด้ที่ bugs.owncloud.org"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "à¹à¸à¹‰à¹„ขชื่อ"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "ยังไม่ได้เลือà¸à¹„ฟล์ำสำหรับอัพโหลด"
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "ไฟล์ที่คุณà¸à¸³à¸¥à¸±à¸‡à¸žà¸¢à¸²à¸¢à¸²à¸¡à¸—ี่จะอัพโหลดมีขนาดเà¸à¸´à¸™à¸ˆà¸³à¸™à¸§à¸™à¸ªà¸¹à¸‡à¸ªà¸¸à¸”ที่สามารถอัพโหลดได้สำหรับเซิร์ฟเวอร์นี้"
-#: js/contacts.js:1119
-msgid "Select photo"
-msgstr ""
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¹‚หลดรูปภาพประจำตัว"
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
+msgstr "เลือà¸à¸Šà¸™à¸´à¸”"
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "วางไฟล์ VCF ที่ต้องà¸à¸²à¸£à¸™à¸³à¹€à¸‚้าข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ"
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr "ข้อมูลผู้ติดต่อบางรายà¸à¸²à¸£à¹„ด้ถูà¸à¸—ำเครื่องหมายสำหรับลบทิ้งเอาไว้, à¹à¸•à¹ˆà¸¢à¸±à¸‡à¹„ม่ได้ถูà¸à¸¥à¸šà¸—ิ้ง, à¸à¸£à¸¸à¸“ารอให้รายà¸à¸²à¸£à¸”ังà¸à¸¥à¹ˆà¸²à¸§à¸–ูà¸à¸¥à¸šà¸—ิ้งเสียà¸à¹ˆà¸­à¸™"
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
-msgstr ""
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr "คุณต้องà¸à¸²à¸£à¸œà¸ªà¸²à¸™à¸‚้อมูลสมุดบันทึà¸à¸—ี่อยู่เหล่านี้หรือไม่?"
-#: js/contacts.js:1476
-msgid "OK"
-msgstr ""
+#: js/loader.js:49
+msgid "Result: "
+msgstr "ผลลัพธ์: "
-#: js/contacts.js:1494
+#: js/loader.js:49
+msgid " imported, "
+msgstr " นำเข้าข้อมูลà¹à¸¥à¹‰à¸§, "
+
+#: js/loader.js:49
+msgid " failed."
+msgstr " ล้มเหลว."
+
+#: js/settings.js:68
msgid "Displayname cannot be empty."
-msgstr ""
+msgstr "ชื่อที่ใช้à¹à¸ªà¸”งไม่สามารถเว้นว่างได้"
-#: js/contacts.js:1634
-msgid "Upload too large"
-msgstr ""
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr "ไม่พบสมุดบันทึà¸à¸—ี่อยู่ที่ต้องà¸à¸²à¸£"
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "นี่ไม่ใช่สมุดบันทึà¸à¸—ี่อยู่ของคุณ"
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "ไม่พบข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ"
+
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "ไม่พบสมุดบันทึà¸à¸—ี่อยู่ที่ต้องà¸à¸²à¸£"
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "นี่ไม่ใช่สมุดบันทึà¸à¸—ี่อยู่ของคุณ"
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "ไม่พบข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ"
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "ที่อยู่"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "โทรศัพท์"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "อีเมล์"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "หน่วยงาน"
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "ที่ทำงาน"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "บ้าน"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr "อื่นๆ"
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "มือถือ"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "ข้อความ"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "เสียงพูด"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "ข้อความ"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "โทรสาร"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "วีดีโอ"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "เพจเจอร์"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "อินเทอร์เน็ต"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "วันเà¸à¸´à¸”"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr "ธุรà¸à¸´à¸ˆ"
+
+#: lib/app.php:254
+msgid "Call"
+msgstr "โทร"
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr "ลูà¸à¸„้า"
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr "ผู้จัดส่ง"
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr "วันหยุด"
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr "ไอเดีย"
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr "à¸à¸²à¸£à¹€à¸”ินทาง"
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr "งานเฉลิมฉลอง"
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr "ประชุม"
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr "ส่วนตัว"
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr "โปรเจค"
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr "คำถาม"
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "วันเà¸à¸´à¸”ของ {name}"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "ข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "เพิ่มรายชื่อผู้ติดต่อใหม่"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "นำเข้า"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr "ตั้งค่า"
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "สมุดบันทึà¸à¸—ี่อยู่"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "à¸à¸³à¸«à¸™à¸”ค่าสมุดบันทึà¸à¸—ี่อยู่"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "ปิด"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "สร้างสมุดบันทึà¸à¸‚้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อใหม่"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr "ปุ่มลัด"
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "นำเข้าจาภVCF"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr "ระบบเมนู"
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "ลิงค์ CardDav"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr "ข้อมูลผู้ติดต่อถัดไปในรายà¸à¸²à¸£"
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "ดาวน์โหลด"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr "ข้อมูลผู้ติดต่อà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¹ƒà¸™à¸£à¸²à¸¢à¸à¸²à¸£"
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "à¹à¸à¹‰à¹„ข"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr "ขยาย/ย่อ สมุดบันทึà¸à¸—ี่อยู่ปัจจุบัน"
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "ลบ"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr "สมุดบันทึà¸à¸—ี่อยู่ถัดไป"
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "ดาวน์โหลดข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr "สมุดบันทึà¸à¸—ี่อยู่à¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²"
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "ลบข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ"
+#: templates/index.php:54
+msgid "Actions"
+msgstr "à¸à¸²à¸£à¸à¸£à¸°à¸—ำ"
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr "รีเฟรชรายชื่อผู้ติดต่อใหม่"
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr "เพิ่มข้อมูลผู้ติดต่อใหม่"
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr "เพิ่มสมุดบันทึà¸à¸—ี่อยู่ใหม่"
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr "ลบข้อมูลผู้ติดต่อปัจจุบัน"
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "วางรูปภาพที่ต้องà¸à¸²à¸£à¸­à¸±à¸žà¹‚หลด"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "ลบรูปภาพปัจจุบัน"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "à¹à¸à¹‰à¹„ขรูปภาพปัจจุบัน"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "อัพโหลดรูปภาพใหม่"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "เลือà¸à¸£à¸¹à¸›à¸ à¸²à¸žà¸ˆà¸²à¸ ownCloud"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr "à¸à¸³à¸«à¸™à¸”รูปà¹à¸šà¸šà¸‚องชื่อย่อ, ชื่อจริง, ย้อนค่าà¸à¸¥à¸±à¸µà¸šà¸”้วยคอมม่าเอง"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "à¹à¸à¹‰à¹„ขรายละเอียดของชื่อ"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "หน่วยงาน"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "ลบ"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "ชื่อเล่น"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "à¸à¸£à¸­à¸à¸Šà¸·à¹ˆà¸­à¹€à¸¥à¹ˆà¸™"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "วันเà¸à¸´à¸”"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr "เว็บไซต์"
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr "http://www.somesite.com"
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr "ไปที่เว็บไซต์"
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "dd-mm-yyyy"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "à¸à¸¥à¸¸à¹ˆà¸¡"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "คั่นระหว่างรายชื่อà¸à¸¥à¸¸à¹ˆà¸¡à¸”้วยเครื่องหมายจุลภาีคหรือคอมม่า"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "à¹à¸à¹‰à¹„ขà¸à¸¥à¸¸à¹ˆà¸¡"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "พิเศษ"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "à¸à¸£à¸¸à¸“าระบุที่อยู่อีเมลที่ถูà¸à¸•à¹‰à¸­à¸‡"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "à¸à¸£à¸­à¸à¸—ี่อยู่อีเมล"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "ส่งอีเมลไปที่"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "ลบที่อยู่อีเมล"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "à¸à¸£à¸­à¸à¸«à¸¡à¸²à¸¢à¹€à¸¥à¸‚โทรศัพท์"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "ลบหมายเลขโทรศัพท์"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "ดูบนà¹à¸œà¸™à¸—ี่"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "à¹à¸à¹‰à¹„ขรายละเอียดที่อยู่"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "เพิ่มหมายเหตุà¸à¸³à¸à¸±à¸šà¹„ว้ที่นี่"
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "เพิ่มช่องรับข้อมูล"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "รูปภาพโปรไฟล์"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "โทรศัพท์"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "หมายเหตุ"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "อีเมล์"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "ลบรูปภาพปัจจุบัน"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "à¹à¸à¹‰à¹„ขรูปภาพปัจจุบัน"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "ที่อยู่"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "อัพโหลดรูปภาพใหม่"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "หมายเหตุ"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "เลือà¸à¸£à¸¹à¸›à¸ à¸²à¸žà¸ˆà¸²à¸ ownCloud"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "ดาวน์โหลดข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ"
-#: templates/part.cropphoto.php:64
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "ลบข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ"
+
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "รูปภาพชั่วคราวดังà¸à¸¥à¹ˆà¸²à¸§à¹„ด้ถูà¸à¸¥à¸šà¸­à¸­à¸à¸ˆà¸²à¸à¸«à¸™à¹ˆà¸§à¸¢à¸„วามจำà¹à¸„ชà¹à¸¥à¹‰à¸§"
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "à¹à¸à¹‰à¹„ขที่อยู่"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "ประเภท"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "ตู้ ปณ."
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr "ที่อยู่"
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr "ถนนà¹à¸¥à¸°à¸«à¸¡à¸²à¸¢à¹€à¸¥à¸‚"
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "เพิ่ม"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "ถนน"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr "หมายเลขอพาร์ทเมนต์ ฯลฯ"
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "เมือง"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "ภูมิภาค"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr "เช่น รัภหรือ จังหวัด"
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "รหัสไปรษณีย์"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr "รหัสไปรษณีย์"
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "ประเทศ"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "à¹à¸à¹‰à¹„ขหมวดหมู่"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "เพิ่ม"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "สมุดบันทึà¸à¸—ี่อยู่"
@@ -720,35 +853,6 @@ msgstr "จูเนียร์"
msgid "Sn."
msgstr "ซีเนียร์"
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "สร้างสมุดบันทึà¸à¸—ี่อยู่ใหม่"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "à¹à¸à¹‰à¹„ขสมุดบันทึà¸à¸—ี่อยู่"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "ชื่อที่ต้องà¸à¸²à¸£à¹ƒà¸«à¹‰à¹à¸ªà¸”ง"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "เปิดใช้"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "บันทึà¸"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "ส่งข้อมูล"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "ยà¸à¹€à¸¥à¸´à¸"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "นำเข้าไฟล์ข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ"
@@ -765,57 +869,86 @@ msgstr "สร้างสมุดบันทึà¸à¸—ี่อยู่ให
msgid "Name of new addressbook"
msgstr "à¸à¸³à¸«à¸™à¸”ชื่อของสมุดที่อยู่ที่สร้างใหม่"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "นำเข้า"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "นำเข้าข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อ"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "เลือà¸à¸ªà¸¡à¸¸à¸”บันทึà¸à¸—ี่อยู่ที่ต้องà¸à¸²à¸£à¸™à¸³à¹€à¸‚้า:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "เลือà¸à¸ˆà¸²à¸à¸®à¸²à¸£à¹Œà¸”ดิส"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "คุณยังไม่มีข้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อใดๆในสมุดบันทึà¸à¸—ี่อยู่ของคุณ"
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "เพิ่มชื่อผู้ติดต่อ"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "à¸à¸³à¸«à¸™à¸”ค่าสมุดบันทึà¸à¸—ี่อยู่"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr "เลือà¸à¸ªà¸¡à¸¸à¸”บันทึà¸à¸—ี่อยู่"
-#: templates/settings.php:4
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr "à¸à¸£à¸­à¸à¸Šà¸·à¹ˆà¸­"
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr "à¸à¸£à¸­à¸à¸„ำอธิบาย"
+
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "ที่อยู่ที่ใช้เชื่อมข้อมูลà¸à¸±à¸š CardDAV"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "ข้อมูลเพิ่มเติม"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "ที่อยู่หลัภ(สำหรับติดต่อ)"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr "à¹à¸ªà¸”งลิงà¸à¹Œ CardDav"
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr "à¹à¸ªà¸”งลิงà¸à¹Œ VCF สำหรับอ่านเท่านั้น"
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr "à¹à¸Šà¸£à¹Œ"
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "ดาวน์โหลด"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "à¹à¸à¹‰à¹„ข"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "สร้างสมุดบันทึà¸à¸‚้อมูลà¸à¸²à¸£à¸•à¸´à¸”ต่อใหม่"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr "ชื่อ"
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr "คำอธิบาย"
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "บันทึà¸"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "ยà¸à¹€à¸¥à¸´à¸"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr "เพิ่มเติม..."
diff --git a/l10n/th_TH/core.po b/l10n/th_TH/core.po
index 43e255b71f5..4a078f83302 100644
--- a/l10n/th_TH/core.po
+++ b/l10n/th_TH/core.po
@@ -9,10 +9,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Thai (Thailand) (http://www.transifex.net/projects/p/owncloud/language/th_TH/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -33,85 +33,85 @@ msgstr "หมวดหมู่นี้มีอยู่à¹à¸¥à¹‰à¸§: "
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "ตั้งค่า"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "มà¸à¸£à¸²à¸„ม"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "มีนาคม"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "เมษายน"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "พฤษภาคม"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "มิถุนายน"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "à¸à¸£à¸à¸à¸²à¸„ม"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "สิงหาคม"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "à¸à¸±à¸™à¸¢à¸²à¸¢à¸™"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "ตุลาคม"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "พฤศจิà¸à¸²à¸¢à¸™"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "ธันวาคม"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "ยà¸à¹€à¸¥à¸´à¸"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "ไม่ตà¸à¸¥à¸‡"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "ตà¸à¸¥à¸‡"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "ตà¸à¸¥à¸‡"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "ยังไม่ได้เลือà¸à¸«à¸¡à¸§à¸”หมู่ที่ต้องà¸à¸²à¸£à¸¥à¸š"
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "พบข้อผิดพลาด"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "เปลี่ยนรหัสผ่านใน Owncloud"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "รีเซ็ตรหัสผ่าน ownCloud"
@@ -241,14 +241,10 @@ msgstr "ติดตั้งเรียบร้อยà¹à¸¥à¹‰à¸§"
msgid "web services under your control"
msgstr "web services under your control"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "ออà¸à¸ˆà¸²à¸à¸£à¸°à¸šà¸š"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "ตั้งค่า"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "ลืมรหัสผ่าน?"
diff --git a/l10n/th_TH/files.po b/l10n/th_TH/files.po
index 5e8c76459a6..773e125153f 100644
--- a/l10n/th_TH/files.po
+++ b/l10n/th_TH/files.po
@@ -9,43 +9,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Thai (Thailand) (http://www.transifex.net/projects/p/owncloud/language/th_TH/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "ไม่มีข้อผิดพลาดใดๆ ไฟล์ถูà¸à¸­à¸±à¸žà¹‚หลดเรียบร้อยà¹à¸¥à¹‰à¸§"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "ไฟล์ที่อัพโหลดมีขนาดเà¸à¸´à¸™à¸„ำสั่ง upload_max_filesize ที่ระบุเอาไว้ในไฟล์ php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "ไฟล์ที่อัพโหลดยังไม่ได้ถูà¸à¸­à¸±à¸žà¹‚หลดอย่างสมบูรณ์"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "ยังไม่มีไฟล์ที่ถูà¸à¸­à¸±à¸žà¹‚หลด"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "à¹à¸Ÿà¹‰à¸¡à¹€à¸­à¸à¸ªà¸²à¸£à¸Šà¸±à¹ˆà¸§à¸„ราวเà¸à¸´à¸”à¸à¸²à¸£à¸ªà¸¹à¸à¸«à¸²à¸¢"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "เขียนข้อมูลลงà¹à¸œà¹ˆà¸™à¸”ิสà¸à¹Œà¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§"
@@ -53,57 +53,85 @@ msgstr "เขียนข้อมูลลงà¹à¸œà¹ˆà¸™à¸”ิสà¸à¹Œà¸¥à¹‰
msgid "Files"
msgstr "ไฟล์"
-#: js/filelist.js:186
-msgid "undo deletion"
-msgstr ""
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "ลบ"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "มีอยู่à¹à¸¥à¹‰à¸§"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "à¹à¸—นที่"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "ยà¸à¹€à¸¥à¸´à¸"
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "à¹à¸—นที่à¹à¸¥à¹‰à¸§"
-#: js/files.js:170
+#: js/filelist.js:195
+msgid "with"
+msgstr "à¸à¸±à¸š"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "เลิà¸à¸—ำ"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "ลบà¹à¸¥à¹‰à¸§"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡à¹„ฟล์บีบอัด ZIP อาจใช้เวลาสัà¸à¸„รู่"
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "ไม่สามารถอัพโหลดไฟล์ของคุณได้ เนื่องจาà¸à¹„ฟล์ดังà¸à¸¥à¹ˆà¸²à¸§à¹€à¸›à¹‡à¸™à¹„ดเร็à¸à¸—อรี่หรือมีขนาด 0 ไบต์"
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸­à¸±à¸žà¹‚หลด"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "อยู่ระหว่างดำเนินà¸à¸²à¸£"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "à¸à¸²à¸£à¸­à¸±à¸žà¹‚หลดถูà¸à¸¢à¸à¹€à¸¥à¸´à¸"
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "ชื่อที่ใช้ไม่ถูà¸à¸•à¹‰à¸­à¸‡ '/' ไม่อนุà¸à¸²à¸•à¹ƒà¸«à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™"
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "ขนาด"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "ปรับปรุงล่าสุด"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "โฟลเดอร์"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "โฟลเดอร์"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "ไฟล์"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "ไฟล์"
#: templates/admin.php:5
msgid "File handling"
@@ -173,10 +201,6 @@ msgstr "à¹à¸Šà¸£à¹Œ"
msgid "Download"
msgstr "ดาวน์โหลด"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "ลบ"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "ไฟล์ที่อัพโหลดมีขนาดใหà¸à¹ˆà¹€à¸à¸´à¸™à¹„ป"
diff --git a/l10n/th_TH/files_encryption.po b/l10n/th_TH/files_encryption.po
new file mode 100644
index 00000000000..f396eed4dab
--- /dev/null
+++ b/l10n/th_TH/files_encryption.po
@@ -0,0 +1,35 @@
+# 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>, 2012.
+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"
+"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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr "à¸à¸²à¸£à¹€à¸‚้ารหัส"
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr "ไม่ต้องรวมชนิดของไฟล์ดังต่อไปนี้จาà¸à¸à¸²à¸£à¹€à¸‚้ารหัส"
+
+#: templates/settings.php:5
+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
new file mode 100644
index 00000000000..2ba0dcb2652
--- /dev/null
+++ b/l10n/th_TH/files_external.po
@@ -0,0 +1,83 @@
+# 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>, 2012.
+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:35+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: th_TH\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr "พื้นทีจัดเà¸à¹‡à¸šà¸‚้อมูลจาà¸à¸ à¸²à¸¢à¸™à¸­à¸"
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr "จุดชี้ตำà¹à¸«à¸™à¹ˆà¸‡"
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr "ด้านหลังระบบ"
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr "à¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่า"
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr "ตัวเลือà¸"
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr "สามารถใช้งานได้"
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr "เพิ่มจุดชี้ตำà¹à¸«à¸™à¹ˆà¸‡"
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr "ยังไม่มีà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”"
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr "ผู้ใช้งานทั้งหมด"
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr "à¸à¸¥à¸¸à¹ˆà¸¡"
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr "ผู้ใช้งาน"
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr "ลบ"
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr "ใบรับรองความปลอดภัยด้วยระบบ SSL จาภRoot"
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr "นำเข้าข้อมูลใบรับรองความปลอดภัยจาภRoot"
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr "เปิดให้มีà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸žà¸·à¹‰à¸™à¸—ี่จัดเà¸à¹‡à¸šà¸‚้อมูลของผู้ใช้งานจาà¸à¸ à¸²à¸¢à¸™à¸­à¸à¹„ด้"
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr "อนุà¸à¸²à¸•à¹ƒà¸«à¹‰à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸ªà¸²à¸¡à¸²à¸£à¸–ชี้ตำà¹à¸«à¸™à¹ˆà¸‡à¹„ปที่พื้นที่จัดเà¸à¹‡à¸šà¸‚้อมูลภายนอà¸à¸‚องตนเองได้"
diff --git a/l10n/th_TH/files_sharing.po b/l10n/th_TH/files_sharing.po
new file mode 100644
index 00000000000..6e5fafa72c6
--- /dev/null
+++ b/l10n/th_TH/files_sharing.po
@@ -0,0 +1,35 @@
+# 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>, 2012.
+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-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr "ขนาด"
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr "à¹à¸à¹‰à¹„ขà¹à¸¥à¹‰à¸§"
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr "ลบทั้งหมด"
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr "ลบ"
diff --git a/l10n/th_TH/files_versions.po b/l10n/th_TH/files_versions.po
new file mode 100644
index 00000000000..4bab33ad9f7
--- /dev/null
+++ b/l10n/th_TH/files_versions.po
@@ -0,0 +1,27 @@
+# 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>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-15 02:03+0200\n"
+"PO-Revision-Date: 2012-08-14 13:11+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: th_TH\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr "หมดอายุทุà¸à¸£à¸¸à¹ˆà¸™"
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr "เปิดใช้งานคุณสมบัติà¸à¸²à¸£à¹à¸¢à¸à¸ªà¸–านะรุ่นหรือเวอร์ชั่นของไฟล์"
diff --git a/l10n/th_TH/gallery.po b/l10n/th_TH/gallery.po
index 1a8ef7a619a..d442789187d 100644
--- a/l10n/th_TH/gallery.po
+++ b/l10n/th_TH/gallery.po
@@ -9,88 +9,32 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Thai (Thailand) (http://www.transifex.net/projects/p/owncloud/language/th_TH/)\n"
+"POT-Creation-Date: 2012-08-15 02:03+0200\n"
+"PO-Revision-Date: 2012-08-14 12: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"
"Content-Transfer-Encoding: 8bit\n"
"Language: th_TH\n"
"Plural-Forms: nplurals=1; plural=0\n"
-#: appinfo/app.php:37
+#: appinfo/app.php:39
msgid "Pictures"
msgstr "รูปภาพ"
-#: js/album_cover.js:44
+#: js/pictures.js:12
msgid "Share gallery"
-msgstr ""
+msgstr "à¹à¸Šà¸£à¹Œà¸‚้อมูลà¹à¸à¸¥à¸­à¸£à¸µà¹ˆ"
-#: js/album_cover.js:64 js/album_cover.js:100 js/album_cover.js:133
+#: js/pictures.js:32
msgid "Error: "
-msgstr ""
+msgstr "พบข้อผิดพลาด: "
-#: js/album_cover.js:64 js/album_cover.js:100
+#: js/pictures.js:32
msgid "Internal error"
-msgstr ""
-
-#: js/album_cover.js:114
-msgid "Scanning root"
-msgstr ""
-
-#: js/album_cover.js:115
-msgid "Default order"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Ascending"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Descending"
-msgstr ""
-
-#: js/album_cover.js:117 templates/index.php:19
-msgid "Settings"
-msgstr "ตั้งค่า"
-
-#: js/album_cover.js:122
-msgid "Scanning root cannot be empty"
-msgstr ""
-
-#: js/album_cover.js:122 js/album_cover.js:133
-msgid "Error"
-msgstr ""
-
-#: templates/index.php:16
-msgid "Rescan"
-msgstr "ตรวจสอบอีà¸à¸„รั้ง"
-
-#: templates/index.php:17
-msgid "Stop"
-msgstr "หยุด"
-
-#: templates/index.php:18
-msgid "Share"
-msgstr "à¹à¸Šà¸£à¹Œ"
-
-#: templates/view_album.php:19
-msgid "Back"
-msgstr "ย้อนà¸à¸¥à¸±à¸š"
-
-#: templates/view_album.php:36
-msgid "Remove confirmation"
-msgstr "à¸à¸²à¸£à¸¢à¸·à¸™à¸¢à¸±à¸™à¸à¸²à¸£à¸¥à¸š"
-
-#: templates/view_album.php:37
-msgid "Do you want to remove album"
-msgstr "คุณต้องà¸à¸²à¸£à¸¥à¸šà¸­à¸±à¸¥à¸šà¸±à¹‰à¸¡à¸­à¸­à¸à¸«à¸£à¸·à¸­à¹„ม่"
-
-#: templates/view_album.php:40
-msgid "Change album name"
-msgstr "เปลี่ยนชื่ออัลบั้ม"
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดภายในระบบ"
-#: templates/view_album.php:43
-msgid "New album name"
-msgstr "ชื่อใหม่ของอัลบั้ม"
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr "ภาพสไลด์โชว์"
diff --git a/l10n/th_TH/lib.po b/l10n/th_TH/lib.po
new file mode 100644
index 00000000000..57847a06f6d
--- /dev/null
+++ b/l10n/th_TH/lib.po
@@ -0,0 +1,113 @@
+# 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>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-15 02:03+0200\n"
+"PO-Revision-Date: 2012-08-14 13:40+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: th_TH\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: app.php:288
+msgid "Help"
+msgstr "ช่วยเหลือ"
+
+#: app.php:295
+msgid "Personal"
+msgstr "ส่วนตัว"
+
+#: app.php:300
+msgid "Settings"
+msgstr "ตั้งค่า"
+
+#: app.php:305
+msgid "Users"
+msgstr "ผู้ใช้งาน"
+
+#: app.php:312
+msgid "Apps"
+msgstr "à¹à¸­à¸›à¸¯"
+
+#: app.php:314
+msgid "Admin"
+msgstr "ผู้ดูà¹à¸¥"
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr "คุณสมบัติà¸à¸²à¸£à¸”าวน์โหลด zip ถูà¸à¸›à¸´à¸”à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹„ว้"
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr "ไฟล์สามารถดาวน์โหลดได้ทีละครั้งเท่านั้น"
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr "à¸à¸¥à¸±à¸šà¹„ปที่ไฟล์"
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr "ไฟล์ที่เลือà¸à¸¡à¸µà¸‚นาดใหà¸à¹ˆà¹€à¸à¸´à¸™à¸à¸§à¹ˆà¸²à¸—ี่จะสร้างเป็นไฟล์ zip"
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr "à¹à¸­à¸žà¸žà¸¥à¸´à¹€à¸„ชั่นดังà¸à¸¥à¹ˆà¸²à¸§à¸¢à¸±à¸‡à¹„ม่ได้เปิดใช้งาน"
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดในสิทธิ์à¸à¸²à¸£à¹€à¸‚้าใช้งาน"
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr "รหัสยืนยันความถูà¸à¸•à¹‰à¸­à¸‡à¸«à¸¡à¸”อายุà¹à¸¥à¹‰à¸§ à¸à¸£à¸¸à¸“าโหลดหน้าเว็บใหม่อีà¸à¸„รั้ง"
+
+#: template.php:86
+msgid "seconds ago"
+msgstr "วินาทีที่ผ่านมา"
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr "1 นาทีมาà¹à¸¥à¹‰à¸§"
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr "%d นาทีที่ผ่านมา"
+
+#: template.php:91
+msgid "today"
+msgstr "วันนี้"
+
+#: template.php:92
+msgid "yesterday"
+msgstr "เมื่อวานนี้"
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr "%d วันที่ผ่านมา"
+
+#: template.php:94
+msgid "last month"
+msgstr "เดือนที่à¹à¸¥à¹‰à¸§"
+
+#: template.php:95
+msgid "months ago"
+msgstr "เดือนมาà¹à¸¥à¹‰à¸§"
+
+#: template.php:96
+msgid "last year"
+msgstr "ปีที่à¹à¸¥à¹‰à¸§"
+
+#: template.php:97
+msgid "years ago"
+msgstr "ปีที่ผ่านมา"
diff --git a/l10n/th_TH/settings.po b/l10n/th_TH/settings.po
index b753a751502..f2de2ffdc5c 100644
--- a/l10n/th_TH/settings.po
+++ b/l10n/th_TH/settings.po
@@ -10,77 +10,109 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Thai (Thailand) (http://www.transifex.net/projects/p/owncloud/language/th_TH/)\n"
+"POT-Creation-Date: 2012-08-20 02:01+0200\n"
+"PO-Revision-Date: 2012-08-19 15:11+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"
"Content-Transfer-Encoding: 8bit\n"
"Language: th_TH\n"
"Plural-Forms: nplurals=1; plural=0\n"
+#: ajax/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "ไม่สามารถโหลดรายà¸à¸²à¸£à¸ˆà¸²à¸ App Store ได้"
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "อีเมลถูà¸à¸šà¸±à¸™à¸—ึà¸à¹à¸¥à¹‰à¸§"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "อีเมลไม่ถูà¸à¸•à¹‰à¸­à¸‡"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "เปลี่ยนชื่อบัà¸à¸Šà¸µ OpenID à¹à¸¥à¹‰à¸§"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "คำร้องขอไม่ถูà¸à¸•à¹‰à¸­à¸‡"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸ªà¸´à¸—ธิ์à¸à¸²à¸£à¹€à¸‚้าใช้งาน"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "เปลี่ยนภาษาเรียบร้อยà¹à¸¥à¹‰à¸§"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "ข้อผิดพลาด"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "ปิดใช้งาน"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "เปิดใช้งาน"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¸šà¸±à¸™à¸—ึุà¸à¸‚้อมูล..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "ภาษาไทย"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "คำเตือนเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸„วามปลอดภัย"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "Cron"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr "ประมวลผลหนึ่งงานเมื่อโหลดหน้าเว็บà¹à¸•à¹ˆà¸¥à¸°à¸„รั้ง"
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr "cron.php ได้ถูà¸à¸¥à¸‡à¸—ะเบียนที่บริà¸à¸²à¸£ webcron"
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr "ใช้บริà¸à¸²à¸£ cron จาà¸à¸£à¸°à¸šà¸š"
+
+#: templates/admin.php:39
msgid "Log"
msgstr "บันทึà¸à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "เพิ่มเติม"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "เพิ่มà¹à¸­à¸›à¸‚องคุณ"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "เลือภApp"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "ดูหน้าà¹à¸­à¸žà¸žà¸¥à¸´à¹€à¸„ชั่นที่ apps.owncloud.com"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-ได้รับอนุà¸à¸²à¸•à¸´à¹à¸¥à¹‰à¸§"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "โดย"
@@ -172,34 +204,38 @@ msgstr "ช่วยà¸à¸±à¸™à¹à¸›à¸¥"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "ใช้ที่อยู่นี้ในà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸à¸±à¸šà¸šà¸±à¸à¸Šà¸µ ownCloud ของคุณในเครื่องมือจัดà¸à¸²à¸£à¹„ฟล์ของคุณ"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "ชื่อ"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "รหัสผ่าน"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "à¸à¸¥à¸¸à¹ˆà¸¡"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "สร้าง"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "โควต้าที่à¸à¸³à¸«à¸™à¸”ไว้เริ่มต้น"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "อื่นๆ"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr "ผู้ดูà¹à¸¥à¸à¸¥à¸¸à¹ˆà¸¡"
+
+#: templates/users.php:82
msgid "Quota"
msgstr "พื้นที่"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "ลบ"
diff --git a/l10n/th_TH/tasks.po b/l10n/th_TH/tasks.po
new file mode 100644
index 00000000000..7d450237645
--- /dev/null
+++ b/l10n/th_TH/tasks.po
@@ -0,0 +1,107 @@
+# 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>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-15 02:03+0200\n"
+"PO-Revision-Date: 2012-08-14 15:26+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: th_TH\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ajax/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr "วันที่ / เวลา ไม่ถูà¸à¸•à¹‰à¸­à¸‡"
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr "งาน"
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr "ไม่มีหมวดหมู่"
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr "ยังไม่ได้ระบุ"
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr "1=สูงสุด"
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr "5=ปานà¸à¸¥à¸²à¸‡"
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr "9=ต่ำสุด"
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr "ข้อมูลสรุปยังว่างอยู่"
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr "สัดส่วนเปอร์เซ็นต์ความสมบูรณ์ไม่ถูà¸à¸•à¹‰à¸­à¸‡"
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr "ความสำคัà¸à¹„ม่ถูà¸à¸•à¹‰à¸­à¸‡"
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr "เพิ่มงานใหม่"
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr "จัดเรียงตามà¸à¸³à¸«à¸™à¸”เวลา"
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr "จัดเรียงตามรายชื่อ"
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr "จัดเรียงตามความสมบูรณ์"
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr "จัดเรียงตามตำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่อยู่"
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr "จัดเรียงตามระดับความสำคัà¸"
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr "จัดเรียงตามป้ายชื่อ"
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¹‚หลดข้อมูลงาน..."
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr "สำคัà¸"
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr "มาà¸"
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr "น้อย"
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr "ลบ"
diff --git a/l10n/th_TH/user_ldap.po b/l10n/th_TH/user_ldap.po
new file mode 100644
index 00000000000..b87bd07fa5c
--- /dev/null
+++ b/l10n/th_TH/user_ldap.po
@@ -0,0 +1,165 @@
+# 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>, 2012.
+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 18:47+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: th_TH\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr "โฮสต์"
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr "คุณสามารถปล่อยช่องโปรโตคอลเว้นไว้ได้, ยà¸à¹€à¸§à¹‰à¸™à¸à¸£à¸“ีที่คุณต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰ SSL จาà¸à¸™à¸±à¹‰à¸™à¹€à¸£à¸´à¹ˆà¸¡à¸•à¹‰à¸™à¸”้วย ldaps://"
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr "DN à¸à¸²à¸™"
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr "คุณสามารถระบุ DN หลัà¸à¸ªà¸³à¸«à¸£à¸±à¸šà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹à¸¥à¸°à¸à¸¥à¸¸à¹ˆà¸¡à¸•à¹ˆà¸²à¸‡à¹†à¹ƒà¸™à¹à¸—็บขั้นสูงได้"
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr "DN ของผู้ใช้งาน"
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr "รหัสผ่าน"
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr "สำหรับà¸à¸²à¸£à¹€à¸‚้าถึงโดยบุคคลนิรนาม ให้เว้นว่าง DN à¹à¸¥à¸°à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¹„ว้"
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr "ตัวà¸à¸£à¸­à¸‡à¸‚้อมูลà¸à¸²à¸£à¹€à¸‚้าสู่ระบบของผู้ใช้งาน"
+
+#: templates/settings.php:12
+#, 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:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr "ใช้ตัวยึด %%uid, เช่น \"uid=%%uid\""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr "ตัวà¸à¸£à¸­à¸‡à¸‚้อมูลรายชื่อผู้ใช้งาน"
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr "ระบุตัวà¸à¸£à¸­à¸‡à¸‚้อมูลที่ต้องà¸à¸²à¸£à¸™à¸³à¹„ปใช้งาน, เมื่อดึงข้อมูลผู้ใช้งาน"
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr "โดยไม่ต้องมีตัวยึดใดๆ, เช่น \"objectClass=person\","
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr "ตัวà¸à¸£à¸­à¸‡à¸‚้อมูลà¸à¸¥à¸¸à¹ˆà¸¡"
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr "ระบุตัวà¸à¸£à¸­à¸‡à¸‚้อมูลที่ต้องà¸à¸²à¸£à¸™à¸³à¹„ปใช้งาน, เมื่อดึงข้อมูลà¸à¸¥à¸¸à¹ˆà¸¡"
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr "โดยไม่ต้องมีตัวยึดใดๆ, เช่น \"objectClass=posixGroup\","
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr "พอร์ต"
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr "รายà¸à¸²à¸£à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸«à¸¥à¸±à¸à¹à¸šà¸š Tree"
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr "รายà¸à¸²à¸£à¸à¸¥à¸¸à¹ˆà¸¡à¸«à¸¥à¸±à¸à¹à¸šà¸š Tree"
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr "ความสัมพันธ์ของสมาชิà¸à¹ƒà¸™à¸à¸¥à¸¸à¹ˆà¸¡"
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr "ใช้ TLS"
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr "à¸à¸£à¸¸à¸“าอย่าใช้à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¹à¸šà¸š SSL à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•à¹ˆà¸­à¸ˆà¸°à¹€à¸à¸´à¸”à¸à¸²à¸£à¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§"
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr "เซิร์ฟเวอร์ LDAP ประเภท Case insensitive (วินโดวส์)"
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr "ปิดใช้งานà¸à¸²à¸£à¸•à¸£à¸§à¸ˆà¸ªà¸­à¸šà¸„วามถูà¸à¸•à¹‰à¸­à¸‡à¸‚องใบรับรองความปลอดภัย SSL"
+
+#: templates/settings.php:23
+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:23
+msgid "Not recommended, use for testing only."
+msgstr "ไม่à¹à¸™à¸°à¸™à¸³à¹ƒà¸«à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™, ใช้สำหรับà¸à¸²à¸£à¸—ดสอบเท่านั้น"
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr "ช่องà¹à¸ªà¸”งชื่อผู้ใช้งานที่ต้องà¸à¸²à¸£"
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr "คุณลัà¸à¸©à¸“ะ LDAP ที่ต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸ªà¸³à¸«à¸£à¸±à¸šà¸ªà¸£à¹‰à¸²à¸‡à¸Šà¸·à¹ˆà¸­à¸‚องผู้ใช้งาน ownCloud"
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr "ช่องà¹à¸ªà¸”งชื่อà¸à¸¥à¸¸à¹ˆà¸¡à¸—ี่ต้องà¸à¸²à¸£"
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr "คุณลัà¸à¸©à¸“ะ LDAP ที่ต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸ªà¸£à¹‰à¸²à¸‡à¸Šà¸·à¹ˆà¸­à¸à¸¥à¸¸à¹ˆà¸¡à¸‚อง ownCloud"
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr "ในหน่วยไบต์"
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr "ในอีà¸à¹„ม่à¸à¸µà¹ˆà¸§à¸´à¸™à¸²à¸—ี ระบบจะเปลี่ยนà¹à¸›à¸¥à¸‡à¸‚้อมูลในà¹à¸„ชให้ว่างเปล่า"
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr "ช่วยเหลือ"
diff --git a/l10n/th_TH/user_migrate.po b/l10n/th_TH/user_migrate.po
new file mode 100644
index 00000000000..74a5aec4843
--- /dev/null
+++ b/l10n/th_TH/user_migrate.po
@@ -0,0 +1,52 @@
+# 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>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-15 02:03+0200\n"
+"PO-Revision-Date: 2012-08-14 13:37+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: th_TH\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr "ส่งออà¸"
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดบางประà¸à¸²à¸£à¹ƒà¸™à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡à¸à¸²à¸£à¸ªà¹ˆà¸‡à¸­à¸­à¸à¹„ฟล์"
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดบางประà¸à¸²à¸£"
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr "ส่งออà¸à¸šà¸±à¸à¸Šà¸µà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸‚องคุณ"
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr "ส่วนนี้จะเป็นà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹„ฟล์บีบอัดที่บรรจุข้อมูลบัà¸à¸Šà¸µà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ ownCloud ของคุณ"
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr "นำเข้าบัà¸à¸Šà¸µà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™"
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr "ไฟล์ Zip ผู้ใช้งาน ownCloud"
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr "นำเข้า"
diff --git a/l10n/th_TH/user_openid.po b/l10n/th_TH/user_openid.po
new file mode 100644
index 00000000000..7ed74e306ba
--- /dev/null
+++ b/l10n/th_TH/user_openid.po
@@ -0,0 +1,55 @@
+# 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>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-15 02:03+0200\n"
+"PO-Revision-Date: 2012-08-14 13:32+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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: th_TH\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr "นี่คือปลายทางของเซิร์ฟเวอร์ OpenID สำหรับรายละเอียดเพิ่มเติม, à¸à¸£à¸¸à¸“าดูที่"
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr "ข้อมูลประจำตัว <b>"
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr "ขอบเขตพื้นที่ <b>"
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr "ผู้ใช้งาน: <b>"
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr "เข้าสู่ระบบ"
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr "พบข้อผิดพลาด <b> ยังไม่ได้เลือà¸à¸Šà¸·à¹ˆà¸­à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸‡à¸²à¸™"
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr "คุณสามารถได้รับสิทธิ์เพื่อเข้าใช้งานเว็บไซต์อื่นๆโดยใช้ที่อยู่นี้"
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr "ผู้ให้บริà¸à¸²à¸£ OpenID ที่ได้รับอนุà¸à¸²à¸•"
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr "ที่อยู่ของคุณที่ Wordpress, Identi.ca, &hellip;"
diff --git a/l10n/tr/admin_dependencies_chk.po b/l10n/tr/admin_dependencies_chk.po
new file mode 100644
index 00000000000..7a089c19af6
--- /dev/null
+++ b/l10n/tr/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/tr/admin_migrate.po b/l10n/tr/admin_migrate.po
new file mode 100644
index 00000000000..ab3ee34d97f
--- /dev/null
+++ b/l10n/tr/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/tr/bookmarks.po b/l10n/tr/bookmarks.po
new file mode 100644
index 00000000000..34e76f301d8
--- /dev/null
+++ b/l10n/tr/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/tr/calendar.po b/l10n/tr/calendar.po
index 65932f70ee3..0e49a201841 100644
--- a/l10n/tr/calendar.po
+++ b/l10n/tr/calendar.po
@@ -5,26 +5,36 @@
# Translators:
# <ahmet_kaplan@hotmail.com>, 2012.
# Aranel Surion <aranel@aranelsurion.org>, 2011, 2012.
+# Emre <emresaracoglu@live.com>, 2012.
+# <mesutgungor@iyte.edu.tr>, 2012.
# 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-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Turkish (http://www.transifex.net/projects/p/owncloud/language/tr/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr "Bütün takvimler tamamen ön belleğe alınmadı"
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr "Bütün herşey tamamen ön belleğe alınmış görünüyor"
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "Takvim yok."
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "Etkinlik yok."
@@ -32,300 +42,394 @@ msgstr "Etkinlik yok."
msgid "Wrong calendar"
msgstr "Yanlış takvim"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr "Dosya ya hiçbir etkinlik içermiyor veya bütün etkinlikler takviminizde zaten saklı."
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr "Etkinlikler yeni takvimde saklandı"
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr "İçeri aktarma başarısız oldu."
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr "Etkinlikler takviminizde saklandı"
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Yeni Zamandilimi:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "Zaman dilimi deÄŸiÅŸtirildi"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "Geçersiz istek"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Takvim"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
-msgstr ""
+msgstr "ddd M/d"
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
-msgstr ""
+msgstr "dddd M/d"
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
-msgstr ""
+msgstr "MMMM yyyy"
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "AAA g[ yyyy]{ '&#8212;'[ AAA] g yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
-msgstr ""
+msgstr "dddd, MMM d, yyyy"
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "Doğum günü"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Ä°ÅŸ"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Arama"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Müşteriler"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "Teslimatçı"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "Tatil günleri"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Fikirler"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Seyahat"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Yıl dönümü"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "Toplantı"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "DiÄŸer"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "KiÅŸisel"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Projeler"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "Sorular"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Ä°ÅŸ"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr "hazırlayan"
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "isimsiz"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Yeni Takvim"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Tekrar etmiyor"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Günlük"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "Haftalı"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "Haftaiçi Her gün"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Ä°ki haftada bir"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "Aylık"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Yıllı"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "asla"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "sıklığa göre"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "tarihe göre"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "ay günlerine göre"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "hafta günlerine göre"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Pazartesi"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Salı"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Çarşamba"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "PerÅŸembe"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "Cuma"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Cumartesi"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "Pazar"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "ayın etkinlikler haftası"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "birinci"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "ikinci"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "üçüncü"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "dördüncü"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "beÅŸinci"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "sonuncu"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Ocak"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Åžubat"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Mart"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Nisan"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Mayıs"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Haziran"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Temmuz"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "AÄŸustos"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "Eylül"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Ekim"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "Kasım"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Aralık"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "olay tarihine göre"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "yıl gün(ler)ine göre"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "hafta sayı(lar)ına göre"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "gün ve aya göre"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Tarih"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Takv."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr "Paz."
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr "Pzt."
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr "Sal."
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr "Çar."
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr "Per."
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr "Cum."
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr "Cmt."
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr "Oca."
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr "Åžbt."
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr "Mar."
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr "Nis"
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr "May."
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr "Haz."
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr "Tem."
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr "Agu."
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr "Eyl."
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr "Eki."
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr "Kas."
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr "Ara."
+
#: templates/calendar.php:11
msgid "All day"
msgstr "Tüm gün"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "Yeni Takvim"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "Eksik alanlar"
@@ -359,40 +463,32 @@ msgstr "Olay başlamadan önce bitiyor"
msgid "There was a database fail"
msgstr "Bir veritabanı başarısızlığı oluştu"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Hafta"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "Ay"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "Liste"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Bugün"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Takvimler"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "Dosya okunurken başarısızlık oldu."
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Aktif takvimleri seçin"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "Takvimleriniz"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDav Bağlantısı"
@@ -404,19 +500,19 @@ msgstr "Paylaşılan"
msgid "No shared calendars"
msgstr "Paylaşılan takvim yok"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "Takvimi paylaÅŸ"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Ä°ndir"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Düzenle"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "Sil"
@@ -502,23 +598,23 @@ msgstr "Kategorileri virgülle ayırın"
msgid "Edit categories"
msgstr "Kategorileri düzenle"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "Tüm Gün Olay"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "Kimden"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "Kime"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "GeliÅŸmiÅŸ opsiyonlar"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "Konum"
@@ -526,7 +622,7 @@ msgstr "Konum"
msgid "Location of the Event"
msgstr "Olayın Konumu"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "Açıklama"
@@ -534,84 +630,86 @@ msgstr "Açıklama"
msgid "Description of the Event"
msgstr "Olayın Açıklaması"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Tekrar"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "GeliÅŸmiÅŸ"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "Hafta günlerini seçin"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "Günleri seçin"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "ve yılın etkinlikler günü."
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "ve ayın etkinlikler günü."
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "Ayları seç"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "Haftaları seç"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "ve yılın etkinkinlikler haftası."
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "Aralık"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "Son"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "olaylar"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "Yeni bir takvim oluÅŸtur"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Takvim dosyasını içeri aktar"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "Lütfen takvimi seçin"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "Yeni bir takvim oluÅŸtur"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr "Lütfen takvim seçiniz"
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Yeni takvimin adı"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "İçe Al"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr "Müsait ismi al !"
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "Takvim içe aktarılıyor"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr "Bu isimde bir takvim zaten mevcut. Yine de devam ederseniz bu takvimler birleÅŸtirilecektir."
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Takvim başarıyla içe aktarıldı"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "İçe Al"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "Diyalogu kapat"
@@ -627,45 +725,73 @@ msgstr "Bir olay görüntüle"
msgid "No categories selected"
msgstr "Kategori seçilmedi"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "Kategori seçin"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "nın"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "üzerinde"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "Zaman dilimi"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "Sürekli zaman dilimi değişikliklerini kontrol et"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Saat biçimi"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24s"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12s"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "Haftanın ilk günü"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr "Önbellek"
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr "Tekrar eden etkinlikler için ön belleği temizle."
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr "CalDAV takvimi adresleri senkronize ediyor."
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr "daha fazla bilgi"
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr "Öncelikli adres"
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr "iOS/OS X"
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "CalDAV Takvim eÅŸzamanlama adresi:"
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr "Sadece okunabilir iCalendar link(ler)i"
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/tr/contacts.po b/l10n/tr/contacts.po
index ca306b53c25..8feffd07068 100644
--- a/l10n/tr/contacts.po
+++ b/l10n/tr/contacts.po
@@ -4,642 +4,776 @@
#
# Translators:
# Aranel Surion <aranel@aranelsurion.org>, 2011, 2012.
+# <mesutgungor@iyte.edu.tr>, 2012.
# 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-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Turkish (http://www.transifex.net/projects/p/owncloud/language/tr/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "Adres defteri etkisizleÅŸtirilirken hata oluÅŸtu."
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "KiÅŸi eklenirken hata oluÅŸtu."
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "Boş özellik eklenemiyor."
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "En az bir adres alanı doldurulmalı."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "id atanmamış."
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "Yinelenen özellik eklenmeye çalışılıyor: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "Adres defterini boş bir isimle güncelleyemezsiniz."
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "Kişi özelliği eklenirken hata oluştu."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "Adres defteri güncellenirken hata oluştu."
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "ID verilmedi"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "Ä°mza oluÅŸturulurken hata."
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "Silmek için bir kategori seçilmedi."
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "Adres defteri bulunamadı."
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "Bağlantı bulunamadı."
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "KiÅŸi eklenirken hata oluÅŸtu."
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "eleman ismi atanmamış."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr "Kişi bilgisi ayrıştırılamadı."
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "Boş özellik eklenemiyor."
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "En az bir adres alanı doldurulmalı."
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "Yinelenen özellik eklenmeye çalışılıyor: "
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "vCard bilgileri doğru değil. Lütfen sayfayı yenileyin."
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "Eksik ID"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "ID için VCard ayrıştırılamadı:\""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "Adres defterini isimsiz ekleyemezsiniz."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "checksum atanmamış."
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Adres defteri eklenirken hata oluÅŸtu."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "vCard hakkındaki bilgi hatalı. Lütfen sayfayı yeniden yükleyin: "
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "Adres defteri etkinleÅŸtirilirken hata oluÅŸtu."
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "Bir ÅŸey FUBAR gitti."
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "Bağlantı ID'si girilmedi."
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "Bağlantı fotoğrafı okunamadı."
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "Geçici dosya kaydetme hatası."
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "Yüklenecek fotograf geçerli değil."
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "id atanmamış."
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "vCard bilgileri doğru değil. Lütfen sayfayı yenileyin."
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "Kişi özelliği silinirken hata oluştu."
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "Bağlantı ID'si eksik."
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "Eksik bağlantı id'si."
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "FotoÄŸraf girilmedi."
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "Dosya mevcut deÄŸil:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "İmaj yükleme hatası."
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "Bağlantı nesnesini kaydederken hata."
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "Resim özelleğini alırken hata oluştu."
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "Bağlantıyı kaydederken hata"
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "Görüntü yeniden boyutlandırılamadı."
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "Görüntü kırpılamadı."
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "Geçici resim oluştururken hata oluştu"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr "eleman ismi atanmamış."
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "checksum atanmamış."
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr "vCard hakkındaki bilgi hatalı. Lütfen sayfayı yeniden yükleyin: "
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr "Bir ÅŸey FUBAR gitti."
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "Kişi özelliği güncellenirken hata oluştu."
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr "Adres defterini boş bir isimle güncelleyemezsiniz."
+msgstr "Resim ararken hata oluÅŸtu:"
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "Adres defteri güncellenirken hata oluştu."
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr "Bağlantıları depoya yükleme hatası"
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr "Dosya başarıyla yüklendi, hata oluşmadı"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Dosyanın boyutu php.ini dosyasındaki upload_max_filesize limitini aşıyor"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr "Yüklenecek dosyanın boyutu HTML formunda belirtilen MAX_FILE_SIZE limitini aşıyor"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "Dosya kısmen karşıya yüklenebildi"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "Hiç dosya gönderilmedi"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "Geçici dizin eksik"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "Geçici resmi saklayamadı : "
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "Geçici resmi yükleyemedi :"
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "Dosya yüklenmedi. Bilinmeyen hata"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "KiÅŸiler"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "Üzgünüz, bu özellik henüz tamamlanmadı."
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "Tamamlanmadı."
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "Geçerli bir adres alınamadı."
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "Hata"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "Bu özellik boş bırakılmamalı."
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "Öğeler seri hale getiremedi"
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "'deleteProperty' tip argümanı olmadan çağrıldı. Lütfen bugs.owncloud.org a rapor ediniz."
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "İsmi düzenle"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "Yükleme için dosya seçilmedi."
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "Yüklemeye çalıştığınız dosya sunucudaki dosya yükleme maksimum boyutunu aşmaktadır. "
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
+msgstr "Tür seç"
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
-msgstr "Bağlantıları içe aktarmak için bir VCF dosyası bırakın."
-
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1494
+#: js/loader.js:49
+msgid "Result: "
+msgstr "Sonuç: "
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr " içe aktarıldı, "
+
+#: js/loader.js:49
+msgid " failed."
+msgstr " hatalı."
+
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Bu sizin adres defteriniz deÄŸil."
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "Kişi bulunamadı."
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "Adres defteri bulunamadı."
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Bu sizin adres defteriniz deÄŸil."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "Kişi bulunamadı."
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "Adres"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Telefon"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "Eposta"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "Organizasyon"
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "Ä°ÅŸ"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "Ev"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr "DiÄŸer"
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Mobil"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "Metin"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "Ses"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "mesaj"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "Faks"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Video"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Sayfalayıcı"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "Ä°nternet"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Doğum günü"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr "Ä°ÅŸ"
+
+#: lib/app.php:254
+msgid "Call"
+msgstr "Çağrı"
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr "Müşteriler"
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr "Dağıtıcı"
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr "Tatiller"
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr "Fikirler"
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr "Seyahat"
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr "Yıl Dönümü"
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr "Toplantı"
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr "KiÅŸisel"
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr "Projeler"
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr "Sorular"
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "{name}'nin Doğumgünü"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "KiÅŸi"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "KiÅŸi Ekle"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "İçe aktar"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "Adres defterleri"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "Adres Defterlerini Yapılandır"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "Kapat"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Yeni Adres Defteri"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr "Klavye kısayolları"
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "VCF'den içeri aktar"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr "Dolaşım"
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDav Bağlantısı"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr "Listedeki sonraki kiÅŸi"
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Ä°ndir"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr "Listedeki önceki kişi"
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "Düzenle"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr "Åžuanki adres defterini geniÅŸlet/daralt"
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Sil"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "KiÅŸiyi indir"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "KiÅŸiyi sil"
+#: templates/index.php:54
+msgid "Actions"
+msgstr "Eylemler"
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr "KiÅŸi listesini tazele"
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr "Yeni kiÅŸi ekle"
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr "Yeni adres defteri ekle"
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr "Åžuanki kiÅŸiyi sil"
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "Fotoğrafı yüklenmesi için bırakın"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "Mevcut fotoğrafı sil"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "Mevcut fotoğrafı düzenle"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "Yeni fotoğraf yükle"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "ownCloud'dan bir fotoğraf seç"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr "Biçin özel, Kısa isim, Tam isim, Ters veya noktalı ters"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "İsim detaylarını düzenle"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Organizasyon"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Sil"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "Takma ad"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "Takma adı girin"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "Doğum günü"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr "Web sitesi"
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr "http://www.somesite.com"
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr "Web sitesine git"
-#: templates/part.contact.php:38
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "gg-aa-yyyy"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "Gruplar"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "Grupları birbirinden virgülle ayırın"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "Grupları düzenle"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "Tercih edilen"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "Lütfen geçerli bir eposta adresi belirtin."
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "Eposta adresini girin"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "Eposta adresi"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "Eposta adresini sil"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "Telefon numarasını gir"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "Telefon numarasını sil"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "Haritada gör"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "Adres detaylarını düzenle"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "Notları buraya ekleyin."
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "Alan ekle"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "Profil resmi"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Telefon"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "Not"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "Eposta"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "Mevcut fotoğrafı sil"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "Mevcut fotoğrafı düzenle"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Adres"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "Yeni fotoğraf yükle"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "Not"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "ownCloud'dan bir fotoğraf seç"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "KiÅŸiyi indir"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "KiÅŸiyi sil"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "Geçici resim ön bellekten silinmiştir."
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "Adresi düzenle"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "Tür"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "Posta Kutusu"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr "Sokak adresi"
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr "Sokak ve Numara"
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Uzatılmış"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "Sokak"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr "Apartman numarası vb."
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "Åžehir"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "Bölge"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr "Örn. eyalet veya il"
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Posta kodu"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr "Posta kodu"
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "Ãœlke"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "Kategorileri düzenle"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Ekle"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "Adres defteri"
@@ -720,35 +854,6 @@ msgstr "Jr."
msgid "Sn."
msgstr "Sn."
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "Yeni Adres defteri"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "Adres Defterini Düzenle"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Görünen adı"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "Aktif"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "Kaydet"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "Gönder"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "Ä°ptal"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr "Bağlantı dosyasını içeri aktar"
@@ -765,57 +870,86 @@ msgstr "Yeni adres defteri oluÅŸtur"
msgid "Name of new addressbook"
msgstr "Yeni adres defteri için isim"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "İçe aktar"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "Bağlantıları içe aktar"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
-msgstr "İçe aktarılacak adres defterini seçin:"
-
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
-msgstr "HD'den seç"
-
-#: templates/part.no_contacts.php:2
+#: templates/part.no_contacts.php:3
msgid "You have no contacts in your addressbook."
msgstr "Adres defterinizde hiç bağlantı yok."
-#: templates/part.no_contacts.php:4
+#: templates/part.no_contacts.php:5
msgid "Add contact"
msgstr "Bağlatı ekle"
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "Adres defterini yapılandır"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr "Adres deftelerini seçiniz"
-#: templates/settings.php:4
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr "Ä°sim giriniz"
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr "Tanım giriniz"
+
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "CardDAV adresleri eşzamanlıyor"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "daha fazla bilgi"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "Birincil adres (Bağlantı ve arkadaşları)"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Ä°ndir"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Düzenle"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Yeni Adres Defteri"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "Kaydet"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Ä°ptal"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/tr/core.po b/l10n/tr/core.po
index ac6e6dec29c..06136c97ff9 100644
--- a/l10n/tr/core.po
+++ b/l10n/tr/core.po
@@ -4,14 +4,15 @@
#
# Translators:
# Aranel Surion <aranel@aranelsurion.org>, 2011, 2012.
+# 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-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Turkish (http://www.transifex.net/projects/p/owncloud/language/tr/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -32,85 +33,85 @@ msgstr "Bu kategori zaten mevcut: "
#: js/jquery-ui-1.8.16.custom.min.js:511
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
-msgstr ""
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Ayarlar"
-#: js/js.js:520
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "Ocak"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "Åžubat"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "Mart"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "Nisan"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "Mayıs"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "Haziran"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "Temmuz"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "AÄŸustos"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "Eylül"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "Ekim"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "Kasım"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "Aralık"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "Ä°ptal"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "Hayır"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "Evet"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "Tamam"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "Silmek için bir kategori seçilmedi"
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "Hata"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "Owncloud parola sıfırlama"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "ownCloud parola sıfırlama"
@@ -240,14 +241,10 @@ msgstr "Kurulumu tamamla"
msgid "web services under your control"
msgstr "kontrolünüzdeki web servisleri"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Çıkış yap"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "Ayarlar"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Parolanızı mı unuttunuz?"
diff --git a/l10n/tr/files.po b/l10n/tr/files.po
index 94f7c3d109b..34989501126 100644
--- a/l10n/tr/files.po
+++ b/l10n/tr/files.po
@@ -4,48 +4,49 @@
#
# Translators:
# Aranel Surion <aranel@aranelsurion.org>, 2011, 2012.
+# Emre <emresaracoglu@live.com>, 2012.
# 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-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Turkish (http://www.transifex.net/projects/p/owncloud/language/tr/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Bir hata yok, dosya başarıyla yüklendi"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Yüklenen dosya php.ini de belirtilen upload_max_filesize sınırını aşıyor"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Yüklenen dosyanın sadece bir kısmı yüklendi"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Hiç dosya yüklenmedi"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "Geçici bir klasör eksik"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "Diske yazılamadı"
@@ -53,57 +54,85 @@ msgstr "Diske yazılamadı"
msgid "Files"
msgstr "Dosyalar"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Sil"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
-msgid "generating ZIP-file, it may take some time."
+#: js/filelist.js:141
+msgid "replace"
msgstr ""
-#: js/files.js:199
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/filelist.js:141
+msgid "cancel"
msgstr ""
-#: js/files.js:199
-msgid "Upload Error"
+#: js/filelist.js:195
+msgid "replaced"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
-msgid "Pending"
+#: js/filelist.js:195
+msgid "with"
msgstr ""
-#: js/files.js:332
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "geri al"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "silindi"
+
+#: js/files.js:171
+msgid "generating ZIP-file, it may take some time."
+msgstr "ZIP dosyası oluşturuluyor, biraz sürebilir."
+
+#: js/files.js:200
+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:200
+msgid "Upload Error"
+msgstr "Yükleme hatası"
+
+#: js/files.js:228 js/files.js:319 js/files.js:348
+msgid "Pending"
+msgstr "Bekliyor"
+
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "Yükleme iptal edildi."
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "Geçersiz isim, '/' işaretine izin verilmiyor."
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Boyut"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "DeÄŸiÅŸtirilme"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "dizin"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "dizinler"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "dosya"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "dosyalar"
#: templates/admin.php:5
msgid "File handling"
@@ -173,10 +202,6 @@ msgstr "PaylaÅŸ"
msgid "Download"
msgstr "Ä°ndir"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Sil"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Yüklemeniz çok büyük"
diff --git a/l10n/tr/files_encryption.po b/l10n/tr/files_encryption.po
new file mode 100644
index 00000000000..af47564a459
--- /dev/null
+++ b/l10n/tr/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/tr/files_external.po b/l10n/tr/files_external.po
new file mode 100644
index 00000000000..f72e8d229bc
--- /dev/null
+++ b/l10n/tr/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/tr/files_sharing.po b/l10n/tr/files_sharing.po
new file mode 100644
index 00000000000..3f6c26efdca
--- /dev/null
+++ b/l10n/tr/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/tr/files_versions.po b/l10n/tr/files_versions.po
new file mode 100644
index 00000000000..5b163028452
--- /dev/null
+++ b/l10n/tr/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/tr/gallery.po b/l10n/tr/gallery.po
index d13585d1eb8..b150c44bf8a 100644
--- a/l10n/tr/gallery.po
+++ b/l10n/tr/gallery.po
@@ -5,75 +5,41 @@
# Translators:
# <ahmet_kaplan@hotmail.com>, 2012.
# Aranel Surion <aranel@aranelsurion.org>, 2012.
+# Emre <emresaracoglu@live.com>, 2012.
+# 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-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Turkish (http://www.transifex.net/projects/p/owncloud/language/tr/)\n"
+"POT-Creation-Date: 2012-07-31 22:53+0200\n"
+"PO-Revision-Date: 2012-07-30 09:13+0000\n"
+"Last-Translator: Emre Saraçoğlu <emresaracoglu@live.com>\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"
-#: appinfo/app.php:37
+#: appinfo/app.php:39
msgid "Pictures"
msgstr "Resimler"
-#: js/album_cover.js:44
+#: js/pictures.js:12
msgid "Share gallery"
-msgstr ""
+msgstr "Galeriyi paylaÅŸ"
-#: js/album_cover.js:64 js/album_cover.js:100 js/album_cover.js:133
+#: js/pictures.js:32
msgid "Error: "
-msgstr ""
+msgstr "Hata: "
-#: js/album_cover.js:64 js/album_cover.js:100
+#: js/pictures.js:32
msgid "Internal error"
-msgstr ""
-
-#: js/album_cover.js:114
-msgid "Scanning root"
-msgstr ""
-
-#: js/album_cover.js:115
-msgid "Default order"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Ascending"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Descending"
-msgstr ""
-
-#: js/album_cover.js:117 templates/index.php:19
-msgid "Settings"
-msgstr "Ayarlar"
-
-#: js/album_cover.js:122
-msgid "Scanning root cannot be empty"
-msgstr ""
-
-#: js/album_cover.js:122 js/album_cover.js:133
-msgid "Error"
-msgstr ""
-
-#: templates/index.php:16
-msgid "Rescan"
-msgstr "Yeniden Tara "
-
-#: templates/index.php:17
-msgid "Stop"
-msgstr "Durdur"
+msgstr "İç hata"
-#: templates/index.php:18
-msgid "Share"
-msgstr "PaylaÅŸ"
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr "Slide Gösterim"
#: templates/view_album.php:19
msgid "Back"
diff --git a/l10n/tr/lib.po b/l10n/tr/lib.po
new file mode 100644
index 00000000000..a1b4a5a6642
--- /dev/null
+++ b/l10n/tr/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/tr/settings.po b/l10n/tr/settings.po
index 3ffe00954da..f2a34211a79 100644
--- a/l10n/tr/settings.po
+++ b/l10n/tr/settings.po
@@ -4,81 +4,115 @@
#
# Translators:
# Aranel Surion <aranel@aranelsurion.org>, 2011, 2012.
+# Emre <emresaracoglu@live.com>, 2012.
+# 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-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Turkish (http://www.transifex.net/projects/p/owncloud/language/tr/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "Eposta kaydedildi"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "Geçersiz eposta"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID DeÄŸiÅŸtirildi"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "Geçersiz istek"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "EÅŸleÅŸme hata"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "Dil deÄŸiÅŸtirildi"
-#: js/apps.js:31 js/apps.js:67
-msgid "Disable"
+#: js/apps.js:18
+msgid "Error"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr "Etkin deÄŸil"
+
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "Etkin"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "Kaydediliyor..."
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "__dil_adı__"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "Güvenlik Uyarisi"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr "Günlük"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "Devamı"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "Uygulamanı Ekle"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "Bir uygulama seçin"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "Uygulamanın sayfasına apps.owncloud.com adresinden bakın "
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-lisanslı"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "yapan"
@@ -170,34 +204,38 @@ msgstr "Çevirilere yardım edin"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "bu adresi kullanarak ownCloud unuza dosya yöneticinizle bağlanın"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "Ad"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "Parola"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "Gruplar"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "OluÅŸtur"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "Varsayılan Kota"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "DiÄŸer"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "Kota"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "Sil"
diff --git a/l10n/tr/tasks.po b/l10n/tr/tasks.po
new file mode 100644
index 00000000000..68549f8375b
--- /dev/null
+++ b/l10n/tr/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/tr/user_ldap.po b/l10n/tr/user_ldap.po
new file mode 100644
index 00000000000..de0cb374c3d
--- /dev/null
+++ b/l10n/tr/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/tr/user_migrate.po b/l10n/tr/user_migrate.po
new file mode 100644
index 00000000000..5b31904b2f3
--- /dev/null
+++ b/l10n/tr/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/tr/user_openid.po b/l10n/tr/user_openid.po
new file mode 100644
index 00000000000..6c6f6b5ed5f
--- /dev/null
+++ b/l10n/tr/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/uk/admin_dependencies_chk.po b/l10n/uk/admin_dependencies_chk.po
new file mode 100644
index 00000000000..5fae31131d7
--- /dev/null
+++ b/l10n/uk/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/uk/admin_migrate.po b/l10n/uk/admin_migrate.po
new file mode 100644
index 00000000000..b0ba19c7eb9
--- /dev/null
+++ b/l10n/uk/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/uk/bookmarks.po b/l10n/uk/bookmarks.po
new file mode 100644
index 00000000000..2183661f9f0
--- /dev/null
+++ b/l10n/uk/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/uk/calendar.po b/l10n/uk/calendar.po
index f2eab41a95b..a80f3c9db3e 100644
--- a/l10n/uk/calendar.po
+++ b/l10n/uk/calendar.po
@@ -8,21 +8,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Ukrainian (http://www.transifex.net/projects/p/owncloud/language/uk/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr ""
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr ""
@@ -30,303 +38,397 @@ msgstr ""
msgid "Wrong calendar"
msgstr ""
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "Ðовий чаÑовий поÑÑ"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "ЧаÑовий поÑÑ Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¾"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr ""
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "Календар"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
msgstr ""
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
msgstr ""
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
msgstr ""
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
msgstr ""
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr ""
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "День народженнÑ"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "Справи"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "Подзвонити"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "Клієнти"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr ""
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "СвÑта"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "Ідеї"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "Поїздка"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "Ювілей"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "ЗуÑтріч"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "Інше"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "ОÑобиÑте"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "Проекти"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "ЗапитаннÑ"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "Робота"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr ""
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "новий Календар"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "Ðе повторювати"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "Щоденно"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "ЩотижнÑ"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "По буднÑм"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "Кожні дві неділі"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "ЩоміÑÑцÑ"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "Щорічно"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "ніколи"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr ""
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr ""
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr ""
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr ""
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "Понеділок"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "Вівторок"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "Середа"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "Четвер"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "П'ÑтницÑ"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "Субота"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "ÐеділÑ"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr ""
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "перший"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "другий"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "третій"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "четвертий"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "п'Ñтий"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "оÑтанній"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "Січень"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "Лютий"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "Березень"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "Квітень"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "Травень"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "Червень"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "Липень"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "Серпень"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "ВереÑень"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "Жовтень"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "ЛиÑтопад"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "Грудень"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr ""
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr ""
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr ""
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr ""
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "Дата"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "Кал."
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "УвеÑÑŒ день"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "новий Календар"
-
#: templates/calendar.php:13
msgid "Missing fields"
-msgstr ""
+msgstr "Пропущені полÑ"
#: templates/calendar.php:14 templates/part.eventform.php:19
#: templates/part.showevent.php:11
@@ -335,62 +437,54 @@ msgstr "Ðазва"
#: templates/calendar.php:16
msgid "From Date"
-msgstr ""
+msgstr "Від Дати"
#: templates/calendar.php:17
msgid "From Time"
-msgstr ""
+msgstr "З ЧаÑу"
#: templates/calendar.php:18
msgid "To Date"
-msgstr ""
+msgstr "До ЧаÑу"
#: templates/calendar.php:19
msgid "To Time"
-msgstr ""
+msgstr "По Дату"
#: templates/calendar.php:20
msgid "The event ends before it starts"
-msgstr ""
+msgstr "ÐŸÐ¾Ð´Ñ–Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐ°Ñ”Ñ‚ÑŒÑÑ Ð´Ð¾ Ñ—Ñ— початку"
#: templates/calendar.php:21
msgid "There was a database fail"
-msgstr ""
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° бази даних"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "Тиждень"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "МіÑÑць"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "СпиÑок"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "Сьогодні"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "Календарі"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° при обробці файлу"
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "Вибрати активні календарі"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
-msgstr ""
+msgstr "Ваші календарі"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr ""
@@ -402,22 +496,22 @@ msgstr ""
msgid "No shared calendars"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr ""
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "Завантажити"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "Редагувати"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
-msgstr ""
+msgstr "Видалити"
#: templates/part.choosecalendar.rowfields.shared.php:4
msgid "shared with you by"
@@ -445,7 +539,7 @@ msgstr "Колір календарÑ"
#: templates/part.editcalendar.php:42
msgid "Save"
-msgstr ""
+msgstr "Зберегти"
#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
#: templates/part.newevent.php:6
@@ -454,7 +548,7 @@ msgstr ""
#: templates/part.editcalendar.php:43
msgid "Cancel"
-msgstr ""
+msgstr "Відмінити"
#: templates/part.editevent.php:1
msgid "Edit an event"
@@ -462,7 +556,7 @@ msgstr ""
#: templates/part.editevent.php:10
msgid "Export"
-msgstr ""
+msgstr "ЕкÑпорт"
#: templates/part.eventform.php:8 templates/part.showevent.php:3
msgid "Eventinfo"
@@ -500,23 +594,23 @@ msgstr ""
msgid "Edit categories"
msgstr ""
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr ""
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "З"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "По"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr ""
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "МіÑце"
@@ -524,7 +618,7 @@ msgstr "МіÑце"
msgid "Location of the Event"
msgstr "МіÑце події"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "ОпиÑ"
@@ -532,84 +626,86 @@ msgstr "ОпиÑ"
msgid "Description of the Event"
msgstr "ÐžÐ¿Ð¸Ñ Ð¿Ð¾Ð´Ñ–Ñ—"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "Повторювати"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr ""
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr ""
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr ""
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr ""
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr ""
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr ""
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr ""
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr ""
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr ""
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr ""
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr ""
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "Ñтворити новий календар"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "Імпортувати файл календарÑ"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
msgstr ""
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "Ñтворити новий календар"
-
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "Ðазва нового календарÑ"
-#: templates/part.import.php:17
-msgid "Import"
+#: templates/part.import.php:44
+msgid "Take an available name!"
msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "Календар уÑпішно імпортовано"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "Імпорт"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr ""
@@ -625,49 +721,77 @@ msgstr ""
msgid "No categories selected"
msgstr ""
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr ""
-
#: templates/part.showevent.php:37
msgid "of"
msgstr ""
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr ""
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "ЧаÑовий поÑÑ"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "Формат чаÑу"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24г"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12г"
-#: templates/settings.php:40
-msgid "First day of the week"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "ÐдреÑа Ñинхронізації ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ CalDAV:"
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
-msgstr ""
+msgstr "КориÑтувачі"
#: templates/share.dropdown.php:21
msgid "select users"
@@ -679,7 +803,7 @@ msgstr ""
#: templates/share.dropdown.php:48
msgid "Groups"
-msgstr ""
+msgstr "Групи"
#: templates/share.dropdown.php:49
msgid "select groups"
diff --git a/l10n/uk/contacts.po b/l10n/uk/contacts.po
index e284cb8b0f7..f415e863ccf 100644
--- a/l10n/uk/contacts.po
+++ b/l10n/uk/contacts.po
@@ -8,220 +8,206 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Ukrainian (http://www.transifex.net/projects/p/owncloud/language/uk/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr ""
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr ""
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
msgstr ""
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "Має бути заповнено щонайменше одне поле."
-
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
msgstr ""
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
msgstr ""
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr ""
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr ""
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr ""
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr ""
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr ""
-#: ajax/contactdetails.php:37
-msgid "Missing ID"
-msgstr ""
-
-#: ajax/contactdetails.php:41
-msgid "Error parsing VCard for ID: \""
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
msgstr ""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
msgstr ""
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "Помилка при додаванні адреÑної книги."
-
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
msgstr ""
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
-#: ajax/uploadphoto.php:68
-msgid "No contact ID was submitted."
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
msgstr ""
-#: ajax/currentphoto.php:40
-msgid "Error reading contact photo."
-msgstr ""
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "Має бути заповнено щонайменше одне поле."
-#: ajax/currentphoto.php:52
-msgid "Error saving temporary file."
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
msgstr ""
-#: ajax/currentphoto.php:55
-msgid "The loading photo is not valid."
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
msgstr ""
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
msgstr ""
-#: ajax/deleteproperty.php:36
+#: ajax/contact/deleteproperty.php:37
msgid "Information about vCard is incorrect. Please reload the page."
msgstr ""
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
+#: ajax/contact/details.php:31
+msgid "Missing ID"
msgstr ""
-#: ajax/editname.php:37
-msgid "Contact ID is missing."
+#: ajax/contact/details.php:36
+msgid "Error parsing VCard for ID: \""
msgstr ""
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
msgstr ""
-#: ajax/oc_photo.php:41
-msgid "No photo path was submitted."
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
msgstr ""
-#: ajax/oc_photo.php:48
-msgid "File doesn't exist:"
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
msgstr ""
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
-msgid "Error loading image."
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
+#: ajax/uploadphoto.php:68
+msgid "No contact ID was submitted."
msgstr ""
-#: ajax/savecrop.php:68
-msgid "Error getting contact object."
+#: ajax/currentphoto.php:36
+msgid "Error reading contact photo."
msgstr ""
-#: ajax/savecrop.php:75
-msgid "Error getting PHOTO property."
+#: ajax/currentphoto.php:48
+msgid "Error saving temporary file."
msgstr ""
-#: ajax/savecrop.php:88
-msgid "Error saving contact."
+#: ajax/currentphoto.php:51
+msgid "The loading photo is not valid."
msgstr ""
-#: ajax/savecrop.php:98
-msgid "Error resizing image"
+#: ajax/editname.php:31
+msgid "Contact ID is missing."
msgstr ""
-#: ajax/savecrop.php:101
-msgid "Error cropping image"
+#: ajax/oc_photo.php:32
+msgid "No photo path was submitted."
msgstr ""
-#: ajax/savecrop.php:104
-msgid "Error creating temporary image"
+#: ajax/oc_photo.php:39
+msgid "File doesn't exist:"
msgstr ""
-#: ajax/savecrop.php:107
-msgid "Error finding image: "
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
+msgid "Error loading image."
msgstr ""
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
+#: ajax/savecrop.php:69
+msgid "Error getting contact object."
msgstr ""
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
+#: ajax/savecrop.php:79
+msgid "Error getting PHOTO property."
msgstr ""
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
+#: ajax/savecrop.php:98
+msgid "Error saving contact."
msgstr ""
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
+#: ajax/savecrop.php:109
+msgid "Error resizing image"
msgstr ""
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
+#: ajax/savecrop.php:112
+msgid "Error cropping image"
msgstr ""
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
+#: ajax/savecrop.php:115
+msgid "Error creating temporary image"
msgstr ""
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
+#: ajax/savecrop.php:118
+msgid "Error finding image: "
msgstr ""
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr ""
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr ""
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
msgstr ""
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
msgstr ""
@@ -229,415 +215,562 @@ msgstr ""
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
msgstr ""
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
msgstr ""
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:425
+msgid "Permission error"
+msgstr ""
+
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
msgstr ""
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
msgstr ""
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
msgstr ""
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr ""
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/loader.js:49
+msgid "Result: "
+msgstr ""
+
+#: js/loader.js:49
+msgid " imported, "
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/loader.js:49
+msgid " failed."
msgstr ""
-#: js/contacts.js:1494
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "Це не ваша адреÑна книга."
+
+#: lib/app.php:71
+msgid "Contact could not be found."
msgstr ""
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
+#: lib/app.php:141
+msgid "Facebook"
msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "Це не ваша адреÑна книга."
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
+#: lib/app.php:151
+msgid "ICQ"
msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "ÐдреÑа"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "Телефон"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "Ел.пошта"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "ОрганізаціÑ"
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr ""
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr ""
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "Мобільний"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "ТекÑÑ‚"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "ГолоÑ"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr ""
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "ФакÑ"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "Відео"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "Пейджер"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr ""
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "День народженнÑ"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr ""
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr ""
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "Додати контакт"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr ""
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
msgstr ""
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "Ðова адреÑна книга"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
+#: templates/index.php:39
+msgid "Navigation"
msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
+#: templates/index.php:42
+msgid "Next contact in list"
msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "Завантажити"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "Видалити"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
+#: templates/index.php:50
+msgid "Previous addressbook"
msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "Видалити контакт"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr ""
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr ""
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr ""
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "ОрганізаціÑ"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Видалити"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr ""
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr ""
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "День народженнÑ"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr ""
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr ""
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr ""
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr ""
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr ""
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr ""
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr ""
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr ""
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr ""
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr ""
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr ""
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr ""
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr ""
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "Телефон"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr ""
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "Ел.пошта"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr ""
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "ÐдреÑа"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
+#: templates/part.contact.php:133
+msgid "Note"
msgstr ""
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
+#: templates/part.contact.php:138
+msgid "Download contact"
msgstr ""
-#: templates/part.cropphoto.php:64
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Видалити контакт"
+
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
msgstr ""
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr ""
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr ""
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr ""
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "Розширено"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "ВулицÑ"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "МіÑто"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr ""
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "Поштовий індекÑ"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
-msgid "Country"
-msgstr "Країна"
-
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
msgstr ""
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "Додати"
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr "Країна"
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
@@ -719,102 +852,102 @@ msgstr ""
msgid "Sn."
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
+#: templates/part.import.php:1
+msgid "Import a contacts file"
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
+#: templates/part.import.php:6
+msgid "Please choose the addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "Відображуване ім'Ñ"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
+#: templates/part.import.php:10
+msgid "create a new addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:29
-msgid "Save"
+#: templates/part.import.php:15
+msgid "Name of new addressbook"
msgstr ""
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
+#: templates/part.import.php:20
+msgid "Importing contacts"
msgstr ""
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
msgstr ""
-#: templates/part.import.php:1
-msgid "Import a contacts file"
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
msgstr ""
-#: templates/part.import.php:6
-msgid "Please choose the addressbook"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
msgstr ""
-#: templates/part.import.php:10
-msgid "create a new addressbook"
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
msgstr ""
-#: templates/part.import.php:15
-msgid "Name of new addressbook"
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
+#: templates/settings.php:3
+msgid "CardDAV syncing addresses"
msgstr ""
-#: templates/part.import.php:20
-msgid "Importing contacts"
+#: templates/settings.php:3
+msgid "more info"
msgstr ""
-#: templates/part.import.php:24
-msgid "Close"
+#: templates/settings.php:5
+msgid "Primary address (Kontact et al)"
msgstr ""
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
+#: templates/settings.php:7
+msgid "iOS/OS X"
msgstr ""
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
+#: templates/settings.php:20
+msgid "Show CardDav link"
msgstr ""
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
msgstr ""
-#: templates/part.no_contacts.php:2
-msgid "You have no contacts in your addressbook."
+#: templates/settings.php:26
+msgid "Share"
msgstr ""
-#: templates/part.no_contacts.php:4
-msgid "Add contact"
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Завантажити"
+
+#: templates/settings.php:33
+msgid "Edit"
msgstr ""
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "Ðова адреÑна книга"
+
+#: templates/settings.php:44
+msgid "Name"
msgstr ""
-#: templates/settings.php:4
-msgid "CardDAV syncing addresses"
+#: templates/settings.php:45
+msgid "Description"
msgstr ""
-#: templates/settings.php:4
-msgid "more info"
+#: templates/settings.php:46
+msgid "Save"
msgstr ""
-#: templates/settings.php:6
-msgid "Primary address (Kontact et al)"
+#: templates/settings.php:47
+msgid "Cancel"
msgstr ""
-#: templates/settings.php:8
-msgid "iOS/OS X"
+#: templates/settings.php:52
+msgid "More..."
msgstr ""
diff --git a/l10n/uk/core.po b/l10n/uk/core.po
index fe1c962318b..731e7d912ef 100644
--- a/l10n/uk/core.po
+++ b/l10n/uk/core.po
@@ -9,10 +9,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Ukrainian (http://www.transifex.net/projects/p/owncloud/language/uk/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -35,51 +35,55 @@ msgstr ""
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
msgstr ""
-#: js/js.js:520
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "ÐалаштуваннÑ"
+
+#: js/js.js:573
msgid "January"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
msgstr ""
@@ -108,10 +112,6 @@ msgid "Error"
msgstr ""
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr ""
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr ""
@@ -241,14 +241,10 @@ msgstr "Завершити налаштуваннÑ"
msgid "web services under your control"
msgstr "веб-ÑÐµÑ€Ð²Ñ–Ñ Ð¿Ñ–Ð´ вашим контролем"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "Вихід"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "ÐалаштуваннÑ"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "Забули пароль?"
diff --git a/l10n/uk/files.po b/l10n/uk/files.po
index 4019b885f53..8fb3ea8778f 100644
--- a/l10n/uk/files.po
+++ b/l10n/uk/files.po
@@ -9,43 +9,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Ukrainian (http://www.transifex.net/projects/p/owncloud/language/uk/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "Файл уÑпішно відвантажено без помилок."
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "Розмір відвантаженого файлу перевищує директиву upload_max_filesize в php.ini"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "Файл відвантажено лише чаÑтково"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "Ðе відвантажено жодного файлу"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "ВідÑутній тимчаÑовий каталог"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr ""
@@ -53,57 +53,85 @@ msgstr ""
msgid "Files"
msgstr "Файли"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Видалити"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
-msgid "generating ZIP-file, it may take some time."
+#: js/filelist.js:141
+msgid "replace"
msgstr ""
-#: js/files.js:199
-msgid "Unable to upload your file as it is a directory or has 0 bytes"
+#: js/filelist.js:141
+msgid "cancel"
msgstr ""
-#: js/files.js:199
-msgid "Upload Error"
+#: js/filelist.js:195
+msgid "replaced"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
-msgid "Pending"
+#: js/filelist.js:195
+msgid "with"
msgstr ""
-#: js/files.js:332
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "відмінити"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "видалені"
+
+#: js/files.js:171
+msgid "generating ZIP-file, it may take some time."
+msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ZIP-файлу, це може зайнÑти певний чаÑ."
+
+#: js/files.js:200
+msgid "Unable to upload your file as it is a directory or has 0 bytes"
+msgstr "Ðеможливо завантажити ваш файл тому, що він тека або файл розміром 0 байт"
+
+#: js/files.js:200
+msgid "Upload Error"
+msgstr "Помилка завантаженнÑ"
+
+#: js/files.js:228 js/files.js:319 js/files.js:348
+msgid "Pending"
+msgstr "ОчікуваннÑ"
+
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑ€Ð²Ð°Ð½Ð¾."
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "Ðекоректне ім'Ñ, '/' не дозволено."
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "Розмір"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "Змінено"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "тека"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "теки"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "файл"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "файли"
#: templates/admin.php:5
msgid "File handling"
@@ -115,7 +143,7 @@ msgstr "МакÑимальний розмір відвантажень"
#: templates/admin.php:7
msgid "max. possible: "
-msgstr ""
+msgstr "макÑ.можливе:"
#: templates/admin.php:9
msgid "Needed for multi-file and folder downloads."
@@ -127,7 +155,7 @@ msgstr ""
#: templates/admin.php:11
msgid "0 is unlimited"
-msgstr ""
+msgstr "0 є безліміт"
#: templates/admin.php:12
msgid "Maximum input size for ZIP files"
@@ -147,7 +175,7 @@ msgstr "Папка"
#: templates/index.php:11
msgid "From url"
-msgstr ""
+msgstr "З URL"
#: templates/index.php:21
msgid "Upload"
@@ -155,7 +183,7 @@ msgstr "Відвантажити"
#: templates/index.php:27
msgid "Cancel upload"
-msgstr ""
+msgstr "Перервати завантаженнÑ"
#: templates/index.php:39
msgid "Nothing in here. Upload something!"
@@ -167,16 +195,12 @@ msgstr "Ім'Ñ"
#: templates/index.php:49
msgid "Share"
-msgstr ""
+msgstr "ПоділитиÑÑ"
#: templates/index.php:51
msgid "Download"
msgstr "Завантажити"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "Видалити"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "Файл занадто великий"
@@ -189,8 +213,8 @@ msgstr "Файли,що ви намагаєтеÑÑŒ відвантажити пÐ
#: templates/index.php:71
msgid "Files are being scanned, please wait."
-msgstr ""
+msgstr "Файли ÑкануютьÑÑ, зачекайте, будь-лаÑка."
#: templates/index.php:74
msgid "Current scanning"
-msgstr ""
+msgstr "Поточне ÑкануваннÑ"
diff --git a/l10n/uk/files_encryption.po b/l10n/uk/files_encryption.po
new file mode 100644
index 00000000000..be6f1edb748
--- /dev/null
+++ b/l10n/uk/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/uk/files_external.po b/l10n/uk/files_external.po
new file mode 100644
index 00000000000..4d2de48c58f
--- /dev/null
+++ b/l10n/uk/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/uk/files_sharing.po b/l10n/uk/files_sharing.po
new file mode 100644
index 00000000000..4786918c70f
--- /dev/null
+++ b/l10n/uk/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/uk/files_versions.po b/l10n/uk/files_versions.po
new file mode 100644
index 00000000000..fdbf46f9cba
--- /dev/null
+++ b/l10n/uk/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/uk/lib.po b/l10n/uk/lib.po
new file mode 100644
index 00000000000..a818ac7d1f4
--- /dev/null
+++ b/l10n/uk/lib.po
@@ -0,0 +1,113 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <dzubchikd@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-07-31 22:53+0200\n"
+"PO-Revision-Date: 2012-07-30 21:26+0000\n"
+"Last-Translator: dzubchikd <dzubchikd@gmail.com>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr "Допомога"
+
+#: app.php:294
+msgid "Personal"
+msgstr "ОÑобиÑте"
+
+#: app.php:299
+msgid "Settings"
+msgstr "ÐалаштуваннÑ"
+
+#: app.php:304
+msgid "Users"
+msgstr "КориÑтувачі"
+
+#: app.php:311
+msgid "Apps"
+msgstr "Додатки"
+
+#: app.php:313
+msgid "Admin"
+msgstr "Ðдмін"
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr "ZIP Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾."
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr "Файли повинні бути завантаженні поÑлідовно."
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr "ПовернутиÑÑ Ð´Ð¾ файлів"
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr "Вибрані фали завеликі Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ zip файлу."
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr "Додаток не увімкнений"
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr "Помилка автентифікації"
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr "Ñекунди тому"
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr "1 хвилину тому"
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr "%d хвилин тому"
+
+#: template.php:91
+msgid "today"
+msgstr "Ñьогодні"
+
+#: template.php:92
+msgid "yesterday"
+msgstr "вчора"
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr "%d днів тому"
+
+#: template.php:94
+msgid "last month"
+msgstr "минулого міÑÑцÑ"
+
+#: template.php:95
+msgid "months ago"
+msgstr "міÑÑці тому"
+
+#: template.php:96
+msgid "last year"
+msgstr "минулого року"
+
+#: template.php:97
+msgid "years ago"
+msgstr "роки тому"
diff --git a/l10n/uk/media.po b/l10n/uk/media.po
index 5df57e85657..aef0c0eada9 100644
--- a/l10n/uk/media.po
+++ b/l10n/uk/media.po
@@ -3,64 +3,65 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <dzubchikd@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Ukrainian (http://www.transifex.net/projects/p/owncloud/language/uk/)\n"
+"POT-Creation-Date: 2012-07-31 22:53+0200\n"
+"PO-Revision-Date: 2012-07-30 21:07+0000\n"
+"Last-Translator: dzubchikd <dzubchikd@gmail.com>\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"
-#: appinfo/app.php:32 templates/player.php:8
+#: appinfo/app.php:45 templates/player.php:8
msgid "Music"
-msgstr ""
+msgstr "Музика"
#: js/music.js:18
msgid "Add album to playlist"
-msgstr ""
+msgstr "Додати альбом до плейлиÑта"
#: templates/music.php:3 templates/player.php:12
msgid "Play"
-msgstr ""
+msgstr "Грати"
#: templates/music.php:4 templates/music.php:26 templates/player.php:13
msgid "Pause"
-msgstr ""
+msgstr "Пауза"
#: templates/music.php:5
msgid "Previous"
-msgstr ""
+msgstr "Попередній"
#: templates/music.php:6 templates/player.php:14
msgid "Next"
-msgstr ""
+msgstr "ÐаÑтупний"
#: templates/music.php:7
msgid "Mute"
-msgstr ""
+msgstr "Звук вкл."
#: templates/music.php:8
msgid "Unmute"
-msgstr ""
+msgstr "Звук викл."
#: templates/music.php:25
msgid "Rescan Collection"
-msgstr ""
+msgstr "Повторне ÑÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð»ÐµÐºÑ†Ñ–Ñ—"
#: templates/music.php:37
msgid "Artist"
-msgstr ""
+msgstr "Виконавець"
#: templates/music.php:38
msgid "Album"
-msgstr ""
+msgstr "Ðльбом"
#: templates/music.php:39
msgid "Title"
-msgstr ""
+msgstr "Заголовок"
diff --git a/l10n/uk/settings.po b/l10n/uk/settings.po
index 3e271d5055a..f32d1abccf9 100644
--- a/l10n/uk/settings.po
+++ b/l10n/uk/settings.po
@@ -3,20 +3,25 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <dzubchikd@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Ukrainian (http://www.transifex.net/projects/p/owncloud/language/uk/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
msgstr ""
@@ -25,23 +30,31 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
-msgstr ""
+msgstr "OpenID змінено"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
+msgstr "Помилковий запит"
+
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
msgstr ""
-#: ajax/setlanguage.php:17
+#: ajax/setlanguage.php:18
msgid "Language changed"
+msgstr "Мова змінена"
+
+#: js/apps.js:18
+msgid "Error"
msgstr ""
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
msgstr ""
@@ -49,37 +62,57 @@ msgstr ""
msgid "Saving..."
msgstr ""
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr ""
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr ""
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr ""
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr ""
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
-msgstr ""
+msgstr "Вибрати додаток"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
-msgstr ""
+msgstr "-ліцензовано"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
-msgstr ""
+msgstr "по"
#: templates/help.php:8
msgid "Documentation"
@@ -91,11 +124,11 @@ msgstr ""
#: templates/help.php:10
msgid "Ask a question"
-msgstr ""
+msgstr "Запитати"
#: templates/help.php:22
msgid "Problems connecting to help database."
-msgstr ""
+msgstr "Проблема при з'єднані з базою допомоги"
#: templates/help.php:23
msgid "Go there manually."
@@ -107,11 +140,11 @@ msgstr ""
#: templates/personal.php:8
msgid "You use"
-msgstr ""
+msgstr "Ви викориÑтовуєте"
#: templates/personal.php:8
msgid "of the available"
-msgstr ""
+msgstr "з доÑтупної"
#: templates/personal.php:12
msgid "Desktop and Mobile Syncing Clients"
@@ -123,7 +156,7 @@ msgstr ""
#: templates/personal.php:19
msgid "Your password got changed"
-msgstr ""
+msgstr "Ваш пароль змінено"
#: templates/personal.php:20
msgid "Unable to change your password"
@@ -131,19 +164,19 @@ msgstr ""
#: templates/personal.php:21
msgid "Current password"
-msgstr ""
+msgstr "Поточний пароль"
#: templates/personal.php:22
msgid "New password"
-msgstr ""
+msgstr "Ðовий пароль"
#: templates/personal.php:23
msgid "show"
-msgstr ""
+msgstr "показати"
#: templates/personal.php:24
msgid "Change password"
-msgstr ""
+msgstr "Змінити пароль"
#: templates/personal.php:30
msgid "Email"
@@ -159,7 +192,7 @@ msgstr ""
#: templates/personal.php:38 templates/personal.php:39
msgid "Language"
-msgstr ""
+msgstr "Мова"
#: templates/personal.php:44
msgid "Help translate"
@@ -169,34 +202,38 @@ msgstr ""
msgid "use this address to connect to your ownCloud in your file manager"
msgstr ""
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
-msgstr ""
+msgstr "Ім'Ñ"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
-msgstr ""
+msgstr "Пароль"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
-msgstr ""
+msgstr "Групи"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
-msgstr ""
+msgstr "Створити"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr ""
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr ""
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr ""
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
-msgstr ""
+msgstr "Видалити"
diff --git a/l10n/uk/tasks.po b/l10n/uk/tasks.po
new file mode 100644
index 00000000000..37254722c73
--- /dev/null
+++ b/l10n/uk/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/uk/user_ldap.po b/l10n/uk/user_ldap.po
new file mode 100644
index 00000000000..236f6c2034a
--- /dev/null
+++ b/l10n/uk/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/uk/user_migrate.po b/l10n/uk/user_migrate.po
new file mode 100644
index 00000000000..816951cef34
--- /dev/null
+++ b/l10n/uk/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/uk/user_openid.po b/l10n/uk/user_openid.po
new file mode 100644
index 00000000000..699f470569b
--- /dev/null
+++ b/l10n/uk/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/vi/admin_dependencies_chk.po b/l10n/vi/admin_dependencies_chk.po
new file mode 100644
index 00000000000..9f7f77f611a
--- /dev/null
+++ b/l10n/vi/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/vi/admin_migrate.po b/l10n/vi/admin_migrate.po
new file mode 100644
index 00000000000..58d15a553c4
--- /dev/null
+++ b/l10n/vi/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/vi/bookmarks.po b/l10n/vi/bookmarks.po
new file mode 100644
index 00000000000..38181e5d1fa
--- /dev/null
+++ b/l10n/vi/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/vi/calendar.po b/l10n/vi/calendar.po
new file mode 100644
index 00000000000..b08b6e2ae86
--- /dev/null
+++ b/l10n/vi/calendar.po
@@ -0,0 +1,815 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <mattheu_9x@yahoo.com>, 2012.
+# 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-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
+msgid "No calendars found."
+msgstr "Không tìm thấy lịch."
+
+#: ajax/categories/rescan.php:37
+msgid "No events found."
+msgstr "Không tìm thấy sự kiện nào"
+
+#: ajax/event/edit.form.php:20
+msgid "Wrong calendar"
+msgstr "Sai lịch"
+
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
+#: ajax/settings/guesstimezone.php:25
+msgid "New Timezone:"
+msgstr "Múi giỠmới :"
+
+#: ajax/settings/settimezone.php:23
+msgid "Timezone changed"
+msgstr "Thay đổi múi giá»"
+
+#: ajax/settings/settimezone.php:25
+msgid "Invalid request"
+msgstr "Yêu cầu không hợp lệ"
+
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
+msgid "Calendar"
+msgstr "Lịch"
+
+#: js/calendar.js:832
+msgid "ddd"
+msgstr "ddd"
+
+#: js/calendar.js:833
+msgid "ddd M/d"
+msgstr "ddd M/d"
+
+#: js/calendar.js:834
+msgid "dddd M/d"
+msgstr "dddd M/d"
+
+#: js/calendar.js:837
+msgid "MMMM yyyy"
+msgstr "MMMM yyyy"
+
+#: js/calendar.js:839
+msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
+msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
+
+#: js/calendar.js:841
+msgid "dddd, MMM d, yyyy"
+msgstr "dddd, MMM d, yyyy"
+
+#: lib/app.php:121
+msgid "Birthday"
+msgstr "Ngày sinh nhật"
+
+#: lib/app.php:122
+msgid "Business"
+msgstr "Công việc"
+
+#: lib/app.php:123
+msgid "Call"
+msgstr "Số điện thoại"
+
+#: lib/app.php:124
+msgid "Clients"
+msgstr "Máy trạm"
+
+#: lib/app.php:125
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:126
+msgid "Holidays"
+msgstr "Ngày lễ"
+
+#: lib/app.php:127
+msgid "Ideas"
+msgstr "à tưởng"
+
+#: lib/app.php:128
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:129
+msgid "Jubilee"
+msgstr "Lễ kỷ niệm"
+
+#: lib/app.php:130
+msgid "Meeting"
+msgstr "Hội nghị"
+
+#: lib/app.php:131
+msgid "Other"
+msgstr "Khác"
+
+#: lib/app.php:132
+msgid "Personal"
+msgstr "Cá nhân"
+
+#: lib/app.php:133
+msgid "Projects"
+msgstr "Dự án"
+
+#: lib/app.php:134
+msgid "Questions"
+msgstr "Câu há»i"
+
+#: lib/app.php:135
+msgid "Work"
+msgstr "Công việc"
+
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
+msgid "unnamed"
+msgstr ""
+
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "Lịch mới"
+
+#: lib/object.php:372
+msgid "Does not repeat"
+msgstr "Không lặp lại"
+
+#: lib/object.php:373
+msgid "Daily"
+msgstr "Hàng ngày"
+
+#: lib/object.php:374
+msgid "Weekly"
+msgstr "Hàng tuần"
+
+#: lib/object.php:375
+msgid "Every Weekday"
+msgstr "Mỗi ngày trong tuần"
+
+#: lib/object.php:376
+msgid "Bi-Weekly"
+msgstr "Hai tuần một lần"
+
+#: lib/object.php:377
+msgid "Monthly"
+msgstr "Hàng tháng"
+
+#: lib/object.php:378
+msgid "Yearly"
+msgstr "Hàng năm"
+
+#: lib/object.php:388
+msgid "never"
+msgstr "không thay đổi"
+
+#: lib/object.php:389
+msgid "by occurrences"
+msgstr "bởi xuất hiện"
+
+#: lib/object.php:390
+msgid "by date"
+msgstr "bởi ngày"
+
+#: lib/object.php:400
+msgid "by monthday"
+msgstr "bởi ngày trong tháng"
+
+#: lib/object.php:401
+msgid "by weekday"
+msgstr "bởi ngày trong tuần"
+
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
+msgid "Monday"
+msgstr "Thứ 2"
+
+#: lib/object.php:412 templates/calendar.php:5
+msgid "Tuesday"
+msgstr "Thứ 3"
+
+#: lib/object.php:413 templates/calendar.php:5
+msgid "Wednesday"
+msgstr "Thứ 4"
+
+#: lib/object.php:414 templates/calendar.php:5
+msgid "Thursday"
+msgstr "Thứ 5"
+
+#: lib/object.php:415 templates/calendar.php:5
+msgid "Friday"
+msgstr "Thứ "
+
+#: lib/object.php:416 templates/calendar.php:5
+msgid "Saturday"
+msgstr "Thứ 7"
+
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
+msgid "Sunday"
+msgstr "Chủ nhật"
+
+#: lib/object.php:427
+msgid "events week of month"
+msgstr "sự kiện trong tuần của tháng"
+
+#: lib/object.php:428
+msgid "first"
+msgstr "đầu tiên"
+
+#: lib/object.php:429
+msgid "second"
+msgstr "Thứ hai"
+
+#: lib/object.php:430
+msgid "third"
+msgstr "Thứ ba"
+
+#: lib/object.php:431
+msgid "fourth"
+msgstr "Thứ tư"
+
+#: lib/object.php:432
+msgid "fifth"
+msgstr "Thứ năm"
+
+#: lib/object.php:433
+msgid "last"
+msgstr ""
+
+#: lib/object.php:467 templates/calendar.php:7
+msgid "January"
+msgstr "Tháng 1"
+
+#: lib/object.php:468 templates/calendar.php:7
+msgid "February"
+msgstr "Tháng 2"
+
+#: lib/object.php:469 templates/calendar.php:7
+msgid "March"
+msgstr "Tháng 3"
+
+#: lib/object.php:470 templates/calendar.php:7
+msgid "April"
+msgstr "Tháng 4"
+
+#: lib/object.php:471 templates/calendar.php:7
+msgid "May"
+msgstr "Tháng 5"
+
+#: lib/object.php:472 templates/calendar.php:7
+msgid "June"
+msgstr "Tháng 6"
+
+#: lib/object.php:473 templates/calendar.php:7
+msgid "July"
+msgstr "Tháng 7"
+
+#: lib/object.php:474 templates/calendar.php:7
+msgid "August"
+msgstr "Tháng 8"
+
+#: lib/object.php:475 templates/calendar.php:7
+msgid "September"
+msgstr "Tháng 9"
+
+#: lib/object.php:476 templates/calendar.php:7
+msgid "October"
+msgstr "Tháng 10"
+
+#: lib/object.php:477 templates/calendar.php:7
+msgid "November"
+msgstr "Tháng 11"
+
+#: lib/object.php:478 templates/calendar.php:7
+msgid "December"
+msgstr "Tháng 12"
+
+#: lib/object.php:488
+msgid "by events date"
+msgstr "Theo ngày tháng sự kiện"
+
+#: lib/object.php:489
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:490
+msgid "by weeknumber(s)"
+msgstr "số tuần"
+
+#: lib/object.php:491
+msgid "by day and month"
+msgstr "ngày, tháng"
+
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
+msgid "Date"
+msgstr "Ngày"
+
+#: lib/search.php:43
+msgid "Cal."
+msgstr "Cal."
+
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
+#: templates/calendar.php:11
+msgid "All day"
+msgstr "Tất cả các ngày"
+
+#: templates/calendar.php:13
+msgid "Missing fields"
+msgstr ""
+
+#: templates/calendar.php:14 templates/part.eventform.php:19
+#: templates/part.showevent.php:11
+msgid "Title"
+msgstr "Tiêu Ä‘á»"
+
+#: templates/calendar.php:16
+msgid "From Date"
+msgstr "Từ ngày"
+
+#: templates/calendar.php:17
+msgid "From Time"
+msgstr "Từ thá»i gian"
+
+#: templates/calendar.php:18
+msgid "To Date"
+msgstr "Tới ngày"
+
+#: templates/calendar.php:19
+msgid "To Time"
+msgstr "Tá»›i thá»i gian"
+
+#: templates/calendar.php:20
+msgid "The event ends before it starts"
+msgstr "Sự kiện này kết thúc trước khi nó bắt đầu"
+
+#: templates/calendar.php:21
+msgid "There was a database fail"
+msgstr ""
+
+#: templates/calendar.php:39
+msgid "Week"
+msgstr "Tuần"
+
+#: templates/calendar.php:40
+msgid "Month"
+msgstr "Tháng"
+
+#: templates/calendar.php:41
+msgid "List"
+msgstr "Danh sách"
+
+#: templates/calendar.php:45
+msgid "Today"
+msgstr "Hôm nay"
+
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
+
+#: templates/part.choosecalendar.php:2
+msgid "Your calendars"
+msgstr "Lịch của bạn"
+
+#: templates/part.choosecalendar.php:27
+#: templates/part.choosecalendar.rowfields.php:11
+msgid "CalDav Link"
+msgstr "Liên kết CalDav "
+
+#: templates/part.choosecalendar.php:31
+msgid "Shared calendars"
+msgstr "Chia sẻ lịch"
+
+#: templates/part.choosecalendar.php:48
+msgid "No shared calendars"
+msgstr "Không chia sẻ lcihj"
+
+#: templates/part.choosecalendar.rowfields.php:8
+msgid "Share Calendar"
+msgstr "Chia sẻ lịch"
+
+#: templates/part.choosecalendar.rowfields.php:14
+msgid "Download"
+msgstr "Tải vá»"
+
+#: templates/part.choosecalendar.rowfields.php:17
+msgid "Edit"
+msgstr "Chỉnh sửa"
+
+#: templates/part.choosecalendar.rowfields.php:20
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr "Xóa"
+
+#: templates/part.choosecalendar.rowfields.shared.php:4
+msgid "shared with you by"
+msgstr "Chia sẻ bởi"
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr "Lịch mới"
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr "sửa Lịch"
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr "Hiển thị tên"
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr "Kích hoạt"
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr "Màu lịch"
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr "LÆ°u"
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr "Submit"
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr "Hủy"
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr "Sửa sự kiện"
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr ""
+
+#: templates/part.eventform.php:8 templates/part.showevent.php:3
+msgid "Eventinfo"
+msgstr ""
+
+#: templates/part.eventform.php:9 templates/part.showevent.php:4
+msgid "Repeating"
+msgstr ""
+
+#: templates/part.eventform.php:10 templates/part.showevent.php:5
+msgid "Alarm"
+msgstr ""
+
+#: templates/part.eventform.php:11 templates/part.showevent.php:6
+msgid "Attendees"
+msgstr ""
+
+#: templates/part.eventform.php:13
+msgid "Share"
+msgstr "Chia sẻ"
+
+#: templates/part.eventform.php:21
+msgid "Title of the Event"
+msgstr "Tên sự kiện"
+
+#: templates/part.eventform.php:27 templates/part.showevent.php:19
+msgid "Category"
+msgstr "Danh mục"
+
+#: templates/part.eventform.php:29
+msgid "Separate categories with commas"
+msgstr ""
+
+#: templates/part.eventform.php:30
+msgid "Edit categories"
+msgstr ""
+
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
+msgid "All Day Event"
+msgstr "Sự kiện trong ngày"
+
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
+msgid "From"
+msgstr "Từ"
+
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
+msgid "To"
+msgstr "Tá»›i"
+
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
+msgid "Advanced options"
+msgstr "Tùy chá»n nâng cao"
+
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
+msgid "Location"
+msgstr "NÆ¡i"
+
+#: templates/part.eventform.php:83
+msgid "Location of the Event"
+msgstr "Nơi tổ chức sự kiện"
+
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
+msgid "Description"
+msgstr "Mô tả"
+
+#: templates/part.eventform.php:91
+msgid "Description of the Event"
+msgstr "Mô tả sự kiện"
+
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
+msgid "Repeat"
+msgstr "Lặp lại"
+
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
+msgid "Advanced"
+msgstr "Nâng cao"
+
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
+msgid "Select weekdays"
+msgstr "Chá»n ngày trong tuần"
+
+#: templates/part.eventform.php:164 templates/part.eventform.php:177
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
+msgid "Select days"
+msgstr "Chá»n ngày"
+
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
+msgid "and the events day of year."
+msgstr "và sự kiện của ngày trong năm"
+
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
+msgid "and the events day of month."
+msgstr "và sự kiện của một ngày trong năm"
+
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
+msgid "Select months"
+msgstr "Chá»n tháng"
+
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
+msgid "Select weeks"
+msgstr "Chá»n tuần"
+
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
+msgid "and the events week of year."
+msgstr "và sự kiện của tuần trong năm."
+
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "Tạo lịch mới"
+
+#: templates/part.import.php:17
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
+
+#: templates/part.import.php:36
+msgid "Name of new calendar"
+msgstr "Tên lịch mới"
+
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
+
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
+
+#: templates/part.import.php:47
+msgid "Import"
+msgstr ""
+
+#: templates/part.import.php:56
+msgid "Close Dialog"
+msgstr "Äóng há»™p thoại"
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr "Tạo một sự kiện mới"
+
+#: templates/part.showevent.php:1
+msgid "View an event"
+msgstr "Xem một sự kiện"
+
+#: templates/part.showevent.php:23
+msgid "No categories selected"
+msgstr "Không danh sách nào được chá»n"
+
+#: templates/part.showevent.php:37
+msgid "of"
+msgstr "của"
+
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
+msgid "at"
+msgstr "tại"
+
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "Timezone"
+msgstr "Múi giá»"
+
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
+
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
+
+#: templates/settings.php:57
+msgid "24h"
+msgstr "24h"
+
+#: templates/settings.php:58
+msgid "12h"
+msgstr "12h"
+
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
+
+#: templates/share.dropdown.php:20
+msgid "Users"
+msgstr ""
+
+#: templates/share.dropdown.php:21
+msgid "select users"
+msgstr ""
+
+#: templates/share.dropdown.php:36 templates/share.dropdown.php:62
+msgid "Editable"
+msgstr ""
+
+#: templates/share.dropdown.php:48
+msgid "Groups"
+msgstr ""
+
+#: templates/share.dropdown.php:49
+msgid "select groups"
+msgstr ""
+
+#: templates/share.dropdown.php:75
+msgid "make public"
+msgstr ""
diff --git a/l10n/vi/contacts.po b/l10n/vi/contacts.po
new file mode 100644
index 00000000000..924eb994b83
--- /dev/null
+++ b/l10n/vi/contacts.po
@@ -0,0 +1,953 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "id không được thiết lập."
+
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr ""
+
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr ""
+
+#: ajax/categories/categoriesfor.php:17
+msgid "No ID provided"
+msgstr "Không có ID được cung cấp"
+
+#: ajax/categories/categoriesfor.php:34
+msgid "Error setting checksum."
+msgstr ""
+
+#: ajax/categories/delete.php:19
+msgid "No categories selected for deletion."
+msgstr ""
+
+#: ajax/categories/delete.php:26
+msgid "No address books found."
+msgstr "Không tìm thấy sổ địa chỉ."
+
+#: ajax/categories/delete.php:34
+msgid "No contacts found."
+msgstr "Không tìm thấy danh sách"
+
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "tên phần tử không được thiết lập."
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr ""
+
+#: ajax/contact/details.php:31
+msgid "Missing ID"
+msgstr "Missing ID"
+
+#: ajax/contact/details.php:36
+msgid "Error parsing VCard for ID: \""
+msgstr ""
+
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr ""
+
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr ""
+
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr ""
+
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
+#: ajax/uploadphoto.php:68
+msgid "No contact ID was submitted."
+msgstr ""
+
+#: ajax/currentphoto.php:36
+msgid "Error reading contact photo."
+msgstr "Lá»—i Ä‘á»c liên lạc hình ảnh."
+
+#: ajax/currentphoto.php:48
+msgid "Error saving temporary file."
+msgstr ""
+
+#: ajax/currentphoto.php:51
+msgid "The loading photo is not valid."
+msgstr "Các hình ảnh tải không hợp lệ."
+
+#: ajax/editname.php:31
+msgid "Contact ID is missing."
+msgstr ""
+
+#: ajax/oc_photo.php:32
+msgid "No photo path was submitted."
+msgstr ""
+
+#: ajax/oc_photo.php:39
+msgid "File doesn't exist:"
+msgstr "Tập tin không tồn tại"
+
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
+msgid "Error loading image."
+msgstr "Lỗi khi tải hình ảnh."
+
+#: ajax/savecrop.php:69
+msgid "Error getting contact object."
+msgstr ""
+
+#: ajax/savecrop.php:79
+msgid "Error getting PHOTO property."
+msgstr ""
+
+#: ajax/savecrop.php:98
+msgid "Error saving contact."
+msgstr ""
+
+#: ajax/savecrop.php:109
+msgid "Error resizing image"
+msgstr ""
+
+#: ajax/savecrop.php:112
+msgid "Error cropping image"
+msgstr ""
+
+#: ajax/savecrop.php:115
+msgid "Error creating temporary image"
+msgstr ""
+
+#: ajax/savecrop.php:118
+msgid "Error finding image: "
+msgstr ""
+
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
+msgid "Error uploading contacts to storage."
+msgstr "Lỗi tải lên danh sách địa chỉ để lưu trữ."
+
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
+msgid "There is no error, the file uploaded with success"
+msgstr "Không có lỗi, các tập tin tải lên thành công"
+
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
+msgid "Couldn't save temporary image: "
+msgstr ""
+
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
+msgid "Couldn't load temporary image: "
+msgstr ""
+
+#: ajax/uploadphoto.php:71
+msgid "No file was uploaded. Unknown error"
+msgstr ""
+
+#: appinfo/app.php:21
+msgid "Contacts"
+msgstr "Liên lạc"
+
+#: js/contacts.js:71
+msgid "Sorry, this functionality has not been implemented yet"
+msgstr ""
+
+#: js/contacts.js:71
+msgid "Not implemented"
+msgstr ""
+
+#: js/contacts.js:76
+msgid "Couldn't get a valid address."
+msgstr ""
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
+msgid "Error"
+msgstr ""
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Permission error"
+msgstr ""
+
+#: js/contacts.js:763
+msgid "This property has to be non-empty."
+msgstr ""
+
+#: js/contacts.js:789
+msgid "Couldn't serialize elements."
+msgstr ""
+
+#: js/contacts.js:921 js/contacts.js:939
+msgid ""
+"'deleteProperty' called without type argument. Please report at "
+"bugs.owncloud.org"
+msgstr ""
+
+#: js/contacts.js:958
+msgid "Edit name"
+msgstr ""
+
+#: js/contacts.js:1250
+msgid "No files selected for upload."
+msgstr ""
+
+#: js/contacts.js:1258
+msgid ""
+"The file you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr ""
+
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
+msgid "Select type"
+msgstr ""
+
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr ""
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr ""
+
+#: js/loader.js:49
+msgid "Result: "
+msgstr ""
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr ""
+
+#: js/loader.js:49
+msgid " failed."
+msgstr ""
+
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
+msgstr ""
+
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr ""
+
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr ""
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr ""
+
+#: lib/app.php:116
+msgid "Jabber"
+msgstr ""
+
+#: lib/app.php:121
+msgid "AIM"
+msgstr ""
+
+#: lib/app.php:126
+msgid "MSN"
+msgstr ""
+
+#: lib/app.php:131
+msgid "Twitter"
+msgstr ""
+
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr ""
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
+
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
+
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
+
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
+
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
+msgid "Work"
+msgstr "Công việc"
+
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
+msgid "Home"
+msgstr "Nhà"
+
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
+msgid "Mobile"
+msgstr "Di Ä‘á»™ng"
+
+#: lib/app.php:203
+msgid "Text"
+msgstr ""
+
+#: lib/app.php:204
+msgid "Voice"
+msgstr ""
+
+#: lib/app.php:205
+msgid "Message"
+msgstr ""
+
+#: lib/app.php:206
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/app.php:207
+msgid "Video"
+msgstr "Video"
+
+#: lib/app.php:208
+msgid "Pager"
+msgstr "số trang"
+
+#: lib/app.php:215
+msgid "Internet"
+msgstr ""
+
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "Ngày sinh nhật"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
+msgid "{name}'s Birthday"
+msgstr ""
+
+#: lib/search.php:15
+msgid "Contact"
+msgstr "Danh sách"
+
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
+msgid "Add Contact"
+msgstr "Thêm liên lạc"
+
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
+msgid "Addressbooks"
+msgstr "Sổ địa chỉ"
+
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr ""
+
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
+
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
+
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
+
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
+
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
+
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
+
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
+
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
+
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
+msgid "Drop photo to upload"
+msgstr ""
+
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
+msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
+msgstr ""
+
+#: templates/part.contact.php:36
+msgid "Edit name details"
+msgstr ""
+
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "Tổ chức"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "Xóa"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
+msgid "Nickname"
+msgstr ""
+
+#: templates/part.contact.php:42
+msgid "Enter nickname"
+msgstr ""
+
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
+msgid "dd-mm-yyyy"
+msgstr ""
+
+#: templates/part.contact.php:47 templates/part.contact.php:135
+msgid "Groups"
+msgstr ""
+
+#: templates/part.contact.php:49
+msgid "Separate groups with commas"
+msgstr ""
+
+#: templates/part.contact.php:50
+msgid "Edit groups"
+msgstr ""
+
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.contact.php:60
+msgid "Please specify a valid email address."
+msgstr ""
+
+#: templates/part.contact.php:60
+msgid "Enter email address"
+msgstr ""
+
+#: templates/part.contact.php:64
+msgid "Mail to address"
+msgstr ""
+
+#: templates/part.contact.php:65
+msgid "Delete email address"
+msgstr ""
+
+#: templates/part.contact.php:75
+msgid "Enter phone number"
+msgstr ""
+
+#: templates/part.contact.php:79
+msgid "Delete phone number"
+msgstr ""
+
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
+msgid "View on map"
+msgstr ""
+
+#: templates/part.contact.php:110
+msgid "Edit address details"
+msgstr ""
+
+#: templates/part.contact.php:116
+msgid "Add notes here."
+msgstr ""
+
+#: templates/part.contact.php:124
+msgid "Add field"
+msgstr ""
+
+#: templates/part.contact.php:129
+msgid "Phone"
+msgstr "Äiện thoại"
+
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "Email"
+
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
+
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "Äịa chỉ"
+
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr ""
+
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "Xóa liên lạc"
+
+#: templates/part.cropphoto.php:65
+msgid "The temporary image has been removed from cache."
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:6
+msgid "Edit address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:10
+msgid "Type"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
+msgid "PO Box"
+msgstr "Hòm thư bưu điện"
+
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
+msgid "Extended"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
+msgid "City"
+msgstr "Thành phố"
+
+#: templates/part.edit_address_dialog.php:42
+msgid "Region"
+msgstr "Vùng/miá»n"
+
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
+msgid "Zipcode"
+msgstr "Mã bưu điện"
+
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr "Quốc gia"
+
+#: templates/part.edit_name_dialog.php:16
+msgid "Addressbook"
+msgstr "Sổ địa chỉ"
+
+#: templates/part.edit_name_dialog.php:23
+msgid "Hon. prefixes"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:27
+msgid "Miss"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:28
+msgid "Ms"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:29
+msgid "Mr"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:30
+msgid "Sir"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:31
+msgid "Mrs"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:32
+msgid "Dr"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:35
+msgid "Given name"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:37
+msgid "Additional names"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:39
+msgid "Family name"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:41
+msgid "Hon. suffixes"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:45
+msgid "J.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:46
+msgid "M.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:47
+msgid "D.O."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:48
+msgid "D.C."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:49
+msgid "Ph.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:50
+msgid "Esq."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:51
+msgid "Jr."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:52
+msgid "Sn."
+msgstr ""
+
+#: templates/part.import.php:1
+msgid "Import a contacts file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the addressbook"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new addressbook"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new addressbook"
+msgstr ""
+
+#: templates/part.import.php:20
+msgid "Importing contacts"
+msgstr ""
+
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
+msgstr ""
+
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "CardDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "Tải vá»"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "Sá»­a"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr ""
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "LÆ°u"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "Hủy"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/vi/core.po b/l10n/vi/core.po
new file mode 100644
index 00000000000..29ceebc712b
--- /dev/null
+++ b/l10n/vi/core.po
@@ -0,0 +1,269 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Son Nguyen <sonnghit@gmail.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ajax/vcategories/add.php:23 ajax/vcategories/delete.php:23
+msgid "Application name not provided."
+msgstr "Tên ứng dụng không tồn tại"
+
+#: ajax/vcategories/add.php:29
+msgid "No category to add?"
+msgstr "Không có danh mục được thêm?"
+
+#: ajax/vcategories/add.php:36
+msgid "This category already exists: "
+msgstr "Danh mục này đã được tạo :"
+
+#: js/jquery-ui-1.8.16.custom.min.js:511
+msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "Cài đặt"
+
+#: js/js.js:573
+msgid "January"
+msgstr "Tháng 1"
+
+#: js/js.js:573
+msgid "February"
+msgstr "Tháng 2"
+
+#: js/js.js:573
+msgid "March"
+msgstr "Tháng 3"
+
+#: js/js.js:573
+msgid "April"
+msgstr "Tháng 4"
+
+#: js/js.js:573
+msgid "May"
+msgstr "Tháng 5"
+
+#: js/js.js:573
+msgid "June"
+msgstr "Tháng 6"
+
+#: js/js.js:574
+msgid "July"
+msgstr "Tháng 7"
+
+#: js/js.js:574
+msgid "August"
+msgstr "Tháng 8"
+
+#: js/js.js:574
+msgid "September"
+msgstr "Tháng 9"
+
+#: js/js.js:574
+msgid "October"
+msgstr "Tháng 10"
+
+#: js/js.js:574
+msgid "November"
+msgstr "Tháng 11"
+
+#: js/js.js:574
+msgid "December"
+msgstr "Tháng 12"
+
+#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
+msgid "Cancel"
+msgstr "Hủy"
+
+#: js/oc-dialogs.js:159
+msgid "No"
+msgstr "No"
+
+#: js/oc-dialogs.js:160
+msgid "Yes"
+msgstr "Yes"
+
+#: js/oc-dialogs.js:177
+msgid "Ok"
+msgstr "Ok"
+
+#: js/oc-vcategories.js:68
+msgid "No categories selected for deletion."
+msgstr "Không có thể loại nào được chá»n để xóa."
+
+#: js/oc-vcategories.js:68
+msgid "Error"
+msgstr "Lá»—i"
+
+#: lostpassword/index.php:26
+msgid "ownCloud password reset"
+msgstr "Khôi phục mật khẩu Owncloud "
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr "Dùng Ä‘Æ°á»ng dẫn sau để khôi phục lại mật khẩu : {link}"
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "Vui lòng kiểm tra Email để khôi phục lại mật khẩu."
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "Yêu cầu"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "Bạn đã nhập sai mật khẩu hay tên ngÆ°á»i dùng !"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:25
+#: templates/login.php:9
+msgid "Username"
+msgstr "Tên ngÆ°á»i dùng"
+
+#: lostpassword/templates/lostpassword.php:15
+msgid "Request reset"
+msgstr "Yêu cầu thiết lập lại "
+
+#: lostpassword/templates/resetpassword.php:4
+msgid "Your password was reset"
+msgstr "Mật khẩu của bạn đã được khôi phục"
+
+#: lostpassword/templates/resetpassword.php:5
+msgid "To login page"
+msgstr "Trang đăng nhập"
+
+#: lostpassword/templates/resetpassword.php:8
+msgid "New password"
+msgstr "Mật khẩu mới"
+
+#: lostpassword/templates/resetpassword.php:11
+msgid "Reset password"
+msgstr "Khôi phục mật khẩu"
+
+#: strings.php:5
+msgid "Personal"
+msgstr "Cá nhân"
+
+#: strings.php:6
+msgid "Users"
+msgstr "NgÆ°á»i sá»­ dụng"
+
+#: strings.php:7
+msgid "Apps"
+msgstr "Ứng dụng"
+
+#: strings.php:8
+msgid "Admin"
+msgstr "Quản trị"
+
+#: strings.php:9
+msgid "Help"
+msgstr "Giúp đỡ"
+
+#: templates/403.php:12
+msgid "Access forbidden"
+msgstr "Truy cập bị cấm "
+
+#: templates/404.php:12
+msgid "Cloud not found"
+msgstr "Không tìm thấy Clound"
+
+#: templates/edit_categories_dialog.php:4
+msgid "Edit categories"
+msgstr "Sửa thể loại"
+
+#: templates/edit_categories_dialog.php:14
+msgid "Add"
+msgstr "Thêm"
+
+#: templates/installation.php:23
+msgid "Create an <strong>admin account</strong>"
+msgstr "Tạo một <strong>tài khoản quản trị</strong>"
+
+#: templates/installation.php:29 templates/login.php:13
+msgid "Password"
+msgstr "Mật khẩu"
+
+#: templates/installation.php:35
+msgid "Advanced"
+msgstr "Nâng cao"
+
+#: templates/installation.php:37
+msgid "Data folder"
+msgstr "Thư mục dữ liệu"
+
+#: templates/installation.php:44
+msgid "Configure the database"
+msgstr "Cấu hình Cơ Sở Dữ Liệu"
+
+#: templates/installation.php:49 templates/installation.php:60
+#: templates/installation.php:70
+msgid "will be used"
+msgstr "được sử dụng"
+
+#: templates/installation.php:82
+msgid "Database user"
+msgstr "NgÆ°á»i dùng cÆ¡ sở dữ liệu"
+
+#: templates/installation.php:86
+msgid "Database password"
+msgstr "Mật khẩu cơ sở dữ liệu"
+
+#: templates/installation.php:90
+msgid "Database name"
+msgstr "Tên cơ sở dữ liệu"
+
+#: templates/installation.php:96
+msgid "Database host"
+msgstr "Database host"
+
+#: templates/installation.php:101
+msgid "Finish setup"
+msgstr "Cài đặt hoàn tất"
+
+#: templates/layout.guest.php:42
+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:49
+msgid "Log out"
+msgstr "Äăng xuất"
+
+#: templates/login.php:6
+msgid "Lost your password?"
+msgstr "Bạn quên mật khẩu ?"
+
+#: templates/login.php:17
+msgid "remember"
+msgstr "Nhá»›"
+
+#: templates/login.php:18
+msgid "Log in"
+msgstr "Äăng nhập"
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr "Bạn đã đăng xuất."
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr "Lùi lại"
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr "Kế tiếp"
diff --git a/l10n/vi/files.po b/l10n/vi/files.po
new file mode 100644
index 00000000000..8ce76018a86
--- /dev/null
+++ b/l10n/vi/files.po
@@ -0,0 +1,219 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ajax/upload.php:20
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/upload.php:21
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: ajax/upload.php:22
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/upload.php:23
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/upload.php:24
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/upload.php:25
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/upload.php:26
+msgid "Failed to write to disk"
+msgstr ""
+
+#: appinfo/app.php:6
+msgid "Files"
+msgstr "Tập tin"
+
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "Xóa"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
+msgid "generating ZIP-file, it may take some time."
+msgstr ""
+
+#: js/files.js:200
+msgid "Unable to upload your file as it is a directory or has 0 bytes"
+msgstr ""
+
+#: js/files.js:200
+msgid "Upload Error"
+msgstr "Tải lên lỗi"
+
+#: js/files.js:228 js/files.js:319 js/files.js:348
+msgid "Pending"
+msgstr "Chá»"
+
+#: js/files.js:333
+msgid "Upload cancelled."
+msgstr "Hủy tải lên"
+
+#: js/files.js:457
+msgid "Invalid name, '/' is not allowed."
+msgstr "Tên không hợp lệ ,không được phép dùng '/'"
+
+#: js/files.js:703 templates/index.php:55
+msgid "Size"
+msgstr "Kích cỡ"
+
+#: js/files.js:704 templates/index.php:56
+msgid "Modified"
+msgstr "Thay đổi"
+
+#: js/files.js:731
+msgid "folder"
+msgstr "folder"
+
+#: js/files.js:733
+msgid "folders"
+msgstr "folders"
+
+#: js/files.js:741
+msgid "file"
+msgstr "file"
+
+#: js/files.js:743
+msgid "files"
+msgstr "files"
+
+#: templates/admin.php:5
+msgid "File handling"
+msgstr "Xử lý tập tin"
+
+#: templates/admin.php:7
+msgid "Maximum upload size"
+msgstr "Kích thước tối đa "
+
+#: templates/admin.php:7
+msgid "max. possible: "
+msgstr ""
+
+#: templates/admin.php:9
+msgid "Needed for multi-file and folder downloads."
+msgstr ""
+
+#: templates/admin.php:9
+msgid "Enable ZIP-download"
+msgstr "Cho phép ZIP-download"
+
+#: templates/admin.php:11
+msgid "0 is unlimited"
+msgstr "0 là không giới hạn"
+
+#: templates/admin.php:12
+msgid "Maximum input size for ZIP files"
+msgstr "Kích thước tối đa cho các tập tin ZIP"
+
+#: templates/index.php:7
+msgid "New"
+msgstr "Má»›i"
+
+#: templates/index.php:9
+msgid "Text file"
+msgstr "Tập tin văn bản"
+
+#: templates/index.php:10
+msgid "Folder"
+msgstr "Folder"
+
+#: templates/index.php:11
+msgid "From url"
+msgstr "Từ url"
+
+#: templates/index.php:21
+msgid "Upload"
+msgstr "Tải lên"
+
+#: templates/index.php:27
+msgid "Cancel upload"
+msgstr "Hủy upload"
+
+#: templates/index.php:39
+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:47
+msgid "Name"
+msgstr "Tên"
+
+#: templates/index.php:49
+msgid "Share"
+msgstr "Chia sẻ"
+
+#: templates/index.php:51
+msgid "Download"
+msgstr "Tải xuống"
+
+#: templates/index.php:64
+msgid "Upload too large"
+msgstr "File tải lên quá lớn"
+
+#: templates/index.php:66
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: templates/index.php:71
+msgid "Files are being scanned, please wait."
+msgstr "Tập tin Ä‘ang được quét ,vui lòng chá»."
+
+#: templates/index.php:74
+msgid "Current scanning"
+msgstr ""
diff --git a/l10n/vi/files_encryption.po b/l10n/vi/files_encryption.po
new file mode 100644
index 00000000000..d76c619333d
--- /dev/null
+++ b/l10n/vi/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/vi/files_external.po b/l10n/vi/files_external.po
new file mode 100644
index 00000000000..8633bedfa5c
--- /dev/null
+++ b/l10n/vi/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/vi/files_sharing.po b/l10n/vi/files_sharing.po
new file mode 100644
index 00000000000..87e7cce9bd0
--- /dev/null
+++ b/l10n/vi/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/vi/files_versions.po b/l10n/vi/files_versions.po
new file mode 100644
index 00000000000..2f97cd4aa3d
--- /dev/null
+++ b/l10n/vi/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/vi/gallery.po b/l10n/vi/gallery.po
new file mode 100644
index 00000000000..741f026c53d
--- /dev/null
+++ b/l10n/vi/gallery.po
@@ -0,0 +1,60 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Son Nguyen <sonnghit@gmail.com>, 2012.
+# 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-07-26 08:03+0200\n"
+"PO-Revision-Date: 2012-07-25 19:30+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: appinfo/app.php:39
+msgid "Pictures"
+msgstr "Hình ảnh"
+
+#: js/pictures.js:12
+msgid "Share gallery"
+msgstr "Chia sẻ gallery"
+
+#: js/pictures.js:32
+msgid "Error: "
+msgstr "Lá»—i :"
+
+#: js/pictures.js:32
+msgid "Internal error"
+msgstr "Lá»—i ná»™i bá»™"
+
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr "Trở lại"
+
+#: templates/view_album.php:36
+msgid "Remove confirmation"
+msgstr "Xóa xác nhận"
+
+#: templates/view_album.php:37
+msgid "Do you want to remove album"
+msgstr "Bạn muốn xóa album này "
+
+#: templates/view_album.php:40
+msgid "Change album name"
+msgstr "Äổi tên album"
+
+#: templates/view_album.php:43
+msgid "New album name"
+msgstr "Tên album mới"
diff --git a/l10n/vi/lib.po b/l10n/vi/lib.po
new file mode 100644
index 00000000000..40d92269ac1
--- /dev/null
+++ b/l10n/vi/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/vi/media.po b/l10n/vi/media.po
new file mode 100644
index 00000000000..9c4613fa2bc
--- /dev/null
+++ b/l10n/vi/media.po
@@ -0,0 +1,67 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# 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-07-26 08:03+0200\n"
+"PO-Revision-Date: 2012-07-23 06:41+0000\n"
+"Last-Translator: SÆ¡n Nguyá»…n <sonnghit@gmail.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"
+
+#: appinfo/app.php:45 templates/player.php:8
+msgid "Music"
+msgstr "Âm nhạc"
+
+#: js/music.js:18
+msgid "Add album to playlist"
+msgstr "Thêm album vào playlist"
+
+#: templates/music.php:3 templates/player.php:12
+msgid "Play"
+msgstr "Play"
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:13
+msgid "Pause"
+msgstr "Tạm dừng"
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr "Trang trÆ°á»›c"
+
+#: templates/music.php:6 templates/player.php:14
+msgid "Next"
+msgstr "Tiếp theo"
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr "Tắt"
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr "Bật"
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr "Quét lại bộ sưu tập"
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr "Nghệ sỹ"
+
+#: templates/music.php:38
+msgid "Album"
+msgstr "Album"
+
+#: templates/music.php:39
+msgid "Title"
+msgstr "Tiêu Ä‘á»"
diff --git a/l10n/vi/settings.po b/l10n/vi/settings.po
new file mode 100644
index 00000000000..41c0adc6ef3
--- /dev/null
+++ b/l10n/vi/settings.po
@@ -0,0 +1,240 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Son Nguyen <sonnghit@gmail.com>, 2012.
+# 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-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: ajax/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
+#: ajax/lostpassword.php:14
+msgid "Email saved"
+msgstr "LÆ°u email"
+
+#: ajax/lostpassword.php:16
+msgid "Invalid email"
+msgstr "Email không hợp lệ"
+
+#: ajax/openid.php:16
+msgid "OpenID Changed"
+msgstr "Äổi OpenID"
+
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
+msgid "Invalid request"
+msgstr "Yêu cầu không hợp lệ"
+
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
+msgid "Language changed"
+msgstr "Ngôn ngữ đã được thay đổi"
+
+#: js/apps.js:18
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr "Vô hiệu"
+
+#: js/apps.js:39 js/apps.js:62
+msgid "Enable"
+msgstr "Cho phép"
+
+#: js/personal.js:69
+msgid "Saving..."
+msgstr "Äang tiến hành lÆ°u ..."
+
+#: personal.php:46 personal.php:47
+msgid "__language_name__"
+msgstr "__Ngôn ngữ___"
+
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
+msgid "Log"
+msgstr "Log"
+
+#: templates/admin.php:67
+msgid "More"
+msgstr "nhiá»u hÆ¡n"
+
+#: templates/apps.php:10
+msgid "Add your App"
+msgstr "Thêm ứng dụng của bạn"
+
+#: templates/apps.php:26
+msgid "Select an App"
+msgstr "Chá»n má»™t ứng dụng"
+
+#: templates/apps.php:29
+msgid "See application page at apps.owncloud.com"
+msgstr "Xem ứng dụng tại apps.owncloud.com"
+
+#: templates/apps.php:30
+msgid "-licensed"
+msgstr "Giấy phép đã được cấp"
+
+#: templates/apps.php:30
+msgid "by"
+msgstr "bởi"
+
+#: templates/help.php:8
+msgid "Documentation"
+msgstr "Tài liệu"
+
+#: templates/help.php:9
+msgid "Managing Big Files"
+msgstr "Quản lý tập tin lớn"
+
+#: templates/help.php:10
+msgid "Ask a question"
+msgstr "Äặt câu há»i"
+
+#: templates/help.php:22
+msgid "Problems connecting to help database."
+msgstr "Vấn đỠkết nối đến cơ sở dữ liệu."
+
+#: templates/help.php:23
+msgid "Go there manually."
+msgstr "Äến bằng thủ công"
+
+#: templates/help.php:31
+msgid "Answer"
+msgstr "trả lá»i"
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr "Bạn sử dụng"
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr "có sẵn"
+
+#: templates/personal.php:12
+msgid "Desktop and Mobile Syncing Clients"
+msgstr "Äồng bá»™ dữ liệu"
+
+#: templates/personal.php:13
+msgid "Download"
+msgstr "Tải vá»"
+
+#: templates/personal.php:19
+msgid "Your password got changed"
+msgstr "Mật khẩu đã được thay đổi"
+
+#: templates/personal.php:20
+msgid "Unable to change your password"
+msgstr "Không thể đổi mật khẩu"
+
+#: templates/personal.php:21
+msgid "Current password"
+msgstr "Mật khẩu cũ"
+
+#: templates/personal.php:22
+msgid "New password"
+msgstr "Mật khẩu mới "
+
+#: templates/personal.php:23
+msgid "show"
+msgstr "Hiện"
+
+#: templates/personal.php:24
+msgid "Change password"
+msgstr "Äổi mật khẩu"
+
+#: templates/personal.php:30
+msgid "Email"
+msgstr "Email"
+
+#: templates/personal.php:31
+msgid "Your email address"
+msgstr "Email của bạn"
+
+#: templates/personal.php:32
+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:38 templates/personal.php:39
+msgid "Language"
+msgstr "Ngôn ngữ"
+
+#: templates/personal.php:44
+msgid "Help translate"
+msgstr "Dịch "
+
+#: templates/personal.php:51
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr "sử dụng địa chỉ này để kết nối với ownCloud của bạn trong quản lý tập tin "
+
+#: templates/users.php:21 templates/users.php:76
+msgid "Name"
+msgstr "Tên"
+
+#: templates/users.php:23 templates/users.php:77
+msgid "Password"
+msgstr "Mật khẩu"
+
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
+msgid "Groups"
+msgstr "Nhóm"
+
+#: templates/users.php:32
+msgid "Create"
+msgstr "Tạo"
+
+#: templates/users.php:35
+msgid "Default Quota"
+msgstr "Hạn ngạch mặt định"
+
+#: templates/users.php:55 templates/users.php:138
+msgid "Other"
+msgstr "Khác"
+
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
+msgid "Quota"
+msgstr "Hạn ngạch"
+
+#: templates/users.php:146
+msgid "Delete"
+msgstr "Xóa"
diff --git a/l10n/vi/tasks.po b/l10n/vi/tasks.po
new file mode 100644
index 00000000000..d22fa25d8ca
--- /dev/null
+++ b/l10n/vi/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/vi/user_ldap.po b/l10n/vi/user_ldap.po
new file mode 100644
index 00000000000..52c6146db34
--- /dev/null
+++ b/l10n/vi/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/vi/user_migrate.po b/l10n/vi/user_migrate.po
new file mode 100644
index 00000000000..1e5615249f7
--- /dev/null
+++ b/l10n/vi/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/vi/user_openid.po b/l10n/vi/user_openid.po
new file mode 100644
index 00000000000..848cdb3cf4b
--- /dev/null
+++ b/l10n/vi/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/zh_CN.GB2312/admin_dependencies_chk.po b/l10n/zh_CN.GB2312/admin_dependencies_chk.po
new file mode 100644
index 00000000000..b226f02b4ca
--- /dev/null
+++ b/l10n/zh_CN.GB2312/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/zh_CN.GB2312/admin_migrate.po b/l10n/zh_CN.GB2312/admin_migrate.po
new file mode 100644
index 00000000000..f33396b69ec
--- /dev/null
+++ b/l10n/zh_CN.GB2312/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/zh_CN.GB2312/bookmarks.po b/l10n/zh_CN.GB2312/bookmarks.po
new file mode 100644
index 00000000000..7bf81fd4608
--- /dev/null
+++ b/l10n/zh_CN.GB2312/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/zh_CN.GB2312/calendar.po b/l10n/zh_CN.GB2312/calendar.po
new file mode 100644
index 00000000000..5e807e319ff
--- /dev/null
+++ b/l10n/zh_CN.GB2312/calendar.po
@@ -0,0 +1,814 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <bluehattree@126.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-12 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 14:53+0000\n"
+"Last-Translator: bluehattree <bluehattree@126.com>\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/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
+msgid "No calendars found."
+msgstr ""
+
+#: ajax/categories/rescan.php:37
+msgid "No events found."
+msgstr ""
+
+#: ajax/event/edit.form.php:20
+msgid "Wrong calendar"
+msgstr "错误的日历"
+
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
+#: ajax/settings/guesstimezone.php:25
+msgid "New Timezone:"
+msgstr "新时区"
+
+#: ajax/settings/settimezone.php:23
+msgid "Timezone changed"
+msgstr "时区改å˜äº†"
+
+#: ajax/settings/settimezone.php:25
+msgid "Invalid request"
+msgstr "éžæ³•è¯·æ±‚"
+
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
+msgid "Calendar"
+msgstr "日历"
+
+#: js/calendar.js:832
+msgid "ddd"
+msgstr ""
+
+#: js/calendar.js:833
+msgid "ddd M/d"
+msgstr ""
+
+#: js/calendar.js:834
+msgid "dddd M/d"
+msgstr ""
+
+#: js/calendar.js:837
+msgid "MMMM yyyy"
+msgstr ""
+
+#: js/calendar.js:839
+msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
+msgstr ""
+
+#: js/calendar.js:841
+msgid "dddd, MMM d, yyyy"
+msgstr ""
+
+#: lib/app.php:121
+msgid "Birthday"
+msgstr "生日"
+
+#: lib/app.php:122
+msgid "Business"
+msgstr "商务"
+
+#: lib/app.php:123
+msgid "Call"
+msgstr "呼å«"
+
+#: lib/app.php:124
+msgid "Clients"
+msgstr "客户端"
+
+#: lib/app.php:125
+msgid "Deliverer"
+msgstr "交付者"
+
+#: lib/app.php:126
+msgid "Holidays"
+msgstr "å‡æœŸ"
+
+#: lib/app.php:127
+msgid "Ideas"
+msgstr "çµæ„Ÿ"
+
+#: lib/app.php:128
+msgid "Journey"
+msgstr "旅行"
+
+#: lib/app.php:129
+msgid "Jubilee"
+msgstr "五å年纪念"
+
+#: lib/app.php:130
+msgid "Meeting"
+msgstr "会é¢"
+
+#: lib/app.php:131
+msgid "Other"
+msgstr "其它"
+
+#: lib/app.php:132
+msgid "Personal"
+msgstr "个人的"
+
+#: lib/app.php:133
+msgid "Projects"
+msgstr "项目"
+
+#: lib/app.php:134
+msgid "Questions"
+msgstr "问题"
+
+#: lib/app.php:135
+msgid "Work"
+msgstr "工作"
+
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
+msgid "unnamed"
+msgstr ""
+
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "新的日历"
+
+#: lib/object.php:372
+msgid "Does not repeat"
+msgstr "ä¸è¦é‡å¤"
+
+#: lib/object.php:373
+msgid "Daily"
+msgstr "æ¯å¤©"
+
+#: lib/object.php:374
+msgid "Weekly"
+msgstr "æ¯æ˜ŸæœŸ"
+
+#: lib/object.php:375
+msgid "Every Weekday"
+msgstr "æ¯ä¸ªå‘¨æœ«"
+
+#: lib/object.php:376
+msgid "Bi-Weekly"
+msgstr "æ¯ä¸¤å‘¨"
+
+#: lib/object.php:377
+msgid "Monthly"
+msgstr "æ¯ä¸ªæœˆ"
+
+#: lib/object.php:378
+msgid "Yearly"
+msgstr "æ¯å¹´"
+
+#: lib/object.php:388
+msgid "never"
+msgstr "从ä¸"
+
+#: lib/object.php:389
+msgid "by occurrences"
+msgstr "æ ¹æ®å‘生时"
+
+#: lib/object.php:390
+msgid "by date"
+msgstr "æ ¹æ®æ—¥æœŸ"
+
+#: lib/object.php:400
+msgid "by monthday"
+msgstr "æ ¹æ®æœˆå¤©"
+
+#: lib/object.php:401
+msgid "by weekday"
+msgstr "æ ¹æ®æ˜ŸæœŸ"
+
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
+msgid "Monday"
+msgstr "星期一"
+
+#: lib/object.php:412 templates/calendar.php:5
+msgid "Tuesday"
+msgstr "星期二"
+
+#: lib/object.php:413 templates/calendar.php:5
+msgid "Wednesday"
+msgstr "星期三"
+
+#: lib/object.php:414 templates/calendar.php:5
+msgid "Thursday"
+msgstr "星期四"
+
+#: lib/object.php:415 templates/calendar.php:5
+msgid "Friday"
+msgstr "星期五"
+
+#: lib/object.php:416 templates/calendar.php:5
+msgid "Saturday"
+msgstr "星期六"
+
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
+msgid "Sunday"
+msgstr "星期天"
+
+#: lib/object.php:427
+msgid "events week of month"
+msgstr "时间æ¯æœˆå‘生的周数"
+
+#: lib/object.php:428
+msgid "first"
+msgstr "首先"
+
+#: lib/object.php:429
+msgid "second"
+msgstr "其次"
+
+#: lib/object.php:430
+msgid "third"
+msgstr "第三"
+
+#: lib/object.php:431
+msgid "fourth"
+msgstr "第四"
+
+#: lib/object.php:432
+msgid "fifth"
+msgstr "第五"
+
+#: lib/object.php:433
+msgid "last"
+msgstr "最åŽ"
+
+#: lib/object.php:467 templates/calendar.php:7
+msgid "January"
+msgstr "一月"
+
+#: lib/object.php:468 templates/calendar.php:7
+msgid "February"
+msgstr "二月"
+
+#: lib/object.php:469 templates/calendar.php:7
+msgid "March"
+msgstr "三月"
+
+#: lib/object.php:470 templates/calendar.php:7
+msgid "April"
+msgstr "四月"
+
+#: lib/object.php:471 templates/calendar.php:7
+msgid "May"
+msgstr "五月"
+
+#: lib/object.php:472 templates/calendar.php:7
+msgid "June"
+msgstr "六月"
+
+#: lib/object.php:473 templates/calendar.php:7
+msgid "July"
+msgstr "七月"
+
+#: lib/object.php:474 templates/calendar.php:7
+msgid "August"
+msgstr "八月"
+
+#: lib/object.php:475 templates/calendar.php:7
+msgid "September"
+msgstr "ä¹æœˆ"
+
+#: lib/object.php:476 templates/calendar.php:7
+msgid "October"
+msgstr "å月"
+
+#: lib/object.php:477 templates/calendar.php:7
+msgid "November"
+msgstr "å一月"
+
+#: lib/object.php:478 templates/calendar.php:7
+msgid "December"
+msgstr "å二月"
+
+#: lib/object.php:488
+msgid "by events date"
+msgstr "æ ¹æ®æ—¶é—´æ—¥æœŸ"
+
+#: lib/object.php:489
+msgid "by yearday(s)"
+msgstr "æ ¹æ®å¹´æ•°"
+
+#: lib/object.php:490
+msgid "by weeknumber(s)"
+msgstr "æ ¹æ®å‘¨æ•°"
+
+#: lib/object.php:491
+msgid "by day and month"
+msgstr "æ ¹æ®å¤©å’Œæœˆ"
+
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
+msgid "Date"
+msgstr "日期"
+
+#: lib/search.php:43
+msgid "Cal."
+msgstr "Cal."
+
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
+#: templates/calendar.php:11
+msgid "All day"
+msgstr "整天"
+
+#: templates/calendar.php:13
+msgid "Missing fields"
+msgstr "丢失的输入框"
+
+#: templates/calendar.php:14 templates/part.eventform.php:19
+#: templates/part.showevent.php:11
+msgid "Title"
+msgstr "标题"
+
+#: templates/calendar.php:16
+msgid "From Date"
+msgstr "从日期"
+
+#: templates/calendar.php:17
+msgid "From Time"
+msgstr "从时间"
+
+#: templates/calendar.php:18
+msgid "To Date"
+msgstr "到日期"
+
+#: templates/calendar.php:19
+msgid "To Time"
+msgstr "到时间"
+
+#: templates/calendar.php:20
+msgid "The event ends before it starts"
+msgstr "在它开始å‰éœ€è¦ç»“æŸçš„事件"
+
+#: templates/calendar.php:21
+msgid "There was a database fail"
+msgstr "å‘生了一个数æ®åº“失败"
+
+#: templates/calendar.php:39
+msgid "Week"
+msgstr "星期"
+
+#: templates/calendar.php:40
+msgid "Month"
+msgstr "月"
+
+#: templates/calendar.php:41
+msgid "List"
+msgstr "列表"
+
+#: templates/calendar.php:45
+msgid "Today"
+msgstr "今天"
+
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
+
+#: templates/part.choosecalendar.php:2
+msgid "Your calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.php:27
+#: templates/part.choosecalendar.rowfields.php:11
+msgid "CalDav Link"
+msgstr "CalDav 链接"
+
+#: templates/part.choosecalendar.php:31
+msgid "Shared calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.php:48
+msgid "No shared calendars"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:8
+msgid "Share Calendar"
+msgstr ""
+
+#: templates/part.choosecalendar.rowfields.php:14
+msgid "Download"
+msgstr "下载"
+
+#: templates/part.choosecalendar.rowfields.php:17
+msgid "Edit"
+msgstr "编辑"
+
+#: templates/part.choosecalendar.rowfields.php:20
+#: templates/part.editevent.php:9
+msgid "Delete"
+msgstr "删除"
+
+#: templates/part.choosecalendar.rowfields.shared.php:4
+msgid "shared with you by"
+msgstr ""
+
+#: templates/part.editcalendar.php:9
+msgid "New calendar"
+msgstr "新的日历"
+
+#: templates/part.editcalendar.php:9
+msgid "Edit calendar"
+msgstr "编辑日历"
+
+#: templates/part.editcalendar.php:12
+msgid "Displayname"
+msgstr "显示å称"
+
+#: templates/part.editcalendar.php:23
+msgid "Active"
+msgstr "活动"
+
+#: templates/part.editcalendar.php:29
+msgid "Calendar color"
+msgstr "日历颜色"
+
+#: templates/part.editcalendar.php:42
+msgid "Save"
+msgstr "ä¿å­˜"
+
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
+#: templates/part.newevent.php:6
+msgid "Submit"
+msgstr "æ交"
+
+#: templates/part.editcalendar.php:43
+msgid "Cancel"
+msgstr " å–消"
+
+#: templates/part.editevent.php:1
+msgid "Edit an event"
+msgstr "编辑一个事件"
+
+#: templates/part.editevent.php:10
+msgid "Export"
+msgstr "导出"
+
+#: templates/part.eventform.php:8 templates/part.showevent.php:3
+msgid "Eventinfo"
+msgstr ""
+
+#: templates/part.eventform.php:9 templates/part.showevent.php:4
+msgid "Repeating"
+msgstr ""
+
+#: templates/part.eventform.php:10 templates/part.showevent.php:5
+msgid "Alarm"
+msgstr ""
+
+#: templates/part.eventform.php:11 templates/part.showevent.php:6
+msgid "Attendees"
+msgstr ""
+
+#: templates/part.eventform.php:13
+msgid "Share"
+msgstr ""
+
+#: templates/part.eventform.php:21
+msgid "Title of the Event"
+msgstr "事件的标题"
+
+#: templates/part.eventform.php:27 templates/part.showevent.php:19
+msgid "Category"
+msgstr "分类"
+
+#: templates/part.eventform.php:29
+msgid "Separate categories with commas"
+msgstr ""
+
+#: templates/part.eventform.php:30
+msgid "Edit categories"
+msgstr ""
+
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
+msgid "All Day Event"
+msgstr "æ¯å¤©çš„事件"
+
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
+msgid "From"
+msgstr "从"
+
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
+msgid "To"
+msgstr "到"
+
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
+msgid "Advanced options"
+msgstr "进阶选项"
+
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
+msgid "Location"
+msgstr "地点"
+
+#: templates/part.eventform.php:83
+msgid "Location of the Event"
+msgstr "事件的地点"
+
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
+msgid "Description"
+msgstr "解释"
+
+#: templates/part.eventform.php:91
+msgid "Description of the Event"
+msgstr "事件æè¿°"
+
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
+msgid "Repeat"
+msgstr "é‡å¤"
+
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
+msgid "Advanced"
+msgstr "进阶"
+
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
+msgid "Select weekdays"
+msgstr "选择星期"
+
+#: templates/part.eventform.php:164 templates/part.eventform.php:177
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
+msgid "Select days"
+msgstr "选择日"
+
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
+msgid "and the events day of year."
+msgstr "选择æ¯å¹´æ—¶é—´å‘生天数"
+
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
+msgid "and the events day of month."
+msgstr "选择æ¯ä¸ªæœˆäº‹ä»¶å‘生的天"
+
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
+msgid "Select months"
+msgstr "选择月份"
+
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
+msgid "Select weeks"
+msgstr "选择星期"
+
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
+msgid "and the events week of year."
+msgstr "æ¯å¹´æ—¶é—´å‘生的星期"
+
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
+msgid "Interval"
+msgstr "é—´éš”"
+
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
+msgid "End"
+msgstr "结æŸ"
+
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
+msgid "occurrences"
+msgstr "å‘生"
+
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr ""
+
+#: templates/part.import.php:17
+msgid "Import a calendar file"
+msgstr ""
+
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
+
+#: templates/part.import.php:36
+msgid "Name of new calendar"
+msgstr ""
+
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
+
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
+
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "导入"
+
+#: templates/part.import.php:56
+msgid "Close Dialog"
+msgstr ""
+
+#: templates/part.newevent.php:1
+msgid "Create a new event"
+msgstr "新建一个时间"
+
+#: templates/part.showevent.php:1
+msgid "View an event"
+msgstr ""
+
+#: templates/part.showevent.php:23
+msgid "No categories selected"
+msgstr ""
+
+#: templates/part.showevent.php:37
+msgid "of"
+msgstr ""
+
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
+msgid "at"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "Timezone"
+msgstr "时区"
+
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
+
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
+
+#: templates/settings.php:57
+msgid "24h"
+msgstr "24å°æ—¶"
+
+#: templates/settings.php:58
+msgid "12h"
+msgstr "12å°æ—¶"
+
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
+
+#: templates/share.dropdown.php:20
+msgid "Users"
+msgstr ""
+
+#: templates/share.dropdown.php:21
+msgid "select users"
+msgstr ""
+
+#: templates/share.dropdown.php:36 templates/share.dropdown.php:62
+msgid "Editable"
+msgstr ""
+
+#: templates/share.dropdown.php:48
+msgid "Groups"
+msgstr ""
+
+#: templates/share.dropdown.php:49
+msgid "select groups"
+msgstr ""
+
+#: templates/share.dropdown.php:75
+msgid "make public"
+msgstr ""
diff --git a/l10n/zh_CN.GB2312/contacts.po b/l10n/zh_CN.GB2312/contacts.po
new file mode 100644
index 00000000000..d4431695aee
--- /dev/null
+++ b/l10n/zh_CN.GB2312/contacts.po
@@ -0,0 +1,952 @@
+# 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: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/addressbook/activate.php:24 ajax/addressbook/update.php:32
+msgid "Error (de)activating addressbook."
+msgstr ""
+
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr ""
+
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr ""
+
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr ""
+
+#: ajax/categories/categoriesfor.php:17
+msgid "No ID provided"
+msgstr ""
+
+#: ajax/categories/categoriesfor.php:34
+msgid "Error setting checksum."
+msgstr ""
+
+#: ajax/categories/delete.php:19
+msgid "No categories selected for deletion."
+msgstr ""
+
+#: ajax/categories/delete.php:26
+msgid "No address books found."
+msgstr ""
+
+#: ajax/categories/delete.php:34
+msgid "No contacts found."
+msgstr ""
+
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr ""
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr ""
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr ""
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr ""
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr ""
+
+#: ajax/contact/details.php:31
+msgid "Missing ID"
+msgstr ""
+
+#: ajax/contact/details.php:36
+msgid "Error parsing VCard for ID: \""
+msgstr ""
+
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr ""
+
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr ""
+
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr ""
+
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
+#: ajax/uploadphoto.php:68
+msgid "No contact ID was submitted."
+msgstr ""
+
+#: ajax/currentphoto.php:36
+msgid "Error reading contact photo."
+msgstr ""
+
+#: ajax/currentphoto.php:48
+msgid "Error saving temporary file."
+msgstr ""
+
+#: ajax/currentphoto.php:51
+msgid "The loading photo is not valid."
+msgstr ""
+
+#: ajax/editname.php:31
+msgid "Contact ID is missing."
+msgstr ""
+
+#: ajax/oc_photo.php:32
+msgid "No photo path was submitted."
+msgstr ""
+
+#: ajax/oc_photo.php:39
+msgid "File doesn't exist:"
+msgstr ""
+
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
+msgid "Error loading image."
+msgstr ""
+
+#: ajax/savecrop.php:69
+msgid "Error getting contact object."
+msgstr ""
+
+#: ajax/savecrop.php:79
+msgid "Error getting PHOTO property."
+msgstr ""
+
+#: ajax/savecrop.php:98
+msgid "Error saving contact."
+msgstr ""
+
+#: ajax/savecrop.php:109
+msgid "Error resizing image"
+msgstr ""
+
+#: ajax/savecrop.php:112
+msgid "Error cropping image"
+msgstr ""
+
+#: ajax/savecrop.php:115
+msgid "Error creating temporary image"
+msgstr ""
+
+#: ajax/savecrop.php:118
+msgid "Error finding image: "
+msgstr ""
+
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
+msgid "Error uploading contacts to storage."
+msgstr ""
+
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
+msgid "There is no error, the file uploaded with success"
+msgstr ""
+
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr ""
+
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form"
+msgstr ""
+
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
+msgid "The uploaded file was only partially uploaded"
+msgstr ""
+
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
+msgid "No file was uploaded"
+msgstr ""
+
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
+msgid "Missing a temporary folder"
+msgstr ""
+
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
+msgid "Couldn't save temporary image: "
+msgstr ""
+
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
+msgid "Couldn't load temporary image: "
+msgstr ""
+
+#: ajax/uploadphoto.php:71
+msgid "No file was uploaded. Unknown error"
+msgstr ""
+
+#: appinfo/app.php:21
+msgid "Contacts"
+msgstr ""
+
+#: js/contacts.js:71
+msgid "Sorry, this functionality has not been implemented yet"
+msgstr ""
+
+#: js/contacts.js:71
+msgid "Not implemented"
+msgstr ""
+
+#: js/contacts.js:76
+msgid "Couldn't get a valid address."
+msgstr ""
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
+msgid "Error"
+msgstr ""
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Permission error"
+msgstr ""
+
+#: js/contacts.js:763
+msgid "This property has to be non-empty."
+msgstr ""
+
+#: js/contacts.js:789
+msgid "Couldn't serialize elements."
+msgstr ""
+
+#: js/contacts.js:921 js/contacts.js:939
+msgid ""
+"'deleteProperty' called without type argument. Please report at "
+"bugs.owncloud.org"
+msgstr ""
+
+#: js/contacts.js:958
+msgid "Edit name"
+msgstr ""
+
+#: js/contacts.js:1250
+msgid "No files selected for upload."
+msgstr ""
+
+#: js/contacts.js:1258
+msgid ""
+"The file you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr ""
+
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
+msgstr ""
+
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
+msgid "Select type"
+msgstr ""
+
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
+msgstr ""
+
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
+msgstr ""
+
+#: js/loader.js:49
+msgid "Result: "
+msgstr ""
+
+#: js/loader.js:49
+msgid " imported, "
+msgstr ""
+
+#: js/loader.js:49
+msgid " failed."
+msgstr ""
+
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
+msgstr ""
+
+#: lib/app.php:36
+msgid "Addressbook not found: "
+msgstr ""
+
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr ""
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr ""
+
+#: lib/app.php:116
+msgid "Jabber"
+msgstr ""
+
+#: lib/app.php:121
+msgid "AIM"
+msgstr ""
+
+#: lib/app.php:126
+msgid "MSN"
+msgstr ""
+
+#: lib/app.php:131
+msgid "Twitter"
+msgstr ""
+
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr ""
+
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
+
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
+
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
+
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
+
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
+
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
+
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
+msgid "Work"
+msgstr ""
+
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
+msgid "Home"
+msgstr ""
+
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
+msgid "Mobile"
+msgstr ""
+
+#: lib/app.php:203
+msgid "Text"
+msgstr ""
+
+#: lib/app.php:204
+msgid "Voice"
+msgstr ""
+
+#: lib/app.php:205
+msgid "Message"
+msgstr ""
+
+#: lib/app.php:206
+msgid "Fax"
+msgstr ""
+
+#: lib/app.php:207
+msgid "Video"
+msgstr ""
+
+#: lib/app.php:208
+msgid "Pager"
+msgstr ""
+
+#: lib/app.php:215
+msgid "Internet"
+msgstr ""
+
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr ""
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
+msgid "{name}'s Birthday"
+msgstr ""
+
+#: lib/search.php:15
+msgid "Contact"
+msgstr ""
+
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
+msgid "Add Contact"
+msgstr ""
+
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
+msgid "Addressbooks"
+msgstr ""
+
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr ""
+
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
+
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
+
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
+
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
+
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
+
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
+
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
+
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
+
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
+msgid "Drop photo to upload"
+msgstr ""
+
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
+msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
+msgstr ""
+
+#: templates/part.contact.php:36
+msgid "Edit name details"
+msgstr ""
+
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr ""
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr ""
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
+msgid "Nickname"
+msgstr ""
+
+#: templates/part.contact.php:42
+msgid "Enter nickname"
+msgstr ""
+
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
+msgid "dd-mm-yyyy"
+msgstr ""
+
+#: templates/part.contact.php:47 templates/part.contact.php:135
+msgid "Groups"
+msgstr ""
+
+#: templates/part.contact.php:49
+msgid "Separate groups with commas"
+msgstr ""
+
+#: templates/part.contact.php:50
+msgid "Edit groups"
+msgstr ""
+
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
+msgid "Preferred"
+msgstr ""
+
+#: templates/part.contact.php:60
+msgid "Please specify a valid email address."
+msgstr ""
+
+#: templates/part.contact.php:60
+msgid "Enter email address"
+msgstr ""
+
+#: templates/part.contact.php:64
+msgid "Mail to address"
+msgstr ""
+
+#: templates/part.contact.php:65
+msgid "Delete email address"
+msgstr ""
+
+#: templates/part.contact.php:75
+msgid "Enter phone number"
+msgstr ""
+
+#: templates/part.contact.php:79
+msgid "Delete phone number"
+msgstr ""
+
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
+msgid "View on map"
+msgstr ""
+
+#: templates/part.contact.php:110
+msgid "Edit address details"
+msgstr ""
+
+#: templates/part.contact.php:116
+msgid "Add notes here."
+msgstr ""
+
+#: templates/part.contact.php:124
+msgid "Add field"
+msgstr ""
+
+#: templates/part.contact.php:129
+msgid "Phone"
+msgstr ""
+
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr ""
+
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
+
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr ""
+
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr ""
+
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr ""
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr ""
+
+#: templates/part.cropphoto.php:65
+msgid "The temporary image has been removed from cache."
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:6
+msgid "Edit address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:10
+msgid "Type"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
+msgid "PO Box"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
+msgid "Extended"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
+msgid "City"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:42
+msgid "Region"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
+msgid "Zipcode"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:16
+msgid "Addressbook"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:23
+msgid "Hon. prefixes"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:27
+msgid "Miss"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:28
+msgid "Ms"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:29
+msgid "Mr"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:30
+msgid "Sir"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:31
+msgid "Mrs"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:32
+msgid "Dr"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:35
+msgid "Given name"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:37
+msgid "Additional names"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:39
+msgid "Family name"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:41
+msgid "Hon. suffixes"
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:45
+msgid "J.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:46
+msgid "M.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:47
+msgid "D.O."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:48
+msgid "D.C."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:49
+msgid "Ph.D."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:50
+msgid "Esq."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:51
+msgid "Jr."
+msgstr ""
+
+#: templates/part.edit_name_dialog.php:52
+msgid "Sn."
+msgstr ""
+
+#: templates/part.import.php:1
+msgid "Import a contacts file"
+msgstr ""
+
+#: templates/part.import.php:6
+msgid "Please choose the addressbook"
+msgstr ""
+
+#: templates/part.import.php:10
+msgid "create a new addressbook"
+msgstr ""
+
+#: templates/part.import.php:15
+msgid "Name of new addressbook"
+msgstr ""
+
+#: templates/part.import.php:20
+msgid "Importing contacts"
+msgstr ""
+
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
+msgstr ""
+
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
+msgstr ""
+
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "CardDAV syncing addresses"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr ""
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr ""
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr ""
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr ""
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr ""
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/zh_CN.GB2312/core.po b/l10n/zh_CN.GB2312/core.po
new file mode 100644
index 00000000000..ea582cd1c1b
--- /dev/null
+++ b/l10n/zh_CN.GB2312/core.po
@@ -0,0 +1,269 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <bluehattree@126.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-12 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 13:54+0000\n"
+"Last-Translator: bluehattree <bluehattree@126.com>\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/vcategories/add.php:23 ajax/vcategories/delete.php:23
+msgid "Application name not provided."
+msgstr "应用程åºå¹¶æ²¡æœ‰è¢«æä¾›."
+
+#: ajax/vcategories/add.php:29
+msgid "No category to add?"
+msgstr "没有分类添加了?"
+
+#: ajax/vcategories/add.php:36
+msgid "This category already exists: "
+msgstr "这个分类已ç»å­˜åœ¨äº†:"
+
+#: js/jquery-ui-1.8.16.custom.min.js:511
+msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+msgstr "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
+
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "设置"
+
+#: js/js.js:572
+msgid "January"
+msgstr "一月"
+
+#: js/js.js:572
+msgid "February"
+msgstr "二月"
+
+#: js/js.js:572
+msgid "March"
+msgstr "三月"
+
+#: js/js.js:572
+msgid "April"
+msgstr "四月"
+
+#: js/js.js:572
+msgid "May"
+msgstr "五月"
+
+#: js/js.js:572
+msgid "June"
+msgstr "六月"
+
+#: js/js.js:573
+msgid "July"
+msgstr "七月"
+
+#: js/js.js:573
+msgid "August"
+msgstr "八月"
+
+#: js/js.js:573
+msgid "September"
+msgstr "ä¹æœˆ"
+
+#: js/js.js:573
+msgid "October"
+msgstr "å月"
+
+#: js/js.js:573
+msgid "November"
+msgstr "å一月"
+
+#: js/js.js:573
+msgid "December"
+msgstr "å二月"
+
+#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
+msgid "Cancel"
+msgstr "å–消"
+
+#: js/oc-dialogs.js:159
+msgid "No"
+msgstr "å¦"
+
+#: js/oc-dialogs.js:160
+msgid "Yes"
+msgstr "是"
+
+#: js/oc-dialogs.js:177
+msgid "Ok"
+msgstr "好的"
+
+#: js/oc-vcategories.js:68
+msgid "No categories selected for deletion."
+msgstr "没有选者è¦åˆ é™¤çš„分类."
+
+#: js/oc-vcategories.js:68
+msgid "Error"
+msgstr "错误"
+
+#: lostpassword/index.php:26
+msgid "ownCloud password reset"
+msgstr "ç§æœ‰äº‘密ç é‡ç½®"
+
+#: lostpassword/templates/email.php:1
+msgid "Use the following link to reset your password: {link}"
+msgstr "使用下é¢çš„链接æ¥é‡ç½®ä½ çš„密ç :{link}"
+
+#: lostpassword/templates/lostpassword.php:3
+msgid "You will receive a link to reset your password via Email."
+msgstr "你将会收到一个é‡ç½®å¯†ç çš„链接"
+
+#: lostpassword/templates/lostpassword.php:5
+msgid "Requested"
+msgstr "请求"
+
+#: lostpassword/templates/lostpassword.php:8
+msgid "Login failed!"
+msgstr "登陆失败!"
+
+#: lostpassword/templates/lostpassword.php:11 templates/installation.php:25
+#: templates/login.php:9
+msgid "Username"
+msgstr "用户å"
+
+#: lostpassword/templates/lostpassword.php:15
+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:14
+msgid "Add"
+msgstr "添加"
+
+#: templates/installation.php:23
+msgid "Create an <strong>admin account</strong>"
+msgstr "建立一个 <strong>管ç†å¸æˆ·</strong>"
+
+#: templates/installation.php:29 templates/login.php:13
+msgid "Password"
+msgstr "密ç "
+
+#: templates/installation.php:35
+msgid "Advanced"
+msgstr "进阶"
+
+#: templates/installation.php:37
+msgid "Data folder"
+msgstr "æ•°æ®å­˜æ”¾æ–‡ä»¶å¤¹"
+
+#: templates/installation.php:44
+msgid "Configure the database"
+msgstr "é…置数æ®åº“"
+
+#: templates/installation.php:49 templates/installation.php:60
+#: templates/installation.php:70
+msgid "will be used"
+msgstr "将会使用"
+
+#: templates/installation.php:82
+msgid "Database user"
+msgstr "æ•°æ®åº“用户"
+
+#: templates/installation.php:86
+msgid "Database password"
+msgstr "æ•°æ®åº“密ç "
+
+#: templates/installation.php:90
+msgid "Database name"
+msgstr "æ•°æ®åº“用户å"
+
+#: templates/installation.php:96
+msgid "Database host"
+msgstr "æ•°æ®åº“主机"
+
+#: templates/installation.php:101
+msgid "Finish setup"
+msgstr "完æˆå®‰è£…"
+
+#: templates/layout.guest.php:42
+msgid "web services under your control"
+msgstr "你控制下的网络æœåŠ¡"
+
+#: templates/layout.user.php:49
+msgid "Log out"
+msgstr "注销"
+
+#: templates/login.php:6
+msgid "Lost your password?"
+msgstr "忘记密�"
+
+#: templates/login.php:17
+msgid "remember"
+msgstr "备忘"
+
+#: templates/login.php:18
+msgid "Log in"
+msgstr "登陆"
+
+#: templates/logout.php:1
+msgid "You are logged out."
+msgstr "ä½ å·²ç»æ³¨é”€äº†"
+
+#: templates/part.pagenavi.php:3
+msgid "prev"
+msgstr "åŽé€€"
+
+#: templates/part.pagenavi.php:20
+msgid "next"
+msgstr "å‰è¿›"
diff --git a/l10n/zh_CN.GB2312/files.po b/l10n/zh_CN.GB2312/files.po
new file mode 100644
index 00000000000..80307c381e6
--- /dev/null
+++ b/l10n/zh_CN.GB2312/files.po
@@ -0,0 +1,219 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <bluehattree@126.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:20
+msgid "There is no error, the file uploaded with success"
+msgstr "没有任何错误,文件上传æˆåŠŸäº†"
+
+#: ajax/upload.php:21
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
+msgstr "上传的文件超过了php.ini指定的upload_max_filesize"
+
+#: ajax/upload.php:22
+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:23
+msgid "The uploaded file was only partially uploaded"
+msgstr "文件åªæœ‰éƒ¨åˆ†è¢«ä¸Šä¼ "
+
+#: ajax/upload.php:24
+msgid "No file was uploaded"
+msgstr "没有上传完æˆçš„文件"
+
+#: ajax/upload.php:25
+msgid "Missing a temporary folder"
+msgstr "丢失了一个临时文件夹"
+
+#: ajax/upload.php:26
+msgid "Failed to write to disk"
+msgstr "写ç£ç›˜å¤±è´¥"
+
+#: appinfo/app.php:6
+msgid "Files"
+msgstr "文件"
+
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "删除"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "å·²ç»å­˜åœ¨äº†"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "替æ¢"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "å–消"
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "替æ¢è¿‡äº†"
+
+#: js/filelist.js:195
+msgid "with"
+msgstr "éšç€"
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "撤销"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "删除"
+
+#: js/files.js:171
+msgid "generating ZIP-file, it may take some time."
+msgstr "正在生æˆZIP文件,è¿™å¯èƒ½éœ€è¦ç‚¹æ—¶é—´"
+
+#: js/files.js:200
+msgid "Unable to upload your file as it is a directory or has 0 bytes"
+msgstr "ä¸èƒ½ä¸Šä¼ ä½ æŒ‡å®šçš„文件,å¯èƒ½å› ä¸ºå®ƒæ˜¯ä¸ªæ–‡ä»¶å¤¹æˆ–者大å°ä¸º0"
+
+#: js/files.js:200
+msgid "Upload Error"
+msgstr "上传错误"
+
+#: js/files.js:228 js/files.js:319 js/files.js:348
+msgid "Pending"
+msgstr "Pending"
+
+#: js/files.js:333
+msgid "Upload cancelled."
+msgstr "上传å–消了"
+
+#: js/files.js:457
+msgid "Invalid name, '/' is not allowed."
+msgstr "éžæ³•æ–‡ä»¶å,\"/\"是ä¸è¢«è®¸å¯çš„"
+
+#: js/files.js:703 templates/index.php:55
+msgid "Size"
+msgstr "大å°"
+
+#: js/files.js:704 templates/index.php:56
+msgid "Modified"
+msgstr "修改日期"
+
+#: js/files.js:731
+msgid "folder"
+msgstr "文件夹"
+
+#: js/files.js:733
+msgid "folders"
+msgstr "文件夹"
+
+#: js/files.js:741
+msgid "file"
+msgstr "文件"
+
+#: js/files.js:743
+msgid "files"
+msgstr "文件"
+
+#: templates/admin.php:5
+msgid "File handling"
+msgstr "文件处ç†ä¸­"
+
+#: templates/admin.php:7
+msgid "Maximum upload size"
+msgstr "最大上传大å°"
+
+#: templates/admin.php:7
+msgid "max. possible: "
+msgstr "最大å¯èƒ½"
+
+#: templates/admin.php:9
+msgid "Needed for multi-file and folder downloads."
+msgstr "需è¦å¤šæ–‡ä»¶å’Œæ–‡ä»¶å¤¹ä¸‹è½½."
+
+#: templates/admin.php:9
+msgid "Enable ZIP-download"
+msgstr "支æŒZIP下载"
+
+#: templates/admin.php:11
+msgid "0 is unlimited"
+msgstr "0是无é™çš„"
+
+#: templates/admin.php:12
+msgid "Maximum input size for ZIP files"
+msgstr "最大的ZIP文件输入大å°"
+
+#: templates/index.php:7
+msgid "New"
+msgstr "新建"
+
+#: templates/index.php:9
+msgid "Text file"
+msgstr "文本文档"
+
+#: templates/index.php:10
+msgid "Folder"
+msgstr "文件夹"
+
+#: templates/index.php:11
+msgid "From url"
+msgstr "从URL:"
+
+#: templates/index.php:21
+msgid "Upload"
+msgstr "上传"
+
+#: templates/index.php:27
+msgid "Cancel upload"
+msgstr "å–消上传"
+
+#: templates/index.php:39
+msgid "Nothing in here. Upload something!"
+msgstr "这里没有东西.上传点什么!"
+
+#: templates/index.php:47
+msgid "Name"
+msgstr "åå­—"
+
+#: templates/index.php:49
+msgid "Share"
+msgstr "分享"
+
+#: templates/index.php:51
+msgid "Download"
+msgstr "下载"
+
+#: templates/index.php:64
+msgid "Upload too large"
+msgstr "上传的文件太大了"
+
+#: templates/index.php:66
+msgid ""
+"The files you are trying to upload exceed the maximum size for file uploads "
+"on this server."
+msgstr "你正在试图上传的文件超过了此æœåŠ¡å™¨æ”¯æŒçš„最大的文件大å°."
+
+#: templates/index.php:71
+msgid "Files are being scanned, please wait."
+msgstr "正在扫æ文件,请ç¨å€™."
+
+#: templates/index.php:74
+msgid "Current scanning"
+msgstr "正在扫æ"
diff --git a/l10n/zh_CN.GB2312/files_encryption.po b/l10n/zh_CN.GB2312/files_encryption.po
new file mode 100644
index 00000000000..2073826c24d
--- /dev/null
+++ b/l10n/zh_CN.GB2312/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/zh_CN.GB2312/files_external.po b/l10n/zh_CN.GB2312/files_external.po
new file mode 100644
index 00000000000..27dfa58801b
--- /dev/null
+++ b/l10n/zh_CN.GB2312/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/zh_CN.GB2312/files_sharing.po b/l10n/zh_CN.GB2312/files_sharing.po
new file mode 100644
index 00000000000..0243a9ebaaa
--- /dev/null
+++ b/l10n/zh_CN.GB2312/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/zh_CN.GB2312/files_versions.po b/l10n/zh_CN.GB2312/files_versions.po
new file mode 100644
index 00000000000..4eaa105db8a
--- /dev/null
+++ b/l10n/zh_CN.GB2312/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/zh_CN.GB2312/gallery.po b/l10n/zh_CN.GB2312/gallery.po
new file mode 100644
index 00000000000..32b2ed7179f
--- /dev/null
+++ b/l10n/zh_CN.GB2312/gallery.po
@@ -0,0 +1,58 @@
+# 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: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-01-15 13:48+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:39
+msgid "Pictures"
+msgstr ""
+
+#: js/pictures.js:12
+msgid "Share gallery"
+msgstr ""
+
+#: js/pictures.js:32
+msgid "Error: "
+msgstr ""
+
+#: js/pictures.js:32
+msgid "Internal error"
+msgstr ""
+
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr ""
+
+#: templates/view_album.php:19
+msgid "Back"
+msgstr ""
+
+#: templates/view_album.php:36
+msgid "Remove confirmation"
+msgstr ""
+
+#: templates/view_album.php:37
+msgid "Do you want to remove album"
+msgstr ""
+
+#: templates/view_album.php:40
+msgid "Change album name"
+msgstr ""
+
+#: templates/view_album.php:43
+msgid "New album name"
+msgstr ""
diff --git a/l10n/zh_CN.GB2312/lib.po b/l10n/zh_CN.GB2312/lib.po
new file mode 100644
index 00000000000..49d72542b8d
--- /dev/null
+++ b/l10n/zh_CN.GB2312/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:288
+msgid "Help"
+msgstr ""
+
+#: app.php:295
+msgid "Personal"
+msgstr ""
+
+#: app.php:300
+msgid "Settings"
+msgstr ""
+
+#: app.php:305
+msgid "Users"
+msgstr ""
+
+#: app.php:312
+msgid "Apps"
+msgstr ""
+
+#: app.php:314
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/zh_CN.GB2312/media.po b/l10n/zh_CN.GB2312/media.po
new file mode 100644
index 00000000000..844e38b16f2
--- /dev/null
+++ b/l10n/zh_CN.GB2312/media.po
@@ -0,0 +1,67 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <bluehattree@126.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-12 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 14:06+0000\n"
+"Last-Translator: bluehattree <bluehattree@126.com>\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"
+
+#: appinfo/app.php:45 templates/player.php:8
+msgid "Music"
+msgstr "音ä¹"
+
+#: js/music.js:18
+msgid "Add album to playlist"
+msgstr "添加专辑到播放列表"
+
+#: templates/music.php:3 templates/player.php:12
+msgid "Play"
+msgstr "播放"
+
+#: templates/music.php:4 templates/music.php:26 templates/player.php:13
+msgid "Pause"
+msgstr "æš‚åœ"
+
+#: templates/music.php:5
+msgid "Previous"
+msgstr "å‰é¢çš„"
+
+#: templates/music.php:6 templates/player.php:14
+msgid "Next"
+msgstr "下一个"
+
+#: templates/music.php:7
+msgid "Mute"
+msgstr "é™éŸ³"
+
+#: templates/music.php:8
+msgid "Unmute"
+msgstr "å–消é™éŸ³"
+
+#: templates/music.php:25
+msgid "Rescan Collection"
+msgstr "é‡æ–°æ‰«æ收è—"
+
+#: templates/music.php:37
+msgid "Artist"
+msgstr "艺术家"
+
+#: templates/music.php:38
+msgid "Album"
+msgstr "专辑"
+
+#: templates/music.php:39
+msgid "Title"
+msgstr "标题"
diff --git a/l10n/zh_CN.GB2312/settings.po b/l10n/zh_CN.GB2312/settings.po
new file mode 100644
index 00000000000..70f3d9d228b
--- /dev/null
+++ b/l10n/zh_CN.GB2312/settings.po
@@ -0,0 +1,239 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <bluehattree@126.com>, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: ownCloud\n"
+"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "ä¸èƒ½ä»ŽApp Store 中加载列表"
+
+#: ajax/lostpassword.php:14
+msgid "Email saved"
+msgstr "Email ä¿å­˜äº†"
+
+#: ajax/lostpassword.php:16
+msgid "Invalid email"
+msgstr "éžæ³•Email"
+
+#: ajax/openid.php:16
+msgid "OpenID Changed"
+msgstr "OpenID 改å˜äº†"
+
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
+msgid "Invalid request"
+msgstr "éžæ³•è¯·æ±‚"
+
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "认è¯é”™è¯¯"
+
+#: ajax/setlanguage.php:18
+msgid "Language changed"
+msgstr "语言改å˜äº†"
+
+#: js/apps.js:18
+msgid "Error"
+msgstr "错误"
+
+#: js/apps.js:39 js/apps.js:73
+msgid "Disable"
+msgstr "ç¦ç”¨"
+
+#: js/apps.js:39 js/apps.js:62
+msgid "Enable"
+msgstr "å¯ç”¨"
+
+#: js/personal.js:69
+msgid "Saving..."
+msgstr "ä¿å­˜ä¸­..."
+
+#: personal.php:46 personal.php:47
+msgid "__language_name__"
+msgstr "Chinese"
+
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "安全警告"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "定时"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
+msgid "Log"
+msgstr "日志"
+
+#: templates/admin.php:67
+msgid "More"
+msgstr "更多"
+
+#: templates/apps.php:10
+msgid "Add your App"
+msgstr "添加你的应用程åº"
+
+#: templates/apps.php:26
+msgid "Select an App"
+msgstr "选择一个程åº"
+
+#: templates/apps.php:29
+msgid "See application page at apps.owncloud.com"
+msgstr "在owncloud.com上查看应用程åº"
+
+#: templates/apps.php:30
+msgid "-licensed"
+msgstr "-许å¯äº†"
+
+#: templates/apps.php:30
+msgid "by"
+msgstr "ç”±"
+
+#: templates/help.php:8
+msgid "Documentation"
+msgstr "文档"
+
+#: templates/help.php:9
+msgid "Managing Big Files"
+msgstr "管ç†å¤§æ–‡ä»¶"
+
+#: templates/help.php:10
+msgid "Ask a question"
+msgstr "æ一个问题"
+
+#: templates/help.php:22
+msgid "Problems connecting to help database."
+msgstr "连接到帮助数æ®åº“时的问题"
+
+#: templates/help.php:23
+msgid "Go there manually."
+msgstr "收到转到."
+
+#: templates/help.php:31
+msgid "Answer"
+msgstr "回答"
+
+#: templates/personal.php:8
+msgid "You use"
+msgstr "你使用"
+
+#: templates/personal.php:8
+msgid "of the available"
+msgstr "å¯ç”¨çš„"
+
+#: templates/personal.php:12
+msgid "Desktop and Mobile Syncing Clients"
+msgstr "æ¡Œé¢å’Œç§»åŠ¨åŒæ­¥å®¢æˆ·ç«¯"
+
+#: templates/personal.php:13
+msgid "Download"
+msgstr "下载"
+
+#: templates/personal.php:19
+msgid "Your password got changed"
+msgstr "你的密ç å·²ç»æ”¹å˜"
+
+#: templates/personal.php:20
+msgid "Unable to change your password"
+msgstr "ä¸èƒ½æ”¹å˜ä½ çš„密ç "
+
+#: templates/personal.php:21
+msgid "Current password"
+msgstr "现在的密ç "
+
+#: templates/personal.php:22
+msgid "New password"
+msgstr "新密ç "
+
+#: templates/personal.php:23
+msgid "show"
+msgstr "展示"
+
+#: templates/personal.php:24
+msgid "Change password"
+msgstr "改å˜å¯†ç "
+
+#: templates/personal.php:30
+msgid "Email"
+msgstr "Email"
+
+#: templates/personal.php:31
+msgid "Your email address"
+msgstr "ä½ çš„email地å€"
+
+#: templates/personal.php:32
+msgid "Fill in an email address to enable password recovery"
+msgstr "输入一个邮箱地å€ä»¥æ¿€æ´»å¯†ç æ¢å¤åŠŸèƒ½"
+
+#: templates/personal.php:38 templates/personal.php:39
+msgid "Language"
+msgstr "语言"
+
+#: templates/personal.php:44
+msgid "Help translate"
+msgstr "帮助翻译"
+
+#: templates/personal.php:51
+msgid "use this address to connect to your ownCloud in your file manager"
+msgstr "使用这个地å€å’Œä½ çš„文件管ç†å™¨è¿žæŽ¥åˆ°ä½ çš„ownCloud"
+
+#: templates/users.php:21 templates/users.php:76
+msgid "Name"
+msgstr "åå­—"
+
+#: templates/users.php:23 templates/users.php:77
+msgid "Password"
+msgstr "密ç "
+
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
+msgid "Groups"
+msgstr "组"
+
+#: templates/users.php:32
+msgid "Create"
+msgstr "新建"
+
+#: templates/users.php:35
+msgid "Default Quota"
+msgstr "默认é™é¢"
+
+#: templates/users.php:55 templates/users.php:138
+msgid "Other"
+msgstr "其他的"
+
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
+msgid "Quota"
+msgstr "é™é¢"
+
+#: templates/users.php:146
+msgid "Delete"
+msgstr "删除"
diff --git a/l10n/zh_CN.GB2312/tasks.po b/l10n/zh_CN.GB2312/tasks.po
new file mode 100644
index 00000000000..5d43b9b7ec3
--- /dev/null
+++ b/l10n/zh_CN.GB2312/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/zh_CN.GB2312/user_ldap.po b/l10n/zh_CN.GB2312/user_ldap.po
new file mode 100644
index 00000000000..725d441e3c4
--- /dev/null
+++ b/l10n/zh_CN.GB2312/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/zh_CN.GB2312/user_migrate.po b/l10n/zh_CN.GB2312/user_migrate.po
new file mode 100644
index 00000000000..06769367e75
--- /dev/null
+++ b/l10n/zh_CN.GB2312/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/zh_CN.GB2312/user_openid.po b/l10n/zh_CN.GB2312/user_openid.po
new file mode 100644
index 00000000000..1937fffe2a7
--- /dev/null
+++ b/l10n/zh_CN.GB2312/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/zh_CN/admin_dependencies_chk.po b/l10n/zh_CN/admin_dependencies_chk.po
new file mode 100644
index 00000000000..6200d7451b8
--- /dev/null
+++ b/l10n/zh_CN/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/zh_CN/admin_migrate.po b/l10n/zh_CN/admin_migrate.po
new file mode 100644
index 00000000000..a25182363fb
--- /dev/null
+++ b/l10n/zh_CN/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/zh_CN/bookmarks.po b/l10n/zh_CN/bookmarks.po
new file mode 100644
index 00000000000..1164856a06f
--- /dev/null
+++ b/l10n/zh_CN/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/zh_CN/calendar.po b/l10n/zh_CN/calendar.po
index 5353f15cdb3..b66ae0afc11 100644
--- a/l10n/zh_CN/calendar.po
+++ b/l10n/zh_CN/calendar.po
@@ -3,6 +3,7 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Phoenix Nemo <>, 2012.
# <rainofchaos@gmail.com>, 2012.
# <wengxt@gmail.com>, 2011, 2012.
# 冰 è“ <lanbing89@gmail.com>, 2012.
@@ -10,21 +11,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Chinese (China) (http://www.transifex.net/projects/p/owncloud/language/zh_CN/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "无法找到日历。"
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "无法找到事件。"
@@ -32,300 +41,394 @@ msgstr "无法找到事件。"
msgid "Wrong calendar"
msgstr "错误的日历"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "新时区:"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "时区已修改"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "éžæ³•è¯·æ±‚"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "日历"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
-msgstr ""
+msgstr "ddd"
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
msgstr ""
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
msgstr ""
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
msgstr ""
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "生日"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "商务"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "呼å«"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "客户"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "æ´¾é€"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "节日"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "想法"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "旅行"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "周年纪念"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "会议"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "其他"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "个人"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "项目"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "问题"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "工作"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "未命å"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "新日历"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "ä¸é‡å¤"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "æ¯å¤©"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "æ¯å‘¨"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "æ¯ä¸ªå·¥ä½œæ—¥"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "æ¯ä¸¤å‘¨"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "æ¯æœˆ"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "æ¯å¹´"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "从ä¸"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "按å‘生次数"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "按日期"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "按月的æŸå¤©"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "按星期的æŸå¤©"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "星期一"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "星期二"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "星期三"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "星期四"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "星期五"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "星期六"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "星期日"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "事件在æ¯æœˆçš„第几个星期"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "第一"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "第二"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "第三"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "第四"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "第五"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "最åŽ"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "一月"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "二月"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "三月"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "四月"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "五月"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "六月"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "七月"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "八月"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "ä¹æœˆ"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "å月"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "å一月"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "å二月"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "按事件日期"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "按æ¯å¹´çš„æŸå¤©"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "按星期数"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "按天和月份"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "日期"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "日历"
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "全天"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "新日历"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "缺少字段"
@@ -359,40 +462,32 @@ msgstr "事件在开始å‰å·²ç»“æŸ"
msgid "There was a database fail"
msgstr "æ•°æ®åº“访问失败"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "星期"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "月"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "列表"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "今天"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "日历"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "解æžæ–‡ä»¶å¤±è´¥"
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "选择活动日历"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "您的日历"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDav 链接"
@@ -404,19 +499,19 @@ msgstr "共享的日历"
msgid "No shared calendars"
msgstr "无共享的日历"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "共享日历"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "下载"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "编辑"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "删除"
@@ -502,23 +597,23 @@ msgstr "用逗å·åˆ†éš”分类"
msgid "Edit categories"
msgstr "编辑分类"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "全天事件"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "自"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "至"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "高级选项"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "地点"
@@ -526,7 +621,7 @@ msgstr "地点"
msgid "Location of the Event"
msgstr "事件地点"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "æè¿°"
@@ -534,84 +629,86 @@ msgstr "æè¿°"
msgid "Description of the Event"
msgstr "事件æè¿°"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "é‡å¤"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "高级"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "选择星期中的æŸå¤©"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "选择æŸå¤©"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "选择æ¯å¹´äº‹ä»¶å‘生的日å­"
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "选择æ¯æœˆäº‹ä»¶å‘生的日å­"
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "选择月份"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "选择星期"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "选择æ¯å¹´çš„事件å‘生的星期"
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "é—´éš”"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "结æŸ"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "次"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "创建新日历"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "导入日历文件"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "请选择日历"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "创建新日历"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "新日历å称"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "导入"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "导入日历"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "导入日历æˆåŠŸ"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "导入"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "关闭对è¯æ¡†"
@@ -627,45 +724,73 @@ msgstr "查看事件"
msgid "No categories selected"
msgstr "无选中分类"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "选择分类"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "在"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "在"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "时区"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "选中则总是按照时区å˜åŒ–"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "时间格å¼"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24å°æ—¶"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12å°æ—¶"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "æ¯å‘¨çš„第一天"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "日历CalDAV åŒæ­¥åœ°å€ï¼š"
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/zh_CN/contacts.po b/l10n/zh_CN/contacts.po
index 7d48fb931a0..78d0fb242ff 100644
--- a/l10n/zh_CN/contacts.po
+++ b/l10n/zh_CN/contacts.po
@@ -3,674 +3,808 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Phoenix Nemo <>, 2012.
# <rainofchaos@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: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Chinese (China) (http://www.transifex.net/projects/p/owncloud/language/zh_CN/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "(å–消)激活地å€ç°¿é”™è¯¯ã€‚"
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "添加è”系人时出错。"
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "无法添加空属性。"
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "至少需è¦å¡«å†™ä¸€é¡¹åœ°å€ã€‚"
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr "没有设置 id。"
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
-msgstr "试图添加é‡å¤å±žæ€§ï¼š "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
+msgstr "无法使用一个空å称更新地å€ç°¿"
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "添加è”系人属性错误。"
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "更新地å€ç°¿é”™è¯¯"
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "未æä¾› ID"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr "设置校验值错误。"
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr "未选中è¦åˆ é™¤çš„分类。"
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr "找ä¸åˆ°åœ°å€ç°¿ã€‚"
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "找ä¸åˆ°è”系人。"
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "添加è”系人时出错。"
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr "元素å称未设置"
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "无法添加空属性。"
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "至少需è¦å¡«å†™ä¸€é¡¹åœ°å€ã€‚"
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr "试图添加é‡å¤å±žæ€§ï¼š "
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "vCard çš„ä¿¡æ¯ä¸æ­£ç¡®ã€‚请é‡æ–°åŠ è½½é¡µé¢ã€‚"
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "缺少 ID"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr "无法解æžå¦‚下IDçš„ VCard:“"
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
-msgstr "无法无姓å的地å€ç°¿ã€‚"
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
+msgstr "未设置校验值。"
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "添加地å€ç°¿é”™è¯¯ã€‚"
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr "vCard ä¿¡æ¯ä¸æ­£ç¡®ã€‚请刷新页é¢: "
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "激活地å€ç°¿é”™è¯¯ã€‚"
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr "有一些信æ¯æ— æ³•è¢«å¤„ç†ã€‚"
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr "未æ交è”系人 ID。"
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr "读å–è”系人照片错误。"
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr "ä¿å­˜ä¸´æ—¶æ–‡ä»¶é”™è¯¯ã€‚"
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr "装入的照片ä¸æ­£ç¡®ã€‚"
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr "没有设置 id。"
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "vCard çš„ä¿¡æ¯ä¸æ­£ç¡®ã€‚请é‡æ–°åŠ è½½é¡µé¢ã€‚"
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "删除è”系人属性错误。"
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr "缺少è”系人 ID。"
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr "缺少è”系人 ID。"
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr "未æ供照片路径。"
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr "文件ä¸å­˜åœ¨:"
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr "加载图片错误。"
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
-msgstr ""
+msgstr "获å–è”系人目标时出错。"
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
-msgstr ""
+msgstr "获å–照片属性时出错。"
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
-msgstr ""
+msgstr "ä¿å­˜è”系人时出错。"
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
-msgstr ""
+msgstr "缩放图åƒæ—¶å‡ºé”™"
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
-msgstr ""
+msgstr "è£åˆ‡å›¾åƒæ—¶å‡ºé”™"
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
-msgstr ""
+msgstr "创建临时图åƒæ—¶å‡ºé”™"
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
-msgstr ""
-
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr "未设置校验值。"
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr ""
+msgstr "查找图åƒæ—¶å‡ºé”™: "
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr ""
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "æ›´æ–°è”系人属性错误。"
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr ""
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "更新地å€ç°¿é”™è¯¯"
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
-msgstr ""
+msgstr "上传è”系人到存储空间时出错"
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
-msgstr ""
+msgstr "文件上传æˆåŠŸï¼Œæ²¡æœ‰é”™è¯¯å‘生"
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
-msgstr ""
+msgstr "上传的文件长度超出了 php.ini 中 upload_max_filesize çš„é™åˆ¶"
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
-msgstr ""
+msgstr "上传的文件长度超出了 HTML 表å•ä¸­ MAX_FILE_SIZE çš„é™åˆ¶"
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr "已上传文件åªä¸Šä¼ äº†éƒ¨åˆ†"
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "没有文件被上传"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr "缺少临时目录"
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
-msgstr ""
+msgstr "无法ä¿å­˜ä¸´æ—¶å›¾åƒ: "
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
-msgstr ""
+msgstr "无法加载临时图åƒ: "
#: ajax/uploadphoto.php:71
msgid "No file was uploaded. Unknown error"
-msgstr ""
+msgstr "没有文件被上传。未知错误"
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "è”系人"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
-msgstr ""
+msgstr "抱歉,这个功能暂时还没有被实现"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
-msgstr ""
+msgstr "未实现"
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
-msgstr ""
-
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+msgstr "无法获å–一个åˆæ³•çš„地å€ã€‚"
+
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
+msgstr "错误"
+
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
-msgstr ""
+msgstr "这个属性必须是éžç©ºçš„"
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
-msgstr ""
+msgstr "无法åºåˆ—化元素"
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
-msgstr ""
+msgstr "'deleteProperty' 调用时没有类型声明。请到 bugs.owncloud.org 汇报错误"
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
-msgstr ""
+msgstr "编辑å称"
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
-msgstr ""
+msgstr "没有选择文件以上传"
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
-msgstr ""
+msgstr "您试图上传的文件超出了该æœåŠ¡å™¨çš„最大文件é™åˆ¶"
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
-msgstr ""
+msgstr "选择类型"
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
-msgstr ""
+#: js/loader.js:49
+msgid "Result: "
+msgstr "结果: "
-#: js/contacts.js:1494
+#: js/loader.js:49
+msgid " imported, "
+msgstr " 已导入, "
+
+#: js/loader.js:49
+msgid " failed."
+msgstr " 失败。"
+
+#: js/settings.js:68
msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
-msgstr ""
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "è¿™ä¸æ˜¯æ‚¨çš„地å€ç°¿ã€‚"
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "无法找到è”系人。"
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:136
+msgid "GoogleTalk"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "未找到地å€ç°¿ã€‚"
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "è¿™ä¸æ˜¯æ‚¨çš„地å€ç°¿ã€‚"
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "无法找到è”系人。"
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "地å€"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "电è¯"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "电å­é‚®ä»¶"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "组织"
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "工作"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "家庭"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "移动电è¯"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "文本"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "语音"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "消æ¯"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "传真"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "视频"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "传呼机"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "互è”网"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "生日"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "{name} 的生日"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "è”系人"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "添加è”系人"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr "导入"
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "地å€ç°¿"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "é…置地å€ç°¿"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr "关闭"
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "新建地å€ç°¿"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "从 VCF 导入"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDav 链接"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "下载"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "编辑"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "删除"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "下载è”系人"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "删除è”系人"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr "拖拽图片进行上传"
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr "删除当å‰ç…§ç‰‡"
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr "编辑当å‰ç…§ç‰‡"
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr "上传新照片"
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr "从 ownCloud 选择照片"
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
-msgstr ""
+msgstr "自定义格å¼ï¼Œç®€ç§°ï¼Œå…¨å,姓在å‰ï¼Œå§“在å‰å¹¶ç”¨é€—å·åˆ†å‰²"
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "编辑å称详情"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "组织"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "删除"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "昵称"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "输入昵称"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "生日"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "yyyy-mm-dd"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "分组"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "用逗å·éš”开分组"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "编辑分组"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "å好"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "请指定åˆæ³•çš„电å­é‚®ä»¶åœ°å€"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "输入电å­é‚®ä»¶åœ°å€"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "å‘é€é‚®ä»¶åˆ°åœ°å€"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "删除电å­é‚®ä»¶åœ°å€"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "输入电è¯å·ç "
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "删除电è¯å·ç "
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr "在地图上显示"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "编辑地å€ç»†èŠ‚。"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "添加注释。"
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "添加字段"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "è”系人图片"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "电è¯"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "注释"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "电å­é‚®ä»¶"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
-msgstr "删除当å‰ç…§ç‰‡"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
+msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr "编辑当å‰ç…§ç‰‡"
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "地å€"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr "上传新照片"
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "注释"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr "从 ownCloud 选择照片"
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "下载è”系人"
+
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "删除è”系人"
-#: templates/part.cropphoto.php:64
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
-msgstr ""
+msgstr "临时图åƒæ–‡ä»¶å·²ä»Žç¼“存中删除"
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr "编辑地å€"
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "类型"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "邮箱"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "扩展"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "è¡—é“"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "城市"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "地区"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "邮编"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
msgid "Country"
msgstr "国家"
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
-msgstr "编辑分类"
-
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "添加"
-
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
msgstr "地å€ç°¿"
#: templates/part.edit_name_dialog.php:23
msgid "Hon. prefixes"
-msgstr ""
+msgstr "å誉字首"
#: templates/part.edit_name_dialog.php:27
msgid "Miss"
-msgstr ""
+msgstr "å°å§"
#: templates/part.edit_name_dialog.php:28
msgid "Ms"
-msgstr ""
+msgstr "女士"
#: templates/part.edit_name_dialog.php:29
msgid "Mr"
-msgstr ""
+msgstr "先生"
#: templates/part.edit_name_dialog.php:30
msgid "Sir"
-msgstr ""
+msgstr "先生"
#: templates/part.edit_name_dialog.php:31
msgid "Mrs"
-msgstr ""
+msgstr "夫人"
#: templates/part.edit_name_dialog.php:32
msgid "Dr"
-msgstr ""
+msgstr "åšå£«"
#: templates/part.edit_name_dialog.php:35
msgid "Given name"
@@ -678,7 +812,7 @@ msgstr "å"
#: templates/part.edit_name_dialog.php:37
msgid "Additional names"
-msgstr ""
+msgstr "其他å称"
#: templates/part.edit_name_dialog.php:39
msgid "Family name"
@@ -686,68 +820,39 @@ msgstr "姓"
#: templates/part.edit_name_dialog.php:41
msgid "Hon. suffixes"
-msgstr ""
+msgstr "å誉åŽç¼€"
#: templates/part.edit_name_dialog.php:45
msgid "J.D."
-msgstr ""
+msgstr "法律åšå£«"
#: templates/part.edit_name_dialog.php:46
msgid "M.D."
-msgstr ""
+msgstr "医学åšå£«"
#: templates/part.edit_name_dialog.php:47
msgid "D.O."
-msgstr ""
+msgstr "骨科医学åšå£«"
#: templates/part.edit_name_dialog.php:48
msgid "D.C."
-msgstr ""
+msgstr "教育学åšå£«"
#: templates/part.edit_name_dialog.php:49
msgid "Ph.D."
-msgstr ""
+msgstr "哲学åšå£«"
#: templates/part.edit_name_dialog.php:50
msgid "Esq."
-msgstr ""
+msgstr "先生"
#: templates/part.edit_name_dialog.php:51
msgid "Jr."
-msgstr ""
+msgstr "å°"
#: templates/part.edit_name_dialog.php:52
msgid "Sn."
-msgstr ""
-
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "新建地å€ç°¿"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "编辑地å€ç°¿"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "显示å称"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "激活"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "ä¿å­˜"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "æ交"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "å–消"
+msgstr "è€"
#: templates/part.import.php:1
msgid "Import a contacts file"
@@ -765,57 +870,86 @@ msgstr "创建新地å€ç°¿"
msgid "Name of new addressbook"
msgstr "新地å€ç°¿å称"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "导入"
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr "导入è”系人"
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
+msgstr "您的地å€ç°¿ä¸­æ²¡æœ‰è”系人。"
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
+msgstr "添加è”系人"
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
msgstr ""
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
msgstr ""
-#: templates/part.no_contacts.php:2
-msgid "You have no contacts in your addressbook."
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
msgstr ""
-#: templates/part.no_contacts.php:4
-msgid "Add contact"
-msgstr "添加è”系人"
-
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
-msgstr "é…置地å€ç°¿"
-
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr "CardDAV åŒæ­¥åœ°å€"
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr "更多信æ¯"
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr "é¦–é€‰åœ°å€ (Kontact ç­‰)"
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr "iOS/OS X"
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "下载"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "编辑"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "新建地å€ç°¿"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "ä¿å­˜"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "å–消"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/zh_CN/core.po b/l10n/zh_CN/core.po
index 54f452ded22..bc2b2800877 100644
--- a/l10n/zh_CN/core.po
+++ b/l10n/zh_CN/core.po
@@ -3,15 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Phoenix Nemo <>, 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: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Chinese (China) (http://www.transifex.net/projects/p/owncloud/language/zh_CN/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -34,83 +35,83 @@ msgstr "此分类已存在: "
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
msgstr ""
-#: js/js.js:520
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "设置"
+
+#: js/js.js:573
msgid "January"
-msgstr ""
+msgstr "一月"
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
-msgstr ""
+msgstr "二月"
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
-msgstr ""
+msgstr "三月"
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
-msgstr ""
+msgstr "四月"
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
-msgstr ""
+msgstr "五月"
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
-msgstr ""
+msgstr "六月"
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
-msgstr ""
+msgstr "七月"
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
-msgstr ""
+msgstr "八月"
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
-msgstr ""
+msgstr "ä¹æœˆ"
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
-msgstr ""
+msgstr "å月"
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
-msgstr ""
+msgstr "å一月"
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
-msgstr ""
+msgstr "å二月"
#: js/oc-dialogs.js:143 js/oc-dialogs.js:163
msgid "Cancel"
-msgstr ""
+msgstr "å–消"
#: js/oc-dialogs.js:159
msgid "No"
-msgstr ""
+msgstr "å¦"
#: js/oc-dialogs.js:160
msgid "Yes"
-msgstr ""
+msgstr "是"
#: js/oc-dialogs.js:177
msgid "Ok"
-msgstr ""
+msgstr "好"
#: js/oc-vcategories.js:68
msgid "No categories selected for deletion."
-msgstr ""
+msgstr "没有选择è¦åˆ é™¤çš„类别"
#: js/oc-vcategories.js:68
msgid "Error"
-msgstr ""
+msgstr "错误"
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "é‡ç½® Owncloud 密ç "
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "é‡ç½® ownCloud 密ç "
@@ -240,14 +241,10 @@ msgstr "安装完æˆ"
msgid "web services under your control"
msgstr "由您掌控的网络æœåŠ¡"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "注销"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "设置"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "忘记密ç ï¼Ÿ"
diff --git a/l10n/zh_CN/files.po b/l10n/zh_CN/files.po
index 7410d7462d8..84d5ee092df 100644
--- a/l10n/zh_CN/files.po
+++ b/l10n/zh_CN/files.po
@@ -3,48 +3,49 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# <rainofchaos@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: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Chinese (China) (http://www.transifex.net/projects/p/owncloud/language/zh_CN/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "没有å‘生错误,文件上传æˆåŠŸã€‚"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "上传的文件大å°è¶…过了php.ini 中指定的upload_max_filesize"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "åªä¸Šä¼ äº†æ–‡ä»¶çš„一部分"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "文件没有上传"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "缺少临时目录"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "写入ç£ç›˜å¤±è´¥"
@@ -52,57 +53,85 @@ msgstr "写入ç£ç›˜å¤±è´¥"
msgid "Files"
msgstr "文件"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "删除"
+
+#: js/filelist.js:141
+msgid "already exists"
+msgstr "å·²ç»å­˜åœ¨"
+
+#: js/filelist.js:141
+msgid "replace"
+msgstr "替æ¢"
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr "å–消"
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr "å·²ç»æ›¿æ¢"
+
+#: js/filelist.js:195
+msgid "with"
msgstr ""
-#: js/files.js:170
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr "撤销"
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr "å·²ç»åˆ é™¤"
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
-msgstr ""
+msgstr "æ­£åœ¨ç”Ÿæˆ ZIP 文件,å¯èƒ½éœ€è¦ä¸€äº›æ—¶é—´"
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
-msgstr ""
+msgstr "无法上传文件,因为它是一个目录或者大å°ä¸º 0 字节"
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
-msgstr ""
+msgstr "上传错误"
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
-msgstr ""
+msgstr "æ“作等待中"
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
-msgstr ""
+msgstr "上传已å–消"
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
-msgstr ""
+msgstr "éžæ³•çš„å称,ä¸å…许使用‘/’。"
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "大å°"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "修改日期"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
-msgstr ""
+msgstr "文件夹"
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
-msgstr ""
+msgstr "文件夹"
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
-msgstr ""
+msgstr "文件"
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
-msgstr ""
+msgstr "文件"
#: templates/admin.php:5
msgid "File handling"
@@ -172,10 +201,6 @@ msgstr "共享"
msgid "Download"
msgstr "下载"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "删除"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "上传文件过大"
diff --git a/l10n/zh_CN/files_encryption.po b/l10n/zh_CN/files_encryption.po
new file mode 100644
index 00000000000..19d9d60f7df
--- /dev/null
+++ b/l10n/zh_CN/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/zh_CN/files_external.po b/l10n/zh_CN/files_external.po
new file mode 100644
index 00000000000..aacc93cf5c3
--- /dev/null
+++ b/l10n/zh_CN/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/zh_CN/files_sharing.po b/l10n/zh_CN/files_sharing.po
new file mode 100644
index 00000000000..6c3271e513f
--- /dev/null
+++ b/l10n/zh_CN/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/zh_CN/files_versions.po b/l10n/zh_CN/files_versions.po
new file mode 100644
index 00000000000..4e84f1f4d82
--- /dev/null
+++ b/l10n/zh_CN/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/zh_CN/gallery.po b/l10n/zh_CN/gallery.po
index 23d106c760e..e268331a6e8 100644
--- a/l10n/zh_CN/gallery.po
+++ b/l10n/zh_CN/gallery.po
@@ -4,93 +4,38 @@
#
# Translators:
# Bartek <bart.p.pl@gmail.com>, 2012.
+# <rainofchaos@gmail.com>, 2012.
# <wengxt@gmail.com>, 2012.
msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Chinese (China) (http://www.transifex.net/projects/p/owncloud/language/zh_CN/)\n"
+"POT-Creation-Date: 2012-08-19 02:02+0200\n"
+"PO-Revision-Date: 2012-08-18 05:50+0000\n"
+"Last-Translator: leonfeng <rainofchaos@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"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0\n"
-#: appinfo/app.php:37
+#: appinfo/app.php:39
msgid "Pictures"
msgstr "图片"
-#: js/album_cover.js:44
+#: js/pictures.js:12
msgid "Share gallery"
-msgstr ""
+msgstr "分享图库"
-#: js/album_cover.js:64 js/album_cover.js:100 js/album_cover.js:133
+#: js/pictures.js:32
msgid "Error: "
-msgstr ""
+msgstr "错误:"
-#: js/album_cover.js:64 js/album_cover.js:100
+#: js/pictures.js:32
msgid "Internal error"
-msgstr ""
-
-#: js/album_cover.js:114
-msgid "Scanning root"
-msgstr ""
-
-#: js/album_cover.js:115
-msgid "Default order"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Ascending"
-msgstr ""
-
-#: js/album_cover.js:116
-msgid "Descending"
-msgstr ""
-
-#: js/album_cover.js:117 templates/index.php:19
-msgid "Settings"
-msgstr "设置"
-
-#: js/album_cover.js:122
-msgid "Scanning root cannot be empty"
-msgstr ""
-
-#: js/album_cover.js:122 js/album_cover.js:133
-msgid "Error"
-msgstr ""
-
-#: templates/index.php:16
-msgid "Rescan"
-msgstr "é‡æ–°æ‰«æ"
-
-#: templates/index.php:17
-msgid "Stop"
-msgstr "åœæ­¢"
-
-#: templates/index.php:18
-msgid "Share"
-msgstr "分享"
-
-#: templates/view_album.php:19
-msgid "Back"
-msgstr "返回"
-
-#: templates/view_album.php:36
-msgid "Remove confirmation"
-msgstr "移除确认"
-
-#: templates/view_album.php:37
-msgid "Do you want to remove album"
-msgstr "您是å¦æƒ³è¦ç§»é™¤ç›¸å†Œ"
-
-#: templates/view_album.php:40
-msgid "Change album name"
-msgstr "修改相册å称"
+msgstr "内部错误"
-#: templates/view_album.php:43
-msgid "New album name"
-msgstr "新相册å称"
+#: templates/index.php:27
+msgid "Slideshow"
+msgstr "å¹»ç¯ç‰‡"
diff --git a/l10n/zh_CN/lib.po b/l10n/zh_CN/lib.po
new file mode 100644
index 00000000000..4a52e2838c8
--- /dev/null
+++ b/l10n/zh_CN/lib.po
@@ -0,0 +1,113 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# <rainofchaos@gmail.com>, 2012.
+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 12:13+0000\n"
+"Last-Translator: leonfeng <rainofchaos@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"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_CN\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: app.php:288
+msgid "Help"
+msgstr "帮助"
+
+#: app.php:295
+msgid "Personal"
+msgstr "个人"
+
+#: app.php:300
+msgid "Settings"
+msgstr "设置"
+
+#: app.php:305
+msgid "Users"
+msgstr "用户"
+
+#: app.php:312
+msgid "Apps"
+msgstr "应用"
+
+#: app.php:314
+msgid "Admin"
+msgstr "管ç†"
+
+#: files.php:276
+msgid "ZIP download is turned off."
+msgstr "ZIP 下载已ç»å…³é—­"
+
+#: files.php:277
+msgid "Files need to be downloaded one by one."
+msgstr "需è¦é€ä¸€ä¸‹è½½æ–‡ä»¶"
+
+#: files.php:277 files.php:302
+msgid "Back to Files"
+msgstr "回到文件"
+
+#: files.php:301
+msgid "Selected files too large to generate zip file."
+msgstr "é€‰æ‹©çš„æ–‡ä»¶å¤ªå¤§ï¼Œæ— æ³•ç”Ÿæˆ zip 文件。"
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr "ä¸éœ€è¦ç¨‹åº"
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr "认è¯é”™è¯¯"
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr "Token 过期,请刷新页é¢ã€‚"
+
+#: template.php:86
+msgid "seconds ago"
+msgstr "几秒å‰"
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr "1分钟å‰"
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr "%d 分钟å‰"
+
+#: template.php:91
+msgid "today"
+msgstr "今天"
+
+#: template.php:92
+msgid "yesterday"
+msgstr "昨天"
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr "%d 天å‰"
+
+#: template.php:94
+msgid "last month"
+msgstr "上月"
+
+#: template.php:95
+msgid "months ago"
+msgstr "几月å‰"
+
+#: template.php:96
+msgid "last year"
+msgstr "上年"
+
+#: template.php:97
+msgid "years ago"
+msgstr "几年å‰"
diff --git a/l10n/zh_CN/settings.po b/l10n/zh_CN/settings.po
index c566e5d0604..7dffc01ef6a 100644
--- a/l10n/zh_CN/settings.po
+++ b/l10n/zh_CN/settings.po
@@ -3,83 +3,116 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Phoenix Nemo <>, 2012.
# <rainofchaos@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: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Chinese (China) (http://www.transifex.net/projects/p/owncloud/language/zh_CN/)\n"
+"POT-Creation-Date: 2012-08-19 02:02+0200\n"
+"PO-Revision-Date: 2012-08-18 05:49+0000\n"
+"Last-Translator: leonfeng <rainofchaos@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"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0\n"
+#: ajax/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr "无法从应用商店载入列表"
+
#: ajax/lostpassword.php:14
msgid "Email saved"
-msgstr ""
+msgstr "电å­é‚®ä»¶å·²ä¿å­˜"
#: ajax/lostpassword.php:16
msgid "Invalid email"
-msgstr ""
+msgstr "无效的电å­é‚®ä»¶"
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID 已修改"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "éžæ³•è¯·æ±‚"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr "认è¯é”™è¯¯"
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "语言已修改"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr "错误"
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
-msgstr ""
+msgstr "ç¦ç”¨"
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
-msgstr ""
+msgstr "å¯ç”¨"
#: js/personal.js:69
msgid "Saving..."
-msgstr ""
+msgstr "正在ä¿å­˜"
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "简体中文"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr "安全警告"
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr "计划任务"
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr "为æ¯ä¸ªè£…入的页é¢æ‰§è¡Œä»»åŠ¡"
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr "实现系统 cron æœåŠ¡"
+
+#: templates/admin.php:39
msgid "Log"
msgstr "日志"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "更多"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "添加应用"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "选择一个应用"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
-msgstr ""
+msgstr "查看在 app.owncloud.com 的应用程åºé¡µé¢"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-许å¯è¯"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "ç”±"
@@ -171,34 +204,38 @@ msgstr "帮助翻译"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "在文件管ç†å™¨ä¸­ä½¿ç”¨è¿™ä¸ªåœ°å€æ¥è¿žæŽ¥åˆ°æ‚¨çš„ ownCloud"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "å称"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "密ç "
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "组"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "创建"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "默认é…é¢"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "其它"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr "组管ç†"
+
+#: templates/users.php:82
msgid "Quota"
msgstr "é…é¢"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "删除"
diff --git a/l10n/zh_CN/tasks.po b/l10n/zh_CN/tasks.po
new file mode 100644
index 00000000000..7f27dae57f2
--- /dev/null
+++ b/l10n/zh_CN/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/zh_CN/user_ldap.po b/l10n/zh_CN/user_ldap.po
new file mode 100644
index 00000000000..5e871541a09
--- /dev/null
+++ b/l10n/zh_CN/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/zh_CN/user_migrate.po b/l10n/zh_CN/user_migrate.po
new file mode 100644
index 00000000000..f422c21ddf4
--- /dev/null
+++ b/l10n/zh_CN/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/zh_CN/user_openid.po b/l10n/zh_CN/user_openid.po
new file mode 100644
index 00000000000..a7e4f24cc21
--- /dev/null
+++ b/l10n/zh_CN/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/l10n/zh_TW/admin_dependencies_chk.po b/l10n/zh_TW/admin_dependencies_chk.po
new file mode 100644
index 00000000000..9519ecc8d96
--- /dev/null
+++ b/l10n/zh_TW/admin_dependencies_chk.po
@@ -0,0 +1,73 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: settings.php:33
+msgid ""
+"The php-json module is needed by the many applications for inter "
+"communications"
+msgstr ""
+
+#: settings.php:39
+msgid ""
+"The php-curl modude is needed to fetch the page title when adding a "
+"bookmarks"
+msgstr ""
+
+#: settings.php:45
+msgid "The php-gd module is needed to create thumbnails of your images"
+msgstr ""
+
+#: settings.php:51
+msgid "The php-ldap module is needed connect to your ldap server"
+msgstr ""
+
+#: settings.php:57
+msgid "The php-zip module is needed download multiple files at once"
+msgstr ""
+
+#: settings.php:63
+msgid ""
+"The php-mb_multibyte module is needed to manage correctly the encoding."
+msgstr ""
+
+#: settings.php:69
+msgid "The php-ctype module is needed validate data."
+msgstr ""
+
+#: settings.php:75
+msgid "The php-xml module is needed to share files with webdav."
+msgstr ""
+
+#: settings.php:81
+msgid ""
+"The allow_url_fopen directive of your php.ini should be set to 1 to retrieve"
+" knowledge base from OCS servers"
+msgstr ""
+
+#: settings.php:87
+msgid "The php-pdo module is needed to store owncloud data into a database."
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Dependencies status"
+msgstr ""
+
+#: templates/settings.php:7
+msgid "Used by :"
+msgstr ""
diff --git a/l10n/zh_TW/admin_migrate.po b/l10n/zh_TW/admin_migrate.po
new file mode 100644
index 00000000000..ad633109b33
--- /dev/null
+++ b/l10n/zh_TW/admin_migrate.po
@@ -0,0 +1,32 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:32+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Export this ownCloud instance"
+msgstr ""
+
+#: templates/settings.php:4
+msgid ""
+"This will create a compressed file that contains the data of this owncloud instance.\n"
+" Please choose the export type:"
+msgstr ""
+
+#: templates/settings.php:12
+msgid "Export"
+msgstr ""
diff --git a/l10n/zh_TW/bookmarks.po b/l10n/zh_TW/bookmarks.po
new file mode 100644
index 00000000000..5735653faa5
--- /dev/null
+++ b/l10n/zh_TW/bookmarks.po
@@ -0,0 +1,60 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:17+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: appinfo/app.php:14
+msgid "Bookmarks"
+msgstr ""
+
+#: bookmarksHelper.php:99
+msgid "unnamed"
+msgstr ""
+
+#: templates/bookmarklet.php:5
+msgid ""
+"Drag this to your browser bookmarks and click it, when you want to bookmark "
+"a webpage quickly:"
+msgstr ""
+
+#: templates/bookmarklet.php:7
+msgid "Read later"
+msgstr ""
+
+#: templates/list.php:13
+msgid "Address"
+msgstr ""
+
+#: templates/list.php:14
+msgid "Title"
+msgstr ""
+
+#: templates/list.php:15
+msgid "Tags"
+msgstr ""
+
+#: templates/list.php:16
+msgid "Save bookmark"
+msgstr ""
+
+#: templates/list.php:22
+msgid "You have no bookmarks"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Bookmarklet <br />"
+msgstr ""
diff --git a/l10n/zh_TW/calendar.po b/l10n/zh_TW/calendar.po
index 60f1e1c802e..4af2f935880 100644
--- a/l10n/zh_TW/calendar.po
+++ b/l10n/zh_TW/calendar.po
@@ -9,21 +9,29 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Chinese (Taiwan) (http://www.transifex.net/projects/p/owncloud/language/zh_TW/)\n"
+"POT-Creation-Date: 2012-08-11 02:02+0200\n"
+"PO-Revision-Date: 2012-08-11 00:02+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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/categories/rescan.php:28
+#: ajax/cache/status.php:19
+msgid "Not all calendars are completely cached"
+msgstr ""
+
+#: ajax/cache/status.php:21
+msgid "Everything seems to be completely cached"
+msgstr ""
+
+#: ajax/categories/rescan.php:29
msgid "No calendars found."
msgstr "沒有找到行事曆"
-#: ajax/categories/rescan.php:36
+#: ajax/categories/rescan.php:37
msgid "No events found."
msgstr "沒有找到活動"
@@ -31,300 +39,394 @@ msgstr "沒有找到活動"
msgid "Wrong calendar"
msgstr "錯誤日曆"
+#: ajax/import/dropimport.php:29 ajax/import/import.php:64
+msgid ""
+"The file contained either no events or all events are already saved in your "
+"calendar."
+msgstr ""
+
+#: ajax/import/dropimport.php:31 ajax/import/import.php:67
+msgid "events has been saved in the new calendar"
+msgstr ""
+
+#: ajax/import/import.php:56
+msgid "Import failed"
+msgstr ""
+
+#: ajax/import/import.php:69
+msgid "events has been saved in your calendar"
+msgstr ""
+
#: ajax/settings/guesstimezone.php:25
msgid "New Timezone:"
msgstr "新時å€ï¼š"
-#: ajax/settings/settimezone.php:22
+#: ajax/settings/settimezone.php:23
msgid "Timezone changed"
msgstr "時å€å·²è®Šæ›´"
-#: ajax/settings/settimezone.php:24
+#: ajax/settings/settimezone.php:25
msgid "Invalid request"
msgstr "無效請求"
-#: appinfo/app.php:19 templates/calendar.php:15
-#: templates/part.eventform.php:33 templates/part.showevent.php:31
-#: templates/settings.php:12
+#: appinfo/app.php:35 templates/calendar.php:15
+#: templates/part.eventform.php:33 templates/part.showevent.php:33
msgid "Calendar"
msgstr "日曆"
-#: js/calendar.js:93
-msgid "Deletion failed"
-msgstr ""
-
-#: js/calendar.js:828
+#: js/calendar.js:832
msgid "ddd"
msgstr ""
-#: js/calendar.js:829
+#: js/calendar.js:833
msgid "ddd M/d"
msgstr ""
-#: js/calendar.js:830
+#: js/calendar.js:834
msgid "dddd M/d"
msgstr ""
-#: js/calendar.js:833
+#: js/calendar.js:837
msgid "MMMM yyyy"
msgstr ""
-#: js/calendar.js:835
+#: js/calendar.js:839
msgid "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
msgstr "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}"
-#: js/calendar.js:837
+#: js/calendar.js:841
msgid "dddd, MMM d, yyyy"
msgstr ""
-#: lib/app.php:125
+#: lib/app.php:121
msgid "Birthday"
msgstr "生日"
-#: lib/app.php:126
+#: lib/app.php:122
msgid "Business"
msgstr "商業"
-#: lib/app.php:127
+#: lib/app.php:123
msgid "Call"
msgstr "呼å«"
-#: lib/app.php:128
+#: lib/app.php:124
msgid "Clients"
msgstr "客戶"
-#: lib/app.php:129
+#: lib/app.php:125
msgid "Deliverer"
msgstr "éžé€è€…"
-#: lib/app.php:130
+#: lib/app.php:126
msgid "Holidays"
msgstr "節日"
-#: lib/app.php:131
+#: lib/app.php:127
msgid "Ideas"
msgstr "主æ„"
-#: lib/app.php:132
+#: lib/app.php:128
msgid "Journey"
msgstr "旅行"
-#: lib/app.php:133
+#: lib/app.php:129
msgid "Jubilee"
msgstr "周年慶"
-#: lib/app.php:134
+#: lib/app.php:130
msgid "Meeting"
msgstr "會議"
-#: lib/app.php:135
+#: lib/app.php:131
msgid "Other"
msgstr "其他"
-#: lib/app.php:136
+#: lib/app.php:132
msgid "Personal"
msgstr "個人"
-#: lib/app.php:137
+#: lib/app.php:133
msgid "Projects"
msgstr "計畫"
-#: lib/app.php:138
+#: lib/app.php:134
msgid "Questions"
msgstr "å•é¡Œ"
-#: lib/app.php:139
+#: lib/app.php:135
msgid "Work"
msgstr "工作"
-#: lib/app.php:380
+#: lib/app.php:351 lib/app.php:361
+msgid "by"
+msgstr ""
+
+#: lib/app.php:359 lib/app.php:399
msgid "unnamed"
msgstr "ç„¡å稱的"
-#: lib/object.php:330
+#: lib/import.php:184 templates/calendar.php:12
+#: templates/part.choosecalendar.php:22
+msgid "New Calendar"
+msgstr "新日曆"
+
+#: lib/object.php:372
msgid "Does not repeat"
msgstr "ä¸é‡è¦†"
-#: lib/object.php:331
+#: lib/object.php:373
msgid "Daily"
msgstr "æ¯æ—¥"
-#: lib/object.php:332
+#: lib/object.php:374
msgid "Weekly"
msgstr "æ¯é€±"
-#: lib/object.php:333
+#: lib/object.php:375
msgid "Every Weekday"
msgstr "æ¯é€±æœ«"
-#: lib/object.php:334
+#: lib/object.php:376
msgid "Bi-Weekly"
msgstr "æ¯é›™é€±"
-#: lib/object.php:335
+#: lib/object.php:377
msgid "Monthly"
msgstr "æ¯æœˆ"
-#: lib/object.php:336
+#: lib/object.php:378
msgid "Yearly"
msgstr "æ¯å¹´"
-#: lib/object.php:343
+#: lib/object.php:388
msgid "never"
msgstr "絕ä¸"
-#: lib/object.php:344
+#: lib/object.php:389
msgid "by occurrences"
msgstr "由事件"
-#: lib/object.php:345
+#: lib/object.php:390
msgid "by date"
msgstr "由日期"
-#: lib/object.php:352
+#: lib/object.php:400
msgid "by monthday"
msgstr "ä¾æœˆä»½æ—¥æœŸ"
-#: lib/object.php:353
+#: lib/object.php:401
msgid "by weekday"
msgstr "由平日"
-#: lib/object.php:360 templates/settings.php:42
+#: lib/object.php:411 templates/calendar.php:5 templates/settings.php:69
msgid "Monday"
msgstr "週一"
-#: lib/object.php:361
+#: lib/object.php:412 templates/calendar.php:5
msgid "Tuesday"
msgstr "週二"
-#: lib/object.php:362
+#: lib/object.php:413 templates/calendar.php:5
msgid "Wednesday"
msgstr "週三"
-#: lib/object.php:363
+#: lib/object.php:414 templates/calendar.php:5
msgid "Thursday"
msgstr "週四"
-#: lib/object.php:364
+#: lib/object.php:415 templates/calendar.php:5
msgid "Friday"
msgstr "週五"
-#: lib/object.php:365
+#: lib/object.php:416 templates/calendar.php:5
msgid "Saturday"
msgstr "週六"
-#: lib/object.php:366 templates/settings.php:43
+#: lib/object.php:417 templates/calendar.php:5 templates/settings.php:70
msgid "Sunday"
msgstr "週日"
-#: lib/object.php:373
+#: lib/object.php:427
msgid "events week of month"
msgstr "月份中活動週"
-#: lib/object.php:374
+#: lib/object.php:428
msgid "first"
msgstr "第一"
-#: lib/object.php:375
+#: lib/object.php:429
msgid "second"
msgstr "第二"
-#: lib/object.php:376
+#: lib/object.php:430
msgid "third"
msgstr "第三"
-#: lib/object.php:377
+#: lib/object.php:431
msgid "fourth"
msgstr "第四"
-#: lib/object.php:378
+#: lib/object.php:432
msgid "fifth"
msgstr "第五"
-#: lib/object.php:379
+#: lib/object.php:433
msgid "last"
msgstr "最後"
-#: lib/object.php:401
+#: lib/object.php:467 templates/calendar.php:7
msgid "January"
msgstr "一月"
-#: lib/object.php:402
+#: lib/object.php:468 templates/calendar.php:7
msgid "February"
msgstr "二月"
-#: lib/object.php:403
+#: lib/object.php:469 templates/calendar.php:7
msgid "March"
msgstr "三月"
-#: lib/object.php:404
+#: lib/object.php:470 templates/calendar.php:7
msgid "April"
msgstr "四月"
-#: lib/object.php:405
+#: lib/object.php:471 templates/calendar.php:7
msgid "May"
msgstr "五月"
-#: lib/object.php:406
+#: lib/object.php:472 templates/calendar.php:7
msgid "June"
msgstr "六月"
-#: lib/object.php:407
+#: lib/object.php:473 templates/calendar.php:7
msgid "July"
msgstr "七月"
-#: lib/object.php:408
+#: lib/object.php:474 templates/calendar.php:7
msgid "August"
msgstr "八月"
-#: lib/object.php:409
+#: lib/object.php:475 templates/calendar.php:7
msgid "September"
msgstr "ä¹æœˆ"
-#: lib/object.php:410
+#: lib/object.php:476 templates/calendar.php:7
msgid "October"
msgstr "å月"
-#: lib/object.php:411
+#: lib/object.php:477 templates/calendar.php:7
msgid "November"
msgstr "å一月"
-#: lib/object.php:412
+#: lib/object.php:478 templates/calendar.php:7
msgid "December"
msgstr "å二月"
-#: lib/object.php:418
+#: lib/object.php:488
msgid "by events date"
msgstr "由事件日期"
-#: lib/object.php:419
+#: lib/object.php:489
msgid "by yearday(s)"
msgstr "ä¾å¹´ä»½æ—¥æœŸ"
-#: lib/object.php:420
+#: lib/object.php:490
msgid "by weeknumber(s)"
msgstr "由週數"
-#: lib/object.php:421
+#: lib/object.php:491
msgid "by day and month"
msgstr "由日與月"
-#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+#: lib/search.php:35 lib/search.php:37 lib/search.php:40
msgid "Date"
msgstr "日期"
-#: lib/search.php:40
+#: lib/search.php:43
msgid "Cal."
msgstr "行事曆"
+#: templates/calendar.php:6
+msgid "Sun."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Mon."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Tue."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Wed."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Thu."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Fri."
+msgstr ""
+
+#: templates/calendar.php:6
+msgid "Sat."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jan."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Feb."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Mar."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Apr."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "May."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jun."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Jul."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Aug."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Sep."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Oct."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Nov."
+msgstr ""
+
+#: templates/calendar.php:8
+msgid "Dec."
+msgstr ""
+
#: templates/calendar.php:11
msgid "All day"
msgstr "整天"
-#: templates/calendar.php:12 templates/part.choosecalendar.php:22
-msgid "New Calendar"
-msgstr "新日曆"
-
#: templates/calendar.php:13
msgid "Missing fields"
msgstr "éºå¤±æ¬„ä½"
@@ -358,40 +460,32 @@ msgstr "事件的çµæŸåœ¨é–‹å§‹ä¹‹å‰"
msgid "There was a database fail"
msgstr "資料庫錯誤"
-#: templates/calendar.php:40
+#: templates/calendar.php:39
msgid "Week"
msgstr "週"
-#: templates/calendar.php:41
+#: templates/calendar.php:40
msgid "Month"
msgstr "月"
-#: templates/calendar.php:42
+#: templates/calendar.php:41
msgid "List"
msgstr "清單"
-#: templates/calendar.php:48
+#: templates/calendar.php:45
msgid "Today"
msgstr "今日"
-#: templates/calendar.php:49
-msgid "Calendars"
-msgstr "日曆"
-
-#: templates/calendar.php:67
-msgid "There was a fail, while parsing the file."
-msgstr "解æžæª”案時失敗。"
-
-#: templates/part.choosecalendar.php:1
-msgid "Choose active calendars"
-msgstr "é¸æ“‡ä¸€å€‹ä½œç”¨ä¸­çš„日曆"
+#: templates/calendar.php:46 templates/calendar.php:47
+msgid "Settings"
+msgstr ""
#: templates/part.choosecalendar.php:2
msgid "Your calendars"
msgstr "你的行事曆"
#: templates/part.choosecalendar.php:27
-#: templates/part.choosecalendar.rowfields.php:5
+#: templates/part.choosecalendar.rowfields.php:11
msgid "CalDav Link"
msgstr "CalDav è¯çµ"
@@ -403,19 +497,19 @@ msgstr "分享的行事曆"
msgid "No shared calendars"
msgstr "ä¸åˆ†äº«çš„行事曆"
-#: templates/part.choosecalendar.rowfields.php:4
+#: templates/part.choosecalendar.rowfields.php:8
msgid "Share Calendar"
msgstr "分享行事曆"
-#: templates/part.choosecalendar.rowfields.php:6
+#: templates/part.choosecalendar.rowfields.php:14
msgid "Download"
msgstr "下載"
-#: templates/part.choosecalendar.rowfields.php:7
+#: templates/part.choosecalendar.rowfields.php:17
msgid "Edit"
msgstr "編輯"
-#: templates/part.choosecalendar.rowfields.php:8
+#: templates/part.choosecalendar.rowfields.php:20
#: templates/part.editevent.php:9
msgid "Delete"
msgstr "刪除"
@@ -501,23 +595,23 @@ msgstr "用逗點分隔分類"
msgid "Edit categories"
msgstr "編輯分類"
-#: templates/part.eventform.php:56 templates/part.showevent.php:55
+#: templates/part.eventform.php:56 templates/part.showevent.php:52
msgid "All Day Event"
msgstr "全天事件"
-#: templates/part.eventform.php:60 templates/part.showevent.php:59
+#: templates/part.eventform.php:60 templates/part.showevent.php:56
msgid "From"
msgstr "自"
-#: templates/part.eventform.php:68 templates/part.showevent.php:67
+#: templates/part.eventform.php:68 templates/part.showevent.php:64
msgid "To"
msgstr "至"
-#: templates/part.eventform.php:76 templates/part.showevent.php:75
+#: templates/part.eventform.php:76 templates/part.showevent.php:72
msgid "Advanced options"
msgstr "進階é¸é …"
-#: templates/part.eventform.php:81 templates/part.showevent.php:80
+#: templates/part.eventform.php:81 templates/part.showevent.php:77
msgid "Location"
msgstr "ä½ç½®"
@@ -525,7 +619,7 @@ msgstr "ä½ç½®"
msgid "Location of the Event"
msgstr "事件ä½ç½®"
-#: templates/part.eventform.php:89 templates/part.showevent.php:88
+#: templates/part.eventform.php:89 templates/part.showevent.php:85
msgid "Description"
msgstr "æè¿°"
@@ -533,84 +627,86 @@ msgstr "æè¿°"
msgid "Description of the Event"
msgstr "事件æè¿°"
-#: templates/part.eventform.php:100 templates/part.showevent.php:98
+#: templates/part.eventform.php:100 templates/part.showevent.php:95
msgid "Repeat"
msgstr "é‡è¦†"
-#: templates/part.eventform.php:107 templates/part.showevent.php:105
+#: templates/part.eventform.php:107 templates/part.showevent.php:102
msgid "Advanced"
msgstr "進階"
-#: templates/part.eventform.php:151 templates/part.showevent.php:149
+#: templates/part.eventform.php:151 templates/part.showevent.php:146
msgid "Select weekdays"
msgstr "é¸æ“‡å¹³æ—¥"
#: templates/part.eventform.php:164 templates/part.eventform.php:177
-#: templates/part.showevent.php:162 templates/part.showevent.php:175
+#: templates/part.showevent.php:159 templates/part.showevent.php:172
msgid "Select days"
msgstr "é¸æ“‡æ—¥"
-#: templates/part.eventform.php:169 templates/part.showevent.php:167
+#: templates/part.eventform.php:169 templates/part.showevent.php:164
msgid "and the events day of year."
msgstr "以åŠå¹´ä¸­çš„活動日"
-#: templates/part.eventform.php:182 templates/part.showevent.php:180
+#: templates/part.eventform.php:182 templates/part.showevent.php:177
msgid "and the events day of month."
msgstr "以åŠæœˆä¸­çš„活動日"
-#: templates/part.eventform.php:190 templates/part.showevent.php:188
+#: templates/part.eventform.php:190 templates/part.showevent.php:185
msgid "Select months"
msgstr "é¸æ“‡æœˆ"
-#: templates/part.eventform.php:203 templates/part.showevent.php:201
+#: templates/part.eventform.php:203 templates/part.showevent.php:198
msgid "Select weeks"
msgstr "é¸æ“‡é€±"
-#: templates/part.eventform.php:208 templates/part.showevent.php:206
+#: templates/part.eventform.php:208 templates/part.showevent.php:203
msgid "and the events week of year."
msgstr "以åŠå¹´ä¸­çš„活動週"
-#: templates/part.eventform.php:214 templates/part.showevent.php:212
+#: templates/part.eventform.php:214 templates/part.showevent.php:209
msgid "Interval"
msgstr "é–“éš”"
-#: templates/part.eventform.php:220 templates/part.showevent.php:218
+#: templates/part.eventform.php:220 templates/part.showevent.php:215
msgid "End"
msgstr "çµæŸ"
-#: templates/part.eventform.php:233 templates/part.showevent.php:231
+#: templates/part.eventform.php:233 templates/part.showevent.php:228
msgid "occurrences"
msgstr "事件"
-#: templates/part.import.php:1
+#: templates/part.import.php:14
+msgid "create a new calendar"
+msgstr "建立新日曆"
+
+#: templates/part.import.php:17
msgid "Import a calendar file"
msgstr "匯入日曆檔案"
-#: templates/part.import.php:6
-msgid "Please choose the calendar"
-msgstr "è«‹é¸æ“‡æ—¥æ›†"
-
-#: templates/part.import.php:10
-msgid "create a new calendar"
-msgstr "建立新日曆"
+#: templates/part.import.php:24
+msgid "Please choose a calendar"
+msgstr ""
-#: templates/part.import.php:15
+#: templates/part.import.php:36
msgid "Name of new calendar"
msgstr "新日曆å稱"
-#: templates/part.import.php:17
-msgid "Import"
-msgstr "匯入"
+#: templates/part.import.php:44
+msgid "Take an available name!"
+msgstr ""
-#: templates/part.import.php:20
-msgid "Importing calendar"
-msgstr "匯入日曆"
+#: templates/part.import.php:45
+msgid ""
+"A Calendar with this name already exists. If you continue anyhow, these "
+"calendars will be merged."
+msgstr ""
-#: templates/part.import.php:23
-msgid "Calendar imported successfully"
-msgstr "å·²æˆåŠŸåŒ¯å…¥æ—¥æ›†"
+#: templates/part.import.php:47
+msgid "Import"
+msgstr "匯入"
-#: templates/part.import.php:24
+#: templates/part.import.php:56
msgid "Close Dialog"
msgstr "關閉å°è©±"
@@ -626,45 +722,73 @@ msgstr "觀看一個活動"
msgid "No categories selected"
msgstr "沒有é¸æ“‡åˆ†é¡ž"
-#: templates/part.showevent.php:25
-msgid "Select category"
-msgstr "é¸æ“‡åˆ†é¡ž"
-
#: templates/part.showevent.php:37
msgid "of"
msgstr "æ–¼"
-#: templates/part.showevent.php:62 templates/part.showevent.php:70
+#: templates/part.showevent.php:59 templates/part.showevent.php:67
msgid "at"
msgstr "æ–¼"
-#: templates/settings.php:14
+#: templates/settings.php:10
+msgid "General"
+msgstr ""
+
+#: templates/settings.php:15
msgid "Timezone"
msgstr "時å€"
-#: templates/settings.php:31
-msgid "Check always for changes of the timezone"
-msgstr "總是檢查是å¦è®Šæ›´äº†æ™‚å€"
+#: templates/settings.php:47
+msgid "Update timezone automatically"
+msgstr ""
-#: templates/settings.php:33
-msgid "Timeformat"
-msgstr "日期格å¼"
+#: templates/settings.php:52
+msgid "Time format"
+msgstr ""
-#: templates/settings.php:35
+#: templates/settings.php:57
msgid "24h"
msgstr "24å°æ™‚制"
-#: templates/settings.php:36
+#: templates/settings.php:58
msgid "12h"
msgstr "12å°æ™‚制"
-#: templates/settings.php:40
-msgid "First day of the week"
-msgstr "æ¯é€±çš„第一天"
+#: templates/settings.php:64
+msgid "Start week on"
+msgstr ""
+
+#: templates/settings.php:76
+msgid "Cache"
+msgstr ""
+
+#: templates/settings.php:80
+msgid "Clear cache for repeating events"
+msgstr ""
+
+#: templates/settings.php:85
+msgid "URLs"
+msgstr ""
+
+#: templates/settings.php:87
+msgid "Calendar CalDAV syncing addresses"
+msgstr ""
-#: templates/settings.php:49
-msgid "Calendar CalDAV syncing address:"
-msgstr "CalDAV 的日曆åŒæ­¥åœ°å€ï¼š"
+#: templates/settings.php:87
+msgid "more info"
+msgstr ""
+
+#: templates/settings.php:89
+msgid "Primary address (Kontact et al)"
+msgstr ""
+
+#: templates/settings.php:91
+msgid "iOS/OS X"
+msgstr ""
+
+#: templates/settings.php:93
+msgid "Read only iCalendar link(s)"
+msgstr ""
#: templates/share.dropdown.php:20
msgid "Users"
diff --git a/l10n/zh_TW/contacts.po b/l10n/zh_TW/contacts.po
index 9d49e670c59..254da03e8b5 100644
--- a/l10n/zh_TW/contacts.po
+++ b/l10n/zh_TW/contacts.po
@@ -9,220 +9,206 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Chinese (Taiwan) (http://www.transifex.net/projects/p/owncloud/language/zh_TW/)\n"
+"POT-Creation-Date: 2012-08-24 02:02+0200\n"
+"PO-Revision-Date: 2012-08-24 00:03+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/activation.php:19 ajax/updateaddressbook.php:32
+#: ajax/addressbook/activate.php:24 ajax/addressbook/update.php:32
msgid "Error (de)activating addressbook."
msgstr "在啟用或關閉電話簿時發生錯誤"
-#: ajax/addcontact.php:59
-msgid "There was an error adding the contact."
-msgstr "添加通訊錄發生錯誤"
-
-#: ajax/addproperty.php:40
-msgid "Cannot add empty property."
-msgstr "ä¸å¯æ·»åŠ ç©ºç™½å…§å®¹"
-
-#: ajax/addproperty.php:52
-msgid "At least one of the address fields has to be filled out."
-msgstr "至少必須填寫一欄地å€"
+#: ajax/addressbook/delete.php:31 ajax/addressbook/update.php:20
+#: ajax/contact/addproperty.php:42 ajax/contact/delete.php:32
+#: ajax/contact/saveproperty.php:39
+msgid "id is not set."
+msgstr ""
-#: ajax/addproperty.php:62
-msgid "Trying to add duplicate property: "
+#: ajax/addressbook/update.php:24
+msgid "Cannot update addressbook with an empty name."
msgstr ""
-#: ajax/addproperty.php:120
-msgid "Error adding contact property."
-msgstr "添加通訊錄內容中發生錯誤"
+#: ajax/addressbook/update.php:28
+msgid "Error updating addressbook."
+msgstr "電話簿更新中發生錯誤"
-#: ajax/categories/categoriesfor.php:15
+#: ajax/categories/categoriesfor.php:17
msgid "No ID provided"
msgstr "未æä¾› ID"
-#: ajax/categories/categoriesfor.php:27
+#: ajax/categories/categoriesfor.php:34
msgid "Error setting checksum."
msgstr ""
-#: ajax/categories/delete.php:29
+#: ajax/categories/delete.php:19
msgid "No categories selected for deletion."
msgstr ""
-#: ajax/categories/delete.php:36 ajax/categories/rescan.php:28
+#: ajax/categories/delete.php:26
msgid "No address books found."
msgstr ""
-#: ajax/categories/delete.php:44 ajax/categories/rescan.php:36
+#: ajax/categories/delete.php:34
msgid "No contacts found."
msgstr "沒有找到è¯çµ¡äºº"
-#: ajax/contactdetails.php:37
+#: ajax/contact/add.php:47
+msgid "There was an error adding the contact."
+msgstr "添加通訊錄發生錯誤"
+
+#: ajax/contact/addproperty.php:39 ajax/contact/saveproperty.php:36
+msgid "element name is not set."
+msgstr ""
+
+#: ajax/contact/addproperty.php:46
+msgid "Could not parse contact: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:56
+msgid "Cannot add empty property."
+msgstr "ä¸å¯æ·»åŠ ç©ºç™½å…§å®¹"
+
+#: ajax/contact/addproperty.php:67
+msgid "At least one of the address fields has to be filled out."
+msgstr "至少必須填寫一欄地å€"
+
+#: ajax/contact/addproperty.php:76
+msgid "Trying to add duplicate property: "
+msgstr ""
+
+#: ajax/contact/addproperty.php:115 ajax/contact/saveproperty.php:93
+msgid "Missing IM parameter."
+msgstr ""
+
+#: ajax/contact/addproperty.php:119 ajax/contact/saveproperty.php:97
+msgid "Unknown IM: "
+msgstr ""
+
+#: ajax/contact/deleteproperty.php:37
+msgid "Information about vCard is incorrect. Please reload the page."
+msgstr "有關 vCard 的資訊ä¸æ­£ç¢ºï¼Œè«‹é‡æ–°è¼‰å…¥æ­¤é ã€‚"
+
+#: ajax/contact/details.php:31
msgid "Missing ID"
msgstr "éºå¤±ID"
-#: ajax/contactdetails.php:41
+#: ajax/contact/details.php:36
msgid "Error parsing VCard for ID: \""
msgstr ""
-#: ajax/createaddressbook.php:18
-msgid "Cannot add addressbook with an empty name."
+#: ajax/contact/saveproperty.php:42
+msgid "checksum is not set."
msgstr ""
-#: ajax/createaddressbook.php:24
-msgid "Error adding addressbook."
-msgstr "添加電話簿中發生錯誤"
+#: ajax/contact/saveproperty.php:62
+msgid "Information about vCard is incorrect. Please reload the page: "
+msgstr ""
-#: ajax/createaddressbook.php:30
-msgid "Error activating addressbook."
-msgstr "啟用電話簿中發生錯誤"
+#: ajax/contact/saveproperty.php:69
+msgid "Something went FUBAR. "
+msgstr ""
-#: ajax/currentphoto.php:34 ajax/oc_photo.php:37 ajax/uploadphoto.php:41
+#: ajax/currentphoto.php:30 ajax/oc_photo.php:28 ajax/uploadphoto.php:36
#: ajax/uploadphoto.php:68
msgid "No contact ID was submitted."
msgstr ""
-#: ajax/currentphoto.php:40
+#: ajax/currentphoto.php:36
msgid "Error reading contact photo."
msgstr ""
-#: ajax/currentphoto.php:52
+#: ajax/currentphoto.php:48
msgid "Error saving temporary file."
msgstr ""
-#: ajax/currentphoto.php:55
+#: ajax/currentphoto.php:51
msgid "The loading photo is not valid."
msgstr ""
-#: ajax/deletecard.php:37 ajax/saveproperty.php:58
-msgid "id is not set."
-msgstr ""
-
-#: ajax/deleteproperty.php:36
-msgid "Information about vCard is incorrect. Please reload the page."
-msgstr "有關 vCard 的資訊ä¸æ­£ç¢ºï¼Œè«‹é‡æ–°è¼‰å…¥æ­¤é ã€‚"
-
-#: ajax/deleteproperty.php:43
-msgid "Error deleting contact property."
-msgstr "刪除通訊錄內容中發生錯誤"
-
-#: ajax/editname.php:37
+#: ajax/editname.php:31
msgid "Contact ID is missing."
msgstr ""
-#: ajax/loadphoto.php:44
-msgid "Missing contact id."
-msgstr ""
-
-#: ajax/oc_photo.php:41
+#: ajax/oc_photo.php:32
msgid "No photo path was submitted."
msgstr ""
-#: ajax/oc_photo.php:48
+#: ajax/oc_photo.php:39
msgid "File doesn't exist:"
msgstr ""
-#: ajax/oc_photo.php:54 ajax/oc_photo.php:57
+#: ajax/oc_photo.php:44 ajax/oc_photo.php:47
msgid "Error loading image."
msgstr ""
-#: ajax/savecrop.php:68
+#: ajax/savecrop.php:69
msgid "Error getting contact object."
msgstr ""
-#: ajax/savecrop.php:75
+#: ajax/savecrop.php:79
msgid "Error getting PHOTO property."
msgstr ""
-#: ajax/savecrop.php:88
+#: ajax/savecrop.php:98
msgid "Error saving contact."
msgstr ""
-#: ajax/savecrop.php:98
+#: ajax/savecrop.php:109
msgid "Error resizing image"
msgstr ""
-#: ajax/savecrop.php:101
+#: ajax/savecrop.php:112
msgid "Error cropping image"
msgstr ""
-#: ajax/savecrop.php:104
+#: ajax/savecrop.php:115
msgid "Error creating temporary image"
msgstr ""
-#: ajax/savecrop.php:107
+#: ajax/savecrop.php:118
msgid "Error finding image: "
msgstr ""
-#: ajax/saveproperty.php:55
-msgid "element name is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:61
-msgid "checksum is not set."
-msgstr ""
-
-#: ajax/saveproperty.php:78
-msgid "Information about vCard is incorrect. Please reload the page: "
-msgstr ""
-
-#: ajax/saveproperty.php:83
-msgid "Something went FUBAR. "
-msgstr ""
-
-#: ajax/saveproperty.php:150
-msgid "Error updating contact property."
-msgstr "更新通訊錄內容中發生錯誤"
-
-#: ajax/updateaddressbook.php:20
-msgid "Cannot update addressbook with an empty name."
-msgstr ""
-
-#: ajax/updateaddressbook.php:26
-msgid "Error updating addressbook."
-msgstr "電話簿更新中發生錯誤"
-
-#: ajax/uploadimport.php:46 ajax/uploadimport.php:76
+#: ajax/uploadimport.php:44 ajax/uploadimport.php:76
msgid "Error uploading contacts to storage."
msgstr ""
-#: ajax/uploadimport.php:59 ajax/uploadphoto.php:77
+#: ajax/uploadimport.php:61 ajax/uploadphoto.php:77
msgid "There is no error, the file uploaded with success"
msgstr ""
-#: ajax/uploadimport.php:60 ajax/uploadphoto.php:78
+#: ajax/uploadimport.php:62 ajax/uploadphoto.php:78
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr ""
-#: ajax/uploadimport.php:61 ajax/uploadphoto.php:79
+#: ajax/uploadimport.php:63 ajax/uploadphoto.php:79
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form"
msgstr ""
-#: ajax/uploadimport.php:62 ajax/uploadphoto.php:80
+#: ajax/uploadimport.php:64 ajax/uploadphoto.php:80
msgid "The uploaded file was only partially uploaded"
msgstr ""
-#: ajax/uploadimport.php:63 ajax/uploadphoto.php:81
+#: ajax/uploadimport.php:65 ajax/uploadphoto.php:81
msgid "No file was uploaded"
msgstr "沒有已上傳的檔案"
-#: ajax/uploadimport.php:64 ajax/uploadphoto.php:82
+#: ajax/uploadimport.php:66 ajax/uploadphoto.php:82
msgid "Missing a temporary folder"
msgstr ""
-#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:102
+#: ajax/uploadphoto.php:59 ajax/uploadphoto.php:109
msgid "Couldn't save temporary image: "
msgstr ""
-#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:105
+#: ajax/uploadphoto.php:62 ajax/uploadphoto.php:112
msgid "Couldn't load temporary image: "
msgstr ""
@@ -230,415 +216,562 @@ msgstr ""
msgid "No file was uploaded. Unknown error"
msgstr ""
-#: appinfo/app.php:17 templates/settings.php:3
+#: appinfo/app.php:21
msgid "Contacts"
msgstr "通訊錄"
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Sorry, this functionality has not been implemented yet"
msgstr ""
-#: js/contacts.js:24
+#: js/contacts.js:71
msgid "Not implemented"
msgstr ""
-#: js/contacts.js:29
+#: js/contacts.js:76
msgid "Couldn't get a valid address."
msgstr ""
-#: js/contacts.js:29 js/contacts.js:334 js/contacts.js:341 js/contacts.js:355
-#: js/contacts.js:393 js/contacts.js:399 js/contacts.js:565 js/contacts.js:605
-#: js/contacts.js:631 js/contacts.js:668 js/contacts.js:747 js/contacts.js:753
-#: js/contacts.js:765 js/contacts.js:799 js/contacts.js:1056
-#: js/contacts.js:1064 js/contacts.js:1073 js/contacts.js:1130
-#: js/contacts.js:1146 js/contacts.js:1161 js/contacts.js:1173
-#: js/contacts.js:1196 js/contacts.js:1449 js/contacts.js:1457
-#: js/contacts.js:1483 js/contacts.js:1494 js/contacts.js:1509
-#: js/contacts.js:1526 js/contacts.js:1596 js/contacts.js:1644
-#: js/contacts.js:1654 js/contacts.js:1657
+#: js/contacts.js:76 js/contacts.js:365 js/contacts.js:381 js/contacts.js:393
+#: js/contacts.js:723 js/contacts.js:763 js/contacts.js:789 js/contacts.js:921
+#: js/contacts.js:927 js/contacts.js:939 js/contacts.js:976
+#: js/contacts.js:1250 js/contacts.js:1258 js/contacts.js:1267
+#: js/contacts.js:1302 js/contacts.js:1338 js/contacts.js:1353
+#: js/contacts.js:1379 js/contacts.js:1609 js/contacts.js:1644
+#: js/contacts.js:1664 js/settings.js:26 js/settings.js:43 js/settings.js:68
msgid "Error"
msgstr ""
-#: js/contacts.js:364
-msgid "Are you sure you want to delete this contact?"
+#: js/contacts.js:424
+msgid "You do not have permission to add contacts to "
+msgstr ""
+
+#: js/contacts.js:425
+msgid "Please select one of your own address books."
msgstr ""
-#: js/contacts.js:364
-msgid "Warning"
+#: js/contacts.js:425
+msgid "Permission error"
msgstr ""
-#: js/contacts.js:605
+#: js/contacts.js:763
msgid "This property has to be non-empty."
msgstr ""
-#: js/contacts.js:631
+#: js/contacts.js:789
msgid "Couldn't serialize elements."
msgstr ""
-#: js/contacts.js:747 js/contacts.js:765
+#: js/contacts.js:921 js/contacts.js:939
msgid ""
"'deleteProperty' called without type argument. Please report at "
"bugs.owncloud.org"
msgstr ""
-#: js/contacts.js:781
+#: js/contacts.js:958
msgid "Edit name"
msgstr ""
-#: js/contacts.js:1056
+#: js/contacts.js:1250
msgid "No files selected for upload."
msgstr ""
-#: js/contacts.js:1064 js/contacts.js:1449 js/contacts.js:1634
+#: js/contacts.js:1258
msgid ""
"The file you are trying to upload exceed the maximum size for file uploads "
"on this server."
msgstr ""
-#: js/contacts.js:1119
-msgid "Select photo"
+#: js/contacts.js:1322
+msgid "Error loading profile picture."
msgstr ""
-#: js/contacts.js:1257 js/contacts.js:1290
+#: js/contacts.js:1457 js/contacts.js:1498 js/contacts.js:1517
+#: js/contacts.js:1560
msgid "Select type"
msgstr ""
-#: js/contacts.js:1305 templates/part.importaddressbook.php:25
-msgid "Drop a VCF file to import contacts."
+#: js/contacts.js:1578
+msgid ""
+"Some contacts are marked for deletion, but not deleted yet. Please wait for "
+"them to be deleted."
msgstr ""
-#: js/contacts.js:1475
-msgid "Import done. Success/Failure: "
+#: js/contacts.js:1649
+msgid "Do you want to merge these address books?"
msgstr ""
-#: js/contacts.js:1476
-msgid "OK"
+#: js/loader.js:49
+msgid "Result: "
msgstr ""
-#: js/contacts.js:1494
-msgid "Displayname cannot be empty."
+#: js/loader.js:49
+msgid " imported, "
msgstr ""
-#: js/contacts.js:1634
-msgid "Upload too large"
+#: js/loader.js:49
+msgid " failed."
msgstr ""
-#: js/contacts.js:1638
-msgid "Only image files can be used as profile picture."
+#: js/settings.js:68
+msgid "Displayname cannot be empty."
msgstr ""
-#: js/contacts.js:1638
-msgid "Wrong file type"
+#: lib/app.php:36
+msgid "Addressbook not found: "
msgstr ""
-#: js/contacts.js:1644
-msgid ""
-"Your browser doesn't support AJAX upload. Please click on the profile "
-"picture to select a photo to upload."
+#: lib/app.php:52
+msgid "This is not your addressbook."
+msgstr "這ä¸æ˜¯ä½ çš„電話簿"
+
+#: lib/app.php:71
+msgid "Contact could not be found."
+msgstr "通訊錄未發ç¾"
+
+#: lib/app.php:116
+msgid "Jabber"
msgstr ""
-#: js/loader.js:49
-msgid "Result: "
+#: lib/app.php:121
+msgid "AIM"
msgstr ""
-#: js/loader.js:49
-msgid " imported, "
+#: lib/app.php:126
+msgid "MSN"
msgstr ""
-#: js/loader.js:49
-msgid " failed."
+#: lib/app.php:131
+msgid "Twitter"
msgstr ""
-#: lib/app.php:30
-msgid "Addressbook not found."
-msgstr "找ä¸åˆ°é€šè¨ŠéŒ„"
+#: lib/app.php:136
+msgid "GoogleTalk"
+msgstr ""
-#: lib/app.php:34
-msgid "This is not your addressbook."
-msgstr "這ä¸æ˜¯ä½ çš„電話簿"
+#: lib/app.php:141
+msgid "Facebook"
+msgstr ""
-#: lib/app.php:45
-msgid "Contact could not be found."
-msgstr "通訊錄未發ç¾"
+#: lib/app.php:146
+msgid "XMPP"
+msgstr ""
-#: lib/app.php:101 templates/part.contact.php:109
-msgid "Address"
-msgstr "地å€"
+#: lib/app.php:151
+msgid "ICQ"
+msgstr ""
-#: lib/app.php:102
-msgid "Telephone"
-msgstr "電話"
+#: lib/app.php:156
+msgid "Yahoo"
+msgstr ""
-#: lib/app.php:103 templates/part.contact.php:108
-msgid "Email"
-msgstr "é›»å­éƒµä»¶"
+#: lib/app.php:161
+msgid "Skype"
+msgstr ""
-#: lib/app.php:104 templates/part.contact.php:33 templates/part.contact.php:34
-#: templates/part.contact.php:104
-msgid "Organization"
-msgstr "組織"
+#: lib/app.php:166
+msgid "QQ"
+msgstr ""
+
+#: lib/app.php:171
+msgid "GaduGadu"
+msgstr ""
-#: lib/app.php:116 lib/app.php:123 lib/app.php:133
+#: lib/app.php:194 lib/app.php:202 lib/app.php:213 lib/app.php:266
msgid "Work"
msgstr "å…¬å¸"
-#: lib/app.php:117 lib/app.php:121 lib/app.php:134
+#: lib/app.php:195 lib/app.php:200 lib/app.php:214
msgid "Home"
msgstr "ä½å®…"
-#: lib/app.php:122
+#: lib/app.php:196 lib/app.php:209 lib/app.php:262 lib/vcard.php:593
+msgid "Other"
+msgstr ""
+
+#: lib/app.php:201
msgid "Mobile"
msgstr "行動電話"
-#: lib/app.php:124
+#: lib/app.php:203
msgid "Text"
msgstr "文字"
-#: lib/app.php:125
+#: lib/app.php:204
msgid "Voice"
msgstr "語音"
-#: lib/app.php:126
+#: lib/app.php:205
msgid "Message"
msgstr "訊æ¯"
-#: lib/app.php:127
+#: lib/app.php:206
msgid "Fax"
msgstr "傳真"
-#: lib/app.php:128
+#: lib/app.php:207
msgid "Video"
msgstr "影片"
-#: lib/app.php:129
+#: lib/app.php:208
msgid "Pager"
msgstr "呼å«å™¨"
-#: lib/app.php:135
+#: lib/app.php:215
msgid "Internet"
msgstr "網際網路"
-#: lib/hooks.php:79
+#: lib/app.php:252 templates/part.contact.php:45
+#: templates/part.contact.php:128
+msgid "Birthday"
+msgstr "生日"
+
+#: lib/app.php:253
+msgid "Business"
+msgstr ""
+
+#: lib/app.php:254
+msgid "Call"
+msgstr ""
+
+#: lib/app.php:255
+msgid "Clients"
+msgstr ""
+
+#: lib/app.php:256
+msgid "Deliverer"
+msgstr ""
+
+#: lib/app.php:257
+msgid "Holidays"
+msgstr ""
+
+#: lib/app.php:258
+msgid "Ideas"
+msgstr ""
+
+#: lib/app.php:259
+msgid "Journey"
+msgstr ""
+
+#: lib/app.php:260
+msgid "Jubilee"
+msgstr ""
+
+#: lib/app.php:261
+msgid "Meeting"
+msgstr ""
+
+#: lib/app.php:263
+msgid "Personal"
+msgstr ""
+
+#: lib/app.php:264
+msgid "Projects"
+msgstr ""
+
+#: lib/app.php:265
+msgid "Questions"
+msgstr ""
+
+#: lib/hooks.php:102
msgid "{name}'s Birthday"
msgstr "{name}的生日"
-#: lib/search.php:22
+#: lib/search.php:15
msgid "Contact"
msgstr "通訊錄"
-#: templates/index.php:13
+#: lib/vcard.php:408
+msgid "You do not have the permissions to edit this contact."
+msgstr ""
+
+#: lib/vcard.php:483
+msgid "You do not have the permissions to delete this contact."
+msgstr ""
+
+#: templates/index.php:14
msgid "Add Contact"
msgstr "添加通訊錄"
-#: templates/index.php:14
+#: templates/index.php:15 templates/index.php:16 templates/part.import.php:17
+msgid "Import"
+msgstr ""
+
+#: templates/index.php:18
+msgid "Settings"
+msgstr ""
+
+#: templates/index.php:18 templates/settings.php:9
msgid "Addressbooks"
msgstr "電話簿"
-#: templates/part.chooseaddressbook.php:1
-msgid "Configure Address Books"
-msgstr "設定通訊錄"
+#: templates/index.php:36 templates/part.import.php:24
+msgid "Close"
+msgstr ""
-#: templates/part.chooseaddressbook.php:16
-msgid "New Address Book"
-msgstr "新電話簿"
+#: templates/index.php:37
+msgid "Keyboard shortcuts"
+msgstr ""
-#: templates/part.chooseaddressbook.php:17
-msgid "Import from VCF"
-msgstr "從VCF匯入"
+#: templates/index.php:39
+msgid "Navigation"
+msgstr ""
-#: templates/part.chooseaddressbook.php:22
-#: templates/part.chooseaddressbook.rowfields.php:8
-msgid "CardDav Link"
-msgstr "CardDav è¯çµ"
+#: templates/index.php:42
+msgid "Next contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:11
-msgid "Download"
-msgstr "下載"
+#: templates/index.php:44
+msgid "Previous contact in list"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:14
-msgid "Edit"
-msgstr "編輯"
+#: templates/index.php:46
+msgid "Expand/collapse current addressbook"
+msgstr ""
-#: templates/part.chooseaddressbook.rowfields.php:17
-#: templates/part.contact.php:34 templates/part.contact.php:36
-#: templates/part.contact.php:38 templates/part.contact.php:42
-msgid "Delete"
-msgstr "刪除"
+#: templates/index.php:48
+msgid "Next addressbook"
+msgstr ""
-#: templates/part.contact.php:12
-msgid "Download contact"
-msgstr "下載通訊錄"
+#: templates/index.php:50
+msgid "Previous addressbook"
+msgstr ""
-#: templates/part.contact.php:13
-msgid "Delete contact"
-msgstr "刪除通訊錄"
+#: templates/index.php:54
+msgid "Actions"
+msgstr ""
-#: templates/part.contact.php:19
+#: templates/index.php:57
+msgid "Refresh contacts list"
+msgstr ""
+
+#: templates/index.php:59
+msgid "Add new contact"
+msgstr ""
+
+#: templates/index.php:61
+msgid "Add new addressbook"
+msgstr ""
+
+#: templates/index.php:63
+msgid "Delete current contact"
+msgstr ""
+
+#: templates/part.contact.php:17
msgid "Drop photo to upload"
msgstr ""
-#: templates/part.contact.php:29
+#: templates/part.contact.php:19
+msgid "Delete current photo"
+msgstr ""
+
+#: templates/part.contact.php:20
+msgid "Edit current photo"
+msgstr ""
+
+#: templates/part.contact.php:21
+msgid "Upload new photo"
+msgstr ""
+
+#: templates/part.contact.php:22
+msgid "Select photo from ownCloud"
+msgstr ""
+
+#: templates/part.contact.php:35
msgid "Format custom, Short name, Full name, Reverse or Reverse with comma"
msgstr ""
-#: templates/part.contact.php:30
+#: templates/part.contact.php:36
msgid "Edit name details"
msgstr "編輯姓å詳細資訊"
-#: templates/part.contact.php:35 templates/part.contact.php:105
+#: templates/part.contact.php:39 templates/part.contact.php:40
+#: templates/part.contact.php:126
+msgid "Organization"
+msgstr "組織"
+
+#: templates/part.contact.php:40 templates/part.contact.php:42
+#: templates/part.contact.php:44 templates/part.contact.php:46
+#: templates/part.contact.php:50 templates/settings.php:36
+msgid "Delete"
+msgstr "刪除"
+
+#: templates/part.contact.php:41 templates/part.contact.php:127
msgid "Nickname"
msgstr "綽號"
-#: templates/part.contact.php:36
+#: templates/part.contact.php:42
msgid "Enter nickname"
msgstr "輸入綽號"
-#: templates/part.contact.php:37 templates/part.contact.php:106
-msgid "Birthday"
-msgstr "生日"
+#: templates/part.contact.php:43 templates/part.contact.php:134
+msgid "Web site"
+msgstr ""
-#: templates/part.contact.php:38
+#: templates/part.contact.php:44
+msgid "http://www.somesite.com"
+msgstr ""
+
+#: templates/part.contact.php:44
+msgid "Go to web site"
+msgstr ""
+
+#: templates/part.contact.php:46
msgid "dd-mm-yyyy"
msgstr "dd-mm-yyyy"
-#: templates/part.contact.php:39 templates/part.contact.php:111
+#: templates/part.contact.php:47 templates/part.contact.php:135
msgid "Groups"
msgstr "群組"
-#: templates/part.contact.php:41
+#: templates/part.contact.php:49
msgid "Separate groups with commas"
msgstr "用逗號分隔群組"
-#: templates/part.contact.php:42
+#: templates/part.contact.php:50
msgid "Edit groups"
msgstr "編輯群組"
-#: templates/part.contact.php:55 templates/part.contact.php:69
+#: templates/part.contact.php:59 templates/part.contact.php:73
+#: templates/part.contact.php:98
msgid "Preferred"
msgstr "首é¸"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Please specify a valid email address."
msgstr "註填入åˆæ³•çš„é›»å­éƒµä»¶ä½å€"
-#: templates/part.contact.php:56
+#: templates/part.contact.php:60
msgid "Enter email address"
msgstr "輸入電å­éƒµä»¶åœ°å€"
-#: templates/part.contact.php:60
+#: templates/part.contact.php:64
msgid "Mail to address"
msgstr "寄é€ä½å€"
-#: templates/part.contact.php:61
+#: templates/part.contact.php:65
msgid "Delete email address"
msgstr "刪除電å­éƒµä»¶ä½å€"
-#: templates/part.contact.php:70
+#: templates/part.contact.php:75
msgid "Enter phone number"
msgstr "輸入電話號碼"
-#: templates/part.contact.php:74
+#: templates/part.contact.php:79
msgid "Delete phone number"
msgstr "刪除電話號碼"
-#: templates/part.contact.php:84
+#: templates/part.contact.php:100
+msgid "Instant Messenger"
+msgstr ""
+
+#: templates/part.contact.php:101
+msgid "Delete IM"
+msgstr ""
+
+#: templates/part.contact.php:110
msgid "View on map"
msgstr ""
-#: templates/part.contact.php:84
+#: templates/part.contact.php:110
msgid "Edit address details"
msgstr "é›»å­éƒµä»¶ä½å€è©³ç´°è³‡è¨Š"
-#: templates/part.contact.php:95
+#: templates/part.contact.php:116
msgid "Add notes here."
msgstr "在這裡新增註解"
-#: templates/part.contact.php:101
+#: templates/part.contact.php:124
msgid "Add field"
msgstr "新增欄ä½"
-#: templates/part.contact.php:103
-msgid "Profile picture"
-msgstr "個人資料照片"
-
-#: templates/part.contact.php:107
+#: templates/part.contact.php:129
msgid "Phone"
msgstr "電話"
-#: templates/part.contact.php:110
-msgid "Note"
-msgstr "註解"
+#: templates/part.contact.php:130
+msgid "Email"
+msgstr "é›»å­éƒµä»¶"
-#: templates/part.contactphoto.php:8
-msgid "Delete current photo"
+#: templates/part.contact.php:131
+msgid "Instant Messaging"
msgstr ""
-#: templates/part.contactphoto.php:9
-msgid "Edit current photo"
-msgstr ""
+#: templates/part.contact.php:132
+msgid "Address"
+msgstr "地å€"
-#: templates/part.contactphoto.php:10
-msgid "Upload new photo"
-msgstr ""
+#: templates/part.contact.php:133
+msgid "Note"
+msgstr "註解"
-#: templates/part.contactphoto.php:11
-msgid "Select photo from ownCloud"
-msgstr ""
+#: templates/part.contact.php:138
+msgid "Download contact"
+msgstr "下載通訊錄"
-#: templates/part.cropphoto.php:64
+#: templates/part.contact.php:139
+msgid "Delete contact"
+msgstr "刪除通訊錄"
+
+#: templates/part.cropphoto.php:65
msgid "The temporary image has been removed from cache."
msgstr ""
-#: templates/part.edit_address_dialog.php:9
+#: templates/part.edit_address_dialog.php:6
msgid "Edit address"
msgstr ""
-#: templates/part.edit_address_dialog.php:14
+#: templates/part.edit_address_dialog.php:10
msgid "Type"
msgstr "é¡žåž‹"
-#: templates/part.edit_address_dialog.php:22
-#: templates/part.edit_address_dialog.php:25
+#: templates/part.edit_address_dialog.php:18
+#: templates/part.edit_address_dialog.php:21
msgid "PO Box"
msgstr "通訊地å€"
-#: templates/part.edit_address_dialog.php:29
-#: templates/part.edit_address_dialog.php:32
+#: templates/part.edit_address_dialog.php:24
+msgid "Street address"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:27
+msgid "Street and number"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:30
msgid "Extended"
msgstr "分機"
-#: templates/part.edit_address_dialog.php:35
-#: templates/part.edit_address_dialog.php:38
-msgid "Street"
-msgstr "è¡—é“"
+#: templates/part.edit_address_dialog.php:33
+msgid "Apartment number etc."
+msgstr ""
-#: templates/part.edit_address_dialog.php:41
-#: templates/part.edit_address_dialog.php:44
+#: templates/part.edit_address_dialog.php:36
+#: templates/part.edit_address_dialog.php:39
msgid "City"
msgstr "城市"
-#: templates/part.edit_address_dialog.php:47
-#: templates/part.edit_address_dialog.php:50
+#: templates/part.edit_address_dialog.php:42
msgid "Region"
msgstr "地å€"
-#: templates/part.edit_address_dialog.php:53
-#: templates/part.edit_address_dialog.php:56
+#: templates/part.edit_address_dialog.php:45
+msgid "E.g. state or province"
+msgstr ""
+
+#: templates/part.edit_address_dialog.php:48
msgid "Zipcode"
msgstr "郵éžå€è™Ÿ"
-#: templates/part.edit_address_dialog.php:59
-#: templates/part.edit_address_dialog.php:62
-msgid "Country"
-msgstr "國家"
-
-#: templates/part.edit_categories_dialog.php:4
-msgid "Edit categories"
+#: templates/part.edit_address_dialog.php:51
+msgid "Postal code"
msgstr ""
-#: templates/part.edit_categories_dialog.php:14
-msgid "Add"
-msgstr "添加"
+#: templates/part.edit_address_dialog.php:54
+#: templates/part.edit_address_dialog.php:57
+msgid "Country"
+msgstr "國家"
#: templates/part.edit_name_dialog.php:16
msgid "Addressbook"
@@ -720,35 +853,6 @@ msgstr ""
msgid "Sn."
msgstr ""
-#: templates/part.editaddressbook.php:9
-msgid "New Addressbook"
-msgstr "新電話簿"
-
-#: templates/part.editaddressbook.php:9
-msgid "Edit Addressbook"
-msgstr "編輯電話簿"
-
-#: templates/part.editaddressbook.php:12
-msgid "Displayname"
-msgstr "顯示å稱"
-
-#: templates/part.editaddressbook.php:23
-msgid "Active"
-msgstr "作用中"
-
-#: templates/part.editaddressbook.php:29
-msgid "Save"
-msgstr "儲存"
-
-#: templates/part.editaddressbook.php:29
-msgid "Submit"
-msgstr "æ出"
-
-#: templates/part.editaddressbook.php:30
-#: templates/part.importaddressbook.php:34
-msgid "Cancel"
-msgstr "å–消"
-
#: templates/part.import.php:1
msgid "Import a contacts file"
msgstr ""
@@ -765,57 +869,86 @@ msgstr ""
msgid "Name of new addressbook"
msgstr ""
-#: templates/part.import.php:17
-msgid "Import"
-msgstr ""
-
#: templates/part.import.php:20
msgid "Importing contacts"
msgstr ""
-#: templates/part.import.php:24
-msgid "Close"
-msgstr ""
-
-#: templates/part.importaddressbook.php:12
-msgid ""
-"Currently this import function doesn't work while encryption is enabled.<br "
-"/>Please upload your VCF file with the file manager and click on it to "
-"import."
-msgstr ""
-
-#: templates/part.importaddressbook.php:16
-msgid "Select address book to import to:"
+#: templates/part.no_contacts.php:3
+msgid "You have no contacts in your addressbook."
msgstr ""
-#: templates/part.importaddressbook.php:26
-msgid "Select from HD"
+#: templates/part.no_contacts.php:5
+msgid "Add contact"
msgstr ""
-#: templates/part.no_contacts.php:2
-msgid "You have no contacts in your addressbook."
+#: templates/part.selectaddressbook.php:1
+msgid "Select Address Books"
msgstr ""
-#: templates/part.no_contacts.php:4
-msgid "Add contact"
+#: templates/part.selectaddressbook.php:27
+msgid "Enter name"
msgstr ""
-#: templates/part.no_contacts.php:5
-msgid "Configure addressbooks"
+#: templates/part.selectaddressbook.php:29
+msgid "Enter description"
msgstr ""
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "CardDAV syncing addresses"
msgstr ""
-#: templates/settings.php:4
+#: templates/settings.php:3
msgid "more info"
msgstr ""
-#: templates/settings.php:6
+#: templates/settings.php:5
msgid "Primary address (Kontact et al)"
msgstr ""
-#: templates/settings.php:8
+#: templates/settings.php:7
msgid "iOS/OS X"
msgstr ""
+
+#: templates/settings.php:20
+msgid "Show CardDav link"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Show read-only VCF link"
+msgstr ""
+
+#: templates/settings.php:26
+msgid "Share"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "Download"
+msgstr "下載"
+
+#: templates/settings.php:33
+msgid "Edit"
+msgstr "編輯"
+
+#: templates/settings.php:43
+msgid "New Address Book"
+msgstr "新電話簿"
+
+#: templates/settings.php:44
+msgid "Name"
+msgstr ""
+
+#: templates/settings.php:45
+msgid "Description"
+msgstr ""
+
+#: templates/settings.php:46
+msgid "Save"
+msgstr "儲存"
+
+#: templates/settings.php:47
+msgid "Cancel"
+msgstr "å–消"
+
+#: templates/settings.php:52
+msgid "More..."
+msgstr ""
diff --git a/l10n/zh_TW/core.po b/l10n/zh_TW/core.po
index 5f3860d447f..932959583c3 100644
--- a/l10n/zh_TW/core.po
+++ b/l10n/zh_TW/core.po
@@ -8,10 +8,10 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:14+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Chinese (Taiwan) (http://www.transifex.net/projects/p/owncloud/language/zh_TW/)\n"
+"POT-Creation-Date: 2012-08-02 02:02+0200\n"
+"PO-Revision-Date: 2012-08-02 00:03+0000\n"
+"Last-Translator: owncloud_robot <thomas.mueller@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"
@@ -34,51 +34,55 @@ msgstr "此分類已經存在:"
msgid "ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+="
msgstr ""
-#: js/js.js:520
+#: js/js.js:185 templates/layout.user.php:64 templates/layout.user.php:65
+msgid "Settings"
+msgstr "設定"
+
+#: js/js.js:573
msgid "January"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "February"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "March"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "April"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "May"
msgstr ""
-#: js/js.js:520
+#: js/js.js:573
msgid "June"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "July"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "August"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "September"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "October"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "November"
msgstr ""
-#: js/js.js:521
+#: js/js.js:574
msgid "December"
msgstr ""
@@ -107,10 +111,6 @@ msgid "Error"
msgstr ""
#: lostpassword/index.php:26
-msgid "Owncloud password reset"
-msgstr "ç§æœ‰é›²é‡è¨­å¯†ç¢¼"
-
-#: lostpassword/index.php:27
msgid "ownCloud password reset"
msgstr "ownCloud 密碼é‡è¨­"
@@ -240,14 +240,10 @@ msgstr "完æˆè¨­å®š"
msgid "web services under your control"
msgstr "網路æœå‹™å·²åœ¨ä½ æŽ§åˆ¶"
-#: templates/layout.user.php:41
+#: templates/layout.user.php:49
msgid "Log out"
msgstr "登出"
-#: templates/layout.user.php:53 templates/layout.user.php:54
-msgid "Settings"
-msgstr "設定"
-
#: templates/login.php:6
msgid "Lost your password?"
msgstr "忘記密碼?"
diff --git a/l10n/zh_TW/files.po b/l10n/zh_TW/files.po
index 4af073269d7..627c3aa1158 100644
--- a/l10n/zh_TW/files.po
+++ b/l10n/zh_TW/files.po
@@ -9,43 +9,43 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Chinese (Taiwan) (http://www.transifex.net/projects/p/owncloud/language/zh_TW/)\n"
+"POT-Creation-Date: 2012-08-21 02:03+0200\n"
+"PO-Revision-Date: 2012-08-21 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/upload.php:19
+#: ajax/upload.php:20
msgid "There is no error, the file uploaded with success"
msgstr "無錯誤,檔案上傳æˆåŠŸ"
-#: ajax/upload.php:20
+#: ajax/upload.php:21
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini"
msgstr "上傳的檔案超éŽäº† php.ini 中的 upload_max_filesize 設定"
-#: ajax/upload.php:21
+#: ajax/upload.php:22
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:22
+#: ajax/upload.php:23
msgid "The uploaded file was only partially uploaded"
msgstr "åªæœ‰éƒ¨åˆ†æª”案被上傳"
-#: ajax/upload.php:23
+#: ajax/upload.php:24
msgid "No file was uploaded"
msgstr "無已上傳檔案"
-#: ajax/upload.php:24
+#: ajax/upload.php:25
msgid "Missing a temporary folder"
msgstr "éºå¤±æš«å­˜è³‡æ–™å¤¾"
-#: ajax/upload.php:25
+#: ajax/upload.php:26
msgid "Failed to write to disk"
msgstr "寫入硬碟失敗"
@@ -53,55 +53,83 @@ msgstr "寫入硬碟失敗"
msgid "Files"
msgstr "檔案"
-#: js/filelist.js:186
-msgid "undo deletion"
+#: js/fileactions.js:107 templates/index.php:56
+msgid "Delete"
+msgstr "刪除"
+
+#: js/filelist.js:141
+msgid "already exists"
msgstr ""
-#: js/files.js:170
+#: js/filelist.js:141
+msgid "replace"
+msgstr ""
+
+#: js/filelist.js:141
+msgid "cancel"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "replaced"
+msgstr ""
+
+#: js/filelist.js:195
+msgid "with"
+msgstr ""
+
+#: js/filelist.js:195 js/filelist.js:246
+msgid "undo"
+msgstr ""
+
+#: js/filelist.js:246
+msgid "deleted"
+msgstr ""
+
+#: js/files.js:171
msgid "generating ZIP-file, it may take some time."
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Unable to upload your file as it is a directory or has 0 bytes"
msgstr ""
-#: js/files.js:199
+#: js/files.js:200
msgid "Upload Error"
msgstr ""
-#: js/files.js:227 js/files.js:318 js/files.js:347
+#: js/files.js:228 js/files.js:319 js/files.js:348
msgid "Pending"
msgstr ""
-#: js/files.js:332
+#: js/files.js:333
msgid "Upload cancelled."
msgstr ""
-#: js/files.js:456
+#: js/files.js:457
msgid "Invalid name, '/' is not allowed."
msgstr ""
-#: js/files.js:626 templates/index.php:55
+#: js/files.js:703 templates/index.php:55
msgid "Size"
msgstr "大å°"
-#: js/files.js:627 templates/index.php:56
+#: js/files.js:704 templates/index.php:56
msgid "Modified"
msgstr "修改"
-#: js/files.js:654
+#: js/files.js:731
msgid "folder"
msgstr ""
-#: js/files.js:656
+#: js/files.js:733
msgid "folders"
msgstr ""
-#: js/files.js:664
+#: js/files.js:741
msgid "file"
msgstr ""
-#: js/files.js:666
+#: js/files.js:743
msgid "files"
msgstr ""
@@ -173,10 +201,6 @@ msgstr "分享"
msgid "Download"
msgstr "下載"
-#: templates/index.php:56
-msgid "Delete"
-msgstr "刪除"
-
#: templates/index.php:64
msgid "Upload too large"
msgstr "上傳éŽå¤§"
diff --git a/l10n/zh_TW/files_encryption.po b/l10n/zh_TW/files_encryption.po
new file mode 100644
index 00000000000..86ca709cfa6
--- /dev/null
+++ b/l10n/zh_TW/files_encryption.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:33+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "Encryption"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "Exclude the following file types from encryption"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "None"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Enable Encryption"
+msgstr ""
diff --git a/l10n/zh_TW/files_external.po b/l10n/zh_TW/files_external.po
new file mode 100644
index 00000000000..9a6a0d7c43a
--- /dev/null
+++ b/l10n/zh_TW/files_external.po
@@ -0,0 +1,82 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:34+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:3
+msgid "External Storage"
+msgstr ""
+
+#: templates/settings.php:7 templates/settings.php:19
+msgid "Mount point"
+msgstr ""
+
+#: templates/settings.php:8
+msgid "Backend"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Configuration"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "Options"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "Applicable"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Add mount point"
+msgstr ""
+
+#: templates/settings.php:54 templates/settings.php:62
+msgid "None set"
+msgstr ""
+
+#: templates/settings.php:63
+msgid "All Users"
+msgstr ""
+
+#: templates/settings.php:64
+msgid "Groups"
+msgstr ""
+
+#: templates/settings.php:69
+msgid "Users"
+msgstr ""
+
+#: templates/settings.php:77 templates/settings.php:96
+msgid "Delete"
+msgstr ""
+
+#: templates/settings.php:88
+msgid "SSL root certificates"
+msgstr ""
+
+#: templates/settings.php:102
+msgid "Import Root Certificate"
+msgstr ""
+
+#: templates/settings.php:108
+msgid "Enable User External Storage"
+msgstr ""
+
+#: templates/settings.php:109
+msgid "Allow users to mount their own external storage"
+msgstr ""
diff --git a/l10n/zh_TW/files_sharing.po b/l10n/zh_TW/files_sharing.po
new file mode 100644
index 00000000000..4a2aa509e99
--- /dev/null
+++ b/l10n/zh_TW/files_sharing.po
@@ -0,0 +1,34 @@
+# 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: 2012-08-23 02:03+0200\n"
+"PO-Revision-Date: 2012-08-23 00:04+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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"
+
+#: templates/get.php:4
+msgid "Size"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Modified"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete all"
+msgstr ""
+
+#: templates/get.php:5
+msgid "Delete"
+msgstr ""
diff --git a/l10n/zh_TW/files_versions.po b/l10n/zh_TW/files_versions.po
new file mode 100644
index 00000000000..2214a0ec19f
--- /dev/null
+++ b/l10n/zh_TW/files_versions.po
@@ -0,0 +1,26 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:37+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/settings-personal.js:31
+msgid "Expire all versions"
+msgstr ""
+
+#: templates/settings.php:3
+msgid "Enable Files Versioning"
+msgstr ""
diff --git a/l10n/zh_TW/lib.po b/l10n/zh_TW/lib.po
new file mode 100644
index 00000000000..43e6429a60b
--- /dev/null
+++ b/l10n/zh_TW/lib.po
@@ -0,0 +1,112 @@
+# 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: 2012-07-28 02:02+0200\n"
+"PO-Revision-Date: 2012-07-27 22:23+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: app.php:287
+msgid "Help"
+msgstr ""
+
+#: app.php:294
+msgid "Personal"
+msgstr ""
+
+#: app.php:299
+msgid "Settings"
+msgstr ""
+
+#: app.php:304
+msgid "Users"
+msgstr ""
+
+#: app.php:311
+msgid "Apps"
+msgstr ""
+
+#: app.php:313
+msgid "Admin"
+msgstr ""
+
+#: files.php:245
+msgid "ZIP download is turned off."
+msgstr ""
+
+#: files.php:246
+msgid "Files need to be downloaded one by one."
+msgstr ""
+
+#: files.php:246 files.php:271
+msgid "Back to Files"
+msgstr ""
+
+#: files.php:270
+msgid "Selected files too large to generate zip file."
+msgstr ""
+
+#: json.php:28
+msgid "Application is not enabled"
+msgstr ""
+
+#: json.php:39 json.php:63 json.php:75
+msgid "Authentication error"
+msgstr ""
+
+#: json.php:51
+msgid "Token expired. Please reload page."
+msgstr ""
+
+#: template.php:86
+msgid "seconds ago"
+msgstr ""
+
+#: template.php:87
+msgid "1 minute ago"
+msgstr ""
+
+#: template.php:88
+#, php-format
+msgid "%d minutes ago"
+msgstr ""
+
+#: template.php:91
+msgid "today"
+msgstr ""
+
+#: template.php:92
+msgid "yesterday"
+msgstr ""
+
+#: template.php:93
+#, php-format
+msgid "%d days ago"
+msgstr ""
+
+#: template.php:94
+msgid "last month"
+msgstr ""
+
+#: template.php:95
+msgid "months ago"
+msgstr ""
+
+#: template.php:96
+msgid "last year"
+msgstr ""
+
+#: template.php:97
+msgid "years ago"
+msgstr ""
diff --git a/l10n/zh_TW/settings.po b/l10n/zh_TW/settings.po
index bcbaafd6e88..49d33a61537 100644
--- a/l10n/zh_TW/settings.po
+++ b/l10n/zh_TW/settings.po
@@ -8,16 +8,20 @@ msgid ""
msgstr ""
"Project-Id-Version: ownCloud\n"
"Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-06-06 00:12+0200\n"
-"PO-Revision-Date: 2012-06-05 22:15+0000\n"
-"Last-Translator: icewind <icewind1991@gmail.com>\n"
-"Language-Team: Chinese (Taiwan) (http://www.transifex.net/projects/p/owncloud/language/zh_TW/)\n"
+"POT-Creation-Date: 2012-08-18 02:01+0200\n"
+"PO-Revision-Date: 2012-08-18 00:02+0000\n"
+"Last-Translator: I Robot <thomas.mueller@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/apps/ocs.php:23
+msgid "Unable to load list from App Store"
+msgstr ""
+
#: ajax/lostpassword.php:14
msgid "Email saved"
msgstr ""
@@ -26,23 +30,31 @@ msgstr ""
msgid "Invalid email"
msgstr ""
-#: ajax/openid.php:15
+#: ajax/openid.php:16
msgid "OpenID Changed"
msgstr "OpenID 已變更"
-#: ajax/openid.php:17 ajax/setlanguage.php:19 ajax/setlanguage.php:22
+#: ajax/openid.php:18 ajax/setlanguage.php:20 ajax/setlanguage.php:23
msgid "Invalid request"
msgstr "無效請求"
-#: ajax/setlanguage.php:17
+#: ajax/removeuser.php:13 ajax/setquota.php:18 ajax/togglegroups.php:18
+msgid "Authentication error"
+msgstr ""
+
+#: ajax/setlanguage.php:18
msgid "Language changed"
msgstr "語言已變更"
-#: js/apps.js:31 js/apps.js:67
+#: js/apps.js:18
+msgid "Error"
+msgstr ""
+
+#: js/apps.js:39 js/apps.js:73
msgid "Disable"
msgstr ""
-#: js/apps.js:31 js/apps.js:54
+#: js/apps.js:39 js/apps.js:62
msgid "Enable"
msgstr ""
@@ -50,35 +62,55 @@ msgstr ""
msgid "Saving..."
msgstr ""
-#: personal.php:40 personal.php:41
+#: personal.php:46 personal.php:47
msgid "__language_name__"
msgstr "__語言_å稱__"
-#: templates/admin.php:13
+#: templates/admin.php:14
+msgid "Security Warning"
+msgstr ""
+
+#: templates/admin.php:29
+msgid "Cron"
+msgstr ""
+
+#: templates/admin.php:31
+msgid "execute one task with each page loaded"
+msgstr ""
+
+#: templates/admin.php:33
+msgid "cron.php is registered at a webcron service"
+msgstr ""
+
+#: templates/admin.php:35
+msgid "use systems cron service"
+msgstr ""
+
+#: templates/admin.php:39
msgid "Log"
msgstr "紀錄"
-#: templates/admin.php:40
+#: templates/admin.php:67
msgid "More"
msgstr "更多"
-#: templates/apps.php:8
+#: templates/apps.php:10
msgid "Add your App"
msgstr "添加你的 App"
-#: templates/apps.php:22
+#: templates/apps.php:26
msgid "Select an App"
msgstr "é¸æ“‡ä¸€å€‹æ‡‰ç”¨ç¨‹å¼"
-#: templates/apps.php:25
+#: templates/apps.php:29
msgid "See application page at apps.owncloud.com"
msgstr ""
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "-licensed"
msgstr "-已許å¯"
-#: templates/apps.php:26
+#: templates/apps.php:30
msgid "by"
msgstr "ç”±"
@@ -170,34 +202,38 @@ msgstr "幫助翻譯"
msgid "use this address to connect to your ownCloud in your file manager"
msgstr "使用這個ä½å€åŽ»é€£æŽ¥åˆ°ä½ çš„ç§æœ‰é›²æª”案管ç†å“¡"
-#: templates/users.php:15 templates/users.php:44
+#: templates/users.php:21 templates/users.php:76
msgid "Name"
msgstr "å稱"
-#: templates/users.php:16 templates/users.php:45
+#: templates/users.php:23 templates/users.php:77
msgid "Password"
msgstr "密碼"
-#: templates/users.php:17 templates/users.php:46 templates/users.php:60
+#: templates/users.php:26 templates/users.php:78 templates/users.php:98
msgid "Groups"
msgstr "群組"
-#: templates/users.php:22
+#: templates/users.php:32
msgid "Create"
msgstr "創造"
-#: templates/users.php:25
+#: templates/users.php:35
msgid "Default Quota"
msgstr "é è¨­å®¹é‡é™åˆ¶"
-#: templates/users.php:35 templates/users.php:74
+#: templates/users.php:55 templates/users.php:138
msgid "Other"
msgstr "其他"
-#: templates/users.php:47
+#: templates/users.php:80 templates/users.php:112
+msgid "Group Admin"
+msgstr ""
+
+#: templates/users.php:82
msgid "Quota"
msgstr "容é‡é™åˆ¶"
-#: templates/users.php:80
+#: templates/users.php:146
msgid "Delete"
msgstr "刪除"
diff --git a/l10n/zh_TW/tasks.po b/l10n/zh_TW/tasks.po
new file mode 100644
index 00000000000..10432eca2df
--- /dev/null
+++ b/l10n/zh_TW/tasks.po
@@ -0,0 +1,106 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:44+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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/update_property.php:51 lib/app.php:89 lib/app.php:101
+msgid "Invalid date/time"
+msgstr ""
+
+#: appinfo/app.php:11
+msgid "Tasks"
+msgstr ""
+
+#: js/tasks.js:415
+msgid "No category"
+msgstr ""
+
+#: lib/app.php:33
+msgid "Unspecified"
+msgstr ""
+
+#: lib/app.php:34
+msgid "1=highest"
+msgstr ""
+
+#: lib/app.php:38
+msgid "5=medium"
+msgstr ""
+
+#: lib/app.php:42
+msgid "9=lowest"
+msgstr ""
+
+#: lib/app.php:81
+msgid "Empty Summary"
+msgstr ""
+
+#: lib/app.php:93
+msgid "Invalid percent complete"
+msgstr ""
+
+#: lib/app.php:107
+msgid "Invalid priority"
+msgstr ""
+
+#: templates/tasks.php:3
+msgid "Add Task"
+msgstr ""
+
+#: templates/tasks.php:4
+msgid "Order Due"
+msgstr ""
+
+#: templates/tasks.php:5
+msgid "Order List"
+msgstr ""
+
+#: templates/tasks.php:6
+msgid "Order Complete"
+msgstr ""
+
+#: templates/tasks.php:7
+msgid "Order Location"
+msgstr ""
+
+#: templates/tasks.php:8
+msgid "Order Priority"
+msgstr ""
+
+#: templates/tasks.php:9
+msgid "Order Label"
+msgstr ""
+
+#: templates/tasks.php:16
+msgid "Loading tasks..."
+msgstr ""
+
+#: templates/tasks.php:20
+msgid "Important"
+msgstr ""
+
+#: templates/tasks.php:23
+msgid "More"
+msgstr ""
+
+#: templates/tasks.php:26
+msgid "Less"
+msgstr ""
+
+#: templates/tasks.php:29
+msgid "Delete"
+msgstr ""
diff --git a/l10n/zh_TW/user_ldap.po b/l10n/zh_TW/user_ldap.po
new file mode 100644
index 00000000000..d84e081d11d
--- /dev/null
+++ b/l10n/zh_TW/user_ldap.po
@@ -0,0 +1,164 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/settings.php:8
+msgid "Host"
+msgstr ""
+
+#: templates/settings.php:8
+msgid ""
+"You can omit the protocol, except you require SSL. Then start with ldaps://"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "Base DN"
+msgstr ""
+
+#: templates/settings.php:9
+msgid "You can specify Base DN for users and groups in the Advanced tab"
+msgstr ""
+
+#: templates/settings.php:10
+msgid "User DN"
+msgstr ""
+
+#: templates/settings.php:10
+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:11
+msgid "Password"
+msgstr ""
+
+#: templates/settings.php:11
+msgid "For anonymous access, leave DN and Password empty."
+msgstr ""
+
+#: templates/settings.php:12
+msgid "User Login Filter"
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid ""
+"Defines the filter to apply, when login is attempted. %%uid replaces the "
+"username in the login action."
+msgstr ""
+
+#: templates/settings.php:12
+#, php-format
+msgid "use %%uid placeholder, e.g. \"uid=%%uid\""
+msgstr ""
+
+#: templates/settings.php:13
+msgid "User List Filter"
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Defines the filter to apply, when retrieving users."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "without any placeholder, e.g. \"objectClass=person\"."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Group Filter"
+msgstr ""
+
+#: templates/settings.php:14
+msgid "Defines the filter to apply, when retrieving groups."
+msgstr ""
+
+#: templates/settings.php:14
+msgid "without any placeholder, e.g. \"objectClass=posixGroup\"."
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Port"
+msgstr ""
+
+#: templates/settings.php:18
+msgid "Base User Tree"
+msgstr ""
+
+#: templates/settings.php:19
+msgid "Base Group Tree"
+msgstr ""
+
+#: templates/settings.php:20
+msgid "Group-Member association"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Use TLS"
+msgstr ""
+
+#: templates/settings.php:21
+msgid "Do not use it for SSL connections, it will fail."
+msgstr ""
+
+#: templates/settings.php:22
+msgid "Case insensitve LDAP server (Windows)"
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Turn off SSL certificate validation."
+msgstr ""
+
+#: templates/settings.php:23
+msgid ""
+"If connection only works with this option, import the LDAP server's SSL "
+"certificate in your ownCloud server."
+msgstr ""
+
+#: templates/settings.php:23
+msgid "Not recommended, use for testing only."
+msgstr ""
+
+#: templates/settings.php:24
+msgid "User Display Name Field"
+msgstr ""
+
+#: templates/settings.php:24
+msgid "The LDAP attribute to use to generate the user`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:25
+msgid "Group Display Name Field"
+msgstr ""
+
+#: templates/settings.php:25
+msgid "The LDAP attribute to use to generate the groups`s ownCloud name."
+msgstr ""
+
+#: templates/settings.php:27
+msgid "in bytes"
+msgstr ""
+
+#: templates/settings.php:29
+msgid "in seconds. A change empties the cache."
+msgstr ""
+
+#: templates/settings.php:31
+msgid "Help"
+msgstr ""
diff --git a/l10n/zh_TW/user_migrate.po b/l10n/zh_TW/user_migrate.po
new file mode 100644
index 00000000000..005fbe5e715
--- /dev/null
+++ b/l10n/zh_TW/user_migrate.po
@@ -0,0 +1,51 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: js/export.js:14 js/export.js:20
+msgid "Export"
+msgstr ""
+
+#: js/export.js:19
+msgid "Something went wrong while the export file was being generated"
+msgstr ""
+
+#: js/export.js:19
+msgid "An error has occurred"
+msgstr ""
+
+#: templates/settings.php:2
+msgid "Export your user account"
+msgstr ""
+
+#: templates/settings.php:3
+msgid ""
+"This will create a compressed file that contains your ownCloud account."
+msgstr ""
+
+#: templates/settings.php:13
+msgid "Import user account"
+msgstr ""
+
+#: templates/settings.php:15
+msgid "ownCloud User Zip"
+msgstr ""
+
+#: templates/settings.php:17
+msgid "Import"
+msgstr ""
diff --git a/l10n/zh_TW/user_openid.po b/l10n/zh_TW/user_openid.po
new file mode 100644
index 00000000000..ca26a19dbf3
--- /dev/null
+++ b/l10n/zh_TW/user_openid.po
@@ -0,0 +1,54 @@
+# 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: 2012-08-13 23:12+0200\n"
+"PO-Revision-Date: 2012-08-12 22:45+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\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"
+
+#: templates/nomode.php:12
+msgid "This is an OpenID server endpoint. For more information, see "
+msgstr ""
+
+#: templates/nomode.php:14
+msgid "Identity: <b>"
+msgstr ""
+
+#: templates/nomode.php:15
+msgid "Realm: <b>"
+msgstr ""
+
+#: templates/nomode.php:16
+msgid "User: <b>"
+msgstr ""
+
+#: templates/nomode.php:17
+msgid "Login"
+msgstr ""
+
+#: templates/nomode.php:22
+msgid "Error: <b>No user Selected"
+msgstr ""
+
+#: templates/settings.php:4
+msgid "you can authenticate to other sites with this address"
+msgstr ""
+
+#: templates/settings.php:5
+msgid "Authorized OpenID provider"
+msgstr ""
+
+#: templates/settings.php:6
+msgid "Your address at Wordpress, Identi.ca, &hellip;"
+msgstr ""
diff --git a/lib/MDB2/Driver/Function/sqlite3.php b/lib/MDB2/Driver/Function/sqlite3.php
index a013aea165a..1af262fd7a7 100644
--- a/lib/MDB2/Driver/Function/sqlite3.php
+++ b/lib/MDB2/Driver/Function/sqlite3.php
@@ -134,4 +134,3 @@ class MDB2_Driver_Function_sqlite3 extends MDB2_Driver_Function_Common
// }}}
}
-?>
diff --git a/lib/MDB2/Driver/Manager/sqlite3.php b/lib/MDB2/Driver/Manager/sqlite3.php
index 8f4e1312eb8..10255a3619a 100644
--- a/lib/MDB2/Driver/Manager/sqlite3.php
+++ b/lib/MDB2/Driver/Manager/sqlite3.php
@@ -1360,4 +1360,3 @@ class MDB2_Driver_Manager_sqlite3 extends MDB2_Driver_Manager_Common
// }}}
}
-?>
diff --git a/lib/MDB2/Driver/sqlite3.php b/lib/MDB2/Driver/sqlite3.php
index 39d3fb6727d..6bfccadad9a 100644
--- a/lib/MDB2/Driver/sqlite3.php
+++ b/lib/MDB2/Driver/sqlite3.php
@@ -1221,7 +1221,7 @@ class MDB2_Statement_sqlite3 extends MDB2_Statement_Common
return $affected_rows;
}
- $result =& $this->db->_wrapResult($result, $this->result_types,
+ $result = $this->db->_wrapResult($result, $this->result_types,
$result_class, $result_wrap_class, $this->limit, $this->offset);
$this->db->debug($this->query, 'execute', array('is_manip' => $this->is_manip, 'when' => 'post', 'result' => $result));
return $result;
@@ -1332,5 +1332,3 @@ class MDB2_Statement_sqlite3 extends MDB2_Statement_Common
$this->free();
}
}
-
-?>
diff --git a/lib/app.php b/lib/app.php
index f9292b331bb..74315903467 100644..100755
--- a/lib/app.php
+++ b/lib/app.php
@@ -27,7 +27,6 @@
* upgrading and removing apps.
*/
class OC_App{
- static private $apps = array();
static private $activeapp = '';
static private $navigation = array();
static private $settingsForms = array();
@@ -36,6 +35,7 @@ class OC_App{
static private $appInfo = array();
static private $appTypes = array();
static private $loadedApps = array();
+ static private $checkedApps = array();
/**
* @brief loads all apps
@@ -49,15 +49,7 @@ class OC_App{
* if $types is set, only apps of those types will be loaded
*/
public static function loadApps($types=null){
- // Our very own core apps are hardcoded
- foreach( array( 'settings') as $app ){
- if(is_null($types) && !in_array($app, self::$loadedApps)){
- require( $app.'/appinfo/app.php' );
- self::$loadedApps[] = $app;
- }
- }
-
- // The rest comes here
+ // Load the enabled apps here
$apps = self::getEnabledApps();
// prevent app.php from printing output
ob_start();
@@ -69,6 +61,19 @@ class OC_App{
}
ob_end_clean();
+ if (!defined('DEBUG') || !DEBUG){
+ if (is_null($types)) {
+ OC_Util::$core_scripts = OC_Util::$scripts;
+ OC_Util::$scripts = array();
+ OC_Util::$core_styles = OC_Util::$styles;
+ OC_Util::$styles = array();
+
+ if (!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');
+ }
+ }
+ }
// return
return true;
}
@@ -78,7 +83,8 @@ class OC_App{
* @param string app
*/
public static function loadApp($app){
- if(is_file(OC::$APPSROOT.'/apps/'.$app.'/appinfo/app.php')){
+ if(is_file(self::getAppPath($app).'/appinfo/app.php')){
+ self::checkUpgrade($app);
require_once( $app.'/appinfo/app.php' );
}
}
@@ -138,6 +144,8 @@ class OC_App{
* get all enabled apps
*/
public static function getEnabledApps(){
+ if(!OC_Config::getValue('installed', false))
+ return array();
$apps=array('files');
$query = OC_DB::prepare( 'SELECT `appid` FROM `*PREFIX*appconfig` WHERE `configkey` = \'enabled\' AND `configvalue`=\'yes\'' );
$result=$query->execute();
@@ -175,7 +183,7 @@ class OC_App{
if(!OC_Installer::isInstalled($app)){
// check if app is a shipped app or not. OCS apps have an integer as id, shipped apps use a string
if(!is_numeric($app)){
- OC_Installer::installShippedApp($app);
+ $app = OC_Installer::installShippedApp($app);
}else{
$download=OC_OCSClient::getApplicationDownload($app,1);
if(isset($download['downloadlink']) and $download['downloadlink']!='') {
@@ -187,7 +195,7 @@ class OC_App{
// check if the app is compatible with this version of ownCloud
$info=OC_App::getAppInfo($app);
$version=OC_Util::getVersion();
- if(!isset($info['require']) or ($version[0]>$info['require'])){
+ if(!isset($info['require']) or ($version[0]>$info['require'])){
OC_Log::write('core','App "'.$info['name'].'" can\'t be installed because it is not compatible with this version of ownCloud',OC_Log::ERROR);
return false;
}else{
@@ -197,6 +205,7 @@ class OC_App{
}else{
return false;
}
+ return $app;
}
/**
@@ -212,36 +221,6 @@ class OC_App{
}
/**
- * @brief makes owncloud aware of this app
- * @param $data array with all information
- * @returns true/false
- *
- * This function registers the application. $data is an associative array.
- * The following keys are required:
- * - id: id of the application, has to be unique ('addressbook')
- * - name: Human readable name ('Addressbook')
- * - version: array with Version (major, minor, bugfix) ( array(1, 0, 2))
- *
- * The following keys are optional:
- * - order: integer, that influences the position of your application in
- * a list of applications. Lower values come first.
- *
- */
- public static function register( $data ){
- OC_App::$apps[] = $data;
- }
-
- /**
- * @brief returns information of all apps
- * @return array with all information
- *
- * This function returns all data it got via register().
- */
- public static function get(){
- return OC_App::$apps;
- }
-
- /**
* @brief adds an entry to the navigation
* @param $data array containing the data
* @returns true/false
@@ -320,10 +299,15 @@ class OC_App{
// settings menu
$settings[]=array( "id" => "settings", "order" => 1000, "href" => OC_Helper::linkTo( "settings", "settings.php" ), "name" => $l->t("Settings"), "icon" => OC_Helper::imagePath( "settings", "settings.svg" ));
- // if the user is an admin
- if(OC_Group::inGroup( $_SESSION["user_id"], "admin" )) {
+ //SubAdmins are also allowed to access user management
+ if(OC_SubAdmin::isSubAdmin($_SESSION["user_id"]) || OC_Group::inGroup( $_SESSION["user_id"], "admin" )){
// admin users menu
$settings[] = array( "id" => "core_users", "order" => 2, "href" => OC_Helper::linkTo( "settings", "users.php" ), "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" )) {
// admin apps menu
$settings[] = array( "id" => "core_apps", "order" => 3, "href" => OC_Helper::linkTo( "settings", "apps.php" ).'?installed', "name" => $l->t("Apps"), "icon" => OC_Helper::imagePath( "settings", "apps.svg" ));
@@ -353,16 +337,65 @@ class OC_App{
}
/**
+ * Get the path where to install apps
+ */
+ public static function getInstallPath() {
+ if(OC_Config::getValue('appstoreenabled', true)==false) {
+ return false;
+ }
+
+ foreach(OC::$APPSROOTS as $dir) {
+ if(isset($dir['writable']) && $dir['writable']===true)
+ return $dir['path'];
+ }
+
+ OC_Log::write('core','No application directories are marked as writable.',OC_Log::ERROR);
+ return null;
+ }
+
+
+ protected static function findAppInDirectories($appid) {
+ static $app_dir = array();
+ if (isset($app_dir[$appid])) {
+ return $app_dir[$appid];
+ }
+ foreach(OC::$APPSROOTS as $dir) {
+ if(file_exists($dir['path'].'/'.$appid)) {
+ return $app_dir[$appid]=$dir;
+ }
+ }
+ }
+ /**
+ * Get the directory for the given app.
+ * If the app is defined in multiple directory, the first one is taken. (false if not found)
+ */
+ public static function getAppPath($appid) {
+ if( ($dir = self::findAppInDirectories($appid)) != false) {
+ return $dir['path'].'/'.$appid;
+ }
+ }
+
+ /**
+ * Get the path for the given app on the access
+ * If the app is defined in multiple directory, the first one is taken. (false if not found)
+ */
+ public static function getAppWebPath($appid) {
+ if( ($dir = self::findAppInDirectories($appid)) != false) {
+ return OC::$WEBROOT.$dir['url'].'/'.$appid;
+ }
+ }
+
+ /**
* get the last version of the app, either from appinfo/version or from appinfo/info.xml
*/
public static function getAppVersion($appid){
- $file=OC::$APPSROOT.'/apps/'.$appid.'/appinfo/version';
+ $file= self::getAppPath($appid).'/appinfo/version';
$version=@file_get_contents($file);
if($version){
- return $version;
+ return trim($version);
}else{
$appData=self::getAppInfo($appid);
- return $appData['version'];
+ return isset($appData['version'])? $appData['version'] : '';
}
}
@@ -379,7 +412,7 @@ class OC_App{
if(isset(self::$appInfo[$appid])){
return self::$appInfo[$appid];
}
- $file=OC::$APPSROOT.'/apps/'.$appid.'/appinfo/info.xml';
+ $file= self::getAppPath($appid).'/appinfo/info.xml';
}
$data=array();
$content=@file_get_contents($file);
@@ -470,21 +503,21 @@ class OC_App{
* register a settings form to be shown
*/
public static function registerSettings($app,$page){
- self::$settingsForms[]='apps/'.$app.'/'.$page.'.php';
+ self::$settingsForms[]= $app.'/'.$page.'.php';
}
/**
* register an admin form to be shown
*/
public static function registerAdmin($app,$page){
- self::$adminForms[]='apps/'.$app.'/'.$page.'.php';
+ self::$adminForms[]= $app.'/'.$page.'.php';
}
/**
* register a personal form to be shown
*/
public static function registerPersonal($app,$page){
- self::$personalForms[]='apps/'.$app.'/'.$page.'.php';
+ self::$personalForms[]= $app.'/'.$page.'.php';
}
/**
@@ -492,32 +525,33 @@ class OC_App{
*/
public static function getAllApps(){
$apps=array();
- $dh=opendir(OC::$APPSROOT.'/apps');
- while($file=readdir($dh)){
- if($file[0]!='.' and is_file(OC::$APPSROOT.'/apps/'.$file.'/appinfo/app.php')){
- $apps[]=$file;
+ foreach(OC::$APPSROOTS as $apps_dir) {
+ $dh=opendir($apps_dir['path']);
+ while($file=readdir($dh)){
+ if($file[0]!='.' and is_file($apps_dir['path'].'/'.$file.'/appinfo/app.php')){
+ $apps[]=$file;
+ }
}
}
return $apps;
}
/**
- * check if any apps need updating and update those
+ * check if the app need updating and update when needed
*/
- public static function updateApps(){
+ public static function checkUpgrade($app) {
+ if (in_array($app, self::$checkedApps)) {
+ return;
+ }
+ self::$checkedApps[] = $app;
$versions = self::getAppVersions();
- //ensure files app is installed for upgrades
- if(!isset($versions['files'])){
- $versions['files']='0';
- }
- foreach( $versions as $app=>$installedVersion ){
- $currentVersion=OC_App::getAppVersion($app);
- if ($currentVersion) {
- if (version_compare($currentVersion, $installedVersion, '>')) {
- OC_Log::write($app, 'starting app upgrade from '.$installedVersion.' to '.$currentVersion,OC_Log::DEBUG);
- OC_App::updateApp($app);
- OC_Appconfig::setValue($app, 'installed_version', OC_App::getAppVersion($app));
- }
+ $currentVersion=OC_App::getAppVersion($app);
+ if ($currentVersion) {
+ $installedVersion = $versions[$app];
+ if (version_compare($currentVersion, $installedVersion, '>')) {
+ OC_Log::write($app, 'starting app upgrade from '.$installedVersion.' to '.$currentVersion,OC_Log::DEBUG);
+ OC_App::updateApp($app);
+ OC_Appconfig::setValue($app, 'installed_version', OC_App::getAppVersion($app));
}
}
}
@@ -544,9 +578,13 @@ class OC_App{
}
/**
- * get the installed version of all papps
+ * get the installed version of all apps
*/
public static function getAppVersions(){
+ static $versions;
+ if (isset($versions)) { // simple cache, needs to be fixed
+ return $versions; // when function is used besides in checkUpgrade
+ }
$versions=array();
$query = OC_DB::prepare( 'SELECT `appid`, `configvalue` FROM `*PREFIX*appconfig` WHERE `configkey` = \'installed_version\'' );
$result = $query->execute();
@@ -561,24 +599,24 @@ class OC_App{
* @param string appid
*/
public static function updateApp($appid){
- if(file_exists(OC::$APPSROOT.'/apps/'.$appid.'/appinfo/database.xml')){
- OC_DB::updateDbFromStructure(OC::$APPSROOT.'/apps/'.$appid.'/appinfo/database.xml');
+ if(file_exists(self::getAppPath($appid).'/appinfo/database.xml')){
+ OC_DB::updateDbFromStructure(self::getAppPath($appid).'/appinfo/database.xml');
}
if(!self::isEnabled($appid)){
return;
}
- if(file_exists(OC::$APPSROOT.'/apps/'.$appid.'/appinfo/update.php')){
+ if(file_exists(self::getAppPath($appid).'/appinfo/update.php')){
self::loadApp($appid);
- include OC::$APPSROOT.'/apps/'.$appid.'/appinfo/update.php';
+ include self::getAppPath($appid).'/appinfo/update.php';
}
//set remote/public handelers
$appData=self::getAppInfo($appid);
foreach($appData['remote'] as $name=>$path){
- OCP\CONFIG::setAppValue('core', 'remote_'.$name, '/apps/'.$appid.'/'.$path);
+ OCP\CONFIG::setAppValue('core', 'remote_'.$name, $appid.'/'.$path);
}
foreach($appData['public'] as $name=>$path){
- OCP\CONFIG::setAppValue('core', 'public_'.$name, '/apps/'.$appid.'/'.$path);
+ OCP\CONFIG::setAppValue('core', 'public_'.$name, $appid.'/'.$path);
}
self::setAppTypes($appid);
diff --git a/lib/appconfig.php b/lib/appconfig.php
index 20fbb5313b8..372cded9a5f 100644
--- a/lib/appconfig.php
+++ b/lib/appconfig.php
@@ -4,7 +4,7 @@
*
* @author Frank Karlitschek
* @author Jakob Sack
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @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
diff --git a/lib/archive.php b/lib/archive.php
index 113f92e9604..fabd7cc7a51 100644
--- a/lib/archive.php
+++ b/lib/archive.php
@@ -112,4 +112,25 @@ abstract class OC_Archive{
* @return resource
*/
abstract function getStream($path,$mode);
+ /**
+ * add a folder and all it's content
+ * @param string $path
+ * @param string source
+ * @return bool
+ */
+ function addRecursive($path,$source){
+ if($dh=opendir($source)){
+ $this->addFolder($path);
+ while($file=readdir($dh)){
+ if($file=='.' or $file=='..'){
+ continue;
+ }
+ if(is_dir($source.'/'.$file)){
+ $this->addRecursive($path.'/'.$file,$source.'/'.$file);
+ }else{
+ $this->addFile($path.'/'.$file,$source.'/'.$file);
+ }
+ }
+ }
+ }
}
diff --git a/lib/archive/tar.php b/lib/archive/tar.php
index 944a0ac4ba4..f6efd6d0ecc 100644
--- a/lib/archive/tar.php
+++ b/lib/archive/tar.php
@@ -56,14 +56,21 @@ class OC_Archive_TAR extends OC_Archive{
* @return bool
*/
function addFolder($path){
- $tmpBase=get_temp_dir().'/';
+ $tmpBase=OC_Helper::tmpFolder();
if(substr($path,-1,1)!='/'){
$path.='/';
}
if($this->fileExists($path)){
return false;
}
- mkdir($tmpBase.$path);
+ $parts=explode('/',$path);
+ $folder=$tmpBase;
+ foreach($parts as $part){
+ $folder.='/'.$part;
+ if(!is_dir($folder)){
+ mkdir($folder);
+ }
+ }
$result=$this->tar->addModify(array($tmpBase.$path),'',$tmpBase);
rmdir($tmpBase.$path);
$this->fileList=false;
@@ -79,7 +86,7 @@ class OC_Archive_TAR extends OC_Archive{
if($this->fileExists($path)){
$this->remove($path);
}
- if(file_exists($source)){
+ if($source and $source[0]=='/' and file_exists($source)){
$header=array();
$dummy='';
$this->tar->_openAppend();
diff --git a/lib/archive/zip.php b/lib/archive/zip.php
index 6631a649b16..c1a5c35738b 100644
--- a/lib/archive/zip.php
+++ b/lib/archive/zip.php
@@ -11,7 +11,6 @@ class OC_Archive_ZIP extends OC_Archive{
* @var ZipArchive zip
*/
private $zip=null;
- private $success=false;
private $path;
function __construct($source){
@@ -37,7 +36,7 @@ class OC_Archive_ZIP extends OC_Archive{
* @return bool
*/
function addFile($path,$source=''){
- if(file_exists($source)){
+ if($source and $source[0]=='/' and file_exists($source)){
$result=$this->zip->addFile($source,$path);
}else{
$result=$this->zip->addFromString($path,$source);
@@ -74,8 +73,7 @@ class OC_Archive_ZIP extends OC_Archive{
* @return int
*/
function mtime($path){
- $stat=$this->zip->statName($path);
- return $stat['mtime'];
+ return filemtime($this->path);
}
/**
* get the files in a folder
diff --git a/lib/backgroundjob/queuedtask.php b/lib/backgroundjob/queuedtask.php
new file mode 100644
index 00000000000..68ba97c1e39
--- /dev/null
+++ b/lib/backgroundjob/queuedtask.php
@@ -0,0 +1,104 @@
+<?php
+/**
+* ownCloud
+*
+* @author Jakob Sack
+* @copyright 2012 Jakob Sack owncloud@jakobsack.de
+*
+* 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 manages our queued tasks.
+ */
+class OC_BackgroundJob_QueuedTask{
+ /**
+ * @brief Gets one queued task
+ * @param $id ID of the task
+ * @return associative array
+ */
+ public static function find( $id ){
+ $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*queuedtasks WHERE id = ?' );
+ $result = $stmt->execute(array($id));
+ return $result->fetchRow();
+ }
+
+ /**
+ * @brief Gets all queued tasks
+ * @return array with associative arrays
+ */
+ public static function all(){
+ // Array for objects
+ $return = array();
+
+ // Get Data
+ $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*queuedtasks' );
+ $result = $stmt->execute(array());
+ while( $row = $result->fetchRow()){
+ $return[] = $row;
+ }
+
+ return $return;
+ }
+
+ /**
+ * @brief Gets all queued tasks of a specific app
+ * @param $app app name
+ * @return array with associative arrays
+ */
+ public static function whereAppIs( $app ){
+ // Array for objects
+ $return = array();
+
+ // Get Data
+ $stmt = OC_DB::prepare( 'SELECT * FROM *PREFIX*queuedtasks WHERE app = ?' );
+ $result = $stmt->execute(array($app));
+ while( $row = $result->fetchRow()){
+ $return[] = $row;
+ }
+
+ // Und weg damit
+ return $return;
+ }
+
+ /**
+ * @brief queues a task
+ * @param $app app name
+ * @param $klass class name
+ * @param $method method name
+ * @param $parameters all useful data as text
+ * @return id of task
+ */
+ public static function add( $app, $klass, $method, $parameters ){
+ $stmt = OC_DB::prepare( 'INSERT INTO *PREFIX*queuedtasks (app, klass, method, parameters) VALUES(?,?,?,?)' );
+ $result = $stmt->execute(array($app, $klass, $method, $parameters ));
+
+ return OC_DB::insertid();
+ }
+
+ /**
+ * @brief deletes a queued task
+ * @param $id id of task
+ * @return true/false
+ *
+ * Deletes a report
+ */
+ public static function delete( $id ){
+ $stmt = OC_DB::prepare( 'DELETE FROM *PREFIX*queuedtasks WHERE id = ?' );
+ $result = $stmt->execute(array($id));
+
+ return true;
+ }
+}
diff --git a/lib/backgroundjob/regulartask.php b/lib/backgroundjob/regulartask.php
new file mode 100644
index 00000000000..53bd4eb5e9b
--- /dev/null
+++ b/lib/backgroundjob/regulartask.php
@@ -0,0 +1,52 @@
+<?php
+/**
+* ownCloud
+*
+* @author Jakob Sack
+* @copyright 2012 Jakob Sack owncloud@jakobsack.de
+*
+* 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 manages the regular tasks.
+ */
+class OC_BackgroundJob_RegularTask{
+ static private $registered = array();
+
+ /**
+ * @brief creates a regular task
+ * @param $klass class name
+ * @param $method method name
+ * @return true
+ */
+ static public function register( $klass, $method ){
+ // Create the data structure
+ self::$registered["$klass-$method"] = array( $klass, $method );
+
+ // No chance for failure ;-)
+ return true;
+ }
+
+ /**
+ * @brief gets all regular tasks
+ * @return associative array
+ *
+ * key is string "$klass-$method", value is array( $klass, $method )
+ */
+ static public function all(){
+ return self::$registered;
+ }
+}
diff --git a/lib/backgroundjob/worker.php b/lib/backgroundjob/worker.php
new file mode 100644
index 00000000000..b4f0429b319
--- /dev/null
+++ b/lib/backgroundjob/worker.php
@@ -0,0 +1,118 @@
+<?php
+/**
+* ownCloud
+*
+* @author Jakob Sack
+* @copyright 2012 Jakob Sack owncloud@jakobsack.de
+*
+* 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 does the dirty work.
+ *
+ * TODO: locking in doAllSteps
+ */
+class OC_BackgroundJob_Worker{
+ /**
+ * @brief executes all tasks
+ * @return boolean
+ *
+ * This method executes all regular tasks and then all queued tasks.
+ * This method should be called by cli scripts that do not let the user
+ * wait.
+ */
+ public static function doAllSteps(){
+ // Do our regular work
+ $lasttask = OC_Appconfig::getValue( 'core', 'backgroundjobs_task', '' );
+
+ $regular_tasks = OC_BackgroundJob_RegularTask::all();
+ ksort( $regular_tasks );
+ foreach( $regular_tasks as $key => $value ){
+ if( strcmp( $key, $lasttask ) > 0 ){
+ // Set "restart here" config value
+ OC_Appconfig::setValue( 'core', 'backgroundjobs_task', $key );
+ call_user_func( $value );
+ }
+ }
+ // Reset "start here" config value
+ OC_Appconfig::setValue( 'core', 'backgroundjobs_task', '' );
+
+ // Do our queued tasks
+ $queued_tasks = OC_BackgroundJob_QueuedTask::all();
+ foreach( $queued_tasks as $task ){
+ OC_BackgroundJob_QueuedTask::delete( $task['id'] );
+ call_user_func( array( $task['klass'], $task['method'] ), $task['parameters'] );
+ }
+
+ return true;
+ }
+
+ /**
+ * @brief does a single task
+ * @return boolean
+ *
+ * This method executes one task. It saves the last state and continues
+ * with the next step. This method should be used by webcron and ajax
+ * services.
+ */
+ public static function doNextStep(){
+ $laststep = OC_Appconfig::getValue( 'core', 'backgroundjobs_step', 'regular_tasks' );
+
+ if( $laststep == 'regular_tasks' ){
+ // get last app
+ $lasttask = OC_Appconfig::getValue( 'core', 'backgroundjobs_task', '' );
+
+ // What's the next step?
+ $regular_tasks = OC_BackgroundJob_RegularTask::all();
+ ksort( $regular_tasks );
+ $done = false;
+
+ // search for next background job
+ foreach( $regular_tasks as $key => $value ){
+ if( strcmp( $key, $lasttask ) > 0 ){
+ OC_Appconfig::setValue( 'core', 'backgroundjobs_task', $key );
+ $done = true;
+ call_user_func( $value );
+ break;
+ }
+ }
+
+ if( $done == false ){
+ // Next time load queued tasks
+ OC_Appconfig::setValue( 'core', 'backgroundjobs_step', 'queued_tasks' );
+ }
+ }
+ else{
+ $tasks = OC_BackgroundJob_QueuedTask::all();
+ if( count( $tasks )){
+ $task = $tasks[0];
+ // delete job before we execute it. This prevents endless loops
+ // of failing jobs.
+ OC_BackgroundJob_QueuedTask::delete($task['id']);
+
+ // execute job
+ call_user_func( array( $task['klass'], $task['method'] ), $task['parameters'] );
+ }
+ else{
+ // Next time load queued tasks
+ OC_Appconfig::setValue( 'core', 'backgroundjobs_step', 'regular_tasks' );
+ OC_Appconfig::setValue( 'core', 'backgroundjobs_task', '' );
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/lib/base.php b/lib/base.php
index 67f8e7702fc..b4f3e667133 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -3,7 +3,7 @@
* ownCloud
*
* @author Frank Karlitschek
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @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
@@ -31,30 +31,18 @@ class OC{
*/
public static $CLASSPATH = array();
/**
- * $_SERVER['DOCUMENTROOT'] but without symlinks
- */
- public static $DOCUMENTROOT = '';
- /**
* 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)
*/
- public static $SUBURI = '';
+ private static $SUBURI = '';
/**
* the owncloud root path for http requests (e.g. owncloud/)
*/
public static $WEBROOT = '';
/**
- * the folder that stores that data files for the filesystem of the user (e.g. /srv/http/owncloud/data/myusername/files)
- */
- public static $CONFIG_DATADIRECTORY = '';
- /**
- * the folder that stores the data for the root filesystem (e.g. /srv/http/owncloud/data)
- */
- public static $CONFIG_DATADIRECTORY_ROOT = '';
- /**
* The installation path of the 3rdparty folder on the server (e.g. /srv/http/owncloud/3rdparty)
*/
public static $THIRDPARTYROOT = '';
@@ -63,13 +51,9 @@ class OC{
*/
public static $THIRDPARTYWEBROOT = '';
/**
- * The installation path of the apps folder on the server (e.g. /srv/http/owncloud)
- */
- public static $APPSROOT = '';
- /**
- * the root path of the apps folder for http requests (e.g. owncloud)
+ * The installation path array of the apps folder on the server (e.g. /srv/http/owncloud) 'path' and web path in 'url'
*/
- public static $APPSWEBROOT = '';
+ public static $APPSROOTS = array();
/*
* requested app
*/
@@ -79,11 +63,19 @@ class OC{
*/
public static $REQUESTEDFILE = '';
/**
+ * check if owncloud runs in cli mode
+ */
+ public static $CLI = false;
+ /**
* SPL autoload
*/
public static function autoload($className){
if(array_key_exists($className,OC::$CLASSPATH)){
- require_once OC::$CLASSPATH[$className];
+ /** @TODO: Remove this when necessary
+ Remove "apps/" from inclusion path for smooth migration to mutli app dir
+ */
+ $path = preg_replace('/apps\//','', OC::$CLASSPATH[$className]);
+ require_once $path;
}
elseif(strpos($className,'OC_')===0){
require_once strtolower(str_replace('_','/',substr($className,3)) . '.php');
@@ -91,6 +83,9 @@ class OC{
elseif(strpos($className,'OCP\\')===0){
require_once 'public/'.strtolower(str_replace('\\','/',substr($className,3)) . '.php');
}
+ elseif(strpos($className,'OCA\\')===0){
+ require_once 'apps/'.strtolower(str_replace('\\','/',substr($className,3)) . '.php');
+ }
elseif(strpos($className,'Sabre_')===0) {
require_once str_replace('_','/',$className) . '.php';
}
@@ -99,34 +94,8 @@ class OC{
}
}
- /**
- * autodetects the formfactor of the used device
- * default -> the normal desktop browser interface
- * mobile -> interface for smartphones
- * tablet -> interface for tablets
- * standalone -> the default interface but without header, footer and sidebar. just the application. useful to ue just a specific app on the desktop in a standalone window.
- */
- public static function detectFormfactor(){
- // please add more useragent strings for other devices
- if(isset($_SERVER['HTTP_USER_AGENT'])){
- if(stripos($_SERVER['HTTP_USER_AGENT'],'ipad')>0) {
- $mode='tablet';
- }elseif(stripos($_SERVER['HTTP_USER_AGENT'],'iphone')>0){
- $mode='mobile';
- }elseif((stripos($_SERVER['HTTP_USER_AGENT'],'N9')>0) and (stripos($_SERVER['HTTP_USER_AGENT'],'nokia')>0)){
- $mode='mobile';
- }else{
- $mode='default';
- }
- }else{
- $mode='default';
- }
- return($mode);
- }
-
public static function initPaths(){
- // calculate the documentroot
- OC::$DOCUMENTROOT=realpath($_SERVER['DOCUMENT_ROOT']);
+ // calculate the root directories
OC::$SERVERROOT=str_replace("\\",'/',substr(__FILE__,0,-13));
OC::$SUBURI= str_replace("\\","/",substr(realpath($_SERVER["SCRIPT_FILENAME"]),strlen(OC::$SERVERROOT)));
$scriptName=$_SERVER["SCRIPT_NAME"];
@@ -140,10 +109,8 @@ class OC{
OC::$SUBURI=OC::$SUBURI.'index.php';
}
}
- OC::$WEBROOT=substr($scriptName,0,strlen($scriptName)-strlen(OC::$SUBURI));
- // try a new way to detect the WEBROOT which is simpler and also works with the app directory outside the owncloud folder. let´s see if this works for everybody
-// OC::$WEBROOT=substr(OC::$SERVERROOT,strlen(OC::$DOCUMENTROOT));
+ OC::$WEBROOT=substr($scriptName,0,strlen($scriptName)-strlen(OC::$SUBURI));
if(OC::$WEBROOT!='' and OC::$WEBROOT[0]!=='/'){
OC::$WEBROOT='/'.OC::$WEBROOT;
@@ -169,29 +136,36 @@ class OC{
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
- if(OC_Config::getValue('appsroot', '')<>''){
- OC::$APPSROOT=OC_Config::getValue('appsroot', '');
- OC::$APPSWEBROOT=OC_Config::getValue('appsurl', '');
+ $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::$APPSROOT=OC::$SERVERROOT;
- OC::$APPSWEBROOT=OC::$WEBROOT;
+ OC::$APPSROOTS[] = array('path'=> OC::$SERVERROOT.'/apps', 'url' => '/apps', 'writable' => true);
}elseif(file_exists(OC::$SERVERROOT.'/../apps')){
- OC::$APPSROOT=rtrim(dirname(OC::$SERVERROOT), '/');
- OC::$APPSWEBROOT=rtrim(dirname(OC::$WEBROOT), '/');
- }else{
+ 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.
- OC::$APPSROOT.PATH_SEPARATOR.
- OC::$APPSROOT.'/apps'.PATH_SEPARATOR.
+ implode($paths,PATH_SEPARATOR).PATH_SEPARATOR.
get_include_path().PATH_SEPARATOR.
OC::$SERVERROOT
);
@@ -200,8 +174,10 @@ class OC{
public static function checkInstalled() {
// Redirect to installer if not installed
if (!OC_Config::getValue('installed', false) && OC::$SUBURI != '/index.php') {
- $url = 'http://'.$_SERVER['SERVER_NAME'].OC::$WEBROOT.'/index.php';
- header("Location: $url");
+ if(!OC::$CLI){
+ $url = 'http://'.$_SERVER['SERVER_NAME'].OC::$WEBROOT.'/index.php';
+ header("Location: $url");
+ }
exit();
}
}
@@ -210,8 +186,8 @@ class OC{
// redirect to https site if configured
if( OC_Config::getValue( "forcessl", false )){
ini_set("session.cookie_secure", "on");
- if(OC_Helper::serverProtocol()<>'https') {
- $url = "https://". OC_Helper::serverHost() . $_SERVER['REQUEST_URI'];
+ if(OC_Request::serverProtocol()<>'https' and !OC::$CLI) {
+ $url = "https://". OC_Request::serverHost() . $_SERVER['REQUEST_URI'];
header("Location: $url");
exit();
}
@@ -238,22 +214,13 @@ class OC{
OC_Config::setValue('version',implode('.',OC_Util::getVersion()));
OC_App::checkAppsRequirements();
+ // load all apps to also upgrade enabled apps
+ OC_App::loadApps();
}
-
- OC_App::updateApps();
}
}
public static function initTemplateEngine() {
- // if the formfactor is not yet autodetected do the autodetection now. For possible forfactors check the detectFormfactor documentation
- if(!isset($_SESSION['formfactor'])){
- $_SESSION['formfactor']=OC::detectFormfactor();
- }
- // allow manual override via GET parameter
- if(isset($_GET['formfactor'])){
- $_SESSION['formfactor']=$_GET['formfactor'];
- }
-
// Add the stuff we need always
OC_Util::addScript( "jquery-1.7.2.min" );
OC_Util::addScript( "jquery-ui-1.8.16.custom.min" );
@@ -266,6 +233,13 @@ class OC{
OC_Util::addScript( "config" );
//OC_Util::addScript( "multiselect" );
OC_Util::addScript('search','result');
+
+ if( OC_Config::getValue( 'installed', false )){
+ if( OC_Appconfig::getValue( 'core', 'backgroundjobs_mode', 'ajax' ) == 'ajax' ){
+ OC_Util::addScript( 'backgroundjobs' );
+ }
+ }
+
OC_Util::addStyle( "styles" );
OC_Util::addStyle( "multiselect" );
OC_Util::addStyle( "jquery-ui-1.8.16.custom" );
@@ -276,64 +250,32 @@ class OC{
ini_set('session.cookie_httponly','1;');
session_start();
}
-
- public static function loadapp(){
- if(file_exists(OC::$APPSROOT . '/apps/' . OC::$REQUESTEDAPP . '/index.php')){
- require_once(OC::$APPSROOT . '/apps/' . OC::$REQUESTEDAPP . '/index.php');
- }else{
- trigger_error('The requested App was not found.', E_USER_ERROR);//load default app instead?
- }
- }
-
- public static function loadfile(){
- if(file_exists(OC::$APPSROOT . '/apps/' . OC::$REQUESTEDAPP . '/' . OC::$REQUESTEDFILE)){
- if(substr(OC::$REQUESTEDFILE, -3) == 'css'){
- $appswebroot = (string) OC::$APPSWEBROOT;
- $webroot = (string) OC::$WEBROOT;
- $filepath = OC::$APPSROOT . '/apps/' . OC::$REQUESTEDAPP . '/' . OC::$REQUESTEDFILE;
- header('Content-Type: text/css');
- OC_Response::enableCaching();
- OC_Response::setLastModifiedHeader(filemtime($filepath));
- $cssfile = file_get_contents($filepath);
- $cssfile = str_replace('%appswebroot%', $appswebroot, $cssfile);
- $cssfile = str_replace('%webroot%', $webroot, $cssfile);
- OC_Response::setETagHeader(md5($cssfile));
- header('Content-Length: '.strlen($cssfile));
- echo $cssfile;
- exit;
- }elseif(substr(OC::$REQUESTEDFILE, -3) == 'php'){
- require_once(OC::$APPSROOT . '/apps/' . OC::$REQUESTEDAPP . '/' . OC::$REQUESTEDFILE);
- }
- }else{
- header('HTTP/1.0 404 Not Found');
- exit;
- }
- }
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(function_exists('set_magic_quotes_runtime')) {
- @set_magic_quotes_runtime(false);
- }
+ // try to switch magic quotes off.
+ if(function_exists('set_magic_quotes_runtime')) {
+ @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);
@@ -363,7 +305,7 @@ class OC{
$_SERVER['PHP_AUTH_USER'] = strip_tags($name);
$_SERVER['PHP_AUTH_PW'] = strip_tags($password);
}
-
+
self::initPaths();
// register the stream wrappers
@@ -374,20 +316,6 @@ class OC{
self::checkInstalled();
self::checkSSL();
-
- // CSRF protection
- if(isset($_SERVER['HTTP_REFERER'])) $referer=$_SERVER['HTTP_REFERER']; else $referer='';
- $refererhost=parse_url($referer);
- if(isset($refererhost['host'])) $refererhost=$refererhost['host']; else $refererhost='';
- $server=OC_Helper::serverHost();
- $serverhost=explode(':',$server);
- $serverhost=$serverhost['0'];
- if(($_SERVER['REQUEST_METHOD']=='POST') and ($refererhost<>$serverhost)) {
- $url = OC_Helper::serverProtocol().'://'.$server.OC::$WEBROOT.'/index.php';
- header("Location: $url");
- exit();
- }
-
self::initSession();
self::initTemplateEngine();
self::checkUpgrade();
@@ -398,28 +326,14 @@ class OC{
exit;
}
- // TODO: we should get rid of this one, too
- // WARNING: to make everything even more confusing,
- // DATADIRECTORY is a var that changes and DATADIRECTORY_ROOT
- // stays the same, but is set by "datadirectory".
- // Any questions?
- OC::$CONFIG_DATADIRECTORY = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" );
-
// User and Groups
if( !OC_Config::getValue( "installed", false )){
$_SESSION['user_id'] = '';
}
-
- OC_User::useBackend( OC_Config::getValue( "userbackend", "database" ));
+ OC_User::useBackend(new OC_User_Database());
OC_Group::useBackend(new OC_Group_Database());
- // Set up file system unless forbidden
- global $RUNTIME_NOSETUPFS;
- if(!$RUNTIME_NOSETUPFS ){
- OC_Util::setupFS();
- }
-
// Load Apps
// This includes plugins for users and filesystems as well
global $RUNTIME_NOAPPS;
@@ -431,19 +345,19 @@ class OC{
OC_App::loadApps();
}
}
-
+
// Check for blacklisted files
OC_Hook::connect('OC_Filesystem','write','OC_Filesystem','isBlacklisted');
OC_Hook::connect('OC_Filesystem', 'rename', 'OC_Filesystem', 'isBlacklisted');
//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(self::$REQUESTEDAPP, strpos(self::$REQUESTEDAPP, '?') + 1);
+ $param = substr($_GET['app'], strpos($_GET['app'], '?') + 1);
parse_str($param, $get);
$_GET = array_merge($_GET, $get);
self::$REQUESTEDAPP = $app;
@@ -459,8 +373,8 @@ class OC{
$_GET['getfile'] = $file;
}
if(!is_null(self::$REQUESTEDFILE)){
- $subdir = OC::$APPSROOT . '/apps/' . self::$REQUESTEDAPP . '/' . self::$REQUESTEDFILE;
- $parent = OC::$APPSROOT . '/apps/' . self::$REQUESTEDAPP;
+ $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');
@@ -468,12 +382,168 @@ class OC{
}
}
}
+
+ /**
+ * @brief Handle the request
+ */
+ public static function handleRequest() {
+ if (!OC_Config::getValue('installed', false)) {
+ // Check for autosetup:
+ $autosetup_file = OC::$SERVERROOT."/config/autoconfig.php";
+ if( file_exists( $autosetup_file )){
+ OC_Log::write('core','Autoconfig file found, setting up owncloud...',OC_Log::INFO);
+ include( $autosetup_file );
+ $_POST['install'] = 'true';
+ $_POST = array_merge ($_POST, $AUTOCONFIG);
+ unlink($autosetup_file);
+ }
+ OC_Util::addScript('setup');
+ require_once('setup.php');
+ exit();
+ }
+ // Handle WebDAV
+ if($_SERVER['REQUEST_METHOD']=='PROPFIND'){
+ header('location: '.OC_Helper::linkToRemote('webdav'));
+ return;
+ }
+ // Handle app css files
+ if(substr(OC::$REQUESTEDFILE,-3) == 'css') {
+ self::loadCSSFile();
+ return;
+ }
+ // Someone is logged in :
+ if(OC_User::isLoggedIn()) {
+ OC_App::loadApps();
+ if(isset($_GET["logout"]) and ($_GET["logout"])) {
+ OC_User::logout();
+ header("Location: ".OC::$WEBROOT.'/');
+ }else{
+ $app = OC::$REQUESTEDAPP;
+ $file = OC::$REQUESTEDFILE;
+ if(is_null($file)) {
+ $file = 'index.php';
+ }
+ $file_ext = substr($file, -3);
+ if ($file_ext != 'php'
+ || !self::loadAppScriptFile($app, $file)) {
+ header('HTTP/1.0 404 Not Found');
+ }
+ }
+ return;
+ }
+ // Not handled and not logged in
+ self::handleLogin();
+ }
+
+ protected static function loadAppScriptFile($app, $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;
+ }
+
+ protected static function loadCSSFile() {
+ $app = OC::$REQUESTEDAPP;
+ $file = OC::$REQUESTEDFILE;
+ $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 = false;
+ // remember was checked after last login
+ if (OC::tryRememberLogin()) {
+ // nothing more to do
+
+ // Someone wants to log in :
+ } elseif (OC::tryFormLogin()) {
+ $error = true;
+
+ // The user is already authenticated using Apaches AuthType Basic... very usable in combination with LDAP
+ } elseif (OC::tryBasicAuthLogin()) {
+ $error = true;
+ }
+ OC_Util::displayLoginPage($error);
+ }
+
+ 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']) &&
+ OC_Preferences::getValue($_COOKIE['oc_username'], "login", "token") === $_COOKIE['oc_token']) {
+ OC_User::setUserId($_COOKIE['oc_username']);
+ OC_Util::redirectToDefaultPage();
+ }
+ else {
+ OC_User::unsetMagicInCookie();
+ }
+ return true;
+ }
+
+ protected static function tryFormLogin() {
+ if(!isset($_POST["user"])
+ || !isset($_POST['password'])
+ || !isset($_SESSION['sectoken'])
+ || !isset($_POST['sectoken'])
+ || ($_SESSION['sectoken']!=$_POST['sectoken']) ) {
+ return false;
+ }
+ OC_App::loadApps();
+ if(OC_User::login($_POST["user"], $_POST["password"])) {
+ if(!empty($_POST["remember_login"])){
+ if(defined("DEBUG") && DEBUG) {
+ OC_Log::write('core','Setting remember login to cookie', OC_Log::DEBUG);
+ }
+ $token = md5($_POST["user"].time().$_POST['password']);
+ OC_Preferences::setValue($_POST['user'], 'login', 'token', $token);
+ OC_User::setMagicInCookie($_POST["user"], $token);
+ }
+ else {
+ OC_User::unsetMagicInCookie();
+ }
+ OC_Util::redirectToDefaultPage();
+ }
+ 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_NOSETUPFS )){
- $RUNTIME_NOSETUPFS = false;
-}
if( !isset( $RUNTIME_NOAPPS )){
$RUNTIME_NOAPPS = false;
}
@@ -490,7 +560,7 @@ if(!function_exists('get_temp_dir')) {
return dirname($temp);
}
if( $temp=sys_get_temp_dir()) return $temp;
-
+
return null;
}
}
diff --git a/lib/cache.php b/lib/cache.php
new file mode 100644
index 00000000000..55f189a5da8
--- /dev/null
+++ b/lib/cache.php
@@ -0,0 +1,147 @@
+<?php
+/**
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class OC_Cache {
+ /**
+ * @var OC_Cache $user_cache
+ */
+ static protected $user_cache;
+ /**
+ * @var OC_Cache $global_cache
+ */
+ static protected $global_cache;
+ /**
+ * @var OC_Cache $global_cache_fast
+ */
+ static protected $global_cache_fast;
+ /**
+ * @var OC_Cache $user_cache_fast
+ */
+ static protected $user_cache_fast;
+ static protected $isFast=null;
+
+ /**
+ * get the global cache
+ * @return OC_Cache
+ */
+ static public function getGlobalCache($fast=false) {
+ if (!self::$global_cache) {
+ self::$global_cache_fast = null;
+ if (!self::$global_cache_fast && function_exists('xcache_set')) {
+ self::$global_cache_fast = new OC_Cache_XCache(true);
+ }
+ if (!self::$global_cache_fast && function_exists('apc_store')) {
+ self::$global_cache_fast = new OC_Cache_APC(true);
+ }
+
+ self::$global_cache = new OC_Cache_FileGlobal();
+ if (self::$global_cache_fast) {
+ self::$global_cache = new OC_Cache_Broker(self::$global_cache_fast, self::$global_cache);
+ }
+ }
+ if($fast){
+ if(self::$global_cache_fast){
+ return self::$global_cache_fast;
+ }else{
+ return false;
+ }
+ }
+ return self::$global_cache;
+ }
+
+ /**
+ * get the user cache
+ * @return OC_Cache
+ */
+ static public function getUserCache($fast=false) {
+ if (!self::$user_cache) {
+ self::$user_cache_fast = null;
+ if (!self::$user_cache_fast && function_exists('xcache_set')) {
+ self::$user_cache_fast = new OC_Cache_XCache();
+ }
+ if (!self::$user_cache_fast && function_exists('apc_store')) {
+ self::$user_cache_fast = new OC_Cache_APC();
+ }
+
+ self::$user_cache = new OC_Cache_File();
+ if (self::$user_cache_fast) {
+ self::$user_cache = new OC_Cache_Broker(self::$user_cache_fast, self::$user_cache);
+ }
+ }
+
+ if($fast){
+ if(self::$user_cache_fast){
+ return self::$user_cache_fast;
+ }else{
+ return false;
+ }
+ }
+ return self::$user_cache;
+ }
+
+ /**
+ * get a value from the user cache
+ * @return mixed
+ */
+ static public function get($key) {
+ $user_cache = self::getUserCache();
+ return $user_cache->get($key);
+ }
+
+ /**
+ * set a value in the user cache
+ * @return bool
+ */
+ static public function set($key, $value, $ttl=0) {
+ if (empty($key)) {
+ return false;
+ }
+ $user_cache = self::getUserCache();
+ return $user_cache->set($key, $value, $ttl);
+ }
+
+ /**
+ * check if a value is set in the user cache
+ * @return bool
+ */
+ static public function hasKey($key) {
+ $user_cache = self::getUserCache();
+ return $user_cache->hasKey($key);
+ }
+
+ /**
+ * remove an item from the user cache
+ * @return bool
+ */
+ static public function remove($key) {
+ $user_cache = self::getUserCache();
+ return $user_cache->remove($key);
+ }
+
+ /**
+ * clear the user cache of all entries starting with a prefix
+ * @param string prefix (optional)
+ * @return bool
+ */
+ static public function clear($prefix='') {
+ $user_cache = self::getUserCache();
+ return $user_cache->clear($prefix);
+ }
+
+ /**
+ * check if a fast memory based cache is available
+ * @return true
+ */
+ static public function isFast() {
+ if(is_null(self::$isFast)){
+ self::$isFast=function_exists('xcache_set') || function_exists('apc_store');
+ }
+ return self::$isFast;
+ }
+
+}
diff --git a/lib/cache/apc.php b/lib/cache/apc.php
new file mode 100644
index 00000000000..c192fe2f196
--- /dev/null
+++ b/lib/cache/apc.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class OC_Cache_APC {
+ protected $prefix;
+
+ public function __construct($global = false) {
+ $this->prefix = OC_Util::getInstanceId().'/';
+ if (!$global) {
+ $this->prefix .= OC_User::getUser().'/';
+ }
+ }
+
+ /**
+ * entries in APC gets namespaced to prevent collisions between owncloud instances and users
+ */
+ protected function getNameSpace() {
+ return $this->prefix;
+ }
+
+ public function get($key) {
+ $result = apc_fetch($this->getNamespace().$key, $success);
+ if (!$success) {
+ return null;
+ }
+ return $result;
+ }
+
+ public function set($key, $value, $ttl=0) {
+ return apc_store($this->getNamespace().$key, $value, $ttl);
+ }
+
+ public function hasKey($key) {
+ return apc_exists($this->getNamespace().$key);
+ }
+
+ public function remove($key) {
+ return apc_delete($this->getNamespace().$key);
+ }
+
+ public function clear($prefix=''){
+ $ns = $this->getNamespace().$prefix;
+ $cache = apc_cache_info('user');
+ foreach($cache['cache_list'] as $entry) {
+ if (strpos($entry['info'], $ns) === 0) {
+ apc_delete($entry['info']);
+ }
+ }
+ return true;
+ }
+}
+if(!function_exists('apc_exists')) {
+ function apc_exists($keys)
+ {
+ $result;
+ apc_fetch($keys, $result);
+ return $result;
+ }
+}
diff --git a/lib/cache/broker.php b/lib/cache/broker.php
new file mode 100644
index 00000000000..c2aceabaf53
--- /dev/null
+++ b/lib/cache/broker.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class OC_Cache_Broker {
+ protected $fast_cache;
+ protected $slow_cache;
+
+ public function __construct($fast_cache, $slow_cache) {
+ $this->fast_cache = $fast_cache;
+ $this->slow_cache = $slow_cache;
+ }
+
+ public function get($key) {
+ if ($r = $this->fast_cache->get($key)) {
+ return $r;
+ }
+ return $this->slow_cache->get($key);
+ }
+
+ public function set($key, $value, $ttl=0) {
+ if (!$this->fast_cache->set($key, $value, $ttl)) {
+ if ($this->fast_cache->hasKey($key)) {
+ $this->fast_cache->remove($key);
+ }
+ return $this->slow_cache->set($key, $value, $ttl);
+ }
+ return true;
+ }
+
+ public function hasKey($key) {
+ if ($this->fast_cache->hasKey($key)) {
+ return true;
+ }
+ return $this->slow_cache->hasKey($key);
+ }
+
+ public function remove($key) {
+ if ($this->fast_cache->remove($key)) {
+ return true;
+ }
+ return $this->slow_cache->remove($key);
+ }
+
+ public function clear($prefix=''){
+ $this->fast_cache->clear($prefix);
+ $this->slow_cache->clear($prefix);
+ }
+}
diff --git a/lib/cache/file.php b/lib/cache/file.php
new file mode 100644
index 00000000000..562c3d17167
--- /dev/null
+++ b/lib/cache/file.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+
+class OC_Cache_File{
+ protected function getStorage() {
+ if(OC_User::isLoggedIn()){
+ $subdir = 'cache';
+ $view = new OC_FilesystemView('/'.OC_User::getUser());
+ if(!$view->file_exists($subdir)) {
+ $view->mkdir($subdir);
+ }
+ return new OC_FilesystemView('/'.OC_User::getUser().'/'.$subdir);
+ }else{
+ OC_Log::write('core','Can\'t get cache storage, user not logged in', OC_Log::ERROR);
+ return false;
+ }
+ }
+
+ public function get($key) {
+ if ($this->hasKey($key)) {
+ $storage = $this->getStorage();
+ return $storage->file_get_contents($key);
+ }
+ return null;
+ }
+
+ public function set($key, $value, $ttl=0) {
+ $storage = $this->getStorage();
+ if ($storage and $storage->file_put_contents($key, $value)) {
+ if ($ttl === 0) {
+ $ttl = 86400; // 60*60*24
+ }
+ return $storage->touch($key, time() + $ttl);
+ }
+ return false;
+ }
+
+ public function hasKey($key) {
+ $storage = $this->getStorage();
+ if ($storage && $storage->is_file($key)) {
+ $mtime = $storage->filemtime($key);
+ if ($mtime < time()) {
+ $storage->unlink($key);
+ return false;
+ }
+ return true;
+ }
+ return false;
+ }
+
+ public function remove($key) {
+ $storage = $this->getStorage();
+ if(!$storage){
+ return false;
+ }
+ return $storage->unlink($key);
+ }
+
+ public function clear($prefix=''){
+ $storage = $this->getStorage();
+ if($storage and $storage->is_dir('/')){
+ $dh=$storage->opendir('/');
+ while($file=readdir($dh)){
+ if($file!='.' and $file!='..' and ($prefix==='' || strpos($file, $prefix) === 0)){
+ $storage->unlink('/'.$file);
+ }
+ }
+ }
+ return true;
+ }
+}
diff --git a/lib/cache/fileglobal.php b/lib/cache/fileglobal.php
new file mode 100644
index 00000000000..1c2c9bdc82d
--- /dev/null
+++ b/lib/cache/fileglobal.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+
+class OC_Cache_FileGlobal{
+ protected function getCacheDir() {
+ $cache_dir = get_temp_dir().'/owncloud-'.OC_Util::getInstanceId().'/';
+ if (!is_dir($cache_dir)) {
+ mkdir($cache_dir);
+ }
+ return $cache_dir;
+ }
+
+ protected function fixKey($key) {
+ return str_replace('/', '_', $key);
+ }
+
+ public function get($key) {
+ $key = $this->fixKey($key);
+ if ($this->hasKey($key)) {
+ $cache_dir = $this->getCacheDir();
+ return file_get_contents($cache_dir.$key);
+ }
+ return null;
+ }
+
+ public function set($key, $value, $ttl=0) {
+ $key = $this->fixKey($key);
+ $cache_dir = $this->getCacheDir();
+ if ($cache_dir and file_put_contents($cache_dir.$key, $value)) {
+ if ($ttl === 0) {
+ $ttl = 86400; // 60*60*24
+ }
+ return touch($cache_dir.$key, time() + $ttl);
+ }
+ return false;
+ }
+
+ public function hasKey($key) {
+ $key = $this->fixKey($key);
+ $cache_dir = $this->getCacheDir();
+ if ($cache_dir && is_file($cache_dir.$key)) {
+ $mtime = filemtime($cache_dir.$key);
+ if ($mtime < time()) {
+ unlink($cache_dir.$key);
+ return false;
+ }
+ return true;
+ }
+ return false;
+ }
+
+ public function remove($key) {
+ $cache_dir = $this->getCacheDir();
+ if(!$cache_dir){
+ return false;
+ }
+ $key = $this->fixKey($key);
+ return unlink($cache_dir.$key);
+ }
+
+ public function clear(){
+ $cache_dir = $this->getCacheDir();
+ if($cache_dir and is_dir($cache_dir)){
+ $dh=opendir($cache_dir);
+ while($file=readdir($dh)){
+ if($file!='.' and $file!='..'){
+ unlink($cache_dir.$file);
+ }
+ }
+ }
+ }
+}
diff --git a/lib/cache/xcache.php b/lib/cache/xcache.php
new file mode 100644
index 00000000000..951f9b47545
--- /dev/null
+++ b/lib/cache/xcache.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class OC_Cache_XCache {
+ protected $prefix;
+
+ public function __construct($global = false) {
+ $this->prefix = OC_Util::getInstanceId().'/';
+ if (!$global) {
+ $this->prefix .= OC_User::getUser().'/';
+ }
+ }
+
+ /**
+ * entries in XCache gets namespaced to prevent collisions between owncloud instances and users
+ */
+ protected function getNameSpace() {
+ return $this->prefix;
+ }
+
+ public function get($key) {
+ return xcache_get($this->getNamespace().$key);
+ }
+
+ public function set($key, $value, $ttl=0) {
+ if($ttl>0){
+ return xcache_set($this->getNamespace().$key,$value,$ttl);
+ }else{
+ return xcache_set($this->getNamespace().$key,$value);
+ }
+ }
+
+ public function hasKey($key) {
+ return xcache_isset($this->getNamespace().$key);
+ }
+
+ public function remove($key) {
+ return xcache_unset($this->getNamespace().$key);
+ }
+
+ public function clear($prefix=''){
+ xcache_unset_by_prefix($this->getNamespace().$prefix);
+ return true;
+ }
+}
diff --git a/lib/config.php b/lib/config.php
index ad1cd18fa15..266d559126c 100644
--- a/lib/config.php
+++ b/lib/config.php
@@ -4,7 +4,7 @@
*
* @author Frank Karlitschek
* @author Jakob Sack
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @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
@@ -152,32 +152,25 @@ class OC_Config{
*
* Saves the config to the config file.
*
- * Known flaws: Strings are not escaped properly
*/
public static function writeData(){
// Create a php file ...
- $content = "<?php\n\$CONFIG = array(\n";
-
- foreach( self::$cache as $key => $value ){
- if( is_bool( $value )){
- $value = $value ? 'true' : 'false';
- $content .= "\"$key\" => $value,\n";
- }
- else{
- $value = str_replace( "'", "\\'", $value );
- $content .= "\"$key\" => '$value',\n";
- }
- }
- $content .= ");\n?>\n";
+ $content = "<?php\n\$CONFIG = ";
+ $content .= var_export(self::$cache, true);
+ $content .= ";\n";
+ $filename = OC::$SERVERROOT."/config/config.php";
// Write the file
- $result=@file_put_contents( OC::$SERVERROOT."/config/config.php", $content );
+ $result=@file_put_contents( $filename, $content );
if(!$result) {
$tmpl = new OC_Template( '', 'error', 'guest' );
$tmpl->assign('errors',array(1=>array('error'=>"Can't write into config directory 'config'",'hint'=>"You can usually fix this by giving the webserver user write access to the config directory in owncloud")));
$tmpl->printPage();
exit;
}
+ // Prevent others not to read the config
+ @chmod($filename, 0640);
+
return true;
}
}
diff --git a/lib/connector/sabre/client.php b/lib/connector/sabre/client.php
new file mode 100644
index 00000000000..7e8f21264f9
--- /dev/null
+++ b/lib/connector/sabre/client.php
@@ -0,0 +1,173 @@
+<?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/>.
+ *
+ */
+
+class OC_Connector_Sabre_Client extends Sabre_DAV_Client {
+
+ protected $trustedCertificates;
+
+ /**
+ * Add trusted root certificates to the webdav client.
+ *
+ * The parameter certificates should be a absulute path to a file which contains
+ * all trusted certificates
+ *
+ * @param string $certificates
+ */
+ public function addTrustedCertificates($certificates) {
+ $this->trustedCertificates = $certificates;
+ }
+
+ /**
+ * Copied from SabreDAV with some modification to use user defined curlSettings
+ * Performs an actual HTTP request, and returns the result.
+ *
+ * If the specified url is relative, it will be expanded based on the base
+ * url.
+ *
+ * The returned array contains 3 keys:
+ * * body - the response body
+ * * httpCode - a HTTP code (200, 404, etc)
+ * * headers - a list of response http headers. The header names have
+ * been lowercased.
+ *
+ * @param string $method
+ * @param string $url
+ * @param string $body
+ * @param array $headers
+ * @return array
+ */
+ public function request($method, $url = '', $body = null, $headers = array()) {
+
+ $url = $this->getAbsoluteUrl($url);
+
+ $curlSettings = array(
+ CURLOPT_RETURNTRANSFER => true,
+ // Return headers as part of the response
+ CURLOPT_HEADER => true,
+ CURLOPT_POSTFIELDS => $body,
+ // Automatically follow redirects
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_MAXREDIRS => 5,
+ );
+
+ if($this->trustedCertificates) {
+ $curlSettings[CURLOPT_CAINFO] = $this->trustedCertificates;
+ }
+
+ switch ($method) {
+ case 'HEAD' :
+
+ // do not read body with HEAD requests (this is neccessary because cURL does not ignore the body with HEAD
+ // requests when the Content-Length header is given - which in turn is perfectly valid according to HTTP
+ // specs...) cURL does unfortunately return an error in this case ("transfer closed transfer closed with
+ // ... bytes remaining to read") this can be circumvented by explicitly telling cURL to ignore the
+ // response body
+ $curlSettings[CURLOPT_NOBODY] = true;
+ $curlSettings[CURLOPT_CUSTOMREQUEST] = 'HEAD';
+ break;
+
+ default:
+ $curlSettings[CURLOPT_CUSTOMREQUEST] = $method;
+ break;
+
+ }
+
+ // Adding HTTP headers
+ $nHeaders = array();
+ foreach($headers as $key=>$value) {
+
+ $nHeaders[] = $key . ': ' . $value;
+
+ }
+ $curlSettings[CURLOPT_HTTPHEADER] = $nHeaders;
+
+ if ($this->proxy) {
+ $curlSettings[CURLOPT_PROXY] = $this->proxy;
+ }
+
+ if ($this->userName && $this->authType) {
+ $curlType = 0;
+ if ($this->authType & self::AUTH_BASIC) {
+ $curlType |= CURLAUTH_BASIC;
+ }
+ if ($this->authType & self::AUTH_DIGEST) {
+ $curlType |= CURLAUTH_DIGEST;
+ }
+ $curlSettings[CURLOPT_HTTPAUTH] = $curlType;
+ $curlSettings[CURLOPT_USERPWD] = $this->userName . ':' . $this->password;
+ }
+
+ list(
+ $response,
+ $curlInfo,
+ $curlErrNo,
+ $curlError
+ ) = $this->curlRequest($url, $curlSettings);
+
+ $headerBlob = substr($response, 0, $curlInfo['header_size']);
+ $response = substr($response, $curlInfo['header_size']);
+
+ // In the case of 100 Continue, or redirects we'll have multiple lists
+ // of headers for each separate HTTP response. We can easily split this
+ // because they are separated by \r\n\r\n
+ $headerBlob = explode("\r\n\r\n", trim($headerBlob, "\r\n"));
+
+ // We only care about the last set of headers
+ $headerBlob = $headerBlob[count($headerBlob)-1];
+
+ // Splitting headers
+ $headerBlob = explode("\r\n", $headerBlob);
+
+ $headers = array();
+ foreach($headerBlob as $header) {
+ $parts = explode(':', $header, 2);
+ if (count($parts)==2) {
+ $headers[strtolower(trim($parts[0]))] = trim($parts[1]);
+ }
+ }
+
+ $response = array(
+ 'body' => $response,
+ 'statusCode' => $curlInfo['http_code'],
+ 'headers' => $headers
+ );
+
+ if ($curlErrNo) {
+ throw new Sabre_DAV_Exception('[CURL] Error while making request: ' . $curlError . ' (error code: ' . $curlErrNo . ')');
+ }
+
+ if ($response['statusCode']>=400) {
+ switch ($response['statusCode']) {
+ case 404:
+ throw new Sabre_DAV_Exception_NotFound('Resource ' . $url . ' not found.');
+ break;
+
+ default:
+ throw new Sabre_DAV_Exception('HTTP error response. (errorcode ' . $response['statusCode'] . ')');
+ }
+ }
+
+ return $response;
+
+ }
+} \ No newline at end of file
diff --git a/lib/connector/sabre/directory.php b/lib/connector/sabre/directory.php
index e74d832cb00..09c65f19b80 100644
--- a/lib/connector/sabre/directory.php
+++ b/lib/connector/sabre/directory.php
@@ -26,17 +26,45 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
/**
* Creates a new file in the directory
*
- * data is a readable stream resource
+ * Data will either be supplied as a stream resource, or in certain cases
+ * as a string. Keep in mind that you may have to support either.
+ *
+ * After succesful creation of the file, you may choose to return the ETag
+ * of the new file here.
+ *
+ * The returned ETag must be surrounded by double-quotes (The quotes should
+ * be part of the actual string).
+ *
+ * If you cannot accurately determine the ETag, you should not return it.
+ * If you don't store the file exactly as-is (you're transforming it
+ * somehow) you should also not return an ETag.
+ *
+ * This means that if a subsequent GET to this new file does not exactly
+ * return the same contents of what was submitted here, you are strongly
+ * recommended to omit the ETag.
*
* @param string $name Name of the file
- * @param resource $data Initial payload
- * @return void
+ * @param resource|string $data Initial payload
+ * @return null|string
*/
public function createFile($name, $data = null) {
+ if (isset($_SERVER['HTTP_OC_CHUNKED'])) {
+ $info = OC_FileChunking::decodeName($name);
+ $chunk_handler = new OC_FileChunking($info);
+ $chunk_handler->store($info['index'], $data);
+ if ($chunk_handler->isComplete()) {
+ $newPath = $this->path . '/' . $info['name'];
+ $f = OC_Filesystem::fopen($newPath, 'w');
+ $chunk_handler->assemble($f);
+ return OC_Connector_Sabre_Node::getETagPropertyForPath($newPath);
+ }
+ } else {
+ $newPath = $this->path . '/' . $name;
+ OC_Filesystem::file_put_contents($newPath,$data);
+ return OC_Connector_Sabre_Node::getETagPropertyForPath($newPath);
+ }
- $newPath = $this->path . '/' . $name;
- OC_Filesystem::file_put_contents($newPath,$data);
-
+ return null;
}
/**
@@ -59,22 +87,23 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
* @throws Sabre_DAV_Exception_FileNotFound
* @return Sabre_DAV_INode
*/
- public function getChild($name) {
+ public function getChild($name, $info = null) {
$path = $this->path . '/' . $name;
+ if (is_null($info)) {
+ $info = OC_FileCache::get($path);
+ }
- if (!OC_Filesystem::file_exists($path)) throw new Sabre_DAV_Exception_NotFound('File with name ' . $path . ' could not be located');
-
- if (OC_Filesystem::is_dir($path)) {
-
- return new OC_Connector_Sabre_Directory($path);
+ if (!$info) throw new Sabre_DAV_Exception_NotFound('File with name ' . $path . ' could not be located');
+ if ($info['mimetype'] == 'httpd/unix-directory') {
+ $node = new OC_Connector_Sabre_Directory($path);
} else {
-
- return new OC_Connector_Sabre_File($path);
-
+ $node = new OC_Connector_Sabre_File($path);
}
+ $node->setFileinfoCache($info);
+ return $node;
}
/**
@@ -84,18 +113,32 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
*/
public function getChildren() {
- $nodes = array();
- // foreach(scandir($this->path) as $node) if($node!='.' && $node!='..') $nodes[] = $this->getChild($node);
- if( OC_Filesystem::is_dir($this->path . '/')){
- $dh = OC_Filesystem::opendir($this->path . '/');
- while(( $node = readdir($dh)) !== false ){
- if($node!='.' && $node!='..'){
- $nodes[] = $this->getChild($node);
- }
+ $folder_content = OC_FileCache::getFolderContent($this->path);
+ $paths = array();
+ foreach($folder_content as $info) {
+ $paths[] = $this->path.'/'.$info['name'];
+ }
+ $properties = array_fill_keys($paths, array());
+ if(count($paths)>0){
+ $placeholders = join(',', array_fill(0, count($paths), '?'));
+ $query = OC_DB::prepare( 'SELECT * FROM *PREFIX*properties WHERE userid = ?' . ' AND propertypath IN ('.$placeholders.')' );
+ array_unshift($paths, OC_User::getUser()); // prepend userid
+ $result = $query->execute( $paths );
+ while($row = $result->fetchRow()) {
+ $propertypath = $row['propertypath'];
+ $propertyname = $row['propertyname'];
+ $propertyvalue = $row['propertyvalue'];
+ $properties[$propertypath][$propertyname] = $propertyvalue;
}
}
- return $nodes;
+ $nodes = array();
+ foreach($folder_content as $info) {
+ $node = $this->getChild($info['name'], $info);
+ $node->setPropertyCache($properties[$this->path.'/'.$info['name']]);
+ $nodes[] = $node;
+ }
+ return $nodes;
}
/**
@@ -131,7 +174,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
* @return array
*/
public function getQuotaInfo() {
- $rootInfo=OC_FileCache::get('');
+ $rootInfo=OC_FileCache_Cached::get('');
return array(
$rootInfo['size'],
OC_Filesystem::free_space()
@@ -139,5 +182,25 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
}
+ /**
+ * Returns a list of properties for this nodes.;
+ *
+ * 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
+ *
+ * @param array $properties
+ * @return void
+ */
+ public function getProperties($properties) {
+ $props = parent::getProperties($properties);
+ if (in_array(self::GETETAG_PROPERTYNAME, $properties)
+ && !isset($props[self::GETETAG_PROPERTYNAME])) {
+ $props[self::GETETAG_PROPERTYNAME] =
+ OC_Connector_Sabre_Node::getETagPropertyForPath($this->path);
+ }
+ return $props;
+ }
}
diff --git a/lib/connector/sabre/file.php b/lib/connector/sabre/file.php
index 3ba1b3355f2..9d571fceb0d 100644
--- a/lib/connector/sabre/file.php
+++ b/lib/connector/sabre/file.php
@@ -26,13 +26,28 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
/**
* Updates the data
*
+ * The data argument is a readable stream resource.
+ *
+ * After a succesful put operation, you may choose to return an ETag. The
+ * etag must always be surrounded by double-quotes. These quotes must
+ * appear in the actual string you're returning.
+ *
+ * Clients may use the ETag from a PUT request to later on make sure that
+ * when they update the file, the contents haven't changed in the mean
+ * time.
+ *
+ * If you don't plan to store the file byte-by-byte, and you return a
+ * different object on a subsequent GET you are strongly recommended to not
+ * return an ETag, and just return null.
+ *
* @param resource $data
- * @return void
+ * @return string|null
*/
public function put($data) {
OC_Filesystem::file_put_contents($this->path,$data);
+ return OC_Connector_Sabre_Node::getETagPropertyForPath($this->path);
}
/**
@@ -42,7 +57,7 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
*/
public function get() {
- return OC_Filesystem::fopen($this->path,'r');
+ return OC_Filesystem::fopen($this->path,'rb');
}
@@ -63,8 +78,8 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
* @return int
*/
public function getSize() {
- $this->stat();
- return $this->stat_cache['size'];
+ $this->getFileinfoCache();
+ return $this->fileinfo_cache['size'];
}
@@ -79,9 +94,20 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
* @return mixed
*/
public function getETag() {
+ $properties = $this->getProperties(array(self::GETETAG_PROPERTYNAME));
+ if (isset($properties[self::GETETAG_PROPERTYNAME])) {
+ return $properties[self::GETETAG_PROPERTYNAME];
+ }
+ return $this->getETagPropertyForPath($this->path);
+ }
- return null;
-
+ /**
+ * 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);
}
/**
@@ -92,6 +118,9 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
* @return mixed
*/
public function getContentType() {
+ if (isset($this->fileinfo_cache['mimetype'])) {
+ return $this->fileinfo_cache['mimetype'];
+ }
return OC_Filesystem::getMimeType($this->path);
diff --git a/lib/connector/sabre/locks.php b/lib/connector/sabre/locks.php
index a12f2a54406..0ddc8b18d2f 100644
--- a/lib/connector/sabre/locks.php
+++ b/lib/connector/sabre/locks.php
@@ -41,9 +41,10 @@ class OC_Connector_Sabre_Locks extends Sabre_DAV_Locks_Backend_Abstract {
// NOTE: the following 10 lines or so could be easily replaced by
// pure sql. MySQL's non-standard string concatination prevents us
// from doing this though.
- // Fix: sqlite does not insert time() as a number but as text, making
- // the equation returning false all the time
- $query = 'SELECT * FROM `*PREFIX*locks` WHERE `userid` = ? AND (`created` + `timeout`) > '.time().' AND ((`uri` = ?)';
+ // NOTE: SQLite requires time() to be inserted directly. That's ugly
+ // but otherwise reading locks from SQLite Databases will return
+ // nothing
+ $query = 'SELECT * FROM `*PREFIX*locks` WHERE `userid` = ? AND (`created` + `timeout`) > '.time().' AND (( `uri` = ?)';
$params = array(OC_User::getUser(),$uri);
// We need to check locks for every part in the uri.
@@ -72,8 +73,8 @@ class OC_Connector_Sabre_Locks extends Sabre_DAV_Locks_Backend_Abstract {
}
$query.=')';
- $stmt = OC_DB::prepare($query);
- $result = $stmt->execute($params);
+ $stmt = OC_DB::prepare( $query );
+ $result = $stmt->execute( $params );
$lockList = array();
while( $row = $result->fetchRow()){
@@ -110,7 +111,7 @@ class OC_Connector_Sabre_Locks extends Sabre_DAV_Locks_Backend_Abstract {
$locks = $this->getLocks($uri,false);
$exists = false;
- foreach($locks as $k=>$lock) {
+ foreach($locks as $lock) {
if ($lock->token == $lockInfo->token) $exists = true;
}
diff --git a/lib/connector/sabre/node.php b/lib/connector/sabre/node.php
index ce5cc022085..b9bf474a041 100644
--- a/lib/connector/sabre/node.php
+++ b/lib/connector/sabre/node.php
@@ -22,6 +22,7 @@
*/
abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IProperties {
+ const GETETAG_PROPERTYNAME = '{DAV:}getetag';
/**
* The path to the current node
@@ -30,10 +31,15 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
*/
protected $path;
/**
- * file stat cache
+ * node fileinfo cache
* @var array
*/
- protected $stat_cache;
+ protected $fileinfo_cache;
+ /**
+ * node properties cache
+ * @var array
+ */
+ protected $property_cache = null;
/**
* Sets up the node, expects a full path name
@@ -82,23 +88,38 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
}
+ public function setFileinfoCache($fileinfo_cache)
+ {
+ $this->fileinfo_cache = $fileinfo_cache;
+ }
+
/**
- * Set the stat cache
+ * Make sure the fileinfo cache is filled. Uses OC_FileCache or a direct stat
*/
- protected function stat() {
- if (!isset($this->stat_cache)) {
- $this->stat_cache = OC_Filesystem::stat($this->path);
+ protected function getFileinfoCache() {
+ if (!isset($this->fileinfo_cache)) {
+ if ($fileinfo_cache = OC_FileCache::get($this->path)) {
+ } else {
+ $fileinfo_cache = OC_Filesystem::stat($this->path);
+ }
+
+ $this->fileinfo_cache = $fileinfo_cache;
}
}
+ public function setPropertyCache($property_cache)
+ {
+ $this->property_cache = $property_cache;
+ }
+
/**
* Returns the last modification time, as a unix timestamp
*
* @return int
*/
public function getLastModified() {
- $this->stat();
- return $this->stat_cache['mtime'];
+ $this->getFileinfoCache();
+ return $this->fileinfo_cache['mtime'];
}
@@ -144,37 +165,91 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
}
}
+ $this->setPropertyCache(null);
return true;
}
/**
* Returns a list of properties for this nodes.;
*
- * The properties list is a list of propertynames the client requested, encoded as xmlnamespace#tagName, for example: http://www.example.org/namespace#author
+ * 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
*
* @param array $properties
* @return void
*/
- function getProperties($properties) {
- // At least some magic in here :-)
- $query = OC_DB::prepare( 'SELECT * FROM `*PREFIX*properties` WHERE `userid` = ? AND `propertypath` = ?' );
- $result = $query->execute( array( OC_User::getUser(), $this->path ));
-
- $existing = array();
- while( $row = $result->fetchRow()){
- $existing[$row['propertyname']] = $row['propertyvalue'];
+ public function getProperties($properties) {
+ if (is_null($this->property_cache)) {
+ $query = OC_DB::prepare( 'SELECT * FROM `*PREFIX*properties` WHERE `userid` = ? AND `propertypath` = ?' );
+ $result = $query->execute( array( OC_User::getUser(), $this->path ));
+
+ $this->property_cache = array();
+ while( $row = $result->fetchRow()){
+ $this->property_cache[$row['propertyname']] = $row['propertyvalue'];
+ }
}
+ // if the array was empty, we need to return everything
if(count($properties) == 0){
- return $existing;
+ return $this->property_cache;
}
- // if the array was empty, we need to return everything
$props = array();
foreach($properties as $property) {
- if (isset($existing[$property])) $props[$property] = $existing[$property];
+ if (isset($this->property_cache[$property])) $props[$property] = $this->property_cache[$property];
}
return $props;
}
+
+ /**
+ * 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 uniqid('', true);
+ }
+
+ /**
+ * 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;
+ }
+ $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;
+ }
+
+ /**
+ * 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 != '') {
+ $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/db.php b/lib/db.php
index 0d272f63037..208e70f4c35 100644
--- a/lib/db.php
+++ b/lib/db.php
@@ -3,7 +3,7 @@
* ownCloud
*
* @author Frank Karlitschek
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @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
@@ -33,8 +33,6 @@ class OC_DB {
static private $MDB2=false;
static private $PDO=false;
static private $schema=false;
- static private $affected=0;
- static private $result=false;
static private $inTransaction=false;
static private $prefix=null;
static private $type=null;
@@ -44,18 +42,18 @@ class OC_DB {
* @return BACKEND_MDB2 or BACKEND_PDO
*/
private static function getDBBackend(){
- if(class_exists('PDO') && OC_Config::getValue('installed', false)){//check if we can use PDO, else use MDB2 (instalation always needs to be done my mdb2)
+ if(class_exists('PDO') && OC_Config::getValue('installed', false)){//check if we can use PDO, else use MDB2 (installation always needs to be done my mdb2)
$type = OC_Config::getValue( "dbtype", "sqlite" );
- if($type=='oci') { //oracle also always needs mdb2
- return self::BACKEND_MDB2;
- }
+ if($type=='oci') { //oracle also always needs mdb2
+ return self::BACKEND_MDB2;
+ }
if($type=='sqlite3') $type='sqlite';
$drivers=PDO::getAvailableDrivers();
if(array_search($type,$drivers)!==false){
return self::BACKEND_PDO;
}
}
- return self::BACKEND_MDB2;
+ return self::BACKEND_MDB2;
}
/**
@@ -131,15 +129,23 @@ class OC_DB {
}else{
$dsn='pgsql:dbname='.$name.';host='.$host;
}
+ /**
+ * Ugly fix for pg connections pbm when password use spaces
+ */
+ $e_user = addslashes($user);
+ $e_password = addslashes($pass);
+ $pass = $user = null;
+ $dsn .= ";user='$e_user';password='$e_password'";
+ /** END OF FIX***/
break;
- case 'oci': // Oracle with PDO is unsupported
- if ($port) {
- $dsn = 'oci:dbname=//' . $host . ':' . $port . '/' . $name;
- } else {
- $dsn = 'oci:dbname=//' . $host . '/' . $name;
- }
- break;
- }
+ case 'oci': // Oracle with PDO is unsupported
+ if ($port) {
+ $dsn = 'oci:dbname=//' . $host . ':' . $port . '/' . $name;
+ } else {
+ $dsn = 'oci:dbname=//' . $host . '/' . $name;
+ }
+ break;
+ }
try{
self::$PDO=new PDO($dsn,$user,$pass,$opts);
}catch(PDOException $e){
@@ -214,18 +220,18 @@ class OC_DB {
'database' => $name
);
break;
- case 'oci':
- $dsn = array(
- 'phptype' => 'oci8',
- 'username' => $user,
- 'password' => $pass,
- );
- if ($host != '') {
- $dsn['hostspec'] = $host;
- $dsn['database'] = $name;
- } else { // use dbname for hostspec
- $dsn['hostspec'] = $name;
- }
+ case 'oci':
+ $dsn = array(
+ 'phptype' => 'oci8',
+ 'username' => $user,
+ 'password' => $pass,
+ );
+ if ($host != '') {
+ $dsn['hostspec'] = $host;
+ $dsn['database'] = $name;
+ } else { // use dbname for hostspec
+ $dsn['hostspec'] = $name;
+ }
break;
}
@@ -256,32 +262,30 @@ class OC_DB {
* SQL query via MDB2 prepare(), needs to be execute()'d!
*/
static public function prepare( $query , $limit=null, $offset=null ){
-
- if (!is_null($limit)) {
- if (self::$backend == self::BACKEND_MDB2) {
- //MDB2 uses or emulates limits & offset internally
- self::$MDB2->setLimit($limit, $offset);
- } else {
- //PDO does not handle limit and offset.
- //FIXME: check limit notation for other dbs
- //the following sql thus might needs to take into account db ways of representing it
- //(oracle has no LIMIT / OFFSET)
- $limitsql = ' LIMIT ' . $limit;
- if (!is_null($offset)) {
- $limitsql .= ' OFFSET ' . $offset;
- }
- //insert limitsql
- if (substr($query, -1) == ';') { //if query ends with ;
- $query = substr($query, 0, -1) . $limitsql . ';';
- } else {
- $query.=$limitsql;
- }
- }
- }
-
-
-
- // Optimize the query
+
+ if (!is_null($limit)) {
+ if (self::$backend == self::BACKEND_MDB2) {
+ //MDB2 uses or emulates limits & offset internally
+ self::$MDB2->setLimit($limit, $offset);
+ } else {
+ //PDO does not handle limit and offset.
+ //FIXME: check limit notation for other dbs
+ //the following sql thus might needs to take into account db ways of representing it
+ //(oracle has no LIMIT / OFFSET)
+ $limitsql = ' LIMIT ' . $limit;
+ if (!is_null($offset)) {
+ $limitsql .= ' OFFSET ' . $offset;
+ }
+ //insert limitsql
+ if (substr($query, -1) == ';') { //if query ends with ;
+ $query = substr($query, 0, -1) . $limitsql . ';';
+ } else {
+ $query.=$limitsql;
+ }
+ }
+ }
+
+ // Optimize the query
$query = self::processQuery( $query );
self::connect();
@@ -395,17 +399,17 @@ class OC_DB {
$file2 = 'static://db_scheme';
$content = str_replace( '*dbname*', $CONFIG_DBNAME, $content );
$content = str_replace( '*dbprefix*', $CONFIG_DBTABLEPREFIX, $content );
- /* FIXME: REMOVE this commented code
- * actually mysql, postgresql, sqlite and oracle support CUURENT_TIMESTAMP
- * http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html
- * http://www.postgresql.org/docs/8.1/static/functions-datetime.html
- * http://www.sqlite.org/lang_createtable.html
- * http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm
-
- if( $CONFIG_DBTYPE == 'pgsql' ){ //mysql support it too but sqlite doesn't
- $content = str_replace( '<default>0000-00-00 00:00:00</default>', '<default>CURRENT_TIMESTAMP</default>', $content );
- }
- */
+ /* FIXME: REMOVE this commented code
+ * actually mysql, postgresql, sqlite and oracle support CURRENT_TIMESTAMP
+ * http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html
+ * http://www.postgresql.org/docs/8.1/static/functions-datetime.html
+ * http://www.sqlite.org/lang_createtable.html
+ * http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm
+
+ if( $CONFIG_DBTYPE == 'pgsql' ){ //mysql support it too but sqlite doesn't
+ $content = str_replace( '<default>0000-00-00 00:00:00</default>', '<default>CURRENT_TIMESTAMP</default>', $content );
+ }
+ */
file_put_contents( $file2, $content );
// Try to create tables
@@ -418,20 +422,17 @@ class OC_DB {
if( $definition instanceof MDB2_Schema_Error ){
die( $definition->getMessage().': '.$definition->getUserInfo());
}
-// if(OC_Config::getValue('dbtype','sqlite')=='sqlite'){
-// $definition['overwrite']=true;//always overwrite for sqlite
-// }
- if(OC_Config::getValue('dbtype','sqlite')==='oci'){
- unset($definition['charset']); //or MDB2 tries SHUTDOWN IMMEDIATE
- $oldname = $definition['name'];
- $definition['name']=OC_Config::getValue( "dbuser", $oldname );
- }
-
+ if(OC_Config::getValue('dbtype','sqlite')==='oci'){
+ unset($definition['charset']); //or MDB2 tries SHUTDOWN IMMEDIATE
+ $oldname = $definition['name'];
+ $definition['name']=OC_Config::getValue( "dbuser", $oldname );
+ }
+
$ret=self::$schema->createDatabase( $definition );
// Die in case something went wrong
if( $ret instanceof MDB2_Error ){
- echo (self::$MDB2->getDebugOutput());
+ echo (self::$MDB2->getDebugOutput());
die ($ret->getMessage() . ': ' . $ret->getUserInfo());
}
@@ -462,16 +463,16 @@ class OC_DB {
$file2 = 'static://db_scheme';
$content = str_replace( '*dbname*', $previousSchema['name'], $content );
$content = str_replace( '*dbprefix*', $CONFIG_DBTABLEPREFIX, $content );
- /* FIXME: REMOVE this commented code
- * actually mysql, postgresql, sqlite and oracle support CUURENT_TIMESTAMP
- * http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html
- * http://www.postgresql.org/docs/8.1/static/functions-datetime.html
- * http://www.sqlite.org/lang_createtable.html
- * http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm
+ /* FIXME: REMOVE this commented code
+ * actually mysql, postgresql, sqlite and oracle support CUURENT_TIMESTAMP
+ * http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html
+ * http://www.postgresql.org/docs/8.1/static/functions-datetime.html
+ * http://www.sqlite.org/lang_createtable.html
+ * http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions037.htm
if( $CONFIG_DBTYPE == 'pgsql' ){ //mysql support it too but sqlite doesn't
$content = str_replace( '<default>0000-00-00 00:00:00</default>', '<default>CURRENT_TIMESTAMP</default>', $content );
}
- */
+ */
file_put_contents( $file2, $content );
$op = self::$schema->updateDatabase($file2, $previousSchema, array(), false);
@@ -581,8 +582,9 @@ class OC_DB {
// Delete our temporary file
unlink( $file2 );
- foreach($definition['tables'] as $name=>$table){
- self::dropTable($name);
+ $tables=array_keys($definition['tables']);
+ foreach($tables as $table){
+ self::dropTable($table);
}
}
@@ -590,15 +592,14 @@ class OC_DB {
* @brief replaces the owncloud tables with a new set
* @param $file string path to the MDB2 xml db export file
*/
- public static function replaceDB( $file ){
-
+ public static function replaceDB( $file ){
$apps = OC_App::getAllApps();
self::beginTransaction();
// Delete the old tables
self::removeDBStructure( OC::$SERVERROOT . '/db_structure.xml' );
foreach($apps as $app){
- $path = OC::$SERVERROOT.'/apps/'.$app.'/appinfo/database.xml';
+ $path = OC_App::getAppPath($app).'/appinfo/database.xml';
if(file_exists($path)){
self::removeDBStructure( $path );
}
diff --git a/lib/eventsource.php b/lib/eventsource.php
index cf10660b94c..95af2e471bc 100644
--- a/lib/eventsource.php
+++ b/lib/eventsource.php
@@ -36,12 +36,15 @@ class OC_EventSource{
header('Cache-Control: no-cache');
$this->fallback=isset($_GET['fallback']) and $_GET['fallback']=='true';
if($this->fallback){
- $fallBackId=$_GET['fallback_id'];
+ $this->fallBackId=$_GET['fallback_id'];
header("Content-Type: text/html");
echo str_repeat('<span></span>'.PHP_EOL,10); //dummy data to keep IE happy
}else{
header("Content-Type: text/event-stream");
}
+ if( !OC_Util::isCallRegistered()){
+ exit();
+ }
flush();
}
diff --git a/lib/filecache.php b/lib/filecache.php
index 719f419b37c..e85d6747f90 100644
--- a/lib/filecache.php
+++ b/lib/filecache.php
@@ -28,15 +28,13 @@
* It will try to keep the data up to date but changes from outside ownCloud can invalidate the cache
*/
class OC_FileCache{
- private static $savedData=array();
-
/**
* get the filesystem info from the cache
* @param string path
* @param string root (optional)
* @return array
*
- * returns an assiciative array with the following keys:
+ * returns an associative array with the following keys:
* - size
* - mtime
* - ctime
@@ -44,29 +42,15 @@ class OC_FileCache{
* - encrypted
* - versioned
*/
- public static function get($path,$root=''){
- if(self::isUpdated($path,$root)){
- if(!$root){//filesystem hooks are only valid for the default root
+ 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{
- self::fileSystemWatcherWrite(array('path'=>$path),$root);
+ OC_FileCache_Update::update($path,$root);
}
}
- if(!$root){
- $root=OC_Filesystem::getRoot();
- }
- if($root=='/'){
- $root='';
- }
- $path=$root.$path;
- $query=OC_DB::prepare('SELECT `ctime`,`mtime`,`mimetype`,`size`,`encrypted`,`versioned`,`writable` FROM `*PREFIX*fscache` WHERE `path_hash`=?');
- $result=$query->execute(array(md5($path)))->fetchRow();
- if(is_array($result)){
- return $result;
- }else{
- OC_Log::write('files','get(): file not found in cache ('.$path.')',OC_Log::DEBUG);
- return false;
- }
+ return OC_FileCache_Cached::get($path,$root);
}
/**
@@ -77,35 +61,31 @@ class OC_FileCache{
*
* $data is an assiciative array in the same format as returned by get
*/
- public static function put($path,$data,$root=''){
- if(!$root){
+ public static function put($path,$data,$root=false){
+ if($root===false){
$root=OC_Filesystem::getRoot();
}
- if($root=='/'){
- $root='';
- }
$fullpath=$root.$path;
$parent=self::getParentId($fullpath);
- $id=self::getFileId($fullpath);
- if(isset(OC_FileCache::$savedData[$fullpath])){
- $data=array_merge(OC_FileCache::$savedData[$fullpath],$data);
- unset(OC_FileCache::$savedData[$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]);
}
-
- // add parent directory to the file cache if it does not exist yet.
- if ($parent == -1 && $fullpath != $root) {
- $parentDir = substr(dirname($path), 0, strrpos(dirname($path), DIRECTORY_SEPARATOR));
- self::scanFile($parentDir);
- $parent = self::getParentId($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 = substr(dirname($path), 0, strrpos(dirname($path), DIRECTORY_SEPARATOR));
+ 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
- self::$savedData[$fullpath]=$data;
+ OC_FileCache_Cached::$savedData[$fullpath]=$data;
return;
}
if(!isset($data['encrypted'])){
@@ -126,6 +106,10 @@ class OC_FileCache{
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
+ }
}
/**
@@ -157,7 +141,7 @@ class OC_FileCache{
$query=OC_DB::prepare($sql);
$result=$query->execute($arguments);
if(OC_DB::isError($result)){
- OC_Log::write('files','error while updating file id('.$id.') in cache',OC_Log::ERROR);
+ OC_Log::write('files','error while updating file('.$id.') in cache',OC_Log::ERROR);
}
}
@@ -167,19 +151,21 @@ class OC_FileCache{
* @param string newPath
* @param string root (optional)
*/
- public static function move($oldPath,$newPath,$root=''){
- if(!$root){
+ public static function move($oldPath,$newPath,$root=false){
+ if($root===false){
$root=OC_Filesystem::getRoot();
}
- if($root=='/'){
- $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`=?');
@@ -187,33 +173,31 @@ class OC_FileCache{
$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/int $file
+ * @param string path
* @param string root (optional)
*/
- public static function delete($file,$root=''){
- if(!is_numeric($file)){
- if(!$root){
- $root=OC_Filesystem::getRoot();
- }
- if($root=='/'){
- $root='';
- }
- $path=$root.$file;
- self::delete(self::getFileId($path));
- }elseif($file!=-1){
- $query=OC_DB::prepare('SELECT `id` FROM `*PREFIX*fscache` WHERE `parent`=?');
- $result=$query->execute(array($file));
- while($child=$result->fetchRow()){
- self::delete(intval($child['id']));
- }
- $query=OC_DB::prepare('DELETE FROM `*PREFIX*fscache` WHERE `id`=?');
- $query->execute(array($file));
+ 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);
}
/**
@@ -223,13 +207,10 @@ class OC_FileCache{
* @param string root (optional)
* @return array of filepaths
*/
- public static function search($search,$returnData=false,$root=''){
- if(!$root){
+ public static function search($search,$returnData=false,$root=false){
+ if($root===false){
$root=OC_Filesystem::getRoot();
}
- if($root=='/'){
- $root='';
- }
$rootLen=strlen($root);
if(!$returnData){
$query=OC_DB::prepare('SELECT `path` FROM `*PREFIX*fscache` WHERE `name` LIKE ? AND `user`=?');
@@ -264,29 +245,11 @@ class OC_FileCache{
* - encrypted
* - versioned
*/
- public static function getFolderContent($path,$root='',$mimetype_filter=''){
- if(self::isUpdated($path,$root,true)){
- self::updateFolder($path,$root);
- }
- if(!$root){
- $root=OC_Filesystem::getRoot();
- }
- if($root=='/'){
- $root='';
- }
- $path=$root.$path;
- $parent=self::getFileId($path);
- if($parent==-1){
- return array();
- }
- $query=OC_DB::prepare('SELECT `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;
+ 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);
}
/**
@@ -295,58 +258,44 @@ class OC_FileCache{
* @param string root (optional)
* @return bool
*/
- public static function inCache($path,$root=''){
- if(!$root){
- $root=OC_Filesystem::getRoot();
- }
- if($root=='/'){
- $root='';
- }
- $path=$root.$path;
- return self::getFileId($path)!=-1;
+ public static function inCache($path,$root=false){
+ return self::getId($path,$root)!=-1;
}
/**
* get the file id as used in the cache
- * unlike the public getId, full paths are used here (/usename/files/foo instead of /foo)
- * @param string $path
+ * @param string path
+ * @param string root (optional)
* @return int
*/
- private static function getFileId($path){
- $query=OC_DB::prepare('SELECT `id` FROM `*PREFIX*fscache` WHERE `path_hash`=?');
- if(OC_DB::isError($query)){
- OC_Log::write('files','error while getting file id of '.$path,OC_Log::ERROR);
- return -1;
+ 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);
}
- $result=$query->execute(array(md5($path)));
+
+ $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)){
- return $result['id'];
+ $id=$result['id'];
}else{
- OC_Log::write('files','getFileId(): file not found in cache ('.$path.')',OC_Log::DEBUG);
- return -1;
+ $id=-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=''){
- if(!$root){
- $root=OC_Filesystem::getRoot();
+ if($cache=OC_Cache::getUserCache(true)){
+ $cache->set('fileid/'.$fullPath,$id);
}
- if($root=='/'){
- $root='';
- }
- $path=$root.$path;
- return self::getFileId($path);
+
+ return $id;
}
/**
@@ -379,154 +328,23 @@ class OC_FileCache{
if($path=='/'){
return -1;
}else{
- return self::getFileId(dirname($path));
- }
- }
-
- /**
- * called when changes are made to files
- * @param array $params
- * @param string root (optional)
- */
- public static function fileSystemWatcherWrite($params,$root=''){
- if(!$root){
- $view=OC_Filesystem::getView();
- }else{
- $view=new OC_FilesystemView(($root=='/')?'':$root);
- }
-
- $path=$params['path'];
- $fullPath=$view->getRoot().$path;
- $mimetype=$view->getMimeType($path);
- $dir=$view->is_dir($path.'/');
- //dont use self::get here, we don't want inifinte loops when a file has changed
- $cachedSize=self::getCachedSize($path,$root);
- $size=0;
- if($dir){
- if(self::inCache($path,$root) && $path != '/Shared'){
- $parent=self::getFileId($fullPath);
- $query=OC_DB::prepare('SELECT `size` FROM `*PREFIX*fscache` WHERE `parent`=?');
- $result=$query->execute(array($parent));
- while($row=$result->fetchRow()){
- $size+=$row['size'];
- }
- $mtime=$view->filemtime($path);
- $ctime=$view->filectime($path);
- $writable=$view->is_writable($path);
- self::put($path,array('size'=>$size,'mtime'=>$mtime,'ctime'=>$ctime,'mimetype'=>$mimetype,'writable'=>$writable));
- }else{
- $count=0;
- self::scan($path,null,$count,$root);
- }
- }else{
- $size=self::scanFile($path,$root);
+ return self::getId(dirname($path),'');
}
- self::increaseSize(dirname($fullPath),$size-$cachedSize);
}
- public static function getCached($path,$root=''){
- if(!$root){
- $root=OC_Filesystem::getRoot();
- }else{
- if($root=='/'){
- $root='';
- }
- }
- $path=$root.$path;
- $query=OC_DB::prepare('SELECT `ctime`,`mtime`,`mimetype`,`size`,`encrypted`,`versioned`,`writable` FROM `*PREFIX*fscache` WHERE `path_hash`=?');
- $result=$query->execute(array(md5($path)))->fetchRow();
- if(is_array($result)){
- if(isset(self::$savedData[$path])){
- $result=array_merge($result,self::$savedData[$path]);
- }
- return $result;
- }else{
- OC_Log::write('files','getChached(): file not found in cache ('.$path.')',OC_Log::DEBUG);
- if(isset(self::$savedData[$path])){
- return self::$savedData[$path];
- }else{
- return array();
- }
- }
- }
-
- private static function getCachedSize($path,$root){
- if(!$root){
- $root=OC_Filesystem::getRoot();
- }else{
- if($root=='/'){
- $root='';
- }
- }
- $path=$root.$path;
- $query=OC_DB::prepare('SELECT `size` FROM `*PREFIX*fscache` WHERE `path_hash`=?');
- $result=$query->execute(array(md5($path)));
- if($row=$result->fetchRow()){
- return $row['size'];
- }else{//file not in cache
- return 0;
- }
- }
-
- /**
- * called when files are deleted
- * @param array $params
- * @param string root (optional)
- */
- public static function fileSystemWatcherDelete($params,$root=''){
- if(!$root){
- $root=OC_Filesystem::getRoot();
- }
- if($root=='/'){
- $root='';
- }
- $path=$params['path'];
- $fullPath=$root.$path;
- if(self::getFileId($fullPath)==-1){
- return;
- }
- $size=self::getCachedSize($path,$root);
- self::increaseSize(dirname($fullPath),-$size);
- self::delete($path);
- }
-
- /**
- * called when files are deleted
- * @param array $params
- * @param string root (optional)
- */
- public static function fileSystemWatcherRename($params,$root=''){
- if(!$root){
- $root=OC_Filesystem::getRoot();
- }
- if($root=='/'){
- $root='';
- }
- $oldPath=$params['oldpath'];
- $newPath=$params['newpath'];
- $fullOldPath=$root.$oldPath;
- $fullNewPath=$root.$newPath;
- if(($id=self::getFileId($fullOldPath))!=-1){
- $oldSize=self::getCachedSize($oldPath,$root);
- }else{
- return;
- }
- $size=OC_Filesystem::filesize($newPath);
- self::increaseSize(dirname($fullOldPath),-$oldSize);
- self::increaseSize(dirname($fullNewPath),$oldSize);
- self::move($oldPath,$newPath);
- }
-
/**
* adjust the size of the parent folders
* @param string $path
* @param int $sizeDiff
+ * @param string root (optinal)
*/
- private static function increaseSize($path,$sizeDiff){
+ public static function increaseSize($path,$sizeDiff, $root=false){
if($sizeDiff==0) return;
- while(($id=self::getFileId($path))!=-1){//walk up the filetree increasing the size of all parent folders
+ $id=self::getId($path,$root);
+ 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));
+ $id=self::getParentId($path);
$path=dirname($path);
}
}
@@ -536,17 +354,21 @@ class OC_FileCache{
* @param string $path
* @param OC_EventSource $enventSource (optional)
* @param int count (optional)
- * @param string root (optionak)
+ * @param string root (optional)
*/
- public static function scan($path,$eventSource=false,&$count=0,$root=''){
+ public static function scan($path,$eventSource=false,&$count=0,$root=false){
if($eventSource){
$eventSource->send('scanning',array('file'=>$path,'count'=>$count));
}
$lastSend=$count;
- if(!$root){
+ // 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=='/')?'':$root);
+ $view=new OC_FilesystemView($root);
}
self::scanFile($path,$root);
$dh=$view->opendir($path.'/');
@@ -568,8 +390,9 @@ class OC_FileCache{
}
}
}
- self::cleanFolder($path,$root);
- self::increaseSize($view->getRoot().$path,$totalSize);
+
+ OC_FileCache_Update::cleanFolder($path,$root);
+ self::increaseSize($path,$totalSize,$root);
}
/**
@@ -578,11 +401,15 @@ class OC_FileCache{
* @param string root (optional)
* @return int size of the scanned file
*/
- public static function scanFile($path,$root=''){
- if(!$root){
+ 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=='/')?'':$root);
+ $view=new OC_FilesystemView($root);
}
if(!$view->is_readable($path)) return; //cant read, nothing we can do
clearstatcache();
@@ -615,11 +442,9 @@ class OC_FileCache{
* seccond mimetype part can be ommited
* e.g. searchByMime('audio')
*/
- public static function searchByMime($part1,$part2=null,$root=null){
- if(!$root){
+ public static function searchByMime($part1,$part2=null,$root=false){
+ if($root===false){
$root=OC_Filesystem::getRoot();
- }elseif($root=='/'){
- $root='';
}
$rootLen=strlen($root);
$root .= '%';
@@ -639,104 +464,6 @@ class OC_FileCache{
}
/**
- * check if a file or folder is updated outside owncloud
- * @param string path
- * @param string root (optional)
- * @param bool folder (optional)
- * @return bool
- */
- public static function isUpdated($path,$root='',$folder=false){
- if(!$root){
- $root=OC_Filesystem::getRoot();
- $view=OC_Filesystem::getView();
- }else{
- if($root=='/'){
- $root='';
- }
- $view=new OC_FilesystemView($root);
- }
- if(!$view->file_exists($path)){
- return false;
- }
- $mtime=$view->filemtime($path.(($folder)?'/':''));
- $isDir=$view->is_dir($path);
- $fullPath=$root.$path;
- $query=OC_DB::prepare('SELECT `mtime` FROM `*PREFIX*fscache` WHERE `path_hash`=?');
- $result=$query->execute(array(md5($fullPath)));
- if($row=$result->fetchRow()){
- $cachedMTime=$row['mtime'];
- return ($mtime>$cachedMTime);
- }else{//file not in cache, so it has to be updated
- if($path=='/' or $path==''){//dont auto update the root folder, it will be scanned
- return false;
- }
- return true;
- }
- }
-
- /**
- * update the cache according to changes in the folder
- * @param string path
- * @param string root (optional)
- */
- private static function updateFolder($path,$root=''){
- if(!$root){
- $view=OC_Filesystem::getView();
- }else{
- $view=new OC_FilesystemView(($root=='/')?'':$root);
- }
- $dh=$view->opendir($path.'/');
- if($dh){//check for changed/new files
- while (($filename = readdir($dh)) !== false) {
- if($filename != '.' and $filename != '..'){
- $file=$path.'/'.$filename;
- if(self::isUpdated($file,$root)){
- if(!$root){//filesystem hooks are only valid for the default root
- OC_Hook::emit('OC_Filesystem','post_write',array('path'=>$file));
- }else{
- self::fileSystemWatcherWrite(array('path'=>$file),$root);
- }
- }
- }
- }
- }
-
- self::cleanFolder($path,$root);
-
- //update the folder last, so we can calculate the size correctly
- if(!$root){//filesystem hooks are only valid for the default root
- OC_Hook::emit('OC_Filesystem','post_write',array('path'=>$path));
- }else{
- self::fileSystemWatcherWrite(array('path'=>$path),$root);
- }
- }
-
- /**
- * delete non existing files from the cache
- */
- private static function cleanFolder($path,$root=''){
- if(!$root){
- $view=OC_Filesystem::getView();
- }else{
- $view=new OC_FilesystemView(($root=='/')?'':$root);
- }
- //check for removed files, not using getFolderContent to prevent loops
- $parent=self::getFileId($view->getRoot().$path);
- $query=OC_DB::prepare('SELECT `name` FROM `*PREFIX*fscache` WHERE `parent`=?');
- $result=$query->execute(array($parent));
- while($row=$result->fetchRow()){
- $file=$path.'/'.$row['name'];
- if(!$view->file_exists($file)){
- if(!$root){//filesystem hooks are only valid for the default root
- OC_Hook::emit('OC_Filesystem','post_delete',array('path'=>$file));
- }else{
- self::fileSystemWatcherDelete(array('path'=>$file),$root);
- }
- }
- }
- }
-
- /**
* clean old pre-path_hash entries
*/
public static function clean(){
@@ -746,6 +473,6 @@ class OC_FileCache{
}
//watch for changes and try to keep the cache up to date
-OC_Hook::connect('OC_Filesystem','post_write','OC_FileCache','fileSystemWatcherWrite');
-OC_Hook::connect('OC_Filesystem','post_delete','OC_FileCache','fileSystemWatcherDelete');
-OC_Hook::connect('OC_Filesystem','post_rename','OC_FileCache','fileSystemWatcherRename');
+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');
diff --git a/lib/filecache/cached.php b/lib/filecache/cached.php
new file mode 100644
index 00000000000..17a792a23d4
--- /dev/null
+++ b/lib/filecache/cached.php
@@ -0,0 +1,70 @@
+<?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;
+ $query=OC_DB::prepare('SELECT path,ctime,mtime,mimetype,size,encrypted,versioned,writable FROM *PREFIX*fscache WHERE path_hash=?');
+ $result=$query->execute(array(md5($path)))->fetchRow();
+ 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 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;
+ }
+ }
+} \ No newline at end of file
diff --git a/lib/filecache/update.php b/lib/filecache/update.php
new file mode 100644
index 00000000000..0b5ff8e2446
--- /dev/null
+++ b/lib/filecache/update.php
@@ -0,0 +1,214 @@
+<?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 != '..'){
+ $file=$path.'/'.$filename;
+ if(self::hasUpdated($file,$root)){
+ if($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 fileysystem
+ * @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);
+ }
+ 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);
+ }
+} \ No newline at end of file
diff --git a/lib/filechunking.php b/lib/filechunking.php
new file mode 100644
index 00000000000..d03af226d8b
--- /dev/null
+++ b/lib/filechunking.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+
+class OC_FileChunking {
+ protected $info;
+ protected $cache;
+
+ static public function decodeName($name) {
+ preg_match('/(?P<name>.*)-chunking-(?P<transferid>\d+)-(?P<chunkcount>\d+)-(?P<index>\d+)/', $name, $matches);
+ return $matches;
+ }
+
+ public function __construct($info) {
+ $this->info = $info;
+ }
+
+ public function getPrefix() {
+ $name = $this->info['name'];
+ $transferid = $this->info['transferid'];
+
+ return $name.'-chunking-'.$transferid.'-';
+ }
+
+ protected function getCache() {
+ if (!isset($this->cache)) {
+ $this->cache = new OC_Cache_File();
+ }
+ return $this->cache;
+ }
+
+ public function store($index, $data) {
+ $cache = $this->getCache();
+ $name = $this->getPrefix().$index;
+ $cache->set($name, $data);
+ }
+
+ public function isComplete() {
+ $prefix = $this->getPrefix();
+ $parts = 0;
+ $cache = $this->getCache();
+ for($i=0; $i < $this->info['chunkcount']; $i++) {
+ if ($cache->hasKey($prefix.$i)) {
+ $parts ++;
+ }
+ }
+ return $parts == $this->info['chunkcount'];
+ }
+
+ public function assemble($f) {
+ $cache = $this->getCache();
+ $prefix = $this->getPrefix();
+ for($i=0; $i < $this->info['chunkcount']; $i++) {
+ $chunk = $cache->get($prefix.$i);
+ $cache->remove($prefix.$i);
+ fwrite($f,$chunk);
+ }
+ fclose($f);
+ }
+
+ public function signature_split($orgfile, $input) {
+ $info = unpack('n', fread($input, 2));
+ $blocksize = $info[1];
+ $this->info['transferid'] = mt_rand();
+ $count = 0;
+ $needed = array();
+ $cache = $this->getCache();
+ $prefix = $this->getPrefix();
+ while (!feof($orgfile)) {
+ $new_md5 = fread($input, 16);
+ if (feof($input)) {
+ break;
+ }
+ $data = fread($orgfile, $blocksize);
+ $org_md5 = md5($data, true);
+ if ($org_md5 == $new_md5) {
+ $cache->set($prefix.$count, $data);
+ } else {
+ $needed[] = $count;
+ }
+ $count++;
+ }
+ return array(
+ 'transferid' => $this->info['transferid'],
+ 'needed' => $needed,
+ 'count' => $count,
+ );
+ }
+}
diff --git a/lib/fileproxy.php b/lib/fileproxy.php
index 9cda94c1c2b..ec04faa9bc5 100644
--- a/lib/fileproxy.php
+++ b/lib/fileproxy.php
@@ -27,14 +27,17 @@
* Manipulation happens by using 2 kind of proxy operations, pre and post proxies
* that manipulate the filesystem call and the result of the call respectively
*
- * A pre-proxy recieves the filepath as arugments (or 2 filespaths in case of operations like copy or move) and return a boolean
- * If a pre-proxy returnes false the file operation will be canceled
+ * A pre-proxy recieves the filepath as arugments (or 2 filespaths in case of
+ * operations like copy or move) and return a boolean
+ * If a pre-proxy returns false the file operation will be canceled
* All filesystem operations have a pre-proxy
*
* A post-proxy recieves 2 arguments, the filepath and the result of the operation.
- * The return calue 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, getMimeType, hash, fopen, free_space and search
+ * 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,
+ * getMimeType, hash, fopen, free_space and search
*/
class OC_FileProxy{
diff --git a/lib/fileproxy/quota.php b/lib/fileproxy/quota.php
index 1d2a1ffcf0b..7316224cc61 100644
--- a/lib/fileproxy/quota.php
+++ b/lib/fileproxy/quota.php
@@ -54,10 +54,10 @@ class OC_FileProxy_Quota extends OC_FileProxy{
* @return int
*/
private function getFreeSpace(){
- $rootInfo=OC_FileCache::get('');
+ $rootInfo=OC_FileCache_Cached::get('');
// TODO Remove after merge of share_api
if (OC_FileCache::inCache('/Shared')) {
- $sharedInfo=OC_FileCache::get('/Shared');
+ $sharedInfo=OC_FileCache_Cached::get('/Shared');
} else {
$sharedInfo = null;
}
diff --git a/lib/files.php b/lib/files.php
index bb128a8e44f..1a1fffa0a50 100644
--- a/lib/files.php
+++ b/lib/files.php
@@ -4,7 +4,7 @@
* ownCloud
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @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
@@ -30,16 +30,45 @@ class OC_Files {
/**
* get the content of a directory
- * @param dir $directory
+ * @param dir $directory path under datadirectory
*/
- public static function getDirectoryContent($directory, $mimetype_filter = ''){
- if(strpos($directory,OC::$CONFIG_DATADIRECTORY)===0){
- $directory=substr($directory,strlen(OC::$CONFIG_DATADIRECTORY));
+ public static function getDirectoryContent($directory, $mimetype_filter = ''){
+ $directory=OC_Filesystem::normalizePath($directory);
+ if($directory=='/'){
+ $directory='';
}
- $files=OC_FileCache::getFolderContent($directory, '', $mimetype_filter);
- foreach($files as &$file){
- $file['directory']=$directory;
- $file['type']=($file['mimetype']=='httpd/unix-directory')?'dir':'file';
+ $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\Share::PERMISSION_READ | OCP\Share::PERMISSION_SHARE;
+ if ($file['type'] == 'dir' && $file['writable']) {
+ $permissions |= OCP\Share::PERMISSION_CREATE;
+ }
+ if ($file['writable']) {
+ $permissions |= OCP\Share::PERMISSION_UPDATE | OCP\Share::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;
@@ -107,8 +136,7 @@ class OC_Files {
header('Content-Type: application/zip');
header('Content-Length: ' . filesize($filename));
}else{
- $fileData=OC_FileCache::get($filename);
- header('Content-Type: ' . $fileData['mimetype']);
+ header('Content-Type: '.OC_Filesystem::getMimeType($filename));
}
}elseif($zip or !OC_Filesystem::file_exists($filename)){
header("HTTP/1.0 404 Not Found");
@@ -170,10 +198,12 @@ class OC_Files {
* @param file $target
*/
public static function move($sourceDir,$source,$targetDir,$target){
- if(OC_User::isLoggedIn() && ($sourceDir != '' || $source != 'Shared')){
+ if(OC_User::isLoggedIn() && ($sourceDir != '' || $source != 'Shared') && !OC_Filesystem::file_exists($targetDir.'/'.$target)){
$targetFile=self::normalizePath($targetDir.'/'.$target);
$sourceFile=self::normalizePath($sourceDir.'/'.$source);
return OC_Filesystem::rename($sourceFile,$targetFile);
+ } else {
+ return false;
}
}
@@ -373,10 +403,12 @@ class OC_Files {
}
}
- //supress errors in case we don't have permissions for it
- if(@file_put_contents(OC::$SERVERROOT.'/.htaccess', $htaccess)) {
- return OC_Helper::computerFileSize($size);
- }
+ //check for write permissions
+ 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); }
+
return false;
}
diff --git a/lib/filestorage.php b/lib/filestorage.php
index 1a33d304630..5bfd09253d5 100644
--- a/lib/filestorage.php
+++ b/lib/filestorage.php
@@ -4,7 +4,7 @@
* ownCloud
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @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
@@ -21,10 +21,10 @@
*/
/**
- * Privde a common interface to all different storage options
+ * Provde a common interface to all different storage options
*/
abstract class OC_Filestorage{
- public function __construct($parameters){}
+ abstract public function __construct($parameters);
abstract public function mkdir($path);
abstract public function rmdir($path);
abstract public function opendir($path);
@@ -33,8 +33,11 @@ abstract class OC_Filestorage{
abstract public function stat($path);
abstract public function filetype($path);
abstract public function filesize($path);
- abstract public function is_readable($path);
- abstract public function is_writable($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);
@@ -50,4 +53,14 @@ abstract class OC_Filestorage{
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);
}
diff --git a/lib/filestorage/common.php b/lib/filestorage/common.php
index 0d3e2c25fd6..c829be62f74 100644
--- a/lib/filestorage/common.php
+++ b/lib/filestorage/common.php
@@ -20,6 +20,18 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
+/**
+ * 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
+ * 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
+ * in classes which extend it, e.g. $this->stat() .
+ */
+
abstract class OC_Filestorage_Common extends OC_Filestorage {
public function __construct($parameters){}
@@ -42,8 +54,17 @@ abstract class OC_Filestorage_Common extends OC_Filestorage {
return $stat['size'];
}
}
-// abstract public function is_readable($path);
-// abstract public function is_writable($path);
+ public function isCreatable($path) {
+ return $this->isUpdatable($path);
+ }
+// 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);
@@ -87,6 +108,79 @@ abstract class OC_Filestorage_Common extends OC_Filestorage {
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
+ *
+ * @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 );
+
+ }
+
+ 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 ) ) {
+
+ 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 );
+
+ } 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 true;
+ }
+
+ }
public function getMimeType($path){
if(!$this->file_exists($path)){
return false;
@@ -135,9 +229,29 @@ abstract class OC_Filestorage_Common extends OC_Filestorage {
}
$tmpFile=OC_Helper::tmpFile($extension);
$target=fopen($tmpFile,'w');
- $count=OC_Helper::streamCopy($source,$target);
+ OC_Helper::streamCopy($source,$target);
return $tmpFile;
}
+ public function getLocalFolder($path){
+ $baseDir=OC_Helper::tmpFolder();
+ $this->addLocalFolder($path,$baseDir);
+ return $baseDir;
+ }
+ 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);
+ }else{
+ $tmp=$this->toTmpFile($path.'/'.$file);
+ rename($tmp,$target.'/'.$file);
+ }
+ }
+ }
+ }
+ }
// abstract public function touch($path, $mtime=null);
protected function searchInDir($query,$dir=''){
@@ -156,4 +270,13 @@ abstract class OC_Filestorage_Common extends OC_Filestorage {
}
return $files;
}
+
+ /**
+ * check if a file or folder has been updated since $time
+ * @param int $time
+ * @return bool
+ */
+ public function hasUpdated($path,$time){
+ return $this->filemtime($path)>$time;
+ }
}
diff --git a/lib/filestorage/commontest.php b/lib/filestorage/commontest.php
index 1b01ff856a3..b5126a407b3 100644
--- a/lib/filestorage/commontest.php
+++ b/lib/filestorage/commontest.php
@@ -51,11 +51,11 @@ class OC_Filestorage_CommonTest extends OC_Filestorage_Common{
public function filetype($path){
return $this->storage->filetype($path);
}
- public function is_readable($path){
- return $this->storage->is_readable($path);
+ public function isReadable($path){
+ return $this->storage->isReadable($path);
}
- public function is_writable($path){
- return $this->storage->is_writable($path);
+ public function isUpdatable($path){
+ return $this->storage->isUpdatable($path);
}
public function file_exists($path){
return $this->storage->file_exists($path);
diff --git a/lib/filestorage/local.php b/lib/filestorage/local.php
index 1f3fd2e9249..22d17469df3 100644
--- a/lib/filestorage/local.php
+++ b/lib/filestorage/local.php
@@ -2,9 +2,8 @@
/**
* for local filestore, we only have to map the paths
*/
-class OC_Filestorage_Local extends OC_Filestorage{
+class OC_Filestorage_Local extends OC_Filestorage_Common{
protected $datadir;
- private static $mimetypes=null;
public function __construct($arguments){
$this->datadir=$arguments['datadir'];
if(substr($this->datadir,-1)!=='/'){
@@ -41,15 +40,15 @@ class OC_Filestorage_Local extends OC_Filestorage{
}
public function filesize($path){
if($this->is_dir($path)){
- return $this->getFolderSize($path);
+ return 0;
}else{
return filesize($this->datadir.$path);
}
}
- public function is_readable($path){
+ public function isReadable($path){
return is_readable($this->datadir.$path);
}
- public function is_writable($path){
+ public function isUpdatable($path){
return is_writable($this->datadir.$path);
}
public function file_exists($path){
@@ -86,7 +85,7 @@ class OC_Filestorage_Local extends OC_Filestorage{
return $this->delTree($path);
}
public function rename($path1,$path2){
- if (!$this->is_writable($path1)) {
+ if (!$this->isUpdatable($path1)) {
OC_Log::write('core','unable to rename, file is not writable : '.$path1,OC_Log::ERROR);
return false;
}
@@ -129,7 +128,7 @@ class OC_Filestorage_Local extends OC_Filestorage{
}
public function getMimeType($path){
- if($this->is_readable($path)){
+ if($this->isReadable($path)){
return OC_Helper::getMimeType($this->datadir.$path);
}else{
return false;
@@ -157,7 +156,7 @@ class OC_Filestorage_Local extends OC_Filestorage{
return $return;
}
- public function hash($type,$path,$raw = false){
+ public function hash($path,$type,$raw=false){
return hash_file($type,$this->datadir.$path,$raw);
}
@@ -169,10 +168,13 @@ class OC_Filestorage_Local extends OC_Filestorage{
return $this->searchInDir($query);
}
public function getLocalFile($path){
- return $this->datadir.$path;
+ return $this->datadir.$path;
+ }
+ public function getLocalFolder($path){
+ return $this->datadir.$path;
}
- private function searchInDir($query,$dir=''){
+ protected function searchInDir($query,$dir=''){
$files=array();
foreach (scandir($this->datadir.$dir) as $item) {
if ($item == '.' || $item == '..') continue;
@@ -187,11 +189,11 @@ class OC_Filestorage_Local extends OC_Filestorage{
}
/**
- * @brief get the size of folder and it's content
- * @param string $path file path
- * @return int size of folder and it's content
+ * check if a file or folder has been updated since $time
+ * @param int $time
+ * @return bool
*/
- public function getFolderSize($path){
- return 0;//depricated, use OC_FileCach instead
+ public function hasUpdated($path,$time){
+ return $this->filemtime($path)>$time;
}
}
diff --git a/lib/filesystem.php b/lib/filesystem.php
index 2a0c1cea93e..0a8e6982151 100644
--- a/lib/filesystem.php
+++ b/lib/filesystem.php
@@ -4,7 +4,7 @@
* ownCloud
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @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
@@ -25,7 +25,7 @@
/**
* 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 premission related stuff
+ * this class should also handle all the file permission related stuff
*
* Hooks provided:
* read(path)
@@ -46,105 +46,106 @@
class OC_Filesystem{
static private $storages=array();
static private $mounts=array();
- static private $storageTypes=array();
public static $loaded=false;
- private $fakeRoot='';
+ /**
+ * @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';
-
- /**
- * 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
- */
+ /**
+ * 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';
+
+ /**
+ * 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){
OC_Hook::emit(self::CLASSNAME,'get_mountpoint',array('path'=>$path));
if(!$path){
@@ -153,8 +154,10 @@ class OC_Filesystem{
if($path[0]!=='/'){
$path='/'.$path;
}
+ $path=str_replace('//', '/',$path);
$foundMountPoint='';
- foreach(OC_Filesystem::$mounts as $mountpoint=>$storage){
+ $mountPoints=array_keys(OC_Filesystem::$mounts);
+ foreach($mountPoints as $mountpoint){
if($mountpoint==$path){
return $mountpoint;
}
@@ -259,10 +262,7 @@ class OC_Filesystem{
* tear down the filesystem, removing all storage providers
*/
static public function tearDown(){
- foreach(self::$storages as $mountpoint=>$storage){
- unset(self::$storages[$mountpoint]);
- }
- $fakeRoot='';
+ self::$storages=array();
}
/**
@@ -273,7 +273,12 @@ class OC_Filesystem{
*/
static private function createStorage($class,$arguments){
if(class_exists($class)){
- return new $class($arguments);
+ 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;
@@ -281,17 +286,19 @@ class OC_Filesystem{
}
/**
- * change the root to a fake toor
+ * change the root to a fake root
* @param string fakeRoot
* @return bool
*/
static public function chroot($fakeRoot){
- return self::$defaultInstance->chroot($path);
+ return self::$defaultInstance->chroot($fakeRoot);
}
/**
- * get the fake root
+ * @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();
@@ -319,17 +326,6 @@ class OC_Filesystem{
}
self::$mounts[$mountpoint]=array('class'=>$class,'arguments'=>$arguments);
}
-
- /**
- * create all storage backends mounted in the filesystem
- */
- static private function mountAll(){
- foreach(self::$mounts as $mountPoint=>$mount){
- if(!isset(self::$storages[$mountPoint])){
- self::$storages[$mountPoint]=self::createStorage($mount['type'],$mount['arguments']);
- }
- }
- }
/**
* return the path to a local version of the file
@@ -340,6 +336,27 @@ class OC_Filesystem{
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 = \OCP\Config::getSystemValue('datadirectory').'/'.\OC_User::getUser().'/files';
+ $newpath = $path;
+ if (strncmp($newpath, $datadir, strlen($datadir)) == 0) {
+ $newpath = substr($path, strlen($datadir));
+ }
+ return $newpath;
+ }
/**
* return path to file which reflects one visible in browser
@@ -402,6 +419,9 @@ class OC_Filesystem{
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);
}
@@ -420,12 +440,33 @@ class OC_Filesystem{
static public function readfile($path){
return self::$defaultInstance->readfile($path);
}
+ /**
+ * @deprecated Replaced by isReadable() as part of CRUDS
+ */
static public function is_readable($path){
return self::$defaultInstance->is_readable($path);
}
+ /**
+ * @deprecated Replaced by isCreatable(), isUpdatable(), isDeletable() as part of CRUDS
+ */
static public function is_writable($path){
return self::$defaultInstance->is_writable($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);
}
@@ -477,6 +518,59 @@ class OC_Filesystem{
static public function search($query){
return OC_FileCache::search($query);
}
+
+ /**
+ * check if a file or folder has been updated since $time
+ * @param int $time
+ * @return bool
+ */
+ static public function hasUpdated($path,$time){
+ return self::$defaultInstance->hasUpdated($path,$time);
+ }
+
+ static public function removeETagHook($params) {
+ if (isset($params['path'])) {
+ $path=$params['path'];
+ } else {
+ $path=$params['oldpath'];
+ }
+ OC_Connector_Sabre_Node::removeETagPropertyForPath($path);
+ }
+
+ /**
+ * normalize a 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 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;
+ }
}
+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 ed52ba1be46..a888e5340ea 100644
--- a/lib/filesystemview.php
+++ b/lib/filesystemview.php
@@ -1,36 +1,53 @@
<?php
/**
-* ownCloud
-*
-* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.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 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){
+ public function __construct($root) {
$this->fakeRoot=$root;
}
- public function getAbsolutePath($path){
+ public function getAbsolutePath($path) {
if(!$path){
$path='/';
}
@@ -39,16 +56,15 @@ class OC_FilesystemView {
}
return $this->fakeRoot.$path;
}
-
-
+
/**
* change the root to a fake toor
* @param string fakeRoot
* @return bool
*/
- public function chroot($fakeRoot){
+ public function chroot($fakeRoot) {
if(!$fakeRoot==''){
- if($fakeRoot[0]!=='/'){
+ if($fakeRoot[0]!=='/') {
$fakeRoot='/'.$fakeRoot;
}
}
@@ -59,7 +75,7 @@ class OC_FilesystemView {
* get the fake root
* @return string
*/
- public function getRoot(){
+ public function getRoot() {
return $this->fakeRoot;
}
@@ -68,7 +84,7 @@ class OC_FilesystemView {
* @param string path
* @return bool
*/
- public function getInternalPath($path){
+ public function getInternalPath($path) {
if (!isset($this->internal_path_cache[$path])) {
$this->internal_path_cache[$path] = OC_Filesystem::getInternalPath($this->getAbsolutePath($path));
}
@@ -80,23 +96,28 @@ class OC_FilesystemView {
* @param string path
* @return string
*/
- public function getRelativePath($path){
- if($this->fakeRoot==''){
+ public function getRelativePath($path) {
+ if($this->fakeRoot=='') {
return $path;
}
- if(strpos($path,$this->fakeRoot)!==0){
+ if(strpos($path, $this->fakeRoot)!==0) {
return null;
}else{
- return substr($path,strlen($this->fakeRoot));
+ $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){
+ public function getStorage($path) {
if (!isset($this->storage_cache[$path])) {
$this->storage_cache[$path] = OC_Filesystem::getStorage($this->getAbsolutePath($path));
}
@@ -110,7 +131,7 @@ class OC_FilesystemView {
* @param string path
* @return string
*/
- public function getMountPoint($path){
+ public function getMountPoint($path) {
return OC_Filesystem::getMountPoint($this->getAbsolutePath($path));
}
@@ -120,49 +141,65 @@ class OC_FilesystemView {
* @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)){
+ 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));
+ }
+ }
/**
- * following functions are equivilent to their php buildin equivilents for arguments/return values.
+ * 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 mkdir($path) {
+ return $this->basicOperation('mkdir', $path, array('create', 'write'));
+ }
+ public function rmdir($path) {
+ return $this->basicOperation('rmdir', $path, array('delete'));
}
- public function rmdir($path){
- return $this->basicOperation('rmdir',$path,array('delete'));
+ public function opendir($path) {
+ return $this->basicOperation('opendir', $path, array('read'));
}
- 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){
+ public function is_dir($path) {
if($path=='/'){
return true;
}
- return $this->basicOperation('is_dir',$path);
+ return $this->basicOperation('is_dir', $path);
}
- public function is_file($path){
+ public function is_file($path) {
if($path=='/'){
return false;
}
- return $this->basicOperation('is_file',$path);
+ return $this->basicOperation('is_file', $path);
}
- public function stat($path){
- return $this->basicOperation('stat',$path);
+ public function stat($path) {
+ return $this->basicOperation('stat', $path);
}
- public function filetype($path){
- return $this->basicOperation('filetype',$path);
+ public function filetype($path) {
+ return $this->basicOperation('filetype', $path);
}
- public function filesize($path){
- return $this->basicOperation('filesize',$path);
+ public function filesize($path) {
+ return $this->basicOperation('filesize', $path);
}
- public function readfile($path){
+ public function readfile($path) {
@ob_end_clean();
- $handle=$this->fopen($path,'rb');
+ $handle=$this->fopen($path, 'rb');
if ($handle) {
$chunkSize = 8192;// 8 MB chunks
while (!feof($handle)) {
@@ -174,33 +211,54 @@ class OC_FilesystemView {
}
return false;
}
+ /**
+ * @deprecated Replaced by isReadable() as part of CRUDS
+ */
public function is_readable($path){
- return $this->basicOperation('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('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 file_exists($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);
+ return $this->basicOperation('file_exists', $path);
}
- public function filectime($path){
- return $this->basicOperation('filectime',$path);
+ public function filectime($path) {
+ return $this->basicOperation('filectime', $path);
}
- public function filemtime($path){
- return $this->basicOperation('filemtime',$path);
+ public function filemtime($path) {
+ return $this->basicOperation('filemtime', $path);
}
- public function touch($path, $mtime=null){
+ public function touch($path, $mtime=null) {
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_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 = $this->getAbsolutePath($path);
+ $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);
@@ -250,85 +308,145 @@ class OC_FilesystemView {
}
}
}else{
- return $this->basicOperation('file_put_contents',$path,array('create','write'),$data);
+ return $this->basicOperation('file_put_contents', $path, array('create', 'write'), $data);
}
}
- public function unlink($path){
- return $this->basicOperation('unlink',$path,array('delete'));
- }
- public function rename($path1,$path2){
- $absolutePath1=$this->getAbsolutePath($path1);
- $absolutePath2=$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){
+ 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;
- 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);
- $mp2=$this->getMountPoint($path2);
- if($mp1==$mp2){
- if($storage=$this->getStorage($path1)){
- $result=$storage->rename($this->getInternalPath($path1),$this->getInternalPath($path2));
+ 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,'r');
- $target=$this->fopen($path2,'w');
- $count=OC_Helper::streamCopy($data,$target);
- $storage1=$this->getStorage($path1);
- $storage1->unlink($this->getInternalPath($path1));
- $result=$count>0;
- }
- OC_Hook::emit( OC_Filesystem::CLASSNAME, OC_Filesystem::signal_post_rename, array( OC_Filesystem::signal_param_oldpath => $path1, OC_Filesystem::signal_param_newpath=>$path2));
+ } 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;
+ }
+ 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){
- $absolutePath1=$this->getAbsolutePath($path1);
- $absolutePath2=$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){
+ 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;
- 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));
+ 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 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) {
+ 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);
- $mp2=$this->getMountPoint($path2);
- if($mp1==$mp2){
- if($storage=$this->getStorage($path1)){
- $result=$storage->copy($this->getInternalPath($path1),$this->getInternalPath($path2));
+ 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,'r');
- $target=$this->fopen($path2,'w');
- $count=OC_Helper::streamCopy($data,$target);
+ } else {
+ $source = $this->fopen($path1.$postFix1, 'r');
+ $target = $this->fopen($path2.$postFix2, 'w');
+ $result = OC_Helper::streamCopy($source, $target);
}
- 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_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));
+ OC_Hook::emit(
+ OC_Filesystem::CLASSNAME,
+ OC_Filesystem::signal_post_write,
+ array( OC_Filesystem::signal_param_path => $path2)
+ );
return $result;
}
}
}
- public function fopen($path,$mode){
+ public function fopen($path, $mode) {
$hooks=array();
- switch($mode){
+ switch($mode) {
case 'r':
case 'rb':
$hooks[]='read';
@@ -356,45 +474,46 @@ class OC_FilesystemView {
OC_Log::write('core','invalid mode ('.$mode.') for '.$path,OC_Log::ERROR);
}
- return $this->basicOperation('fopen',$path,$hooks,$mode);
+ return $this->basicOperation('fopen', $path, $hooks, $mode);
}
- public function toTmpFile($path){
- if(OC_Filesystem::isValidPath($path)){
- $source=$this->fopen($path,'r');
- if($source){
+ public function toTmpFile($path) {
+ if(OC_Filesystem::isValidPath($path)) {
+ $source = $this->fopen($path, 'r');
+ if($source) {
$extension='';
- $extOffset=strpos($path,'.');
+ $extOffset=strpos($path, '.');
if($extOffset !== false) {
- $extension=substr($path,strrpos($path,'.'));
+ $extension=substr($path, strrpos($path,'.'));
}
- $tmpFile=OC_Helper::tmpFile($extension);
- file_put_contents($tmpFile,$source);
+ $tmpFile = OC_Helper::tmpFile($extension);
+ file_put_contents($tmpFile, $source);
return $tmpFile;
}
}
}
- public function fromTmpFile($tmpFile,$path){
- if(OC_Filesystem::isValidPath($path)){
- if(!$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);
+ $source=fopen($tmpFile, 'r');
+ if($source) {
+ $this->file_put_contents($path, $source);
unlink($tmpFile);
return true;
- }else{
+ } else {
}
- }else{
+ } else {
return false;
}
}
- public function getMimeType($path){
- return $this->basicOperation('getMimeType',$path);
+ public function getMimeType($path) {
+ return $this->basicOperation('getMimeType', $path);
}
public function hash($type, $path, $raw = false) {
- $absolutePath = $this->getAbsolutePath($path);
+ $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) {
@@ -407,8 +526,8 @@ class OC_FilesystemView {
array( OC_Filesystem::signal_param_path => $path)
);
}
- if ($storage = $this->getStorage($path)) {
- $result = $storage->hash($type, $this->getInternalPath($path), $raw);
+ if ($storage = $this->getStorage($path.$postFix)) {
+ $result = $storage->hash($type, $this->getInternalPath($path.$postFix), $raw);
$result = OC_FileProxy::runPostProxies('hash', $absolutePath, $result);
return $result;
}
@@ -416,50 +535,42 @@ class OC_FilesystemView {
return null;
}
- public function free_space($path='/'){
- return $this->basicOperation('free_space',$path);
+ public function free_space($path='/') {
+ return $this->basicOperation('free_space', $path);
}
/**
- * abstraction for running most basic operations
+ * @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){
- $absolutePath=$this->getAbsolutePath($path);
- if(OC_FileProxy::runPreProxies($operation,$absolutePath, $extraParam) and OC_Filesystem::isValidPath($path)){
- $path=$this->getRelativePath($absolutePath);
- if($path==null){
+ 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);
- $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, $hook, array( OC_Filesystem::signal_param_path => $path, OC_Filesystem::signal_param_run => &$run));
- }else{
- OC_Hook::emit( OC_Filesystem::CLASSNAME, $hook, array( OC_Filesystem::signal_param_path => $path));
- }
+ $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);
}
- }
- if($run and $storage=$this->getStorage($path)){
- 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
- foreach($hooks as $hook){
- if($hook!='read'){
- OC_Hook::emit( OC_Filesystem::CLASSNAME, 'post_'.$hook, array( OC_Filesystem::signal_param_path => $path));
- }
- }
+ $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;
@@ -467,4 +578,41 @@ class OC_FilesystemView {
}
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);
+ }
}
diff --git a/lib/group.php b/lib/group.php
index 91772d510ff..72cf5dc89af 100644
--- a/lib/group.php
+++ b/lib/group.php
@@ -3,7 +3,7 @@
* ownCloud
*
* @author Frank Karlitschek
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @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
@@ -43,7 +43,7 @@ class OC_Group {
* @returns true/false
*/
public static function useBackend( $backend ){
- if($backend instanceof OC_Group_Backend){
+ if($backend instanceof OC_Group_Interface){
self::$_usedBackends[]=$backend;
}
}
@@ -84,7 +84,7 @@ class OC_Group {
OC_Hook::emit( "OC_Group", "pre_createGroup", array( "run" => &$run, "gid" => $gid ));
if($run){
- //create the user in the first backend that supports creating users
+ //create the group in the first backend that supports creating groups
foreach(self::$_usedBackends as $backend){
if(!$backend->implementsActions(OC_GROUP_BACKEND_CREATE_GROUP))
continue;
@@ -141,9 +141,6 @@ class OC_Group {
*/
public static function inGroup( $uid, $gid ){
foreach(self::$_usedBackends as $backend){
- if(!$backend->implementsActions(OC_GROUP_BACKEND_IN_GROUP))
- continue;
-
if($backend->inGroup($uid,$gid)){
return true;
}
@@ -171,7 +168,7 @@ class OC_Group {
if($run){
$succes=false;
-
+
//add the user to the all backends that have the group
foreach(self::$_usedBackends as $backend){
if(!$backend->implementsActions(OC_GROUP_BACKEND_ADD_TO_GROUP))
@@ -228,9 +225,6 @@ class OC_Group {
public static function getUserGroups( $uid ){
$groups=array();
foreach(self::$_usedBackends as $backend){
- if(!$backend->implementsActions(OC_GROUP_BACKEND_GET_USER_GROUPS))
- continue;
-
$groups=array_merge($backend->getUserGroups($uid),$groups);
}
asort($groups);
@@ -243,18 +237,15 @@ class OC_Group {
*
* Returns a list with all groups
*/
- public static function getGroups(){
- $groups=array();
- foreach(self::$_usedBackends as $backend){
- if(!$backend->implementsActions(OC_GROUP_BACKEND_GET_GROUPS))
- continue;
-
- $groups=array_merge($backend->getGroups(),$groups);
+ public static function getGroups($search = '', $limit = -1, $offset = 0) {
+ $groups = array();
+ foreach (self::$_usedBackends as $backend) {
+ $groups = array_merge($backend->getGroups($search, $limit, $offset), $groups);
}
asort($groups);
return $groups;
}
-
+
/**
* check if a group exists
* @param string $gid
@@ -268,18 +259,29 @@ class OC_Group {
}
return false;
}
-
+
/**
* @brief get a list of all users in a group
* @returns array with user ids
*/
- public static function usersInGroup($gid){
+ public static function usersInGroup($gid, $search = '', $limit = -1, $offset = 0) {
$users=array();
foreach(self::$_usedBackends as $backend){
- if(!$backend->implementsActions(OC_GROUP_BACKEND_GET_USERS))
- continue;
-
- $users=array_merge($backend->usersInGroup($gid),$users);
+ $users = array_merge($backend->usersInGroup($gid, $search, $limit, $offset), $users);
+ }
+ return $users;
+ }
+
+ /**
+ * @brief get a list of all users in several groups
+ * @param array $gids
+ * @returns array with user ids
+ */
+ public static function usersInGroups($gids, $search = '', $limit = -1, $offset = 0) {
+ $users = array();
+ foreach ($gids as $gid) {
+ // TODO Need to apply limits to groups as total
+ $users = array_merge(array_diff(self::usersInGroup($gid, $search, $limit, $offset), $users), $users);
}
return $users;
}
diff --git a/lib/group/backend.php b/lib/group/backend.php
index af6c53c8035..5969986c652 100644
--- a/lib/group/backend.php
+++ b/lib/group/backend.php
@@ -4,7 +4,7 @@
* ownCloud
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @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
@@ -31,28 +31,20 @@ define('OC_GROUP_BACKEND_NOT_IMPLEMENTED', -501);
*/
define('OC_GROUP_BACKEND_CREATE_GROUP', 0x00000001);
define('OC_GROUP_BACKEND_DELETE_GROUP', 0x00000010);
-define('OC_GROUP_BACKEND_IN_GROUP', 0x00000100);
-define('OC_GROUP_BACKEND_ADD_TO_GROUP', 0x00001000);
-define('OC_GROUP_BACKEND_REMOVE_FROM_GOUP', 0x00010000);
-define('OC_GROUP_BACKEND_GET_USER_GROUPS', 0x00100000);
-define('OC_GROUP_BACKEND_GET_USERS', 0x01000000);
-define('OC_GROUP_BACKEND_GET_GROUPS', 0x10000000);
+define('OC_GROUP_BACKEND_ADD_TO_GROUP', 0x00000100);
+define('OC_GROUP_BACKEND_REMOVE_FROM_GOUP', 0x00001000);
/**
* Abstract base class for user management
*/
-abstract class OC_Group_Backend {
+abstract class OC_Group_Backend implements OC_Group_Interface {
protected $possibleActions = array(
OC_GROUP_BACKEND_CREATE_GROUP => 'createGroup',
OC_GROUP_BACKEND_DELETE_GROUP => 'deleteGroup',
- OC_GROUP_BACKEND_IN_GROUP => 'inGroup',
OC_GROUP_BACKEND_ADD_TO_GROUP => 'addToGroup',
OC_GROUP_BACKEND_REMOVE_FROM_GOUP => 'removeFromGroup',
- OC_GROUP_BACKEND_GET_USER_GROUPS => 'getUserGroups',
- OC_GROUP_BACKEND_GET_USERS => 'usersInGroup',
- OC_GROUP_BACKEND_GET_GROUPS => 'getGroups'
);
-
+
/**
* @brief Get all supported actions
* @returns bitwise-or'ed actions
@@ -70,7 +62,7 @@ abstract class OC_Group_Backend {
return $actions;
}
-
+
/**
* @brief Check if backend implements actions
* @param $actions bitwise-or'ed actions
@@ -84,14 +76,55 @@ abstract class OC_Group_Backend {
}
/**
+ * @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 in_array($gid, $this->getUserGroups($uid));
+ }
+
+ /**
+ * @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){
+ return array();
+ }
+
+ /**
+ * @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) {
+ return array();
+ }
+
+ /**
* check if a group exists
* @param string $gid
* @return bool
*/
public function groupExists($gid){
- if(!$this->implementsActions(OC_GROUP_BACKEND_GET_GROUPS)){
- return false;
- }
- return in_array($gid, $this->getGroups());
+ return in_array($gid, $this->getGroups($gid, 1));
}
+
+ /**
+ * @brief get a list of all users in a group
+ * @returns array with user ids
+ */
+ public function usersInGroup($gid, $search = '', $limit = -1, $offset = 0) {
+ return array();
+ }
+
}
diff --git a/lib/group/database.php b/lib/group/database.php
index 5e52432c492..52608b2db73 100644
--- a/lib/group/database.php
+++ b/lib/group/database.php
@@ -4,7 +4,7 @@
* ownCloud
*
* @author Frank Karlitschek
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @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
@@ -41,7 +41,6 @@
* Class for group management in a SQL Database (e.g. MySQL, SQLite)
*/
class OC_Group_Database extends OC_Group_Backend {
- static private $userGroupCache=array();
/**
* @brief Try to create a new group
@@ -51,10 +50,10 @@ class OC_Group_Database extends OC_Group_Backend {
* Trys to create a new group. If the group name already exists, false will
* be returned.
*/
- public static function createGroup( $gid ){
+ public function createGroup( $gid ){
// Check for existence
- $query = OC_DB::prepare( 'SELECT `gid` FROM `*PREFIX*groups` WHERE `gid` = ?' );
- $result = $query->execute( array( $gid ));
+ $stmt = OC_DB::prepare( "SELECT `gid` FROM `*PREFIX*groups` WHERE `gid` = ?" );
+ $result = $stmt->execute( array( $gid ));
if( $result->fetchRow() ){
// Can not add an existing group
@@ -62,8 +61,8 @@ class OC_Group_Database extends OC_Group_Backend {
}
else{
// Add group and exit
- $query = OC_DB::prepare( 'INSERT INTO `*PREFIX*groups` ( `gid` ) VALUES( ? )' );
- $result = $query->execute( array( $gid ));
+ $stmt = OC_DB::prepare( "INSERT INTO `*PREFIX*groups` ( `gid` ) VALUES( ? )" );
+ $result = $stmt->execute( array( $gid ));
return $result ? true : false;
}
@@ -76,14 +75,14 @@ class OC_Group_Database extends OC_Group_Backend {
*
* Deletes a group and removes it from the group_user-table
*/
- public static function deleteGroup( $gid ){
+ public function deleteGroup( $gid ){
// Delete the group
- $query = OC_DB::prepare( 'DELETE FROM `*PREFIX*groups` WHERE `gid` = ?' );
- $result = $query->execute( array( $gid ));
+ $stmt = OC_DB::prepare( "DELETE FROM `*PREFIX*groups` WHERE `gid` = ?" );
+ $result = $stmt->execute( array( $gid ));
// Delete the group-user relation
- $query = OC_DB::prepare( 'DELETE FROM `*PREFIX*group_user` WHERE `gid` = ?' );
- $result = $query->execute( array( $gid ));
+ $stmt = OC_DB::prepare( "DELETE FROM `*PREFIX*group_user` WHERE `gid` = ?" );
+ $result = $stmt->execute( array( $gid ));
return true;
}
@@ -96,10 +95,10 @@ class OC_Group_Database extends OC_Group_Backend {
*
* Checks whether the user is member of a group or not.
*/
- public static function inGroup( $uid, $gid ){
+ public function inGroup( $uid, $gid ){
// check
- $query = OC_DB::prepare( 'SELECT `uid` FROM `*PREFIX*group_user` WHERE `gid` = ? AND `uid` = ?' );
- $result = $query->execute( array( $gid, $uid ));
+ $stmt = OC_DB::prepare( "SELECT `uid` FROM `*PREFIX*group_user` WHERE `gid` = ? AND `uid` = ?" );
+ $result = $stmt->execute( array( $gid, $uid ));
return $result->fetchRow() ? true : false;
}
@@ -112,11 +111,11 @@ class OC_Group_Database extends OC_Group_Backend {
*
* Adds a user to a group.
*/
- public static function addToGroup( $uid, $gid ){
+ public function addToGroup( $uid, $gid ){
// No duplicate entries!
- if( !self::inGroup( $uid, $gid )){
- $query = OC_DB::prepare( 'INSERT INTO `*PREFIX*group_user` ( `uid`, `gid` ) VALUES( ?, ? )' );
- $result = $query->execute( array( $uid, $gid ));
+ if( !$this->inGroup( $uid, $gid )){
+ $stmt = OC_DB::prepare( "INSERT INTO `*PREFIX*group_user` ( `uid`, `gid` ) VALUES( ?, ? )" );
+ $stmt->execute( array( $uid, $gid ));
return true;
}else{
return false;
@@ -131,9 +130,9 @@ class OC_Group_Database extends OC_Group_Backend {
*
* removes the user from a group.
*/
- public static function removeFromGroup( $uid, $gid ){
- $query = OC_DB::prepare( 'DELETE FROM `*PREFIX*group_user` WHERE `uid` = ? AND `gid` = ?' );
- $result = $query->execute( array( $uid, $gid ));
+ public function removeFromGroup( $uid, $gid ){
+ $stmt = OC_DB::prepare( "DELETE FROM `*PREFIX*group_user` WHERE `uid` = ? AND `gid` = ?" );
+ $stmt->execute( array( $uid, $gid ));
return true;
}
@@ -146,10 +145,10 @@ class OC_Group_Database extends OC_Group_Backend {
* This function fetches all groups a user belongs to. It does not check
* if the user exists at all.
*/
- public static function getUserGroups( $uid ){
+ public function getUserGroups( $uid ){
// No magic!
- $query = OC_DB::prepare( 'SELECT `gid` FROM `*PREFIX*group_user` WHERE `uid` = ?' );
- $result = $query->execute( array( $uid ));
+ $stmt = OC_DB::prepare( "SELECT `gid` FROM `*PREFIX*group_user` WHERE `uid` = ?" );
+ $result = $stmt->execute( array( $uid ));
$groups = array();
while( $row = $result->fetchRow()){
@@ -165,28 +164,40 @@ class OC_Group_Database extends OC_Group_Backend {
*
* Returns a list with all groups
*/
- public static function getGroups(){
- $query = OC_DB::prepare( 'SELECT `gid` FROM `*PREFIX*groups`' );
- $result = $query->execute();
-
+ public function getGroups($search = '', $limit = null, $offset = null) {
+ $stmt = OC_DB::prepare('SELECT `gid` FROM `*PREFIX*groups` WHERE `gid` LIKE ?', $limit, $offset);
+ $result = $stmt->execute(array($search.'%'));
$groups = array();
- while( $row = $result->fetchRow()){
- $groups[] = $row["gid"];
+ while ($row = $result->fetchRow()) {
+ $groups[] = $row['gid'];
}
-
return $groups;
}
-
+
+ /**
+ * check if a group exists
+ * @param string $gid
+ * @return bool
+ */
+ public function groupExists($gid) {
+ $query = OC_DB::prepare('SELECT `gid` FROM `*PREFIX*groups` WHERE `gid` = ?');
+ $result = $query->execute(array($gid))->fetchOne();
+ if ($result) {
+ return true;
+ }
+ return false;
+ }
+
/**
* @brief get a list of all users in a group
* @returns array with user ids
*/
- public static function usersInGroup($gid){
- $query=OC_DB::prepare('SELECT `uid` FROM `*PREFIX*group_user` WHERE `gid`=?');
- $users=array();
- $result=$query->execute(array($gid));
- while($row=$result->fetchRow()){
- $users[]=$row['uid'];
+ public function usersInGroup($gid, $search = '', $limit = null, $offset = null) {
+ $stmt = OC_DB::prepare('SELECT `uid` FROM `*PREFIX*group_user` WHERE `gid` = ? AND `uid` LIKE ?', $limit, $offset);
+ $result = $stmt->execute(array($gid, $search.'%'));
+ $users = array();
+ while ($row = $result->fetchRow()) {
+ $users[] = $row['uid'];
}
return $users;
}
diff --git a/lib/group/dummy.php b/lib/group/dummy.php
index 5220237ecbf..51eca28f3f4 100644
--- a/lib/group/dummy.php
+++ b/lib/group/dummy.php
@@ -4,7 +4,7 @@
* ownCloud
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @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
@@ -126,7 +126,8 @@ class OC_Group_Dummy extends OC_Group_Backend {
*/
public function getUserGroups($uid){
$groups=array();
- foreach($this->groups as $group=>$user){
+ $allGroups=array_keys($this->groups);
+ foreach($allGroups as $group){
if($this->inGroup($uid,$group)){
$groups[]=$group;
}
@@ -140,7 +141,7 @@ class OC_Group_Dummy extends OC_Group_Backend {
*
* Returns a list with all groups
*/
- public function getGroups(){
+ public function getGroups($search = '', $limit = -1, $offset = 0) {
return array_keys($this->groups);
}
@@ -148,7 +149,7 @@ class OC_Group_Dummy extends OC_Group_Backend {
* @brief get a list of all users in a group
* @returns array with user ids
*/
- public function usersInGroup($gid){
+ public function usersInGroup($gid, $search = '', $limit = -1, $offset = 0) {
if(isset($this->groups[$gid])){
return $this->groups[$gid];
}else{
diff --git a/lib/group/example.php b/lib/group/example.php
index a88159f91be..76d12629763 100644
--- a/lib/group/example.php
+++ b/lib/group/example.php
@@ -4,7 +4,7 @@
* ownCloud
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @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
@@ -34,7 +34,7 @@ abstract class OC_Group_Example {
* Trys to create a new group. If the group name already exists, false will
* be returned.
*/
- public static function createGroup($gid){}
+ abstract public static function createGroup($gid);
/**
* @brief delete a group
@@ -43,7 +43,7 @@ abstract class OC_Group_Example {
*
* Deletes a group and removes it from the group_user-table
*/
- public static function deleteGroup($gid){}
+ abstract public static function deleteGroup($gid);
/**
* @brief is user in group?
@@ -53,7 +53,7 @@ abstract class OC_Group_Example {
*
* Checks whether the user is member of a group or not.
*/
- public static function inGroup($uid, $gid){}
+ abstract public static function inGroup($uid, $gid);
/**
* @brief Add a user to a group
@@ -63,7 +63,7 @@ abstract class OC_Group_Example {
*
* Adds a user to a group.
*/
- public static function addToGroup($uid, $gid){}
+ abstract public static function addToGroup($uid, $gid);
/**
* @brief Removes a user from a group
@@ -73,7 +73,7 @@ abstract class OC_Group_Example {
*
* removes the user from a group.
*/
- public static function removeFromGroup($uid,$gid){}
+ abstract public static function removeFromGroup($uid,$gid);
/**
* @brief Get all groups a user belongs to
@@ -83,7 +83,7 @@ abstract class OC_Group_Example {
* This function fetches all groups a user belongs to. It does not check
* if the user exists at all.
*/
- public static function getUserGroups($uid){}
+ abstract public static function getUserGroups($uid);
/**
* @brief get a list of all groups
@@ -91,12 +91,19 @@ abstract class OC_Group_Example {
*
* Returns a list with all groups
*/
- public static function getGroups(){}
+ abstract public static function getGroups($search = '', $limit = -1, $offset = 0);
+
+ /**
+ * check if a group exists
+ * @param string $gid
+ * @return bool
+ */
+ abstract public function groupExists($gid);
/**
* @brief get a list of all users in a group
* @returns array with user ids
*/
- public static function usersInGroup($gid){}
+ abstract public static function usersInGroup($gid, $search = '', $limit = -1, $offset = 0);
}
diff --git a/lib/group/interface.php b/lib/group/interface.php
new file mode 100644
index 00000000000..12cc07a5374
--- /dev/null
+++ b/lib/group/interface.php
@@ -0,0 +1,76 @@
+<?php
+
+/**
+ * ownCloud - group interface
+ *
+ * @author Arthur Schiwon
+ * @copyright 2012 Arthur Schiwon blizzz@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/>.
+ *
+ */
+
+interface OC_Group_Interface {
+ /**
+ * @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_GROUP_BACKEND_CREATE_GROUP etc.
+ */
+ public function implementsActions($actions);
+
+ /**
+ * @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);
+
+ /**
+ * @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);
+
+ /**
+ * @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);
+
+ /**
+ * check if a group exists
+ * @param string $gid
+ * @return bool
+ */
+ public function groupExists($gid);
+
+ /**
+ * @brief get a list of all users in a group
+ * @returns array with user ids
+ */
+ public function usersInGroup($gid, $search = '', $limit = -1, $offset = 0);
+
+} \ No newline at end of file
diff --git a/lib/helper.php b/lib/helper.php
index 080df8613ec..8c362747a27 100644
--- a/lib/helper.php
+++ b/lib/helper.php
@@ -4,7 +4,7 @@
*
* @author Frank Karlitschek
* @author Jakob Sack
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @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
@@ -38,21 +38,18 @@ class OC_Helper {
*/
public static function linkTo( $app, $file ){
if( $app != '' ){
- $app .= '/';
+ $app_path = OC_App::getAppPath($app);
// Check if the app is in the app folder
- if( file_exists( OC::$APPSROOT . '/apps/'. $app.$file )){
- if(substr($file, -3) == 'php' || substr($file, -3) == 'css'){
- if(substr($app, -1, 1) == '/'){
- $app = substr($app, 0, strlen($app) - 1);
- }
+ if( $app_path && file_exists( $app_path.'/'.$file )){
+ if(substr($file, -3) == 'php' || substr($file, -3) == 'css'){
$urlLinkTo = OC::$WEBROOT . '/?app=' . $app;
$urlLinkTo .= ($file!='index.php')?'&getfile=' . urlencode($file):'';
}else{
- $urlLinkTo = OC::$APPSWEBROOT . '/apps/' . $app . $file;
+ $urlLinkTo = OC_App::getAppWebPath($app) . '/' . $file;
}
}
else{
- $urlLinkTo = OC::$WEBROOT . '/' . $app . $file;
+ $urlLinkTo = OC::$WEBROOT . '/' . $app . '/' . $file;
}
}
else{
@@ -68,48 +65,6 @@ class OC_Helper {
}
/**
- * @brief Returns the server host
- * @returns the server host
- *
- * Returns the server host, even if the website uses one or more
- * reverse proxies
- */
- public static function serverHost() {
- if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
- if (strpos($_SERVER['HTTP_X_FORWARDED_HOST'], ",") !== false) {
- $host = trim(array_pop(explode(",", $_SERVER['HTTP_X_FORWARDED_HOST'])));
- }
- else{
- $host=$_SERVER['HTTP_X_FORWARDED_HOST'];
- }
- }
- else{
- $host = $_SERVER['HTTP_HOST'];
- }
- return $host;
- }
-
- /**
- * @brief Returns the server protocol
- * @returns the server protocol
- *
- * Returns the server protocol. It respects reverse proxy servers and load balancers
- */
- public static function serverProtocol() {
- if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
- $proto = strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']);
- }else{
- if(isset($_SERVER['HTTPS']) and !empty($_SERVER['HTTPS']) and ($_SERVER['HTTPS']!='off')) {
- $proto = 'https';
- }else{
- $proto = 'http';
- }
- }
- return($proto);
- }
-
-
- /**
* @brief Creates an absolute url
* @param $app app
* @param $file file
@@ -119,8 +74,19 @@ class OC_Helper {
*/
public static function linkToAbsolute( $app, $file ) {
$urlLinkTo = self::linkTo( $app, $file );
- $urlLinkTo = OC_Helper::serverProtocol(). '://' . self::serverHost() . $urlLinkTo;
- return $urlLinkTo;
+ return self::makeURLAbsolute($urlLinkTo);
+ }
+
+ /**
+ * @brief Makes an $url absolute
+ * @param $url the url
+ * @returns the absolute url
+ *
+ * Returns a absolute url to the given app and file.
+ */
+ public static function makeURLAbsolute( $url )
+ {
+ return OC_Request::serverProtocol(). '://' . OC_Request::serverHost() . $url;
}
/**
@@ -130,8 +96,8 @@ class OC_Helper {
*
* Returns a absolute url to the given service.
*/
- public static function linkToRemote( $service ) {
- return self::linkToAbsolute( '', 'remote.php') . '/' . $service . '/';
+ public static function linkToRemote( $service, $add_slash = true ) {
+ return self::linkToAbsolute( '', 'remote.php') . '/' . $service . (($add_slash && $service[strlen($service)-1]!='/')?'/':'');
}
/**
@@ -142,15 +108,15 @@ class OC_Helper {
*
* Returns the path to the image.
*/
- public static function imagePath( $app, $image ){
+ public static function imagePath( $app, $image ){
// Read the selected theme from the config file
$theme=OC_Config::getValue( "theme" );
// Check if the app is in the app folder
if( file_exists( OC::$SERVERROOT."/themes/$theme/apps/$app/img/$image" )){
return OC::$WEBROOT."/themes/$theme/apps/$app/img/$image";
- }elseif( file_exists( OC::$APPSROOT."/apps/$app/img/$image" )){
- return OC::$APPSWEBROOT."/apps/$app/img/$image";
+ }elseif( file_exists(OC_App::getAppPath($app)."/img/$image" )){
+ return OC_App::getAppWebPath($app)."/img/$image";
}elseif( !empty( $app ) and file_exists( OC::$SERVERROOT."/themes/$theme/$app/img/$image" )){
return OC::$WEBROOT."/themes/$theme/$app/img/$image";
}elseif( !empty( $app ) and file_exists( OC::$SERVERROOT."/$app/img/$image" )){
@@ -174,10 +140,8 @@ class OC_Helper {
*/
public static function mimetypeIcon( $mimetype ){
$alias=array('application/xml'=>'code/xml');
-// echo $mimetype;
if(isset($alias[$mimetype])){
$mimetype=$alias[$mimetype];
-// echo $mimetype;
}
// Replace slash with a minus
$mimetype = str_replace( "/", "-", $mimetype );
@@ -344,18 +308,24 @@ class OC_Helper {
*/
static function getMimeType($path){
$isWrapped=(strpos($path,'://')!==false) and (substr($path,0,7)=='file://');
- $mimeType='application/octet-stream';
- if ($mimeType=='application/octet-stream') {
- self::$mimetypes = include('mimetypes.fixlist.php');
- $extension=strtolower(strrchr(basename($path), "."));
- $extension=substr($extension,1);//remove leading .
- $mimeType=(isset(self::$mimetypes[$extension]))?self::$mimetypes[$extension]:'application/octet-stream';
- }
if (@is_dir($path)) {
// directories are easy
return "httpd/unix-directory";
}
+
+ if(strpos($path,'.')){
+ //try to guess the type by the file extension
+ if(!self::$mimetypes || self::$mimetypes != include('mimetypes.list.php')){
+ self::$mimetypes=include('mimetypes.list.php');
+ }
+ $extension=strtolower(strrchr(basename($path), "."));
+ $extension=substr($extension,1);//remove leading .
+ $mimeType=(isset(self::$mimetypes[$extension]))?self::$mimetypes[$extension]:'application/octet-stream';
+ }else{
+ $mimeType='application/octet-stream';
+ }
+
if($mimeType=='application/octet-stream' and function_exists('finfo_open') and function_exists('finfo_file') and $finfo=finfo_open(FILEINFO_MIME)){
$info = @strtolower(finfo_file($finfo,$path));
if($info){
@@ -378,21 +348,12 @@ class OC_Helper {
//trim the character set from the end of the response
$mimeType=substr($reply,0,strrpos($reply,' '));
- //trim ;
+ //trim ;
if (strpos($mimeType, ';') !== false) {
$mimeType = strstr($mimeType, ';', true);
}
}
- if ($mimeType=='application/octet-stream') {
- // Fallback solution: (try to guess the type by the file extension
- if(!self::$mimetypes || self::$mimetypes != include('mimetypes.list.php')){
- self::$mimetypes=include('mimetypes.list.php');
- }
- $extension=strtolower(strrchr(basename($path), "."));
- $extension=substr($extension,1);//remove leading .
- $mimeType=(isset(self::$mimetypes[$extension]))?self::$mimetypes[$extension]:'application/octet-stream';
- }
return $mimeType;
}
@@ -556,40 +517,40 @@ class OC_Helper {
}
}
- /**
- * Adds a suffix to the name in case the file exists
- *
- * @param $path
- * @param $filename
- * @return string
- */
- public static function buildNotExistingFileName($path, $filename){
- if($path==='/'){
- $path='';
- }
- if ($pos = strrpos($filename, '.')) {
- $name = substr($filename, 0, $pos);
- $ext = substr($filename, $pos);
- } else {
- $name = $filename;
- }
-
- $newpath = $path . '/' . $filename;
- $newname = $filename;
- $counter = 2;
- while (OC_Filesystem::file_exists($newpath)) {
- $newname = $name . ' (' . $counter . ')' . $ext;
- $newpath = $path . '/' . $newname;
- $counter++;
- }
-
- return $newpath;
- }
-
+ /**
+ * Adds a suffix to the name in case the file exists
+ *
+ * @param $path
+ * @param $filename
+ * @return string
+ */
+ public static function buildNotExistingFileName($path, $filename){
+ if($path==='/'){
+ $path='';
+ }
+ if ($pos = strrpos($filename, '.')) {
+ $name = substr($filename, 0, $pos);
+ $ext = substr($filename, $pos);
+ } else {
+ $name = $filename;
+ }
+
+ $newpath = $path . '/' . $filename;
+ $newname = $filename;
+ $counter = 2;
+ while (OC_Filesystem::file_exists($newpath)) {
+ $newname = $name . ' (' . $counter . ')' . $ext;
+ $newpath = $path . '/' . $newname;
+ $counter++;
+ }
+
+ return $newpath;
+ }
+
/*
* checks if $sub is a subdirectory of $parent
- *
- * @param $sub
+ *
+ * @param $sub
* @param $parent
* @return bool
*/
@@ -619,4 +580,94 @@ class OC_Helper {
exit;*/
return false;
}
+
+ /**
+ * @brief Returns an array with all keys from input lowercased or uppercased. Numbered indices are left as is.
+ *
+ * @param $input The array to work on
+ * @param $case Either MB_CASE_UPPER or MB_CASE_LOWER (default)
+ * @param $encoding The encoding parameter is the character encoding. Defaults to UTF-8
+ * @return array
+ *
+ * Returns an array with all keys from input lowercased or uppercased. Numbered indices are left as is.
+ * based on http://www.php.net/manual/en/function.array-change-key-case.php#107715
+ *
+ */
+ public static function mb_array_change_key_case($input, $case = MB_CASE_LOWER, $encoding = 'UTF-8'){
+ $case = ($case != MB_CASE_UPPER) ? MB_CASE_LOWER : MB_CASE_UPPER;
+ $ret = array();
+ foreach ($input as $k => $v) {
+ $ret[mb_convert_case($k, $case, $encoding)] = $v;
+ }
+ return $ret;
+ }
+
+ /**
+ * @brief replaces a copy of string delimited by the start and (optionally) length parameters with the string given in replacement.
+ *
+ * @param $input The input string. .Opposite to the PHP build-in function does not accept an array.
+ * @param $replacement The replacement string.
+ * @param $start If start is positive, the replacing will begin at the start'th offset into string. If start is negative, the replacing will begin at the start'th character from the end of string.
+ * @param $length Length of the part to be replaced
+ * @param $encoding The encoding parameter is the character encoding. Defaults to UTF-8
+ * @return string
+ *
+ */
+ public static function mb_substr_replace($string, $replacement, $start, $length = null, $encoding = 'UTF-8') {
+ $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);
+
+ return $string;
+ }
+
+ /**
+ * @brief Replace all occurrences of the search string with the replacement string
+ *
+ * @param $search The value being searched for, otherwise known as the needle. String.
+ * @param $replace The replacement string.
+ * @param $subject The string or array being searched and replaced on, otherwise known as the haystack.
+ * @param $encoding The encoding parameter is the character encoding. Defaults to UTF-8
+ * @param $count If passed, this will be set to the number of replacements performed.
+ * @return string
+ *
+ */
+ public static function mb_str_replace($search, $replace, $subject, $encoding = 'UTF-8', &$count = null) {
+ $offset = -1;
+ $length = mb_strlen($search, $encoding);
+ while(($i = mb_strrpos($subject, $search, $offset, $encoding))) {
+ $subject = OC_Helper::mb_substr_replace($subject, $replace, $i, $length);
+ $offset = $i - mb_strlen($subject, $encoding) - 1;
+ $count++;
+ }
+ return $subject;
+ }
+
+ /**
+ * @brief performs a search in a nested array
+ * @param haystack the array to be searched
+ * @param needle the search string
+ * @param $index optional, only search this key name
+ * @return the key of the matching field, otherwise false
+ *
+ * performs a search in a nested array
+ *
+ * taken from http://www.php.net/manual/en/function.array-search.php#97645
+ */
+ public static function recursiveArraySearch($haystack, $needle, $index = null) {
+ $aIt = new RecursiveArrayIterator($haystack);
+ $it = new RecursiveIteratorIterator($aIt);
+
+ while($it->valid()) {
+ if (((isset($index) AND ($it->key() == $index)) OR (!isset($index))) AND ($it->current() == $needle)) {
+ return $aIt->key();
+ }
+
+ $it->next();
+ }
+
+ return false;
+ }
}
diff --git a/lib/image.php b/lib/image.php
index 4d1e7aa4bc7..90c64320a7c 100644
--- a/lib/image.php
+++ b/lib/image.php
@@ -23,12 +23,12 @@
//From user comments at http://dk2.php.net/manual/en/function.exif-imagetype.php
if ( ! function_exists( 'exif_imagetype' ) ) {
- function exif_imagetype ( $filename ) {
- if ( ( list($width, $height, $type, $attr) = getimagesize( $filename ) ) !== false ) {
- return $type;
- }
- return false;
- }
+ function exif_imagetype ( $filename ) {
+ if ( ( $info = getimagesize( $filename ) ) !== false ) {
+ return $info[2];
+ }
+ return false;
+ }
}
function ellipsis($str, $maxlen) {
@@ -66,7 +66,6 @@ class OC_Image {
public function __construct($imageref = null) {
//OC_Log::write('core',__METHOD__.'(): start', OC_Log::DEBUG);
if(!extension_loaded('gd') || !function_exists('gd_info')) {
- //if(!function_exists('imagecreatefromjpeg')) {
OC_Log::write('core',__METHOD__.'(): GD module not installed', OC_Log::ERROR);
return false;
}
@@ -108,6 +107,56 @@ class OC_Image {
}
/**
+ * @brief Returns the width when the image orientation is top-left.
+ * @returns int
+ */
+ public function widthTopLeft() {
+ $o = $this->getOrientation();
+ OC_Log::write('core','OC_Image->widthTopLeft() Orientation: '.$o, OC_Log::DEBUG);
+ switch($o) {
+ case -1:
+ case 1:
+ case 2: // Not tested
+ case 3:
+ case 4: // Not tested
+ return $this->width();
+ break;
+ case 5: // Not tested
+ case 6:
+ case 7: // Not tested
+ case 8:
+ return $this->height();
+ break;
+ }
+ return $this->width();
+ }
+
+ /**
+ * @brief Returns the height when the image orientation is top-left.
+ * @returns int
+ */
+ public function heightTopLeft() {
+ $o = $this->getOrientation();
+ OC_Log::write('core','OC_Image->heightTopLeft() Orientation: '.$o, OC_Log::DEBUG);
+ switch($o) {
+ case -1:
+ case 1:
+ case 2: // Not tested
+ case 3:
+ case 4: // Not tested
+ return $this->height();
+ break;
+ case 5: // Not tested
+ case 6:
+ case 7: // Not tested
+ case 8:
+ return $this->width();
+ break;
+ }
+ return $this->height();
+ }
+
+ /**
* @brief Outputs the image.
* @returns bool
*/
@@ -189,47 +238,66 @@ class OC_Image {
}
/**
- * @returns Returns a base64 encoded string suitable for embedding in a VCard.
+ * @returns Returns the raw image data.
*/
- function __toString() {
+ function data() {
ob_start();
$res = imagepng($this->resource);
if (!$res) {
- OC_Log::write('core','OC_Image->__toString. Error writing image',OC_Log::ERROR);
+ OC_Log::write('core','OC_Image->data. Error getting image data.',OC_Log::ERROR);
}
- return base64_encode(ob_get_clean());
+ return ob_get_clean();
+ }
+
+ /**
+ * @returns Returns a base64 encoded string suitable for embedding in a VCard.
+ */
+ function __toString() {
+ return base64_encode($this->data());
}
/**
* (I'm open for suggestions on better method name ;)
- * @brief Fixes orientation based on EXIF data.
- * @returns bool.
+ * @brief Get the orientation based on EXIF data.
+ * @returns The orientation or -1 if no EXIF data is available.
*/
- public function fixOrientation() {
+ public function getOrientation() {
if(!is_callable('exif_read_data')){
OC_Log::write('core','OC_Image->fixOrientation() Exif module not enabled.', OC_Log::DEBUG);
- return false;
+ return -1;
}
if(!$this->valid()) {
OC_Log::write('core','OC_Image->fixOrientation() No image loaded.', OC_Log::DEBUG);
- return false;
+ return -1;
}
if(is_null($this->filepath) || !is_readable($this->filepath)) {
OC_Log::write('core','OC_Image->fixOrientation() No readable file path set.', OC_Log::DEBUG);
- return false;
+ return -1;
}
$exif = @exif_read_data($this->filepath, 'IFD0');
if(!$exif) {
- return false;
+ return -1;
}
if(!isset($exif['Orientation'])) {
- return true; // Nothing to fix
+ return -1;
}
- $o = $exif['Orientation'];
+ return $exif['Orientation'];
+ }
+
+ /**
+ * (I'm open for suggestions on better method name ;)
+ * @brief Fixes orientation based on EXIF data.
+ * @returns bool.
+ */
+ public function fixOrientation() {
+ $o = $this->getOrientation();
OC_Log::write('core','OC_Image->fixOrientation() Orientation: '.$o, OC_Log::DEBUG);
$rotate = 0;
$flip = false;
switch($o) {
+ case -1:
+ return false; //Nothing to fix
+ break;
case 1:
$rotate = 0;
$flip = false;
@@ -295,7 +363,7 @@ class OC_Image {
public function load($imageref) {
if(is_resource($imageref)) {
if(get_resource_type($imageref) == 'gd') {
- $this->resource = $res;
+ $this->resource = $imageref;
return $this->resource;
} elseif(in_array(get_resource_type($imageref), array('file','stream'))) {
return $this->loadFromFileHandle($imageref);
@@ -581,9 +649,6 @@ class OC_Image {
OC_Log::write('core',__METHOD__.'(): No image loaded', OC_Log::ERROR);
return false;
}
- $width_orig=imageSX($this->resource);
- $height_orig=imageSY($this->resource);
- //OC_Log::write('core',__METHOD__.'(): Original size: '.$width_orig.'x'.$height_orig, OC_Log::DEBUG);
$process = imagecreatetruecolor($w, $h);
if ($process == false) {
OC_Log::write('core',__METHOD__.'(): Error creating true color image',OC_Log::ERROR);
diff --git a/lib/installer.php b/lib/installer.php
index c5ca0883d76..b8a3226aa0b 100644
--- a/lib/installer.php
+++ b/lib/installer.php
@@ -3,7 +3,7 @@
* ownCloud
*
* @author Robin Appelman
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @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
@@ -60,7 +60,7 @@ class OC_Installer{
OC_Log::write('core','No source specified when installing app',OC_Log::ERROR);
return false;
}
-
+
//download the file if necesary
if($data['source']=='http'){
$path=OC_Helper::tmpFile();
@@ -76,7 +76,7 @@ class OC_Installer{
}
$path=$data['path'];
}
-
+
//detect the archive type
$mime=OC_Helper::getMimeType($path);
if($mime=='application/zip'){
@@ -89,7 +89,7 @@ class OC_Installer{
OC_Log::write('core','Archives of type '.$mime.' are not supported',OC_Log::ERROR);
return false;
}
-
+
//extract the archive in a temporary folder
$extractDir=OC_Helper::tmpFolder();
OC_Helper::rmdirr($extractDir);
@@ -104,7 +104,7 @@ class OC_Installer{
}
return false;
}
-
+
//load the info.xml file of the app
if(!is_file($extractDir.'/appinfo/info.xml')){
//try to find it in a subdir
@@ -126,21 +126,19 @@ class OC_Installer{
return false;
}
$info=OC_App::getAppInfo($extractDir.'/appinfo/info.xml',true);
- $basedir=OC::$APPSROOT.'/apps/'.$info['id'];
-
- // check the code for not allowed calls
- if(!OC_Installer::checkCode($info['id'],$extractDir)){
+ // check the code for not allowed calls
+ if(!OC_Installer::checkCode($info['id'],$extractDir)){
OC_Log::write('core','App can\'t be installed because of not allowed code in the App',OC_Log::ERROR);
OC_Helper::rmdirr($extractDir);
- return false;
+ return false;
}
- // check if the app is compatible with this version of ownCloud
- $version=OC_Util::getVersion();
- if(!isset($info['require']) or ($version[0]>$info['require'])){
+ // check if the app is compatible with this version of ownCloud
+ $version=OC_Util::getVersion();
+ if(!isset($info['require']) or ($version[0]>$info['require'])){
OC_Log::write('core','App can\'t be installed because it is not compatible with this version of ownCloud',OC_Log::ERROR);
OC_Helper::rmdirr($extractDir);
- return false;
+ return false;
}
//check if an app with the same id is already installed
@@ -153,6 +151,7 @@ class OC_Installer{
return false;
}
+ $basedir=OC_App::getInstallPath().'/'.$info['id'];
//check if the destination directory already exists
if(is_dir($basedir)){
OC_Log::write('core','App directory already exists',OC_Log::WARN);
@@ -162,11 +161,11 @@ class OC_Installer{
}
return false;
}
-
+
if(isset($data['pretent']) and $data['pretent']==true){
return false;
}
-
+
//copy the app to the correct place
if(@!mkdir($basedir)){
OC_Log::write('core','Can\'t create app folder. Please fix permissions. ('.$basedir.')',OC_Log::ERROR);
@@ -177,34 +176,34 @@ class OC_Installer{
return false;
}
OC_Helper::copyr($extractDir,$basedir);
-
+
//remove temporary files
OC_Helper::rmdirr($extractDir);
-
+
//install the database
if(is_file($basedir.'/appinfo/database.xml')){
OC_DB::createDbFromStructure($basedir.'/appinfo/database.xml');
}
-
+
//run appinfo/install.php
if((!isset($data['noinstall']) or $data['noinstall']==false) and file_exists($basedir.'/appinfo/install.php')){
include($basedir.'/appinfo/install.php');
}
-
+
//set the installed version
OC_Appconfig::setValue($info['id'],'installed_version',OC_App::getAppVersion($info['id']));
OC_Appconfig::setValue($info['id'],'enabled','no');
//set remote/public handelers
foreach($info['remote'] as $name=>$path){
- OCP\CONFIG::setAppValue('core', 'remote_'.$name, '/apps/'.$info['id'].'/'.$path);
+ OCP\CONFIG::setAppValue('core', 'remote_'.$name, $info['id'].'/'.$path);
}
foreach($info['public'] as $name=>$path){
- OCP\CONFIG::setAppValue('core', 'public_'.$name, '/apps/'.$info['id'].'/'.$path);
+ OCP\CONFIG::setAppValue('core', 'public_'.$name, $info['id'].'/'.$path);
}
OC_App::setAppTypes($info['id']);
-
+
return $info['id'];
}
@@ -287,22 +286,24 @@ class OC_Installer{
* This function installs all apps found in the 'apps' directory that should be enabled by default;
*/
public static function installShippedApps(){
- if($dir = opendir( OC::$APPSROOT."/apps" )){
- while( false !== ( $filename = readdir( $dir ))){
- if( substr( $filename, 0, 1 ) != '.' and is_dir(OC::$APPSROOT."/apps/$filename") ){
- if( file_exists( OC::$APPSROOT."/apps/$filename/appinfo/app.php" )){
- if(!OC_Installer::isInstalled($filename)){
- $info=OC_App::getAppInfo($filename);
- $enabled = isset($info['default_enable']);
- if( $enabled ){
- OC_Installer::installShippedApp($filename);
- OC_Appconfig::setValue($filename,'enabled','yes');
+ foreach(OC::$APPSROOTS as $app_dir) {
+ if($dir = opendir( $app_dir['path'] )){
+ while( false !== ( $filename = readdir( $dir ))){
+ if( substr( $filename, 0, 1 ) != '.' and is_dir($app_dir['path']."/$filename") ){
+ if( file_exists( $app_dir['path']."/$filename/appinfo/app.php" )){
+ if(!OC_Installer::isInstalled($filename)){
+ $info=OC_App::getAppInfo($filename);
+ $enabled = isset($info['default_enable']);
+ if( $enabled ){
+ OC_Installer::installShippedApp($filename);
+ OC_Appconfig::setValue($filename,'enabled','yes');
+ }
}
}
}
}
+ closedir( $dir );
}
- closedir( $dir );
}
}
@@ -313,37 +314,37 @@ class OC_Installer{
*/
public static function installShippedApp($app){
//install the database
- if(is_file(OC::$APPSROOT."/apps/$app/appinfo/database.xml")){
- OC_DB::createDbFromStructure(OC::$APPSROOT."/apps/$app/appinfo/database.xml");
+ if(is_file(OC_App::getAppPath($app)."/appinfo/database.xml")){
+ OC_DB::createDbFromStructure(OC_App::getAppPath($app)."/appinfo/database.xml");
}
//run appinfo/install.php
- if(is_file(OC::$APPSROOT."/apps/$app/appinfo/install.php")){
- include(OC::$APPSROOT."/apps/$app/appinfo/install.php");
+ if(is_file(OC_App::getAppPath($app)."/appinfo/install.php")){
+ include(OC_App::getAppPath($app)."/appinfo/install.php");
}
$info=OC_App::getAppInfo($app);
OC_Appconfig::setValue($app,'installed_version',OC_App::getAppVersion($app));
-
+
//set remote/public handelers
foreach($info['remote'] as $name=>$path){
- OCP\CONFIG::setAppValue('core', 'remote_'.$name, '/apps/'.$app.'/'.$path);
+ OCP\CONFIG::setAppValue('core', 'remote_'.$name, $app.'/'.$path);
}
foreach($info['public'] as $name=>$path){
- OCP\CONFIG::setAppValue('core', 'public_'.$name, '/apps/'.$app.'/'.$path);
+ OCP\CONFIG::setAppValue('core', 'public_'.$name, $app.'/'.$path);
}
-
+
OC_App::setAppTypes($info['id']);
-
- return $info;
+
+ return $info['id'];
}
- /**
- * check the code of an app with some static code checks
- * @param string $folder the folder of the app to check
- * @returns true for app is o.k. and false for app is not o.k.
- */
- public static function checkCode($appname,$folder){
+ /**
+ * check the code of an app with some static code checks
+ * @param string $folder the folder of the app to check
+ * @returns true for app is o.k. and false for app is not o.k.
+ */
+ public static function checkCode($appname,$folder){
$blacklist=array(
'exec(',
@@ -354,7 +355,7 @@ class OC_Installer{
);
// is the code checker enabled?
- if(OC_Config::getValue('appcodechecker', false)){
+ if(OC_Config::getValue('appcodechecker', false)){
// check if grep is installed
$grep = exec('which grep');
@@ -374,11 +375,9 @@ class OC_Installer{
}
}
return true;
-
+
}else{
- return true;
+ return true;
}
- }
-
-
+ }
}
diff --git a/lib/json.php b/lib/json.php
index 78fbf564366..3d9d5c96fa3 100644
--- a/lib/json.php
+++ b/lib/json.php
@@ -64,6 +64,18 @@ class OC_JSON{
exit();
}
}
+
+ /**
+ * Check if the user is a subadmin, send json error msg if not
+ */
+ public static function checkSubAdminUser(){
+ self::checkLoggedIn();
+ if(!OC_Group::inGroup(OC_User::getUser(),'admin') && !OC_SubAdmin::isSubAdmin(OC_User::getUser())){
+ $l = OC_L10N::get('core');
+ self::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
+ exit();
+ }
+ }
/**
* Send json error msg
@@ -82,14 +94,24 @@ class OC_JSON{
}
/**
+ * Convert OC_L10N_String to string, for use in json encodings
+ */
+ protected static function to_string(&$value){
+ if ($value instanceof OC_L10N_String) {
+ $value = (string)$value;
+ }
+ }
+
+ /**
* Encode and print $data in json format
*/
public static function encodedPrint($data,$setContentType=true){
- // Disable mimesniffing, don't move this to setContentTypeHeader!
- header( 'X-Content-Type-Options: nosniff' );
- if($setContentType){
- self::setContentTypeHeader();
- }
- echo json_encode($data);
+ // Disable mimesniffing, don't move this to setContentTypeHeader!
+ header( 'X-Content-Type-Options: nosniff' );
+ if($setContentType){
+ self::setContentTypeHeader();
+ }
+ array_walk_recursive($data, array('OC_JSON', 'to_string'));
+ echo json_encode($data);
}
}
diff --git a/lib/l10n.php b/lib/l10n.php
index d47637d23de..e7f5ffea0e4 100644
--- a/lib/l10n.php
+++ b/lib/l10n.php
@@ -3,7 +3,7 @@
* ownCloud
*
* @author Jakob Sack
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @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
@@ -40,6 +40,16 @@ class OC_L10N{
protected static $language = '';
/**
+ * App of this object
+ */
+ protected $app;
+
+ /**
+ * Language of this object
+ */
+ protected $lang;
+
+ /**
* Translations
*/
private $translations = array();
@@ -77,6 +87,17 @@ class OC_L10N{
* language.
*/
public function __construct($app, $lang = null){
+ $this->app = $app;
+ $this->lang = $lang;
+ }
+
+ protected function init(){
+ if ($this->app === true) {
+ return;
+ }
+ $app = $this->app;
+ $lang = $this->lang;
+ $this->app = true;
// Find the right language
if(is_null($lang)){
$lang = self::findLanguage($app);
@@ -92,13 +113,13 @@ class OC_L10N{
$i18ndir = self::findI18nDir($app);
// Localization is in /l10n, Texts are in $i18ndir
// (Just no need to define date/time format etc. twice)
- if((OC_Helper::issubdirectory($i18ndir.$lang.'.php', OC::$APPSROOT."/apps") || OC_Helper::issubdirectory($i18ndir.$lang.'.php', OC::$SERVERROOT.'/core/l10n/') || OC_Helper::issubdirectory($i18ndir.$lang.'.php', OC::$SERVERROOT.'/settings')) && file_exists($i18ndir.$lang.'.php')) {
+ if((OC_Helper::issubdirectory($i18ndir.$lang.'.php', OC_App::getAppPath($app).'/l10n/') || OC_Helper::issubdirectory($i18ndir.$lang.'.php', OC::$SERVERROOT.'/core/l10n/') || OC_Helper::issubdirectory($i18ndir.$lang.'.php', OC::$SERVERROOT.'/settings')) && file_exists($i18ndir.$lang.'.php')) {
// Include the file, save the data from $CONFIG
- include($i18ndir.$lang.'.php');
+ include(strip_tags($i18ndir).strip_tags($lang).'.php');
if(isset($TRANSLATIONS) && is_array($TRANSLATIONS)){
$this->translations = $TRANSLATIONS;
}
- }
+ }
if(file_exists(OC::$SERVERROOT.'/core/l10n/l10n-'.$lang.'.php')){
// Include the file, save the data from $CONFIG
@@ -123,10 +144,7 @@ class OC_L10N{
* returned.
*/
public function t($text, $parameters = array()){
- if(array_key_exists($text, $this->translations)){
- return vsprintf($this->translations[$text], $parameters);
- }
- return vsprintf($text, $parameters);
+ return new OC_L10N_String($this, $text, $parameters);
}
/**
@@ -136,11 +154,18 @@ class OC_L10N{
*
* Returns the translation. If no translation is found, $textArray will be
* returned.
+ *
+ *
+ * @deprecated deprecated since ownCloud version 5.0
+ * This method will probably be removed with ownCloud 6.0
+ *
+ *
*/
public function tA($textArray){
+ OC_Log::write('core', 'DEPRECATED: the method tA is deprecated and will be removed soon.',OC_Log::WARN);
$result = array();
foreach($textArray as $key => $text){
- $result[$key] = $this->t($text);
+ $result[$key] = (string)$this->t($text);
}
return $result;
}
@@ -152,6 +177,7 @@ class OC_L10N{
* Returns an associative array with all translations
*/
public function getTranslations(){
+ $this->init();
return $this->translations;
}
@@ -178,6 +204,7 @@ class OC_L10N{
* - params: timestamp (int/string)
*/
public function l($type, $data){
+ $this->init();
switch($type){
// If you add something don't forget to add it to $localizations
// at the top of the page
@@ -224,23 +251,29 @@ class OC_L10N{
return self::$language;
}
- $available = array();
- if(is_array($app)){
- $available = $app;
- }
- else{
- $available=self::findAvailableLanguages($app);
- }
if(OC_User::getUser() && OC_Preferences::getValue(OC_User::getUser(), 'core', 'lang')){
$lang = OC_Preferences::getValue(OC_User::getUser(), 'core', 'lang');
self::$language = $lang;
- if(array_search($lang, $available) !== false){
+ if(is_array($app)){
+ $available = $app;
+ $lang_exists = array_search($lang, $available) !== false;
+ }
+ else {
+ $lang_exists = self::languageExists($app, $lang);
+ }
+ if($lang_exists){
return $lang;
}
}
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
$accepted_languages = preg_split('/,\s*/', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
+ if(is_array($app)){
+ $available = $app;
+ }
+ else{
+ $available = self::findAvailableLanguages($app);
+ }
foreach($accepted_languages as $i){
$temp = explode(';', $i);
if(array_search($temp[0], $available) !== false){
@@ -263,8 +296,8 @@ class OC_L10N{
$i18ndir = OC::$SERVERROOT.'/core/l10n/';
if($app != ''){
// Check if the app is in the app folder
- if(file_exists(OC::$APPSROOT.'/apps/'.$app.'/l10n/')){
- $i18ndir = OC::$APPSROOT.'/apps/'.$app.'/l10n/';
+ if(file_exists(OC_App::getAppPath($app).'/l10n/')){
+ $i18ndir = OC_App::getAppPath($app).'/l10n/';
}
else{
$i18ndir = OC::$SERVERROOT.'/'.$app.'/l10n/';
@@ -292,4 +325,15 @@ class OC_L10N{
}
return $available;
}
+
+ public static function languageExists($app, $lang){
+ if ($lang == 'en'){//english is always available
+ return true;
+ }
+ $dir = self::findI18nDir($app);
+ if(is_dir($dir)){
+ return file_exists($dir.'/'.$lang.'.php');
+ }
+ return false;
+ }
}
diff --git a/lib/l10n/ca.php b/lib/l10n/ca.php
new file mode 100644
index 00000000000..8e4c30caec9
--- /dev/null
+++ b/lib/l10n/ca.php
@@ -0,0 +1,25 @@
+<?php $TRANSLATIONS = array(
+"Help" => "Ajuda",
+"Personal" => "Personal",
+"Settings" => "Configuració",
+"Users" => "Usuaris",
+"Apps" => "Aplicacions",
+"Admin" => "Administració",
+"ZIP download is turned off." => "La baixada en ZIP està desactivada.",
+"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.",
+"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.",
+"seconds ago" => "segons enrere",
+"1 minute ago" => "fa 1 minut",
+"%d minutes ago" => "fa %d minuts",
+"today" => "avui",
+"yesterday" => "ahir",
+"%d days ago" => "fa %d dies",
+"last month" => "el mes passat",
+"months ago" => "mesos enrere",
+"last year" => "l'any passat",
+"years ago" => "fa anys"
+);
diff --git a/lib/l10n/cs_CZ.php b/lib/l10n/cs_CZ.php
new file mode 100644
index 00000000000..933dbe541f5
--- /dev/null
+++ b/lib/l10n/cs_CZ.php
@@ -0,0 +1,25 @@
+<?php $TRANSLATIONS = array(
+"Help" => "Nápověda",
+"Personal" => "Osobní",
+"Settings" => "Nastavení",
+"Users" => "Uživatelé",
+"Apps" => "Aplikace",
+"Admin" => "Admin",
+"ZIP download is turned off." => "Stahování ZIPu je vypnuto.",
+"Files need to be downloaded one by one." => "Soubory je nutno stahovat samostatnÄ›.",
+"Back to Files" => "Zpět k souborům",
+"Selected files too large to generate zip file." => "Vybarné soubory jsou pro vytvoření zipu příliš velké.",
+"Application is not enabled" => "Aplikace není povolena",
+"Authentication error" => "Chyba autorizace",
+"Token expired. Please reload page." => "Realce expirovala. Obnovte prosím stranu.",
+"seconds ago" => "před vteřinami",
+"1 minute ago" => "před 1 minutou",
+"%d minutes ago" => "před %d minutami",
+"today" => "dnes",
+"yesterday" => "vÄera",
+"%d days ago" => "před %d dny",
+"last month" => "minulý měsíc",
+"months ago" => "před měsíci",
+"last year" => "loni",
+"years ago" => "před lety"
+);
diff --git a/lib/l10n/de.php b/lib/l10n/de.php
new file mode 100644
index 00000000000..e77ec97df75
--- /dev/null
+++ b/lib/l10n/de.php
@@ -0,0 +1,25 @@
+<?php $TRANSLATIONS = array(
+"Help" => "Hilfe",
+"Personal" => "Persönlich",
+"Settings" => "Einstellungen",
+"Users" => "Benutzer",
+"Apps" => "Apps",
+"Admin" => "Administrator",
+"ZIP download is turned off." => "Der ZIP-Download ist deaktiviert.",
+"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.",
+"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.",
+"seconds ago" => "Vor wenigen Sekunden",
+"1 minute ago" => "Vor einer Minute",
+"%d minutes ago" => "Vor %d Minuten",
+"today" => "Heute",
+"yesterday" => "Gestern",
+"%d days ago" => "Vor %d Tagen",
+"last month" => "Letzten Monat",
+"months ago" => "Vor Monaten",
+"last year" => "Letztes Jahr",
+"years ago" => "Vor Jahren"
+);
diff --git a/lib/l10n/el.php b/lib/l10n/el.php
new file mode 100644
index 00000000000..d9f272258e1
--- /dev/null
+++ b/lib/l10n/el.php
@@ -0,0 +1,25 @@
+<?php $TRANSLATIONS = array(
+"Help" => "Βοήθεια",
+"Personal" => "ΠÏοσωπικά",
+"Settings" => "Ρυθμίσεις",
+"Users" => "ΧÏήστες",
+"Apps" => "ΕφαÏμογές",
+"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.",
+"Application is not enabled" => "Δεν ενεÏγοποιήθηκε η εφαÏμογή",
+"Authentication error" => "Σφάλμα πιστοποίησης",
+"Token expired. Please reload page." => "Το αναγνωÏιστικό έληξε. ΠαÏακαλώ επανα-φοÏτώστε την σελίδα.",
+"seconds ago" => "δευτεÏόλεπτα Ï€Ïιν",
+"1 minute ago" => "1 λεπτό Ï€Ïιν",
+"%d minutes ago" => "%d λεπτά Ï€Ïιν",
+"today" => "σήμεÏα",
+"yesterday" => "χθές",
+"%d days ago" => "%d ημέÏες Ï€Ïιν",
+"last month" => "τον Ï€ÏοηγοÏμενο μήνα",
+"months ago" => "μήνες Ï€Ïιν",
+"last year" => "τον Ï€ÏοηγοÏμενο χÏόνο",
+"years ago" => "χÏόνια Ï€Ïιν"
+);
diff --git a/lib/l10n/eo.php b/lib/l10n/eo.php
new file mode 100644
index 00000000000..96bcb06a8d7
--- /dev/null
+++ b/lib/l10n/eo.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Help" => "Helpo",
+"Personal" => "Persona",
+"Settings" => "Agordo",
+"Users" => "Uzantoj",
+"Apps" => "Aplikaĵoj",
+"ZIP download is turned off." => "ZIP-elÅuto estas malkapabligita.",
+"Files need to be downloaded one by one." => "Dosieroj devas elÅutiÄi unuope.",
+"Back to Files" => "Reen al la dosieroj",
+"Selected files too large to generate zip file." => "La elektitaj dosieroj tro grandas por genero de ZIP-dosiero.",
+"Application is not enabled" => "La aplikaĵo ne estas kapabligita",
+"Authentication error" => "AÅ­tentiga eraro",
+"Token expired. Please reload page." => "Ä´etono eksvalidiÄis. Bonvolu reÅargi la paÄon.",
+"seconds ago" => "sekundojn antaÅ­e",
+"1 minute ago" => "antaÅ­ 1 minuto",
+"%d minutes ago" => "antaÅ­ %d minutoj",
+"today" => "hodiaÅ­",
+"yesterday" => "hieraÅ­",
+"%d days ago" => "antaÅ­ %d tagoj",
+"last month" => "lasta monato",
+"months ago" => "monatojn antaÅ­e",
+"last year" => "lasta jaro",
+"years ago" => "jarojn antaÅ­e"
+);
diff --git a/lib/l10n/es.php b/lib/l10n/es.php
new file mode 100644
index 00000000000..174fe0720fd
--- /dev/null
+++ b/lib/l10n/es.php
@@ -0,0 +1,25 @@
+<?php $TRANSLATIONS = array(
+"Help" => "Ayuda",
+"Personal" => "Personal",
+"Settings" => "Ajustes",
+"Users" => "Usuarios",
+"Apps" => "Aplicaciones",
+"Admin" => "Administración",
+"ZIP download is turned off." => "La descarga en ZIP está desactivada.",
+"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.",
+"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.",
+"seconds ago" => "hace segundos",
+"1 minute ago" => "hace 1 minuto",
+"%d minutes ago" => "hace %d minutos",
+"today" => "hoy",
+"yesterday" => "ayer",
+"%d days ago" => "hace %d días",
+"last month" => "este mes",
+"months ago" => "hace meses",
+"last year" => "este año",
+"years ago" => "hace años"
+);
diff --git a/lib/l10n/et_EE.php b/lib/l10n/et_EE.php
new file mode 100644
index 00000000000..d8da90a3cbf
--- /dev/null
+++ b/lib/l10n/et_EE.php
@@ -0,0 +1,25 @@
+<?php $TRANSLATIONS = array(
+"Help" => "Abiinfo",
+"Personal" => "Isiklik",
+"Settings" => "Seaded",
+"Users" => "Kasutajad",
+"Apps" => "Rakendused",
+"Admin" => "Admin",
+"ZIP download is turned off." => "ZIP-ina allalaadimine on välja lülitatud.",
+"Files need to be downloaded one by one." => "Failid tuleb alla laadida ükshaaval.",
+"Back to Files" => "Tagasi failide juurde",
+"Selected files too large to generate zip file." => "Valitud failid on ZIP-faili loomiseks liiga suured.",
+"Application is not enabled" => "Rakendus pole sisse lülitatud",
+"Authentication error" => "Autentimise viga",
+"Token expired. Please reload page." => "Kontrollkood aegus. Paelun lae leht uuesti.",
+"seconds ago" => "sekundit tagasi",
+"1 minute ago" => "1 minut tagasi",
+"%d minutes ago" => "%d minutit tagasi",
+"today" => "täna",
+"yesterday" => "eile",
+"%d days ago" => "%d päeva tagasi",
+"last month" => "eelmisel kuul",
+"months ago" => "kuud tagasi",
+"last year" => "eelmisel aastal",
+"years ago" => "aastat tagasi"
+);
diff --git a/lib/l10n/fa.php b/lib/l10n/fa.php
new file mode 100644
index 00000000000..3579329820f
--- /dev/null
+++ b/lib/l10n/fa.php
@@ -0,0 +1,16 @@
+<?php $TRANSLATIONS = array(
+"Help" => "راه‌نما",
+"Personal" => "شخصی",
+"Settings" => "تنظیمات",
+"Users" => "کاربران",
+"Admin" => "مدیر",
+"seconds ago" => "ثانیه‌ها پیش",
+"1 minute ago" => "1 دقیقه پیش",
+"%d minutes ago" => "%d دقیقه پیش",
+"today" => "امروز",
+"yesterday" => "دیروز",
+"last month" => "ماه قبل",
+"months ago" => "ماه‌های قبل",
+"last year" => "سال قبل",
+"years ago" => "سال‌های قبل"
+);
diff --git a/lib/l10n/fi_FI.php b/lib/l10n/fi_FI.php
new file mode 100644
index 00000000000..dda2c760373
--- /dev/null
+++ b/lib/l10n/fi_FI.php
@@ -0,0 +1,25 @@
+<?php $TRANSLATIONS = array(
+"Help" => "Ohje",
+"Personal" => "Henkilökohtainen",
+"Settings" => "Asetukset",
+"Users" => "Käyttäjät",
+"Apps" => "Sovellukset",
+"Admin" => "Ylläpitäjä",
+"ZIP download is turned off." => "ZIP-lataus on poistettu käytöstä.",
+"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.",
+"Application is not enabled" => "Sovellusta ei ole otettu käyttöön",
+"Authentication error" => "Todennusvirhe",
+"Token expired. Please reload page." => "Valtuutus vanheni. Lataa sivu uudelleen.",
+"seconds ago" => "sekuntia sitten",
+"1 minute ago" => "1 minuutti sitten",
+"%d minutes ago" => "%d minuuttia sitten",
+"today" => "tänään",
+"yesterday" => "eilen",
+"%d days ago" => "%d päivää sitten",
+"last month" => "viime kuussa",
+"months ago" => "kuukautta sitten",
+"last year" => "viime vuonna",
+"years ago" => "vuotta sitten"
+);
diff --git a/lib/l10n/fr.php b/lib/l10n/fr.php
new file mode 100644
index 00000000000..c674b79b959
--- /dev/null
+++ b/lib/l10n/fr.php
@@ -0,0 +1,25 @@
+<?php $TRANSLATIONS = array(
+"Help" => "Aide",
+"Personal" => "Personnel",
+"Settings" => "Paramètres",
+"Users" => "Utilisateurs",
+"Apps" => "Applications",
+"Admin" => "Administration",
+"ZIP download is turned off." => "Téléchargement ZIP désactivé.",
+"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.",
+"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.",
+"seconds ago" => "à l'instant",
+"1 minute ago" => "il y a 1 minute",
+"%d minutes ago" => "il y a %d minutes",
+"today" => "aujourd'hui",
+"yesterday" => "hier",
+"%d days ago" => "il y a %d jours",
+"last month" => "le mois dernier",
+"months ago" => "il y a plusieurs mois",
+"last year" => "l'année dernière",
+"years ago" => "il y a plusieurs années"
+);
diff --git a/lib/l10n/it.php b/lib/l10n/it.php
new file mode 100644
index 00000000000..2c88818dc6c
--- /dev/null
+++ b/lib/l10n/it.php
@@ -0,0 +1,25 @@
+<?php $TRANSLATIONS = array(
+"Help" => "Aiuto",
+"Personal" => "Personale",
+"Settings" => "Impostazioni",
+"Users" => "Utenti",
+"Apps" => "Applicazioni",
+"Admin" => "Admin",
+"ZIP download is turned off." => "Lo scaricamento in formato ZIP è stato disabilitato.",
+"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.",
+"Application is not enabled" => "L'applicazione non è abilitata",
+"Authentication error" => "Errore di autenticazione",
+"Token expired. Please reload page." => "Token scaduto. Ricarica la pagina.",
+"seconds ago" => "secondi fa",
+"1 minute ago" => "1 minuto fa",
+"%d minutes ago" => "%d minuti fa",
+"today" => "oggi",
+"yesterday" => "ieri",
+"%d days ago" => "%d giorni fa",
+"last month" => "il mese scorso",
+"months ago" => "mesi fa",
+"last year" => "l'anno scorso",
+"years ago" => "anni fa"
+);
diff --git a/lib/l10n/lt_LT.php b/lib/l10n/lt_LT.php
new file mode 100644
index 00000000000..c6702a62287
--- /dev/null
+++ b/lib/l10n/lt_LT.php
@@ -0,0 +1,21 @@
+<?php $TRANSLATIONS = array(
+"Help" => "Pagalba",
+"Personal" => "Asmeniniai",
+"Settings" => "Nustatymai",
+"Users" => "Vartotojai",
+"Apps" => "Programos",
+"Admin" => "Administravimas",
+"ZIP download is turned off." => "ZIP atsisiuntimo galimybė yra išjungta.",
+"Files need to be downloaded one by one." => "Failai turi bÅ«ti parsiunÄiami vienas po kito.",
+"Back to Files" => "Atgal į Failus",
+"Selected files too large to generate zip file." => "Pasirinkti failai per dideli archyvavimui į ZIP.",
+"Application is not enabled" => "Programa neįjungta",
+"Authentication error" => "Autentikacijos klaida",
+"1 minute ago" => "prieš 1 minutę",
+"%d minutes ago" => "prieÅ¡ %d minuÄių",
+"today" => "Å¡iandien",
+"yesterday" => "vakar",
+"%d days ago" => "prieš %d dienų",
+"last month" => "praėjusį mėnesį",
+"last year" => "pereitais metais"
+);
diff --git a/lib/l10n/nb_NO.php b/lib/l10n/nb_NO.php
new file mode 100644
index 00000000000..af9503b7bf4
--- /dev/null
+++ b/lib/l10n/nb_NO.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Help" => "Hjelp",
+"Personal" => "Personlig",
+"Settings" => "Innstillinger",
+"Users" => "Brukere",
+"Apps" => "Apper",
+"Admin" => "Admin",
+"ZIP download is turned off." => "ZIP-nedlasting av avslått",
+"Files need to be downloaded one by one." => "Filene må lastes ned en om gangen",
+"Back to Files" => "Tilbake til filer",
+"Selected files too large to generate zip file." => "De valgte filene er for store til å kunne generere ZIP-fil",
+"Application is not enabled" => "Applikasjon er ikke påslått",
+"Authentication error" => "Autentiseringsfeil",
+"seconds ago" => "sekunder siden",
+"1 minute ago" => "1 minuitt siden",
+"%d minutes ago" => "%d minutter siden",
+"today" => "i dag",
+"yesterday" => "i går",
+"%d days ago" => "%d dager siden",
+"last month" => "forrige måned",
+"months ago" => "måneder siden",
+"last year" => "i fjor",
+"years ago" => "Ã¥r siden"
+);
diff --git a/lib/l10n/sl.php b/lib/l10n/sl.php
new file mode 100644
index 00000000000..fad16417253
--- /dev/null
+++ b/lib/l10n/sl.php
@@ -0,0 +1,25 @@
+<?php $TRANSLATIONS = array(
+"Help" => "PomoÄ",
+"Personal" => "Osebno",
+"Settings" => "Nastavitve",
+"Users" => "Uporabniki",
+"Apps" => "Aplikacije",
+"Admin" => "Skrbnik",
+"ZIP download is turned off." => "ZIP prenos je onemogoÄen.",
+"Files need to be downloaded one by one." => "Datoteke morajo biti prenešene posamezno.",
+"Back to Files" => "Nazaj na datoteke",
+"Selected files too large to generate zip file." => "Izbrane datoteke so prevelike, da bi lahko ustvarili zip datoteko.",
+"Application is not enabled" => "Aplikacija ni omogoÄena",
+"Authentication error" => "Napaka overitve",
+"Token expired. Please reload page." => "Žeton je potekel. Prosimo, Äe spletno stran znova naložite.",
+"seconds ago" => "sekund nazaj",
+"1 minute ago" => "pred minuto",
+"%d minutes ago" => "pred %d minutami",
+"today" => "danes",
+"yesterday" => "vÄeraj",
+"%d days ago" => "pred %d dnevi",
+"last month" => "prejšnji mesec",
+"months ago" => "mesecev nazaj",
+"last year" => "lani",
+"years ago" => "let nazaj"
+);
diff --git a/lib/l10n/string.php b/lib/l10n/string.php
new file mode 100644
index 00000000000..4769790a16d
--- /dev/null
+++ b/lib/l10n/string.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class OC_L10N_String{
+ protected $l10n;
+ public function __construct($l10n, $text, $parameters){
+ $this->l10n = $l10n;
+ $this->text = $text;
+ $this->parameters = $parameters;
+
+ }
+
+ public function __toString(){
+ $translations = $this->l10n->getTranslations();
+ if(array_key_exists($this->text, $translations)){
+ return vsprintf($translations[$this->text], $this->parameters);
+ }
+ return vsprintf($this->text, $this->parameters);
+ }
+}
diff --git a/lib/l10n/sv.php b/lib/l10n/sv.php
new file mode 100644
index 00000000000..cff3a63c442
--- /dev/null
+++ b/lib/l10n/sv.php
@@ -0,0 +1,25 @@
+<?php $TRANSLATIONS = array(
+"Help" => "Hjälp",
+"Personal" => "Personligt",
+"Settings" => "Inställningar",
+"Users" => "Användare",
+"Apps" => "Program",
+"Admin" => "Admin",
+"ZIP download is turned off." => "Nerladdning av ZIP är avstängd.",
+"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.",
+"Application is not enabled" => "Applikationen är inte aktiverad",
+"Authentication error" => "Fel vid autentisering",
+"Token expired. Please reload page." => "Ogiltig token. Ladda om sidan.",
+"seconds ago" => "sekunder sedan",
+"1 minute ago" => "1 minut sedan",
+"%d minutes ago" => "%d minuter sedan",
+"today" => "idag",
+"yesterday" => "igår",
+"%d days ago" => "%d dagar sedan",
+"last month" => "förra månaden",
+"months ago" => "månader sedan",
+"last year" => "förra året",
+"years ago" => "Ã¥r sedan"
+);
diff --git a/lib/l10n/th_TH.php b/lib/l10n/th_TH.php
new file mode 100644
index 00000000000..cb2610fa204
--- /dev/null
+++ b/lib/l10n/th_TH.php
@@ -0,0 +1,25 @@
+<?php $TRANSLATIONS = array(
+"Help" => "ช่วยเหลือ",
+"Personal" => "ส่วนตัว",
+"Settings" => "ตั้งค่า",
+"Users" => "ผู้ใช้งาน",
+"Apps" => "à¹à¸­à¸›à¸¯",
+"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",
+"Application is not enabled" => "à¹à¸­à¸žà¸žà¸¥à¸´à¹€à¸„ชั่นดังà¸à¸¥à¹ˆà¸²à¸§à¸¢à¸±à¸‡à¹„ม่ได้เปิดใช้งาน",
+"Authentication error" => "เà¸à¸´à¸”ข้อผิดพลาดในสิทธิ์à¸à¸²à¸£à¹€à¸‚้าใช้งาน",
+"Token expired. Please reload page." => "รหัสยืนยันความถูà¸à¸•à¹‰à¸­à¸‡à¸«à¸¡à¸”อายุà¹à¸¥à¹‰à¸§ à¸à¸£à¸¸à¸“าโหลดหน้าเว็บใหม่อีà¸à¸„รั้ง",
+"seconds ago" => "วินาทีที่ผ่านมา",
+"1 minute ago" => "1 นาทีมาà¹à¸¥à¹‰à¸§",
+"%d minutes ago" => "%d นาทีที่ผ่านมา",
+"today" => "วันนี้",
+"yesterday" => "เมื่อวานนี้",
+"%d days ago" => "%d วันที่ผ่านมา",
+"last month" => "เดือนที่à¹à¸¥à¹‰à¸§",
+"months ago" => "เดือนมาà¹à¸¥à¹‰à¸§",
+"last year" => "ปีที่à¹à¸¥à¹‰à¸§",
+"years ago" => "ปีที่ผ่านมา"
+);
diff --git a/lib/l10n/uk.php b/lib/l10n/uk.php
new file mode 100644
index 00000000000..18f6a4a623d
--- /dev/null
+++ b/lib/l10n/uk.php
@@ -0,0 +1,24 @@
+<?php $TRANSLATIONS = array(
+"Help" => "Допомога",
+"Personal" => "ОÑобиÑте",
+"Settings" => "ÐалаштуваннÑ",
+"Users" => "КориÑтувачі",
+"Apps" => "Додатки",
+"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 файлу.",
+"Application is not enabled" => "Додаток не увімкнений",
+"Authentication error" => "Помилка автентифікації",
+"seconds ago" => "Ñекунди тому",
+"1 minute ago" => "1 хвилину тому",
+"%d minutes ago" => "%d хвилин тому",
+"today" => "Ñьогодні",
+"yesterday" => "вчора",
+"%d days ago" => "%d днів тому",
+"last month" => "минулого міÑÑцÑ",
+"months ago" => "міÑÑці тому",
+"last year" => "минулого року",
+"years ago" => "роки тому"
+);
diff --git a/lib/l10n/zh_CN.php b/lib/l10n/zh_CN.php
new file mode 100644
index 00000000000..2d05ad3567e
--- /dev/null
+++ b/lib/l10n/zh_CN.php
@@ -0,0 +1,25 @@
+<?php $TRANSLATIONS = array(
+"Help" => "帮助",
+"Personal" => "个人",
+"Settings" => "设置",
+"Users" => "用户",
+"Apps" => "应用",
+"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 文件。",
+"Application is not enabled" => "ä¸éœ€è¦ç¨‹åº",
+"Authentication error" => "认è¯é”™è¯¯",
+"Token expired. Please reload page." => "Token 过期,请刷新页é¢ã€‚",
+"seconds ago" => "几秒å‰",
+"1 minute ago" => "1分钟å‰",
+"%d minutes ago" => "%d 分钟å‰",
+"today" => "今天",
+"yesterday" => "昨天",
+"%d days ago" => "%d 天å‰",
+"last month" => "上月",
+"months ago" => "几月å‰",
+"last year" => "上年",
+"years ago" => "几年å‰"
+);
diff --git a/lib/mail.php b/lib/mail.php
index 0ecee0f01c8..0ac9a97c1bf 100644
--- a/lib/mail.php
+++ b/lib/mail.php
@@ -91,19 +91,8 @@ class OC_Mail {
/**
- * sending a mail based on a template
+ * return the footer for a mail
*
- * @param texttemplate $texttemplate
- * @param htmltemplate $htmltemplate
- * @param data $data
- * @param To $toaddress
- * @param ToName $toname
- * @param Subject $subject
- * @param From $fromaddress
- * @param FromName $fromname
- * @param ccaddress $ccaddress
- * @param ccname $ccname
- * @param bcc $bcc
*/
public static function getfooter() {
diff --git a/lib/migrate.php b/lib/migrate.php
index 06f88b37794..917d77eaca0 100644
--- a/lib/migrate.php
+++ b/lib/migrate.php
@@ -64,7 +64,7 @@ class OC_Migrate{
$apps = OC_App::getAllApps();
foreach($apps as $app){
- $path = OC::$SERVERROOT . '/apps/' . $app . '/appinfo/migrate.php';
+ $path = OC_App::getAppPath($app) . '/appinfo/migrate.php';
if( file_exists( $path ) ){
include( $path );
}
@@ -91,7 +91,7 @@ class OC_Migrate{
if( self::$exporttype == 'user' ){
// Check user exists
if( !is_null($uid) ){
- $db = new OC_User_Database;
+ $db = new OC_User_Database;
if( !$db->userExists( $uid ) ){
OC_Log::write('migration', 'User: '.$uid.' is not in the database and so cannot be exported.', OC_Log::ERROR);
return json_encode( array( 'success' => false ) );
@@ -278,7 +278,7 @@ class OC_Migrate{
return json_encode( array( 'success' => false ) );
}
// Done
- return json_encode( 'success' => true );
+ return json_encode( array( 'success' => true ) );
*/
break;
}
@@ -398,7 +398,7 @@ class OC_Migrate{
if( OC_App::isEnabled( $provider->getID() ) ){
$success = true;
// Does this app use the database?
- if( file_exists( OC::$SERVERROOT.'/apps/'.$provider->getID().'/appinfo/database.xml' ) ){
+ if( file_exists( OC_App::getAppPath($provider->getID()).'/appinfo/database.xml' ) ){
// Create some app tables
$tables = self::createAppTables( $provider->getID() );
if( is_array( $tables ) ){
@@ -443,21 +443,10 @@ class OC_Migrate{
'ocversion' => OC_Util::getVersion(),
'exporttime' => time(),
'exportedby' => OC_User::getUser(),
- 'exporttype' => self::$exporttype
+ 'exporttype' => self::$exporttype,
+ 'exporteduser' => self::$uid
);
- // Add hash if user export
- if( self::$exporttype == 'user' ){
- $query = OC_DB::prepare( "SELECT `password` FROM `*PREFIX*users` WHERE `uid` = ?" );
- $result = $query->execute( array( self::$uid ) );
- $row = $result->fetchRow();
- $hash = $row ? $row['password'] : false;
- if( !$hash ){
- OC_Log::write( 'migration', 'Failed to get the users password hash', OC_log::ERROR);
- return false;
- }
- $info['hash'] = $hash;
- $info['exporteduser'] = self::$uid;
- }
+
if( !is_array( $array ) ){
OC_Log::write( 'migration', 'Supplied $array was not an array in getExportInfo()', OC_Log::ERROR );
}
@@ -539,7 +528,7 @@ class OC_Migrate{
}
// There is a database.xml file
- $content = file_get_contents( OC::$SERVERROOT . '/apps/' . $appid . '/appinfo/database.xml' );
+ $content = file_get_contents(OC_App::getAppPath($appid) . '/appinfo/database.xml' );
$file2 = 'static://db_scheme';
// TODO get the relative path to migration.db from the data dir
@@ -608,7 +597,7 @@ class OC_Migrate{
static public function getApps(){
$allapps = OC_App::getAllApps();
foreach($allapps as $app){
- $path = OC::$SERVERROOT . '/apps/' . $app . '/lib/migrate.php';
+ $path = self::getAppPath($app) . '/lib/migrate.php';
if( file_exists( $path ) ){
$supportsmigration[] = $app;
}
diff --git a/lib/mimetypes.fixlist.php b/lib/mimetypes.fixlist.php
deleted file mode 100644
index 13e3f16b369..00000000000
--- a/lib/mimetypes.fixlist.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-return array(
- 'ics'=>'text/calendar',
- 'ical'=>'text/calendar',
- 'js'=>'application/javascript',
- 'odt'=>'application/vnd.oasis.opendocument.text',
- 'ods'=>'application/vnd.oasis.opendocument.spreadsheet',
- 'odg'=>'application/vnd.oasis.opendocument.graphics',
- 'odp'=>'application/vnd.oasis.opendocument.presentation',
- 'pl'=>'text/x-script.perl',
- 'py'=>'text/x-script.phyton',
- 'vcf' => 'text/vcard',
- 'vcard' => 'text/vcard',
- 'doc'=>'application/msword',
- 'docx'=>'application/msword',
- 'xls'=>'application/msexcel',
- 'xlsx'=>'application/msexcel',
- 'ppt'=>'application/mspowerpoint',
- 'pptx'=>'application/mspowerpoint',
- 'sgf' => 'application/sgf',
- 'cdr' => 'application/coreldraw'
-);
diff --git a/lib/mimetypes.list.php b/lib/mimetypes.list.php
index ccf47999b1c..8386bcb93f3 100644
--- a/lib/mimetypes.list.php
+++ b/lib/mimetypes.list.php
@@ -55,6 +55,9 @@ return array(
'ods'=>'application/vnd.oasis.opendocument.spreadsheet',
'odg'=>'application/vnd.oasis.opendocument.graphics',
'odp'=>'application/vnd.oasis.opendocument.presentation',
+ 'pages'=>'application/x-iwork-pages-sffpages',
+ 'numbers'=>'application/x-iwork-numbers-sffnumbers',
+ 'keynote'=>'application/x-iwork-keynote-sffkey',
'kra'=>'application/x-krita',
'mp3'=>'audio/mpeg',
'doc'=>'application/msword',
@@ -78,5 +81,17 @@ return array(
'mpeg'=>'video/mpeg',
'mov'=>'video/quicktime',
'webm'=>'video/webm',
- 'wmv'=>'video/x-ms-asf'
+ 'wmv'=>'video/x-ms-asf',
+ 'py'=>'text/x-script.phyton',
+ 'vcf' => 'text/vcard',
+ 'vcard' => 'text/vcard',
+ 'doc'=>'application/msword',
+ 'docx'=>'application/msword',
+ 'xls'=>'application/msexcel',
+ 'xlsx'=>'application/msexcel',
+ 'ppt'=>'application/mspowerpoint',
+ 'pptx'=>'application/mspowerpoint',
+ 'sgf' => 'application/sgf',
+ 'cdr' => 'application/coreldraw',
+ 'impress' => 'text/impress',
);
diff --git a/lib/minimizer.php b/lib/minimizer.php
new file mode 100644
index 00000000000..3dc89e331a6
--- /dev/null
+++ b/lib/minimizer.php
@@ -0,0 +1,58 @@
+<?php
+
+abstract class OC_Minimizer {
+ public function getLastModified($files) {
+ $last_modified = 0;
+ foreach($files as $file_info) {
+ $file = $file_info[0] . '/' . $file_info[2];
+ $filemtime = filemtime($file);
+ if ($filemtime > $last_modified) {
+ $last_modified = $filemtime;
+ }
+ }
+ return $last_modified;
+ }
+
+ abstract public function minimizeFiles($files);
+
+ public function output($files, $cache_key) {
+ header('Content-Type: '.$this->contentType);
+ OC_Response::enableCaching();
+ $last_modified = $this->getLastModified($files);
+ OC_Response::setLastModifiedHeader($last_modified);
+
+ $gzout = false;
+ $cache = OC_Cache::getGlobalCache();
+ if (!OC_Request::isNoCache() && (!defined('DEBUG') || !DEBUG)){
+ $gzout = $cache->get($cache_key.'.gz');
+ if ($gzout) {
+ OC_Response::setETagHeader(md5($gzout));
+ }
+ }
+
+ if (!$gzout) {
+ $out = $this->minimizeFiles($files);
+ $gzout = gzencode($out);
+ OC_Response::setETagHeader(md5($gzout));
+ $cache->set($cache_key.'.gz', $gzout);
+ }
+ if ($encoding = OC_Request::acceptGZip()) {
+ header('Content-Encoding: '.$encoding);
+ $out = $gzout;
+ } else {
+ $out = gzdecode($gzout);
+ }
+ header('Content-Length: '.strlen($out));
+ echo $out;
+ }
+}
+
+if (!function_exists('gzdecode')) {
+ function gzdecode($data,$maxlength=null,&$filename='',&$error='')
+ {
+ if (strcmp(substr($data,0,9),"\x1f\x8b\x8\0\0\0\0\0\0")) {
+ return null; // Not the GZIP format we expect (See RFC 1952)
+ }
+ return gzinflate(substr($data,10,-8));
+ }
+}
diff --git a/lib/minimizer/css.php b/lib/minimizer/css.php
new file mode 100644
index 00000000000..110935ea3b7
--- /dev/null
+++ b/lib/minimizer/css.php
@@ -0,0 +1,38 @@
+<?php
+
+require_once('mediawiki/CSSMin.php');
+
+class OC_Minimizer_CSS extends OC_Minimizer
+{
+ protected $contentType = 'text/css';
+
+ public function minimizeFiles($files) {
+ $css_out = '';
+ $webroot = (string) OC::$WEBROOT;
+ foreach($files as $file_info) {
+ $file = $file_info[0] . '/' . $file_info[2];
+ $css_out .= '/* ' . $file . ' */' . "\n";
+ $css = file_get_contents($file);
+
+ $in_root = false;
+ foreach(OC::$APPSROOTS as $app_root) {
+ if(strpos($file, $app_root['path']) === 0) {
+ $in_root = rtrim($webroot.$app_root['url'], '/');
+ break;
+ }
+ }
+ if ($in_root !== false) {
+ $css = str_replace('%appswebroot%', $in_root, $css);
+ $css = str_replace('%webroot%', $webroot, $css);
+ }
+ $remote = $file_info[1];
+ $remote .= '/';
+ $remote .= dirname($file_info[2]);
+ $css_out .= CSSMin::remap($css, dirname($file), $remote, true);
+ }
+ if (!defined('DEBUG') || !DEBUG){
+ $css_out = CSSMin::minify($css_out);
+ }
+ return $css_out;
+ }
+}
diff --git a/lib/minimizer/js.php b/lib/minimizer/js.php
new file mode 100644
index 00000000000..0f5cb7e5577
--- /dev/null
+++ b/lib/minimizer/js.php
@@ -0,0 +1,21 @@
+<?php
+
+require_once('mediawiki/JavaScriptMinifier.php');
+
+class OC_Minimizer_JS extends OC_Minimizer
+{
+ protected $contentType = 'application/javascript';
+
+ public function minimizeFiles($files) {
+ $js_out = '';
+ foreach($files as $file_info) {
+ $file = $file_info[0] . '/' . $file_info[2];
+ $js_out .= '/* ' . $file . ' */' . "\n";
+ $js_out .= file_get_contents($file);
+ }
+ if (!defined('DEBUG') || !DEBUG){
+ $js_out = JavaScriptMinifier::minify($js_out);
+ }
+ return $js_out;
+ }
+}
diff --git a/lib/ocs.php b/lib/ocs.php
index aba29275a92..3157aae99e6 100644
--- a/lib/ocs.php
+++ b/lib/ocs.php
@@ -4,7 +4,9 @@
* ownCloud
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @author Michael Gapczynski
+* @copyright 2012 Frank Karlitschek frank@owncloud.org
+* @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
@@ -29,429 +31,453 @@
*/
class OC_OCS {
- /**
- * reads input date from get/post/cookies and converts the date to a special data-type
- *
- * @param variable $key
- * @param variable-type $type
- * @param priority $getpriority
- * @param default $default
- * @return data
- */
- public static function readData($key,$type='raw',$getpriority=false,$default='') {
- if($getpriority) {
- if(isset($_GET[$key])) {
- $data=$_GET[$key];
- } elseif(isset($_POST[$key])) {
- $data=$_POST[$key];
- } else {
- if($default=='') {
- if(($type=='int') or ($type=='float')) $data=0; else $data='';
- } else {
- $data=$default;
- }
- }
- } else {
- if(isset($_POST[$key])) {
- $data=$_POST[$key];
- } elseif(isset($_GET[$key])) {
- $data=$_GET[$key];
- } elseif(isset($_COOKIE[$key])) {
- $data=$_COOKIE[$key];
- } else {
- if($default=='') {
- if(($type=='int') or ($type=='float')) $data=0; else $data='';
- } else {
- $data=$default;
- }
- }
- }
-
- if($type=='raw') return($data);
- elseif($type=='text') return(addslashes(strip_tags($data)));
- elseif($type=='int') { $data = (int) $data; return($data); }
- elseif($type=='float') { $data = (float) $data; return($data); }
- elseif($type=='array') { $data = $data; return($data); }
- }
-
-
- /**
- main function to handle the REST request
- **/
- public static function handle() {
-
- // overwrite the 404 error page returncode
- header("HTTP/1.0 200 OK");
-
-
- if($_SERVER['REQUEST_METHOD'] == 'GET') {
- $method='get';
- }elseif($_SERVER['REQUEST_METHOD'] == 'PUT') {
- $method='put';
- parse_str(file_get_contents("php://input"),$put_vars);
- }elseif($_SERVER['REQUEST_METHOD'] == 'POST') {
- $method='post';
- }else{
- echo('internal server error: method not supported');
- exit();
- }
-
- // preprocess url
- $url=$_SERVER['REQUEST_URI'];
- if(substr($url,(strlen($url)-1))<>'/') $url.='/';
- $ex=explode('/',$url);
- $paracount=count($ex);
-
- // eventhandler
- // CONFIG
- // apiconfig - GET - CONFIG
- if(($method=='get') and (strtolower($ex[$paracount-3])=='v1.php') and (strtolower($ex[$paracount-2])=='config')){
- $format=OC_OCS::readdata('format','text');
- OC_OCS::apiconfig($format);
-
- // PERSON
- // personcheck - POST - PERSON/CHECK
- }elseif(($method=='post') and (strtolower($ex[$paracount-4])=='v1.php') and (strtolower($ex[$paracount-3])=='person') and (strtolower($ex[$paracount-2])=='check')){
- $format=OC_OCS::readdata('format','text');
- $login=OC_OCS::readdata('login','text');
- $passwd=OC_OCS::readdata('password','text');
- OC_OCS::personcheck($format,$login,$passwd);
-
- // ACTIVITY
- // activityget - GET ACTIVITY page,pagesize als urlparameter
- }elseif(($method=='get') and (strtolower($ex[$paracount-3])=='v1.php')and (strtolower($ex[$paracount-2])=='activity')){
- $format=OC_OCS::readdata('format','text');
- $page=OC_OCS::readdata('page','int');
- $pagesize=OC_OCS::readdata('pagesize','int');
- if($pagesize<1 or $pagesize>100) $pagesize=10;
- OC_OCS::activityget($format,$page,$pagesize);
-
- // activityput - POST ACTIVITY
- }elseif(($method=='post') and (strtolower($ex[$paracount-3])=='v1.php')and (strtolower($ex[$paracount-2])=='activity')){
- $format=OC_OCS::readdata('format','text');
- $message=OC_OCS::readdata('message','text');
- OC_OCS::activityput($format,$message);
-
- // PRIVATEDATA
- // get - GET DATA
- }elseif(($method=='get') and (strtolower($ex[$paracount-4])=='v1.php')and (strtolower($ex[$paracount-2])=='getattribute')){
- $format=OC_OCS::readdata('format','text');
- OC_OCS::privateDataGet($format);
-
- }elseif(($method=='get') and (strtolower($ex[$paracount-5])=='v1.php')and (strtolower($ex[$paracount-3])=='getattribute')){
- $format=OC_OCS::readdata('format','text');
- $app=$ex[$paracount-2];
- OC_OCS::privateDataGet($format, $app);
- }elseif(($method=='get') and (strtolower($ex[$paracount-6])=='v1.php')and (strtolower($ex[$paracount-4])=='getattribute')){
- $format=OC_OCS::readdata('format','text');
- $key=$ex[$paracount-2];
- $app=$ex[$paracount-3];
- OC_OCS::privateDataGet($format, $app,$key);
-
- // set - POST DATA
- }elseif(($method=='post') and (strtolower($ex[$paracount-6])=='v1.php')and (strtolower($ex[$paracount-4])=='setattribute')){
- $format=OC_OCS::readdata('format','text');
- $key=$ex[$paracount-2];
- $app=$ex[$paracount-3];
- $value=OC_OCS::readdata('value','text');
- OC_OCS::privatedataset($format, $app, $key, $value);
- // delete - POST DATA
- }elseif(($method=='post') and (strtolower($ex[$paracount-6])=='v1.php')and (strtolower($ex[$paracount-4])=='deleteattribute')){
- $format=OC_OCS::readdata('format','text');
- $key=$ex[$paracount-2];
- $app=$ex[$paracount-3];
- OC_OCS::privatedatadelete($format, $app, $key);
-
- }else{
- $format=OC_OCS::readdata('format','text');
- $txt='Invalid query, please check the syntax. API specifications are here: http://www.freedesktop.org/wiki/Specifications/open-collaboration-services. DEBUG OUTPUT:'."\n";
- $txt.=OC_OCS::getdebugoutput();
- echo(OC_OCS::generatexml($format,'failed',999,$txt));
- }
- exit();
- }
-
- /**
- * generated some debug information to make it easier to find faild API calls
- * @return debug data string
- */
- private static function getDebugOutput() {
- $txt='';
- $txt.="debug output:\n";
- if(isset($_SERVER['REQUEST_METHOD'])) $txt.='http request method: '.$_SERVER['REQUEST_METHOD']."\n";
- if(isset($_SERVER['REQUEST_URI'])) $txt.='http request uri: '.$_SERVER['REQUEST_URI']."\n";
- if(isset($_GET)) foreach($_GET as $key=>$value) $txt.='get parameter: '.$key.'->'.$value."\n";
- if(isset($_POST)) foreach($_POST as $key=>$value) $txt.='post parameter: '.$key.'->'.$value."\n";
- return($txt);
- }
-
- /**
- * checks if the user is authenticated
- * checks the IP whitlist, apikeys and login/password combination
- * if $forceuser is true and the authentication failed it returns an 401 http response.
- * if $forceuser is false and authentification fails it returns an empty username string
- * @param bool $forceuser
- * @return username string
- */
- private static function checkPassword($forceuser=true) {
- //valid user account ?
- if(isset($_SERVER['PHP_AUTH_USER'])) $authuser=$_SERVER['PHP_AUTH_USER']; else $authuser='';
- if(isset($_SERVER['PHP_AUTH_PW'])) $authpw=$_SERVER['PHP_AUTH_PW']; else $authpw='';
-
- if(empty($authuser)) {
- if($forceuser){
- header('WWW-Authenticate: Basic realm="your valid user account or api key"');
- header('HTTP/1.0 401 Unauthorized');
- exit;
- }else{
- $identifieduser='';
- }
- }else{
- if(!OC_User::login($authuser,$authpw)){
- if($forceuser){
- header('WWW-Authenticate: Basic realm="your valid user account or api key"');
- header('HTTP/1.0 401 Unauthorized');
- exit;
- }else{
- $identifieduser='';
- }
- }else{
- $identifieduser=$authuser;
- }
- }
-
- return($identifieduser);
- }
-
-
- /**
- * generates the xml or json response for the API call from an multidimenional data array.
- * @param string $format
- * @param string $status
- * @param string $statuscode
- * @param string $message
- * @param array $data
- * @param string $tag
- * @param string $tagattribute
- * @param int $dimension
- * @param int $itemscount
- * @param int $itemsperpage
- * @return string xml/json
- */
- private static function generateXml($format,$status,$statuscode,$message,$data=array(),$tag='',$tagattribute='',$dimension=-1,$itemscount='',$itemsperpage='') {
- if($format=='json') {
-
- $json=array();
- $json['status']=$status;
- $json['statuscode']=$statuscode;
- $json['message']=$message;
- $json['totalitems']=$itemscount;
- $json['itemsperpage']=$itemsperpage;
- $json['data']=$data;
- return(json_encode($json));
-
-
- }else{
- $txt='';
- $writer = xmlwriter_open_memory();
- xmlwriter_set_indent( $writer, 2 );
- xmlwriter_start_document($writer );
- xmlwriter_start_element($writer,'ocs');
- xmlwriter_start_element($writer,'meta');
- xmlwriter_write_element($writer,'status',$status);
- xmlwriter_write_element($writer,'statuscode',$statuscode);
- xmlwriter_write_element($writer,'message',$message);
- if($itemscount<>'') xmlwriter_write_element($writer,'totalitems',$itemscount);
- if(!empty($itemsperpage)) xmlwriter_write_element($writer,'itemsperpage',$itemsperpage);
- xmlwriter_end_element($writer);
- if($dimension=='0') {
- // 0 dimensions
- xmlwriter_write_element($writer,'data',$data);
-
- }elseif($dimension=='1') {
- xmlwriter_start_element($writer,'data');
- foreach($data as $key=>$entry) {
- xmlwriter_write_element($writer,$key,$entry);
- }
- xmlwriter_end_element($writer);
-
- }elseif($dimension=='2') {
- xmlwriter_start_element($writer,'data');
- foreach($data as $entry) {
- xmlwriter_start_element($writer,$tag);
- if(!empty($tagattribute)) {
- xmlwriter_write_attribute($writer,'details',$tagattribute);
- }
- foreach($entry as $key=>$value) {
- if(is_array($value)){
- foreach($value as $k=>$v) {
- xmlwriter_write_element($writer,$k,$v);
- }
- } else {
- xmlwriter_write_element($writer,$key,$value);
- }
- }
- xmlwriter_end_element($writer);
- }
- xmlwriter_end_element($writer);
-
- }elseif($dimension=='3') {
- xmlwriter_start_element($writer,'data');
- foreach($data as $entrykey=>$entry) {
- xmlwriter_start_element($writer,$tag);
- if(!empty($tagattribute)) {
- xmlwriter_write_attribute($writer,'details',$tagattribute);
- }
- foreach($entry as $key=>$value) {
- if(is_array($value)){
- xmlwriter_start_element($writer,$entrykey);
- foreach($value as $k=>$v) {
- xmlwriter_write_element($writer,$k,$v);
- }
- xmlwriter_end_element($writer);
- } else {
- xmlwriter_write_element($writer,$key,$value);
- }
- }
- xmlwriter_end_element($writer);
- }
- xmlwriter_end_element($writer);
- }elseif($dimension=='dynamic') {
- xmlwriter_start_element($writer,'data');
- OC_OCS::toxml($writer,$data,'comment');
- xmlwriter_end_element($writer);
- }
-
- xmlwriter_end_element($writer);
-
- xmlwriter_end_document( $writer );
- $txt.=xmlwriter_output_memory( $writer );
- unset($writer);
- return($txt);
- }
- }
-
- public static function toXml($writer,$data,$node) {
- foreach($data as $key => $value) {
- if (is_numeric($key)) {
- $key = $node;
- }
- if (is_array($value)){
- xmlwriter_start_element($writer,$key);
- OC_OCS::toxml($writer,$value,$node);
- xmlwriter_end_element($writer);
- }else{
- xmlwriter_write_element($writer,$key,$value);
- }
-
- }
- }
-
-
-
-
- /**
- * return the config data of this server
- * @param string $format
- * @return string xml/json
- */
- private static function apiConfig($format) {
- $user=OC_OCS::checkpassword(false);
- $url=substr(OC_Helper::serverHost().$_SERVER['SCRIPT_NAME'],0,-11).'';
-
- $xml['version']='1.5';
- $xml['website']='ownCloud';
- $xml['host']=OC_Helper::serverHost();
- $xml['contact']='';
- $xml['ssl']='false';
- echo(OC_OCS::generatexml($format,'ok',100,'',$xml,'config','',1));
- }
-
-
- /**
- * check if the provided login/apikey/password is valid
- * @param string $format
- * @param string $login
- * @param string $passwd
- * @return string xml/json
- */
- private static function personCheck($format,$login,$passwd) {
- if($login<>''){
- if(OC_User::login($login,$passwd)){
- $xml['person']['personid']=$login;
- echo(OC_OCS::generatexml($format,'ok',100,'',$xml,'person','check',2));
- }else{
- echo(OC_OCS::generatexml($format,'failed',102,'login not valid'));
- }
- }else{
- echo(OC_OCS::generatexml($format,'failed',101,'please specify all mandatory fields'));
- }
- }
-
-
-
- // ACTIVITY API #############################################
-
- /**
- * get my activities
- * @param string $format
- * @param string $page
- * @param string $pagesize
- * @return string xml/json
- */
- private static function activityGet($format,$page,$pagesize) {
- $user=OC_OCS::checkpassword();
-
- //TODO
-
- $txt=OC_OCS::generatexml($format,'ok',100,'',$xml,'activity','full',2,$totalcount,$pagesize);
- echo($txt);
- }
-
- /**
- * submit a activity
- * @param string $format
- * @param string $message
- * @return string xml/json
- */
- private static function activityPut($format,$message) {
- // not implemented in ownCloud
- $user=OC_OCS::checkpassword();
- echo(OC_OCS::generatexml($format,'ok',100,''));
- }
-
- // PRIVATEDATA API #############################################
-
- /**
- * get private data and create the xml for ocs
- * @param string $format
- * @param string $app
- * @param string $key
- * @return string xml/json
- */
- private static function privateDataGet($format,$app="",$key="") {
- $user=OC_OCS::checkpassword();
- $result=OC_OCS::getData($user,$app,$key);
- $xml=array();
- foreach($result as $i=>$log) {
- $xml[$i]['key']=$log['key'];
- $xml[$i]['app']=$log['app'];
- $xml[$i]['value']=$log['value'];
- }
-
-
- $txt=OC_OCS::generatexml($format, 'ok', 100, '', $xml, 'privatedata', 'full', 2, count($xml), 0);//TODO: replace 'privatedata' with 'attribute' once a new libattice has been released that works with it
- echo($txt);
- }
-
- /**
- * set private data referenced by $key to $value and generate the xml for ocs
- * @param string $format
- * @param string $app
- * @param string $key
- * @param string $value
- * @return string xml/json
- */
+ /**
+ * reads input date from get/post/cookies and converts the date to a special data-type
+ *
+ * @param string HTTP method to read the key from
+ * @param string Parameter to read
+ * @param string Variable type to format data
+ * @param mixed Default value to return if the key is not found
+ * @return mixed Data or if the key is not found and no default is set it will exit with a 400 Bad request
+ */
+ public static function readData($method, $key, $type = 'raw', $default = null) {
+ if ($method == 'get') {
+ if (isset($_GET[$key])) {
+ $data = $_GET[$key];
+ } else if (isset($default)) {
+ return $default;
+ } else {
+ $data = false;
+ }
+ } else if ($method == 'post') {
+ if (isset($_POST[$key])) {
+ $data = $_POST[$key];
+ } else if (isset($default)) {
+ return $default;
+ } else {
+ $data = false;
+ }
+ }
+ if ($data === false) {
+ echo self::generateXml('', 'fail', 400, 'Bad request. Please provide a valid '.$key);
+ exit();
+ } else {
+ // NOTE: Is the raw type necessary? It might be a little risky without sanitization
+ if ($type == 'raw') return $data;
+ elseif ($type == 'text') return OC_Util::sanitizeHTML($data);
+ elseif ($type == 'int') return (int) $data;
+ elseif ($type == 'float') return (float) $data;
+ elseif ($type == 'array') return OC_Util::sanitizeHTML($data);
+ else return OC_Util::sanitizeHTML($data);
+ }
+ }
+
+ /**
+ main function to handle the REST request
+ **/
+ public static function handle() {
+ // overwrite the 404 error page returncode
+ header("HTTP/1.0 200 OK");
+
+
+ if($_SERVER['REQUEST_METHOD'] == 'GET') {
+ $method='get';
+ }elseif($_SERVER['REQUEST_METHOD'] == 'PUT') {
+ $method='put';
+ parse_str(file_get_contents("php://input"),$put_vars);
+ }elseif($_SERVER['REQUEST_METHOD'] == 'POST') {
+ $method='post';
+ }else{
+ echo('internal server error: method not supported');
+ exit();
+ }
+
+ // preprocess url
+ $url = strtolower($_SERVER['REQUEST_URI']);
+ if(substr($url,(strlen($url)-1))<>'/') $url.='/';
+ $ex=explode('/',$url);
+ $paracount=count($ex);
+ $format = self::readData($method, 'format', 'text', '');
+
+ // eventhandler
+ // CONFIG
+ // apiconfig - GET - CONFIG
+ if(($method=='get') and ($ex[$paracount-3] == 'v1.php') and ($ex[$paracount-2] == 'config')){
+ OC_OCS::apiconfig($format);
+
+ // PERSON
+ // personcheck - POST - PERSON/CHECK
+ }elseif(($method=='post') and ($ex[$paracount-4] == 'v1.php') and ($ex[$paracount-3]=='person') and ($ex[$paracount-2] == 'check')){
+ $login = self::readData($method, 'login', 'text');
+ $passwd = self::readData($method, 'password', 'text');
+ OC_OCS::personcheck($format,$login,$passwd);
+
+ // ACTIVITY
+ // activityget - GET ACTIVITY page,pagesize als urlparameter
+ }elseif(($method=='get') and ($ex[$paracount-3] == 'v1.php') and ($ex[$paracount-2] == 'activity')){
+ $page = self::readData($method, 'page', 'int', 0);
+ $pagesize = self::readData($method, 'pagesize','int', 10);
+ if($pagesize<1 or $pagesize>100) $pagesize=10;
+ OC_OCS::activityget($format,$page,$pagesize);
+
+ // activityput - POST ACTIVITY
+ }elseif(($method=='post') and ($ex[$paracount-3] == 'v1.php') and ($ex[$paracount-2] == 'activity')){
+ $message = self::readData($method, 'message', 'text');
+ OC_OCS::activityput($format,$message);
+
+
+ // PRIVATEDATA
+ // get - GET DATA
+ }elseif(($method=='get') and ($ex[$paracount-4] == 'v1.php') and ($ex[$paracount-2] == 'getattribute')){
+ OC_OCS::privateDataGet($format);
+
+ }elseif(($method=='get') and ($ex[$paracount-5] == 'v1.php') and ($ex[$paracount-3] == 'getattribute')){
+ $app=$ex[$paracount-2];
+ OC_OCS::privateDataGet($format, $app);
+ }elseif(($method=='get') and ($ex[$paracount-6] == 'v1.php') and ($ex[$paracount-4] == 'getattribute')){
+
+ $key=$ex[$paracount-2];
+ $app=$ex[$paracount-3];
+ OC_OCS::privateDataGet($format, $app,$key);
+
+ // set - POST DATA
+ }elseif(($method=='post') and ($ex[$paracount-6] == 'v1.php') and ($ex[$paracount-4] == 'setattribute')){
+ $key=$ex[$paracount-2];
+ $app=$ex[$paracount-3];
+ $value = self::readData($method, 'value', 'text');
+ OC_OCS::privatedataset($format, $app, $key, $value);
+ // delete - POST DATA
+ }elseif(($method=='post') and ($ex[$paracount-6] =='v1.php') and ($ex[$paracount-4] == 'deleteattribute')){
+ $key=$ex[$paracount-2];
+ $app=$ex[$paracount-3];
+ OC_OCS::privatedatadelete($format, $app, $key);
+
+ // CLOUD
+ // systemWebApps
+ }elseif(($method=='get') and ($ex[$paracount-5] == 'v1.php') and ($ex[$paracount-4]=='cloud') and ($ex[$paracount-3] == 'system') and ($ex[$paracount-2] == 'webapps')){
+ OC_OCS::systemwebapps($format);
+
+ // quotaget
+ }elseif(($method=='get') and ($ex[$paracount-6] == 'v1.php') and ($ex[$paracount-5]=='cloud') and ($ex[$paracount-4] == 'user') and ($ex[$paracount-2] == 'quota')){
+ $user=$ex[$paracount-3];
+ OC_OCS::quotaget($format,$user);
+
+ // quotaset
+ }elseif(($method=='post') and ($ex[$paracount-6] == 'v1.php') and ($ex[$paracount-5]=='cloud') and ($ex[$paracount-4] == 'user') and ($ex[$paracount-2] == 'quota')){
+ $user=$ex[$paracount-3];
+ $quota = self::readData('post', 'quota', 'int');
+ OC_OCS::quotaset($format,$user,$quota);
+
+ // keygetpublic
+ }elseif(($method=='get') and ($ex[$paracount-6] == 'v1.php') and ($ex[$paracount-5]=='cloud') and ($ex[$paracount-4] == 'user') and ($ex[$paracount-2] == 'publickey')){
+ $user=$ex[$paracount-3];
+ OC_OCS::publicKeyGet($format,$user);
+
+ // keygetprivate
+ }elseif(($method=='get') and ($ex[$paracount-6] == 'v1.php') and ($ex[$paracount-5]=='cloud') and ($ex[$paracount-4] == 'user') and ($ex[$paracount-2] == 'privatekey')){
+ $user=$ex[$paracount-3];
+ OC_OCS::privateKeyGet($format,$user);
+
+
+// add more calls here
+// please document all the call in the draft spec
+// http://www.freedesktop.org/wiki/Specifications/open-collaboration-services-1.7#CLOUD
+
+// TODO:
+// users
+// groups
+// bookmarks
+// sharing
+// versioning
+// news (rss)
+
+
+
+ }else{
+ $txt='Invalid query, please check the syntax. API specifications are here: http://www.freedesktop.org/wiki/Specifications/open-collaboration-services. DEBUG OUTPUT:'."\n";
+ $txt.=OC_OCS::getdebugoutput();
+ echo(OC_OCS::generatexml($format,'failed',999,$txt));
+ }
+ exit();
+ }
+
+ /**
+ * generated some debug information to make it easier to find faild API calls
+ * @return debug data string
+ */
+ private static function getDebugOutput() {
+ $txt='';
+ $txt.="debug output:\n";
+ if(isset($_SERVER['REQUEST_METHOD'])) $txt.='http request method: '.$_SERVER['REQUEST_METHOD']."\n";
+ if(isset($_SERVER['REQUEST_URI'])) $txt.='http request uri: '.$_SERVER['REQUEST_URI']."\n";
+ if(isset($_GET)) foreach($_GET as $key=>$value) $txt.='get parameter: '.$key.'->'.$value."\n";
+ if(isset($_POST)) foreach($_POST as $key=>$value) $txt.='post parameter: '.$key.'->'.$value."\n";
+ return($txt);
+ }
+
+ /**
+ * checks if the user is authenticated
+ * checks the IP whitlist, apikeys and login/password combination
+ * if $forceuser is true and the authentication failed it returns an 401 http response.
+ * if $forceuser is false and authentification fails it returns an empty username string
+ * @param bool $forceuser
+ * @return username string
+ */
+ private static function checkPassword($forceuser=true) {
+ //valid user account ?
+ if(isset($_SERVER['PHP_AUTH_USER'])) $authuser=$_SERVER['PHP_AUTH_USER']; else $authuser='';
+ if(isset($_SERVER['PHP_AUTH_PW'])) $authpw=$_SERVER['PHP_AUTH_PW']; else $authpw='';
+
+ if(empty($authuser)) {
+ if($forceuser){
+ header('WWW-Authenticate: Basic realm="your valid user account or api key"');
+ header('HTTP/1.0 401 Unauthorized');
+ exit;
+ }else{
+ $identifieduser='';
+ }
+ }else{
+ if(!OC_User::login($authuser,$authpw)){
+ if($forceuser){
+ header('WWW-Authenticate: Basic realm="your valid user account or api key"');
+ header('HTTP/1.0 401 Unauthorized');
+ exit;
+ }else{
+ $identifieduser='';
+ }
+ }else{
+ $identifieduser=$authuser;
+ }
+ }
+
+ return($identifieduser);
+ }
+
+
+ /**
+ * generates the xml or json response for the API call from an multidimenional data array.
+ * @param string $format
+ * @param string $status
+ * @param string $statuscode
+ * @param string $message
+ * @param array $data
+ * @param string $tag
+ * @param string $tagattribute
+ * @param int $dimension
+ * @param int $itemscount
+ * @param int $itemsperpage
+ * @return string xml/json
+ */
+ private static function generateXml($format,$status,$statuscode,$message,$data=array(),$tag='',$tagattribute='',$dimension=-1,$itemscount='',$itemsperpage='') {
+ if($format=='json') {
+ $json=array();
+ $json['status']=$status;
+ $json['statuscode']=$statuscode;
+ $json['message']=$message;
+ $json['totalitems']=$itemscount;
+ $json['itemsperpage']=$itemsperpage;
+ $json['data']=$data;
+ return(json_encode($json));
+ }else{
+ $txt='';
+ $writer = xmlwriter_open_memory();
+ xmlwriter_set_indent( $writer, 2 );
+ xmlwriter_start_document($writer );
+ xmlwriter_start_element($writer,'ocs');
+ xmlwriter_start_element($writer,'meta');
+ xmlwriter_write_element($writer,'status',$status);
+ xmlwriter_write_element($writer,'statuscode',$statuscode);
+ xmlwriter_write_element($writer,'message',$message);
+ if($itemscount<>'') xmlwriter_write_element($writer,'totalitems',$itemscount);
+ if(!empty($itemsperpage)) xmlwriter_write_element($writer,'itemsperpage',$itemsperpage);
+ xmlwriter_end_element($writer);
+ if($dimension=='0') {
+ // 0 dimensions
+ xmlwriter_write_element($writer,'data',$data);
+
+ }elseif($dimension=='1') {
+ xmlwriter_start_element($writer,'data');
+ foreach($data as $key=>$entry) {
+ xmlwriter_write_element($writer,$key,$entry);
+ }
+ xmlwriter_end_element($writer);
+
+ }elseif($dimension=='2') {
+ xmlwriter_start_element($writer,'data');
+ foreach($data as $entry) {
+ xmlwriter_start_element($writer,$tag);
+ if(!empty($tagattribute)) {
+ xmlwriter_write_attribute($writer,'details',$tagattribute);
+ }
+ foreach($entry as $key=>$value) {
+ if(is_array($value)){
+ foreach($value as $k=>$v) {
+ xmlwriter_write_element($writer,$k,$v);
+ }
+ } else {
+ xmlwriter_write_element($writer,$key,$value);
+ }
+ }
+ xmlwriter_end_element($writer);
+ }
+ xmlwriter_end_element($writer);
+
+ }elseif($dimension=='3') {
+ xmlwriter_start_element($writer,'data');
+ foreach($data as $entrykey=>$entry) {
+ xmlwriter_start_element($writer,$tag);
+ if(!empty($tagattribute)) {
+ xmlwriter_write_attribute($writer,'details',$tagattribute);
+ }
+ foreach($entry as $key=>$value) {
+ if(is_array($value)){
+ xmlwriter_start_element($writer,$entrykey);
+ foreach($value as $k=>$v) {
+ xmlwriter_write_element($writer,$k,$v);
+ }
+ xmlwriter_end_element($writer);
+ } else {
+ xmlwriter_write_element($writer,$key,$value);
+ }
+ }
+ xmlwriter_end_element($writer);
+ }
+ xmlwriter_end_element($writer);
+ }elseif($dimension=='dynamic') {
+ xmlwriter_start_element($writer,'data');
+ OC_OCS::toxml($writer,$data,'comment');
+ xmlwriter_end_element($writer);
+ }
+
+ xmlwriter_end_element($writer);
+
+ xmlwriter_end_document( $writer );
+ $txt.=xmlwriter_output_memory( $writer );
+ unset($writer);
+ return($txt);
+ }
+ }
+
+ public static function toXml($writer,$data,$node) {
+ foreach($data as $key => $value) {
+ if (is_numeric($key)) {
+ $key = $node;
+ }
+ if (is_array($value)){
+ xmlwriter_start_element($writer,$key);
+ OC_OCS::toxml($writer,$value,$node);
+ xmlwriter_end_element($writer);
+ }else{
+ xmlwriter_write_element($writer,$key,$value);
+ }
+ }
+ }
+
+
+
+
+ /**
+ * return the config data of this server
+ * @param string $format
+ * @return string xml/json
+ */
+ private static function apiConfig($format) {
+ $user=OC_OCS::checkpassword(false);
+ $url=substr(OCP\Util::getServerHost().$_SERVER['SCRIPT_NAME'],0,-11).'';
+
+ $xml['version']='1.7';
+ $xml['website']='ownCloud';
+ $xml['host']=OCP\Util::getServerHost();
+ $xml['contact']='';
+ $xml['ssl']='false';
+ echo(OC_OCS::generatexml($format,'ok',100,'',$xml,'config','',1));
+ }
+
+
+ /**
+ * check if the provided login/apikey/password is valid
+ * @param string $format
+ * @param string $login
+ * @param string $passwd
+ * @return string xml/json
+ */
+ private static function personCheck($format,$login,$passwd) {
+ if($login<>''){
+ if(OC_User::login($login,$passwd)){
+ $xml['person']['personid']=$login;
+ echo(OC_OCS::generatexml($format,'ok',100,'',$xml,'person','check',2));
+ }else{
+ echo(OC_OCS::generatexml($format,'failed',102,'login not valid'));
+ }
+ }else{
+ echo(OC_OCS::generatexml($format,'failed',101,'please specify all mandatory fields'));
+ }
+ }
+
+
+
+ // ACTIVITY API #############################################
+
+ /**
+ * get my activities
+ * @param string $format
+ * @param string $page
+ * @param string $pagesize
+ * @return string xml/json
+ */
+ private static function activityGet($format,$page,$pagesize) {
+ $user=OC_OCS::checkpassword();
+
+ //TODO
+
+ $txt=OC_OCS::generatexml($format,'ok',100,'',$xml,'activity','full',2,$totalcount,$pagesize);
+ echo($txt);
+ }
+
+ /**
+ * submit a activity
+ * @param string $format
+ * @param string $message
+ * @return string xml/json
+ */
+ private static function activityPut($format,$message) {
+ // not implemented in ownCloud
+ $user=OC_OCS::checkpassword();
+ echo(OC_OCS::generatexml($format,'ok',100,''));
+ }
+
+ // PRIVATEDATA API #############################################
+
+ /**
+ * get private data and create the xml for ocs
+ * @param string $format
+ * @param string $app
+ * @param string $key
+ * @return string xml/json
+ */
+ private static function privateDataGet($format,$app="",$key="") {
+ $user=OC_OCS::checkpassword();
+ $result=OC_OCS::getData($user,$app,$key);
+ $xml=array();
+ foreach($result as $i=>$log) {
+ $xml[$i]['key']=$log['key'];
+ $xml[$i]['app']=$log['app'];
+ $xml[$i]['value']=$log['value'];
+ }
+
+
+ $txt=OC_OCS::generatexml($format, 'ok', 100, '', $xml, 'privatedata', 'full', 2, count($xml), 0);//TODO: replace 'privatedata' with 'attribute' once a new libattice has been released that works with it
+ echo($txt);
+ }
+
+ /**
+ * set private data referenced by $key to $value and generate the xml for ocs
+ * @param string $format
+ * @param string $app
+ * @param string $key
+ * @param string $value
+ * @return string xml/json
+ */
private static function privateDataSet($format, $app, $key, $value) {
$user=OC_OCS::checkpassword();
if(OC_OCS::setData($user,$app,$key,$value)){
@@ -529,4 +555,134 @@ class OC_OCS {
public static function deleteData($user, $app, $key) {
return OC_Preferences::deleteKey($user,$app,$key);
}
+
+
+ // CLOUD API #############################################
+
+ /**
+ * get a list of installed web apps
+ * @param string $format
+ * @return string xml/json
+ */
+ private static function systemWebApps($format) {
+ $login=OC_OCS::checkpassword();
+ $apps=OC_App::getEnabledApps();
+ $values=array();
+ foreach($apps as $app) {
+ $info=OC_App::getAppInfo($app);
+ if(isset($info['standalone'])) {
+ $newvalue=array('name'=>$info['name'],'url'=>OC_Helper::linkToAbsolute($app,''),'icon'=>'');
+ $values[]=$newvalue;
+ }
+
+ }
+ $txt=OC_OCS::generatexml($format, 'ok', 100, '', $values, 'cloud', '', 2, 0, 0);
+ echo($txt);
+
+ }
+
+
+ /**
+ * get the quota of a user
+ * @param string $format
+ * @param string $user
+ * @return string xml/json
+ */
+ private static function quotaGet($format,$user) {
+ $login=OC_OCS::checkpassword();
+ if(OC_Group::inGroup($login, 'admin') or ($login==$user)) {
+
+ if(OC_User::userExists($user)){
+ // calculate the disc space
+ $user_dir = '/'.$user.'/files';
+ OC_Filesystem::init($user_dir);
+ $rootInfo=OC_FileCache::get('');
+ $sharedInfo=OC_FileCache::get('/Shared');
+ $used=$rootInfo['size']-$sharedInfo['size'];
+ $free=OC_Filesystem::free_space();
+ $total=$free+$used;
+ if($total==0) $total=1; // prevent division by zero
+ $relative=round(($used/$total)*10000)/100;
+
+ $xml=array();
+ $xml['quota']=$total;
+ $xml['free']=$free;
+ $xml['used']=$used;
+ $xml['relative']=$relative;
+
+ $txt=OC_OCS::generatexml($format, 'ok', 100, '', $xml, 'cloud', '', 1, 0, 0);
+ echo($txt);
+ }else{
+ echo self::generateXml('', 'fail', 300, 'User does not exist');
+ }
+ }else{
+ echo self::generateXml('', 'fail', 300, 'You don´t have permission to access this ressource.');
+ }
+ }
+
+ /**
+ * set the quota of a user
+ * @param string $format
+ * @param string $user
+ * @param string $quota
+ * @return string xml/json
+ */
+ private static function quotaSet($format,$user,$quota) {
+ $login=OC_OCS::checkpassword();
+ if(OC_Group::inGroup($login, 'admin')) {
+
+ // todo
+ // not yet implemented
+ // add logic here
+ error_log('OCS call: user:'.$user.' quota:'.$quota);
+
+ $xml=array();
+ $txt=OC_OCS::generatexml($format, 'ok', 100, '', $xml, 'cloud', '', 1, 0, 0);
+ echo($txt);
+ }else{
+ echo self::generateXml('', 'fail', 300, 'You don´t have permission to access this ressource.');
+ }
+ }
+
+ /**
+ * get the public key of a user
+ * @param string $format
+ * @param string $user
+ * @return string xml/json
+ */
+ private static function publicKeyGet($format,$user) {
+ $login=OC_OCS::checkpassword();
+
+ if(OC_User::userExists($user)){
+ // calculate the disc space
+ $txt='this is the public key of '.$user;
+ echo($txt);
+ }else{
+ echo self::generateXml('', 'fail', 300, 'User does not exist');
+ }
+ }
+
+ /**
+ * get the private key of a user
+ * @param string $format
+ * @param string $user
+ * @return string xml/json
+ */
+ private static function privateKeyGet($format,$user) {
+ $login=OC_OCS::checkpassword();
+ if(OC_Group::inGroup($login, 'admin') or ($login==$user)) {
+
+ if(OC_User::userExists($user)){
+ // calculate the disc space
+ $txt='this is the private key of '.$user;
+ echo($txt);
+ }else{
+ echo self::generateXml('', 'fail', 300, 'User does not exist');
+ }
+ }else{
+ echo self::generateXml('', 'fail', 300, 'You don´t have permission to access this ressource.');
+ }
+ }
+
+
}
diff --git a/lib/ocsclient.php b/lib/ocsclient.php
index d0d27263bac..ae35470cff6 100644
--- a/lib/ocsclient.php
+++ b/lib/ocsclient.php
@@ -4,7 +4,7 @@
*
* @author Frank Karlitschek
* @author Jakob Sack
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @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
@@ -35,12 +35,7 @@ class OC_OCSClient{
* This function returns the url of the OCS AppStore server. It´s possible to set it in the config file or it will fallback to the default
*/
private static function getAppStoreURL(){
- $configurl=OC_Config::getValue('appstoreurl', '');
- if($configurl<>'') {
- $url=$configurl;
- }else{
- $url='http://api.apps.owncloud.com/v1';
- }
+ $url = OC_Config::getValue('appstoreurl', 'http://api.apps.owncloud.com/v1');
return($url);
}
@@ -50,12 +45,7 @@ class OC_OCSClient{
* 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(){
- $configurl=OC_Config::getValue('knowledgebaseurl', '');
- if($configurl<>'') {
- $url=$configurl;
- }else{
- $url='http://api.apps.owncloud.com/v1';
- }
+ $url = OC_Config::getValue('knowledgebaseurl', 'http://api.apps.owncloud.com/v1');
return($url);
}
@@ -67,6 +57,9 @@ class OC_OCSClient{
* This function returns a list of all the application categories on the OCS server
*/
public static function getCategories(){
+ if(OC_Config::getValue('appstoreenabled', true)==false){
+ return NULL;
+ }
$url=OC_OCSClient::getAppStoreURL().'/content/categories';
$xml=@file_get_contents($url);
@@ -78,7 +71,7 @@ class OC_OCSClient{
$tmp=$data->data;
$cats=array();
- foreach($tmp->category as $key=>$value) {
+ foreach($tmp->category as $value) {
$id= (int) $value->id;
$name= (string) $value->name;
@@ -140,6 +133,9 @@ class OC_OCSClient{
* This function returns an applications from the OCS server
*/
public static function getApplication($id){
+ if(OC_Config::getValue('appstoreenabled', true)==false){
+ return NULL;
+ }
$url=OC_OCSClient::getAppStoreURL().'/content/data/'.urlencode($id);
$xml=@file_get_contents($url);
@@ -167,31 +163,34 @@ class OC_OCSClient{
return $app;
}
- /**
- * @brief Get the download url for an application from the OCS server
- * @returns array with application data
- *
- * This function returns an download url for an applications from the OCS server
- */
- public static function getApplicationDownload($id,$item){
- $url=OC_OCSClient::getAppStoreURL().'/content/download/'.urlencode($id).'/'.urlencode($item);
-
- $xml=@file_get_contents($url);
- if($xml==FALSE){
- OC_Log::write('core','Unable to parse OCS content',OC_Log::FATAL);
- return NULL;
- }
- $data=simplexml_load_string($xml);
-
- $tmp=$data->data->content;
- $app=array();
- if(isset($tmp->downloadlink)) {
- $app['downloadlink']=$tmp->downloadlink;
+ /**
+ * @brief Get the download url for an application from the OCS server
+ * @returns array with application data
+ *
+ * This function returns an download url for an applications from the OCS server
+ */
+ public static function getApplicationDownload($id,$item){
+ if(OC_Config::getValue('appstoreenabled', true)==false){
+ return NULL;
+ }
+ $url=OC_OCSClient::getAppStoreURL().'/content/download/'.urlencode($id).'/'.urlencode($item);
+
+ $xml=@file_get_contents($url);
+ if($xml==FALSE){
+ OC_Log::write('core','Unable to parse OCS content',OC_Log::FATAL);
+ return NULL;
+ }
+ $data=simplexml_load_string($xml);
+
+ $tmp=$data->data->content;
+ $app=array();
+ if(isset($tmp->downloadlink)) {
+ $app['downloadlink']=$tmp->downloadlink;
}else{
$app['downloadlink']='';
}
- return $app;
- }
+ return $app;
+ }
/**
diff --git a/lib/preferences.php b/lib/preferences.php
index 18627d7d2ea..b6c4c3a163f 100644
--- a/lib/preferences.php
+++ b/lib/preferences.php
@@ -4,7 +4,7 @@
*
* @author Frank Karlitschek
* @author Jakob Sack
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @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
@@ -150,6 +150,7 @@ class OC_Preferences{
$query = OC_DB::prepare( 'UPDATE `*PREFIX*preferences` SET `configvalue` = ? WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?' );
$query->execute( array( $value, $user, $app, $key ));
}
+ return true;
}
/**
diff --git a/lib/public/app.php b/lib/public/app.php
index 9cadabeca74..e74f1550740 100644
--- a/lib/public/app.php
+++ b/lib/public/app.php
@@ -3,7 +3,7 @@
* ownCloud
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @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
@@ -46,10 +46,9 @@ class App {
*
*/
public static function register( $data ){
- return \OC_App::register( $data );
+ return true; // don't do anything
}
-
/**
* @brief adds an entry to the navigation
* @param $data array containing the data
@@ -152,6 +151,3 @@ class App {
}
-
-
-?>
diff --git a/lib/public/backgroundjob.php b/lib/public/backgroundjob.php
new file mode 100644
index 00000000000..834bebb5c3c
--- /dev/null
+++ b/lib/public/backgroundjob.php
@@ -0,0 +1,117 @@
+<?php
+/**
+* ownCloud
+*
+* @author Jakob Sack
+* @copyright 2012 Jakob Sack owncloud@jakobsack.de
+*
+* 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/>.
+*
+*/
+
+/**
+ * Public interface of ownCloud forbackground jobs.
+ */
+
+// use OCP namespace for all classes that are considered public.
+// This means that they should be used by apps instead of the internal ownCloud classes
+namespace OCP;
+
+/**
+ * This class provides functions to manage backgroundjobs in ownCloud
+ *
+ * There are two kind of background jobs in ownCloud: regular tasks and
+ * queued tasks.
+ *
+ * Regular tasks have to be registered in appinfo.php and
+ * will run on a regular base. Fetching news could be a task that should run
+ * frequently.
+ *
+ * Queued tasks have to be registered each time you want to execute them.
+ * An example of the queued task would be the creation of the thumbnail. As
+ * soon as the user uploads a picture the gallery app registers the queued
+ * task "create thumbnail" and saves the path in the parameter instead of doing
+ * the work right away. This makes the app more responsive. As soon as the task
+ * is done it will be deleted from the list.
+ */
+class BackgroundJob {
+ /**
+ * @brief creates a regular task
+ * @param $klass class name
+ * @param $method method name
+ * @return true
+ */
+ public static function addRegularTask( $klass, $method ){
+ return \OC_BackgroundJob_RegularTask::register( $klass, $method );
+ }
+
+ /**
+ * @brief gets all regular tasks
+ * @return associative array
+ *
+ * key is string "$klass-$method", value is array( $klass, $method )
+ */
+ static public function allRegularTasks(){
+ return \OC_BackgroundJob_RegularTask::all();
+ }
+
+ /**
+ * @brief Gets one queued task
+ * @param $id ID of the task
+ * @return associative array
+ */
+ public static function findQueuedTask( $id ){
+ return \OC_BackgroundJob_QueuedTask::find( $id );
+ }
+
+ /**
+ * @brief Gets all queued tasks
+ * @return array with associative arrays
+ */
+ public static function allQueuedTasks(){
+ return \OC_BackgroundJob_QueuedTask::all();
+ }
+
+ /**
+ * @brief Gets all queued tasks of a specific app
+ * @param $app app name
+ * @return array with associative arrays
+ */
+ public static function queuedTaskWhereAppIs( $app ){
+ return \OC_BackgroundJob_QueuedTask::whereAppIs( $app );
+ }
+
+ /**
+ * @brief queues a task
+ * @param $app app name
+ * @param $klass class name
+ * @param $method method name
+ * @param $parameters all useful data as text
+ * @return id of task
+ */
+ public static function addQueuedTask( $app, $klass, $method, $parameters ){
+ return \OC_BackgroundJob_QueuedTask::add( $app, $klass, $method, $parameters );
+ }
+
+ /**
+ * @brief deletes a queued task
+ * @param $id id of task
+ * @return true/false
+ *
+ * Deletes a report
+ */
+ public static function deleteQueuedTask( $id ){
+ return \OC_BackgroundJob_QueuedTask::delete( $id );
+ }
+}
diff --git a/lib/public/config.php b/lib/public/config.php
index 762fb6b1800..ab01902ffe6 100644
--- a/lib/public/config.php
+++ b/lib/public/config.php
@@ -3,7 +3,7 @@
* ownCloud
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @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
@@ -134,5 +134,3 @@ class Config {
}
-
-?>
diff --git a/lib/public/db.php b/lib/public/db.php
index 39df58bf8cf..23c670cf442 100644
--- a/lib/public/db.php
+++ b/lib/public/db.php
@@ -3,7 +3,7 @@
* ownCloud
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @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
@@ -91,5 +91,3 @@ class DB {
}
-
-?>
diff --git a/lib/public/files.php b/lib/public/files.php
index 24c0193e8a7..32b3f036744 100644
--- a/lib/public/files.php
+++ b/lib/public/files.php
@@ -3,7 +3,7 @@
* ownCloud
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @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
@@ -115,5 +115,3 @@ class Files {
}
-
-?>
diff --git a/lib/public/groupinterface.php b/lib/public/groupinterface.php
new file mode 100644
index 00000000000..97833028118
--- /dev/null
+++ b/lib/public/groupinterface.php
@@ -0,0 +1,31 @@
+<?php
+/**
+* ownCloud
+*
+* @author Arthur Schiwon
+* @copyright 2012 Arthur Schiwon blizzz@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/>.
+*
+*/
+
+/**
+ * Public interface of ownCloud for apps to use.
+ * Group Class.
+ *
+ */
+
+namespace OCP;
+
+interface GroupInterface extends \OC_Group_Interface {} \ No newline at end of file
diff --git a/lib/public/json.php b/lib/public/json.php
index 69a69925457..99df79173eb 100644
--- a/lib/public/json.php
+++ b/lib/public/json.php
@@ -3,7 +3,7 @@
* ownCloud
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @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
@@ -35,75 +35,140 @@ namespace OCP;
*/
class JSON {
-
/**
* @brief Encode and print $data in JSON format
* @param array $data The data to use
* @param string $setContentType the optional content type
+ * @return string json formatted string.
*/
public static function encodedPrint( $data, $setContentType=true ){
return(\OC_JSON::encodedPrint( $data, $setContentType ));
}
-
/**
- * @brief Check if the user is logged in, send json error msg if not
+ * Check if the user is logged in, send json error msg if not.
+ *
+ * This method checks if a user is logged in. If not, a json error
+ * response will be return and the method will exit from execution
+ * of the script.
+ * The returned json will be in the format:
+ *
+ * {"status":"error","data":{"message":"Authentication error."}}
+ *
+ * Add this call to the start of all ajax method files that requires
+ * an authenticated user.
+ *
+ * @return string json formatted error string if not authenticated.
*/
public static function checkLoggedIn(){
return(\OC_JSON::checkLoggedIn());
}
/**
- * @brief Check an ajax get/post call if the request token is valid.
- * @return json Error msg if not valid.
- */
+ * Check an ajax get/post call if the request token is valid.
+ *
+ * This method checks for a valid variable 'requesttoken' in $_GET,
+ * $_POST and $_SERVER. If a valid token is not found, a json error
+ * response will be return and the method will exit from execution
+ * of the script.
+ * The returned json will be in the format:
+ *
+ * {"status":"error","data":{"message":"Token expired. Please reload page."}}
+ *
+ * Add this call to the start of all ajax method files that creates,
+ * updates or deletes anything.
+ * In cases where you e.g. use an ajax call to load a dialog containing
+ * a submittable form, you will need to add the requesttoken first as a
+ * parameter to the ajax call, then assign it to the template and finally
+ * add a hidden input field also named 'requesttoken' containing the value.
+ *
+ * @return string json formatted error string if not valid.
+ */
public static function callCheck(){
return(\OC_JSON::callCheck());
}
/**
- * @brief Send json success msg
+ * Send json success msg
+ *
+ * Return a json success message with optional extra data.
+ * @see OCP\JSON::error() for the format to use.
+ *
* @param array $data The data to use
+ * @return string json formatted string.
*/
public static function success( $data = array() ){
return(\OC_JSON::success( $data ));
}
-
/**
- * @brief Send json error msg
+ * Send json error msg
+ *
+ * Return a json error message with optional extra data for
+ * error message or app specific data.
+ *
+ * Example use:
+ *
+ * $id = [some value]
+ * OCP\JSON::error(array('data':array('message':'An error happened', 'id': $id)));
+ *
+ * Will return the json formatted string:
+ *
+ * {"status":"error","data":{"message":"An error happened", "id":[some value]}}
+ *
* @param array $data The data to use
+ * @return string json formatted error string.
*/
public static function error( $data = array() ){
return(\OC_JSON::error( $data ));
}
-
/**
- * @brief set Content-Type header to jsonrequest
- * @param array $type The contwnt type header
- */
+ * @brief set Content-Type header to jsonrequest
+ * @param array $type The contwnt type header
+ * @return string json formatted string.
+ */
public static function setContentTypeHeader( $type='application/json' ){
return(\OC_JSON::setContentTypeHeader( $type ));
}
-
/**
- * @brief Check if the App is enabled and send JSON error message instead
- * @param string $app The app to check
- */
+ * Check if the App is enabled and send JSON error message instead
+ *
+ * This method checks if a specific app is enabled. If not, a json error
+ * response will be return and the method will exit from execution
+ * of the script.
+ * The returned json will be in the format:
+ *
+ * {"status":"error","data":{"message":"Application is not enabled."}}
+ *
+ * Add this call to the start of all ajax method files that requires
+ * a specific app to be enabled.
+ *
+ * @param string $app The app to check
+ * @return string json formatted string if not enabled.
+ */
public static function checkAppEnabled( $app ){
return(\OC_JSON::checkAppEnabled( $app ));
}
-
/**
- * @brief Check if the user is a admin, send json error msg if not
+ * Check if the user is a admin, send json error msg if not
+ *
+ * This method checks if the current user has admin rights. If not, a json error
+ * response will be return and the method will exit from execution
+ * of the script.
+ * The returned json will be in the format:
+ *
+ * {"status":"error","data":{"message":"Authentication error."}}
+ *
+ * Add this call to the start of all ajax method files that requires
+ * administrative rights.
+ *
+ * @return string json formatted string if not admin user.
*/
public static function checkAdminUser(){
return(\OC_JSON::checkAdminUser());
}
}
-
-?>
diff --git a/lib/public/response.php b/lib/public/response.php
index c35c2654965..8dff3bcd354 100644
--- a/lib/public/response.php
+++ b/lib/public/response.php
@@ -3,7 +3,7 @@
* ownCloud
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @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
@@ -105,5 +105,3 @@ class Response {
}
-
-?>
diff --git a/lib/public/share.php b/lib/public/share.php
new file mode 100644
index 00000000000..6221c75763f
--- /dev/null
+++ b/lib/public/share.php
@@ -0,0 +1,1073 @@
+<?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 OCP;
+
+\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');
+
+/**
+* This class provides the ability for apps to share their content between users.
+* Apps must create a backend class that implements OCP\Share_Backend and register it with this class.
+*/
+class Share {
+
+ const SHARE_TYPE_USER = 0;
+ const SHARE_TYPE_GROUP = 1;
+ const SHARE_TYPE_PRIVATE_LINK = 3;
+ const SHARE_TYPE_EMAIL = 4;
+ const SHARE_TYPE_CONTACT = 5;
+ const SHARE_TYPE_REMOTE = 6;
+
+ /** CRUDS permissions (Create, Read, Update, Delete, Share) using a bitmask
+ * Construct permissions for share() and setPermissions with Or (|) e.g. Give user read and update permissions: PERMISSION_READ | PERMISSION_UPDATE
+ * Check if permission is granted with And (&) e.g. Check if delete is granted: if ($permissions & PERMISSION_DELETE)
+ * Remove permissions with And (&) and Not (~) e.g. Remove the update permission: $permissions &= ~PERMISSION_UPDATE
+ * Apps are required to handle permissions on their own, this class only stores and manages the permissions of shares
+ */
+ const PERMISSION_CREATE = 4;
+ const PERMISSION_READ = 1;
+ const PERMISSION_UPDATE = 2;
+ const PERMISSION_DELETE = 8;
+ const PERMISSION_SHARE = 16;
+
+ const FORMAT_NONE = -1;
+ const FORMAT_STATUSES = -2;
+ const FORMAT_SOURCES = -3;
+
+ private static $shareTypeUserAndGroups = -1;
+ private static $shareTypeGroupUserUnique = 2;
+ private static $backends = array();
+ private static $backendTypes = array();
+
+ /**
+ * @brief Register a sharing backend class that implements OCP\Share_Backend for an item type
+ * @param string Item type
+ * @param string Backend class
+ * @param string (optional) Depends on item type
+ * @param array (optional) List of supported file extensions if this item type depends on files
+ * @return Returns true if backend is registered or false if error
+ */
+ public static function registerBackend($itemType, $class, $collectionOf = null, $supportedFileExtensions = null) {
+ if (!isset(self::$backendTypes[$itemType])) {
+ self::$backendTypes[$itemType] = array('class' => $class, 'collectionOf' => $collectionOf, 'supportedFileExtensions' => $supportedFileExtensions);
+ if(count(self::$backendTypes) === 1) {
+ \OC_Util::addScript('core', 'share');
+ \OC_Util::addStyle('core', 'share');
+ }
+ return true;
+ }
+ \OC_Log::write('OCP\Share', 'Sharing backend '.$class.' not registered, '.self::$backendTypes[$itemType]['class'].' is already registered for '.$itemType, \OC_Log::WARN);
+ return false;
+ }
+
+ /**
+ * @brief Get the items of item type shared with the current user
+ * @param string Item type
+ * @param int Format (optional) Format type must be defined by the backend
+ * @param int Number of items to return (optional) Returns all by default
+ * @return Return depends on format
+ */
+ public static function getItemsSharedWith($itemType, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false) {
+ return self::getItems($itemType, null, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, $limit, $includeCollections);
+ }
+
+ /**
+ * @brief Get the item of item type shared with the current user
+ * @param string Item type
+ * @param string Item target
+ * @param int Format (optional) Format type must be defined by the backend
+ * @return Return depends on format
+ */
+ public static function getItemSharedWith($itemType, $itemTarget, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) {
+ return self::getItems($itemType, $itemTarget, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, 1, $includeCollections);
+ }
+
+ /**
+ * @brief Get the item of item type shared with the current user by source
+ * @param string Item type
+ * @param string Item source
+ * @param int Format (optional) Format type must be defined by the backend
+ * @return Return depends on format
+ */
+ public static function getItemSharedWithBySource($itemType, $itemSource, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) {
+ return self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, \OC_User::getUser(), null, $format, $parameters, 1, $includeCollections, true);
+ }
+
+ /**
+ * @brief Get the shared items of item type owned by the current user
+ * @param string Item type
+ * @param int Format (optional) Format type must be defined by the backend
+ * @param int Number of items to return (optional) Returns all by default
+ * @return Return depends on format
+ */
+ public static function getItemsShared($itemType, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false) {
+ return self::getItems($itemType, null, null, null, \OC_User::getUser(), $format, $parameters, $limit, $includeCollections);
+ }
+
+ /**
+ * @brief Get the shared item of item type owned by the current user
+ * @param string Item type
+ * @param string Item source
+ * @param int Format (optional) Format type must be defined by the backend
+ * @return Return depends on format
+ */
+ public static function getItemShared($itemType, $itemSource, $format = self::FORMAT_NONE, $parameters = null, $includeCollections = false) {
+ return self::getItems($itemType, $itemSource, null, null, \OC_User::getUser(), $format, $parameters, -1, $includeCollections);
+ }
+
+ /**
+ * @brief Share an item with a user, group, or via private link
+ * @param string Item type
+ * @param string Item source
+ * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_PRIVATE_LINK
+ * @param string User or group the item is being shared with
+ * @param int CRUDS permissions
+ * @return bool Returns true on success or false on failure
+ */
+ public static function shareItem($itemType, $itemSource, $shareType, $shareWith, $permissions) {
+ $uidOwner = \OC_User::getUser();
+ // Verify share type and sharing conditions are met
+ if ($shareType === self::SHARE_TYPE_USER) {
+ if ($shareWith == $uidOwner) {
+ $message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' is the item owner';
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ }
+ if (!\OC_User::userExists($shareWith)) {
+ $message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' does not exist';
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ }
+ $inGroup = array_intersect(\OC_Group::getUserGroups($uidOwner), \OC_Group::getUserGroups($shareWith));
+ if (empty($inGroup)) {
+ $message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' is not a member of any groups that '.$uidOwner.' is a member of';
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ }
+ // Check if the item source is already shared with the user, either from the same owner or a different user
+ if ($checkExists = self::getItems($itemType, $itemSource, self::$shareTypeUserAndGroups, $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) {
+ // Only allow the same share to occur again if it is the same owner and is not a user share, this use case is for increasing permissions for a specific user
+ if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) {
+ $message = 'Sharing '.$itemSource.' failed, because this item is already shared with '.$shareWith;
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ }
+ }
+ } else if ($shareType === self::SHARE_TYPE_GROUP) {
+ if (!\OC_Group::groupExists($shareWith)) {
+ $message = 'Sharing '.$itemSource.' failed, because the group '.$shareWith.' does not exist';
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ }
+ if (!\OC_Group::inGroup($uidOwner, $shareWith)) {
+ $message = 'Sharing '.$itemSource.' failed, because '.$uidOwner.' is not a member of the group '.$shareWith;
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ }
+ // Check if the item source is already shared with the group, either from the same owner or a different user
+ // The check for each user in the group is done inside the put() function
+ if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_GROUP, $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) {
+ // Only allow the same share to occur again if it is the same owner and is not a group share, this use case is for increasing permissions for a specific user
+ if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) {
+ $message = 'Sharing '.$itemSource.' failed, because this item is already shared with '.$shareWith;
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ }
+ }
+ // Convert share with into an array with the keys group and users
+ $group = $shareWith;
+ $shareWith = array();
+ $shareWith['group'] = $group;
+ $shareWith['users'] = array_diff(\OC_Group::usersInGroup($group), array($uidOwner));
+ } else if ($shareType === self::SHARE_TYPE_PRIVATE_LINK) {
+ $shareWith = md5(uniqid($itemSource, true));
+ return self::put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions);
+ } else if ($shareType === self::SHARE_TYPE_CONTACT) {
+ if (!\OC_App::isEnabled('contacts')) {
+ $message = 'Sharing '.$itemSource.' failed, because the contacts app is not enabled';
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ return false;
+ }
+ $vcard = \OC_Contacts_App::getContactVCard($shareWith);
+ if (!isset($vcard)) {
+ $message = 'Sharing '.$itemSource.' failed, because the contact does not exist';
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ }
+ $details = \OC_Contacts_VCard::structureContact($vcard);
+ // TODO Add ownCloud user to contacts vcard
+ if (!isset($details['EMAIL'])) {
+ $message = 'Sharing '.$itemSource.' failed, because no email address is associated with the contact';
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ }
+ return self::shareItem($itemType, $itemSource, self::SHARE_TYPE_EMAIL, $details['EMAIL'], $permissions);
+ } else {
+ // Future share types need to include their own conditions
+ $message = 'Share type '.$shareType.' is not valid for '.$itemSource;
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ 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 {
+ // 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('file', $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);
+ }
+ }
+
+ /**
+ * @brief Unshare an item from a user, group, or delete a private link
+ * @param string Item type
+ * @param string Item source
+ * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_PRIVATE_LINK
+ * @param string User or group the item is being shared with
+ * @return Returns true on success or false on failure
+ */
+ public static function unshare($itemType, $itemSource, $shareType, $shareWith) {
+ if ($item = self::getItems($itemType, $itemSource, $shareType, $shareWith, \OC_User::getUser(), self::FORMAT_NONE, null, 1)) {
+ self::delete($item['id']);
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @brief Unshare an item shared with the current user
+ * @param string Item type
+ * @param string Item target
+ * @return Returns true on success or false on failure
+ *
+ * Unsharing from self is not allowed for items inside collections
+ *
+ */
+ public static function unshareFromSelf($itemType, $itemTarget) {
+ if ($item = self::getItemSharedWith($itemType, $itemTarget)) {
+ if ((int)$item['share_type'] === self::SHARE_TYPE_GROUP) {
+ // TODO
+ }
+ // Delete
+ return self::delete($item['id'], true);
+ }
+ return false;
+ }
+
+ /**
+ * @brief Set the permissions of an item for a specific user or group
+ * @param string Item type
+ * @param string Item source
+ * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_PRIVATE_LINK
+ * @param string User or group the item is being shared with
+ * @param int CRUDS permissions
+ * @return Returns true on success or false on failure
+ */
+ public static function setPermissions($itemType, $itemSource, $shareType, $shareWith, $permissions) {
+ if ($item = self::getItems($itemType, $itemSource, $shareType, $shareWith, \OC_User::getUser(), self::FORMAT_NONE, null, 1, false)) {
+ // Check if this item is a reshare and verify that the permissions granted don't exceed the parent shared item
+ if (isset($item['parent'])) {
+ $query = \OC_DB::prepare('SELECT permissions FROM *PREFIX*share WHERE id = ? LIMIT 1');
+ $result = $query->execute(array($item['parent']))->fetchRow();
+ if (~(int)$result['permissions'] & $permissions) {
+ $message = 'Setting permissions for '.$itemSource.' failed, because the permissions exceed permissions granted to '.\OC_User::getUser();
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ }
+ }
+ $query = \OC_DB::prepare('UPDATE *PREFIX*share SET permissions = ? WHERE id = ?');
+ $query->execute(array($permissions, $item['id']));
+ // Check if permissions were removed
+ if ($item['permissions'] & ~$permissions) {
+ // If share permission is removed all reshares must be deleted
+ if (($item['permissions'] & self::PERMISSION_SHARE) && (~$permissions & self::PERMISSION_SHARE)) {
+ self::delete($item['id'], true);
+ } else {
+ $ids = array();
+ $parents = array($item['id']);
+ while (!empty($parents)) {
+ $parents = "'".implode("','", $parents)."'";
+ $query = \OC_DB::prepare('SELECT id, permissions FROM *PREFIX*share WHERE parent IN ('.$parents.')');
+ $result = $query->execute();
+ // Reset parents array, only go through loop again if items are found that need permissions removed
+ $parents = array();
+ while ($item = $result->fetchRow()) {
+ // Check if permissions need to be removed
+ if ($item['permissions'] & ~$permissions) {
+ // Add to list of items that need permissions removed
+ $ids[] = $item['id'];
+ $parents[] = $item['id'];
+ }
+ }
+ }
+ // Remove the permissions for all reshares of this item
+ if (!empty($ids)) {
+ $ids = "'".implode("','", $ids)."'";
+ $query = \OC_DB::prepare('UPDATE *PREFIX*share SET permissions = permissions & ? WHERE id IN ('.$ids.')');
+ $query->execute(array($permissions));
+ }
+ }
+ }
+ return true;
+ }
+ $message = 'Setting permissions for '.$itemSource.' failed, because the item was not found';
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ }
+
+ /**
+ * @brief Get the backend class for the specified item type
+ * @param string Item type
+ * @return Sharing backend object
+ */
+ private static function getBackend($itemType) {
+ if (isset(self::$backends[$itemType])) {
+ return self::$backends[$itemType];
+ } else if (isset(self::$backendTypes[$itemType]['class'])) {
+ $class = self::$backendTypes[$itemType]['class'];
+ if (class_exists($class)) {
+ self::$backends[$itemType] = new $class;
+ if (!(self::$backends[$itemType] instanceof Share_Backend)) {
+ $message = 'Sharing backend '.$class.' must implement the interface OCP\Share_Backend';
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ }
+ return self::$backends[$itemType];
+ } else {
+ $message = 'Sharing backend '.$class.' not found';
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ }
+ }
+ $message = 'Sharing backend for '.$itemType.' not found';
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ }
+
+ /**
+ * @brief Get a list of collection item types for the specified item type
+ * @param string Item type
+ * @return array
+ */
+ private static function getCollectionItemTypes($itemType) {
+ $collectionTypes = array($itemType);
+ foreach (self::$backendTypes as $type => $backend) {
+ if (in_array($backend['collectionOf'], $collectionTypes)) {
+ $collectionTypes[] = $type;
+ }
+ }
+ if (count($collectionTypes) > 1) {
+ unset($collectionTypes[0]);
+ return $collectionTypes;
+ }
+ return false;
+ }
+
+ /**
+ * @brief Get shared items from the database
+ * @param string Item type
+ * @param string Item source or target (optional)
+ * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, SHARE_TYPE_PRIVATE_LINK, $shareTypeUserAndGroups, or $shareTypeGroupUserUnique
+ * @param string User or group the item is being shared with
+ * @param string User that is the owner of shared items (optional)
+ * @param int Format to convert items to with formatItems()
+ * @param mixed Parameters to pass to formatItems()
+ * @param int Number of items to return, -1 to return all matches (optional)
+ * @param bool Include collection item types (optional)
+ * @return mixed
+ *
+ * See public functions getItem(s)... for parameter usage
+ *
+ */
+ private static function getItems($itemType, $item = null, $shareType = null, $shareWith = null, $uidOwner = null, $format = self::FORMAT_NONE, $parameters = null, $limit = -1, $includeCollections = false, $itemShareWithBySource = false) {
+ $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 ';
+ if (!isset($item)) {
+ $where .= 'WHERE file_target IS NOT NULL';
+ }
+ $fileDependent = true;
+ $queryArgs = array();
+ } else {
+ $fileDependent = false;
+ $root = '';
+ if ($includeCollections && !isset($item) && $collectionTypes = self::getCollectionItemTypes($itemType)) {
+ // If includeCollections is true, find collections of this item type, e.g. a music album contains songs
+ $itemTypes = array_merge(array($itemType), $collectionTypes);
+ $placeholders = join(',', array_fill(0, count($itemTypes), '?'));
+ $where = "WHERE item_type IN ('".$placeholders."')";
+ $queryArgs = $itemTypes;
+ } else {
+ $where = 'WHERE item_type = ?';
+ $queryArgs = array($itemType);
+ }
+ }
+ if (isset($shareType) && isset($shareWith)) {
+ // Include all user and group items
+ if ($shareType == self::$shareTypeUserAndGroups) {
+ $where .= ' AND share_type IN (?,?,?)';
+ $queryArgs[] = self::SHARE_TYPE_USER;
+ $queryArgs[] = self::SHARE_TYPE_GROUP;
+ $queryArgs[] = self::$shareTypeGroupUserUnique;
+ $userAndGroups = array_merge(array($shareWith), \OC_Group::getUserGroups($shareWith));
+ $placeholders = join(',', array_fill(0, count($userAndGroups), '?'));
+ $where .= " AND share_with IN (".$placeholders.")";
+ $queryArgs = array_merge($queryArgs, $userAndGroups);
+ // Don't include own group shares
+ $where .= ' AND uid_owner != ?';
+ $queryArgs[] = $shareWith;
+ } else {
+ $where .= ' AND share_type = ? AND share_with = ?';
+ $queryArgs[] = $shareType;
+ $queryArgs[] = $shareWith;
+ }
+ }
+ if (isset($uidOwner)) {
+ $where .= " AND uid_owner = ?";
+ $queryArgs[] = $uidOwner;
+ if (!isset($shareType)) {
+ // Prevent unique user targets for group shares from being selected
+ $where .= " AND share_type != ?";
+ $queryArgs[] = self::$shareTypeGroupUserUnique;
+ }
+ if ($itemType == 'file' || $itemType == 'folder') {
+ $column = 'file_source';
+ } else {
+ $column = 'item_source';
+ }
+ } else {
+ if ($itemType == 'file' || $itemType == 'folder') {
+ $column = 'file_target';
+ } else {
+ $column = 'item_target';
+ }
+ }
+ if (isset($item)) {
+ // If looking for own shared items, check item_source else check item_target
+ if (isset($uidOwner) || $itemShareWithBySource) {
+ // If item type is a file, file source needs to be checked in case the item was converted
+ if ($itemType == 'file' || $itemType == 'folder') {
+ $where .= " AND path = ?";
+ $queryArgs[] = $root.$item;
+ } else {
+ $where .= " AND item_source = ?";
+ $column = 'item_source';
+ $queryArgs[] = $item;
+ }
+ } else {
+ if ($itemType == 'file' || $itemType == 'folder') {
+ $where .= " AND file_target = ?";
+ } else {
+ $where .= " AND item_target = ?";
+ }
+ $queryArgs[] = $item;
+ }
+ if ($includeCollections && $collectionTypes = self::getCollectionItemTypes($itemType)) {
+ // TODO Bart - this doesn't work with only one argument
+// $placeholders = join(',', array_fill(0, count($collectionTypes), '?'));
+// $where .= " OR item_type IN ('".$placeholders."')";
+// $queryArgs = array_merge($queryArgs, $collectionTypes);
+ }
+ }
+ if ($limit != -1 && !$includeCollections) {
+ if ($shareType == self::$shareTypeUserAndGroups) {
+ // Make sure the unique user target is returned if it exists, unique targets should follow the group share in the database
+ // If the limit is not 1, the filtering can be done later
+ $where .= ' ORDER BY *PREFIX*share.id DESC';
+ }
+ // The limit must be at least 3, because filtering needs to be done
+ if ($limit < 3) {
+ $where .= ' LIMIT 3';
+ } else {
+ $where .= ' LIMIT '.$limit;
+ }
+ }
+ // TODO Optimize selects
+ if ($format == self::FORMAT_STATUSES) {
+ if ($itemType == 'file' || $itemType == 'folder') {
+ $select = '*PREFIX*share.id, item_type, *PREFIX*share.parent, share_type, *PREFIX*fscache.path as file_source';
+ } else {
+ $select = 'id, item_type, item_source, parent, share_type';
+ }
+ } else {
+ if (isset($uidOwner)) {
+ if ($itemType == 'file' || $itemType == 'folder') {
+ $select = '*PREFIX*share.id, item_type, *PREFIX*fscache.path as file_source, *PREFIX*share.parent, share_type, share_with, permissions, stime';
+ } else {
+ $select = 'id, item_type, item_source, parent, share_type, share_with, permissions, stime, file_source';
+ }
+ } 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, share_type, share_with, permissions, file_target, *PREFIX*fscache.id, path as file_source, name, ctime, mtime, mimetype, size, encrypted, versioned, writable';
+ } else {
+ $select = '*PREFIX*share.id, item_type, item_source, item_target, *PREFIX*share.parent, share_type, share_with, uid_owner, permissions, stime, path as file_source, file_target';
+ }
+ } else {
+ $select = '*';
+ }
+ }
+ }
+ $root = strlen($root);
+ $query = \OC_DB::prepare('SELECT '.$select.' FROM *PREFIX*share '.$where);
+ $result = $query->execute($queryArgs);
+ $items = array();
+ $targets = 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']])) {
+ $row['share_type'] = self::SHARE_TYPE_GROUP;
+ $row['share_with'] = $items[$row['parent']]['share_with'];
+ // Remove the parent group share
+ unset($items[$row['parent']]);
+ } else if (!isset($uidOwner)) {
+ // Check if the same target already exists
+ if (isset($targets[$row[$column]])) {
+ // Check if the same owner shared with the user twice through a group and user share - this is allowed
+ $id = $targets[$row[$column]];
+ if ($items[$id]['uid_owner'] == $row['uid_owner']) {
+ // Switch to group share type to ensure resharing conditions aren't bypassed
+ if ($items[$id]['share_type'] != self::SHARE_TYPE_GROUP) {
+ $items[$id]['share_type'] = self::SHARE_TYPE_GROUP;
+ $items[$id]['share_with'] = $row['share_with'];
+ }
+ // Switch ids if sharing permission is granted on only one share to ensure correct parent is used if resharing
+ if (~(int)$items[$id]['permissions'] & self::PERMISSION_SHARE && (int)$row['permissions'] & self::PERMISSION_SHARE) {
+ $items[$row['id']] = $items[$id];
+ unset($items[$id]);
+ $id = $row['id'];
+ }
+ // Combine the permissions for the item
+ $items[$id]['permissions'] |= (int)$row['permissions'];
+ continue;
+ }
+ } else {
+ $targets[$row[$column]] = $row['id'];
+ }
+ }
+ // Remove root from file source paths if retrieving own shared items
+ if (isset($uidOwner) && isset($row['file_source'])) {
+ if (isset($row['parent'])) {
+ $row['file_source'] = '/Shared/'.basename($row['file_source']);
+ } else {
+ $row['file_source'] = substr($row['file_source'], $root);
+ }
+ }
+ $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 ($format == self::FORMAT_NONE) {
+ return $row;
+ } else {
+ break;
+ }
+ }
+ // Check if this is a collection of the requested item type
+ if ($includeCollections && $row['item_type'] != $itemType && $collectionBackend = self::getBackend($row['item_type']) && $collectionBackend instanceof Share_Backend_Collection) {
+ $row['collection'] = array('item_type' => $itemType, $column => $row[$column]);
+ // Fetch all of the children sources
+ $children = $collectionBackend->getChildren($row[$column]);
+ foreach ($children as $child) {
+ $childItem = $row;
+ $childItem['item_source'] = $child;
+// $childItem['item_target'] = $child['target']; TODO
+ if (isset($item)) {
+ if ($childItem[$column] == $item) {
+ // Return only the item instead of a 2-dimensional array
+ if ($limit == 1 && $format == self::FORMAT_NONE) {
+ return $childItem;
+ } else {
+ // Unset the items array and break out of both loops
+ $items = array();
+ $items[] = $childItem;
+ break 2;
+ }
+ }
+ } else {
+ $collectionItems[] = $childItem;
+ }
+ }
+ // Remove collection item
+ unset($items[$row['id']]);
+ }
+ }
+ if (!empty($collectionItems)) {
+ $items = array_merge($items, $collectionItems);
+ }
+ if ($format == self::FORMAT_NONE) {
+ return $items;
+ } else if ($format == self::FORMAT_STATUSES) {
+ $statuses = array();
+ foreach ($items as $item) {
+ if ($item['share_type'] == self::SHARE_TYPE_PRIVATE_LINK) {
+ $statuses[$item[$column]] = true;
+ } else if (!isset($statuses[$item[$column]])) {
+ $statuses[$item[$column]] = false;
+ }
+ }
+ return $statuses;
+ } else {
+ return $backend->formatItems($items, $format, $parameters);
+ }
+ } else if ($limit == 1 || (isset($uidOwner) && isset($item))) {
+ return false;
+ }
+ return array();
+ }
+
+ /**
+ * @brief Put shared item into the database
+ * @param string Item type
+ * @param string Item source
+ * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_PRIVATE_LINK
+ * @param string User or group the item is being shared with
+ * @param int CRUDS permissions
+ * @param bool|array Parent folder target (optional)
+ * @return bool Returns true on success or false on failure
+ */
+ private static function put($itemType, $itemSource, $shareType, $shareWith, $uidOwner, $permissions, $parentFolder = null) {
+ // Check file extension for an equivalent item type to convert to
+ if ($itemType == 'file') {
+ $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;
+ }
+ }
+ // Exit if this is being called for a file inside a folder, and no equivalent item type is found
+ if (isset($parentFolder) && $itemType == 'file') {
+ return false;
+ }
+ }
+ $backend = self::getBackend($itemType);
+ // Check if this is a reshare
+ if ($checkReshare = self::getItemSharedWithBySource($itemType, $itemSource, self::FORMAT_NONE, null, true)) {
+ // Check if attempting to share back to owner
+ if ($checkReshare['uid_owner'] == $shareWith && $shareType == self::SHARE_TYPE_USER) {
+ $message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' is the original sharer';
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ // Check if attempting to share back to group TODO Check unique user target
+ } else if ($shareType == self::SHARE_TYPE_GROUP && $checkReshare['share_with'] == $shareWith['group']) {
+ $message = 'Sharing '.$itemSource.' failed, because the item was orignally shared with the group '.$shareWith['group'];
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ // Check if attempting to share back a group share to a member of the same group
+ } else if (($checkReshare['share_type'] == self::SHARE_TYPE_GROUP || $checkReshare['share_type'] == self::$shareTypeGroupUserUnique) && $shareType == self::SHARE_TYPE_USER) {
+ if ($checkReshare['share_type'] == self::$shareTypeGroupUserUnique) {
+ $query = \OC_DB::prepare('SELECT share_with FROM *PREFIX*share WHERE id = ?');
+ $group = $query->execute(array($checkReshare['parent']))->fetchOne();
+ } else {
+ $group = $checkReshare['share_with'];
+ }
+ if (\OC_Group::inGroup($shareWith, $group)) {
+ $message = 'Sharing '.$itemSource.' failed, because the user '.$shareWith.' is a member of the original group share';
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ }
+ }
+ // Check if share permissions is granted
+ if ((int)$checkReshare['permissions'] & self::PERMISSION_SHARE) {
+ if (~(int)$checkReshare['permissions'] & $permissions) {
+ $message = 'Sharing '.$itemSource.' failed, because the permissions exceed permissions granted to '.$uidOwner;
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ } else {
+ // TODO Don't check if inside folder
+ $parent = $checkReshare['id'];
+ $itemSource = $checkReshare['item_source'];
+ // TODO Suggest item/file target
+ $suggestedItemTarget = $checkReshare['item_target'];
+ $fileSource = $checkReshare['file_source'];
+ $filePath = $checkReshare['file_target'];
+ }
+ } else {
+ $message = 'Sharing '.$itemSource.' failed, because resharing is not allowed';
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ }
+ } else {
+ $parent = null;
+ if (!$backend->isValidSource($itemSource, $uidOwner)) {
+ $message = 'Sharing '.$itemSource.' failed, because the sharing backend for '.$itemType.' could not find its source';
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ }
+ $parent = null;
+ if ($backend instanceof Share_Backend_File_Dependent) {
+ // NOTE Apps should start using the file cache ids in their tables
+ $filePath = $backend->getFilePath($itemSource, $uidOwner);
+ $fileSource = \OC_FileCache::getId($filePath);
+ if ($fileSource == -1) {
+ $message = 'Sharing '.$itemSource.' failed, because the file could not be found in the file cache';
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ }
+ } else {
+ $filePath = null;
+ $fileSource = null;
+ }
+ }
+ $query = \OC_DB::prepare('INSERT INTO *PREFIX*share (item_type, item_source, item_target, parent, share_type, share_with, uid_owner, permissions, stime, file_source, file_target) VALUES (?,?,?,?,?,?,?,?,?,?,?)');
+ // Share with a group
+ if ($shareType == self::SHARE_TYPE_GROUP) {
+ if (isset($fileSource)) {
+ if ($parentFolder) {
+ if ($parentFolder === true) {
+ $groupFileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith['group'], $uidOwner);
+ // Set group default file target for future use
+ $parentFolders[0]['folder'] = $groupFileTarget;
+ } else {
+ // Get group default file target
+ $groupFileTarget = $parentFolder[0]['folder'].$itemSource;
+ $parent = $parentFolder[0]['id'];
+ unset($parentFolder[0]);
+ // Only loop through users we know have different file target paths
+ $uidSharedWith = array_keys($parentFolder);
+ }
+ } else {
+ $groupFileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith['group'], $uidOwner);
+ }
+ } else {
+ $groupFileTarget = null;
+ }
+ $groupItemTarget = self::generateTarget($itemType, $itemSource, $shareType, $shareWith['group'], $uidOwner);
+ $uniqueTargets = array();
+ // Loop through all users of this group in case we need to add an extra row
+ foreach ($shareWith['users'] as $uid) {
+ $itemTarget = self::generateTarget($itemType, $itemSource, self::SHARE_TYPE_USER, $uid, $uidOwner);
+ if (isset($fileSource)) {
+ if ($parentFolder) {
+ if ($parentFolder === true) {
+ $fileTarget = self::generateTarget('file', $filePath, self::SHARE_TYPE_USER, $uid, $uidOwner);
+ if ($fileTarget != $groupFileTarget) {
+ $parentFolders[$uid]['folder'] = $fileTarget;
+ }
+ } else if (isset($parentFolder[$uid])) {
+ $fileTarget = $parentFolder[$uid]['folder'].$itemSource;
+ $parent = $parentFolder[$uid]['id'];
+ }
+ } else {
+ $fileTarget = self::generateTarget('file', $filePath, self::SHARE_TYPE_USER, $uid, $uidOwner);
+ }
+ } else {
+ $fileTarget = null;
+ }
+ // Insert an extra row for the group share if the item or file target is unique for this user
+ if ($itemTarget != $groupItemTarget || (isset($fileSource) && $fileTarget != $groupFileTarget)) {
+ $uniqueTargets[] = array('uid' => $uid, 'item_target' => $itemTarget, 'file_target' => $fileTarget);
+ }
+ }
+ $query->execute(array($itemType, $itemSource, $groupItemTarget, $parent, $shareType, $shareWith['group'], $uidOwner, $permissions, time(), $fileSource, $groupFileTarget));
+ // Save this id, any extra rows for this group share will need to reference it
+ $parent = \OC_DB::insertid('*PREFIX*share');
+ foreach ($uniqueTargets as $unique) {
+ $query->execute(array($itemType, $itemSource, $unique['item_target'], $parent, self::$shareTypeGroupUserUnique, $unique['uid'], $uidOwner, $permissions, time(), $fileSource, $unique['file_target']));
+ $id = \OC_DB::insertid('*PREFIX*share');
+ if ($parentFolder === true) {
+ $parentFolders['id'] = $id;
+ }
+ }
+ if ($parentFolder === true) {
+ // Return parent folders to preserve file target paths for potential children
+ return $parentFolders;
+ }
+ } else {
+ $itemTarget = self::generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner);
+ if (isset($fileSource)) {
+ if ($parentFolder) {
+ if ($parentFolder === true) {
+ $fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith, $uidOwner);
+ $parentFolders['folder'] = $fileTarget;
+ } else {
+ $fileTarget = $parentFolder['folder'].$itemSource;
+ $parent = $parentFolder['id'];
+ }
+ } else {
+ $fileTarget = self::generateTarget('file', $filePath, $shareType, $shareWith, $uidOwner);
+ }
+ } else {
+ $fileTarget = null;
+ }
+ $query->execute(array($itemType, $itemSource, $itemTarget, $parent, $shareType, $shareWith, $uidOwner, $permissions, time(), $fileSource, $fileTarget));
+ $id = \OC_DB::insertid('*PREFIX*share');
+ if ($parentFolder === true) {
+ $parentFolders['id'] = $id;
+ // Return parent folder to preserve file target paths for potential children
+ return $parentFolders;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * @brief Generate a unique target for the item
+ * @param string Item type
+ * @param string Item source
+ * @param int SHARE_TYPE_USER, SHARE_TYPE_GROUP, or SHARE_TYPE_PRIVATE_LINK
+ * @param string User or group the item is being shared with
+ * @return string Item target
+ *
+ * TODO Use a suggested item target by default
+ *
+ */
+ private static function generateTarget($itemType, $itemSource, $shareType, $shareWith, $uidOwner) {
+ $backend = self::getBackend($itemType);
+ if ($shareType == self::SHARE_TYPE_PRIVATE_LINK) {
+ return $backend->generateTarget($itemSource, false);
+ } else {
+ if ($itemType == 'file' || $itemType == 'folder') {
+ $column = 'file_target';
+ } else {
+ $column = 'item_target';
+ }
+ if ($shareType == self::SHARE_TYPE_USER) {
+ // Share with is a user, so set share type to user and groups
+ $shareType = self::$shareTypeUserAndGroups;
+ $userAndGroups = array_merge(array($shareWith), \OC_Group::getUserGroups($shareWith));
+ } else {
+ $userAndGroups = false;
+ }
+ $exclude = null;
+ // Backend has 3 opportunities to generate a unique target
+ for ($i = 0; $i < 2; $i++) {
+ if ($shareType == self::SHARE_TYPE_GROUP) {
+ $target = $backend->generateTarget($itemSource, false, $exclude);
+ } else {
+ $target = $backend->generateTarget($itemSource, $shareWith, $exclude);
+ }
+ if (is_array($exclude) && in_array($target, $exclude)) {
+ break;
+ }
+ // Check if target already exists
+ if ($checkTarget = self::getItems($itemType, $target, $shareType, $shareWith, null, self::FORMAT_NONE, null, 1)) {
+ // If matching target is from the same owner, use the same target. The share type will be different so this isn't the same share.
+ if ($checkTarget['uid_owner'] == $uidOwner) {
+ return $target;
+ }
+ if (!isset($exclude)) {
+ $exclude = array();
+ }
+ // Find similar targets to improve backend's chances to generate a unqiue target
+ if ($userAndGroups) {
+ $checkTargets = \OC_DB::prepare("SELECT ".$column." FROM *PREFIX*share WHERE item_type = ? AND share_type IN (?,?,?) AND share_with IN ('".implode("','", $userAndGroups)."') AND ".$column." LIKE ?");
+ $result = $checkTargets->execute(array($itemType, self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique, '%'.$target.'%'));
+ } else {
+ $checkTargets = \OC_DB::prepare("SELECT ".$column." FROM *PREFIX*share WHERE item_type = ? AND share_type = ? AND share_with = ? AND ".$column." LIKE ?");
+ $result = $checkTargets->execute(array($itemType, self::SHARE_TYPE_GROUP, $shareWith, '%'.$target.'%'));
+ }
+ while ($row = $result->fetchRow()) {
+ $exclude[] = $row[$column];
+ }
+ } else {
+ return $target;
+ }
+ }
+ }
+ $message = 'Sharing backend registered for '.$itemType.' did not generate a unique target for '.$itemSource;
+ \OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+ throw new \Exception($message);
+ }
+
+ /**
+ * @brief Delete all reshares of an item
+ * @param int Id of item to delete
+ * @param bool If true, exclude the parent from the delete (optional)
+ * @param string The user that the parent was shared with (optinal)
+ */
+ private static function delete($parent, $excludeParent = false, $uidOwner = null) {
+ $ids = array($parent);
+ $parents = array($parent);
+ while (!empty($parents)) {
+ $parents = "'".implode("','", $parents)."'";
+ // Check the owner on the first search of reshares, useful for finding and deleting the reshares by a single user of a group share
+ if (count($ids) == 1 && isset($uidOwner)) {
+ $query = \OC_DB::prepare('SELECT id FROM *PREFIX*share WHERE parent IN ('.$parents.') AND uid_owner = ?');
+ $result = $query->execute(array($uidOwner));
+ } else {
+ $query = \OC_DB::prepare('SELECT id, item_type, item_target, parent, uid_owner FROM *PREFIX*share WHERE parent IN ('.$parents.')');
+ $result = $query->execute();
+ }
+ // Reset parents array, only go through loop again if items are found
+ $parents = array();
+ while ($item = $result->fetchRow()) {
+ // Search for a duplicate parent share, this occurs when an item is shared to the same user through a group and user or the same item is shared by different users
+ $userAndGroups = array_merge(array($item['uid_owner']), \OC_Group::getUserGroups($item['uid_owner']));
+ $query = \OC_DB::prepare("SELECT id, permissions FROM *PREFIX*share WHERE item_type = ? AND item_target = ? AND share_type IN (?,?,?) AND share_with IN ('".implode("','", $userAndGroups)."') AND uid_owner != ? AND id != ?");
+ $duplicateParent = $query->execute(array($item['item_type'], $item['item_target'], self::SHARE_TYPE_USER, self::SHARE_TYPE_GROUP, self::$shareTypeGroupUserUnique, $item['uid_owner'], $item['parent']))->fetchRow();
+ if ($duplicateParent) {
+ // Change the parent to the other item id if share permission is granted
+ if ($duplicateParent['permissions'] & self::PERMISSION_SHARE) {
+ $query = \OC_DB::prepare('UPDATE *PREFIX*share SET parent = ? WHERE id = ?');
+ $query->execute(array($duplicateParent['id'], $item['id']));
+ continue;
+ }
+ }
+ $ids[] = $item['id'];
+ $parents[] = $item['id'];
+ }
+ }
+ if ($excludeParent) {
+ unset($ids[0]);
+ }
+ if (!empty($ids)) {
+ $ids = "'".implode("','", $ids)."'";
+ $query = \OC_DB::prepare('DELETE FROM *PREFIX*share WHERE id IN ('.$ids.')');
+ $query->execute();
+ }
+ }
+
+ /**
+ * Hook Listeners
+ */
+
+ public static function post_deleteUser($arguments) {
+ // Delete any items shared with the deleted user
+ $query = \OC_DB::prepare('DELETE FROM *PREFIX*share WHERE share_with = ? AND share_type = ? OR share_type = ?');
+ $result = $query->execute(array($arguments['uid'], self::SHARE_TYPE_USER, self::$shareTypeGroupUserUnique));
+ // Delete any items the deleted user shared
+ $query = \OC_DB::prepare('SELECT id FROM *PREFIX*share WHERE uid_owner = ?');
+ $result = $query->execute(array($arguments['uid']));
+ while ($item = $result->fetchRow()) {
+ self::delete($item['id']);
+ }
+ }
+
+ public static function post_addToGroup($arguments) {
+ // TODO
+ }
+
+ public static function post_removeFromGroup($arguments) {
+ // TODO Don't call if user deleted?
+ $query = \OC_DB::prepare('SELECT id, share_type FROM *PREFIX*share WHERE (share_type = ? AND share_with = ?) OR (share_type = ? AND share_with = ?)');
+ $result = $query->execute(array(self::SHARE_TYPE_GROUP, $arguments['gid'], self::$shareTypeGroupUserUnique, $arguments['uid']));
+ while ($item = $result->fetchRow()) {
+ if ($item['share_type'] == self::SHARE_TYPE_GROUP) {
+ // Delete all reshares by this user of the group share
+ self::delete($item['id'], true, $arguments['uid']);
+ } else {
+ self::delete($item['id']);
+ }
+ }
+ }
+
+}
+
+/**
+* Interface that apps must implement to share content.
+*/
+interface Share_Backend {
+
+ /**
+ * @brief Get the source of the item to be stored in the database
+ * @param string Item source
+ * @param string Owner of the item
+ * @return mixed|array|false Source
+ *
+ * Return an array if the item is file dependent, the array needs two keys: 'item' and 'file'
+ * Return false if the item does not exist for the user
+ *
+ * The formatItems() function will translate the source returned back into the item
+ */
+ public function isValidSource($itemSource, $uidOwner);
+
+ /**
+ * @brief Get a unique name of the item for the specified user
+ * @param string Item source
+ * @param string|false User the item is being shared with
+ * @param array|null List of similar item names already existing as shared items
+ * @return string Target name
+ *
+ * This function needs to verify that the user does not already have an item with this name.
+ * If it does generate a new name e.g. name_#
+ */
+ public function generateTarget($itemSource, $shareWith, $exclude = null);
+
+ /**
+ * @brief Converts the shared item sources back into the item in the specified format
+ * @param array Shared items
+ * @param int Format
+ * @return ?
+ *
+ * The items array is a 3-dimensional array with the item_source as the first key and the share id as the second key to an array with the share info.
+ * The key/value pairs included in the share info depend on the function originally called:
+ * If called by getItem(s)Shared: id, item_type, item, item_source, share_type, share_with, permissions, stime, file_source
+ * If called by getItem(s)SharedWith: id, item_type, item, item_source, item_target, share_type, share_with, permissions, stime, file_source, file_target
+ * This function allows the backend to control the output of shared items with custom formats.
+ * It is only called through calls to the public getItem(s)Shared(With) functions.
+ */
+ public function formatItems($items, $format, $parameters = null);
+
+}
+
+/**
+* Interface for share backends that share content that is dependent on files.
+* Extends the Share_Backend interface.
+*/
+interface Share_Backend_File_Dependent extends Share_Backend {
+
+ /**
+ * @brief Get the file path of the item
+ * @param
+ * @param
+ * @return
+ */
+ public function getFilePath($itemSource, $uidOwner);
+
+}
+
+/**
+* Interface for collections of of items implemented by another share backend.
+* Extends the Share_Backend interface.
+*/
+interface Share_Backend_Collection extends Share_Backend {
+
+ /**
+ * @brief Get the sources of the children of the item
+ * @param string Item source
+ * @return array Returns an array of sources
+ */
+ public function getChildren($itemSource);
+
+}
+
+?>
diff --git a/lib/public/template.php b/lib/public/template.php
index 33eefea3b80..a0ed618cb2c 100644
--- a/lib/public/template.php
+++ b/lib/public/template.php
@@ -3,7 +3,7 @@
* ownCloud
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @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
@@ -104,6 +104,3 @@ function html_select_options($options, $selected, $params=array()) {
class Template extends \OC_Template {
}
-
-
-?>
diff --git a/lib/public/user.php b/lib/public/user.php
index d351b001e8f..2fa599488a7 100644
--- a/lib/public/user.php
+++ b/lib/public/user.php
@@ -3,7 +3,7 @@
* ownCloud
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @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
@@ -51,7 +51,7 @@ class User {
*
* Get a list of all users.
*/
- public static function getUsers(){
+ public static function getUsers($search = '', $limit = -1, $offset = 0) {
return \OC_USER::getUsers();
}
@@ -120,6 +120,3 @@ class User {
}
-
-
-?>
diff --git a/lib/public/userinterface.php b/lib/public/userinterface.php
new file mode 100644
index 00000000000..b73a8f8d8b0
--- /dev/null
+++ b/lib/public/userinterface.php
@@ -0,0 +1,31 @@
+<?php
+/**
+* ownCloud
+*
+* @author Arthur Schiwon
+* @copyright 2012 Arthur Schiwon blizzz@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/>.
+*
+*/
+
+/**
+ * Public interface of ownCloud for apps to use.
+ * User Class.
+ *
+ */
+
+namespace OCP;
+
+interface UserInterface extends \OC_User_Interface {} \ No newline at end of file
diff --git a/lib/public/util.php b/lib/public/util.php
index 08394da575e..9f6f6f32e1e 100644
--- a/lib/public/util.php
+++ b/lib/public/util.php
@@ -3,7 +3,7 @@
* ownCloud
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @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
@@ -26,7 +26,7 @@
*
*/
-// use OCP namespace for all classes that are considered public.
+// use OCP namespace for all classes that are considered public.
// This means that they should be used by apps instead of the internal ownCloud classes
namespace OCP;
@@ -54,7 +54,7 @@ class Util {
/**
- * @brief send an email
+ * @brief send an email
* @param string $toaddress
* @param string $toname
* @param string $subject
@@ -145,15 +145,15 @@ class Util {
}
- /**
- * @brief Creates an url
- * @param $app app
- * @param $file file
- * @returns the url
- *
- * Returns a url to the given app and file.
- */
- public static function linkTo( $app, $file ){
+ /**
+ * @brief Creates an url
+ * @param $app app
+ * @param $file file
+ * @returns the url
+ *
+ * Returns a url to the given app and file.
+ */
+ public static function linkTo( $app, $file ){
return(\OC_Helper::linkTo( $app, $file ));
}
@@ -165,21 +165,19 @@ class Util {
* reverse proxies
*/
public static function getServerHost() {
- return(\OC_Helper::serverHost());
+ return(\OC_Request::serverHost());
}
-
/**
* @brief Returns the server protocol
* @returns the server protocol
*
* Returns the server protocol. It respects reverse proxy servers and load balancers
*/
- public static function getServerProtocol() {
- return(\OC_Helper::serverProtocol());
+ public static function getServerProtocol() {
+ return(\OC_Request::serverProtocol());
}
-
/**
* @brief Creates path to an image
* @param $app app
@@ -249,6 +247,7 @@ class Util {
return(\OC_Hook::emit( $signalclass, $signalname, $params ));
}
+
/**
* Register an get/post call. This is important to prevent CSRF attacks
* TODO: write example
@@ -266,17 +265,70 @@ class Util {
return(\OC_Util::callCheck());
}
- /**
- * @brief Used to sanitize HTML
- *
- * This function is used to sanitize HTML and should be applied on any string or array of strings before displaying it on a web page.
- *
- * @param string or array of strings
- * @return array with sanitized strings or a single sinitized string, depends on the input parameter.
- */
- public static function sanitizeHTML( $value ){
- return(\OC_Util::sanitizeHTML($value));
+ /**
+ * @brief Used to sanitize HTML
+ *
+ * This function is used to sanitize HTML and should be applied on any string or array of strings before displaying it on a web page.
+ *
+ * @param string or array of strings
+ * @return array with sanitized strings or a single sinitized string, depends on the input parameter.
+ */
+ public static function sanitizeHTML( $value ){
+ return(\OC_Util::sanitizeHTML($value));
}
-}
-?>
+ /**
+ * @brief Returns an array with all keys from input lowercased or uppercased. Numbered indices are left as is.
+ *
+ * @param $input The array to work on
+ * @param $case Either MB_CASE_UPPER or MB_CASE_LOWER (default)
+ * @param $encoding The encoding parameter is the character encoding. Defaults to UTF-8
+ * @return array
+ *
+ *
+ */
+ public static function mb_array_change_key_case($input, $case = MB_CASE_LOWER, $encoding = 'UTF-8'){
+ return(\OC_Helper::mb_array_change_key_case($input, $case, $encoding));
+ }
+
+ /**
+ * @brief replaces a copy of string delimited by the start and (optionally) length parameters with the string given in replacement.
+ *
+ * @param $input The input string. .Opposite to the PHP build-in function does not accept an array.
+ * @param $replacement The replacement string.
+ * @param $start If start is positive, the replacing will begin at the start'th offset into string. If start is negative, the replacing will begin at the start'th character from the end of string.
+ * @param $length Length of the part to be replaced
+ * @param $encoding The encoding parameter is the character encoding. Defaults to UTF-8
+ * @return string
+ *
+ */
+ public static function mb_substr_replace($string, $replacement, $start, $length = null, $encoding = 'UTF-8') {
+ return(\OC_Helper::mb_substr_replace($string, $replacement, $start, $length, $encoding));
+ }
+
+ /**
+ * @brief Replace all occurrences of the search string with the replacement string
+ *
+ * @param $search The value being searched for, otherwise known as the needle. String.
+ * @param $replace The replacement string.
+ * @param $subject The string or array being searched and replaced on, otherwise known as the haystack.
+ * @param $encoding The encoding parameter is the character encoding. Defaults to UTF-8
+ * @param $count If passed, this will be set to the number of replacements performed.
+ * @return string
+ *
+ */
+ public static function mb_str_replace($search, $replace, $subject, $encoding = 'UTF-8', &$count = null) {
+ return(\OC_Helper::mb_str_replace($search, $replace, $subject, $encoding, $count));
+ }
+
+ /**
+ * @brief performs a search in a nested array
+ * @param haystack the array to be searched
+ * @param needle the search string
+ * @param $index optional, only search this key name
+ * @return the key of the matching field, otherwise false
+ */
+ public static function recursiveArraySearch($haystack, $needle, $index = null) {
+ return(\OC_Helper::recursiveArraySearch($haystack, $needle, $index));
+ }
+}
diff --git a/lib/request.php b/lib/request.php
new file mode 100644
index 00000000000..3fe61fbddcd
--- /dev/null
+++ b/lib/request.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class OC_Request {
+ /**
+ * @brief Returns the server host
+ * @returns the server host
+ *
+ * Returns the server host, even if the website uses one or more
+ * reverse proxies
+ */
+ public static function serverHost() {
+ if(OC::$CLI){
+ return 'localhost';
+ }
+ if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
+ if (strpos($_SERVER['HTTP_X_FORWARDED_HOST'], ",") !== false) {
+ $host = trim(array_pop(explode(",", $_SERVER['HTTP_X_FORWARDED_HOST'])));
+ }
+ else{
+ $host=$_SERVER['HTTP_X_FORWARDED_HOST'];
+ }
+ }
+ else{
+ $host = $_SERVER['HTTP_HOST'];
+ }
+ return $host;
+ }
+
+
+ /**
+ * @brief Returns the server protocol
+ * @returns the server protocol
+ *
+ * Returns the server protocol. It respects reverse proxy servers and load balancers
+ */
+ public static function serverProtocol() {
+ if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
+ $proto = strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']);
+ }else{
+ if(isset($_SERVER['HTTPS']) and !empty($_SERVER['HTTPS']) and ($_SERVER['HTTPS']!='off')) {
+ $proto = 'https';
+ }else{
+ $proto = 'http';
+ }
+ }
+ return($proto);
+ }
+
+ /**
+ * @brief get Path info from request
+ * @returns string Path info or false when not found
+ */
+ public static function getPathInfo() {
+ if (array_key_exists('PATH_INFO', $_SERVER)){
+ $path_info = $_SERVER['PATH_INFO'];
+ }else{
+ $path_info = substr($_SERVER['REQUEST_URI'], strlen($_SERVER['SCRIPT_NAME']));
+ // following is taken from Sabre_DAV_URLUtil::decodePathSegment
+ $path_info = rawurldecode($path_info);
+ $encoding = mb_detect_encoding($path_info, array('UTF-8','ISO-8859-1'));
+
+ switch($encoding) {
+
+ case 'ISO-8859-1' :
+ $path_info = utf8_encode($path_info);
+
+ }
+ // end copy
+ }
+ return $path_info;
+ }
+
+ /**
+ * @brief Check if this is a no-cache request
+ * @returns true for no-cache
+ */
+ static public function isNoCache() {
+ if (!isset($_SERVER['HTTP_CACHE_CONTROL'])) {
+ return false;
+ }
+ return $_SERVER['HTTP_CACHE_CONTROL'] == 'no-cache';
+ }
+
+ /**
+ * @brief Check if the requestor understands gzip
+ * @returns true for gzip encoding supported
+ */
+ static public function acceptGZip() {
+ if (!isset($_SERVER['HTTP_ACCEPT_ENCODING'])) {
+ return false;
+ }
+ $HTTP_ACCEPT_ENCODING = $_SERVER["HTTP_ACCEPT_ENCODING"];
+ if( strpos($HTTP_ACCEPT_ENCODING, 'x-gzip') !== false )
+ return 'x-gzip';
+ else if( strpos($HTTP_ACCEPT_ENCODING,'gzip') !== false )
+ return 'gzip';
+ return false;
+ }
+}
diff --git a/lib/search.php b/lib/search.php
index 12055418687..f8a4b8e96eb 100644
--- a/lib/search.php
+++ b/lib/search.php
@@ -3,7 +3,7 @@
* ownCloud
*
* @author Frank Karlitschek
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @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
diff --git a/lib/search/provider.php b/lib/search/provider.php
index 838ab696d04..b3ee79b4770 100644
--- a/lib/search/provider.php
+++ b/lib/search/provider.php
@@ -2,13 +2,17 @@
/**
* provides search functionalty
*/
-class OC_Search_Provider {
- public function __construct($options){}
+abstract class OC_Search_Provider {
+ private $options;
+
+ public function __construct($options){
+ $this->options=$options;
+ }
/**
* search for $query
* @param string $query
* @return array An array of OC_Search_Result's
*/
- public function search($query){}
+ abstract public function search($query);
}
diff --git a/lib/setup.php b/lib/setup.php
index 61210560aba..f7e8c6950ce 100644
--- a/lib/setup.php
+++ b/lib/setup.php
@@ -107,7 +107,6 @@ class OC_Setup {
}
else {
$oldUser=OC_Config::getValue('dbuser', false);
- $oldPassword=OC_Config::getValue('dbpassword', false);
$query="SELECT user FROM mysql.user WHERE user='$dbuser'"; //this should be enough to check for admin rights in mysql
if(mysql_query($query, $connection)) {
@@ -160,8 +159,11 @@ class OC_Setup {
OC_CONFIG::setValue('dbhost', $dbhost);
OC_CONFIG::setValue('dbtableprefix', $dbtableprefix);
+ $e_host = addslashes($dbhost);
+ $e_user = addslashes($dbuser);
+ $e_password = addslashes($dbpass);
//check if the database user has admin right
- $connection_string = "host=$dbhost dbname=postgres user=$dbuser password=$dbpass";
+ $connection_string = "host='$e_host' dbname=postgres user='$e_user' password='$e_password'";
$connection = @pg_connect($connection_string);
if(!$connection) {
$error[] = array(
@@ -171,8 +173,9 @@ class OC_Setup {
return $error;
}
else {
+ $e_user = pg_escape_string($dbuser);
//check for roles creation rights in postgresql
- $query="SELECT 1 FROM pg_roles WHERE rolcreaterole=TRUE AND rolname='$dbuser'";
+ $query="SELECT 1 FROM pg_roles WHERE rolcreaterole=TRUE AND rolname='$e_user'";
$result = pg_query($connection, $query);
if($result and pg_num_rows($result) > 0) {
//use the admin login data for the new database user
@@ -204,7 +207,13 @@ class OC_Setup {
// connect to the ownCloud database (dbname=$dbname) an check if it needs to be filled
$dbuser = OC_CONFIG::getValue('dbuser');
$dbpass = OC_CONFIG::getValue('dbpassword');
- $connection_string = "host=$dbhost dbname=$dbname user=$dbuser password=$dbpass";
+
+ $e_host = addslashes($dbhost);
+ $e_dbname = addslashes($dbname);
+ $e_user = addslashes($dbuser);
+ $e_password = addslashes($dbpass);
+
+ $connection_string = "host='$e_host' dbname='$e_dbname' user='$e_user' password='$e_password'";
$connection = @pg_connect($connection_string);
if(!$connection) {
$error[] = array(
@@ -363,7 +372,7 @@ class OC_Setup {
OC_Installer::installShippedApps();
//create htaccess files for apache hosts
- if (strstr($_SERVER['SERVER_SOFTWARE'], 'Apache')) {
+ if (isset($_SERVER['SERVER_SOFTWARE']) && strstr($_SERVER['SERVER_SOFTWARE'], 'Apache')) {
self::createHtaccess();
}
@@ -401,13 +410,23 @@ class OC_Setup {
//we cant use OC_BD functions here because we need to connect as the administrative user.
$e_name = pg_escape_string($name);
$e_user = pg_escape_string($user);
- $query = "CREATE DATABASE \"$e_name\" OWNER \"$e_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 />';
echo($entry);
}
+ if(! pg_fetch_row($result)) {
+ //The database does not exists... let's create it
+ $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 />';
+ echo($entry);
+ }
+ }
$query = "REVOKE ALL PRIVILEGES ON DATABASE \"$e_name\" FROM PUBLIC";
$result = pg_query($connection, $query);
}
@@ -415,13 +434,33 @@ class OC_Setup {
private static function pg_createDBUser($name,$password,$connection) {
$e_name = pg_escape_string($name);
$e_password = pg_escape_string($password);
- $query = "CREATE USER \"$e_name\" CREATEDB PASSWORD '$e_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 />';
echo($entry);
}
+
+ if(! pg_fetch_row($result)) {
+ //user does not exists let's create it :)
+ $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 />';
+ echo($entry);
+ }
+ }
+ else { // change password of the existing role
+ $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 />';
+ echo($entry);
+ }
+ }
}
/**
*
@@ -529,5 +568,3 @@ class OC_Setup {
file_put_contents(OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data').'/index.html', '');
}
}
-
-?>
diff --git a/lib/streamwrappers.php b/lib/streamwrappers.php
index f1e0fa0e1d9..f502c6170bd 100644
--- a/lib/streamwrappers.php
+++ b/lib/streamwrappers.php
@@ -1,6 +1,4 @@
<?php
-global $FAKEDIRS;
-$FAKEDIRS=array();
class OC_FakeDirStream{
public static $dirs=array();
@@ -8,8 +6,6 @@ class OC_FakeDirStream{
private $index;
public function dir_opendir($path,$options){
- global $FAKEDIRS;
- $url=parse_url($path);
$this->name=substr($path,strlen('fakedir://'));
$this->index=0;
if(!isset(self::$dirs[$this->name])){
@@ -161,7 +157,6 @@ class OC_StaticStreamWrapper {
public function stream_write($data) {
if (!$this->writable) return 0;
$size = strlen($data);
- $len = strlen(self::$data[$this->path]);
if ($this->stream_eof()) {
self::$data[$this->path] .= $data;
} else {
diff --git a/lib/subadmin.php b/lib/subadmin.php
new file mode 100644
index 00000000000..0806f27a6bd
--- /dev/null
+++ b/lib/subadmin.php
@@ -0,0 +1,181 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Georg Ehrke
+ * @copyright 2012 Georg Ehrke
+ *
+ * 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/>.
+ *
+ */
+OC_Hook::connect('OC_User', 'post_deleteUser', 'OC_SubAdmin', 'post_deleteUser');
+OC_Hook::connect('OC_User', 'post_deleteGroup', 'OC_SubAdmin', 'post_deleteGroup');
+/**
+ * This class provides all methods needed for managing groups.
+ *
+ * Hooks provided:
+ * post_createSubAdmin($gid)
+ * post_deleteSubAdmin($gid)
+ */
+class OC_SubAdmin{
+
+ /**
+ * @brief add a SubAdmin
+ * @param $uid uid of the SubAdmin
+ * @param $gid gid of the group
+ * @return boolean
+ */
+ public static function createSubAdmin($uid, $gid){
+ $stmt = OC_DB::prepare('INSERT INTO *PREFIX*group_admin (gid,uid) VALUES(?,?)');
+ $result = $stmt->execute(array($gid, $uid));
+ OC_Hook::emit( "OC_SubAdmin", "post_createSubAdmin", array( "gid" => $gid ));
+ return true;
+ }
+
+ /**
+ * @brief delete a SubAdmin
+ * @param $uid uid of the SubAdmin
+ * @param $gid gid of the group
+ * @return boolean
+ */
+ public static function deleteSubAdmin($uid, $gid){
+ $stmt = OC_DB::prepare('DELETE FROM *PREFIX*group_admin WHERE gid = ? AND uid = ?');
+ $result = $stmt->execute(array($gid, $uid));
+ OC_Hook::emit( "OC_SubAdmin", "post_deleteSubAdmin", array( "gid" => $gid ));
+ return true;
+ }
+
+ /**
+ * @brief get groups of a SubAdmin
+ * @param $uid uid of the SubAdmin
+ * @return array
+ */
+ public static function getSubAdminsGroups($uid){
+ $stmt = OC_DB::prepare('SELECT gid FROM *PREFIX*group_admin WHERE uid = ?');
+ $result = $stmt->execute(array($uid));
+ $gids = array();
+ while($row = $result->fetchRow()){
+ $gids[] = $row['gid'];
+ }
+ return $gids;
+ }
+
+ /**
+ * @brief get SubAdmins of a group
+ * @param $gid gid of the group
+ * @return array
+ */
+ public static function getGroupsSubAdmins($gid){
+ $stmt = OC_DB::prepare('SELECT uid FROM *PREFIX*group_admin WHERE gid = ?');
+ $result = $stmt->execute(array($gid));
+ $uids = array();
+ while($row = $result->fetchRow()){
+ $uids[] = $row['uid'];
+ }
+ return $uids;
+ }
+
+ /**
+ * @brief get all SubAdmins
+ * @return array
+ */
+ public static function getAllSubAdmins(){
+ $stmt = OC_DB::prepare('SELECT * FROM *PREFIX*group_admin');
+ $result = $stmt->execute();
+ $subadmins = array();
+ while($row = $result->fetchRow()){
+ $subadmins[] = $row;
+ }
+ return $subadmins;
+ }
+
+ /**
+ * @brief checks if a user is a SubAdmin of a group
+ * @param $uid uid of the subadmin
+ * @param $gid gid of the group
+ * @return bool
+ */
+ public static function isSubAdminofGroup($uid, $gid){
+ $stmt = OC_DB::prepare('SELECT COUNT(*) as count FROM *PREFIX*group_admin where uid = ? AND gid = ?');
+ $result = $stmt->execute(array($uid, $gid));
+ $result = $result->fetchRow();
+ if($result['count'] >= 1){
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @brief checks if a user is a SubAdmin
+ * @param $uid uid of the subadmin
+ * @return bool
+ */
+ public static function isSubAdmin($uid){
+ $stmt = OC_DB::prepare('SELECT COUNT(*) as count FROM *PREFIX*group_admin WHERE uid = ?');
+ $result = $stmt->execute(array($uid));
+ $result = $result->fetchRow();
+ if($result['count'] > 0){
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @brief checks if a user is a accessible by a subadmin
+ * @param $subadmin uid of the subadmin
+ * @param $user uid of the user
+ * @return bool
+ */
+ public static function isUserAccessible($subadmin, $user){
+ if(!self::isSubAdmin($subadmin)){
+ return false;
+ }
+ $accessiblegroups = self::getSubAdminsGroups($subadmin);
+ foreach($accessiblegroups as $accessiblegroup){
+ if(OC_Group::inGroup($user, $accessiblegroup)){
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /*
+ * @brief alias for self::isSubAdminofGroup()
+ */
+ public static function isGroupAccessible($subadmin, $group){
+ return self::isSubAdminofGroup($subadmin, $group);
+ }
+
+ /**
+ * @brief delete all SubAdmins by uid
+ * @param $parameters
+ * @return boolean
+ */
+ public static function post_deleteUser($parameters){
+ $stmt = OC_DB::prepare('DELETE FROM *PREFIX*group_admin WHERE uid = ?');
+ $result = $stmt->execute(array($parameters['uid']));
+ return true;
+ }
+
+ /**
+ * @brief delete all SubAdmins8 by gid
+ * @param $parameters
+ * @return boolean
+ */
+ public static function post_deleteGroup($parameters){
+ $stmt = OC_DB::prepare('DELETE FROM *PREFIX*group_admin WHERE gid = ?');
+ $result = $stmt->execute(array($parameters['gid']));
+ return true;
+ }
+}
diff --git a/lib/template.php b/lib/template.php
index dd5dbad4a99..a10ddcd5c33 100644
--- a/lib/template.php
+++ b/lib/template.php
@@ -4,7 +4,7 @@
*
* @author Frank Karlitschek
* @author Jakob Sack
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @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
@@ -82,7 +82,6 @@ function relative_modified_date($timestamp) {
$diffhours = round($diffminutes/60);
$diffdays = round($diffhours/24);
$diffmonths = round($diffdays/31);
- $diffyears = round($diffdays/365);
if($timediff < 60) { return $l->t('seconds ago'); }
else if($timediff < 120) { return $l->t('1 minute ago'); }
@@ -159,17 +158,55 @@ class OC_Template{
$this->vars['requesttoken'] = OC_Util::callRegister();
}
$this->l10n = OC_L10N::get($app);
- header('X-Frame-Options: Sameorigin');
- header('X-XSS-Protection: 1; mode=block');
- header('X-Content-Type-Options: nosniff');
+ header('X-Frame-Options: Sameorigin');
+ header('X-XSS-Protection: 1; mode=block');
+ header('X-Content-Type-Options: nosniff');
+
$this->findTemplate($name);
}
/**
+ * autodetects the formfactor of the used device
+ * default -> the normal desktop browser interface
+ * mobile -> interface for smartphones
+ * tablet -> interface for tablets
+ * standalone -> the default interface but without header, footer and
+ * sidebar, just the application. Useful to use just a specific
+ * app on the desktop in a standalone window.
+ */
+ public static function detectFormfactor(){
+ // please add more useragent strings for other devices
+ if(isset($_SERVER['HTTP_USER_AGENT'])){
+ if(stripos($_SERVER['HTTP_USER_AGENT'],'ipad')>0) {
+ $mode='tablet';
+ }elseif(stripos($_SERVER['HTTP_USER_AGENT'],'iphone')>0){
+ $mode='mobile';
+ }elseif((stripos($_SERVER['HTTP_USER_AGENT'],'N9')>0) and (stripos($_SERVER['HTTP_USER_AGENT'],'nokia')>0)){
+ $mode='mobile';
+ }else{
+ $mode='default';
+ }
+ }else{
+ $mode='default';
+ }
+ return($mode);
+ }
+
+ /**
* @brief Returns the formfactor extension for current formfactor
*/
- protected function getFormFactorExtension()
+ static public function getFormFactorExtension()
{
+ // if the formfactor is not yet autodetected do the
+ // autodetection now. For possible formfactors check the
+ // detectFormfactor documentation
+ if(!isset($_SESSION['formfactor'])){
+ $_SESSION['formfactor'] = self::detectFormfactor();
+ }
+ // allow manual override via GET parameter
+ if(isset($_GET['formfactor'])){
+ $_SESSION['formfactor']=$_GET['formfactor'];
+ }
$formfactor=$_SESSION['formfactor'];
if($formfactor=='default') {
$fext='';
@@ -198,16 +235,16 @@ class OC_Template{
$theme=OC_Config::getValue( "theme" );
// Read the detected formfactor and use the right file name.
- $fext = $this->getFormFactorExtension();
+ $fext = self::getFormFactorExtension();
$app = $this->application;
// Check if it is a app template or not.
if( $app != "" ){
// Check if the app is in the app folder or in the root
- if( file_exists( OC::$APPSROOT."/apps/$app/templates/" )){
+ if( file_exists(OC_App::getAppPath($app)."/templates/" )){
// Check if the template is overwritten by the selected theme
if ($this->checkPathForTemplate(OC::$SERVERROOT."/themes/$theme/apps/$app/templates/", $name, $fext)) {
- }elseif ($this->checkPathForTemplate(OC::$APPSROOT."/apps/$app/templates/", $name, $fext)) {
+ }elseif ($this->checkPathForTemplate(OC_App::getAppPath($app)."/templates/", $name, $fext)) {
}
}else{
// Check if the template is overwritten by the selected theme
@@ -261,6 +298,7 @@ class OC_Template{
* @brief Assign variables
* @param $key key
* @param $value value
+ * @param $sanitizeHTML false, if data shouldn't get passed through htmlentities
* @returns true
*
* This function assigns a variable. It can be accessed via $_[$key] in
@@ -268,8 +306,8 @@ class OC_Template{
*
* If the key existed before, it will be overwritten
*/
-
- public function assign( $key, $value ){
+ public function assign( $key, $value, $sanitizeHTML=true ){
+ if($sanitizeHTML == true) $value=OC_Util::sanitizeHTML($value);
$this->vars[$key] = $value;
return true;
}
@@ -320,29 +358,6 @@ class OC_Template{
}
}
- /*
- * @brief append the $file-url if exist at $root
- * @param $type of collection to use when appending
- * @param $root path to check
- * @param $web base for path
- * @param $file the filename
- */
- public function appendIfExist($type, $root, $web, $file) {
- if (is_file($root.'/'.$file)) {
- $pathes = explode('/', $file);
- if($type == 'cssfiles' && $root == OC::$APPSROOT && $pathes[0] == 'apps'){
- $app = $pathes[1];
- unset($pathes[0]);
- unset($pathes[1]);
- $path = implode('/', $pathes);
- $this->append( $type, OC_Helper::linkTo($app, $path));
- }else{
- $this->append( $type, $web.'/'.$file);
- }
- return true;
- }
- return false;
- }
/**
* @brief Proceeds the template
* @returns content
@@ -354,117 +369,18 @@ class OC_Template{
$data = $this->_fetch();
if( $this->renderas ){
- // Decide which page we show
- if( $this->renderas == "user" ){
- $page = new OC_Template( "core", "layout.user" );
- $page->assign('searchurl',OC_Helper::linkTo( 'search', 'index.php' ));
+ $page = new OC_TemplateLayout($this->renderas);
+ if($this->renderas == 'user') {
$page->assign('requesttoken', $this->vars['requesttoken']);
- if(array_search(OC_APP::getCurrentApp(),array('settings','admin','help'))!==false){
- $page->assign('bodyid','body-settings');
- }else{
- $page->assign('bodyid','body-user');
- }
-
- // Add navigation entry
- $navigation = OC_App::getNavigation();
- $page->assign( "navigation", $navigation);
- $page->assign( "settingsnavigation", OC_App::getSettingsNavigation());
- foreach($navigation as $entry) {
- if ($entry['active']) {
- $page->assign( 'application', $entry['name'] );
- break;
- }
- }
- }else{
- $page = new OC_Template( "core", "layout.guest" );
- }
-
- // Read the selected theme from the config file
- $theme=OC_Config::getValue( "theme" );
-
- // Read the detected formfactor and use the right file name.
- $fext = $this->getFormFactorExtension();
-
- // Add the core js files or the js files provided by the selected theme
- foreach(OC_Util::$scripts as $script){
- // Is it in 3rd party?
- if($page->appendIfExist('jsfiles', OC::$THIRDPARTYROOT, OC::$THIRDPARTYWEBROOT, $script.'.js')) {
-
- // Is it in apps and overwritten by the theme?
- }elseif($page->appendIfExist('jsfiles', OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/apps/$script$fext.js" )) {
- }elseif($page->appendIfExist('jsfiles', OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/apps/$script.js" )) {
-
- // Is it part of an app?
- }elseif($page->appendIfExist('jsfiles', OC::$APPSROOT, OC::$APPSWEBROOT, "apps/$script$fext.js" )) {
- }elseif($page->appendIfExist('jsfiles', OC::$APPSROOT, OC::$APPSWEBROOT, "apps/$script.js" )) {
-
- // Is it in the owncloud root but overwritten by the theme?
- }elseif($page->appendIfExist('jsfiles', OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/$script$fext.js" )) {
- }elseif($page->appendIfExist('jsfiles', OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/$script.js" )) {
-
- // Is it in the owncloud root ?
- }elseif($page->appendIfExist('jsfiles', OC::$SERVERROOT, OC::$WEBROOT, "$script$fext.js" )) {
- }elseif($page->appendIfExist('jsfiles', OC::$SERVERROOT, OC::$WEBROOT, "$script.js" )) {
-
- // Is in core but overwritten by a theme?
- }elseif($page->appendIfExist('jsfiles', OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/core/$script$fext.js" )) {
- }elseif($page->appendIfExist('jsfiles', OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/core/$script.js" )) {
-
- // Is it in core?
- }elseif($page->appendIfExist('jsfiles', OC::$SERVERROOT, OC::$WEBROOT, "core/$script$fext.js" )) {
- }elseif($page->appendIfExist('jsfiles', OC::$SERVERROOT, OC::$WEBROOT, "core/$script.js" )) {
-
- }else{
- echo('js file not found: script:'.$script.' formfactor:'.$fext.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
- die();
-
- }
- }
- // Add the css files
- foreach(OC_Util::$styles as $style){
- // is it in 3rdparty?
- if($page->appendIfExist('cssfiles', OC::$THIRDPARTYROOT, OC::$THIRDPARTYWEBROOT, $style.'.css')) {
-
- // or in apps?
- }elseif($page->appendIfExist('cssfiles', OC::$APPSROOT, OC::$APPSWEBROOT, "apps/$style$fext.css" )) {
- }elseif($page->appendIfExist('cssfiles', OC::$APPSROOT, OC::$APPSWEBROOT, "apps/$style.css" )) {
-
- // or in the owncloud root?
- }elseif($page->appendIfExist('cssfiles', OC::$SERVERROOT, OC::$WEBROOT, "$style$fext.css" )) {
- }elseif($page->appendIfExist('cssfiles', OC::$SERVERROOT, OC::$WEBROOT, "$style.css" )) {
-
- // or in core ?
- }elseif($page->appendIfExist('cssfiles', OC::$SERVERROOT, OC::$WEBROOT, "core/$style$fext.css" )) {
- }elseif($page->appendIfExist('cssfiles', OC::$SERVERROOT, OC::$WEBROOT, "core/$style.css" )) {
-
- }else{
- echo('css file not found: style:'.$script.' formfactor:'.$fext.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
- die();
- }
- }
- // Add the theme css files. you can override the default values here
- if(!empty($theme)) {
- foreach(OC_Util::$styles as $style){
- if($page->appendIfExist('cssfiles', OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/apps/$style$fext.css" )) {
- }elseif($page->appendIfExist('cssfiles', OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/apps/$style.css" )) {
-
- }elseif($page->appendIfExist('cssfiles', OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/$style$fext.css" )) {
- }elseif($page->appendIfExist('cssfiles', OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/$style.css" )) {
-
- }elseif($page->appendIfExist('cssfiles', OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/core/$style$fext.css" )) {
- }elseif($page->appendIfExist('cssfiles', OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/core/$style.css" )) {
- }
- }
}
// Add custom headers
- $page->assign('headers',$this->headers);
+ $page->assign('headers',$this->headers, false);
foreach(OC_Util::$headers as $header){
$page->append('headers',$header);
}
- // Add css files and js files
- $page->assign( "content", $data );
+ $page->assign( "content", $data, false );
return $page->fetchPage();
}
else{
@@ -509,13 +425,13 @@ class OC_Template{
$_ = array_merge( $additionalparams, $this->vars );
}
- // Einbinden
+ // Include
ob_start();
include( $this->path.$file.'.php' );
$data = ob_get_contents();
@ob_end_clean();
- // Daten zurückgeben
+ // Return data
return $data;
}
@@ -529,7 +445,7 @@ class OC_Template{
public static function printUserPage( $application, $name, $parameters = array() ){
$content = new OC_Template( $application, $name, "user" );
foreach( $parameters as $key => $value ){
- $content->assign( $key, $value );
+ $content->assign( $key, $value, false );
}
print $content->printPage();
}
@@ -544,7 +460,7 @@ class OC_Template{
public static function printAdminPage( $application, $name, $parameters = array() ){
$content = new OC_Template( $application, $name, "admin" );
foreach( $parameters as $key => $value ){
- $content->assign( $key, $value );
+ $content->assign( $key, $value, false );
}
return $content->printPage();
}
@@ -559,7 +475,7 @@ class OC_Template{
public static function printGuestPage( $application, $name, $parameters = array() ){
$content = new OC_Template( $application, $name, "guest" );
foreach( $parameters as $key => $value ){
- $content->assign( $key, $value );
+ $content->assign( $key, $value, false );
}
return $content->printPage();
}
diff --git a/lib/templatelayout.php b/lib/templatelayout.php
new file mode 100644
index 00000000000..588a7845997
--- /dev/null
+++ b/lib/templatelayout.php
@@ -0,0 +1,195 @@
+<?php
+/**
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class OC_TemplateLayout extends OC_Template {
+ public function __construct( $renderas ){
+ // Decide which page we show
+
+ if( $renderas == 'user' ){
+ parent::__construct( 'core', 'layout.user' );
+ $this->assign('searchurl',OC_Helper::linkTo( 'search', 'index.php' ), false);
+ if(array_search(OC_APP::getCurrentApp(),array('settings','admin','help'))!==false){
+ $this->assign('bodyid','body-settings', false);
+ }else{
+ $this->assign('bodyid','body-user', false);
+ }
+
+ // Add navigation entry
+ $navigation = OC_App::getNavigation();
+ $this->assign( 'navigation', $navigation, false);
+ $this->assign( 'settingsnavigation', OC_App::getSettingsNavigation(), false);
+ foreach($navigation as $entry) {
+ if ($entry['active']) {
+ $this->assign( 'application', $entry['name'], false );
+ break;
+ }
+ }
+ }else{
+ parent::__construct( 'core', 'layout.guest' );
+ }
+
+ $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
+
+ // Add the js files
+ $jsfiles = self::findJavascriptFiles(OC_Util::$scripts);
+ $this->assign('jsfiles', array(), false);
+ foreach($jsfiles as $info) {
+ $root = $info[0];
+ $web = $info[1];
+ $file = $info[2];
+ $this->append( 'jsfiles', $web.'/'.$file);
+ }
+
+ // Add the css files
+ $cssfiles = self::findStylesheetFiles(OC_Util::$styles);
+
+ $this->assign('cssfiles', array());
+ foreach($cssfiles as $info) {
+ $root = $info[0];
+ $web = $info[1];
+ $file = $info[2];
+ $paths = explode('/', $file);
+
+ $in_root = false;
+ foreach(OC::$APPSROOTS as $app_root) {
+ if($root == $app_root['path']) {
+ $in_root = true;
+ break;
+ }
+ }
+
+ if($in_root ) {
+ $app = $paths[0];
+ unset($paths[0]);
+ $path = implode('/', $paths);
+ $this->append( 'cssfiles', OC_Helper::linkTo($app, $path));
+ }
+ else {
+ $this->append( 'cssfiles', $web.'/'.$file);
+ }
+ }
+ }
+
+ /*
+ * @brief append the $file-url if exist at $root
+ * @param $files array to append file info to
+ * @param $root path to check
+ * @param $web base for path
+ * @param $file the filename
+ */
+ static public function appendIfExist(&$files, $root, $webroot, $file) {
+ if (is_file($root.'/'.$file)) {
+ $files[] = array($root, $webroot, $file);
+ return true;
+ }
+ return false;
+ }
+
+ static public function findStylesheetFiles($styles){
+ // Read the selected theme from the config file
+ $theme=OC_Config::getValue( 'theme' );
+
+ // Read the detected formfactor and use the right file name.
+ $fext = self::getFormFactorExtension();
+
+ $files = array();
+ foreach($styles as $style){
+ // is it in 3rdparty?
+ if(self::appendIfExist($files, OC::$THIRDPARTYROOT, OC::$THIRDPARTYWEBROOT, $style.'.css')) {
+
+ // or in the owncloud root?
+ }elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "$style$fext.css" )) {
+ }elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "$style.css" )) {
+
+ // or in core ?
+ }elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "core/$style$fext.css" )) {
+ }elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "core/$style.css" )) {
+
+ }else{
+ $append = false;
+ // or in apps?
+ foreach( OC::$APPSROOTS as $apps_dir)
+ {
+ if(self::appendIfExist($files, $apps_dir['path'], $apps_dir['url'], "$style$fext.css")) { $append =true; break; }
+ elseif(self::appendIfExist($files, $apps_dir['path'], $apps_dir['url'], "$style.css")) { $append =true; break; }
+ }
+ if(! $append) {
+ echo('css file not found: style:'.$style.' formfactor:'.$fext.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
+ die();
+ }
+ }
+ }
+ // Add the theme css files. you can override the default values here
+ if(!empty($theme)) {
+ foreach($styles as $style){
+ if(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/apps/$style$fext.css" )) {
+ }elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/apps/$style.css" )) {
+
+ }elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/$style$fext.css" )) {
+ }elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/$style.css" )) {
+
+ }elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/core/$style$fext.css" )) {
+ }elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/core/$style.css" )) {
+ }
+ }
+ }
+ return $files;
+ }
+
+ static public function findJavascriptFiles($scripts){
+ // Read the selected theme from the config file
+ $theme=OC_Config::getValue( 'theme' );
+
+ // Read the detected formfactor and use the right file name.
+ $fext = self::getFormFactorExtension();
+
+ $files = array();
+ foreach($scripts as $script){
+ // Is it in 3rd party?
+ if(self::appendIfExist($files, OC::$THIRDPARTYROOT, OC::$THIRDPARTYWEBROOT, $script.'.js')) {
+
+ // Is it in apps and overwritten by the theme?
+ }elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/apps/$script$fext.js" )) {
+ }elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/apps/$script.js" )) {
+
+ // Is it in the owncloud root but overwritten by the theme?
+ }elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/$script$fext.js" )) {
+ }elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/$script.js" )) {
+
+ // Is it in the owncloud root ?
+ }elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "$script$fext.js" )) {
+ }elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "$script.js" )) {
+
+ // Is in core but overwritten by a theme?
+ }elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/core/$script$fext.js" )) {
+ }elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "themes/$theme/core/$script.js" )) {
+
+ // Is it in core?
+ }elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "core/$script$fext.js" )) {
+ }elseif(self::appendIfExist($files, OC::$SERVERROOT, OC::$WEBROOT, "core/$script.js" )) {
+
+ }else{
+ // Is it part of an app?
+ $append = false;
+ foreach( OC::$APPSROOTS as $apps_dir) {
+ if(self::appendIfExist($files, $apps_dir['path'], OC::$WEBROOT.$apps_dir['url'], "$script$fext.js")) { $append =true; break; }
+ elseif(self::appendIfExist($files, $apps_dir['path'], OC::$WEBROOT.$apps_dir['url'], "$script.js")) { $append =true; break; }
+ }
+ if(! $append) {
+ echo('js file not found: script:'.$script.' formfactor:'.$fext.' webroot:'.OC::$WEBROOT.' serverroot:'.OC::$SERVERROOT);
+ die();
+ }
+ }
+ }
+ return $files;
+ }
+}
diff --git a/lib/updater.php b/lib/updater.php
index 07904ef5f13..967f64c0b30 100644
--- a/lib/updater.php
+++ b/lib/updater.php
@@ -3,7 +3,7 @@
* ownCloud
*
* @author Frank Karlitschek
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @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
@@ -85,4 +85,3 @@ class OC_Updater{
}
}
-?>
diff --git a/lib/user.php b/lib/user.php
index 9e0e82e79fe..06a56b7f4a6 100644
--- a/lib/user.php
+++ b/lib/user.php
@@ -3,7 +3,7 @@
* ownCloud
*
* @author Frank Karlitschek
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @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
@@ -21,7 +21,9 @@
*/
/**
- * This class provides all methods for user management.
+ * This class provides wrapper methods for user management. Multiple backends are
+ * supported. User management operations are delegated to the configured backend for
+ * execution.
*
* Hooks provided:
* pre_createUser(&run, uid, password)
@@ -48,8 +50,8 @@ class OC_User {
*
* Makes a list of backends that can be used by other modules
*/
- public static function registerBackend( $name ){
- self::$_backends[] = $name;
+ public static function registerBackend( $backend ){
+ self::$_backends[] = $backend;
return true;
}
@@ -81,28 +83,38 @@ class OC_User {
* Set the User Authentication Module
*/
public static function useBackend( $backend = 'database' ){
- // You'll never know what happens
- if( null === $backend OR !is_string( $backend )){
- $backend = 'database';
- }
+ if($backend instanceof OC_User_Interface){
+ self::$_usedBackends[get_class($backend)]=$backend;
+ }else{
+ // You'll never know what happens
+ if( null === $backend OR !is_string( $backend )){
+ $backend = 'database';
+ }
- // Load backend
- switch( $backend ){
- case 'database':
- case 'mysql':
- case 'sqlite':
- self::$_usedBackends[$backend] = new OC_User_Database();
- break;
- default:
- $className = 'OC_USER_' . strToUpper($backend);
- self::$_usedBackends[$backend] = new $className();
- break;
+ // Load backend
+ switch( $backend ){
+ case 'database':
+ case 'mysql':
+ case 'sqlite':
+ self::$_usedBackends[$backend] = new OC_User_Database();
+ break;
+ default:
+ $className = 'OC_USER_' . strToUpper($backend);
+ self::$_usedBackends[$backend] = new $className();
+ break;
+ }
}
-
true;
}
/**
+ * remove all used backends
+ */
+ public static function clearBackends(){
+ self::$_usedBackends=array();
+ }
+
+ /**
* @brief Create a new user
* @param $uid The username of the user to create
* @param $password The password of the new user
@@ -166,9 +178,7 @@ class OC_User {
if( $run ){
//delete the user from all backends
foreach(self::$_usedBackends as $backend){
- if($backend->implementsActions(OC_USER_BACKEND_DELETE_USER)){
- $backend->deleteUser($uid);
- }
+ $backend->deleteUser($uid);
}
// We have to delete the user from all groups
foreach( OC_Group::getUserGroups( $uid ) as $i ){
@@ -198,8 +208,9 @@ class OC_User {
OC_Hook::emit( "OC_User", "pre_login", array( "run" => &$run, "uid" => $uid ));
if( $run ){
- $uid=self::checkPassword( $uid, $password );
- if($uid){
+ $uid = self::checkPassword( $uid, $password );
+ $enabled = self::isEnabled($uid);
+ if($uid && $enabled){
session_regenerate_id(true);
self::setUserId($uid);
OC_Hook::emit( "OC_User", "post_login", array( "uid" => $uid, 'password'=>$password ));
@@ -240,17 +251,13 @@ class OC_User {
* Checks if the user is logged in
*/
public static function isLoggedIn(){
- static $is_login_checked = null;
- if (!is_null($is_login_checked)) {
- return $is_login_checked;
- }
if( isset($_SESSION['user_id']) AND $_SESSION['user_id']) {
OC_App::loadApps(array('authentication'));
if (self::userExists($_SESSION['user_id']) ){
- return $is_login_checked = true;
+ return true;
}
}
- return $is_login_checked = false;
+ return false;
}
/**
@@ -331,14 +338,12 @@ class OC_User {
*
* Get a list of all users.
*/
- public static function getUsers(){
- $users=array();
- foreach(self::$_usedBackends as $backend){
- if($backend->implementsActions(OC_USER_BACKEND_GET_USERS)){
- $backendUsers=$backend->getUsers();
- if(is_array($backendUsers)){
- $users=array_merge($users,$backendUsers);
- }
+ public static function getUsers($search = '', $limit = null, $offset = null) {
+ $users = array();
+ foreach (self::$_usedBackends as $backend) {
+ $backendUsers = $backend->getUsers($search, $limit, $offset);
+ if (is_array($backendUsers)) {
+ $users = array_merge($users, $backendUsers);
}
}
asort($users);
@@ -352,15 +357,45 @@ class OC_User {
*/
public static function userExists($uid){
foreach(self::$_usedBackends as $backend){
- if($backend->implementsActions(OC_USER_BACKEND_USER_EXISTS)){
- $result=$backend->userExists($uid);
- if($result===true){
- return true;
- }
+ $result=$backend->userExists($uid);
+ if($result===true){
+ return true;
}
}
return false;
}
+
+ /**
+ * disables a user
+ * @param string $userid the user to disable
+ */
+ public static function disableUser($userid){
+ $query = "INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, `configkey`, `configvalue`) VALUES(?, ?, ?, ?)";
+ $query = OC_DB::prepare($query);
+ $query->execute(array($userid, 'core', 'enabled', 'false'));
+ }
+
+ /**
+ * enable a user
+ * @param string $userid
+ */
+ public static function enableUser($userid){
+ $query = "DELETE FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ? AND `configvalue` = ?";
+ $query = OC_DB::prepare($query);
+ $query->execute(array($userid, 'core', 'enabled', 'false'));
+ }
+
+ /**
+ * checks if a user is enabled
+ * @param string $userid
+ * @return bool
+ */
+ public static function isEnabled($userid){
+ $query = "SELECT `userid` FROM `*PREFIX*preferences` WHERE `userid` = ? AND `appid` = ? AND `configkey` = ? AND `configvalue` = ?";
+ $query = OC_DB::prepare($query);
+ $results = $query->execute(array($userid, 'core', 'enabled', 'false'));
+ return $results->numRows() ? false : true;
+ }
/**
* @brief Set cookie value to use in next page load
diff --git a/lib/user/backend.php b/lib/user/backend.php
index 4afdf152150..f67908cdac0 100644
--- a/lib/user/backend.php
+++ b/lib/user/backend.php
@@ -5,7 +5,7 @@
*
* @author Frank Karlitschek
* @author Dominik Schmidt
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @copyright 2012 Frank Karlitschek frank@owncloud.org
* @copyright 2011 Dominik Schmidt dev@dominik-schmidt.de
*
* This library is free software; you can redistribute it and/or
@@ -32,26 +32,22 @@ define('OC_USER_BACKEND_NOT_IMPLEMENTED', -501);
* actions that user backends can define
*/
define('OC_USER_BACKEND_CREATE_USER', 0x000001);
-define('OC_USER_BACKEND_DELETE_USER', 0x000010);
-define('OC_USER_BACKEND_SET_PASSWORD', 0x000100);
-define('OC_USER_BACKEND_CHECK_PASSWORD', 0x001000);
-define('OC_USER_BACKEND_GET_USERS', 0x010000);
-define('OC_USER_BACKEND_USER_EXISTS', 0x100000);
+define('OC_USER_BACKEND_SET_PASSWORD', 0x000010);
+define('OC_USER_BACKEND_CHECK_PASSWORD', 0x000100);
/**
- * abstract base class for user management
- * subclass this for your own backends and see OC_User_Example for descriptions
+ * Abstract base class for user management. Provides methods for querying backend
+ * capabilities.
+ *
+ * Subclass this for your own backends, and see OC_User_Example for descriptions
*/
-abstract class OC_User_Backend {
+abstract class OC_User_Backend implements OC_User_Interface {
protected $possibleActions = array(
OC_USER_BACKEND_CREATE_USER => 'createUser',
- OC_USER_BACKEND_DELETE_USER => 'deleteUser',
OC_USER_BACKEND_SET_PASSWORD => 'setPassword',
OC_USER_BACKEND_CHECK_PASSWORD => 'checkPassword',
- OC_USER_BACKEND_GET_USERS => 'getUsers',
- OC_USER_BACKEND_USER_EXISTS => 'userExists'
);
/**
@@ -83,4 +79,34 @@ abstract class OC_User_Backend {
public function implementsActions($actions){
return (bool)($this->getSupportedActions() & $actions);
}
+
+ /**
+ * @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;
+ }
+
+ /**
+ * @brief Get a list of all users
+ * @returns array with all uids
+ *
+ * Get a list of all users.
+ */
+ public function getUsers($search = '', $limit = -1, $offset = 0) {
+ return array();
+ }
+
+ /**
+ * @brief check if a user exists
+ * @param string $uid the username
+ * @return boolean
+ */
+ public function userExists($uid){
+ return false;
+ }
}
diff --git a/lib/user/database.php b/lib/user/database.php
index 5464a4abfac..1746c4fe0c0 100644
--- a/lib/user/database.php
+++ b/lib/user/database.php
@@ -4,7 +4,7 @@
* ownCloud
*
* @author Frank Karlitschek
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @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
@@ -39,7 +39,6 @@ require_once 'phpass/PasswordHash.php';
* Class for user management in a SQL Database (e.g. MySQL, SQLite)
*/
class OC_User_Database extends OC_User_Backend {
- static private $userGroupCache=array();
/**
* @var PasswordHash
*/
@@ -70,7 +69,7 @@ class OC_User_Database extends OC_User_Backend {
}else{
$hasher=$this->getHasher();
$hash = $hasher->HashPassword($password.OC_Config::getValue('passwordsalt', ''));
- $query = OC_DB::prepare( "INSERT INTO `*PREFIX*users` ( `uid`, `password` ) VALUES( ?, ? )" );
+ $query = OC_DB::prepare( 'INSERT INTO `*PREFIX*users` ( `uid`, `password` ) VALUES( ?, ? )' );
$result = $query->execute( array( $uid, $hash));
return $result ? true : false;
@@ -86,8 +85,8 @@ class OC_User_Database extends OC_User_Backend {
*/
public function deleteUser( $uid ){
// Delete user-group-relation
- $query = OC_DB::prepare( "DELETE FROM `*PREFIX*users` WHERE `uid` = ?" );
- $result = $query->execute( array( $uid ));
+ $query = OC_DB::prepare( 'DELETE FROM `*PREFIX*users` WHERE uid = ?' );
+ $query->execute( array( $uid ));
return true;
}
@@ -103,12 +102,11 @@ class OC_User_Database extends OC_User_Backend {
if( $this->userExists($uid) ){
$hasher=$this->getHasher();
$hash = $hasher->HashPassword($password.OC_Config::getValue('passwordsalt', ''));
- $query = OC_DB::prepare( "UPDATE `*PREFIX*users` SET `password` = ? WHERE `uid` = ?" );
- $result = $query->execute( array( $hash, $uid ));
+ $query = OC_DB::prepare( 'UPDATE `*PREFIX*users` SET `password` = ? WHERE `uid` = ?' );
+ $query->execute( array( $hash, $uid ));
return true;
- }
- else{
+ }else{
return false;
}
}
@@ -123,7 +121,7 @@ class OC_User_Database extends OC_User_Backend {
* returns the user id or false
*/
public function checkPassword( $uid, $password ){
- $query = OC_DB::prepare( "SELECT `uid`, `password` FROM `*PREFIX*users` WHERE `uid` = ?" );
+ $query = OC_DB::prepare( 'SELECT `uid`, `password` FROM `*PREFIX*users` WHERE `uid` = ?' );
$result = $query->execute( array( $uid));
$row=$result->fetchRow();
@@ -156,13 +154,12 @@ class OC_User_Database extends OC_User_Backend {
*
* Get a list of all users.
*/
- public function getUsers(){
- $query = OC_DB::prepare( "SELECT `uid` FROM `*PREFIX*users`" );
- $result = $query->execute();
-
- $users=array();
- while( $row = $result->fetchRow()){
- $users[] = $row["uid"];
+ public function getUsers($search = '', $limit = null, $offset = null) {
+ $query = OC_DB::prepare('SELECT `uid` FROM `*PREFIX*users` WHERE `uid` LIKE ? LIMIT',$limit,$offset);
+ $result = $query->execute(array($search.'%'));
+ $users = array();
+ while ($row = $result->fetchRow()) {
+ $users[] = $row['uid'];
}
return $users;
}
@@ -173,7 +170,7 @@ class OC_User_Database extends OC_User_Backend {
* @return boolean
*/
public function userExists($uid){
- $query = OC_DB::prepare( "SELECT * FROM `*PREFIX*users` WHERE `uid` = ?" );
+ $query = OC_DB::prepare( 'SELECT * FROM `*PREFIX*users` WHERE `uid` = ?' );
$result = $query->execute( array( $uid ));
return $result->numRows() > 0;
diff --git a/lib/user/dummy.php b/lib/user/dummy.php
index 03d5c3256da..da3edfb2df4 100644
--- a/lib/user/dummy.php
+++ b/lib/user/dummy.php
@@ -4,7 +4,7 @@
* ownCloud
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @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
@@ -100,7 +100,7 @@ class OC_User_Dummy extends OC_User_Backend {
*
* Get a list of all users.
*/
- public function getUsers(){
+ public function getUsers($search = '', $limit = -1, $offset = 0) {
return array_keys($this->users);
}
diff --git a/lib/user/example.php b/lib/user/example.php
index b6a2091b685..77246d8136c 100644
--- a/lib/user/example.php
+++ b/lib/user/example.php
@@ -4,7 +4,7 @@
* ownCloud
*
* @author Frank Karlitschek
- * @copyright 2010 Frank Karlitschek karlitschek@kde.org
+ * @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
@@ -35,20 +35,7 @@ abstract class OC_User_Example extends OC_User_Backend {
* Creates a new user. Basic checking of username is done in OC_User
* itself, not in its subclasses.
*/
- public function createUser($uid, $password){
- return OC_USER_BACKEND_NOT_IMPLEMENTED;
- }
-
- /**
- * @brief delete a user
- * @param $uid The username of the user to delete
- * @returns true/false
- *
- * Deletes a user
- */
- public function deleteUser( $uid ){
- return OC_USER_BACKEND_NOT_IMPLEMENTED;
- }
+ abstract public function createUser($uid, $password);
/**
* @brief Set password
@@ -58,9 +45,7 @@ abstract class OC_User_Example extends OC_User_Backend {
*
* Change the password of a user
*/
- public function setPassword($uid, $password){
- return OC_USER_BACKEND_NOT_IMPLEMENTED;
- }
+ abstract public function setPassword($uid, $password);
/**
* @brief Check if the password is correct
@@ -71,26 +56,5 @@ abstract class OC_User_Example extends OC_User_Backend {
* Check if the password is correct without logging in the user
* returns the user id or false
*/
- public function checkPassword($uid, $password){
- return OC_USER_BACKEND_NOT_IMPLEMENTED;
- }
-
- /**
- * @brief Get a list of all users
- * @returns array with all uids
- *
- * Get a list of all users.
- */
- public function getUsers(){
- return OC_USER_BACKEND_NOT_IMPLEMENTED;
- }
-
- /**
- * @brief check if a user exists
- * @param string $uid the username
- * @return boolean
- */
- public function userExists($uid){
- return OC_USER_BACKEND_NOT_IMPLEMENTED;
- }
+ abstract public function checkPassword($uid, $password);
}
diff --git a/lib/user/http.php b/lib/user/http.php
new file mode 100644
index 00000000000..009aa30c6f5
--- /dev/null
+++ b/lib/user/http.php
@@ -0,0 +1,93 @@
+<?php
+
+/**
+* ownCloud
+*
+* @author Frank Karlitschek
+* @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/>.
+*
+*/
+
+/**
+ * user backend using http auth requests
+ */
+class OC_User_HTTP extends OC_User_Backend {
+ /**
+ * split http://user@host/path into a user and url part
+ * @param string path
+ * @return array
+ */
+ private function parseUrl($url){
+ $parts=parse_url($url);
+ $url=$parts['scheme'].'://'.$parts['host'];
+ if(isset($parts['port'])){
+ $url.=':'.$parts['port'];
+ }
+ $url.=$parts['path'];
+ if(isset($parts['query'])){
+ $url.='?'.$parts['query'];
+ }
+ return array($parts['user'],$url);
+
+ }
+
+ /**
+ * check if an url is a valid login
+ * @param string url
+ * @return boolean
+ */
+ private function matchUrl($url){
+ return ! is_null(parse_url($url,PHP_URL_USER));
+ }
+
+ /**
+ * @brief Check if the password is correct
+ * @param $uid The username
+ * @param $password The password
+ * @returns string
+ *
+ * Check if the password is correct without logging in the user
+ * returns the user id or false
+ */
+ public function checkPassword($uid, $password){
+ if(!$this->matchUrl($uid)){
+ return false;
+ }
+ list($user,$url)=$this->parseUrl($uid);
+
+ $ch = curl_init();
+ curl_setopt($ch, CURLOPT_URL, $url);
+ curl_setopt($ch, CURLOPT_USERPWD, $user.':'.$password);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+
+ curl_exec($ch);
+
+ $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
+
+ curl_close($ch);
+
+ return $status==200;
+ }
+
+ /**
+ * @brief check if a user exists
+ * @param string $uid the username
+ * @return boolean
+ */
+ public function userExists($uid){
+ return $this->matchUrl($uid);
+ }
+} \ No newline at end of file
diff --git a/lib/user/interface.php b/lib/user/interface.php
new file mode 100644
index 00000000000..a4903898fb1
--- /dev/null
+++ b/lib/user/interface.php
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * ownCloud - user interface
+ *
+ * @author Arthur Schiwon
+ * @copyright 2012 Arthur Schiwon blizzz@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/>.
+ *
+ */
+
+interface OC_User_Interface {
+
+ /**
+ * @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);
+
+ /**
+ * @brief delete a user
+ * @param $uid The username of the user to delete
+ * @returns true/false
+ *
+ * Deletes a user
+ */
+ public function deleteUser($uid);
+
+ /**
+ * @brief Get a list of all users
+ * @returns array with all uids
+ *
+ * Get a list of all users.
+ */
+ public function getUsers($search = '', $limit = -1, $offset = 0);
+
+ /**
+ * @brief check if a user exists
+ * @param string $uid the username
+ * @return boolean
+ */
+ public function userExists($uid);
+
+} \ No newline at end of file
diff --git a/lib/util.php b/lib/util.php
index 010aa1f7f09..e63eb5b24c9 100644..100755
--- a/lib/util.php
+++ b/lib/util.php
@@ -10,42 +10,20 @@ class OC_Util {
public static $headers=array();
private static $rootMounted=false;
private static $fsSetup=false;
+ public static $core_styles=array();
+ public static $core_scripts=array();
// Can be set up
- public static function setupFS( $user = "", $root = "files" ){ // configure the initial filesystem based on the configuration
- if(self::$fsSetup){ //setting up the filesystem twice can only lead to trouble
+ public static function setupFS( $user = '' ){// configure the initial filesystem based on the configuration
+ if(self::$fsSetup){//setting up the filesystem twice can only lead to trouble
return false;
}
- $CONFIG_DATADIRECTORY_ROOT = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" );
- $CONFIG_BACKUPDIRECTORY = OC_Config::getValue( "backupdirectory", OC::$SERVERROOT."/backup" );
-
- // Check if config folder is writable.
- if(!is_writable(OC::$SERVERROOT."/config/")) {
- $tmpl = new OC_Template( '', 'error', 'guest' );
- $tmpl->assign('errors',array(1=>array('error'=>"Can't write into config directory 'config'",'hint'=>"You can usually fix this by giving the webserver user write access to the config directory in owncloud")));
- $tmpl->printPage();
- exit;
- }
-
- // Check if apps folder is writable.
- if(OC_Config::getValue('writable_appsdir', true) && !is_writable(OC::$SERVERROOT."/apps/")) {
- $tmpl = new OC_Template( '', 'error', 'guest' );
- $tmpl->assign('errors',array(1=>array('error'=>"Can't write into apps directory 'apps'",'hint'=>"You can usually fix this by giving the webserver user write access to the config directory in owncloud")));
- $tmpl->printPage();
- exit;
- }
-
-
- // Create root dir.
- if(!is_dir($CONFIG_DATADIRECTORY_ROOT)){
- $success=@mkdir($CONFIG_DATADIRECTORY_ROOT);
- if(!$success) {
- $tmpl = new OC_Template( '', 'error', 'guest' );
- $tmpl->assign('errors',array(1=>array('error'=>"Can't create data directory (".$CONFIG_DATADIRECTORY_ROOT.")",'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' ")));
- $tmpl->printPage();
- exit;
- }
+ $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),'/');
+ self::$rootMounted=true;
}
// If we are not forced to load a specific user we load the one that is logged in
@@ -53,23 +31,28 @@ class OC_Util {
$user = OC_User::getUser();
}
- //first set up the local "root" storage
- if(!self::$rootMounted){
- OC_Filesystem::mount('OC_Filestorage_Local',array('datadir'=>$CONFIG_DATADIRECTORY_ROOT),'/');
- self::$rootMounted=true;
- }
if( $user != "" ){ //if we aren't logged in, there is no use to set up the filesystem
-
- OC::$CONFIG_DATADIRECTORY = $CONFIG_DATADIRECTORY_ROOT."/$user/$root";
- if( !is_dir( OC::$CONFIG_DATADIRECTORY )){
- mkdir( OC::$CONFIG_DATADIRECTORY, 0755, true );
+ $user_dir = '/'.$user.'/files';
+ $userdirectory = $CONFIG_DATADIRECTORY.$user_dir;
+ if( !is_dir( $userdirectory )){
+ mkdir( $userdirectory, 0755, true );
}
//jail the user into his "home" directory
- OC_Filesystem::init('/'.$user.'/'.$root);
+ OC_Filesystem::init($user_dir);
$quotaProxy=new OC_FileProxy_Quota();
OC_FileProxy::register($quotaProxy);
self::$fsSetup=true;
+ // Load personal mount config
+ if (is_file($CONFIG_DATADIRECTORY.'/'.$user.'/mount.php')) {
+ $mountConfig = include($CONFIG_DATADIRECTORY.'/'.$user.'/mount.php');
+ if (isset($mountConfig['user'][$user])) {
+ foreach ($mountConfig['user'][$user] as $mountPoint => $options) {
+ OC_Filesystem::mount($options['class'], $options['options'], $mountPoint);
+ }
+ }
+ }
+ OC_Hook::emit('OC_Filesystem', 'setup', array('user' => $user, 'user_dir' => $user_dir));
}
}
@@ -83,7 +66,7 @@ class OC_Util {
* @return array
*/
public static function getVersion(){
- return array(4,00,7);
+ return array(4,82,4);
}
/**
@@ -91,16 +74,16 @@ class OC_Util {
* @return string
*/
public static function getVersionString(){
- return '4.0.7';
+ return '5 pre alpha 1';
}
- /**
- * get the current installed edition of ownCloud. There is the community edition that just returns an empty string and the enterprise edition that returns "Enterprise".
- * @return string
- */
- public static function getEditionString(){
- return '';
- }
+ /**
+ * get the current installed edition of ownCloud. There is the community edition that just returns an empty string and the enterprise edition that returns "Enterprise".
+ * @return string
+ */
+ public static function getEditionString(){
+ return '';
+ }
/**
* add a javascript file
@@ -148,12 +131,12 @@ class OC_Util {
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
- */
+ /**
+ * formats a timestamp in the "right" way
+ *
+ * @param int timestamp $timestamp
+ * @param bool dateOnly option to ommit time from the result
+ */
public static function formatDate( $timestamp,$dateOnly=false){
if(isset($_SESSION['timezone'])){//adjust to clients timezone if we know it
$systemTimeZone = intval(date('O'));
@@ -200,34 +183,44 @@ class OC_Util {
* @return array arrays with error messages and hints
*/
public static function checkServer(){
- $CONFIG_DATADIRECTORY_ROOT = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" );
- $CONFIG_BACKUPDIRECTORY = OC_Config::getValue( "backupdirectory", OC::$SERVERROOT."/backup" );
- $CONFIG_INSTALLED = OC_Config::getValue( "installed", false );
$errors=array();
//check for database drivers
if(!(is_callable('sqlite_open') or class_exists('SQLite3')) and !is_callable('mysql_connect') and !is_callable('pg_connect')){
$errors[]=array('error'=>'No database drivers (sqlite, mysql, or postgresql) installed.<br/>','hint'=>'');//TODO: sane hint
}
- $CONFIG_DBTYPE = OC_Config::getValue( "dbtype", "sqlite" );
- $CONFIG_DBNAME = OC_Config::getValue( "dbname", "owncloud" );
//common hint for all file permissons error messages
$permissionsHint="Permissions can usually be fixed by giving the webserver write access to the ownCloud directory";
+ // Check if config folder is writable.
+ if(!is_writable(OC::$SERVERROOT."/config/")) {
+ $errors[]=array('error'=>"Can't write into config directory 'config'",'hint'=>"You can usually fix this by giving the webserver user write access to the config directory in owncloud");
+ }
+
+ // Check if there is a writable install folder.
+ if(OC_Config::getValue('appstoreenabled', true)) {
+ if( OC_App::getInstallPath() === null || !is_writable(OC_App::getInstallPath())) {
+ $errors[]=array('error'=>"Can't write into apps directory",'hint'=>"You can usually fix this by giving the webserver user write access to the apps directory
+ 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_ROOT)),-3);
+ $prems=substr(decoct(@fileperms($CONFIG_DATADIRECTORY)),-3);
if(substr($prems,-1)!='0'){
- OC_Helper::chmodr($CONFIG_DATADIRECTORY_ROOT,0770);
+ OC_Helper::chmodr($CONFIG_DATADIRECTORY,0770);
clearstatcache();
- $prems=substr(decoct(@fileperms($CONFIG_DATADIRECTORY_ROOT)),-3);
+ $prems=substr(decoct(@fileperms($CONFIG_DATADIRECTORY)),-3);
if(substr($prems,2,1)!='0'){
- $errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY_ROOT.') is readable for other users<br/>','hint'=>$permissionsModHint);
+ $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);
@@ -241,8 +234,14 @@ class OC_Util {
}else{
//TODO: permissions checks for windows hosts
}
- if(is_dir($CONFIG_DATADIRECTORY_ROOT) and !is_writable($CONFIG_DATADIRECTORY_ROOT)){
- $errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY_ROOT.') not writable by ownCloud<br/>','hint'=>$permissionsHint);
+ // Create root dir.
+ if(!is_dir($CONFIG_DATADIRECTORY)){
+ $success=@mkdir($CONFIG_DATADIRECTORY);
+ if(!$success) {
+ $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)){
+ $errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY.') not writable by ownCloud<br/>','hint'=>$permissionsHint);
}
// check if all required php modules are present
@@ -272,15 +271,26 @@ class OC_Util {
return $errors;
}
- public static function displayLoginPage($parameters = array()){
- if(isset($_COOKIE["username"])){
- $parameters["username"] = $_COOKIE["username"];
+ public static function displayLoginPage($display_lostpassword) {
+ $parameters = array();
+ $parameters['display_lostpassword'] = $display_lostpassword;
+ if (!empty($_POST['user'])) {
+ $parameters["username"] =
+ OC_Util::sanitizeHTML($_POST['user']).'"';
+ $parameters['user_autofocus'] = false;
} else {
$parameters["username"] = '';
+ $parameters['user_autofocus'] = true;
}
$sectoken=rand(1000000,9999999);
$_SESSION['sectoken']=$sectoken;
$parameters["sectoken"] = $sectoken;
+ if (isset($_REQUEST['redirect_url'])) {
+ $redirect_url = OC_Util::sanitizeHTML($_REQUEST['redirect_url']);
+ } else {
+ $redirect_url = $_SERVER['REQUEST_URI'];
+ }
+ $parameters['redirect_url'] = $redirect_url;
OC_Template::printGuestPage("", "login", $parameters);
}
@@ -320,23 +330,60 @@ class OC_Util {
}
/**
+ * Check if the user is a subadmin, redirects to home if not
+ * @return array $groups where the current user is subadmin
+ */
+ public static function checkSubAdminUser(){
+ // Check if we are a user
+ self::checkLoggedIn();
+ 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();
+ }
+ return true;
+ }
+
+ /**
* Redirect to the user default page
*/
public static function redirectToDefaultPage(){
- OC_Log::write('core','redirectToDefaultPage',OC_Log::DEBUG);
if(isset($_REQUEST['redirect_url']) && (substr($_REQUEST['redirect_url'], 0, strlen(OC::$WEBROOT)) == OC::$WEBROOT || $_REQUEST['redirect_url'][0] == '/')) {
- header( 'Location: '.$_REQUEST['redirect_url']);
+ $location = $_REQUEST['redirect_url'];
}
else if (isset(OC::$REQUESTEDAPP) && !empty(OC::$REQUESTEDAPP)) {
- header( 'Location: '.OC::$WEBROOT.'/?app='.OC::$REQUESTEDAPP );
+ $location = OC_Helper::linkToAbsolute( OC::$REQUESTEDAPP, 'index.php' );
}
else {
- header( 'Location: '.OC::$WEBROOT.'/'.OC_Appconfig::getValue('core', 'defaultpage', '?app=files'));
+ $defaultpage = OC_Appconfig::getValue('core', 'defaultpage');
+ if ($defaultpage) {
+ $location = OC_Helper::makeURLAbsolute(OC::$WEBROOT.'/'.$defaultpage);
+ }
+ else {
+ $location = OC_Helper::linkToAbsolute( 'files', 'index.php' );
+ }
}
+ OC_Log::write('core', 'redirectToDefaultPage: '.$location, OC_Log::DEBUG);
+ header( 'Location: '.$location );
exit();
}
/**
+ * get an id unqiue for this instance
+ * @return string
+ */
+ public static function getInstanceId(){
+ $id=OC_Config::getValue('instanceid',null);
+ if(is_null($id)){
+ $id=uniqid();
+ OC_Config::setValue('instanceid',$id);
+ }
+ return $id;
+ }
+
+ /**
* @brief Register an get/post call. This is important to prevent CSRF attacks
* Todo: Write howto
* @return $token Generated token.
@@ -368,6 +415,7 @@ class OC_Util {
return($token);
}
+
/**
* @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.
@@ -411,10 +459,11 @@ class OC_Util {
/**
* @brief Public function to sanitize HTML
*
- * This function is used to sanitize HTML and should be applied on any string or array of strings before displaying it on a web page.
- *
+ * This function is used to sanitize HTML and should be applied on any
+ * string or array of strings before displaying it on a web page.
+ *
* @param string or array of strings
- * @return array with sanitized strings or a single sinitized string, depends on the input parameter.
+ * @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');
@@ -423,44 +472,35 @@ class OC_Util {
}
-
-
-
- /**
- * Check if the htaccess file is working buy creating a test file in the data directory and trying to access via http
- */
- public static function ishtaccessworking() {
-
+ /**
+ * Check if the htaccess file is working by creating a test file in the data directory and trying to access via http
+ */
+ public static function ishtaccessworking() {
// testdata
$filename='/htaccesstest.txt';
$testcontent='testcontent';
// creating a test file
- $testfile = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" ).'/'.$filename;
- $fp = @fopen($testfile, 'w');
- @fwrite($fp, $testcontent);
- @fclose($fp);
-
+ $testfile = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" ).'/'.$filename;
+ $fp = @fopen($testfile, 'w');
+ @fwrite($fp, $testcontent);
+ @fclose($fp);
+
// accessing the file via http
- $url = OC_Helper::serverProtocol(). '://' . OC_Helper::serverHost() . OC::$WEBROOT.'/data'.$filename;
- $fp = @fopen($url, 'r');
- $content=@fread($fp, 2048);
- @fclose($fp);
-
+ $url = OC_Helper::makeURLAbsolute(OC::$WEBROOT.'/data'.$filename);
+ $fp = @fopen($url, 'r');
+ $content=@fread($fp, 2048);
+ @fclose($fp);
+
// cleanup
@unlink($testfile);
-
+
// does it work ?
if($content==$testcontent) {
return(false);
}else{
return(true);
}
-
- }
-
-
-
+ }
}
-
diff --git a/lib/vcategories.php b/lib/vcategories.php
index 724965d0e95..20d9e3b5d61 100644
--- a/lib/vcategories.php
+++ b/lib/vcategories.php
@@ -55,7 +55,7 @@ class OC_VCategories {
$this->app = $app;
$this->user = is_null($user) ? OC_User::getUser() : $user;
$categories = trim(OC_Preferences::getValue($this->user, $app, self::PREF_CATEGORIES_LABEL, ''));
- $this->categories = $categories != '' ? unserialize($categories) : $defcategories;
+ $this->categories = $categories != '' ? @unserialize($categories) : $defcategories;
}
/**
@@ -64,6 +64,9 @@ class OC_VCategories {
*/
public function categories() {
//OC_Log::write('core','OC_VCategories::categories: '.print_r($this->categories, true), OC_Log::DEBUG);
+ if(!$this->categories) {
+ return array();
+ }
usort($this->categories, 'strnatcasecmp'); // usort to also renumber the keys
return $this->categories;
}
@@ -128,16 +131,17 @@ class OC_VCategories {
* }
* $categories->rescan($objects);
*/
- public function rescan($objects, $sync=true) {
- $this->categories = array();
+ public function rescan($objects, $sync=true, $reset=true) {
+ if($reset === true) {
+ $this->categories = array();
+ }
foreach($objects as $object) {
//OC_Log::write('core','OC_VCategories::rescan: '.substr($object, 0, 100).'(...)', OC_Log::DEBUG);
$vobject = OC_VObject::parse($object);
if(!is_null($vobject)) {
$this->loadFromVObject($vobject, $sync);
- unset($vobject);
} else {
- OC_Log::write('core','OC_VCategories::rescan, unable to parse. ID: '.', '.substr($object, 0, 100).'(...)', OC_Log::DEBUG);
+ OC_Log::write('core','OC_VCategories::rescan, unable to parse. ID: '.', '.substr($object, 0, 100).'(...)', OC_Log::DEBUG);
}
}
$this->save();
@@ -204,13 +208,18 @@ class OC_VCategories {
// case-insensitive in_array
private function in_arrayi($needle, $haystack) {
+ if(!is_array($haystack)) {
+ return false;
+ }
return in_array(strtolower($needle), array_map('strtolower', $haystack));
}
// case-insensitive array_search
private function array_searchi($needle, $haystack) {
+ if(!is_array($haystack)) {
+ return false;
+ }
return array_search(strtolower($needle),array_map('strtolower',$haystack));
}
}
-?>
diff --git a/ocs/providers.php b/ocs/providers.php
index 0dad6240588..cc6de32266b 100644
--- a/ocs/providers.php
+++ b/ocs/providers.php
@@ -4,7 +4,7 @@
* ownCloud
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @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
@@ -23,7 +23,7 @@
require_once('../lib/base.php');
-$url='http://'.substr(OC_Helper::serverHost().$_SERVER['REQUEST_URI'],0,-17).'ocs/v1.php/';
+$url='http://'.substr(OCP\Util::getServerHost().$_SERVER['REQUEST_URI'],0,-17).'ocs/v1.php/';
echo('
<providers>
@@ -35,11 +35,10 @@ echo('
<termsofuse></termsofuse>
<register></register>
<services>
- <activity ocsversion="1.5" />
+ <config ocsversion="1.7" />
+ <activity ocsversion="1.7" />
+ <cloud ocsversion="1.7" />
</services>
</provider>
</providers>
');
-
-
-?>
diff --git a/ocs/v1.php b/ocs/v1.php
index f5ff6cb6054..ab0dc80f4ba 100644
--- a/ocs/v1.php
+++ b/ocs/v1.php
@@ -4,7 +4,7 @@
* ownCloud
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @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
@@ -24,5 +24,3 @@
require_once('../lib/base.php');
@ob_clean();
OC_OCS::handle();
-
-?>
diff --git a/public.php b/public.php
index f974e1c50d2..0581631f41f 100644
--- a/public.php
+++ b/public.php
@@ -1,5 +1,4 @@
<?php
-$RUNTIME_NOSETUPFS = true;
$RUNTIME_NOAPPS = TRUE;
require_once('lib/base.php');
$file = OCP\CONFIG::getAppValue('core', 'public_' . strip_tags($_GET['service']));
@@ -8,8 +7,10 @@ if(is_null($file)){
exit;
}
-$parts=explode('/',$file);
-$app=$parts[2];
+$parts=explode('/',$file,2);
+$app=$parts[0];
+
+OC_Util::checkAppEnabled($app);
OC_App::loadApp($app);
-require_once(OC::$APPSROOT . $file);
+require_once(OC_App::getAppPath($app) .'/'. $parts[1]);
diff --git a/remote.php b/remote.php
index 44b85f762f5..41d2a7ab349 100644
--- a/remote.php
+++ b/remote.php
@@ -1,25 +1,36 @@
<?php
-$RUNTIME_NOSETUPFS = true;
$RUNTIME_NOAPPS = TRUE;
require_once('lib/base.php');
-if (array_key_exists('PATH_INFO', $_SERVER)){
- $path_info = $_SERVER['PATH_INFO'];
-}else{
- $path_info = substr($_SERVER['PHP_SELF'], strpos($_SERVER['PHP_SELF'], basename(__FILE__)) + strlen(basename(__FILE__)));
+$path_info = OC_Request::getPathInfo();
+if ($path_info === false) {
+ OC_Response::setStatus(OC_Response::STATUS_NOT_FOUND);
+ exit;
}
if (!$pos = strpos($path_info, '/', 1)) {
$pos = strlen($path_info);
}
$service=substr($path_info, 1, $pos-1);
-$file = OCP\CONFIG::getAppValue('core', 'remote_' . $service);
+
+$file = OC_AppConfig::getValue('core', 'remote_' . $service);
+
if(is_null($file)){
- header('HTTP/1.0 404 Not Found');
+ OC_Response::setStatus(OC_Response::STATUS_NOT_FOUND);
exit;
}
-$parts=explode('/',$file);
-$app=$parts[2];
-OC_App::loadApp($app);
+$file=ltrim($file,'/');
+$parts=explode('/', $file, 2);
+$app=$parts[0];
+switch ($app) {
+ case 'core':
+ $file = OC::$SERVERROOT .'/'. $file;
+ break;
+ default:
+ OC_Util::checkAppEnabled($app);
+ OC_App::loadApp($app);
+ $file = '/' . OC_App::getAppPath($app) .'/'. $parts[1];
+ break;
+}
$baseuri = OC::$WEBROOT . '/remote.php/'.$service.'/';
-require_once(OC::$APPSROOT . $file); \ No newline at end of file
+require_once($file);
diff --git a/search/ajax/search.php b/search/ajax/search.php
index 326724d60c4..95ddfedf8ba 100644
--- a/search/ajax/search.php
+++ b/search/ajax/search.php
@@ -35,5 +35,3 @@ if($query){
}else{
echo 'false';
}
-
-?>
diff --git a/search/appinfo/app.php b/search/appinfo/app.php
deleted file mode 100644
index b91341643f2..00000000000
--- a/search/appinfo/app.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-OC_App::register( array( 'order' => 2, "id" => 'search', 'name' => 'Search' ));
-
-?>
diff --git a/search/index.php b/search/index.php
index 518695c56d2..de55aec3999 100644
--- a/search/index.php
+++ b/search/index.php
@@ -49,5 +49,3 @@ foreach($results as $result){
$tmpl = new OC_Template( 'search', 'index', 'user' );
$tmpl->assign('resultTypes',$resultTypes);
$tmpl->printPage();
-
-?>
diff --git a/search/js/result.js b/search/js/result.js
index 1087f9684b2..27a2383e2c3 100644
--- a/search/js/result.js
+++ b/search/js/result.js
@@ -41,23 +41,13 @@ OC.search.showResults=function(results){
for(var name in types){
var type=types[name];
if(type.length>0){
- var row=$('#searchresults tr.template').clone();
- row.removeClass('template');
- row.addClass('result');
- row.children('td.type').text(name);
- row.find('td.result a').attr('href',type[0].link);
- row.find('td.result div.name').text(type[0].name);
- row.find('td.result div.text').text(type[0].text);
- row.data('index',index);
- index++;
- if(OC.search.customResults[name]){//give plugins the ability to customize the entries in here
- OC.search.customResults[name](row,type[0]);
- }
- $('#searchresults tbody').append(row);
- for(var i=1;i<type.length;i++){
+ for(var i=0;i<type.length;i++){
var row=$('#searchresults tr.template').clone();
row.removeClass('template');
row.addClass('result');
+ if (index == 0){
+ row.children('td.type').text(name);
+ }
row.find('td.result a').attr('href',type[i].link);
row.find('td.result div.name').text(type[i].name);
row.find('td.result div.text').text(type[i].text);
diff --git a/settings/admin.php b/settings/admin.php
index 5ef9daee18d..6909e02d14f 100644..100755
--- a/settings/admin.php
+++ b/settings/admin.php
@@ -26,9 +26,10 @@ function compareEntries($a,$b){
usort($entries, 'compareEntries');
$tmpl->assign('loglevel',OC_Config::getValue( "loglevel", 2 ));
-$tmpl->assign('entries',OC_Util::sanitizeHTML($entries));
+$tmpl->assign('entries',$entries);
$tmpl->assign('entriesremain', $entriesremain);
$tmpl->assign('htaccessworking',$htaccessworking);
+$tmpl->assign('backgroundjobs_mode', OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax'));
$tmpl->assign('forms',array());
foreach($forms as $form){
$tmpl->append('forms',$form);
diff --git a/settings/ajax/apps/ocs.php b/settings/ajax/apps/ocs.php
new file mode 100644
index 00000000000..082f1cfb922
--- /dev/null
+++ b/settings/ajax/apps/ocs.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Copyright (c) 2012 Thomas Tanghus <thomas@tanghus.net>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+// Init owncloud
+require_once('../../../lib/base.php');
+
+OC_JSON::checkAdminUser();
+
+$l = OC_L10N::get('core');
+
+if(OC_Config::getValue('appstoreenabled', true)==false){
+ OCP\JSON::success(array('type' => 'external', 'data' => array()));
+}
+
+$enabledApps=OC_App::getEnabledApps();
+
+if(is_null($enabledApps)) {
+ OCP\JSON::error(array('data' => array('message' => $l->t('Unable to load list from App Store'))));
+}
+
+$apps=array();
+
+// apps from external repo via OCS
+$catagoryNames=OC_OCSClient::getCategories();
+if(is_array($catagoryNames)){
+ $categories=array_keys($catagoryNames);
+ $page=0;
+ $externalApps=OC_OCSClient::getApplications($categories,$page);
+ foreach($externalApps as $app){
+ // show only external apps that aren't enabled yet
+ $local=false;
+ foreach($enabledApps as $a){
+ if($a == $app['name']) {
+ $local=true;
+ }
+ }
+
+ if(!$local) {
+ if($app['preview']=='') {
+ $pre='trans.png';
+ } else {
+ $pre=$app['preview'];
+ }
+ $apps[]=array(
+ 'name'=>$app['name'],
+ 'id'=>$app['id'],
+ 'active'=>false,
+ 'description'=>$app['description'],
+ 'author'=>$app['personid'],
+ 'license'=>$app['license'],
+ 'preview'=>$pre,
+ 'internal'=>false,
+ 'internallabel'=>'3rd Party App',
+ );
+ }
+ }
+}
+
+OCP\JSON::success(array('type' => 'external', 'data' => $apps));
+
diff --git a/settings/ajax/changepassword.php b/settings/ajax/changepassword.php
index 388885b6fcb..c7cb6512331 100644
--- a/settings/ajax/changepassword.php
+++ b/settings/ajax/changepassword.php
@@ -10,7 +10,20 @@ $oldPassword=isset($_POST["oldpassword"])?$_POST["oldpassword"]:'';
// Check if we are a user
OC_JSON::checkLoggedIn();
-if( (!OC_Group::inGroup( OC_User::getUser(), 'admin' ) && ($username!=OC_User::getUser() || !OC_User::checkPassword($username,$oldPassword)))) {
+OCP\JSON::callCheck();
+
+$userstatus = null;
+if(OC_Group::inGroup(OC_User::getUser(), 'admin')){
+ $userstatus = 'admin';
+}
+if(OC_SubAdmin::isUserAccessible(OC_User::getUser(), $username)){
+ $userstatus = 'subadmin';
+}
+if(OC_User::getUser() == $username && OC_User::checkPassword($username,$oldPassword)){
+ $userstatus = 'user';
+}
+
+if(is_null($userstatus)){
OC_JSON::error( array( "data" => array( "message" => "Authentication error" )));
exit();
}
@@ -22,5 +35,3 @@ if( OC_User::setPassword( $username, $password )){
else{
OC_JSON::error(array("data" => array( "message" => "Unable to change password" )));
}
-
-?>
diff --git a/settings/ajax/creategroup.php b/settings/ajax/creategroup.php
index a7fab1c45be..16cf57aebb7 100644
--- a/settings/ajax/creategroup.php
+++ b/settings/ajax/creategroup.php
@@ -10,6 +10,8 @@ if( !OC_User::isLoggedIn() || !OC_Group::inGroup( OC_User::getUser(), 'admin' ))
exit();
}
+OCP\JSON::callCheck();
+
$groupname = $_POST["groupname"];
// Does the group exist?
@@ -25,5 +27,3 @@ if( OC_Group::createGroup( $groupname )){
else{
OC_JSON::error(array("data" => array( "message" => "Unable to add group" )));
}
-
-?>
diff --git a/settings/ajax/createuser.php b/settings/ajax/createuser.php
index 508b4bf94ca..eaca5b50745 100644
--- a/settings/ajax/createuser.php
+++ b/settings/ajax/createuser.php
@@ -5,14 +5,33 @@ require_once('../../lib/base.php');
OCP\JSON::callCheck();
// Check if we are a user
-if( !OC_User::isLoggedIn() || !OC_Group::inGroup( OC_User::getUser(), 'admin' )){
+if( !OC_User::isLoggedIn() || (!OC_Group::inGroup( OC_User::getUser(), 'admin' ) && !OC_SubAdmin::isSubAdmin(OC_User::getUser()))){
OC_JSON::error(array("data" => array( "message" => "Authentication error" )));
exit();
}
+OCP\JSON::callCheck();
+
+$isadmin = OC_Group::inGroup(OC_User::getUser(),'admin')?true:false;
-$groups = array();
-if( isset( $_POST["groups"] )){
- $groups = $_POST["groups"];
+if($isadmin){
+ $groups = array();
+ if( isset( $_POST["groups"] )){
+ $groups = $_POST["groups"];
+ }
+}else{
+ if(isset( $_POST["groups"] )){
+ $groups = array();
+ foreach($_POST["groups"] as $group){
+ if(OC_SubAdmin::isGroupAccessible(OC_User::getUser(), $group)){
+ $groups[] = $group;
+ }
+ }
+ if(count($groups) == 0){
+ $groups = OC_SubAdmin::getSubAdminsGroups(OC_User::getUser());
+ }
+ }else{
+ $groups = OC_SubAdmin::getSubAdminsGroups(OC_User::getUser());
+ }
}
$username = $_POST["username"];
$password = $_POST["password"];
@@ -36,5 +55,3 @@ try {
} catch (Exception $exception) {
OC_JSON::error(array("data" => array( "message" => $exception->getMessage())));
}
-
-?>
diff --git a/settings/ajax/enableapp.php b/settings/ajax/enableapp.php
index bd53a50210c..fe3922fa02b 100644
--- a/settings/ajax/enableapp.php
+++ b/settings/ajax/enableapp.php
@@ -6,8 +6,9 @@ OC_JSON::checkAdminUser();
OCP\JSON::callCheck();
OC_JSON::setContentTypeHeader();
-if(OC_App::enable($_POST['appid'])){
- OC_JSON::success();
-}else{
+$appid = OC_App::enable($_POST['appid']);
+if($appid !== false) {
+ OC_JSON::success(array('data' => array('appid' => $appid)));
+} else {
OC_JSON::error();
}
diff --git a/settings/ajax/lostpassword.php b/settings/ajax/lostpassword.php
index 976fdff245f..803a424854c 100644
--- a/settings/ajax/lostpassword.php
+++ b/settings/ajax/lostpassword.php
@@ -2,7 +2,6 @@
// Init owncloud
require_once('../../lib/base.php');
-
OC_JSON::checkLoggedIn();
OCP\JSON::callCheck();
@@ -16,5 +15,3 @@ if( isset( $_POST['email'] ) && filter_var( $_POST['email'], FILTER_VALIDATE_EMA
}else{
OC_JSON::error(array("data" => array( "message" => $l->t("Invalid email") )));
}
-
-?> \ No newline at end of file
diff --git a/settings/ajax/openid.php b/settings/ajax/openid.php
index 58d071255c2..bf4ead06020 100644
--- a/settings/ajax/openid.php
+++ b/settings/ajax/openid.php
@@ -6,6 +6,7 @@ require_once('../../lib/base.php');
$l=OC_L10N::get('settings');
OC_JSON::checkLoggedIn();
+OCP\JSON::callCheck();
OC_JSON::checkAppEnabled('user_openid');
// Get data
@@ -16,5 +17,3 @@ if( isset( $_POST['identity'] ) ){
}else{
OC_JSON::error(array("data" => array( "message" => $l->t("Invalid request") )));
}
-
-?>
diff --git a/settings/ajax/removegroup.php b/settings/ajax/removegroup.php
index 19cbe51fd51..f8c2065956c 100644
--- a/settings/ajax/removegroup.php
+++ b/settings/ajax/removegroup.php
@@ -15,5 +15,3 @@ if( OC_Group::deleteGroup( $name )){
else{
OC_JSON::error(array("data" => array( "message" => "Unable to delete group" )));
}
-
-?>
diff --git a/settings/ajax/removeuser.php b/settings/ajax/removeuser.php
index 63388b3ca68..bfab13a68c8 100644
--- a/settings/ajax/removeuser.php
+++ b/settings/ajax/removeuser.php
@@ -3,11 +3,17 @@
// Init owncloud
require_once('../../lib/base.php');
-OC_JSON::checkAdminUser();
+OC_JSON::checkSubAdminUser();
OCP\JSON::callCheck();
$username = $_POST["username"];
+if(!OC_Group::inGroup(OC_User::getUser(), 'admin') && !OC_SubAdmin::isUserAccessible(OC_User::getUser(), $username)){
+ $l = OC_L10N::get('core');
+ OC_JSON::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
+ exit();
+}
+
// Return Success story
if( OC_User::deleteUser( $username )){
OC_JSON::success(array("data" => array( "username" => $username )));
@@ -15,5 +21,3 @@ if( OC_User::deleteUser( $username )){
else{
OC_JSON::error(array("data" => array( "message" => "Unable to delete user" )));
}
-
-?>
diff --git a/settings/ajax/setlanguage.php b/settings/ajax/setlanguage.php
index bc70d09ac92..54b103cd4fe 100644
--- a/settings/ajax/setlanguage.php
+++ b/settings/ajax/setlanguage.php
@@ -8,6 +8,7 @@ $l=OC_L10N::get('settings');
OC_JSON::checkLoggedIn();
OCP\JSON::callCheck();
+
// Get data
if( isset( $_POST['lang'] ) ){
$languageCodes=OC_L10N::findAvailableLanguages();
@@ -21,5 +22,3 @@ if( isset( $_POST['lang'] ) ){
}else{
OC_JSON::error(array("data" => array( "message" => $l->t("Invalid request") )));
}
-
-?>
diff --git a/settings/ajax/setquota.php b/settings/ajax/setquota.php
index 44c2067824b..2a30b1d97e6 100644
--- a/settings/ajax/setquota.php
+++ b/settings/ajax/setquota.php
@@ -8,11 +8,17 @@
// Init owncloud
require_once('../../lib/base.php');
-OC_JSON::checkAdminUser();
+OC_JSON::checkSubAdminUser();
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))){
+ $l = OC_L10N::get('core');
+ OC_JSON::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
+ exit();
+}
+
//make sure the quota is in the expected format
$quota=$_POST["quota"];
if($quota!='none' and $quota!='default'){
@@ -35,4 +41,3 @@ if($username){
}
OC_JSON::success(array("data" => array( "username" => $username ,'quota'=>$quota)));
-?>
diff --git a/settings/ajax/togglegroups.php b/settings/ajax/togglegroups.php
index 02b2b6319a6..75cd0858bbc 100644
--- a/settings/ajax/togglegroups.php
+++ b/settings/ajax/togglegroups.php
@@ -3,7 +3,7 @@
// Init owncloud
require_once('../../lib/base.php');
-OC_JSON::checkAdminUser();
+OC_JSON::checkSubAdminUser();
OCP\JSON::callCheck();
$success = true;
@@ -11,7 +11,13 @@ $error = "add user to";
$action = "add";
$username = $_POST["username"];
-$group = htmlentities($_POST["group"]);
+$group = OC_Util::sanitizeHTML($_POST["group"]);
+
+if(!OC_Group::inGroup(OC_User::getUser(), 'admin') && (!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();
+}
if(!OC_Group::groupExists($group)){
OC_Group::createGroup($group);
@@ -38,5 +44,3 @@ if( $success ){
else{
OC_JSON::error(array("data" => array( "message" => "Unable to $error group $group" )));
}
-
-?>
diff --git a/settings/ajax/togglesubadmins.php b/settings/ajax/togglesubadmins.php
new file mode 100644
index 00000000000..42db8450302
--- /dev/null
+++ b/settings/ajax/togglesubadmins.php
@@ -0,0 +1,19 @@
+<?php
+
+// Init owncloud
+require_once('../../lib/base.php');
+
+OC_JSON::checkAdminUser();
+OCP\JSON::callCheck();
+
+$username = $_POST["username"];
+$group = OC_Util::sanitizeHTML($_POST["group"]);
+
+// Toggle group
+if(OC_SubAdmin::isSubAdminofGroup($username, $group)){
+ OC_SubAdmin::deleteSubAdmin($username, $group);
+}else{
+ OC_SubAdmin::createSubAdmin($username, $group);
+}
+
+OC_JSON::success(); \ No newline at end of file
diff --git a/settings/ajax/userlist.php b/settings/ajax/userlist.php
new file mode 100644
index 00000000000..b89b8c55ef0
--- /dev/null
+++ b/settings/ajax/userlist.php
@@ -0,0 +1,45 @@
+<?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/>.
+ *
+ */
+
+require_once '../../lib/base.php';
+
+OC_JSON::callCheck();
+OC_JSON::checkSubAdminUser();
+if (isset($_GET['offset'])) {
+ $offset = $_GET['offset'];
+} else {
+ $offset = 0;
+}
+$users = array();
+if (OC_Group::inGroup(OC_User::getUser(), 'admin')) {
+ $batch = OC_User::getUsers('', 10, $offset);
+ foreach ($batch as $user) {
+ $users[] = array('name' => $user, 'groups' => join(', ', OC_Group::getUserGroups($user)), 'subadmin' => join(', ',OC_SubAdmin::getSubAdminsGroups($user)), 'quota' => OC_Preferences::getValue($user, 'files', 'quota', 'default'));
+ }
+} else {
+ $groups = OC_SubAdmin::getSubAdminsGroups(OC_User::getUser());
+ $batch = OC_Group::usersInGroups($groups, '', 10, $offset);
+ foreach ($batch as $user) {
+ $users[] = array('name' => $user, 'groups' => join(', ', OC_Group::getUserGroups($user)), 'quota' => OC_Preferences::getValue($user, 'files', 'quota', 'default'));
+ }
+}
+OC_JSON::success(array('data' => $users)); \ No newline at end of file
diff --git a/settings/appinfo/app.php b/settings/appinfo/app.php
deleted file mode 100644
index d18bcdbff0d..00000000000
--- a/settings/appinfo/app.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-OC_App::register( array( "id" => "settings", "name" => "Settings" ));
-OC_App::register( array( "order" => 1, "id" => "admin", "name" => "Administration" ));
-OC_App::register( array( "order" => 1, "id" => "help", "name" => "Help" ));
-
-?>
diff --git a/settings/apps.php b/settings/apps.php
index 341d9381dc8..6feede7741c 100644
--- a/settings/apps.php
+++ b/settings/apps.php
@@ -4,7 +4,7 @@
* ownCloud
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @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
@@ -47,6 +47,7 @@ foreach($registeredApps as $app){
$info['internallabel']='3rd Party App';
}
$info['preview']='trans.png';
+ $info['version']=OC_App::getAppVersion($app);
$apps[]=$info;
}
}
@@ -59,41 +60,9 @@ function app_sort($a, $b){
}
usort($apps, 'app_sort');
-// apps from external repo via OCS
- $catagoryNames=OC_OCSClient::getCategories();
- if(is_array($catagoryNames)){
- $categories=array_keys($catagoryNames);
- $page=0;
- $externalApps=OC_OCSClient::getApplications($categories,$page);
- foreach($externalApps as $app){
- // show only external apps that are not exist yet
- $local=false;
- foreach($apps as $a){
- if($a['name']==$app['name']) $local=true;
- }
-
- if(!$local) {
- if($app['preview']=='') $pre='trans.png'; else $pre=$app['preview'];
- $apps[]=array(
- 'name'=>$app['name'],
- 'id'=>$app['id'],
- 'active'=>false,
- 'description'=>$app['description'],
- 'author'=>$app['personid'],
- 'license'=>$app['license'],
- 'preview'=>$pre,
- 'internal'=>false,
- 'internallabel'=>'3rd Party App',
- );
- }
- }
- }
-
-
-
$tmpl = new OC_Template( "settings", "apps", "user" );
-$tmpl->assign('apps',$apps);
+$tmpl->assign('apps',$apps, false);
+$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 f45fa9bc019..373b15bff68 100644
--- a/settings/css/settings.css
+++ b/settings/css/settings.css
@@ -22,14 +22,14 @@ 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>img, td.quota>img { visibility:hidden; }
+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.remove { width:1em; padding-right:1em; }
tr:hover>td.password>span { margin:0; cursor:pointer; }
-tr:hover>td.remove>img, tr:hover>td.password>img, tr:hover>td.quota>img { visibility:visible; cursor:pointer; }
-tr:hover>td.remove>img { float:right; }
+tr:hover>td.remove>a, tr:hover>td.password>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%; }
@@ -43,16 +43,24 @@ div.quota>span { position:absolute; right:0em; white-space:nowrap; top: 0.7em }
select.quota.active { background: #fff; }
/* APPS */
+.appinfo { margin: 1em; }
+h3 { font-size: 1.4em; font-weight: bold; }
+ul.applist li { height: 2.2em; padding: 0.2em 0.2em 0.2em 0.8em !important; }
li { color:#888; }
li.active { color:#000; }
-small.externalapp { color:#FFF; background-color:#BBB; font-weight:bold; font-size:6pt; padding:4px; border-radius: 4px;}
-span.version { margin-left:3em; color:#ddd; }
+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; }
+span.version { margin-left:3em; margin-right:3em; 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; }
+/* Transition to complete width! */
+.app:hover, .app:active { max-width: inherit; }
/* LOG */
#log { white-space:normal; }
-/* Don't show blank images */
-img[src=""] { display:none}
/* ADMIN */
span.securitywarning {color:#C33; font-weight:bold; }
-
+h3.settingsNotice { font-size: 1.2em; }
+.settingsNotice { font-weight:bold; padding: 0.5em 0; }
diff --git a/settings/help.php b/settings/help.php
index 48fcec32782..b1dc1c5be77 100644
--- a/settings/help.php
+++ b/settings/help.php
@@ -1,6 +1,6 @@
<?php
/**
- * Copyright (c) 2011, Frank Karlitschek karlitschek@kde.org
+ * 2012 Frank Karlitschek frank@owncloud.org
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
@@ -25,5 +25,3 @@ $tmpl->assign( "kbe", $kbe );
$tmpl->assign( "pagecount", $pagecount );
$tmpl->assign( "page", $page );
$tmpl->printPage();
-
-?>
diff --git a/settings/img/admin.png b/settings/img/admin.png
index c1e6d6b8a7f..13d653f92a8 100644
--- a/settings/img/admin.png
+++ b/settings/img/admin.png
Binary files differ
diff --git a/settings/img/apps.png b/settings/img/apps.png
index 17f47d632b9..e9845d012be 100644
--- a/settings/img/apps.png
+++ b/settings/img/apps.png
Binary files differ
diff --git a/settings/img/help.png b/settings/img/help.png
index 2257d144d11..37ccb356830 100644
--- a/settings/img/help.png
+++ b/settings/img/help.png
Binary files differ
diff --git a/settings/img/log.png b/settings/img/log.png
index c84b3b29f19..b34a58f844c 100644
--- a/settings/img/log.png
+++ b/settings/img/log.png
Binary files differ
diff --git a/settings/img/personal.png b/settings/img/personal.png
index 8204028f70e..8edc5a16cd6 100644
--- a/settings/img/personal.png
+++ b/settings/img/personal.png
Binary files differ
diff --git a/settings/img/users.png b/settings/img/users.png
index f56e2442c9e..79ad3d667e1 100644
--- a/settings/img/users.png
+++ b/settings/img/users.png
Binary files differ
diff --git a/settings/js/admin.js b/settings/js/admin.js
index 4f295ab6f5d..409594a4b94 100644
--- a/settings/js/admin.js
+++ b/settings/js/admin.js
@@ -3,5 +3,11 @@ $(document).ready(function(){
$.post(OC.filePath('settings','ajax','setloglevel.php'), { level: $(this).val() },function(){
OC.Log.reload();
} );
- })
+ });
+
+ $('#backgroundjobs input').change(function(){
+ if($(this).attr('checked')){
+ $.post(OC.filePath('settings','ajax','setbackgroundjobsmode.php'), { mode: $(this).val() });
+ }
+ });
}); \ No newline at end of file
diff --git a/settings/js/apps.js b/settings/js/apps.js
index f6e08b608bd..cfddf4a48a1 100644
--- a/settings/js/apps.js
+++ b/settings/js/apps.js
@@ -1,13 +1,108 @@
/**
* Copyright (c) 2011, Robin Appelman <icewind1991@gmail.com>
+ * Copyright (c) 2012, Thomas Tanghus <thomas@tanghus.net>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
+OC.Settings = OC.Settings || {};
+OC.Settings.Apps = OC.Settings.Apps || {
+ loadOCS:function() {
+ $.getJSON(OC.filePath('settings', 'ajax', 'apps/ocs.php'), function(jsondata) {
+ if(jsondata.status == 'success'){
+ var apps = jsondata.data;
+ $.each(apps, function(b, appdata) {
+ OC.Settings.Apps.insertApp(appdata);
+ });
+ } else {
+ OC.dialogs.alert(jsondata.data.message, t('core', 'Error'));
+ }
+ });
+ },
+ loadApp:function(app) {
+ var page = $('#rightcontent');
+ page.find('p.license').show();
+ page.find('span.name').text(app.name);
+ page.find('small.externalapp').text(app.internallabel);
+ if (app.version) {
+ page.find('span.version').text(app.version);
+ } else {
+ page.find('span.version').text('');
+ }
+ page.find('p.description').text(app.description);
+ page.find('img.preview').attr('src', app.preview);
+ page.find('small.externalapp').attr('style', 'visibility:visible');
+ page.find('span.author').text(app.author);
+ page.find('span.licence').text(app.licence);
+
+ 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);
+ page.find('input.enable').data('active', app.active);
+ if (app.internal == false) {
+ page.find('p.appslink').show();
+ page.find('a').attr('href', 'http://apps.owncloud.com/content/show.php?content=' + app.id);
+ } else {
+ page.find('p.appslink').hide();
+ }
+ },
+ enableApp:function(appid, active, element) {
+ console.log('enableApp:', appid, active, element);
+ var appitem=$('#leftcontent li[data-id="'+appid+'"]');
+ appData = appitem.data('app');
+ appData.active = !active;
+ appitem.data('app', appData);
+ if(active) {
+ $.post(OC.filePath('settings','ajax','disableapp.php'),{appid:appid},function(result) {
+ if(!result || result.status!='success') {
+ OC.dialogs.alert('Error while disabling app','Error');
+ }
+ else {
+ element.data('active',false);
+ element.val(t('settings','Enable'));
+ }
+ },'json');
+ $('#leftcontent li[data-id="'+appid+'"]').removeClass('active');
+ } else {
+ $.post(OC.filePath('settings','ajax','enableapp.php'),{appid:appid},function(result) {
+ if(!result || result.status!='success') {
+ OC.dialogs.alert('Error while enabling app','Error');
+ }
+ else {
+ element.data('active',true);
+ element.val(t('settings','Disable'));
+ }
+ },'json');
+ $('#leftcontent li[data-id="'+appid+'"]').addClass('active');
+ }
+ },
+ insertApp:function(appdata) {
+ var applist = $('#leftcontent li');
+ var app =
+ $('<li data-id="' + appdata.id + '" data-type="external" data-installed="0">'
+ + '<a class="app externalapp" href="' + OC.filePath('settings', 'apps', 'index.php') + '&appid=' + appdata.id+'">'
+ + appdata.name+'</a><small class="externalapp list">3rd party</small></li>');
+ app.data('app', appdata);
+ var added = false;
+ applist.each(function() {
+ if(!parseInt($(this).data('installed')) && $(this).find('a').text().toLowerCase() > appdata.name.toLowerCase()) {
+ $(this).before(app);
+ added = true;
+ return false; // dang, remember this to get out of loop
+ }
+ });
+ if(!added) {
+ applist.last().after(app);
+ }
+ return app;
+ }
+}
+
$(document).ready(function(){
$('#leftcontent li').each(function(index,li){
- var app=$.parseJSON($(this).children('span').text());
+ var app = $.parseJSON($(this).children('span').text());
$(li).data('app',app);
+ $(this).find('span.hidden').remove();
});
$('#leftcontent li').keydown(function(event) {
if (event.which == 13 || event.which == 32) {
@@ -15,56 +110,33 @@ $(document).ready(function(){
}
return false;
});
- $('#leftcontent li').click(function(){
- var app=$(this).data('app');
- $('#rightcontent p').show();
- $('#rightcontent span.name').text(app.name);
- $('#rightcontent small.externalapp').text(app.internallabel);
- $('#rightcontent span.version').text(app.version);
- $('#rightcontent p.description').text(app.description);
- $('#rightcontent img.preview').attr('src',app.preview);
- $('#rightcontent small.externalapp').attr('style','visibility:visible');
- $('#rightcontent span.author').text(app.author);
- $('#rightcontent span.licence').text(app.licence);
-
- $('#rightcontent input.enable').show();
- $('#rightcontent input.enable').val((app.active)?t('settings','Disable'):t('settings','Enable'));
- $('#rightcontent input.enable').data('appid',app.id);
- $('#rightcontent input.enable').data('active',app.active);
+
+ $(document).on('click', '#leftcontent', function(event){
+ var tgt = $(event.target);
+ if (tgt.is('li') || tgt.is('a')) {
+ var item = tgt.is('li') ? $(tgt) : $(tgt).parent();
+ var app = item.data('app');
+ OC.Settings.Apps.loadApp(app);
+ }
return false;
});
$('#rightcontent input.enable').click(function(){
var element = $(this);
- var app=$(this).data('appid');
+ var appid=$(this).data('appid');
var active=$(this).data('active');
- if(app){
- if(active){
- $.post(OC.filePath('settings','ajax','disableapp.php'),{appid:app},function(result){
- if(!result || result.status!='success'){
- OC.dialogs.alert('Error while disabling app','Error');
- }
- else {
- element.data('active',false);
- element.val(t('settings','Enable'));
- var appData=$('#leftcontent li[data-id="'+app+'"]');
- appData.active=false;
- }
- },'json');
- $('#leftcontent li[data-id="'+app+'"]').removeClass('active');
- }else{
- $.post(OC.filePath('settings','ajax','enableapp.php'),{appid:app},function(result){
- if(!result || result.status!='success'){
- OC.dialogs.alert('Error while enabling app','Error');
- }
- else {
- element.data('active',true);
- element.val(t('settings','Disable'));
- var appData=$('#leftcontent li[data-id="'+app+'"]');
- appData.active=true;
- }
- },'json');
- $('#leftcontent li[data-id="'+app+'"]').addClass('active');
- }
+ if(appid) {
+ OC.Settings.Apps.enableApp(appid, active, element);
}
});
+
+ if(appid) {
+ var item = $('#leftcontent li[data-id="'+appid+'"]');
+ if(item) {
+ item.trigger('click');
+ item.addClass('active');
+ $('#leftcontent').animate({scrollTop: $(item).offset().top-70}, 'slow','swing');
+ }
+ }
+
+ OC.Settings.Apps.loadOCS();
});
diff --git a/settings/js/users.js b/settings/js/users.js
index 784f8b888cb..bf0bd108640 100644
--- a/settings/js/users.js
+++ b/settings/js/users.js
@@ -4,32 +4,205 @@
* See the COPYING-README file.
*/
-$(document).ready(function(){
- function setQuota(uid,quota,ready){
- $.post(
- OC.filePath('settings','ajax','setquota.php'),
- {username:uid,quota:quota},
- function(result){
- if(ready){
- ready(result.data.quota);
+UserList={
+ useUndo:true,
+
+ /**
+ * @brief Initiate user deletion process in UI
+ * @param string uid the user ID to be deleted
+ *
+ * Does not actually delete the user; it sets them for
+ * deletion when the current page is unloaded, at which point
+ * finishDelete() completes the process. This allows for 'undo'.
+ */
+ do_delete:function( uid ) {
+
+ UserList.deleteUid = uid;
+
+ // Set undo flag
+ 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();
+
+ },
+
+ /**
+ * @brief Delete a user via ajax
+ * @param bool ready whether to use ready() upon completion
+ *
+ * Executes deletion via ajax of user identified by property deleteUid
+ * if 'undo' has not been used. Completes the user deletion procedure
+ * and reflects success in UI.
+ */
+ finishDelete:function( ready ){
+
+ // Check deletion has not been undone
+ if( !UserList.deleteCanceled && UserList.deleteUid ){
+
+ // Delete user via ajax
+ $.ajax({
+ type: 'POST',
+ url: OC.filePath('settings', 'ajax', 'removeuser.php'),
+ async: false,
+ data: { username: UserList.deleteUid },
+ success: function(result) {
+ if (result.status == 'success') {
+ // Remove undo option, & remove user from table
+ $('#notification').fadeOut();
+ $('tr').filterAttr('data-uid', UserList.deleteUid).remove();
+ UserList.deleteCanceled = true;
+ UserList.deleteFiles = null;
+ if (ready) {
+ ready();
+ }
+ }
}
+ });
+ }
+ },
+
+ add:function(username, groups, subadmin, quota, sort) {
+ var tr = $('tbody tr').first().clone();
+ tr.data('uid', username);
+ tr.find('td.name').text(username);
+ var groupsSelect = $('<select multiple="multiple" class="groupsselect" data-placehoder="Groups" title="Groups">');
+ groupsSelect.data('username', username);
+ groupsSelect.data('userGroups', groups);
+ tr.find('td.groups').empty();
+ if (tr.find('td.subadmins').length > 0) {
+ var subadminSelect = $('<select multiple="multiple" class="subadminsselect" data-placehoder="subadmins" title="' + t('files', 'Group Admin') + '">');
+ subadminSelect.data('username', username);
+ subadminSelect.data('userGroups', groups);
+ subadminSelect.data('subadmin', subadmin);
+ tr.find('td.subadmins').empty();
+ }
+ var allGroups = String($('#content table').data('groups')).split(', ');
+ $.each(allGroups, function(i, group) {
+ groupsSelect.append($('<option value="'+group+'">'+group+'</option>'));
+ if (typeof subadminSelect !== 'undefined' && group != 'admin') {
+ subadminSelect.append($('<option value="'+group+'">'+group+'</option>'));
}
- );
- }
-
- function applyMultiplySelect(element){
+ });
+ tr.find('td.groups').append(groupsSelect);
+ UserList.applyMultiplySelect(groupsSelect);
+ tr.find('td.subadmins').append(subadminSelect);
+ UserList.applyMultiplySelect(subadminSelect);
+ if (tr.find('td.remove img').length == 0 && OC.currentUser != username) {
+ tr.find('td.remove').append($('<img alt="Delete" title="'+t('settings','Delete')+'" class="svg action" src="'+OC.imagePath('core','actions/delete')+'"/>'));
+ } else if (OC.currentUser == username) {
+ tr.find('td.remove a').remove();
+ }
+ var quotaSelect = tr.find('select.quota-user');
+ if (quota == 'default') {
+ quotaSelect.find('option').attr('selected', null);
+ quotaSelect.find('option').first().attr('selected', 'selected');
+ quotaSelect.data('previous', 'default');
+ } else {
+ if (quotaSelect.find('option[value="'+quota+'"]').length > 0) {
+ quotaSelect.find('option[value="'+quota+'"]').attr('selected', 'selected');
+ } else {
+ quotaSelect.append('<option value="'+quota+'" selected="selected">'+quota+'</option>');
+ }
+ }
+ var added = false;
+ if (sort) {
+ username = username.toLowerCase();
+ $('tbody tr').each(function() {
+ if (username < $(this).data('uid').toLowerCase()) {
+ $(tr).insertBefore($(this));
+ added = true;
+ return false;
+ }
+ });
+ }
+ if (!added) {
+ $(tr).appendTo('tbody');
+ }
+ return tr;
+ },
+
+ update:function() {
+ if (typeof UserList.offset === 'undefined') {
+ UserList.offset = $('tbody tr').length;
+ }
+ $.get(OC.filePath('settings', 'ajax', 'userlist.php'), { offset: UserList.offset }, function(result) {
+ if (result.status === 'success') {
+ $.each(result.data, function(index, user) {
+ var tr = UserList.add(user.name, user.groups, user.subadmin, user.quota, false);
+ UserList.offset++;
+ if (index == 9) {
+ $(tr).bind('inview', function(event, isInView, visiblePartX, visiblePartY) {
+ $(this).unbind(event);
+ UserList.update();
+ });
+ }
+ });
+ }
+ });
+ },
+
+ applyMultiplySelect:function(element) {
var checked=[];
var user=element.data('username');
- if(element.data('userGroups')){
- checked=element.data('userGroups').split(', ');
+ if($(element).attr('class') == 'groupsselect'){
+ if(element.data('userGroups')){
+ checked=String(element.data('userGroups')).split(', ');
+ }
+ if(user){
+ var checkHandeler=function(group){
+ if(user==OC.currentUser && group=='admin'){
+ return false;
+ }
+ if(!isadmin && checked.length == 1 && checked[0] == group){
+ return false;
+ }
+ $.post(
+ OC.filePath('settings','ajax','togglegroups.php'),
+ {
+ username:user,
+ group:group
+ },
+ function(){}
+ );
+ };
+ }else{
+ checkHandeler=false;
+ }
+ var addGroup = function(group) {
+ $('select[multiple]').each(function(index, element) {
+ if ($(element).find('option[value="'+group +'"]').length == 0) {
+ $(element).append('<option value="'+group+'">'+group+'</option>');
+ }
+ })
+ };
+ var label;
+ if(isadmin){
+ label = t('files', 'add group');
+ }else{
+ label = null;
+ }
+ element.multiSelect({
+ createCallback:addGroup,
+ createText:label,
+ checked:checked,
+ oncheck:checkHandeler,
+ onuncheck:checkHandeler,
+ minWidth: 100,
+ });
}
- if(user){
+ if($(element).attr('class') == 'subadminsselect'){
+ if(element.data('subadmin')){
+ checked=String(element.data('subadmin')).split(', ');
+ }
var checkHandeler=function(group){
- if(user==OC.currentUser && group=='admin'){
+ if(group=='admin'){
return false;
}
$.post(
- OC.filePath('settings','ajax','togglegroups.php'),
+ OC.filePath('settings','ajax','togglesubadmins.php'),
{
username:user,
group:group
@@ -37,39 +210,55 @@ $(document).ready(function(){
function(){}
);
};
- }else{
- checkHandeler=false;
+
+ var addSubAdmin = function(group) {
+ $('select[multiple]').each(function(index, element) {
+ if ($(element).find('option[value="'+group +'"]').length == 0) {
+ $(element).append('<option value="'+group+'">'+group+'</option>');
+ }
+ })
+ };
+ element.multiSelect({
+ createCallback:addSubAdmin,
+ createText:null,
+ checked:checked,
+ oncheck:checkHandeler,
+ onuncheck:checkHandeler,
+ minWidth: 100,
+ });
}
- var addGroup = function(group) {
- $('select[multiple]').each(function(index, element) {
- if ($(element).find('option[value="'+group +'"]').length == 0) {
- $(element).append('<option value="'+group+'">'+group+'</option>');
- }
- })
- };
- element.multiSelect({
- createCallback:addGroup,
- createText:'add group',
- checked:checked,
- oncheck:checkHandeler,
- onuncheck:checkHandeler,
- minWidth: 100,
- });
}
- $('select[multiple]').each(function(index,element){
- applyMultiplySelect($(element));
+}
+
+$(document).ready(function(){
+
+ $('tbody tr:last').bind('inview', function(event, isInView, visiblePartX, visiblePartY) {
+ UserList.update();
});
-
- $('td.remove>img').live('click',function(event){
- var uid=$(this).parent().parent().data('uid');
+
+ function setQuota(uid,quota,ready){
$.post(
- OC.filePath('settings','ajax','removeuser.php'),
- {username:uid},
+ OC.filePath('settings','ajax','setquota.php'),
+ {username:uid,quota:quota},
function(result){
-
+ if(ready){
+ ready(result.data.quota);
+ }
}
);
- $(this).parent().parent().remove();
+ }
+
+
+ $('select[multiple]').each(function(index,element){
+ UserList.applyMultiplySelect($(element));
+ });
+
+ $('td.remove>a').live('click',function(event){
+ var row = $(this).parent().parent();
+ var uid = $(row).data('uid');
+ $(row).hide();
+ // Call function for handling delete/undo
+ UserList.do_delete(uid);
});
$('td.password>img').live('click',function(event){
@@ -190,36 +379,28 @@ $(document).ready(function(){
function(result){
if(result.status!='success'){
OC.dialogs.alert(result.data.message, 'Error creating user');
- }
- else {
- var tr=$('#content table tbody tr').first().clone();
- tr.attr('data-uid',username);
- tr.find('td.name').text(username);
- var select=$('<select multiple="multiple" data-placehoder="Groups" title="Groups">');
- select.data('username',username);
- select.data('userGroups',groups.join(', '));
- tr.find('td.groups').empty();
- var allGroups=$('#content table').data('groups').split(', ');
- for(var i=0;i<groups.length;i++){
- if(allGroups.indexOf(groups[i])==-1){
- allGroups.push(groups[i]);
- }
- }
- $.each(allGroups,function(i,group){
- select.append($('<option value="'+group+'">'+group+'</option>'));
- });
- tr.find('td.groups').append(select);
- if(tr.find('td.remove img').length==0){
- tr.find('td.remove').append($('<img alt="Delete" title="'+t('settings','Delete')+'" class="svg action" src="'+OC.imagePath('core','actions/delete')+'"/>'));
- }
- applyMultiplySelect(select);
- $('#content table tbody').last().append(tr);
-
- tr.find('select.quota-user option').attr('selected',null);
- tr.find('select.quota-user option').first().attr('selected','selected');
- tr.find('select.quota-user').data('previous','default');
+ } else {
+ UserList.add(username, result.data.groups, null, 'default', true);
}
}
);
});
+ // Handle undo notifications
+ $('#notification').hide();
+ $('#notification .undo').live('click', function() {
+ if($('#notification').data('deleteuser')) {
+ $('tbody tr').each(function(index, row) {
+ if ($(row).data('uid') == UserList.deleteUid) {
+ $(row).show();
+ }
+ });
+ UserList.deleteCanceled=true;
+ UserList.deleteFiles=null;
+ }
+ $('#notification').fadeOut();
+ });
+ UserList.useUndo=('onbeforeunload' in window)
+ $(window).bind('beforeunload', function (){
+ UserList.finishDelete(null);
+ });
});
diff --git a/settings/l10n/bg_BG.php b/settings/l10n/bg_BG.php
index 6e0c6e2fee4..4464f7596d3 100644
--- a/settings/l10n/bg_BG.php
+++ b/settings/l10n/bg_BG.php
@@ -1,27 +1,40 @@
<?php $TRANSLATIONS = array(
+"Email saved" => "Е-пощата е запиÑана",
+"Invalid email" => "Ðеправилна е-поща",
"OpenID Changed" => "OpenID е Ñменено",
"Invalid request" => "Ðевалидна заÑвка",
"Language changed" => "Езика е Ñменен",
+"Disable" => "Изключване",
+"Enable" => "Включване",
+"Saving..." => "ЗапиÑване...",
"Select an App" => "Изберете програма",
"-licensed" => "-лицензирано",
"by" => "от",
+"Documentation" => "ДокументациÑ",
"Ask a question" => "Задайте въпроÑ",
"Problems connecting to help database." => "Проблеми при Ñвързване Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰Ð½Ð°Ñ‚Ð° база",
"Go there manually." => "Отидете ръчно.",
"Answer" => "Отговор",
"You use" => "Вие ползвате",
"of the available" => "от наличните",
+"Download" => "ИзтеглÑне",
"Your password got 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" => "Помощ за превода",
"use this address to connect to your ownCloud in your file manager" => "ползвай този Ð°Ð´Ñ€ÐµÑ Ð·Ð° връзка Ñ Ð’Ð°ÑˆÐ¸Ñ ownCloud във Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¸Ñ Ð¼ÐµÐ½Ð¸Ð´Ð¶ÑŠÑ€",
"Name" => "Име",
"Password" => "Парола",
"Groups" => "Групи",
"Create" => "Ðово",
+"Default Quota" => "Квота по подразбиране",
+"Quota" => "Квота",
"Delete" => "Изтриване"
);
diff --git a/settings/l10n/ca.php b/settings/l10n/ca.php
index 56e67c1a134..7b95d6f9af1 100644
--- a/settings/l10n/ca.php
+++ b/settings/l10n/ca.php
@@ -1,12 +1,26 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "No s'ha pogut carregar la llista des de l'App Store",
+"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",
+"Authentication error" => "Error d'autenticació",
"Language changed" => "S'ha canviat l'idioma",
+"Error" => "Error",
+"Disable" => "Desactiva",
+"Enable" => "Activa",
+"Saving..." => "S'està desant...",
"__language_name__" => "Català",
+"Security Warning" => "Avís de seguretat",
+"Cron" => "Cron",
+"execute one task with each page loaded" => "executa una tasca en carregar cada pàgina",
+"cron.php is registered at a webcron service" => "cron.php està registrat en un servei web cron",
+"use systems cron service" => "usa el servei cron del sistema",
"Log" => "Registre",
"More" => "Més",
-"Add your App" => "Afegeiu la vostra aplicació",
+"Add your App" => "Afegiu la vostra aplicació",
"Select an App" => "Seleccioneu una aplicació",
+"See application page at apps.owncloud.com" => "Mireu la pàgina d'aplicacions a apps.owncloud.com",
"-licensed" => "- amb llicència",
"by" => "de",
"Documentation" => "Documentació",
@@ -37,6 +51,7 @@
"Create" => "Crea",
"Default Quota" => "Quota per defecte",
"Other" => "Altre",
+"Group Admin" => "Grup Admin",
"Quota" => "Quota",
"Delete" => "Suprimeix"
);
diff --git a/settings/l10n/cs_CZ.php b/settings/l10n/cs_CZ.php
index bef172a9f58..ed7378b80c4 100644
--- a/settings/l10n/cs_CZ.php
+++ b/settings/l10n/cs_CZ.php
@@ -1,12 +1,26 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "Nepodařílo se stáhnout seznam z App Store",
+"Email saved" => "E-mail uložen",
+"Invalid email" => "Neplatný e-mail",
"OpenID Changed" => "OpenID změněn",
"Invalid request" => "Chybný dotaz",
+"Authentication error" => "Chyba autorizace",
"Language changed" => "Jazyk byl změněn",
+"Error" => "Chyba",
+"Disable" => "Vypnout",
+"Enable" => "Zapnout",
+"Saving..." => "Ukládám...",
"__language_name__" => "ÄŒesky",
+"Security Warning" => "BezpeÄnostní upozornÄ›ní",
+"Cron" => "Cron",
+"execute one task with each page loaded" => "spustit jednu úlohu s každou nataženou stranou",
+"cron.php is registered at a webcron service" => "cron.php je registrován jako služba webcron",
+"use systems cron service" => "použijte systémovou službu cron",
"Log" => "Log",
"More" => "Více",
"Add your App" => "Přidat vaší aplikaci",
"Select an App" => "Vyberte aplikaci",
+"See application page at apps.owncloud.com" => "Více na stránce s aplikacemi na apps.owncloud.com",
"-licensed" => "-licencováno",
"by" => "podle",
"Documentation" => "Dokumentace",
diff --git a/settings/l10n/da.php b/settings/l10n/da.php
index 4cd7abfc90c..f17fb11fa7e 100644
--- a/settings/l10n/da.php
+++ b/settings/l10n/da.php
@@ -1,12 +1,24 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "Kunne ikke indlæse listen fra App Store",
+"Email saved" => "Email adresse gemt",
+"Invalid email" => "Ugyldig email adresse",
"OpenID Changed" => "OpenID ændret",
"Invalid request" => "Ugyldig forespørgsel",
+"Authentication error" => "Adgangsfejl",
"Language changed" => "Sprog ændret",
+"Error" => "Fejl",
+"Disable" => "Deaktiver",
+"Enable" => "Aktiver",
+"Saving..." => "Gemmer...",
"__language_name__" => "Dansk",
+"Security Warning" => "Sikkerhedsadvarsel",
+"Cron" => "Cron",
+"cron.php is registered at a webcron service" => "cron.php er tilmeldt en webcron tjeneste",
"Log" => "Log",
"More" => "Mere",
"Add your App" => "Tilføj din App",
"Select an App" => "Vælg en App",
+"See application page at apps.owncloud.com" => "Se applikationens side på apps.owncloud.com",
"-licensed" => "-licenseret",
"by" => "af",
"Documentation" => "Dokumentation",
diff --git a/settings/l10n/de.php b/settings/l10n/de.php
index d1659e4d181..791a75fd7ca 100644
--- a/settings/l10n/de.php
+++ b/settings/l10n/de.php
@@ -1,42 +1,57 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "Liste der Apps im Store konnte nicht geladen werden.",
+"Email saved" => "E-Mail gespeichert",
+"Invalid email" => "Ungültige E-Mail",
"OpenID Changed" => "OpenID geändert",
"Invalid request" => "Ungültige Anfrage",
+"Authentication error" => "Anmeldungsfehler",
"Language changed" => "Sprache geändert",
+"Error" => "Fehler",
+"Disable" => "Deaktivieren",
+"Enable" => "Aktivieren",
+"Saving..." => "Speichern...",
"__language_name__" => "Deutsch",
+"Security Warning" => "Sicherheitshinweis",
+"Cron" => "Cron",
+"execute one task with each page loaded" => "Führe eine Aufgabe pro geladener Seite aus.",
+"cron.php is registered at a webcron service" => "cron.php ist beim Webcron-Service registriert",
+"use systems cron service" => "Nutze System-Cron-Service",
"Log" => "Log",
-"More" => "mehr",
-"Add your App" => "Füge deine App hinzu",
+"More" => "Mehr",
+"Add your App" => "Fügen Sie Ihre App hinzu",
"Select an App" => "Wähle eine Anwendung aus",
+"See application page at apps.owncloud.com" => "Weitere Anwendungen auf apps.owncloud.com",
"-licensed" => "-lizenziert",
"by" => "von",
"Documentation" => "Dokumentation",
-"Managing Big Files" => "große Dateien verwalten",
+"Managing Big Files" => "Große Dateien verwalten",
"Ask a question" => "Stell eine Frage",
"Problems connecting to help database." => "Probleme bei der Verbindung zur Hilfe-Datenbank.",
"Go there manually." => "Datenbank direkt besuchen.",
"Answer" => "Antwort",
-"You use" => "Du nutzt",
+"You use" => "Sie nutzen",
"of the available" => "der verfügbaren",
-"Desktop and Mobile Syncing Clients" => "Desktop und mobile synchronierungs Clients",
+"Desktop and Mobile Syncing Clients" => "Desktop- und mobile Synchronierungs-Clients",
"Download" => "Download",
-"Your password got changed" => "Dein Passwort wurde geändert.",
+"Your password got changed" => "Ihr 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",
"Email" => "E-Mail",
-"Your email address" => "Ihre E-Mail Adresse",
-"Fill in an email address to enable password recovery" => "Trage eine E-Mail Adresse ein, um die Passwort-Wiederherstellung zu aktivieren.",
+"Your email address" => "Ihre E-Mail-Adresse",
+"Fill in an email address to enable password recovery" => "Tragen Sie eine E-Mail-Adresse ein, um die Passwort-Wiederherstellung zu aktivieren.",
"Language" => "Sprache",
-"Help translate" => "Hilf bei der Ãœbersetzung!",
-"use this address to connect to your ownCloud in your file manager" => "Benutze diese Adresse, um deine ownCloud mit deinem Dateimanager zu verbinden.",
+"Help translate" => "Helfen Sie bei der Ãœbersetzung",
+"use this address to connect to your ownCloud in your file manager" => "Benutzen Sie diese Adresse, um Ihr ownCloud mit deinem Dateimanager zu verbinden.",
"Name" => "Name",
"Password" => "Passwort",
"Groups" => "Gruppen",
"Create" => "Anlegen",
-"Default Quota" => "Standard Quota",
-"Other" => "andere",
+"Default Quota" => "Standard-Quota",
+"Other" => "Andere",
+"Group Admin" => "Gruppenadministrator",
"Quota" => "Quota",
"Delete" => "Löschen"
);
diff --git a/settings/l10n/el.php b/settings/l10n/el.php
index 3d063daa3bd..d7333fab2c9 100644
--- a/settings/l10n/el.php
+++ b/settings/l10n/el.php
@@ -1,12 +1,26 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "Σφάλμα στην φόÏτωση της λίστας από το App Store",
+"Email saved" => "Το Email αποθηκεÏτηκε ",
+"Invalid email" => "Μη έγκυÏο email",
"OpenID Changed" => "Το OpenID άλλαξε",
"Invalid request" => "Μη έγκυÏο αίτημα",
+"Authentication error" => "Σφάλμα πιστοποίησης",
"Language changed" => "Η γλώσσα άλλαξε",
+"Error" => "Σφάλμα",
+"Disable" => "ΑπενεÏγοποίηση",
+"Enable" => "ΕνεÏγοποίηση",
+"Saving..." => "Αποθήκευση...",
"__language_name__" => "__όνομα_γλώσσας__",
+"Security Warning" => "ΠÏοειδοποίηση Ασφαλείας",
+"Cron" => "Cron",
+"execute one task with each page loaded" => "Εκτέλεση μίας εÏγασίας με κάθε σελίδα που φοÏτώνεται",
+"cron.php is registered at a webcron service" => "Το cron.php έχει καταχωÏηθεί σε μια webcron υπηÏεσία",
+"use systems cron service" => "ΧÏήση της υπηÏεσίας cron του συστήματος",
"Log" => "ΑÏχείο καταγÏαφής",
"More" => "ΠεÏισσότεÏο",
"Add your App" => "ΠÏόσθεσε τη δικιά σου εφαÏμογή ",
"Select an App" => "Επιλέξτε μια εφαÏμογή",
+"See application page at apps.owncloud.com" => "Η σελίδα εφαÏμογών στο apps.owncloud.com",
"-licensed" => "-με άδεια",
"by" => "από",
"Documentation" => "ΤεκμηÏίωση",
@@ -37,6 +51,7 @@
"Create" => "ΔημιουÏγία",
"Default Quota" => "ΠÏοεπιλεγμένο ÏŒÏιο",
"Other" => "Άλλα",
+"Group Admin" => "ΔιαχειÏηστής ομάδας",
"Quota" => "ΣÏνολο χώÏου",
"Delete" => "ΔιαγÏαφή"
);
diff --git a/settings/l10n/eo.php b/settings/l10n/eo.php
index c79817a2721..c0ad6ef1051 100644
--- a/settings/l10n/eo.php
+++ b/settings/l10n/eo.php
@@ -1,12 +1,26 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "Ne eblis Åargi liston el aplikaĵovendejo",
+"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",
+"Authentication error" => "AÅ­tentiga eraro",
"Language changed" => "La lingvo estas ÅanÄita",
+"Error" => "Eraro",
+"Disable" => "Malkapabligi",
+"Enable" => "Kapabligi",
+"Saving..." => "Konservante...",
"__language_name__" => "Esperanto",
-"Log" => "Registro",
+"Security Warning" => "Sekureca averto",
+"Cron" => "Cron",
+"execute one task with each page loaded" => "lanĉi unu taskon po ĉiu paÄo Åargita",
+"cron.php is registered at a webcron service" => "cron.php estas registrita kiel webcron-servilo",
+"use systems cron service" => "uzi la cron-servon de la sistemo",
+"Log" => "Protokolo",
"More" => "Pli",
"Add your App" => "Aldonu vian aplikaĵon",
"Select an App" => "Elekti aplikaĵon",
+"See application page at apps.owncloud.com" => "Vidu la paÄon pri aplikaĵoj ĉe apps.owncloud.com",
"-licensed" => "-permesila",
"by" => "de",
"Documentation" => "Dokumentaro",
@@ -37,6 +51,7 @@
"Create" => "Krei",
"Default Quota" => "DefaÅ­lta kvoto",
"Other" => "Alia",
+"Group Admin" => "Grupadministranto",
"Quota" => "Kvoto",
"Delete" => "Forigi"
);
diff --git a/settings/l10n/es.php b/settings/l10n/es.php
index c8ddb412ecf..8403b6d3883 100644
--- a/settings/l10n/es.php
+++ b/settings/l10n/es.php
@@ -1,12 +1,26 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "Imposible cargar la lista desde el App Store",
+"Email saved" => "Correo guardado",
+"Invalid email" => "Correo no válido",
"OpenID Changed" => "OpenID cambiado",
"Invalid request" => "Solicitud no válida",
+"Authentication error" => "Error de autenticación",
"Language changed" => "Idioma cambiado",
+"Error" => "Error",
+"Disable" => "Desactivar",
+"Enable" => "Activar",
+"Saving..." => "Guardando...",
"__language_name__" => "Castellano",
+"Security Warning" => "Advertencia de seguridad",
+"Cron" => "Cron",
+"execute one task with each page loaded" => "ejecutar una tarea con cada página cargada",
+"cron.php is registered at a webcron service" => "cron.php se registra en un servicio webcron",
+"use systems cron service" => "usar servicio cron del sistema",
"Log" => "Registro",
"More" => "Más",
"Add your App" => "Añade tu aplicación",
"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",
"-licensed" => "-autorizado",
"by" => "por",
"Documentation" => "Documentación",
@@ -37,6 +51,7 @@
"Create" => "Crear",
"Default Quota" => "Cuota predeterminada",
"Other" => "Otro",
+"Group Admin" => "Grupo admin",
"Quota" => "Cuota",
"Delete" => "Eliminar"
);
diff --git a/settings/l10n/et_EE.php b/settings/l10n/et_EE.php
index 75ba2b72f0b..4ab799a7f03 100644
--- a/settings/l10n/et_EE.php
+++ b/settings/l10n/et_EE.php
@@ -1,12 +1,18 @@
<?php $TRANSLATIONS = array(
+"Email saved" => "Kiri on salvestatud",
+"Invalid email" => "Vigane e-post",
"OpenID Changed" => "OpenID on muudetud",
"Invalid request" => "Vigane päring",
"Language changed" => "Keel on muudetud",
+"Disable" => "Lülita välja",
+"Enable" => "Lülita sisse",
+"Saving..." => "Salvestamine...",
"__language_name__" => "Eesti",
"Log" => "Logi",
"More" => "Veel",
"Add your App" => "Lisa oma rakendus",
"Select an App" => "Vali programm",
+"See application page at apps.owncloud.com" => "Vaata rakenduste lehte aadressil apps.owncloud.com",
"-licensed" => "-litsenseeritud",
"by" => "kelle poolt",
"Documentation" => "Dokumentatsioon",
diff --git a/settings/l10n/eu.php b/settings/l10n/eu.php
index 4ef58dd1126..1ead8b14b6f 100644
--- a/settings/l10n/eu.php
+++ b/settings/l10n/eu.php
@@ -1,11 +1,20 @@
<?php $TRANSLATIONS = array(
+"Email saved" => "Eposta gorde da",
+"Invalid email" => "Baliogabeko eposta",
"OpenID Changed" => "OpenID aldatuta",
"Invalid request" => "Baliogabeko eskaria",
+"Authentication error" => "Autentifikazio errorea",
"Language changed" => "Hizkuntza aldatuta",
+"Disable" => "Ez-gaitu",
+"Enable" => "Gaitu",
+"Saving..." => "Gordetzen...",
"__language_name__" => "Euskera",
+"Security Warning" => "Segurtasun abisua",
+"Log" => "Egunkaria",
"More" => "Gehiago",
"Add your App" => "Gehitu zure aplikazioa",
"Select an App" => "Aukeratu programa bat",
+"See application page at apps.owncloud.com" => "Ikusi programen orria apps.owncloud.com en",
"-licensed" => "lizentziarekin",
"by" => " Egilea:",
"Documentation" => "Dokumentazioa",
@@ -34,6 +43,7 @@
"Password" => "Pasahitza",
"Groups" => "Taldeak",
"Create" => "Sortu",
+"Default Quota" => "Kuota lehentsia",
"Other" => "Besteak",
"Quota" => "Kuota",
"Delete" => "Ezabatu"
diff --git a/settings/l10n/fa.php b/settings/l10n/fa.php
index 892de2d9ec0..5fe6df4d9d9 100644
--- a/settings/l10n/fa.php
+++ b/settings/l10n/fa.php
@@ -1,12 +1,20 @@
<?php $TRANSLATIONS = array(
+"Email saved" => "ایمیل ذخیره شد",
+"Invalid email" => "ایمیل غیر قابل قبول",
"OpenID Changed" => "OpenID تغییر کرد",
"Invalid request" => "درخواست غیر قابل قبول",
"Language changed" => "زبان تغییر کرد",
+"Error" => "خطا",
+"Disable" => "غیرÙعال",
+"Enable" => "Ùعال",
+"Saving..." => "درحال ذخیره ...",
"__language_name__" => "__language_name__",
+"Security Warning" => "اخطار امنیتی",
"Log" => "کارنامه",
"More" => "بیشتر",
"Add your App" => "برنامه خود را بیاÙزایید",
"Select an App" => "یک برنامه انتخاب کنید",
+"See application page at apps.owncloud.com" => "صÙحه این اٌپ را در apps.owncloud.com ببینید",
"-licensed" => "مجوزنامه",
"by" => "به وسیله",
"Documentation" => "مستندات",
diff --git a/settings/l10n/fi_FI.php b/settings/l10n/fi_FI.php
index 76964b30800..bfcf1a59dda 100644
--- a/settings/l10n/fi_FI.php
+++ b/settings/l10n/fi_FI.php
@@ -1,12 +1,23 @@
<?php $TRANSLATIONS = array(
+"Email saved" => "Sähköposti tallennettu",
+"Invalid email" => "Virheellinen sähköposti",
"OpenID Changed" => "OpenID on vaihdettu",
"Invalid request" => "Virheellinen pyyntö",
+"Authentication error" => "Todennusvirhe",
"Language changed" => "Kieli on vaihdettu",
+"Error" => "Virhe",
+"Disable" => "Poista käytöstä",
+"Enable" => "Käytä",
+"Saving..." => "Tallennetaan...",
"__language_name__" => "_kielen_nimi_",
+"Security Warning" => "Turvallisuusvaroitus",
+"Cron" => "Cron",
+"use systems cron service" => "käytä järjestelmän cron-palvelua",
"Log" => "Loki",
"More" => "Lisää",
"Add your App" => "Lisää ohjelmasi",
"Select an App" => "Valitse ohjelma",
+"See application page at apps.owncloud.com" => "Katso sovellussivu osoitteessa apps.owncloud.com",
"-licensed" => "-lisenssöity",
"by" => "henkilölle",
"Documentation" => "Dokumentaatio",
@@ -16,7 +27,7 @@
"Go there manually." => "Ohje löytyy sieltä.",
"Answer" => "Vastaus",
"You use" => "Olet käyttänyt",
-"of the available" => "käytettävissäsi on yhteensä",
+"of the available" => ", käytettävissäsi on yhteensä",
"Desktop and Mobile Syncing Clients" => "Tietokoneen ja mobiililaitteiden synkronointisovellukset",
"Download" => "Lataa",
"Your password got changed" => "Salasanasi on vaihdettu",
@@ -27,7 +38,7 @@
"Change password" => "Vaihda salasana",
"Email" => "Sähköposti",
"Your email address" => "Sähköpostiosoitteesi",
-"Fill in an email address to enable password recovery" => "Kirjoita sähköpostiosoitteesi alle, jotta unohdettu salasana voidaan palauttaa",
+"Fill in an email address to enable password recovery" => "Anna sähköpostiosoitteesi, jotta unohdettu salasana on mahdollista palauttaa",
"Language" => "Kieli",
"Help translate" => "Auta kääntämisessä",
"use this address to connect to your ownCloud in your file manager" => "voit yhdistää tiedostonhallintasovelluksellasi ownCloudiin käyttämällä tätä osoitetta",
diff --git a/settings/l10n/fr.php b/settings/l10n/fr.php
index 7e9a92f6bbf..89516b1c7fc 100644
--- a/settings/l10n/fr.php
+++ b/settings/l10n/fr.php
@@ -1,12 +1,26 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "Impossible de charger la liste depuis l'App Store",
+"Email saved" => "E-mail sauvegardé",
+"Invalid email" => "E-mail invalide",
"OpenID Changed" => "Identifiant OpenID changé",
"Invalid request" => "Requête invalide",
+"Authentication error" => "Erreur d'authentification",
"Language changed" => "Langue changée",
+"Error" => "Erreur",
+"Disable" => "Désactiver",
+"Enable" => "Activer",
+"Saving..." => "Sauvegarde...",
"__language_name__" => "Français",
+"Security Warning" => "Alertes de sécurité",
+"Cron" => "Cron",
+"execute one task with each page loaded" => "exécuter une tâche pour chaque page chargée",
+"cron.php is registered at a webcron service" => "cron.php est enregistré comme un service webcron",
+"use systems cron service" => "utiliser le service cron du système ",
"Log" => "Journaux",
"More" => "Plus",
-"Add your App" => "Ajouter votre application",
+"Add your App" => "Ajoutez votre application",
"Select an App" => "Sélectionner une Application",
+"See application page at apps.owncloud.com" => "Voir la page des applications à l'url apps.owncloud.com",
"-licensed" => "sous licence",
"by" => "par",
"Documentation" => "Documentation",
@@ -16,7 +30,7 @@
"Go there manually." => "S'y rendre manuellement.",
"Answer" => "Réponse",
"You use" => "Vous utilisez",
-"of the available" => "d'espace de stockage sur un total de",
+"of the available" => "de votre espace de stockage d'une taille totale de",
"Desktop and Mobile Syncing Clients" => "Clients de synchronisation Mobile et Ordinateur",
"Download" => "Télécharger",
"Your password got changed" => "Votre mot de passe a été changé",
@@ -37,6 +51,7 @@
"Create" => "Créer",
"Default Quota" => "Quota par défaut",
"Other" => "Autre",
+"Group Admin" => "Groupe Admin",
"Quota" => "Quota",
"Delete" => "Supprimer"
);
diff --git a/settings/l10n/gl.php b/settings/l10n/gl.php
index 0459d940b4d..67937e49214 100644
--- a/settings/l10n/gl.php
+++ b/settings/l10n/gl.php
@@ -1,12 +1,26 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "Non se puido cargar a lista desde a App Store",
+"Email saved" => "Correo electrónico gardado",
+"Invalid email" => "correo electrónico non válido",
"OpenID Changed" => "Mudou o OpenID",
"Invalid request" => "Petición incorrecta",
+"Authentication error" => "Erro na autenticación",
"Language changed" => "O idioma mudou",
+"Error" => "Erro",
+"Disable" => "Deshabilitar",
+"Enable" => "Habilitar",
+"Saving..." => "Gardando...",
"__language_name__" => "Galego",
+"Security Warning" => "Aviso de seguridade",
+"Cron" => "Cron",
+"execute one task with each page loaded" => "executar unha tarefa con cada páxina cargada",
+"cron.php is registered at a webcron service" => "cron.php está rexistrada como un servizo webcron",
+"use systems cron service" => "utilice o servizo cron do sistema",
"Log" => "Conectar",
"More" => "Máis",
"Add your App" => "Engade o teu aplicativo",
"Select an App" => "Escolla un Aplicativo",
+"See application page at apps.owncloud.com" => "Vexa a páxina do aplicativo en apps.owncloud.com",
"-licensed" => "-licenciado",
"by" => "por",
"Documentation" => "Documentación",
diff --git a/settings/l10n/he.php b/settings/l10n/he.php
index 39055c21398..17e803a3256 100644
--- a/settings/l10n/he.php
+++ b/settings/l10n/he.php
@@ -1,12 +1,18 @@
<?php $TRANSLATIONS = array(
+"Email saved" => "הדו×״ל נשמר",
+"Invalid email" => "דו×״ל ×œ× ×—×•×§×™",
"OpenID Changed" => "OpenID השתנה",
"Invalid request" => "בקשה ×œ× ×—×•×§×™×ª",
"Language changed" => "שפה השתנתה",
+"Disable" => "בטל",
+"Enable" => "הפעל",
+"Saving..." => "שומר..",
"__language_name__" => "עברית",
"Log" => "יומן",
"More" => "עוד",
"Add your App" => "הוספת ×”×™×™×©×•× ×©×œ×š",
"Select an App" => "בחירת יישו×",
+"See application page at apps.owncloud.com" => "צפה בעמוד ×”×™×©×•× ×‘ apps.owncloud.com",
"-licensed" => "רשיון",
"by" => "מ×ת",
"Documentation" => "תיעוד",
diff --git a/settings/l10n/hr.php b/settings/l10n/hr.php
index 5f357a85d2f..6fb29ce79c9 100644
--- a/settings/l10n/hr.php
+++ b/settings/l10n/hr.php
@@ -1,12 +1,18 @@
<?php $TRANSLATIONS = array(
+"Email saved" => "Email spremljen",
+"Invalid email" => "Neispravan email",
"OpenID Changed" => "OpenID promijenjen",
"Invalid request" => "Neispravan zahtjev",
"Language changed" => "Jezik promijenjen",
+"Disable" => "IskljuÄi",
+"Enable" => "UkljuÄi",
+"Saving..." => "Spremanje...",
"__language_name__" => "__ime_jezika__",
"Log" => "dnevnik",
"More" => "više",
"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",
"-licensed" => "-licencirano",
"by" => "od",
"Documentation" => "dokumentacija",
diff --git a/settings/l10n/hu_HU.php b/settings/l10n/hu_HU.php
index 7eb7772f6dd..4981f446548 100644
--- a/settings/l10n/hu_HU.php
+++ b/settings/l10n/hu_HU.php
@@ -1,12 +1,22 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "Nem tölthető le a lista az App Store-ból",
+"Email saved" => "Email mentve",
+"Invalid email" => "Hibás email",
"OpenID Changed" => "OpenID megváltozott",
"Invalid request" => "Érvénytelen kérés",
+"Authentication error" => "Hitelesítési hiba",
"Language changed" => "A nyelv megváltozott",
+"Error" => "Hiba",
+"Disable" => "Letiltás",
+"Enable" => "Engedélyezés",
+"Saving..." => "Mentés...",
"__language_name__" => "__language_name__",
+"Security Warning" => "Biztonsági figyelmeztetés",
"Log" => "Napló",
"More" => "Tovább",
"Add your App" => "App hozzáadása",
"Select an App" => "Egy App kiválasztása",
+"See application page at apps.owncloud.com" => "Lásd apps.owncloud.com, alkalmazások oldal",
"-licensed" => "-licencelt",
"by" => ":",
"Documentation" => "Dokumentáció",
diff --git a/settings/l10n/it.php b/settings/l10n/it.php
index a4b255546a1..e33eddacb57 100644
--- a/settings/l10n/it.php
+++ b/settings/l10n/it.php
@@ -1,12 +1,26 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "Impossibile caricare l'elenco dall'App Store",
+"Email saved" => "Email salvata",
+"Invalid email" => "Email non valida",
"OpenID Changed" => "OpenID modificato",
"Invalid request" => "Richiesta non valida",
+"Authentication error" => "Errore di autenticazione",
"Language changed" => "Lingua modificata",
+"Error" => "Errore",
+"Disable" => "Disabilita",
+"Enable" => "Abilita",
+"Saving..." => "Salvataggio in corso...",
"__language_name__" => "Italiano",
+"Security Warning" => "Avviso di sicurezza",
+"Cron" => "Cron",
+"execute one task with each page loaded" => "esegui un'attività con ogni pagina caricata",
+"cron.php is registered at a webcron service" => "cron.php è registrato a un servizio webcron",
+"use systems cron service" => "usa il servizio cron di sistema",
"Log" => "Registro",
"More" => "Altro",
"Add your App" => "Aggiungi la tua applicazione",
"Select an App" => "Seleziona un'applicazione",
+"See application page at apps.owncloud.com" => "Vedere la pagina dell'applicazione su apps.owncloud.com",
"-licensed" => "-rilasciato",
"by" => "da",
"Documentation" => "Documentazione",
@@ -27,7 +41,7 @@
"Change password" => "Modifica password",
"Email" => "Email",
"Your email address" => "Il tuo indirizzo email",
-"Fill in an email address to enable password recovery" => "Inserici il tuo indirizzo email per abilitare il recupero della password",
+"Fill in an email address to enable password recovery" => "Inserisci il tuo indirizzo email per abilitare il recupero della password",
"Language" => "Lingua",
"Help translate" => "Migliora la traduzione",
"use this address to connect to your ownCloud in your file manager" => "usa questo indirizzo per connetterti al tuo ownCloud dal gestore file",
@@ -37,6 +51,7 @@
"Create" => "Crea",
"Default Quota" => "Quota predefinita",
"Other" => "Altro",
+"Group Admin" => "Gruppo di amministrazione",
"Quota" => "Quote",
"Delete" => "Elimina"
);
diff --git a/settings/l10n/ja_JP.php b/settings/l10n/ja_JP.php
index 69e56983744..93201a9dfe0 100644
--- a/settings/l10n/ja_JP.php
+++ b/settings/l10n/ja_JP.php
@@ -1,12 +1,26 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "アプリストアã‹ã‚‰ãƒªã‚¹ãƒˆã‚’ロードã§ãã¾ã›ã‚“",
+"Email saved" => "メールアドレスをä¿å­˜ã—ã¾ã—ãŸ",
+"Invalid email" => "無効ãªãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹",
"OpenID Changed" => "OpenIDãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ",
"Invalid request" => "無効ãªãƒªã‚¯ã‚¨ã‚¹ãƒˆã§ã™",
+"Authentication error" => "èªè¨¼ã‚¨ãƒ©ãƒ¼",
"Language changed" => "言語ãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸ",
+"Error" => "エラー",
+"Disable" => "無効",
+"Enable" => "有効",
+"Saving..." => "ä¿å­˜ä¸­...",
"__language_name__" => "Japanese (日本語)",
+"Security Warning" => "セキュリティ警告",
+"Cron" => "cron(自動定期実行)",
+"execute one task with each page loaded" => "ページを開ã毎ã«ã‚¿ã‚¹ã‚¯ã‚’1ã¤å®Ÿè¡Œ",
+"cron.php is registered at a webcron service" => "cron.phpã‚’webcronサービスã«ç™»éŒ²ã—ã¾ã—ãŸ",
+"use systems cron service" => "システムã®cronサービスを使用",
"Log" => "ログ",
"More" => "ã‚‚ã£ã¨",
"Add your App" => "アプリを追加",
"Select an App" => "アプリをé¸æŠžã—ã¦ãã ã•ã„",
+"See application page at apps.owncloud.com" => "apps.owncloud.com ã§ã‚¢ãƒ—リケーションã®ãƒšãƒ¼ã‚¸ã‚’見ã¦ãã ã•ã„",
"-licensed" => "ライセンス",
"by" => "@",
"Documentation" => "ドキュメント",
@@ -37,6 +51,7 @@
"Create" => "作æˆ",
"Default Quota" => "デフォルトã®ã‚¯ã‚©ãƒ¼ã‚¿ã‚µã‚¤ã‚º",
"Other" => "ãã®ä»–",
+"Group Admin" => "グループ管ç†è€…",
"Quota" => "クオータ",
"Delete" => "削除"
);
diff --git a/settings/l10n/ko.php b/settings/l10n/ko.php
index a2c1210af6b..828426dc1d9 100644
--- a/settings/l10n/ko.php
+++ b/settings/l10n/ko.php
@@ -1,12 +1,18 @@
<?php $TRANSLATIONS = array(
+"Email saved" => "ì´ë©”ì¼ ì €ìž¥",
+"Invalid email" => "ìž˜ëª»ëœ ì´ë©”ì¼",
"OpenID Changed" => "OpenID 변경ë¨",
"Invalid request" => "ìž˜ëª»ëœ ìš”ì²­",
"Language changed" => "언어가 변경ë˜ì—ˆìŠµë‹ˆë‹¤",
+"Disable" => "비활성화",
+"Enable" => "활성화",
+"Saving..." => "저장...",
"__language_name__" => "한국어",
"Log" => "로그",
"More" => "ë”",
"Add your App" => "앱 추가",
"Select an App" => "프로그램 ì„ íƒ",
+"See application page at apps.owncloud.com" => "application page at apps.owncloud.comì„ ë³´ì‹œì˜¤.",
"-licensed" => " ë¼ì´ì„ ìŠ¤ 사용",
"by" => " by ",
"Documentation" => "문서",
diff --git a/settings/l10n/lt_LT.php b/settings/l10n/lt_LT.php
index 504217a9db5..e8076e293be 100644
--- a/settings/l10n/lt_LT.php
+++ b/settings/l10n/lt_LT.php
@@ -1,8 +1,18 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "Neįmanoma įkelti sąrašo iš Programų Katalogo",
+"Email saved" => "El. paštas išsaugotas",
+"Invalid email" => "Netinkamas el. paštas",
"OpenID Changed" => "OpenID pakeistas",
"Invalid request" => "Klaidinga užklausa",
"Language changed" => "Kalba pakeista",
+"Error" => "Klaida",
+"Disable" => "IÅ¡jungti",
+"Enable" => "Įjungti",
+"Saving..." => "Saugoma..",
"__language_name__" => "Kalba",
+"Security Warning" => "Saugumo įspėjimas",
+"Cron" => "Cron",
+"use systems cron service" => "naudoti sistemos cron servisÄ…",
"Log" => "Žurnalas",
"More" => "Daugiau",
"Add your App" => "PridÄ—ti programÄ—lÄ™",
diff --git a/settings/l10n/lv.php b/settings/l10n/lv.php
new file mode 100644
index 00000000000..9fa1ccdcfe3
--- /dev/null
+++ b/settings/l10n/lv.php
@@ -0,0 +1,49 @@
+<?php $TRANSLATIONS = array(
+"Email saved" => "Epasts tika saglabÄts",
+"Invalid email" => "Nepareizs epasts",
+"OpenID Changed" => "OpenID nomainīts",
+"Invalid request" => "Nepareizs vaicÄjums",
+"Language changed" => "Valoda tika nomainīta",
+"Disable" => "Atvienot",
+"Enable" => "Pievienot",
+"Saving..." => "SaglabÄ...",
+"__language_name__" => "__valodas_nosaukums__",
+"Security Warning" => "BrÄ«dinÄjums par droÅ¡Ä«bu",
+"Log" => "Log",
+"More" => "VairÄk",
+"Add your App" => "Pievieno savu aplikÄciju",
+"Select an App" => "IzvÄ“lies aplikÄciju",
+"See application page at apps.owncloud.com" => "Apskatie aplikÄciju lapu - apps.owncloud.com",
+"-licensed" => "licenzēts",
+"by" => "no",
+"Documentation" => "DokumentÄcija",
+"Managing Big Files" => "Rīkoties ar apjomīgiem failiem",
+"Ask a question" => "Uzdod jautajumu",
+"Problems connecting to help database." => "ProblÄ“mas ar datubÄzes savienojumu",
+"Go there manually." => "Nokļūt tur pašrocīgi",
+"Answer" => "Atbildēt",
+"You use" => "JÅ«s iymantojat",
+"of the available" => "no pieejamajiem",
+"Desktop and Mobile Syncing Clients" => "Desktop un mobÄ«lo ierÄ«Äu sinhronizÄcijas rÄ«ks",
+"Download" => "LejuplÄdÄ“t",
+"Your password got changed" => "Jūsu parole tika nomainīta",
+"Unable to change your password" => "Nav iespējams 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",
+"Language" => "Valoda",
+"Help translate" => "Palīdzi tulkot",
+"use this address to connect to your ownCloud in your file manager" => "izmanto Å¡o adresi lai ielogotos ownCloud no sava failu pÄrlÅ«ka",
+"Name" => "VÄrds",
+"Password" => "Parole",
+"Groups" => "Grupas",
+"Create" => "Izveidot",
+"Default Quota" => "Apjoms pēc noklusējuma",
+"Other" => "Cits",
+"Quota" => "Apjoms",
+"Delete" => "Izdzēst"
+);
diff --git a/settings/l10n/mk.php b/settings/l10n/mk.php
index 4a61ba9d512..38e3cc6e09e 100644
--- a/settings/l10n/mk.php
+++ b/settings/l10n/mk.php
@@ -1,12 +1,18 @@
<?php $TRANSLATIONS = array(
+"Email saved" => "ЕлектронÑката пошта е Ñнимена",
+"Invalid email" => "ÐеиÑправна електронÑка пошта",
"OpenID Changed" => "OpenID Ñменето",
"Invalid request" => "неправилно барање",
"Language changed" => "Јазикот е Ñменет",
+"Disable" => "Оневозможи",
+"Enable" => "Овозможи",
+"Saving..." => "Снимам...",
"__language_name__" => "__language_name__",
"Log" => "ЗапиÑник",
"More" => "Повеќе",
"Add your App" => "Додадете ја Вашата апликација",
"Select an App" => "Избери аппликација",
+"See application page at apps.owncloud.com" => "Види ја Ñтраницата Ñо апликации на apps.owncloud.com",
"-licensed" => "-licensed",
"by" => "од",
"Documentation" => "Документација",
diff --git a/settings/l10n/ms_MY.php b/settings/l10n/ms_MY.php
index f0fba7a7c03..de2384a4ae2 100644
--- a/settings/l10n/ms_MY.php
+++ b/settings/l10n/ms_MY.php
@@ -1,23 +1,38 @@
<?php $TRANSLATIONS = array(
-"OpenID Changed" => "OpenID ditukar",
+"Email saved" => "Emel disimpan",
+"Invalid email" => "Emel tidak sah",
+"OpenID Changed" => "OpenID diubah",
"Invalid request" => "Permintaan tidak sah",
-"Language changed" => "Bahasa ditukar",
+"Authentication error" => "Ralat pengesahan",
+"Language changed" => "Bahasa diubah",
+"Disable" => "Nyahaktif",
+"Enable" => "Aktif",
+"Saving..." => "Simpan...",
"__language_name__" => "_nama_bahasa_",
+"Security Warning" => "Amaran keselamatan",
+"Log" => "Log",
+"More" => "Lanjutan",
+"Add your App" => "Tambah apps anda",
"Select an App" => "Pilih aplikasi",
+"See application page at apps.owncloud.com" => "Lihat halaman applikasi di apps.owncloud.com",
"-licensed" => "-dilesen",
"by" => "oleh",
+"Documentation" => "Dokumentasi",
+"Managing Big Files" => "Mengurus Fail Besar",
"Ask a question" => "Tanya soalan",
"Problems connecting to help database." => "Masalah menghubung untuk membantu pengkalan data",
"Go there manually." => "Pergi ke sana secara manual",
"Answer" => "Jawapan",
"You use" => "Anda menggunakan",
"of the available" => "yang tersedia",
-"Your password got changed" => "Kata laluan anda ditukar",
-"Unable to change your password" => "Gagal menukar kata laluan anda ",
-"Current password" => "Kata laluan terkini",
+"Desktop and Mobile Syncing Clients" => "Klien Selarian untuk Desktop dan Mobile",
+"Download" => "Muat turun",
+"Your password got changed" => "Kata laluan anda diubah",
+"Unable to change your password" => "Gagal mengubah kata laluan anda ",
+"Current password" => "Kata laluan semasa",
"New password" => "Kata laluan baru",
"show" => "Papar",
-"Change password" => "Tukar kata laluan",
+"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",
@@ -28,6 +43,8 @@
"Password" => "Kata laluan ",
"Groups" => "Kumpulan",
"Create" => "Buat",
+"Default Quota" => "Kuota Lalai",
+"Other" => "Lain",
"Quota" => "Kuota",
"Delete" => "Padam"
);
diff --git a/settings/l10n/nb_NO.php b/settings/l10n/nb_NO.php
index 1379bb9c2ed..2a5188a9ccc 100644
--- a/settings/l10n/nb_NO.php
+++ b/settings/l10n/nb_NO.php
@@ -1,21 +1,29 @@
<?php $TRANSLATIONS = array(
+"Email saved" => "Epost lagret",
+"Invalid email" => "Ugyldig epost",
"OpenID Changed" => "OpenID endret",
"Invalid request" => "Ugyldig forespørsel",
"Language changed" => "Språk endret",
+"Disable" => "Slå avBehandle ",
+"Enable" => "Slå på",
+"Saving..." => "Lagrer...",
"__language_name__" => "__language_name__",
"Log" => "Logg",
"More" => "Mer",
"Add your App" => "Legg til din App",
"Select an App" => "Velg en app",
+"See application page at apps.owncloud.com" => "Se applikasjonens side på apps.owncloud.org",
"-licensed" => "-lisensiert",
"by" => "av",
"Documentation" => "Dokumentasjon",
+"Managing Big Files" => "HÃ¥ndtere store filer",
"Ask a question" => "Still et spørsmål",
"Problems connecting to help database." => "Problemer med å koble til hjelp-databasen",
"Go there manually." => "GÃ¥ dit manuelt",
"Answer" => "Svar",
"You use" => "Du bruker",
"of the available" => "av den tilgjengelige",
+"Desktop and Mobile Syncing Clients" => "Klienter for datamaskiner og mobile enheter",
"Download" => "Last ned",
"Your password got changed" => "Passordet ditt ble endret",
"Unable to change your password" => "Kunne ikke endre passordet ditt",
@@ -34,6 +42,7 @@
"Groups" => "Grupper",
"Create" => "Opprett",
"Default Quota" => "Standard Kvote",
+"Other" => "Annet",
"Quota" => "Kvote",
"Delete" => "Slett"
);
diff --git a/settings/l10n/nl.php b/settings/l10n/nl.php
index 939907ef710..a1db0f457f5 100644
--- a/settings/l10n/nl.php
+++ b/settings/l10n/nl.php
@@ -1,12 +1,18 @@
<?php $TRANSLATIONS = array(
+"Email saved" => "E-mail bewaard",
+"Invalid email" => "Ongeldige e-mail",
"OpenID Changed" => "OpenID is aangepast",
"Invalid request" => "Ongeldig verzoek",
"Language changed" => "Taal aangepast",
+"Disable" => "Uitschakelen",
+"Enable" => "Inschakelen",
+"Saving..." => "Aan het bewaren.....",
"__language_name__" => "Nederlands",
"Log" => "Log",
"More" => "Meer",
"Add your App" => "Voeg je App toe",
"Select an App" => "Selecteer een app",
+"See application page at apps.owncloud.com" => "Zie de applicatiepagina op apps.owncloud.com",
"-licensed" => "-gelicentieerd",
"by" => "door",
"Documentation" => "Documentatie",
diff --git a/settings/l10n/nn_NO.php b/settings/l10n/nn_NO.php
index 87c9cecb24e..e5968bcd4a3 100644
--- a/settings/l10n/nn_NO.php
+++ b/settings/l10n/nn_NO.php
@@ -1,7 +1,14 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "Klarer ikkje å laste inn liste fra App Store",
+"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",
+"Error" => "Feil",
+"Disable" => "Slå av",
+"Enable" => "Slå på",
"__language_name__" => "Nynorsk",
"Select an App" => "Vel ein applikasjon",
"-licensed" => "-lisensiert",
diff --git a/settings/l10n/pl.php b/settings/l10n/pl.php
index d9dac06c007..de9384a2440 100644
--- a/settings/l10n/pl.php
+++ b/settings/l10n/pl.php
@@ -1,12 +1,26 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "Nie mogę załadować listy aplikacji",
+"Email saved" => "Email zapisany",
+"Invalid email" => "Niepoprawny email",
"OpenID Changed" => "Zmieniono OpenID",
"Invalid request" => "Nieprawidłowe żądanie",
+"Authentication error" => "BÅ‚Ä…d uwierzytelniania",
"Language changed" => "Język zmieniony",
+"Error" => "BÅ‚Ä…d",
+"Disable" => "Wyłączone",
+"Enable" => "WÅ‚Ä…czone",
+"Saving..." => "Zapisywanie...",
"__language_name__" => "Polski",
+"Security Warning" => "Ostrzeżenia bezpieczeństwa",
+"Cron" => "Cron",
+"execute one task with each page loaded" => "wykonanie jednego zadania z każdej załadowanej strony",
+"cron.php is registered at a webcron service" => "cron.php jest zarejestrowany w usłudze webcron",
+"use systems cron service" => "korzystaj z usługi systemowej cron",
"Log" => "Log",
"More" => "Więcej",
"Add your App" => "Dodaj aplikacje",
"Select an App" => "Zaznacz aplikacje",
+"See application page at apps.owncloud.com" => "Zobacz stronÄ™ aplikacji na apps.owncloud.com",
"-licensed" => "-licencjonowany",
"by" => "przez",
"Documentation" => "Dokumentacja",
@@ -37,6 +51,7 @@
"Create" => "Utwórz",
"Default Quota" => "Domyślny udział",
"Other" => "Inne",
+"Group Admin" => "Grupa Admin",
"Quota" => "Udział",
"Delete" => "UsunÌ"
);
diff --git a/settings/l10n/pt_BR.php b/settings/l10n/pt_BR.php
index 35cf507194a..e8154dfca7e 100644
--- a/settings/l10n/pt_BR.php
+++ b/settings/l10n/pt_BR.php
@@ -1,12 +1,18 @@
<?php $TRANSLATIONS = array(
+"Email saved" => "Email gravado",
+"Invalid email" => "Email inválido",
"OpenID Changed" => "Mudou OpenID",
"Invalid request" => "Pedido inválido",
"Language changed" => "Mudou Idioma",
+"Disable" => "Desabilitado",
+"Enable" => "Habilitado",
+"Saving..." => "Gravando...",
"__language_name__" => "Português",
"Log" => "Log",
"More" => "Mais",
"Add your App" => "Adicione seu Aplicativo",
"Select an App" => "Selecione uma Aplicação",
+"See application page at apps.owncloud.com" => "Ver página do aplicativo em apps.owncloud.com",
"-licensed" => "-licenciados",
"by" => "por",
"Documentation" => "Documentação",
diff --git a/settings/l10n/pt_PT.php b/settings/l10n/pt_PT.php
index af7088daa12..af12c42de46 100644
--- a/settings/l10n/pt_PT.php
+++ b/settings/l10n/pt_PT.php
@@ -1,12 +1,26 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "Incapaz de carregar a lista da App Store",
+"Email saved" => "Email guardado",
+"Invalid email" => "Email inválido",
"OpenID Changed" => "OpenID alterado",
"Invalid request" => "Pedido inválido",
+"Authentication error" => "Erro de autenticação",
"Language changed" => "Idioma alterado",
+"Error" => "Erro",
+"Disable" => "Desativar",
+"Enable" => "Ativar",
+"Saving..." => "A guardar...",
"__language_name__" => "__language_name__",
+"Security Warning" => "Aviso de Segurança",
+"Cron" => "Cron",
+"execute one task with each page loaded" => "Executar uma tarefa com cada página carregada",
+"cron.php is registered at a webcron service" => "cron.php está registado num serviço webcron",
+"use systems cron service" => "usar o serviço cron do sistema",
"Log" => "Log",
"More" => "Mais",
"Add your App" => "Adicione a sua aplicação",
"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",
"-licensed" => "-licenciado",
"by" => "por",
"Documentation" => "Documentação",
@@ -37,6 +51,7 @@
"Create" => "Criar",
"Default Quota" => "Quota por defeito",
"Other" => "Outro",
+"Group Admin" => "Grupo Administrador",
"Quota" => "Quota",
"Delete" => "Apagar"
);
diff --git a/settings/l10n/ru.php b/settings/l10n/ru.php
index 4ab514815cb..949e9572c1c 100644
--- a/settings/l10n/ru.php
+++ b/settings/l10n/ru.php
@@ -1,12 +1,26 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "Загрузка из App Store запрещена",
+"Email saved" => "Email Ñохранен",
+"Invalid email" => "Ðеправильный Email",
"OpenID Changed" => "OpenID изменён",
"Invalid request" => "Ðеверный запроÑ",
+"Authentication error" => "Ошибка авторизации",
"Language changed" => "Язык изменён",
+"Error" => "Ошибка",
+"Disable" => "Отключить",
+"Enable" => "Включить",
+"Saving..." => "Сохранение...",
"__language_name__" => "РуÑÑкий ",
+"Security Warning" => "Предупреждение безопаÑноÑти",
+"Cron" => "Задание",
+"execute one task with each page loaded" => "ЗапуÑкать задание при загрузке каждой Ñтраницы",
+"cron.php is registered at a webcron service" => "cron.php зарегиÑтрирован в webcron ÑервиÑе",
+"use systems cron service" => "иÑпользовать ÑиÑтемные заданиÑ",
"Log" => "Журнал",
"More" => "Ещё",
"Add your App" => "Добавить приложение",
"Select an App" => "Выберите приложение",
+"See application page at apps.owncloud.com" => "Смотрите Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½Ð° apps.owncloud.com",
"-licensed" => "-лицензиÑ",
"by" => "от",
"Documentation" => "ДокументациÑ",
@@ -37,6 +51,7 @@
"Create" => "Создать",
"Default Quota" => "Квота по умолчанию",
"Other" => "Другое",
+"Group Admin" => "Группа ÐдминиÑтраторы",
"Quota" => "Квота",
"Delete" => "Удалить"
);
diff --git a/settings/l10n/sk_SK.php b/settings/l10n/sk_SK.php
index fe755aecb46..edf908ce097 100644
--- a/settings/l10n/sk_SK.php
+++ b/settings/l10n/sk_SK.php
@@ -1,12 +1,18 @@
<?php $TRANSLATIONS = array(
+"Email saved" => "Email uložený",
+"Invalid email" => "Neplatný email",
"OpenID Changed" => "OpenID zmenené",
"Invalid request" => "Neplatná požiadavka",
"Language changed" => "Jazyk zmenený",
+"Disable" => "Zakázať",
+"Enable" => "Povoliť",
+"Saving..." => "Ukladám...",
"__language_name__" => "Slovensky",
"Log" => "Záznam",
"More" => "Viac",
"Add your App" => "Pridať vašu aplikáciu",
"Select an App" => "Vyberte aplikáciu",
+"See application page at apps.owncloud.com" => "Pozrite si stránku aplikácie na apps.owncloud.com",
"-licensed" => "-licencované",
"by" => "od",
"Documentation" => "Dokumentácia",
diff --git a/settings/l10n/sl.php b/settings/l10n/sl.php
index 58afe21f45f..a2404d212b2 100644
--- a/settings/l10n/sl.php
+++ b/settings/l10n/sl.php
@@ -1,12 +1,26 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "Ne morem naložiti seznama iz App Store",
+"Email saved" => "E-poštni naslov je bil shranjen",
+"Invalid email" => "Neveljaven e-poštni naslov",
"OpenID Changed" => "OpenID je bil spremenjen",
"Invalid request" => "Neveljaven zahtevek",
+"Authentication error" => "Napaka overitve",
"Language changed" => "Jezik je bil spremenjen",
+"Error" => "Napaka",
+"Disable" => "OnemogoÄi",
+"Enable" => "OmogoÄi",
+"Saving..." => "Shranjevanje...",
"__language_name__" => "__ime_jezika__",
+"Security Warning" => "Varnostno opozorilo",
+"Cron" => "PeriodiÄno opravilo",
+"execute one task with each page loaded" => "izvedi eno nalogo z vsako naloženo stranjo",
+"cron.php is registered at a webcron service" => "cron.php je vpisan na storitev webcron",
+"use systems cron service" => "uporabi sistemski servis za periodiÄna opravila",
"Log" => "Dnevnik",
"More" => "VeÄ",
"Add your App" => "Dodajte vašo aplikacijo",
"Select an App" => "Izberite aplikacijo",
+"See application page at apps.owncloud.com" => "ObiÅ¡Äite spletno stran aplikacije na apps.owncloud.com",
"-licensed" => "-licencirana",
"by" => "s strani",
"Documentation" => "Dokumentacija",
@@ -37,6 +51,7 @@
"Create" => "Ustvari",
"Default Quota" => "Privzeta koliÄinska omejitev",
"Other" => "Drugo",
+"Group Admin" => "Administrator skupine",
"Quota" => "KoliÄinska omejitev",
"Delete" => "Izbriši"
);
diff --git a/settings/l10n/sv.php b/settings/l10n/sv.php
index 40a370aabeb..7603b6b09f7 100644
--- a/settings/l10n/sv.php
+++ b/settings/l10n/sv.php
@@ -1,25 +1,39 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "Kan inte ladda listan från App Store",
+"Email saved" => "E-post sparad",
+"Invalid email" => "Ogiltig e-post",
"OpenID Changed" => "OpenID ändrat",
"Invalid request" => "Ogiltig begäran",
+"Authentication error" => "Autentiseringsfel",
"Language changed" => "Språk ändrades",
+"Error" => "Fel",
+"Disable" => "Deaktivera",
+"Enable" => "Aktivera",
+"Saving..." => "Sparar...",
"__language_name__" => "__language_name__",
+"Security Warning" => "Säkerhetsvarning",
+"Cron" => "Cron",
+"execute one task with each page loaded" => "utför en uppgift vid varje sidladdning",
+"cron.php is registered at a webcron service" => "cron.php är registrerad på en webcron-tjänst",
+"use systems cron service" => "använd systemets cron-tjänst",
"Log" => "Logg",
"More" => "Mera",
"Add your App" => "Lägg till din applikation",
"Select an App" => "Välj en App",
+"See application page at apps.owncloud.com" => "Se programsida på apps.owncloud.com",
"-licensed" => "-licensierat",
"by" => "av",
"Documentation" => "Dokumentation",
"Managing Big Files" => "Hantering av stora filer",
"Ask a question" => "Ställ en fråga",
-"Problems connecting to help database." => "Problem med att ansluta till hjälp-databasen.",
-"Go there manually." => "GÃ¥ dit manuellt",
+"Problems connecting to help database." => "Problem med att ansluta till hjälpdatabasen.",
+"Go there manually." => "GÃ¥ dit manuellt.",
"Answer" => "Svar",
"You use" => "Du använder",
"of the available" => "av tillgängliga",
"Desktop and Mobile Syncing Clients" => "Synkroniseringsklienter för dator och mobil",
"Download" => "Ladda ner",
-"Your password got changed" => "Ditt lösenord ändrades",
+"Your password got 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",
@@ -37,6 +51,7 @@
"Create" => "Skapa",
"Default Quota" => "Förvald datakvot",
"Other" => "Annat",
+"Group Admin" => "Gruppadministratör",
"Quota" => "Kvot",
-"Delete" => "Ta bort"
+"Delete" => "Radera"
);
diff --git a/settings/l10n/th_TH.php b/settings/l10n/th_TH.php
index 5b744cb6be9..a062c374c6a 100644
--- a/settings/l10n/th_TH.php
+++ b/settings/l10n/th_TH.php
@@ -1,12 +1,26 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "ไม่สามารถโหลดรายà¸à¸²à¸£à¸ˆà¸²à¸ App Store ได้",
+"Email saved" => "อีเมลถูà¸à¸šà¸±à¸™à¸—ึà¸à¹à¸¥à¹‰à¸§",
+"Invalid email" => "อีเมลไม่ถูà¸à¸•à¹‰à¸­à¸‡",
"OpenID Changed" => "เปลี่ยนชื่อบัà¸à¸Šà¸µ OpenID à¹à¸¥à¹‰à¸§",
"Invalid request" => "คำร้องขอไม่ถูà¸à¸•à¹‰à¸­à¸‡",
+"Authentication error" => "เà¸à¸´à¸”ข้อผิดพลาดเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸ªà¸´à¸—ธิ์à¸à¸²à¸£à¹€à¸‚้าใช้งาน",
"Language changed" => "เปลี่ยนภาษาเรียบร้อยà¹à¸¥à¹‰à¸§",
+"Error" => "ข้อผิดพลาด",
+"Disable" => "ปิดใช้งาน",
+"Enable" => "เปิดใช้งาน",
+"Saving..." => "à¸à¸³à¸¥à¸±à¸‡à¸šà¸±à¸™à¸—ึุà¸à¸‚้อมูล...",
"__language_name__" => "ภาษาไทย",
+"Security Warning" => "คำเตือนเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸„วามปลอดภัย",
+"Cron" => "Cron",
+"execute one task with each page loaded" => "ประมวลผลหนึ่งงานเมื่อโหลดหน้าเว็บà¹à¸•à¹ˆà¸¥à¸°à¸„รั้ง",
+"cron.php is registered at a webcron service" => "cron.php ได้ถูà¸à¸¥à¸‡à¸—ะเบียนที่บริà¸à¸²à¸£ webcron",
+"use systems cron service" => "ใช้บริà¸à¸²à¸£ cron จาà¸à¸£à¸°à¸šà¸š",
"Log" => "บันทึà¸à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡",
"More" => "เพิ่มเติม",
"Add your App" => "เพิ่มà¹à¸­à¸›à¸‚องคุณ",
"Select an App" => "เลือภApp",
+"See application page at apps.owncloud.com" => "ดูหน้าà¹à¸­à¸žà¸žà¸¥à¸´à¹€à¸„ชั่นที่ apps.owncloud.com",
"-licensed" => "-ได้รับอนุà¸à¸²à¸•à¸´à¹à¸¥à¹‰à¸§",
"by" => "โดย",
"Documentation" => "เอà¸à¸ªà¸²à¸£à¸„ู่มือà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™",
@@ -37,6 +51,7 @@
"Create" => "สร้าง",
"Default Quota" => "โควต้าที่à¸à¸³à¸«à¸™à¸”ไว้เริ่มต้น",
"Other" => "อื่นๆ",
+"Group Admin" => "ผู้ดูà¹à¸¥à¸à¸¥à¸¸à¹ˆà¸¡",
"Quota" => "พื้นที่",
"Delete" => "ลบ"
);
diff --git a/settings/l10n/tr.php b/settings/l10n/tr.php
index 01ad142a3db..8182236a2d8 100644
--- a/settings/l10n/tr.php
+++ b/settings/l10n/tr.php
@@ -1,12 +1,20 @@
<?php $TRANSLATIONS = array(
+"Email saved" => "Eposta kaydedildi",
+"Invalid email" => "Geçersiz eposta",
"OpenID Changed" => "OpenID DeÄŸiÅŸtirildi",
"Invalid request" => "Geçersiz istek",
+"Authentication error" => "EÅŸleÅŸme hata",
"Language changed" => "Dil deÄŸiÅŸtirildi",
+"Disable" => "Etkin deÄŸil",
+"Enable" => "Etkin",
+"Saving..." => "Kaydediliyor...",
"__language_name__" => "__dil_adı__",
+"Security Warning" => "Güvenlik Uyarisi",
"Log" => "Günlük",
"More" => "Devamı",
"Add your App" => "Uygulamanı Ekle",
"Select an App" => "Bir uygulama seçin",
+"See application page at apps.owncloud.com" => "Uygulamanın sayfasına apps.owncloud.com adresinden bakın ",
"-licensed" => "-lisanslı",
"by" => "yapan",
"Documentation" => "Dökümantasyon",
diff --git a/settings/l10n/uk.php b/settings/l10n/uk.php
new file mode 100644
index 00000000000..7331ff324c1
--- /dev/null
+++ b/settings/l10n/uk.php
@@ -0,0 +1,23 @@
+<?php $TRANSLATIONS = array(
+"OpenID Changed" => "OpenID змінено",
+"Invalid request" => "Помилковий запит",
+"Language changed" => "Мова змінена",
+"Select an App" => "Вибрати додаток",
+"-licensed" => "-ліцензовано",
+"by" => "по",
+"Ask a question" => "Запитати",
+"Problems connecting to help database." => "Проблема при з'єднані з базою допомоги",
+"You use" => "Ви викориÑтовуєте",
+"of the available" => "з доÑтупної",
+"Your password got changed" => "Ваш пароль змінено",
+"Current password" => "Поточний пароль",
+"New password" => "Ðовий пароль",
+"show" => "показати",
+"Change password" => "Змінити пароль",
+"Language" => "Мова",
+"Name" => "Ім'Ñ",
+"Password" => "Пароль",
+"Groups" => "Групи",
+"Create" => "Створити",
+"Delete" => "Видалити"
+);
diff --git a/settings/l10n/vi.php b/settings/l10n/vi.php
new file mode 100644
index 00000000000..41e4441b1cb
--- /dev/null
+++ b/settings/l10n/vi.php
@@ -0,0 +1,48 @@
+<?php $TRANSLATIONS = array(
+"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ệ",
+"Language changed" => "Ngôn ngữ đã được thay đổi",
+"Disable" => "Vô hiệu",
+"Enable" => "Cho phép",
+"Saving..." => "Äang tiến hành lÆ°u ...",
+"__language_name__" => "__Ngôn ngữ___",
+"Log" => "Log",
+"More" => "nhiá»u hÆ¡n",
+"Add your App" => "Thêm ứng dụng của bạn",
+"Select an App" => "Chá»n má»™t ứng dụng",
+"See application page at apps.owncloud.com" => "Xem ứng dụng tại apps.owncloud.com",
+"-licensed" => "Giấy phép đã được cấp",
+"by" => "bởi",
+"Documentation" => "Tài liệu",
+"Managing Big Files" => "Quản lý tập tin lớn",
+"Ask a question" => "Äặt câu há»i",
+"Problems connecting to help database." => "Vấn đỠkết nối đến cơ sở dữ liệu.",
+"Go there manually." => "Äến bằng thủ công",
+"Answer" => "trả lá»i",
+"You use" => "Bạn sử dụng",
+"of the available" => "có sẵn",
+"Desktop and Mobile Syncing Clients" => "Äồng bá»™ dữ liệu",
+"Download" => "Tải vá»",
+"Your password got changed" => "Mật khẩu đã đượ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",
+"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" => "Dịch ",
+"use this address to connect to your ownCloud in your file manager" => "sử dụng địa chỉ này để kết nối với ownCloud của bạn trong quản lý tập tin ",
+"Name" => "Tên",
+"Password" => "Mật khẩu",
+"Groups" => "Nhóm",
+"Create" => "Tạo",
+"Default Quota" => "Hạn ngạch mặt định",
+"Other" => "Khác",
+"Quota" => "Hạn ngạch",
+"Delete" => "Xóa"
+);
diff --git a/settings/l10n/zh_CN.GB2312.php b/settings/l10n/zh_CN.GB2312.php
new file mode 100644
index 00000000000..faf125225ba
--- /dev/null
+++ b/settings/l10n/zh_CN.GB2312.php
@@ -0,0 +1,53 @@
+<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "ä¸èƒ½ä»ŽApp Store 中加载列表",
+"Email saved" => "Email ä¿å­˜äº†",
+"Invalid email" => "éžæ³•Email",
+"OpenID Changed" => "OpenID 改å˜äº†",
+"Invalid request" => "éžæ³•è¯·æ±‚",
+"Authentication error" => "认è¯é”™è¯¯",
+"Language changed" => "语言改å˜äº†",
+"Error" => "错误",
+"Disable" => "ç¦ç”¨",
+"Enable" => "å¯ç”¨",
+"Saving..." => "ä¿å­˜ä¸­...",
+"__language_name__" => "Chinese",
+"Security Warning" => "安全警告",
+"Cron" => "定时",
+"Log" => "日志",
+"More" => "更多",
+"Add your App" => "添加你的应用程åº",
+"Select an App" => "选择一个程åº",
+"See application page at apps.owncloud.com" => "在owncloud.com上查看应用程åº",
+"-licensed" => "-许å¯äº†",
+"by" => "ç”±",
+"Documentation" => "文档",
+"Managing Big Files" => "管ç†å¤§æ–‡ä»¶",
+"Ask a question" => "æ一个问题",
+"Problems connecting to help database." => "连接到帮助数æ®åº“时的问题",
+"Go there manually." => "收到转到.",
+"Answer" => "回答",
+"You use" => "你使用",
+"of the available" => "å¯ç”¨çš„",
+"Desktop and Mobile Syncing Clients" => "æ¡Œé¢å’Œç§»åŠ¨åŒæ­¥å®¢æˆ·ç«¯",
+"Download" => "下载",
+"Your password got changed" => "你的密ç å·²ç»æ”¹å˜",
+"Unable to change your password" => "ä¸èƒ½æ”¹å˜ä½ çš„密ç ",
+"Current password" => "现在的密ç ",
+"New password" => "新密ç ",
+"show" => "展示",
+"Change password" => "改å˜å¯†ç ",
+"Email" => "Email",
+"Your email address" => "ä½ çš„email地å€",
+"Fill in an email address to enable password recovery" => "输入一个邮箱地å€ä»¥æ¿€æ´»å¯†ç æ¢å¤åŠŸèƒ½",
+"Language" => "语言",
+"Help translate" => "帮助翻译",
+"use this address to connect to your ownCloud in your file manager" => "使用这个地å€å’Œä½ çš„文件管ç†å™¨è¿žæŽ¥åˆ°ä½ çš„ownCloud",
+"Name" => "åå­—",
+"Password" => "密ç ",
+"Groups" => "组",
+"Create" => "新建",
+"Default Quota" => "默认é™é¢",
+"Other" => "其他的",
+"Quota" => "é™é¢",
+"Delete" => "删除"
+);
diff --git a/settings/l10n/zh_CN.php b/settings/l10n/zh_CN.php
index d274b372ee9..410772e080c 100644
--- a/settings/l10n/zh_CN.php
+++ b/settings/l10n/zh_CN.php
@@ -1,12 +1,25 @@
<?php $TRANSLATIONS = array(
+"Unable to load list from App Store" => "无法从应用商店载入列表",
+"Email saved" => "电å­é‚®ä»¶å·²ä¿å­˜",
+"Invalid email" => "无效的电å­é‚®ä»¶",
"OpenID Changed" => "OpenID 已修改",
"Invalid request" => "éžæ³•è¯·æ±‚",
+"Authentication error" => "认è¯é”™è¯¯",
"Language changed" => "语言已修改",
+"Error" => "错误",
+"Disable" => "ç¦ç”¨",
+"Enable" => "å¯ç”¨",
+"Saving..." => "正在ä¿å­˜",
"__language_name__" => "简体中文",
+"Security Warning" => "安全警告",
+"Cron" => "计划任务",
+"execute one task with each page loaded" => "为æ¯ä¸ªè£…入的页é¢æ‰§è¡Œä»»åŠ¡",
+"use systems cron service" => "实现系统 cron æœåŠ¡",
"Log" => "日志",
"More" => "更多",
"Add your App" => "添加应用",
"Select an App" => "选择一个应用",
+"See application page at apps.owncloud.com" => "查看在 app.owncloud.com 的应用程åºé¡µé¢",
"-licensed" => "-许å¯è¯",
"by" => "ç”±",
"Documentation" => "文档",
@@ -37,6 +50,7 @@
"Create" => "创建",
"Default Quota" => "默认é…é¢",
"Other" => "其它",
+"Group Admin" => "组管ç†",
"Quota" => "é…é¢",
"Delete" => "删除"
);
diff --git a/settings/personal.php b/settings/personal.php
index eb45c1b3aa8..82626526d57 100644
--- a/settings/personal.php
+++ b/settings/personal.php
@@ -1,70 +1,68 @@
-<?php
-/**
- * Copyright (c) 2011, Robin Appelman <icewind1991@gmail.com>
- * This file is licensed under the Affero General Public License version 3 or later.
- * See the COPYING-README file.
- */
-
-require_once('../lib/base.php');
-OC_Util::checkLoggedIn();
-
-// Highlight navigation entry
-OC_Util::addScript( 'settings', 'personal' );
-OC_Util::addStyle( 'settings', 'settings' );
-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');
-if (!isset($sharedInfo['size'])) {
- $sharedSize = 0;
-} else {
- $sharedSize = $sharedInfo['size'];
-}
-$used=$rootInfo['size']-$sharedSize;
-$free=OC_Filesystem::free_space();
-$total=$free+$used;
-if($total==0) $total=1; // prevent division by zero
-$relative=round(($used/$total)*10000)/100;
-
-$email=OC_Preferences::getValue(OC_User::getUser(), 'settings','email','');
-
-$lang=OC_Preferences::getValue( OC_User::getUser(), 'core', 'lang', OC_L10N::findLanguage() );
-$languageCodes=OC_L10N::findAvailableLanguages();
-sort ($languageCodes);
-
-//put the current language in the front
-unset($languageCodes[array_search($lang,$languageCodes)]);
-array_unshift($languageCodes,$lang);
-
-$languageNames=include 'languageCodes.php';
-$languages=array();
-foreach($languageCodes as $lang){
- $l=OC_L10N::get('settings',$lang);
- if(substr($l->t('__language_name__'),0,1)!='_'){//first check if the language name is in the translation file
- $languages[]=array('code'=>$lang,'name'=>$l->t('__language_name__'));
- }elseif(isset($languageNames[$lang])){
- $languages[]=array('code'=>$lang,'name'=>$languageNames[$lang]);
- }else{//fallback to language code
- $languages[]=array('code'=>$lang,'name'=>$lang);
- }
-}
-
-// 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('email',$email);
-$tmpl->assign('languages',$languages);
-
-$forms=OC_App::getForms('personal');
-$tmpl->assign('forms',array());
-foreach($forms as $form){
- $tmpl->append('forms',$form);
-}
-$tmpl->printPage();
-
-?> \ No newline at end of file
+<?php
+/**
+ * Copyright (c) 2011, Robin Appelman <icewind1991@gmail.com>
+ * This file is licensed under the Affero General Public License version 3 or later.
+ * See the COPYING-README file.
+ */
+
+require_once('../lib/base.php');
+OC_Util::checkLoggedIn();
+
+// Highlight navigation entry
+OC_Util::addScript( 'settings', 'personal' );
+OC_Util::addStyle( 'settings', 'settings' );
+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');
+if (!isset($sharedInfo['size'])) {
+ $sharedSize = 0;
+} else {
+ $sharedSize = $sharedInfo['size'];
+}
+$used=$rootInfo['size']-$sharedSize;
+$free=OC_Filesystem::free_space();
+$total=$free+$used;
+if($total==0) $total=1; // prevent division by zero
+$relative=round(($used/$total)*10000)/100;
+
+$email=OC_Preferences::getValue(OC_User::getUser(), 'settings','email','');
+
+$lang=OC_Preferences::getValue( OC_User::getUser(), 'core', 'lang', OC_L10N::findLanguage() );
+$languageCodes=OC_L10N::findAvailableLanguages();
+sort ($languageCodes);
+
+//put the current language in the front
+unset($languageCodes[array_search($lang,$languageCodes)]);
+array_unshift($languageCodes,$lang);
+
+$languageNames=include 'languageCodes.php';
+$languages=array();
+foreach($languageCodes as $lang){
+ $l=OC_L10N::get('settings',$lang);
+ if(substr($l->t('__language_name__'),0,1)!='_'){//first check if the language name is in the translation file
+ $languages[]=array('code'=>$lang,'name'=>$l->t('__language_name__'));
+ }elseif(isset($languageNames[$lang])){
+ $languages[]=array('code'=>$lang,'name'=>$languageNames[$lang]);
+ }else{//fallback to language code
+ $languages[]=array('code'=>$lang,'name'=>$lang);
+ }
+}
+
+// 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('email',$email);
+$tmpl->assign('languages',$languages);
+
+$forms=OC_App::getForms('personal');
+$tmpl->assign('forms',array());
+foreach($forms as $form){
+ $tmpl->append('forms',$form);
+}
+$tmpl->printPage();
diff --git a/settings/templates/admin.php b/settings/templates/admin.php
index 82ee7e84838..9ccab25516c 100644..100755
--- a/settings/templates/admin.php
+++ b/settings/templates/admin.php
@@ -4,24 +4,37 @@
* See the COPYING-README file.
*/
$levels=array('Debug','Info','Warning','Error','Fatal');
-
+?>
+
+<?php
+
if(!$_['htaccessworking']) {
- ?>
- <fieldset class="personalblock">
- <legend><strong><?php echo $l->t('Security Warning');?></strong></legend>
+?>
+<fieldset class="personalblock">
+ <legend><strong><?php echo $l->t('Security Warning');?></strong></legend>
+
+ <span class="securitywarning">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>
- <span class="securitywarning">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
+</fieldset>
+<?php
}
?>
-
<?php foreach($_['forms'] as $form){
echo $form;
};?>
+
+<fieldset class="personalblock" id="backgroundjobs">
+ <legend><strong><?php echo $l->t('Cron');?></strong></legend>
+ <input type="radio" name="mode" value="ajax" id="backgroundjobs_ajax" <?php if( $_['backgroundjobs_mode'] == "ajax" ){ echo 'checked="checked"'; } ?>>
+ <label for="backgroundjobs_ajax" title="<?php echo $l->t("execute one task with each page loaded"); ?>">AJAX</label><br />
+ <input type="radio" name="mode" value="webcron" id="backgroundjobs_webcron" <?php if( $_['backgroundjobs_mode'] == "webcron" ){ echo 'checked="checked"'; } ?>>
+ <label for="backgroundjobs_webcron" title="<?php echo $l->t("cron.php is registered at a webcron service"); ?>">Webcron</label><br />
+ <input type="radio" name="mode" value="cron" id="backgroundjobs_cron" <?php if( $_['backgroundjobs_mode'] == "cron" ){ echo 'checked="checked"'; } ?>>
+ <label for="backgroundjobs_cron" title="<?php echo $l->t("use systems cron service"); ?>">Cron</label><br />
+</fieldset>
+
<fieldset class="personalblock">
<legend><strong><?php echo $l->t('Log');?></strong></legend>
Log level: <select name='loglevel' id='loglevel'>
@@ -55,3 +68,10 @@ if(!$_['htaccessworking']) {
<?php endif; ?>
</fieldset>
+
+
+<p class="personalblock">
+ <strong>ownCloud</strong> <?php echo(OC_Util::getVersionString()); ?> <?php echo(OC_Util::getEditionString()); ?> (<?php echo(OC_Updater::ShowUpdatingHint()); ?>)<br />
+ Developed by the <a href="http://ownCloud.org/contact" target="_blank">ownCloud community</a>, the <a href="http://gitorious.org/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>.
+</p>
+
diff --git a/settings/templates/apps.php b/settings/templates/apps.php
index 7642ab7fb89..83d63b6b417 100644
--- a/settings/templates/apps.php
+++ b/settings/templates/apps.php
@@ -3,25 +3,31 @@
* 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>
<div id="controls">
- <a class="button" target="_blank" href="http://owncloud.org/dev/writing-apps/"><?php echo $l->t('Add your App');?></a>
+ <a class="button" target="_blank" href="http://owncloud.org/dev/apps/getting-started/"><?php echo $l->t('Add your App');?></a>
</div>
-<ul id="leftcontent">
+<ul id="leftcontent" class="applist">
<?php foreach($_['apps'] as $app):?>
- <li <?php if($app['active']) echo 'class="active"'?> data-id="<?php echo $app['id'] ?>">
- <a href="?appid=<?php echo $app['id'] ?>"><?php echo $app['name'] ?></a>
+ <li <?php if($app['active']) echo 'class="active"'?> data-id="<?php echo $app['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>
<span class="hidden">
<?php OC_JSON::encodedPrint($app,false) ?>
</span>
- <?php if(!$app['internal']) echo '<small class="externalapp">3rd party</small>' ?>
+ <?php if(!$app['internal']) echo '<small class="externalapp list">3rd party</small>' ?>
</li>
<?php endforeach;?>
</ul>
<div id="rightcontent">
+ <div class="appinfo">
<h3><strong><span class="name"><?php echo $l->t('Select an App');?></span></strong><span class="version"></span><small class="externalapp" style="visibility:hidden;"></small></h3>
<p class="description"></p>
<img src="" class="preview" />
- <p class="hidden"><span class="licence"></span><?php echo $l->t('-licensed');?> <?php echo $l->t('by');?> <span class="author"></span></p>
+ <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"><span class="licence"></span><?php echo $l->t('-licensed');?> <?php echo $l->t('by');?> <span class="author"></span></p>
<input class="enable hidden" type="submit" />
+ </div>
</div>
diff --git a/settings/templates/help.php b/settings/templates/help.php
index f9eb8615972..a53ec76d681 100644
--- a/settings/templates/help.php
+++ b/settings/templates/help.php
@@ -1,5 +1,5 @@
<?php /**
- * Copyright (c) 2011, Frank Karlitschek karlitschek@kde.org
+ * 2012 Frank Karlitschek frank@owncloud.org
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/?>
diff --git a/settings/templates/personal.php b/settings/templates/personal.php
index 014996a5b20..ee40120d724 100644
--- a/settings/templates/personal.php
+++ b/settings/templates/personal.php
@@ -55,10 +55,5 @@
echo $form;
};?>
-<p class="personalblock">
- <strong>ownCloud</strong> <?php echo(OC_Util::getVersionString()); ?> <?php echo(OC_Util::getEditionString()); ?> (<?php echo(OC_Updater::ShowUpdatingHint()); ?>)<br />
- Developed by the <a href="http://ownCloud.org/contact" target="_blank">ownCloud community</a>, the <a href="http://gitorious.org/owncloud" target="_blank">source code</a> is freely 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>.
-</p>
-
diff --git a/settings/templates/users.php b/settings/templates/users.php
index ea3fe777ffe..5298237f679 100644
--- a/settings/templates/users.php
+++ b/settings/templates/users.php
@@ -1,20 +1,27 @@
-<?php /**
+<?php
+/**
* Copyright (c) 2011, Robin Appelman <icewind1991@gmail.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
-
$allGroups=array();
foreach($_["groups"] as $group) {
- $allGroups[]=$group['name'];
+ $allGroups[] = $group['name'];
}
+$_['subadmingroups'] = $allGroups;
+$items = array_flip($_['subadmingroups']);
+unset($items['admin']);
+$_['subadmingroups'] = array_flip($items);
?>
-
+<script>
+var isadmin = <?php echo $_['isadmin']?'true':'false'; ?>;
+</script>
<div id="controls">
<form id="newuser">
- <input id="newusername" placeholder="<?php echo $l->t('Name')?>" /> <input
+ <input id="newusername" type="text" placeholder="<?php echo $l->t('Name')?>" /> <input
type="password" id="newuserpassword"
placeholder="<?php echo $l->t('Password')?>" /> <select
+ class="groupsselect"
id="newusergroups" data-placeholder="groups"
title="<?php echo $l->t('Groups')?>" multiple="multiple">
<?php foreach($_["groups"] as $group): ?>
@@ -27,6 +34,7 @@ foreach($_["groups"] as $group) {
<div class="quota">
<span><?php echo $l->t('Default Quota');?>:</span>
<div class="quota-select-wrapper">
+ <?php if((bool) $_['isadmin']): ?>
<select class='quota'>
<?php foreach($_['quota_preset'] as $preset):?>
<?php if($preset!='default'):?>
@@ -48,16 +56,29 @@ foreach($_["groups"] as $group) {
...
</option>
</select> <input class='quota-other'></input>
+ <?php endif; ?>
+ <?php if((bool) !$_['isadmin']): ?>
+ <select class='quota' disabled="disabled">
+ <option selected="selected">
+ <?php echo $_['default_quota'];?>
+ </option>
+ </select>
+ <?php endif; ?>
</div>
</div>
</div>
+<div id='notification'></div>
+
<table data-groups="<?php echo implode(', ',$allGroups);?>">
<thead>
<tr>
<th id='headerName'><?php echo $l->t('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']): ?>
+ <th id="headerSubAdmins"><?php echo $l->t('Group Admin'); ?></th>
+ <?php endif;?>
<th id="headerQuota"><?php echo $l->t( 'Quota' ); ?></th>
<th id="headerRemove">&nbsp;</th>
</tr>
@@ -68,9 +89,10 @@ foreach($_["groups"] as $group) {
<td class="name"><?php echo $user["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="set new password" title="set new password"/>
</td>
<td class="groups"><select
+ class="groupsselect"
data-username="<?php echo $user['name'] ;?>"
data-user-groups="<?php echo $user['groups'] ;?>"
data-placeholder="groups" title="<?php echo $l->t('Groups')?>"
@@ -82,6 +104,21 @@ foreach($_["groups"] as $group) {
<?php endforeach;?>
</select>
</td>
+ <?php if(is_array($_['subadmins']) || $_['subadmins']): ?>
+ <td class="subadmins"><select
+ class="subadminsselect"
+ data-username="<?php echo $user['name'] ;?>"
+ data-subadmin="<?php echo $user['subadmin'] ;?>"
+ data-placeholder="subadmins" title="<?php echo $l->t('Group Admin')?>"
+ multiple="multiple">
+ <?php foreach($_["subadmingroups"] as $group): ?>
+ <option value="<?php echo $group;?>">
+ <?php echo $group;?>
+ </option>
+ <?php endforeach;?>
+ </select>
+ </td>
+ <?php endif;?>
<td class="quota">
<div class="quota-select-wrapper">
<select class='quota-user'>
@@ -104,11 +141,19 @@ foreach($_["groups"] as $group) {
</select> <input class='quota-other'></input>
</div>
</td>
- <td class="remove"><?php if($user['name']!=OC_User::getUser()):?> <img
- alt="Delete" title="<?php echo $l->t('Delete')?>" class="svg action"
- src="<?php echo image_path('core','actions/delete.svg') ?>" /> <?php endif;?>
+ <td class="remove">
+ <?php if($user['name']!=OC_User::getUser()):?>
+ <a href="#" class="action delete" original-title="<?php echo $l->t('Delete')?>">
+ <img src="<?php echo image_path('core','actions/delete.svg') ?>" />
+ </a>
+ <?php endif;?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
+
+<!-- use a standard notification class / system for this message -->
+<?php if( $_["share_notice"] ):?>
+<h3 class="settingsNotice center"><?php echo $_["share_notice"]; ?></h3>
+<?php endif;?> \ No newline at end of file
diff --git a/settings/trans.png b/settings/trans.png
index e6920168bf2..ef57510d530 100644
--- a/settings/trans.png
+++ b/settings/trans.png
Binary files differ
diff --git a/settings/users.php b/settings/users.php
index 96515a90ce4..6f39059757a 100644
--- a/settings/users.php
+++ b/settings/users.php
@@ -6,22 +6,35 @@
*/
require_once('../lib/base.php');
-OC_Util::checkAdminUser();
+OC_Util::checkSubAdminUser();
// We have some javascript foo!
OC_Util::addScript( 'settings', 'users' );
OC_Util::addScript( 'core', 'multiselect' );
+// TODO Move script to core
+OC_Util::addScript('contacts', 'jquery.inview');
OC_Util::addStyle( 'settings', 'settings' );
OC_App::setActiveNavigationEntry( 'core_users' );
$users = array();
$groups = array();
-foreach( OC_User::getUsers() as $i ){
- $users[] = array( "name" => $i, "groups" => join( ", ", OC_Group::getUserGroups( $i ) ),'quota'=>OC_Preferences::getValue($i,'files','quota','default'));
+$isadmin = OC_Group::inGroup(OC_User::getUser(),'admin')?true:false;
+if($isadmin){
+ $accessiblegroups = OC_Group::getGroups();
+ $accessibleusers = OC_User::getUsers('', 30);
+ $subadmins = OC_SubAdmin::getAllSubAdmins();
+}else{
+ $accessiblegroups = OC_SubAdmin::getSubAdminsGroups(OC_User::getUser());
+ $accessibleusers = OC_Group::usersInGroups($accessiblegroups, '', 30);
+ $subadmins = false;
}
-foreach( OC_Group::getGroups() as $i ){
+foreach($accessibleusers as $i){
+ $users[] = array( "name" => $i, "groups" => join( ", ", /*array_intersect(*/OC_Group::getUserGroups($i)/*, OC_SubAdmin::getSubAdminsGroups(OC_User::getUser()))*/),'quota'=>OC_Preferences::getValue($i,'files','quota','default'),'subadmin'=>implode(', ',OC_SubAdmin::getSubAdminsGroups($i)));
+}
+
+foreach( $accessiblegroups as $i ){
// Do some more work here soon
$groups[] = array( "name" => $i );
}
@@ -33,12 +46,21 @@ foreach($quotaPreset as &$preset){
$defaultQuota=OC_Appconfig::getValue('files','default_quota','none');
+$shareNotice = '';
+
+if (\OC_App::isEnabled( "files_sharing" ) ) {
+
+ $shareNotice = 'Note: users may only share to groups that they belong to, and their members';
+
+}
+
$tmpl = new OC_Template( "settings", "users", "user" );
$tmpl->assign( "users", $users );
$tmpl->assign( "groups", $groups );
+$tmpl->assign( 'isadmin', (int) $isadmin);
+$tmpl->assign( 'subadmins', $subadmins);
+$tmpl->assign( 'numofgroups', count($accessiblegroups));
$tmpl->assign( 'quota_preset', $quotaPreset);
$tmpl->assign( 'default_quota', $defaultQuota);
+$tmpl->assign( 'share_notice', $shareNotice);
$tmpl->printPage();
-
-?>
-
diff --git a/status.php b/status.php
index 81f339fa53f..f314a3a1c6f 100644
--- a/status.php
+++ b/status.php
@@ -4,7 +4,7 @@
* ownCloud status page. usefull if you want to check from the outside if an owncloud installation exists
*
* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.org
+* @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
@@ -29,6 +29,3 @@ if(OC_Config::getValue('installed')==1) $installed='true'; else $installed='fals
$values=array('installed'=>$installed,'version'=>implode('.',OC_Util::getVersion()),'versionstring'=>OC_Util::getVersionString(),'edition'=>OC_Util::getEditionString());
echo(json_encode($values));
-
-
-?>
diff --git a/tests/data/logo-wide.png b/tests/data/logo-wide.png
index b2c16a0f60a..648cb7e6156 100644
--- a/tests/data/logo-wide.png
+++ b/tests/data/logo-wide.png
Binary files differ
diff --git a/tests/index.php b/tests/index.php
index ad98048a683..0be27ee3fd7 100644
--- a/tests/index.php
+++ b/tests/index.php
@@ -26,33 +26,64 @@ require_once 'simpletest/mock_objects.php';
require_once 'simpletest/collector.php';
require_once 'simpletest/default_reporter.php';
+$testSuiteName="ownCloud Unit Test Suite";
+
+// prepare the reporter
+if(OC::$CLI){
+ $reporter=new TextReporter;
+ $test=isset($_SERVER['argv'][1])?$_SERVER['argv'][1]:false;
+ if($test=='xml'){
+ $reporter= new XmlReporter;
+ $test=false;
+
+ if(isset($_SERVER['argv'][2])){
+ $testSuiteName=$testSuiteName." (".$_SERVER['argv'][2].")";
+ }
+ }
+}else{
+ $reporter=new HtmlReporter;
+ $test=isset($_GET['test'])?$_GET['test']:false;
+}
+
+// test suite instance
+$testSuite=new TestSuite($testSuiteName);
+
//load core test cases
-loadTests(dirname(__FILE__));
+loadTests(dirname(__FILE__), $testSuite, $test);
//load app test cases
+
+//
+// TODO: define a list of apps to be enabled + enable them
+//
+
$apps=OC_App::getEnabledApps();
foreach($apps as $app){
if(is_dir(OC::$SERVERROOT.'/apps/'.$app.'/tests')){
- loadTests(OC::$SERVERROOT.'/apps/'.$app.'/tests');
+ loadTests(OC::$SERVERROOT.'/apps/'.$app.'/tests', $testSuite, $test);
}
}
-function loadTests($dir=''){
- $test=isset($_GET['test'])?$_GET['test']:false;
+// run the suite
+if($testSuite->getSize()>0){
+ $testSuite->run($reporter);
+}
+
+// helper below
+function loadTests($dir,$testSuite, $test){
if($dh=opendir($dir)){
while($name=readdir($dh)){
if($name[0]!='.'){//no hidden files, '.' or '..'
$file=$dir.'/'.$name;
if(is_dir($file)){
- loadTests($file);
+ loadTests($file, $testSuite, $test);
}elseif(substr($file,-4)=='.php' and $file!=__FILE__){
$name=getTestName($file);
if($test===false or $test==$name or substr($name,0,strlen($test))==$test){
- $testCase=new TestSuite($name);
- $testCase->addFile($file);
- if($testCase->getSize()>0){
- $testCase->run(new HtmlReporter());
- }
+ $extractor = new SimpleFileLoader();
+ $loadedSuite=$extractor->load($file);
+ if ($loadedSuite->getSize() > 0)
+ $testSuite->add($loadedSuite);
}
}
}
diff --git a/tests/lib/archive.php b/tests/lib/archive.php
index 1779127c932..1711be58e01 100644
--- a/tests/lib/archive.php
+++ b/tests/lib/archive.php
@@ -130,4 +130,12 @@ abstract class Test_Archive extends UnitTestCase {
$this->instance->remove('target.txt');
$this->assertFalse($this->instance->fileExists('target.txt'));
}
+ public function testRecursive(){
+ $dir=OC::$SERVERROOT.'/apps/files_archive/tests/data';
+ $this->instance=$this->getNew();
+ $this->instance->addRecursive('/dir',$dir);
+ $this->assertTrue($this->instance->fileExists('/dir/lorem.txt'));
+ $this->assertTrue($this->instance->fileExists('/dir/data.zip'));
+ $this->assertTrue($this->instance->fileExists('/dir/data.tar.gz'));
+ }
}
diff --git a/tests/lib/cache.php b/tests/lib/cache.php
new file mode 100644
index 00000000000..511999be956
--- /dev/null
+++ b/tests/lib/cache.php
@@ -0,0 +1,79 @@
+<?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.
+ */
+
+abstract class Test_Cache extends UnitTestCase {
+ /**
+ * @var OC_Cache cache;
+ */
+ protected $instance;
+
+ public function tearDown(){
+ $this->instance->clear();
+ }
+
+ function testSimple(){
+ $this->assertNull($this->instance->get('value1'));
+ $this->assertFalse($this->instance->hasKey('value1'));
+
+ $value='foobar';
+ $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');
+ $value='ipsum lorum';
+ $this->instance->set('value1',$value);
+ $received=$this->instance->get('value1');
+ $this->assertEqual($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->assertFalse($this->instance->hasKey('not_set'));
+ $this->assertNull($this->instance->get('not_set'),'Unset value not equal to null');
+
+ $this->assertTrue($this->instance->remove('value1'));
+ $this->assertFalse($this->instance->hasKey('value1'));
+ }
+
+ function testClear(){
+ $value='ipsum lorum';
+ $this->instance->set('1_value1',$value);
+ $this->instance->set('1_value2',$value);
+ $this->instance->set('2_value1',$value);
+ $this->instance->set('3_value1',$value);
+
+ $this->assertTrue($this->instance->clear('1_'));
+ $this->assertFalse($this->instance->hasKey('1_value1'));
+ $this->assertFalse($this->instance->hasKey('1_value2'));
+ $this->assertTrue($this->instance->hasKey('2_value1'));
+ $this->assertTrue($this->instance->hasKey('3_value1'));
+
+ $this->assertTrue($this->instance->clear());
+ $this->assertFalse($this->instance->hasKey('1_value1'));
+ $this->assertFalse($this->instance->hasKey('1_value2'));
+ $this->assertFalse($this->instance->hasKey('2_value1'));
+ $this->assertFalse($this->instance->hasKey('3_value1'));
+ }
+
+ function testTTL(){
+ $value='foobar';
+ $this->instance->set('value1',$value,1);
+ $value2='foobar';
+ $this->instance->set('value2',$value2);
+ sleep(2);
+ $this->assertFalse($this->instance->hasKey('value1'));
+ $this->assertNull($this->instance->get('value1'));
+ $this->assertTrue($this->instance->hasKey('value2'));
+ $this->assertEqual($value2,$this->instance->get('value2'));
+ }
+}
diff --git a/tests/lib/cache/apc.php b/tests/lib/cache/apc.php
new file mode 100644
index 00000000000..ab8eb188664
--- /dev/null
+++ b/tests/lib/cache/apc.php
@@ -0,0 +1,36 @@
+<?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_Cache_APC extends Test_Cache {
+ function skip() {
+ $this->skipUnless(function_exists('apc_store'));
+ }
+
+ public function setUp(){
+ $this->instance=new OC_Cache_APC();
+ }
+
+ function testTTL(){
+ // ttl doesn't work correctly in the same request
+ // see https://bugs.php.net/bug.php?id=58084
+ }
+}
diff --git a/tests/lib/cache/file.php b/tests/lib/cache/file.php
new file mode 100644
index 00000000000..28778efb68c
--- /dev/null
+++ b/tests/lib/cache/file.php
@@ -0,0 +1,63 @@
+<?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_Cache_File extends Test_Cache {
+ private $user;
+
+ function skip() {
+ //$this->skipUnless(OC_User::isLoggedIn());
+ }
+
+ public function setUp(){
+ //clear all proxies and hooks so we can do clean testing
+ OC_FileProxy::clearProxies();
+ OC_Hook::clear('OC_Filesystem');
+
+ //enable only the encryption hook if needed
+ if(OC_App::isEnabled('files_encryption')){
+ OC_FileProxy::register(new OC_FileProxy_Encryption());
+ }
+
+ //set up temporary storage
+ OC_Filesystem::clearMounts();
+ OC_Filesystem::mount('OC_Filestorage_Temporary',array(),'/');
+
+ OC_User::clearBackends();
+ OC_User::useBackend(new OC_User_Dummy());
+
+ //login
+ OC_User::createUser('test', 'test');
+
+ $this->user=OC_User::getUser();
+ OC_User::setUserId('test');
+
+ //set up the users dir
+ $rootView=new OC_FilesystemView('');
+ $rootView->mkdir('/test');
+
+ $this->instance=new OC_Cache_File();
+ }
+
+ public function tearDown(){
+ OC_User::setUserId($this->user);
+ }
+}
diff --git a/tests/lib/cache/xcache.php b/tests/lib/cache/xcache.php
new file mode 100644
index 00000000000..cc2077076ce
--- /dev/null
+++ b/tests/lib/cache/xcache.php
@@ -0,0 +1,35 @@
+<?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_Cache_XCache extends Test_Cache {
+ function skip() {
+ $this->skipUnless(function_exists('xcache_get'));
+ }
+
+ public function setUp(){
+ $this->instance=new OC_Cache_XCache();
+ }
+
+ function testTTL(){
+ // ttl doesn't work correctly in the same request
+ }
+}
diff --git a/tests/lib/filestorage.php b/tests/lib/filestorage.php
index f71b658253a..0a8715600d5 100644
--- a/tests/lib/filestorage.php
+++ b/tests/lib/filestorage.php
@@ -31,13 +31,13 @@ abstract class Test_FileStorage extends UnitTestCase {
*/
public function testRoot(){
$this->assertTrue($this->instance->file_exists('/'),'Root folder does not exist');
- $this->assertTrue($this->instance->is_readable('/'),'Root folder is not readable');
+ $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('/'));
//without this, any further testing would be useless, not an acutal requirement for filestorage though
- $this->assertTrue($this->instance->is_writable('/'),'Root folder is not writable');
+ $this->assertTrue($this->instance->isUpdatable('/'),'Root folder is not writable');
}
public function testDirectories(){
@@ -50,8 +50,8 @@ abstract class Test_FileStorage extends UnitTestCase {
$this->assertFalse($this->instance->is_file('/folder'));
$this->assertEqual('dir',$this->instance->filetype('/folder'));
$this->assertEqual(0,$this->instance->filesize('/folder'));
- $this->assertTrue($this->instance->is_readable('/folder'));
- $this->assertTrue($this->instance->is_writable('/folder'));
+ $this->assertTrue($this->instance->isReadable('/folder'));
+ $this->assertTrue($this->instance->isUpdatable('/folder'));
$dh=$this->instance->opendir('/');
$content=array();
@@ -129,19 +129,32 @@ abstract class Test_FileStorage extends UnitTestCase {
$this->assertEqual(file_get_contents($textFile),$this->instance->file_get_contents('/target.txt'));
}
- public function testLocalFile(){
+ public function testLocal(){
$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->instance->mkdir('/folder');
+ $this->instance->file_put_contents('/folder/lorem.txt',file_get_contents($textFile));
+ $this->instance->file_put_contents('/folder/bar.txt','asd');
+ $this->instance->mkdir('/folder/recursive');
+ $this->instance->file_put_contents('/folder/recursive/file.txt','foo');
+ $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');
}
public function testStat(){
$textFile=OC::$SERVERROOT.'/tests/data/lorem.txt';
$ctimeStart=time();
$this->instance->file_put_contents('/lorem.txt',file_get_contents($textFile));
- $this->assertTrue($this->instance->is_readable('/lorem.txt'));
+ $this->assertTrue($this->instance->isReadable('/lorem.txt'));
$ctimeEnd=time();
$cTime=$this->instance->filectime('/lorem.txt');
$mTime=$this->instance->filemtime('/lorem.txt');
@@ -149,6 +162,9 @@ abstract class Test_FileStorage extends UnitTestCase {
$this->assertTrue(($ctimeStart-1)<=$cTime);
$this->assertTrue($cTime<=($ctimeEnd+1));
}
+ $this->assertTrue($this->instance->hasUpdated('/lorem.txt',$ctimeStart-1));
+ $this->assertTrue($this->instance->hasUpdated('/',$ctimeStart-1));
+
$this->assertTrue(($ctimeStart-1)<=$mTime);
$this->assertTrue($mTime<=($ctimeEnd+1));
$this->assertEqual(filesize($textFile),$this->instance->filesize('/lorem.txt'));
@@ -168,6 +184,8 @@ abstract class Test_FileStorage extends UnitTestCase {
$this->assertTrue(($mtimeStart-1)<=$mTime);
$this->assertTrue($mTime<=($mtimeEnd+1));
$this->assertEqual($cTime,$originalCTime);
+
+ $this->assertTrue($this->instance->hasUpdated('/lorem.txt',$mtimeStart-1));
if($this->instance->touch('/lorem.txt',100)!==false){
$mTime=$this->instance->filemtime('/lorem.txt');
@@ -184,6 +202,9 @@ abstract class Test_FileStorage extends UnitTestCase {
$mTime=$this->instance->filemtime('/lorem.txt');
$this->assertTrue(($mtimeStart-1)<=$mTime);
$this->assertTrue($mTime<=($mtimeEnd+1));
+
+ $this->instance->unlink('/lorem.txt');
+ $this->assertTrue($this->instance->hasUpdated('/',$mtimeStart-1));
}
public function testSearch(){
diff --git a/tests/lib/filesystem.php b/tests/lib/filesystem.php
index 3e28d8c06e5..72af0835788 100644
--- a/tests/lib/filesystem.php
+++ b/tests/lib/filesystem.php
@@ -59,6 +59,18 @@ class Test_Filesystem extends UnitTestCase{
$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"));
+ }
+ }
}
?> \ No newline at end of file
diff --git a/tests/lib/share/backend.php b/tests/lib/share/backend.php
new file mode 100644
index 00000000000..4ee59963d5d
--- /dev/null
+++ b/tests/lib/share/backend.php
@@ -0,0 +1,69 @@
+<?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/>.
+*/
+
+class Test_Share_Backend implements OCP\Share_Backend {
+
+ const FORMAT_SOURCE = 0;
+ const FORMAT_TARGET = 1;
+ const FORMAT_PERMISSIONS = 2;
+
+ private $testItem1 = 'test.txt';
+ private $testItem2 = 'share.txt';
+
+ public function isValidSource($itemSource, $uidOwner) {
+ if ($itemSource == $this->testItem1 || $itemSource == $this->testItem2) {
+ return true;
+ }
+ }
+
+ public function generateTarget($itemSource, $shareWith, $exclude = null) {
+ // Always make target be test.txt to cause conflicts
+ $target = 'test.txt';
+ if (isset($exclude)) {
+ $pos = strrpos($target, '.');
+ $name = substr($target, 0, $pos);
+ $ext = substr($target, $pos);
+ $append = '';
+ $i = 1;
+ while (in_array($name.$append.$ext, $exclude)) {
+ $append = $i;
+ $i++;
+ }
+ $target = $name.$append.$ext;
+ }
+ return $target;
+ }
+
+ public function formatItems($items, $format, $parameters = null) {
+ $testItems = array();
+ foreach ($items as $item) {
+ if ($format == self::FORMAT_SOURCE) {
+ $testItems[] = $item['item_source'];
+ } else if ($format == self::FORMAT_TARGET) {
+ $testItems[] = $item['item_target'];
+ } else if ($format == self::FORMAT_PERMISSIONS) {
+ $testItems[] = $item['permissions'];
+ }
+ }
+ return $testItems;
+ }
+
+}
diff --git a/tests/lib/share/share.php b/tests/lib/share/share.php
new file mode 100644
index 00000000000..785591829de
--- /dev/null
+++ b/tests/lib/share/share.php
@@ -0,0 +1,380 @@
+<?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/>.
+*/
+
+class Test_Share extends UnitTestCase {
+
+ protected $itemType;
+ protected $userBackend;
+ protected $user1;
+ protected $user2;
+ protected $groupBackend;
+ protected $group1;
+ protected $group2;
+
+
+ public function setUp() {
+ OC_User::clearBackends();
+ OC_User::useBackend('dummy');
+ $this->user1 = uniqid('user_');
+ $this->user2 = uniqid('user_');
+ $this->user3 = uniqid('user_');
+ $this->user4 = uniqid('user_');
+ OC_User::createUser($this->user1, 'pass');
+ OC_User::createUser($this->user2, 'pass');
+ OC_User::createUser($this->user3, 'pass');
+ OC_User::createUser($this->user4, 'pass');
+ OC_User::setUserId($this->user1);
+ OC_Group::clearBackends();
+ OC_Group::useBackend(new OC_Group_Dummy);
+ $this->group1 = uniqid('group_');
+ $this->group2 = uniqid('group_');
+ OC_Group::createGroup($this->group1);
+ OC_Group::createGroup($this->group2);
+ OC_Group::addToGroup($this->user1, $this->group1);
+ OC_Group::addToGroup($this->user2, $this->group1);
+ OC_Group::addToGroup($this->user3, $this->group1);
+ OC_Group::addToGroup($this->user2, $this->group2);
+ OC_Group::addToGroup($this->user4, $this->group2);
+ OCP\Share::registerBackend('test', 'Test_Share_Backend');
+ }
+
+ public function tearDown() {
+ $query = OC_DB::prepare('DELETE FROM *PREFIX*share WHERE item_type = ?');
+ $query->execute(array('test'));
+ }
+
+ public function testShareInvalidShareType() {
+ $this->expectException(new Exception('Share type foobar is not valid for test.txt'));
+ OCP\Share::shareItem('test', 'test.txt', 'foobar', $this->user2, OCP\Share::PERMISSION_READ);
+ }
+
+ public function testInvalidItemType() {
+ $message = 'Sharing backend for foobar not found';
+ try {
+ OCP\Share::shareItem('foobar', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+ try {
+ OCP\Share::getItemsSharedWith('foobar');
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+ try {
+ OCP\Share::getItemSharedWith('foobar', 'test.txt');
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+ try {
+ OCP\Share::getItemSharedWithBySource('foobar', 'test.txt');
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+ try {
+ OCP\Share::getItemShared('foobar', 'test.txt');
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+ try {
+ OCP\Share::unshare('foobar', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+ try {
+ OCP\Share::setPermissions('foobar', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_UPDATE);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+ }
+
+ public function testShareWithUser() {
+ // Invalid shares
+ $message = 'Sharing test.txt failed, because the user '.$this->user1.' is the item owner';
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+ $message = 'Sharing test.txt failed, because the user foobar does not exist';
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, 'foobar', OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+ $message = 'Sharing foobar failed, because the sharing backend for test could not find its source';
+ try {
+ OCP\Share::shareItem('test', 'foobar', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Valid share
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ));
+ $this->assertEqual(OCP\Share::getItemShared('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
+
+ // Attempt to share again
+ OC_User::setUserId($this->user1);
+ $message = 'Sharing test.txt failed, because this item is already shared with '.$this->user2;
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Attempt to share back
+ OC_User::setUserId($this->user2);
+ $message = 'Sharing test.txt failed, because the user '.$this->user1.' is the original sharer';
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Unshare
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2));
+
+ // Attempt reshare without share permission
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ));
+ OC_User::setUserId($this->user2);
+ $message = 'Sharing test.txt failed, because resharing is not allowed';
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Owner grants share and update permission
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE | OCP\Share::PERMISSION_SHARE));
+
+ // Attempt reshare with escalated permissions
+ OC_User::setUserId($this->user2);
+ $message = 'Sharing test.txt failed, because the permissions exceed permissions granted to '.$this->user2;
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_DELETE);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Valid reshare
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE));
+ $this->assertEqual(OCP\Share::getItemShared('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
+ OC_User::setUserId($this->user3);
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE));
+
+ // Attempt to escalate permissions
+ OC_User::setUserId($this->user2);
+ $message = 'Setting permissions for test.txt failed, because the permissions exceed permissions granted to '.$this->user2;
+ try {
+ OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_DELETE);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Remove update permission
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_SHARE));
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_SHARE));
+ OC_User::setUserId($this->user3);
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ));
+
+ // Remove share permission
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ));
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ));
+ OC_User::setUserId($this->user3);
+ $this->assertFalse(OCP\Share::getItemSharedWith('test', 'test.txt'));
+
+ // Reshare again, and then have owner unshare
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_SHARE));
+ OC_User::setUserId($this->user2);
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\Share::PERMISSION_READ));
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2));
+ OC_User::setUserId($this->user2);
+ $this->assertFalse(OCP\Share::getItemSharedWith('test', 'test.txt'));
+ OC_User::setUserId($this->user3);
+ $this->assertFalse(OCP\Share::getItemSharedWith('test', 'test.txt'));
+
+ // Attempt target conflict
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ));
+ OC_User::setUserId($this->user3);
+ $this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ));
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test.txt', 'test1.txt'));
+
+ // Remove user
+ OC_User::deleteUser($this->user1);
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test1.txt'));
+ }
+
+ public function testShareWithGroup() {
+ // Invalid shares
+ $message = 'Sharing test.txt failed, because the group foobar does not exist';
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, 'foobar', OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+ $message = 'Sharing test.txt failed, because '.$this->user1.' is not a member of the group '.$this->group2;
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group2, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Valid share
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\Share::PERMISSION_READ));
+ $this->assertEqual(OCP\Share::getItemShared('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
+ OC_User::setUserId($this->user3);
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
+
+ // Attempt to share again
+ OC_User::setUserId($this->user1);
+ $message = 'Sharing test.txt failed, because this item is already shared with '.$this->group1;
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Attempt to share back to owner of group share
+ OC_User::setUserId($this->user2);
+ $message = 'Sharing test.txt failed, because the user '.$this->user1.' is the original sharer';
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Attempt to share back to group
+ $message = 'Sharing test.txt failed, because this item is already shared with '.$this->group1;
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Attempt to share back to member of group
+ $message ='Sharing test.txt failed, because this item is already shared with '.$this->user3;
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Unshare
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1));
+
+ // Valid share with same person - user then group
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_DELETE | OCP\Share::PERMISSION_SHARE));
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE));
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test.txt'));
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE | OCP\Share::PERMISSION_DELETE | OCP\Share::PERMISSION_SHARE));
+ OC_User::setUserId($this->user3);
+ $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test.txt'));
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE));
+
+ // Valid reshare
+ OC_User::setUserId($this->user2);
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, OCP\Share::PERMISSION_READ));
+ OC_User::setUserId($this->user4);
+ $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test.txt'));
+
+ // Unshare from user only
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2));
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE));
+ OC_User::setUserId($this->user4);
+ $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array());
+
+ // Valid share with same person - group then user
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_DELETE));
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test.txt'));
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE | OCP\Share::PERMISSION_DELETE));
+
+ // Unshare from group only
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1));
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_DELETE));
+
+ // Attempt user specific target conflict
+ OC_User::setUserId($this->user3);
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_SHARE));
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test.txt', 'test1.txt'));
+
+// // Valid reshare TODO Broken
+// $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_SHARE));
+// OC_User::setUserId($this->user4);
+// $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test1.txt'));
+//
+// // Remove user from group
+// OC_Group::removeFromGroup($this->user2, $this->group1);
+// OC_User::setUserId($this->user2);
+// $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test.txt'));
+// OC_User::setUserId($this->user4);
+// $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array());
+
+ // Add user to group
+
+ // Remove group
+ }
+
+}
diff --git a/tests/lib/user/backend.php b/tests/lib/user/backend.php
index 5dab5afb186..984249e84eb 100644
--- a/tests/lib/user/backend.php
+++ b/tests/lib/user/backend.php
@@ -20,6 +20,16 @@
*
*/
+/**
+ * Abstract class to provide the basis of backend-specific unit test classes.
+ *
+ * All subclasses MUST assign a backend property in setUp() which implements
+ * user operations (add, remove, etc.). Test methods in this class will then be
+ * run on each separate subclass and backend therein.
+ *
+ * For an example see /tests/lib/user/dummy.php
+ */
+
abstract class Test_User_Backend extends UnitTestCase {
/**
* @var OC_User_Backend $backend
diff --git a/tests/lib/user/database.php b/tests/lib/user/database.php
index b2fcce93c5b..f484ffa78f7 100644
--- a/tests/lib/user/database.php
+++ b/tests/lib/user/database.php
@@ -21,7 +21,6 @@
*/
class Test_User_Database extends Test_User_Backend {
- private $user=array();
/**
* get a new unique user name
* test cases can override this in order to clean up created user
diff --git a/webapps.php b/webapps.php
deleted file mode 100644
index 99553fa8ef0..00000000000
--- a/webapps.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-
-/**
-* ownCloud status page. usefull if you want to check from the outside if an owncloud installation exists
-*
-* @author Frank Karlitschek
-* @copyright 2010 Frank Karlitschek karlitschek@kde.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/>.
-*
-*/
-
-$RUNTIME_NOAPPS = TRUE; //no apps, yet
-
-require_once('lib/base.php');
-
-
-//valid user account
-if(isset($_SERVER['PHP_AUTH_USER'])) $authuser=$_SERVER['PHP_AUTH_USER']; else $authuser='';
-if(isset($_SERVER['PHP_AUTH_PW'])) $authpw=$_SERVER['PHP_AUTH_PW']; else $authpw='';
-
-if(!OC_User::login($authuser,$authpw)){
- header('WWW-Authenticate: Basic realm="your valid user account"');
- header('HTTP/1.0 401 Unauthorized');
- exit;
-}else{
-
- $apps=OC_App::getEnabledApps();
- $values=array();
- foreach($apps as $app) {
- $info=OC_App::getAppInfo($app);
- if(isset($info['standalone'])) {
- $newvalue=array('name'=>$info['name'],'url'=>OC_Helper::linkToAbsolute($app,''),'icon'=>'');
- $values[]=$newvalue;
- }
-
- }
-
- echo(json_encode($values));
- exit;
-
-
-}
-
-?>